国庆长假已经接近尾声了,那么,伴随着国庆的结束,这系列文章也将告一段落。前面两篇里,我们更多的都是在关注设计方面的东西,设计本身就很虚无,难以琢磨。所以,本篇将重点介绍一些实现细节,一些能够实实在在解决问题的策略。

阅读全文 »

在上一篇博文里,我们将最基础的消息通讯组件打磨了一下,并且为了节约开发时间,我们还量身定制了一款代码生成工具。本篇不会再纠结于底层的相关细节,而是将重心放置在高层,乃至整体的一个宏观设计和分析。

软件开发是门很有趣的艺术,如果你真的用心去体会它。

阅读全文 »

在前一段时间里,我曾就TeamTalk和Telegram两款Mac下的IM软件的架构设计作了些许分析,对其亮点和不足之处给出了自己的见解。IM本身就是一个比较复杂的应用,要想做好必须是要花费一点精力的,特别是对细节的把握。倘若服务端设计本身不够理想,客户端又受限于某种并不如人愿的基础库,加之工期逼赶,家事繁忙,似乎一切天时地利都不在时,如何做出一个让自己满意的IM呢?

本文就上述并非虚构的上下文中,带领大家突破这重重枷锁,重塑架构设计,还你一个干净明了的即时通讯。技术在于分享,我并不觉得需要有任何保留,小伙伴们,拭目以待吧!

阅读全文 »

Swift,已经出来一年多了,想必不少人都曾对它抱着观望的态度,如果现在的你还是这样的态度,那么是时候去改变了。作为一个年龄比我还大的语言————Objective-C,是时候淡出历史的舞台了,有人说Objective-CSwift会并存,但我觉得,短期内会这样,从长远的角度来看,并存的可能性并不大。毕竟,它们不是CC++这样的关系,它们更像DelphiC#这样的存在。从可维护的角度来说,并存的代价比较大,所以,对于Objective-C,放手吧。

作为一个绝对现代化的编程语言,Swift集合了当下众多流行语言的特性,这与保守的Objective-C产生了鲜明的对比。如果你还在犹豫踌躇中,那么就让本文带你领略下新欢的风骚,这一切,你值得拥有!

阅读全文 »

上一篇博文的最后提出,如果不出意外,这一篇就是用来介绍telegram的TL-Language,那么我的确也没出什么意外,所以这一篇就兑现这样的承诺吧!

TL-Language是telegram用来描述MTProto的一种自定义语言,不难看出,能将协议的描述定义成一门语言,这也足够说明了telegram的逼格。其存在的意义,类似基于SOAP协议的Web Service用来描述服务元数据的XML Scheme,但又有不同,目前的TL-Language仅仅只能用来作“描述”作用,最终通讯还是序列化成二进制流,并且也没有服务元数据这么一说。

这一次我们不管通讯,不管架构,只是单纯的看看这门语言吧!

阅读全文 »

上回我们对TeamTalk做了一个比较详细的架构分析,并得到了蘑菇街的官方回复,这种态度还是值得很多公司技术运营学习的。本打算对Telegram的Mac客户端也做一次架构分析的,但发现它的源码比较杂乱,里面混合很多有用没用的文件,另外它的抽象方式也是非常奇怪,继承体系也不是很合理,大致看了下,我就决定放弃了。而无意间却让我点开了它里面所依赖的一个Sub Module:MTProtoKit,我发现这个项目和Mac客户端项目完全是两个水准,所以,我决定单独把它拿出来做次分析。

首先,你应该要知道什么是Telegram,它和TeamTalk一样,都是开源的IM,百度搜索一下会有一些关于它的介绍。以下是和本篇博客有关的地址链接:

我说过,要想提高自身的设计能力,阅读开源项目是很好的途径。在分析别人源码的过程中,我们可以汲取到一些其它的思想,架构设计这条路是没有止境的,我们唯有不断学习,才能成为更好的自己!那么,我们开始本次的分析之旅吧!

阅读全文 »

这个周末本打算做点更有意义的事情,但,觉得花点时间对这个开源的IM客户端进行一番分析或许会对后续的工作内容有点帮助。那么,先安抚下内心中那惴惴不安,暂时放下原定的宏伟计划,静下心来,看看别人是怎么来做这个IM的。

TeamTalk是什么?它是蘑菇街开源的一整套IM解决方案,包括服务端和各种客户端,相关地址如下:

说起来,我和蘑菇街还是有点渊源的,但,这个故事,这里就不做过多展开了(说多了都是泪啊),我们直接进入今天的正题吧。

阅读全文 »

单元测试,一个不断被强调,又不断被人忽略的话题,想从屌丝程序员晋级成高级工程师,单元测试,可以说是必不可少的技能。如何编写合适的测试用例?何时该进行单元测试?单元测试所体现的价值究竟是什么?可以说,有很多实际的困扰阻碍着一批人,使得这些人被卡在了单元测试的门外,万事起步难,而当你真正的理解了一件事情的意图,就能很容易的从各个方面入手了。

本篇就我这些年来撰写测试的经验,结合Objective-C这门语言,总结出一些我认为可能对入门者很有帮助的方法,希望能让更多人进入到单元测试这个沉默的世界,使用它,并爱上它。少年,拿起你手中的XCode,去征服它吧!

阅读全文 »

最近,公司iOS团队针对AutoLayout展开了一次探讨,各个业务线的人员也都基本参加了。对于AutoLayout一开始我是拒绝的,因为,你不能说自动布局,我就相信你能自动布局,我要试一下,结果Duang的一下,果不其然的掉到坑里了。

所以,这篇文章里,主要记录下AutoLayout的一些比较有用的工具和一些问题的解决方法。

阅读全文 »

这个话题,在我心里运粮了好久,从携程离开后,总觉得重构设计是那么的刺耳,依稀记得开发主管多次在会议上批评我和另一名同事进行所谓的重构设计。可是没办法,作为有点节操的程序设计者,怎么可能放任着一团不知所云的DEMO片段,当作产品进行对外发布呢?最后,我们并没有像他所说的那样延误工期,我们当时也真的没有进行重构,我们只是把先前我们所写的用于实验性的DEMO重写了而已。或许,就像《重构改善既有代码的设计》的作者Martin Fowler所说的,我们不应该告诉他我们正在进行重构设计。

以上是题外话,扯得有点远,下面进入今天的正题。

阅读全文 »