摘要:
之前已经发了三篇有关Protocol Buffer的技术博客,其中第一篇介绍了Protocol Buffer的语言规范,而后两篇则分别基于C++和Java给出了一些相对比较实用而又简单的示例。由于近期工作压力很大,因此对于是否继续写本篇博客也确实让我纠结了几天。但每每想到善终如始则无败事这句话时,最终的决定还是既然开始了,就要尽自己最大的努力去做,而不要留有丝毫的遗憾。 该篇Blog的内容将完全取自于Google的官方文档,只是为一些相对难以理解的技术点加入了适当的注解。但因技术能力有限,如解释有误,欢迎指正。 这是一篇让你对Protocol Buffer知其然亦知其所以然的文档,即便你在并. 阅读全文
摘要:
该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发团队中目前主要使用的开发语言就是C++、Java和Python,其中Python主要用于编写各种工具程序。然而为了保证该篇Blog的完整性和独立性,我仍然会将上一篇Blog中已经出现的内容再一次赘述,同时对于Java中特有的部分也会着重介绍。 一、生成目标语言代码。 下面的命令帮助我们将MyMessage.proto文件中定义的一组Protocol Buffer格式的消息编译成目标语言(Java)的代码。至于消息的内容,我们会在后面以分段的形式... 阅读全文
摘要:
这篇Blog仍然是以Google的官方文档为主线,代码实例则完全取自于我们正在开发的一个Demo项目,通过前一段时间的尝试,感觉这种结合的方式比较有利于培训和内部的技术交流。还是那句话,没有最好的,只有最适合的。我想写Blog也是这一道理吧,不同的技术主题可能需要采用不同的风格。好了,还是让我们尽早切入主题吧。 一、生成目标语言代码。 下面的命令帮助我们将MyMessage.proto文件中定义的一组Protocol Buffer格式的消息编译成目标语言(C++)的代码。至于消息的内容,我们会在后面以分段的形式逐一列出,同时也会在附件中给出所有源代码。 protoc -I=./mes... 阅读全文
摘要:
该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo。这样做的目的主要在于不仅可以保持Google文档的良好风格和系统性,同时再结合一些比较实用和通用的用例,这样就更加便于公司内部的培训,以及和广大网友的技术交流。需要说明的是,Blog的内容并非line by line的翻译,其中包含一些经验性总结,与此同时,对于一些不是非常常用的功能并未予以说明,有兴趣的开发者可以直接查阅Google的官方文档。 一、为什么使用Protocol Buffer? 在回答这个问题之前,我们还是先给出一个在实际开发中经常会遇到... 阅读全文
摘要:
有一段时间没有写博客了,主要原因还是因为近期的工作实在太忙了,不但要组建团队,而且还要深度参与核心技术的预研,事实上这是性质完全不同的两件工作,来回的切换确实让人感觉分身乏术和身心俱疲,好在公司的领导还是很支持我的工作。当然,这种机遇、挑战和压力并存的现状也确确实实给我带来了强劲的动力,因为这些对于我这个工作十几年仍然奋斗在编程一线的老兵而言其吸引力是不言而喻的,就像在我之前的一篇博客中所说,哪一位软件开发者不想像一位建筑师那样,自豪的对周围人说,我是这项建筑设计的主要参与者。 就目前而言,相比于很多传统行业,软件开发是一个团队合作性极强,人的作用非常突出,而整体工作流程仍不算完善的行业。有. 阅读全文
摘要:
1. 启动和停止MongoDB: 执行mongod命令启动MongoDB服务器。mongod有很多可配置的选项,我们通过mongod --help可以查看所有选项,这里仅介绍一些主要选项: --dbpath: 缺省情况下数据库的数据目录为/data/db。对于Windows平台,如果当前的可执行文件位于D盘,那么其缺省数据目录为D:\data\db。我们可以通过这个选项为服务程序重新指定数据目录。如果当前主机运行多个mongod,那么必须为每个服务程序指定不同的数据目录,因为当mongod启动成功之后,会在数据目录下创建一个mongod.lock的文件,该文件用于防止其它mongod进程数据该 阅读全文
摘要:
MongoDB除了基本的查询功能之外,还提供了强大的聚合功能。这里主要介绍count、distinct和group。1. count: --在空集合中,count返回的数量为0。 > db.test.count() 0 --测试插入一个文档后count的返回值。 > db.test.insert({"test":1}) > db.test.count() 1 > db.test.insert({"test":2}) > db.test.count() 2 --count和find一样,也接受条件。从结果可以看出,只有符合条件 阅读全文
摘要:
在开始后面的内容之前,还是需要先提前声明一下,这并不是一篇吐槽的博客,而仅仅是将自己的感触和经验分享出来。当然大家更不要认为是炫耀,毕竟已经工作了十几年,确实是因为依旧保持着一颗热爱编程的心,所以直到现在依然奋战在软件开发的一线。好了,还是让我们尽快言归正传吧。 在过去的十多年中,我曾就职的公司多为中小型公司,有美资、金融和国内股份制等多种不同性质的企业,唯一的一家大型公司还是软件外包公司,而我在这个公司的职位则是架构师,不是研发经理。我想,在做具体阐述和分析之前,还是先亮明我的观点,即软件团队的构建过程首先要考虑的是公司性质和企业文化,再者是我们的交付物,如特定的软件项目、软件产品、运营平. 阅读全文
摘要:
在很多年以前,我曾在一家外资软件公司做研发经理,在工作了六年多以后选择了主动离开。然而随后发生的事情并没有像此前规划的那样顺利进行,反而有些背道而驰了。这种落差不仅使我在处理关键问题时出现了重大的判断失误,再加上自己一时的冲动,很快便陷入了尴尬的困境之中,在坚持了一段时间之后,无奈之下又重新回到了求职大军之中。运气还不错,在春节之前经由朋友的推荐,来到了一家外包公司做架构师。所从事的项目也是自己相对比较熟悉的技术领域,就这样又是一年多过去了,其中的辛酸苦辣甜恐怕也只有自己才能体会。最后由于种种原因,还是离开了这家外包公司。当然,和以往一样,在离职之前一定是找到了更为适合自己的下家了。至于新的. 阅读全文
摘要:
对于C++模板,其强大和高深早已为业界所共识。相比于其他语言,C++是在设计之初便已经提供了对泛型和模板的支持。然而随着语言的发展,与其相关的库也是层次不穷,其中的佼佼者主要为STL(已为C++标准库)、Boost和Loki等。很多酷爱C++的开发者投入了大量的时间和精力去深入的研习它们,当然回报也是相当丰厚的,因为他们的能力以及设计理念较之以前相比也确实得到了较大的提高。这个C++模板系列博客,主要还是以C++模板基础为主,同时也提供了一些常用的技巧,而更多的技巧还是需要开发者自己通过阅读大量的C++模板库代码去获悉和提高。 Step By Step(C++模板函数)http://www.. 阅读全文