将新浪微博 WeiboSDK 桥接集成到用Swift语言编写的iOS App

昨日女神高圆圆嫁到了台湾去,各位屌丝粉丝哭晕在厕所。别说,昨夜还真梦到了女神。于是今日发奋图强,继续进行编程工作–集成微博SDK到我的Swift程序中,用于微博授权登录。

前年曾经做过一次集成,那时还是ObjectiveC语言的天下,而今日Swift语言已成大势所趋。
由于iOS SDK是用ObjectiveC写成,在Swift中要用到语言桥接。

由于文档与代码脱节,自己摸索半天,还是遇到很多坑。特别是链接期直接抛异常出来,比如'NSInvalidArgumentException', reason: '-[__NSDictionaryM weibosdk_WBSDKJSONString]: unrecognized selector sent to instance,多是找不到链接库导致。

完整解决方案:

Read More

银行中的跨国研发团队如何快速交付

在互联网大潮中,金融企业也越来越多地直面互联网金融的冲击。传统的产品设计和发布周期显然已经跟不上当下快速发展的消费市场。无论中资还是外资各大银行,都已经纷纷上马移动金融产品,并且开始采用敏捷开发的模式,以达到快速发布,灵活调整的目的。
本案例向大家分享某银行的跨国研发团队是如何达到快速交付移动金融产品的。

一、引言

该银行组建了单独的团队来研发新一代的手机银行产品,团队主要分布在中国和新加坡,在马来西亚和印度也有部分人员。手机银行的业务逻辑和关联系统基于原有的网上银行产品,但用户体验及页面设计都要另起炉灶,试图对不同国家的业务提供统一的用户体验。

对于一个全新招聘的跨国团队,采用大家没用过的敏捷方法来研发一款创新的手机银行产品,这个“三新”项目看起来就是一个不可能完成的挑战。

Read More

Coding Kata-网球计分 tennis

Coding Kata是一种编程练习方式,针对某个题目反复进行操练,达到熟能生巧的目的。
一般会通过TDD的方式进行。

这里是一个用Java来编写的网球计分程序,题目详见http://codingdojo.org/cgi-bin/index.pl?KataTennis

用到的工具:Mac上QuickTime、IntelliJ、iTunes

国内有一个kata接力活动,鼓励大家把自己的操练录制视频发出来共享和交流。

更多操练题目:

骑士周游-马踏棋盘问题(A Knight's Journey)

看到 @大城小胖 做了个H5游戏:马踏棋盘,于是想起研究一下这个算法。

题目是这样的:国际象棋的棋盘为8*8的方格棋盘,将“马”放在任意指定的方格中,按照“马”走棋的规则将“马”进行移动。要求每个方格只能进入一次,最终使得“马”走遍棋盘64个方格。(N=8的情况)

我用python实现了这个算法,其中用到了回溯法,并用贪心法进行优化,以防递归深度太深而溢出。当找到一个解就停止递归。

不过这个解的最后一步与初始位置难以重合,而@大城小胖 的游戏中却要求马最后要回到初始位置,因此算法还要进化

Read More

Spotify的敏捷工程文化

Spotify是继Pandora之后,国外第二大音乐媒体网站。上一篇
Spotify的新型敏捷矩阵组织:部落、分队、分会和协会出了以后,很多人对Spotify的敏捷组织形式非常感兴趣。这里@申导 抢鲜给大家带来第二部分,关于Spotify的敏捷工程文化

第一部分主要提到基于敏捷原则,将人按照小分队Squad的方式来组织,松耦合但紧密联盟(Align)。通过内部代码开源,鼓励“异花传粉”。通过架构解耦、特性开关等手段来做到频密的小规模发布。借助自助的发布和部署服务,减少人们之间的任务交接。所有一切都关于“人”,因此组织更加要关注激励、信任与社区文化,而非等级结构或控制。

第二部分讲的是关于失败,用Spotify的创始人Daniel的话说就是,“我们要比其它人更快地犯错误”。因为失败意味着学习,因此更快地失败就意味着更快地学习,更快地改进。

Read More

Python函数式编程

函数式编程

如果程序中的函数仅接受输入并产生输出,即输出只依赖于输入,内部数据不可变,避免保存程序状态,用同样的输入值反复调用可以得到相同的结果,那么这种编程范式就称为函数式编程(Functional Programming,简称FP,又称泛函编程)

这种风格也称声明式编程(Declarative Programming),与之相对的是指令式编程(Imperative Programming),后者中的对象会不断修改自身状态。函数式编程强调程序的执行结果比执行过程更重要,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。

函数编程语言最重要的基础是λ演算(lambda calculus),函数可以像数值一样被赋值于变量,还可以作为其他函数的输入(引数)和输出(传出值)进行传递。

函数式编程历史悠久,最古老的例子莫过于1958年被创造出来的LISP了。而随着程序结构复杂,面向对象编程大行其道。近年来,简洁而且特别适合计算任务的函数式编程又重新崛起,不仅仅是纯粹的函数式语言如Haskell、Clojure、Elixir等,各种流行语言javascripts、python、Objective-C、C#、Swift甚至Java都纷纷吸收函数式编程的部分形式。而且,不仅仅是计算任务,近年还出现了用FP编写的UI应用程序,如LightTable等。

Paul Graham在《黑客与画家》一书中写道:同样功能的程序,极端情况下,Lisp代码的长度可能是C代码的二十分之一。

本文作者@申导 主要采用Python语言为例,是因为它虽然不是纯粹的FP,但Python能够胜任各种编程形式,简洁优雅,通俗易懂,语法接近于Java/C++,特别适合从主流语言转过来的学习者。

Read More

天津IT公司大起底第#1弹--颐博游戏5Ebo

天津,简称津,中华人民共和国直辖市、中国国家中心城市、中国北方经济中心、环渤海地区经济中心、中国北方国际航运中心、中国北方国际物流中心、国际港口城市和生态城市、国际航运融资中心、中国中医药研发中心、亚太区域海洋仪器检测评价中心,同时也是夏季达沃斯论坛常驻举办城市。凭借着拥有中国北方最大的港口,天津以其丰富的海洋资源和四通八达的便利交通资源,辐射着京、冀、鲁、豫、内蒙等多个省市、自治区,在传统行业特别是制造业和物流方面中占据着重要的地位,堪称“老龙头”。

Read More

管理3.0工作坊在QClub天津软件沙龙成功举办

2014年8月31日,由QClub冠名、天津软件沙龙承办的管理3.0工作坊成功举办。
同时,“洛宽庭”也提供了优雅的场地和爽口的西瓜给大家。

很多基层人员认为敏捷不需要管理,觉得敏捷和所谓的“管理”相差太远,所以对即将到来的敏捷热烈拥抱,自组织了嘛,不用管了。很多管理人员认为敏捷只是“压迫”员工的另一种手段而已,他们觉得敏捷不是“快”吗,不管用什么方法,更少的人员投入,更多的功能产出,在限定的时间内就是好的。但他们在团队应用敏捷的过程中发现他们的管理工作量也变大了。

可以说基层和管理人员都错了,我们大家只能接受我们希望看到得内容。但究竟什么是敏捷管理?敏捷管理对管理者或团队有何期望?有何挑战?管理3.0会给出一些答案。
你准备好面对了吗?

Read More