All Stories

《结界师》

  周六周日花了两天时间看完了《结界师》。一开始是在PPS看到的,看了一集,后来就不停地卡,于是去tudou网上看,看了5、6集,受不了那个糟糕的画质了,最后发现youku上的画质还不错。一共52集,不算短,但比起《海贼王》、《火影忍者》、《死神》这些来说已经是很短了。   总的说来,这个画风勉强在我可接受的范围内,但男主角的成长实在让我有点不能忍受,至少前30集都没看到无论是从技能还是性格上有所进步。我不喜欢只会大喊大叫的那种男主角。情节上么也没什么突出的地方,但结局还比较喜庆。   其中有个叫神户百合奈的小姑娘,感觉挺像@ainesmile在推特上表现出来的形象,哈哈。

升级到VS2010

  昨天晚上从微软官网下载了VS2010,今天上午装了后,试着把原本用VS2008编译的各个第三方库都用VS2010编译了一遍。用VS2010替换VS2008比较明显的一点好处是,没有Side by Side的困扰了,CRT库只要把两个DLL文件直接放到系统目录中就可以了。也就是说,开发好的应用程序部署要轻便了一点,不用带个VC Redist包出去了。在这一步中,不得不多谢bjam这个工具,对于换用不同的编译器的需求,适应得绰绰有余。   晚上又尝试把所有插件扩展脚本中用到Xerces的地方都用RapidXML了,这样又可以去掉一个DLL了,想当初一个用MinGW编译的Xerces的DLL就有4MB多,然后是一个Lua的扩展库,几百KB,前些天在宿主程序中去掉了Xerces的依赖后,换用VC编译的DLL,体积减小到1.8MB,而Lua的扩展库也减少到40KB。到了今天,可以把这个1.8MB的DLL也省了。   想想还是比较舒服的,试着打了个安装包,原来是15MB左右的,现在是10MB左右,少了约1/3。

小妞生日快乐

  其实我一直不是很确认小妞生日是哪天,只模糊的知道是5月底的某一天。本来翻出以前那个已经掉了6个键的Nokia N73,看到屏幕上赫然列出“小妞生日”字样,但我仍是不确认。前些天还试图打电话问小思宇的,不过她居然不接我电话,不知道是确实没接到,还是因为看到陌生号码故意不接。直到刚才,我跑到QQ空间上去看了一下,发现今天确实是小妞的生日。   于是给小妞打电话问候了一下,她正跟俊英在百草园吃蛋糕。上次打电话,是两周前了吧,我很失落,很无助,想寻安慰,然后小妞耐心地开解了我很久,听到她在电话那头打哈欠。   小妞生日快乐!

故事已经结束

  有事烧纸……

伤,扑火

  读到她昨天深夜写的那篇日志,我的心已经泪流满面,距离才让彼此欣赏,真残忍的标题。读了一遍又一遍,反复揣摩她真正想表达的意思。我不敢确定她是不是写的我,开始有点希望是我,后来却又极其害怕真的是我。如果再要有人给我发好人卡,我一定要歇斯底里地大声告诉她,我他妈的真不是好人,我他妈的从头到尾都没好过!   我真不想给你任何压力,不想给除自己以外的任何人压力,我也一直努力试图可以避免着给人压力。可是我不知道,我真的不懂,我可以做些什么,我应该怎么做。我发自内心地希望可以凭自己的能力对你好,温柔地照顾你,体贴地关心你,你开心我就跟着你一起开心,你不开心我也希望可以分担一点不开心。可是在你的心紧紧对我关闭时,我做对了,给你的是压力,我做错了,难道对你来说就是解脱?   我靠不近她的心,她却闯入我的世界肆无忌惮。很多人说感情没有谁对谁错,以前我也基本认同。现在我却发现自己其实并不赞同这个观点,如果真没有谁对谁错,哪会有那么多错过的人,那么多后悔的事。那都是在不正确的时间固执地认为自己没有错,实际上可能旁边的人都可以看出来,或者自己在以后回头看来,却是错得离谱。我怕再错过,所以我愿不顾一切地投入其中,哪怕是沼泽是漩涡。   知道的越多,苦恼越多。无知的幸福。每当提起这个,我就会想到大学校园里那个据说考研失败最后变成傻子的人,他总是在我们从教学楼到寝室的路边坐着,对着我们笑,他什么都不知道吧,却能笑得那么开心!   你说自己明明已经放下了,可我看出那语气却是将信将疑。你在不自觉地欺骗自己,历数他的种种不好,然后断然结论已经没有以前的感觉了,却不经意间流露出对那丝回忆的甜蜜憨笑。也许真的是你自己也不知道、没察觉吧,或许真的已经放下那个人了,却仍放不下抽不干最后那一丝感情。那细小如丝的感情,缠绕在你的心头,阻挡着其他人的进入。   我曾自以为对待感情,我已经可以做到理性成熟。可是等到真正面对的时候,我却再次沦陷。我的心如此脆弱,如同风中的蒲公英,一吹就散。但是,我愿化身飞蛾,扑向那飞舞跳动的火焰,因为我以为穿过火焰的中心,就能到达我一直向往的光明的新世界。   我只不过就是想要有这么个人,她只需要站在我的背后,让我知道她的存在,在我困倦了疲劳了迷茫了无助了失落了焦虑了不安了烦躁了的时候,让我知道她仍然站在我的背后,那就足够了。人生就是一场战役,由无数的战斗组成,而战斗,正是为了保护自己爱的人,让爱的人站在自己的背后,那是我战斗的全部理由。

软件界面原型设计工具

  很偶然才知道这个工具——Balsamiq Mockups,因为完全是在另一个主题的论坛里看到的,当时在那个论坛里之所以提到它,不是因为它的功能多强大,也不是因为它的用户体验做得好,更不是因为它能帮助人们解决实际问题,而是因为它卖得好!   以前听说那些做快速软件界面原型设计的人,是用VB、Delphi之类的WYSIWYG的RAD工具,当时我就觉得与其已经用这RAD工具了,还不如直接就添加上各种事件响应函数,然后一个产品就做出来了。直到最近看到了Balsamiq Mockups,最在这两天简单试用之后,才发现这确实是个很不错的工具。   它是用Adobe AIR编写的,所以不但可以在Windows/Linux/Mac三大桌面环境中运行,还可以在网页上运行(貌似作者原来就是在Adobe工作的)。跨平台只是一个优点,另一个很重要的优点的,它的操作确实很傻瓜化,不得不承认的是软件的功能其实也很简单,就是一组图片,拖放堆叠在一个画布上。   这是个共享软件,桌面版要79美金,如果不注册,它会每隔几钟就弹出个消息框来,并且不能保存图像,但它有一些可以免费获得注册码的方法。其实我觉得这个软件的功能很简单,即使自己实现一个,可能也不用多少时间吧!

重复发明了个不咋样的轮子

  今天看到推友@liancheng说Mozilla/WPF/QT/GNOME3都同质化了,大体的意思是指这几种方案都把表现层和逻辑层分离得很独立,复杂的,高度重用的,平台相关的部分,用C/C++之类的语言实现成组件,表现层用XML描述界面,用CSS之类的样式描述skin,再用如JS之类的脚本语言描述运算逻辑粘合组件和界面。   我最早了解到这种架构是几年前Firefox开始大肆流行,网上这类技术文章也大量涌现。当时也是很惊叹于Firefox的扩展机制如此灵活,却对它的开发环境很是鄙视,而且用于表述逻辑的脚本语言是用JS这个我完全没了解过的东西,所以看过介绍后,就丢到一边了。后来也偶尔听说WPF、XAML之类的东西,但对.NET一直没啥好感,于是也没研究。最近几个月跟个网友讨论,提到QT的界面方案,大体上也是知道QT也采用这种架构了,而且也确实一直计划着做完眼前的这组东西后,以后全面转向QT了,但仍一直没抽出时间来研究。   今天看到@liancheng的讨论后,让我有点儿沮丧。我现在用C++/wxWidgets做主框架,好不容易设计并实现了一个并不精巧的插件机制,用Lua来编写逻辑,还总是有这样那样的限制,这不就是典型的重新发明轮子么,而且发明的是个不咋样的轮子。唉!

配置功能W.I.P.

  配置功能让我纠结了好些天,现在基本上思路是确定下来了,也已经做了一部分了。   首先想说的是出乎意料的事,当时总以为用XML存储内容会比sqlite3存储内容占用空间大,经过实际测试100KB左右的数据用XML占用空间反而更小,大概是因为用sqlite3的话还会有一些用于索引之类的数据。   接着发现用sqlite3中那种二维表格来存储我想要的那种数据格式不是很方便,还是用XML那种树形结构方便,而且XML可以在同一级层次存入不同含义的节点,这也增强了表达能力。   后来我还是决定有boost::property_tree来操作通用配置文件,结果发现这个官方文档已经过时了,不过好在有人在maillist中提到了,也给出可用的代码了,居然还有人说读库代码就知道用法了,囧。另外想说的是,在存为XML时,没有更多的控制选项吗,没有pretty print吗。这次我倒是没有直接为Lua封装成一个C库,而是直接在宿主程序中用luabind绑定了一个简单的配置文件读写类,省了不少事。   最后想说,这进展实在太慢了,到现在为止,才做完通用配置的读取。

准备实现配置功能

  今天粗略考察了一下Code::Blocks/CodeLite/notepad++的配置功能,发现需要做不少工作。   和外部工具特性一样,配置功能也需要一个用户界面,但这用户界面却更复杂,因为配置选项有各种不同的应用场景。总体上看来,我比较喜欢Code::Blocks的那种配置对话框,最上边是一个static text控件,中间是一个listbook,最下边是几个标准按钮。查了下wxLua的文档,这种界面效果用wxLua基本上可以实现。从代码中可以看到,Code::Blocks是用XRC这种协议实现的,这样的好处是界面和逻辑代码分离,我也一直觉得通过完全通过代码来构造用户界面实在很土,效率又低,但我又不知道有什么工具可以方便地进行用户界面设计并生成XRC,特别是其中有自定义的控件。不过现在既然是决定用wxLua实现,也没办法了,就继续用代码生成界面吧。   我要加入配置功能,主要是为了支持用户可以自定义编辑器的各种设置,特别是各个lexer的风格,于是又看了一下那三个软件的配置文件的存储格式。前些天我一直在想的是,用sqlite3数据库来存储配置内容,今天看了看boost::property_tree,觉得这个库似乎不错,接口使用起来也还算方便,而且屏蔽了底层存储格式细节,目前可以支持INFO/INI/JSON/XML格式,于是我又想把这个库的一些常用接口封装一遍给Lua用,但是又有点担心这些格式在存储时有大量冗余信息,不如sqlite3格式紧凑,而编辑器的风格定义又会有很多信息,所以还得仔细考虑一下,明天就先尝试把编辑器风格定义都用XML描述一遍看看效果,如果实在是冗余信息太多,再用sqlite3吧。