All Stories

旧版本Protobuf在Serializing方法crash

花了几天时间,把原本基于XML的IPC重要部分都改成用Protobuf了,之前以为会大幅度提高运行效率,结果发现原本用RapidXML库生成消息,比填充Protobuf结构慢不了多少。不过可以肯定的是,消息长度缩短为差不多是原来的1/4了,原本16KB左右,之后4KB多点。

学好数据结构很重要

今天早上csdn的人打电话来催了,让我快点提交应用,我说我已经写了一半了。其实不然,我只能说只搭了个框架,所有核心的内容都没开始动手呢。这次又是被block住了,又是因为不能为这个业务设计一个合适的数据结构而进行不下去了。总的说来简单的数据结构在学校时学过一点,然后就一直啃老到现在,但一直缺少能根据具体业务逻辑而举一反三地设计合理的数据结构的能力。真是忧伤啊!

第一篇

最近在写一个彩票辅助分析程序,觉得研究彩票是个比较有意思的事情,在网上看了很多有根据没根据的文字,想把其中的一部分用程序实现出来,也不知道有没有道理,所以同时想把这些事情记录下来。

Google Reader客户端

  最近有很认真地在写一个Google Reader客户端,仍然是使用的Qt,一切为了跨平台嘛。之前Ninayan用QML写的UI,虽然能做出一些比较炫的效果,但没有一个优秀的美工,再炫的效果最后得到的都是不好的用户体验。于是这次使用了传统Widget来做UI,感觉还不错,中规中矩的,源代码也放在github上了。   到现在为止,Google Reader的客户端功能基本上实现了,可能还有些小细节需要修改。前两天因为工作上的关系,找了点资料在看怎么提高socket的效率,公司那个产品全部是用的select模型,貌似Qt的QNetworkAccessManager类也是用的select,这个东西的好处在于大多数的系统都直接支持,思路也简单,但是对于追求高吞吐率的情况下,就得用各个系统内核各有的一套东西了,比如Windows下得用完成端口,Linux下,2.6以后版本的内核得用epoll/AIO,BSD/Mac下又有kqueue等等,可谓是八仙过海各有神通啊。然后我就又找到了asio,这个库以前用过Boost里的那个版本,没用好,当时的感觉是资料太少了,性能太差了,后来也都是尽量避开自己写socket相关的代码,直到后来用Qt中的QNetworkAccessManager。这两天抑制不住地想把QNetworkAccessManager改成用asio实现,以达到各平台优化的尽量大吞吐率。忍住!   基本功能完成后,我就开始想着把程序改成插件架构,以插件的形式支持从不同的源获取信息,比如Twitter,Facebook,国内的微博等等,也以插件的形式支持把当前内容分享到不同的宿。其实从功能上来说,跟Ninayan是有很大重叠的,毕竟当时写Ninayan也是为了做一个信息获取工具,只不过从UI的设计上限制了操作方式,最终在用户体验上会有很大的差别。

想买iPad Mini和Surface

  iPad Mini和Surface都快要发布了,各种消息满天飞,我最关心的当然是价格了,因为作为当今世界上做软件系统最好的两家公司,他们的产品足够吸引我的注意力!   不过iPad Mini最低配的价格貌似还可以接受,Surface的就远远超出我的预期了。叹气啊!但是很可能过段时间仍然咬咬牙上了,再托阿菲帮忙从美国带吧,估计Surface至少比国内买行货少花费500人民币吧。

又败了个Kindle DXG

  之前买了个二手的Kindle4,体验太好了,无论是E-ink屏,还是推送功能,都很舒服,唯一的不足是看扫描版PDF即使切了白边仍然字体过小,如果横屏来看又觉得操作不是很顺手,于是纠结了一阵后,看到有比较便宜的卖全新的DXG的,就趁刚发工资咬牙买了。   昨天早上在taobao拍的,今天下午收到货,然后迫不及待地开箱。没有WIFI就不能免费推送,这是一大遗憾。官方皮套看起来很厚实,装了几本扫描版PDF进去,仍然感觉小了点。官方系统默认不支持中文,书名中带中文的在目录中也不能正确显示,这是点小瑕疵。   忧郁啊,赚的钱远远不够花。这两天遇到瓶颈了,写程序写啥啥不会。想给Ninayan加上链接保存到Readability和发送到Kindle的功能,想想多简单的特性啊,居然遇到很大阻碍。

装了Mint

  买硬盘有一段时间了,当时的想法是可能要做Linux平台的开发,所有自己家里的机器上也得正儿八经地装个Linux某个发行版,于是纠结了很久,终于在京东上花了总共780块大洋买了个WD的绿盘2T。结果把硬盘装入机器后,只是分了十几个分区,就再也没动静了。   后来过了大概2、3周吧,实在对自己鄙视得受不了了,翻出两个8G的U盘来,一个是花了20块大洋从淘宝买的,谁料想过了没多久公司(已经是前公司了)又因为十周年纪念每人发了一个8G的U盘。于是从网上找资料看了一下,在Windows系统下用一个叫Win32Image Writer的程序把Linux发行版的ISO镜像写到U盘里,就可以从U盘启动安装了。   先是装了个Debian 6,用的GNOME,装好后发现屏幕闪得厉害,估摸着是显卡驱动的问题,据说ATI的显卡Linux就是支持不怎么好,我的是Radeon HD 4540,从网上找了一圈各种解决方案,试了各种配置和开源闭源驱动,都没效果,很失落。本来对Debian的印象很好的,就是一种运行速度快,而且稳定的发行版,因为曾经在公司用VirtualBox装了LinuxMint和Debian同时编译clang,发现在Debian下要快不少。可是现在的闪屏问题使得这个系统处于基本不可用的状态。后来我还试了换GNOME为KDE,果然没用。于是知彻底绝望了。   因为Debian的闪屏问题搞不定,于是只好试着装装Ubuntu12.04这种小白发行版,它果然一装上就所有驱动都搞定了,不光是我那块显卡,连在10.04时需要自己找相同芯片其他牌子无线网卡的驱动源代码来自己编译安装才能使用的Fast无线网卡都直接驱动了。真是让人感叹果然是个适合我等小白使用的发行版。本以为问题就这样搞定了,于是下载了qt呀,qt creator呀,clang呀之类的源代码,都编译了使用。可是好景不长,不到两个星期,就出现各种问题。比如启动特别慢,在红黑屏要停留很久,一开始都以为是启动不了了,后来才发现是因为需要时间很长。再后来,各种已有的分区不能自动挂载了。虽然可以自己敲命令挂载,但终归让人心里极其不爽。到现在,居然不能关机了,一直停在关机logo界面里了。失望透顶,Ubuntu是从7.x以来,各个版本都装过的,窃以为最不稳定的Linux发行版,没有之一。   今天实在对Debian和Ubuntu失望之极,打算再换个发行版试试。之前在VirtualBox中用过不短时间的Arch,Fedora,openSUSE和Mandriva,对于Arch和Gentoo,我就担心显卡问题搞不定。对于后三者,不是很喜欢它们的包管理机制。于是最后打算看看Mint吧。以前在VirtualBox中也装过Mint,现在公司里还装着用呢,它默认不使用GNOME或KDE,而是使用Mate或Cinnamon,感觉挺精致的。在装Mint还是LMDE之间犹豫了一会儿,后来看LMDE用的是Debian的testing源,在我看来相当于放弃了Debian的稳定性这一大优势,所以还是用Mint吧。安装过程仍然一样,写入U盘可以当Live盘启动,然后安装,很快很傻瓜。而且我之前装Debian和Ubuntu把它们的/home都放到同一个分区,而且两个系统中都用相同的用户名,在Mint中也这样做,就可以直接使用以前做好的一些把配置写到/home目录的软件的配置了。   Mint用了近一天了,感觉不错,就看它能用多久吧。

入了个Kindle4

  又好久没写blog了。上上周从推友处入了个二手的Kindle4,这是个很划算的事。350元顺丰到付,成色很新,还有个山寨的皮套。拿到手后,我就爱不释手了。   首先,Kindle4很小很轻,只有6寸,而且没有键盘,一只手就可以竖握整个机器,拿起来很方便,随身携带比带书轻便多了。   其次,E-ink屏真的很赞,真的只有自己实际把玩过,才会体会到它的好。之前很多次都冲动想买个Kindle,都被自己以“我不是个爱看书的人”为理由扼杀了这冲动。这次之前是橙子拿她刚到手的Kindle4来让我玩了一下下,于是就冲动了,刚好推上求二手也便宜,就入了。E-ink的屏幕观感上很接近纸版印刷,让人看起来相比电脑,手机,平板等等觉得更类似书本,另外个好处是,我早上上班路上会拿出来看点东西,如果露天有大太阳的情况下,用Nexus S手机看小说时得把屏幕调到最亮才能看清,E-ink则不在乎这个问题,但同样的,晚上回来如果天黑光线不足,E-ink就不行了,据说可以通过配备小照明灯解决。   再次,Kindle4有很方便的推送功能,只要把指定格式的电子书作为附件发送到Amazon给分配的邮箱里,Kindle在连上WIFI后就会后台自动把书下载来。这样一来,可以实现很不错的功能。比如定时推送RSS等内容,虽然网上已经有一些免费或付费的推送Google Reader或RSS的服务,但我还是打算自己写一个。有几个原因,一是这些服务免费的一般都有比较大限制,比如Google Reader推送时间只能一天一次,顶多一天两次,推送RSS则往往对订阅数有限制。二是我想增加多一些推送的类型,比如小说更新,漫画更新,还有从SNS消息中提取的链接内容。三是推送过来的字体、排版以及插入广告之类,终归不是很舒服。因此要写这样一个程序,打算设计成一个C/S架构的应用,客户端和服务器都具有内容下载生成的功能,但服务器端可以实现定时推送的功能,客户端可以把定时推送的请求发送给服务器端。   最后想说下遗憾的事,6寸屏对于看扫描版16开或22开大小的PDF还是不够理想,我在考虑是不是再入个DXG。

第一周

  在新公司上班一周了,过上了坐地铁上下班的日子。以前每天自己开车上下班时,还有点向往那种坐公交地铁上下班的人,觉得可以在路上看到各种各样的人,还可以拿个手机或平板在路上看书。现在这样过了没几天就厌烦了,地铁太挤了,每天上下班一路会挤得浑身大汗,根本没心情看什么书,除了网络小说。   第一周干不了什么活,连产品的源代码都还没看到,说要我先写个小程序,写完了才给我看,原因是之前有个人去干了两天就跑了,他们担心源代码泄露。好吧,这次要在Linux下用socket写个C/S的小程序,但我今天突然发现他们现在的想法是不是有点问题,还是我没有彻底理解他们的需求。好吧,小公司确实是小公司的样子,感觉做事就是没条理,有点乱糟糟的,也许是以前呆的公司不是跟IBM学了IPD流程,就是跟着Microsoft的Workflow走,淡定点。   要在自己机器上至少装个Linux发行版,好好学习下Linux下的socket程序编写。是不是该去买个VPS,然后可以反向连接到公司里的Linux虚拟机上去。囧,这么大强度做Linux上的开发,居然还是只用虚拟机。