All Stories

音频播放器小比拼

  如果在goolge(不是“谷歌”)中搜索关键字“音乐播放器”,排在第一位的,赫然是千千静听,第二位提QQ音乐,第四位是Kugoo,如果搜索关键字“音频播放器”,则出现的是foobar2000,而前3位则连影都没有。这一方面似乎可以看出,中国大陆用户对此类软件的偏好和定位。  因为前些天看到Kademlia的介绍,想到可以结合着做一个不需要服务器的P2P音频共享播放软件,于是偶然关注了一下现在国内流行的此类翘楚。就个人感觉,最专业的还是foobar2000,虽然它的默认界面非常简陋,没有歌词显示,没有文件搜索等诸多目前国内用户用得最多的功能,但是它做为一个音频播放软件,在纯粹的音频播放功能上可是一点儿都不马虎,尤其是它的插件机制,从效果上看,远远强于其它的竞争对手。目前最新版本0.9.x的频谱显示功能,比起前几位,也是强得不行,就比较流行的狭小范围看来,大概只有WMP能跟它匹敌吧。不过由此带来的负作用是,新手上路困难,难以获得菜鸟用户的青睐。另外随便看了一个曾经的老大Winamp,现在是5.5.x版本了,不过在我的机器上极不稳定,立马就卸载掉了,而且似乎没有做好市场调查啊,亦或是老外的使用习惯上就是那样的?  中国市场的大半江山应该是被千千、QQ、Kugoo三巨头控制了,这三个软件互相之间做得很相似,唯一大点的区别是Kugoo是以文件共享起家的,经过几年的经营,可以极其方便地以P2P的形式直接下载歌曲文件,而服务器上只需要保存些索引即可,负载压力顿时少了。千千则是以纯粹的音频播放器出身的,注重音质音效等是它早些年发展的重点,然而国内用户似乎并不特别在乎这点,当年的在线搜索歌词功能为它短时间内赢得了大量忠实用户。  其中一个重要的现象是,音乐网络化。三个软件都可以打开一个小窗口,显示一个网页,通过该网页可以查看当前的音乐流行趋势,在线试听,甚至下载(中国不像美国那么注重音乐版权,中国人真幸福)。其它的功能特点,就都很普通了,无非是换下皮肤啦(这皮肤机制也都很土,就是换一下窗口边框,这点WMP就强太多了),有个播放列表啦,搜索显示歌词啦(foobar/WMP/winamp默认的都不行,至少得装插件才能支持),支持插件啦(似乎都没公开的SDK,foobar/WMP/winamp都有,这似乎又说明了两地用户的使用习惯和素质上的差别)等等。就这些明显的特点看来,中国用户跟欧美用户的使用习惯上应该有不少的差别,本土三巨头也算是依仗本地优势,因地制宜,殊途同归啊!

似乎中毒了

  唉,回到家照往常一样打开电脑,发现explorer.exe是起来了,但界面没出来,倒是弹出个出错消息框,说是哪个进程不正常,看这名字就感觉不是正常的。等了老半天,没耐心了,重启系统,倒是能像平常一样进来了。偶然发现system32目录下有好几个奇怪的文件名诸如oooooo.dll、ffffff.dll之类的文件,而且会自动注入到其他进程中去。windows目录下也有几个文件名很怪的.exe文件,还都放到了系统启动项中了!  似乎中毒了!真烦人啊,编译个wxWidgets也是没完没了了,以前可要快得多啊!唉,得下下决心,整台好点的台式机来,装Linux来,就用来平常看网页和写程序吧。

软件该升级时还得升啊

  为了用上比较新版本的flex和bison,又不想额外装个啥Linux,于是只好走旁门左道了,在Windows上装个cygwin暂解燃眉之急。这个cygwin也是个小气的东西,只提供一个大小只有几百KB的在线安装程序,这个程序从远程服务器上下载了文件列表,根据用户选择,下载需要的文件到本地再进行安装。无奈的是我贪心了一点,想把所有的软件包都下载下来,结果昨天晚上开了一晚上,卡在一个包上,后面的都没动静了。  今天回来看了一下这个软件包列表,提取出所有软件包的远程地址,导入到FlashGet中进行批量下载,可是这个1.9.x版本的FlashGet有不小的问题,平常还看不出来,在下载项很多时,总是不时地卡住下载不下来,而要暂停一下再开始,才能继续下载。当时用它来下载那几千个sogou的皮肤,也把我弄烦死了。今天又是这个状况,偶然兴起,上网看了一下最新的版本,已经到了2.0了,于是索性装一个来试试,哈哈,似乎没有这个问题了哦,而且界面上也改得面目全非了呢!软件该升级的时候还得升啊,呵呵!  再扯些其它的,这东东放了一堆的广告上去,这也是没办法的,谁叫它是个免费软件呢,人家也要吃饭的。好久之前就听说它是能下BT的东西,不过我已经久不用BT了,改用eMule了。另外又看到它也用到了DHT技术,大概是为了下BT下载才用的吧。前些天看到一篇blog,讲了eMule的Kademlia相关内容,让我有点热血沸腾,这个技术再搭上一个音频播放器,只要用户足够多,就不用什么Kugoo了嘛!

开源的东西要用还得多用用

  几天无聊中,又拿起TeX来玩,这东东用来做PDF真不错,可用来写软件的user guide或manual,也不用做htm或chm了。  编译器用gcc,界面库用wxWidgets,多语言和国际化用gettext和iconv……  今天偶然发现cygwin中的flex已经是2.5.35版本了,而gnuwin32中的才是2.5.4,bison在cygwin中是2.3,而gnuwin32的是2.1,差了不少了啊,看来得装个简装版的cygwin才行。  也不单是为了不用盗版,而是这些开源产品确实质量已经足够了,尤其是在开发方面。

为了无界面运行Redmine

  项目组把mantis换成了redmine,相比之下,redmine似乎提供了更多功能,也更符合我们目前的需要。redmine是一个ROR(Ruby On Rails)应用,于是简单起见,我们使用了InstantRails这个傻瓜包,但是,有一个问题是,我们总是在InstantRails的界面上使用Mongrel启动Redmine,于是会出现一个Ruby运行的黑窗口,一直到运行结束。  从网上找了一些资料,发现至少有两种办法可以解决这个问题。一种使用Apache之类的专业Web服务器,然后安装FastCGI,把ROR在后台运行,所有外部请求由Apache来转发。另一种是使用Mongrel_service,把mongrel注册成Windows服务,这样就可以在后台运行了。于是我想试一下第二种方案。  本来gem install mongrel_service这样一条命令似乎就可以把这个gem包安装到本地,但实际上我发现我根本不能安装任何一个远程服务器上的gem包,可能跟网络环境有关。于是我只好到它的官方网站下一个gem文件下来,用gem install mongrel_service -l命令进行本地安装。这时会提示需要win32-service包,于是到Rubyforge上去找到官方发布,也下载到本地安装,然后又提示说要windows-pr,下来安装以提示说要windows-api、继续下来安装,继续提示说要win32-api,再下来安装,然后反向这个顺序依次安装,到了后来,提示win32-service的版本要是≥0.5.2或<0.6.0的,而我装的是0.6.1的,于是只好反安装,rubyforge上又找不到0.5.2的,从其他地方搜了一个源代码包,解开后,执行命令ruby win32-service.gemspec,会生成gem包文件,再来安装,又提示要VC,而且经过试验,如果是用的InstantRails 2.0中的Ruby,则要用6.0版本的VC才能正常编译。终于mongrel_service也安装好了,可以注册一个Windows服务器,启动这个服务,则用ruby运行一个rails应用,我这里就是redmine了,当然redmine需要MySQL支持,不想直接使用Instantrails了,把MySQL也添加到服务中,Apache是不需要了,启动这2个服务,就能无界面运行redmine了,哈,开源的东西,还真是有点麻烦呢!

这个世界有点疯

  偶然看到一则消息,遨游将自主开发浏览器内核,真是让我觉得有点不可理喻。当今世界,IE、Firefox、Opera、Safari几大流行浏览器正拼了个你死我活,遨游从MyIE开始,多少年来一直使用IE内核的外壳程序突然从中插一脚,在我看来,实在是前途困难重重,希望渺茫啊!  先不说遨游是否有这个技术实力,就算有了水平堪与一流产品比肩的成品,最后的宣传推广,以及后续维护发展,也是前景相当不乐观的!

困了累了不想动了

  总觉得心事重重,走在路上焦躁不安,忍不住安慰自己“熬过这个六月就好了”,心里刚刚默念完,突然觉得这句话很熟悉,似乎以前自己说过。不过要说真的说过的,那肯定得是一年前才可能的事了,去年的六月我又在烦些什么呢!确实好像这一年多来,一直过得很不顺心,每次都劝自己说“熬过这段时间就好了”,结果这样的时间一段接着一段。  计划有点宏伟,但对于我这么一个懒散的人来说,着实有点困难:WallpaperHelper——VC/MFC;SourceCoding——MinGW/wxWidgets;DCoding——MinGW/wxWidgets;CppCoding——MinGW/wxWidgets;PHPCoding——MinGW/wxWidgets;RubyCoding——MinGW/wxWidgets;PyCoding——MinGW/wxWidgets;LuaCoding——MinGW/wxWidgets;TclCoding——MinGW/wxWidgets;PerlCoding——MinGW/wxWidgets;TeXCoding——MinGW/wxWidgets;XMLCoding——MinGW/wxWidgets;Flowchart——MinGW/wxWidgets;SoftwareDiagram——MinGW/wxWidgets;NetworkDiagram——MinGW/wxWidgets;Go——MinGW/wxWidgets;Chess——MinGW/wxWidgets。

可以不用商业化的开发工具啦

  鉴于编辑器模块的重构任务已完成大部分,从两个View中提取出了一个基类View,这样总的说来大概减少了近2000行代码吧,中途也遇到些小麻烦,不过最后都没花什么大力气解决了。  今天就又看了一天的lex和yacc的资料,真是犯贱呀,在学校的时候这么大把的时间不好好学习,现在却要临时抱佛脚。回来看了几篇blog,难道最近流行学习编译原理?从理论到实践,都有人在搞。以前还是很不在乎的,因为再怎么样,也很少有可能需要自己去写一个编译器出来。其实现在若不是要整编辑器,也很可能再也不会去碰这玩意儿了。  昨天看到网上提到一个软件CodeLite,于是好奇心起,装了一个来试试,使用wxWidgets开发,所以横跨Windows、Linux、Mac三大桌面系统。它只是一个编辑环境,编译器还是使用其他的解决方案,比如MinGW,不过除开编译器因素不谈,它是个自消费系统,跟Code::Blocks一样,在自己的环境下开发自己,如果下载了它的源代码想自己编译一把的话,除了要装必要的编译器和程序库外,还得先装一个它的Release安装包,这个过程很明显又给自己打了一把广告。  突然我有个大胆的想法,这似乎是给我一个完全抛弃盗版软件的机会。在Windows平台上软件的丰富程序,确实很大程度上影响了我们的日常生活。记得还在大学的时候,就很雄心壮志地想所有的软件都不用盗版的,如果遇到找不到开源免费的,就自己写一个。但很严重的一个问题是,我当时只会用C++ Builder,所以开发工具只能用盗版的。现在也没好过到哪里去,只不过从C++ Builder换成了VC而已。可目前,就似乎有另外一种选择,使用MinGW+wxWidgets,从CodeLite和Code::Blocks的表现看来,完全可以满足我目前绝大多数的需求,而且还带来另外一个意外的好处,就是跨平台!虽然都没怎么想过在其他平台发展,但现在有这样的低成本扩张机会,何不放手一试呢!从此可以不用商业化的开发工具啦,哇哈哈哈哈!

IDE的编辑器就要这样做

  又看到José León新发的blog,再结合吃晚饭时,同事的抱怨,不禁羞愧难当,伟大的Borland,伟大的Delphi,哪怕是几经更名,哪怕是几经易主,曾经的IDE霸主,编辑器就是应该这样的做的。  今天花了点时间重构编辑器的auto completion、call tips模块,框架早已完成,剩下的是只让整个流程运作起来。中途发现几处笔误和遗漏,都不是大问题。清理了原来的代码,从原来的几百行的规模,拆分成现在几十个文件和类,本意是让设计更容易理解和维护,也尽量往容易进行单元测试的方向靠拢。不过等都完成后,回想起来,这样的设计仍然觉得不是很爽。类与类之前的关系略显得混乱,有些依赖关系感觉不是很符合OO的那些基本原则,但具体怎么做能更好,我却没什么头绪,大概也是因为理论理论和实践经验的两重不足引起的吧,只能靠不断修炼,逐步提升自己的exp了。  同事抱怨说自动提示功能很少能正常工作,我觉得很惭愧,当时刚做出个样子来时,心里还是比较自豪和骄傲的,不过现在事实摆在眼前,离真正可用,好用还差得很远。幸好现在已经有了思路,用lex和yacc来做,再好好设计一下,争取让这功能真正好用起来,计划花一周的时间完成。再花两天,把编辑器View的基类提取出来,以后所有需要代码编辑功能的View,只要从这个类继承,就可以得到功能基本完善的编辑特性集合。最后,花两周时间,把外部脚本扩展的框架实现。