Index

服务器端ci的的config替换

在具有自动搭建的git服务器上,通过之前的文章已经知道怎么通过插入hooks来将commit里面包含具体字段的提交操作(post)进行自动构建.

今天遇到一个新的问题就是在服务器运行的时候.项目的config.php文件里面的数据库连接会出现一定的不合适,在本机调试的时候可以直接连接localhost的MySQL服务器,而服务器端为了扩展.一般web服务器和MySQL服务器不在一个机器上.所以不能直接使用localhost来连接数据库..所以可以再适当的修改之前提到的post-receive文件.加入对应的操作,修改ci的config文件.嗯

由于对vim还是不怎么熟悉,所以把查到的东西放在这了....

http://blog.csdn.net/xiaoxu0123/article/details/5124180

[shell]vi ${DIR} <<-! :g/$temp/s//$temp2/g :wq ! [/shell]

基础的用法就是将第一个字符串替换成第二个字符串,且自动完成....

在本例子当中就是: [shell] remote=XX.xx.xx.xx vi ${CONFIG_DIR} <<-! :g/localhost/s//$remote/g :wq ! [/shell]

嗯,基本就是这样

20110915 firefox插件sqlite-manager汉化

写在前面的口水

中午吃了闲得得很蛋疼..所以翻起了陈年老账看看firefox还有没有什么插件可以让我玩一玩..其实事情的起因是我被坑爹的金山快盘的同步搞得很没有耐心...所以就去翻了一翻他的系统目录结构以及实现原理..好吧其实质看了看安装目录和同步文件夹下面的事情,就在同步目录下面发现了一个好东西~

[singlepic id=739 w=600 h=240 mode=watermark float=center]

嗯.一个隐藏的还给了系统保护的文件夹.还尼玛前面加了一个"."...说明不能在windows资源管理器直接修改的..这你是想闹哪样啊!!!.嗯.其这不是重点...点进去之后有一个db文件和一个.cache的文件夹..好吧终于说道重点了..一个名字叫做"klivestate.db"的文件..我一看就笑了..心里就在暗爽啊..你小子金山的数据库被老子逮到了吧..哈哈.绝对是用sqlite保存的!(也不知道你为什么有这么准确的直觉...)

额.好吧前情提要就说到这里...(废话好多...(反正又没人看!!!)),然后就想用一个sqlite的管理器来尝试打开这个文件,当然就想到了大名鼎鼎的firefox,下面的sqlite-manager插件了...直接在插件管理界面装好之后直接尝试打开这个db文件..好吧,直接就打开了...一点难度都木有啊老师!能不能加密?能不能?有木有任何的保护措施?嗯?有木有?还话说官网号称采用"美国军方的AES-256加密算法"..给一个数据库加密就这么困难?还是说你们开发团队都觉得只要数据在网络传输的时候加密了就可以了?不用考虑本地的安全环境?..嗯..小小的吐槽了一下...不过db数据库打开之后看到的表结构还是能学习学习别人好的数据库设计的..嗯嗯.截个图吧.也不是什么太难的技术...

[singlepic id=740 w=600 h=480 mode=watermark float=center]

可以看到数据结构还是设计得很不错的..不过分析具体的表的结构与内容以及和系统之间的联系不是今天这片博客的主旨...so.开正式进入话题...<!--more-->

第一部分 查找或自己进行中文翻译

说到ff的插件sqlite-manager..真的是很好用啊....用来管理sqlite的东西确实很不错的.功能各种强大啊.在这里就不细说了.需要下载的可以看这里:[sqlite-manager]

一般我都喜欢将他作为一个新的窗口打开而不是新标签页,这样不影响ff浏览器本身,正常情况下打开默认显示的是英语,好吧,问题出来了.英语啊...虽然都是很简单的东西,看起来也没什么问题,但是本着天生想折腾的想法..去追究了一下这个这么热门的扩展为什么没有汉化?如果没有汉化的话我也可以帮着搞定他...

[singlepic id=751 w=600 h=480 mode=watermark float=center]

首先进入到官方的code托管页面:http://code.google.com/p/sqlite-manager/ 发现首页上就显示了目前支持的语言:"Version 0.7.5 supports English, German, Japanese, French, Russian, Spanish, Swedish and Italian languages" 很好.一开始我也不抱希望官方的有汉化的选项. 然后就是在这个页面到处逛逛,最先到了downloads页面,发现木有什么特殊的专门的语言扩展包下载.好吧.继续.接着看到了wiki页面,眼睛一下亮了.竟然有一个topic就叫做"其他语言":

[singlepic id=745 w=600 h=480 mode=watermark float=center]

这个真的是很给力啊..而且点进去之后竟然正好有人问了一句,"我想把它翻译成XXX语言,怎么联系"之类的话,然后回答是" Please join babelzilla to provide the translation. That is where all the translations come from. ",让加入一个什么叫做"babelzilla"的东东,之前没听过...... 好吧先放在这.再看看别的地方....

在source界面里面可以浏览目前的最新代码..第一眼就发现了一个叫"locates"的文件夹..真棒...直觉告诉我,一般的翻译都在这里面啊~~~ 果不其然啊.进去一看,非常明显:

[singlepic id=748 w=600 h=480 mode=watermark float=center]

直接把整个文件夹都下下来了...ok.每一个都点开看看..不看不知道,一看吓一跳啊.之前的兴奋瞬间减少了一半...: 中文目录下面的翻译文件打开基本都是空的啊:

[singlepic id=743 w=320 h=480 mode=watermark float=center]

而相比之下日文翻译的文件打开是这个样子的:

[singlepic id=747 w=600 h=480 mode=watermark float=center]

差距很明显啊.. 通过对两个一样的翻译文件的对比发现,其实就是每行后面的引号内的翻译文字的差别啊,既然文件都是一样的话,我自己也能翻译啊...嗯嗯! 正准备自己动手的时候突然又想到了刚才wiki的那句话,"我们的全部翻译都来自那个什么"babelzilla"的网站".嗯,不管三七二十一的先上去看看,如果可以的话在网上翻译了还可以直接提交给sqlite-manager的团队呢..哈哈. 决定是你了!

二话不说去瞧了一瞧那网站长什么样,顺带就顺手注册了帐号什么的.

[singlepic id=741 w=600 h=480 mode=watermark float=center]

登录进去之后直接提示了一个在线的翻译系统,强大啊.....进去之后默认是显示自己的项目,可以选择列表全部的ff扩展,直接搜索sqlite就能出现我们想要的sqlite-manager啦:

[singlepic id=746 w=600 h=480 mode=watermark float=center]

如上图所示啊.他有一个总述...但是最让人即欢喜又伤心的是,目前这个插件已经翻译成了我的语言:zh-CN......嗯.也少了不少的时间啦~ 强制进去.发现真的全部都翻译好了(这还有不信的吗..额...)....给力啊~二话不说赶紧把这些翻译文件全部下载下来...哦耶~

[singlepic id=755 w=640 h=480 mode=watermark float=right]

(PS:如果进入一个扩展发现中文还没有完全汉化翻译,可以直接点进去不同的文件,系统会帮你进行关键翻译词的提取,然后在下面的文本框直接输入翻译就可以提交了~最后会通过一部分人的审阅就可以正式作为翻译资料呗他人使用啦~详见我之前的一篇日志,两者几乎完全一样.[点这里])

第二部分 将中文翻译文件集成进入扩展中

好了.现在我们有了给力的中文翻译文件了,接下来就是将这些文件集成进安装的扩展当中...按照网上提供的说法,firefox的扩展默认都是安装在"c:\Documents and Settings\你的当前用户名\AppData\Roaming\Mozilla\Firefox\Profiles\yukhjqta.default(这个名可能有变化)\extensions"下面的..进去一看.确实有很多安装的扩展的文件夹的一堆东西...

[singlepic id=749 w=320 h=480 mode=watermark float=center]

大致的晃了一圈之后没有发现叫sqlite 的文件夹啊...囧.又谷歌了之后发现全部扩展的位置可以通过在ff地址栏输入"about:support"来展示,看了之后发现真的很奇怪. sqlite-manager的竟然还是一个xpi的文件.貌似没解压? 真奇怪啊真奇怪.....但是不影响我们之后的添加就是了...(我怀疑firefox是在每次启动这个扩展的时候再现场加载到内存什么的...也没有想去深入研究他,等需要的时候再去看呗)

[singlepic id=750 w=600 h=480 mode=watermark float=center]

接着只好直接把这个xpi文件解压出来慢慢分析了.... 很好,里面确实有且只有他官网所说的那几个语言文件夹.嗯既然这样的话我们就直接把下下来的中文语言文件放入新建的叫"zh-CN"的文件夹里面呗..然后直接在打开xpi的目录下面保存,直接保存更新一下这个xpi就ok了..... 很好.我以为这样就可以了.............. 然后打非常高兴的屁颠屁颠的去开ff,再开sqlite-manager.额.为什么没变化?嗯?哪里出错了?我命名原样打包回去了的啊???发生了什么?嗯?

好吧..我确实是个ff扩展的小白.一直都是下下来直接用,从来没有去查阅过什么xpi的格式什么的...没办法.只能按照最老的方式,将整个xpi解压到一个文件夹里面,一个文件一个文件的去看内容,看看什么和语言设置有关了.... 按照不知道从哪来的经验与直觉(喂!)首先打开的就是根目录下面的两个文件,第一个叫"install.rdf"的文件.搜了一下没有与locale相关的文字.嗯.hold住,不急,继续看下一个文件...

[singlepic id=744 w=600 h=480 mode=watermark float=center]

哈哈,又是直接就发现了很多关于语言的地方啊...不错不错...就是红色的两个框锁展示的.地方.瞬间明白了..原来还需要在这个文件把中文的地方加上去啊...嗯嗯,加上之后的文件内容就变成了:

[singlepic id=756 w=600 h=480 mode=watermark float=center]

嗯,之后又大概看了看文件夹下面的其他文件,也没发现什么其他需要仔细注意的地方了.嗯~保存~打包~测试kaishi~

嗯.为什么还是不行?嗯?我把整个包里面的全部涉及到语言的地方都改了啊!!!

好吧.来点狠的..删了之前的安装重装这个xpi!

嗯....经过不屑的努力.终于成功了!.来,给爷笑一个~嗯嗯.

[singlepic id=754 w=600 h=240 mode=watermark float=center]

----------------------------分隔线------------------------------------------

后来经过测试:直接强制修改默认的locale也能达到一样的效果,直接截个图好了~

如图:

[singlepic id=753 w=600 h=480 mode=watermark float=center]

其他的部分都不用变

第三部分 涉及的文件下载

  • 首先呢,肯定是你必须得有firefox:点这里就可以下载最新版啦~: Firefox Download Button
  • 接着呢.是sqlite-manager的最新版啦~:http://code.google.com/p/sqlite-manager/downloads/list
  • 嗯,然后是中文的最新翻译文件啦~:www.babelzilla.org 在里面怎么弄就自己摸索一下了吧~ 也可以下载我这里提供的文件:(20110915版):zh-CN
  • 嗯.然后虽然说是应该提供修改之后的"chrome.manifest"文件...但是两种修改方法实在是太简单了...直接看截图照着改就行啦~
  • 嘛.还是提供一个我修改好了之后的xpi文件作为本篇教程(伪....(你也有自知之明啊...))的结束吧~ [wpfilebase tag=file id=27]

最后的最后,简单的说一下.....

其实我觉得这个日志对很多人来说根本就是不值得一看的纯小八卦文章,而且还写得又臭又长..里面还混杂了很多的自我吐槽和neta什么的...唉~不过其实我写这些东西的目的也很简单.
  1. 经验的保存.不管是做了什么,都是对自己工作的一个肯定,这几个小时弄这个出来成果的非常棒的成就感享受~
  2. 一定的教学,虽然写得比较乱,但是从截图到排版我都是花了很大的心思来处理的..为了能很直观方便的展现给想自己弄弄firefox扩展的同学,那些想折腾的人.应该也能期待一定的教学作用吧~
  3. 其实也是最重要的一点,我想从这个文章当中教会一些人,一些愿意学习的人一些方法. 对于firefox的插件的机制这个东西,我在今天之前都是完全没有一点了解的.但是本着一颗奋进专研折腾再折腾的心去查资料, 尝试,测试,向论坛寻求帮助等等的方法来达到目的,一次不成功,自己分析肯能的原因,再重新进行超找与测试等等, 而不是上来就张口要最后的结果,要别人帮你做好一切,这样也许到最后,到几年之后也还是原地踏步.... 这也许是一个it人员应有的基础.我是如此希望着的...

  4. 嗯,希望大牛们别喷我太厉害就好...

20110914 宅one more time

周三.开学第四周.嗯.今天继续发扬光大了那啥啥的精神..勇敢的做了一天的自己..虽然一天的课..但是非常给力的全部翘掉了= =....嘛.学习也就这样....

不得不说一说今天调试代码的时候遇到的很烦恼的一个问题...基本上算是被他卡了一个下午啊....真心碉堡了..这个破问题

最开始是我这破本硬盘不大,我本来就不太想多装多少东西,软件连QQ都没装..office什么的更别说了....但是在开发的时候却遇到了调试的问题..

本来按照上篇记录所说,git的服务器已经差不多搭建完成了.正常使用也没有什么太大的问题...嗯.现在的问题就是我不想在自己的小破本上面安装xampp的软件而又想能够在不上传到git服务器就能直接进行调试...

首先想到的是apache能不能直接提供调用远程文件的方式,就是在virtualhost的documentroot里面计入一个远程的磁盘路径....但是转念一想.我也不知道怎么在另外的机器挂载一个网络磁盘啊...囧.而且就算去查了怎么挂还是会在我电脑上装一堆乱七八糟的软件吧..忍了..这条路直接放弃了...

然后就像不在本机安装服务无软件.而用网盘一样的东西把本地的数据和实验室的电脑同步,话说也确实这么做了...去下了一个很久之前就没用了的"金山快盘"....尼玛的坑爹的一个下午就这么开始了!!!!!混蛋啊!!!!! 嗯..实际情况就是只有20M左右的一个文件夹.尼玛的硬生生的给我同步了4个小时啊有木有!!!!坑爹还是坑你妹啊!!!!这么小的文件夹你想要闹哪样啊啊啊啊啊啊啊啊啊啊啊啊啊!!! 不得不说处理小文件的数度太慢了...其实也就3K数量级的文件而已.基本绝大多数文件也就1K不到....但是疼坑死人的金山快盘就是要慢慢的给你入库然后慢慢上传...而且金山的处理方式确实是很蛋疼的...直接使用sqlite也就算了..还不加密...嗯?嘛...不过在这里又一次吐槽了sqlite的无处不在啊.... [singlepic id=738 w=320 h=240 mode=watermark float=center] 话说一个下午就不知道怎么就过去了啊!!!!!(其实你是在等待同步的时候在刷网吧!!!!喂!!!)

git相关--搭建,调试,共享与自动构建 (周末干的事情随笔)

嗯.重隔了好几个月之后重新开始了git的欢乐之旅啊= =~(今天太晚了.明天搞起~)

再不写写的话又一周又要过去了= =~

进入实验室之后争取到了一台非常非常牛逼的服务器啊= =(至少就我目前看来...).顺带再次晒瞎我的狗眼:

[singlepic id=737 w=320 h=240 float=center]

不得不感叹一下还是实验室给力啊= =直接就能使用这样的服务器= =瞬间湿透的配置啊..不过话说回来.这么好的配置落到我的手上我也不能发挥什么太大的作用啊..不知道还能拿来跑什么..又不能运行windows玩SC2(瞧你那点追求!)

嗯..又扯远了...说道正事,嘛.其实就是重新在一个linux的机器上面搭建一个简单到不行的git环境,然后能远程提交并自动将更新提交编译...

在这里不得不先好好的赞叹下git啊..分布式的架构保证了git只要安装了就能随意的进行不管是服务器还是本地的初始化了= =~

[瞬间两周过去了..这个日志还在坑啊....]

今天的小收获

早上收邮件的时候发现了ubuntumaillist的一个新邮件,里面是一个中文翻译小组的说明提示11.10版本的翻译工作的一个时间线.里面还给出了翻译工作的一个url.由于好奇就进去点了一下.发现是一个在线的翻译工作,里面包含了绝大多数需要在ubuntu下面进行中文本地化工作的字符串以及一些简单的介绍..

地址在这里:https://translations.launchpad.net/ubuntu/oneiric/+lang/zh_CN

新特性的支持?

我向来是喜欢用firefox的.而且会一直的进行更新..最近就又一次的体验到了FF的强大魅力与快速支持新特性的本领啊...

一个用纯css3写的一个简单的表单.在"号称"支持html5与css3使得IE9上面就是一大坨" "啊!!!而在FF下面却能够较好的支持(虽然不是完美的支持...)

下面截图为证啊~

IE9下面:

[singlepic id=730 w=320 h=240 float=]

外面包的一圈屎绿色是想怎样?难道是阿瓦达索命谈了一圈返回来了报成了一个长方形?嗯?!

FF5下面:

[singlepic id=731 w=320 h=240 float=]

相比之下FF5就要好得多啊==~至少该显示的都显示出来了.对应的动画也是没有问题的.......

所谓一个geek(伪)...我表示还是要坚持自己的选择啊!

关于为什么不用chorme而是FF...那又是另外一段佳话了(雾).....

20110814

又陷入了一种迷茫的截阶段.总觉得对什么都看不在心上

Qt与MFC的区别(转载+自增)

先来大段的原文,最开始的出处已经找不到了....

前半部分是原文翻译,后面会加入自己的...<!--more-->

我曾经使用过QT和MFC来开发过软件,我想和大家分享我使用他们时所体会的不同之处。

我并非一个职业作家,这篇文章可能看起来不如专业的杂志和网站上的那么条理清晰。但是,我在这里是用我自己的语言来表达我自己的经验,希望能和你分享。本文不想假装客观公正,我只想表述我使用的经验。文中不会逐条的列举Qt和MFC各自的优缺点。我在使用MFC之前就已经使用Qt这个事实可能影响了我的客观性。

文章从实用主义的观点出发:我的老板给我一份软件的规划说明,并且让我来开发。其中一些我用Qt来开发,而另外一些我使用MFC来开发。

  • MFC(微软基础类库)是专门为windows设计的一个用于开发图形用户界面的类库。MFC或多或少使用了面向对象的方法包装了Win32的API,正因如此,这些API有时是C++,有时是C,甚至是C和C++的混合体。
  • Qt这个C++的图形库由Trolltech在1994年左右开发。它可以运行在Windows,Mac OS X, Unix,还有像Sharp Zaurus这类嵌入式系统中。Qt是完全面向对象的。

Document/View model

MFC 编程需要使用Document/View模式以及模板(template),如果不使用的话,编程将变得异常困难。而且,模板(template)设定了固定的结构,若所需结构乃模板未定义之结构,则编程难已。例如,划分一区域使显示两个视图(view)于两个文档(document)。还有一个经常的问题是:模板(template)创建了视图(view)却无法访问(access)它,文档(document)要做完所有事情,但是这经常会出现问题。

Qt不强制使用任何设计模式。如果你认为恰当,使用Document/view没有任何问题。不使用也没有任何问题。

伪对象 vs 真对象

归根结底,Qt和MFC的差异在于其设计的差异。

MFC的根本目的是访问包装起来的用C语言写的windows的API。 这绝非好的面向对象的设计模式,在很多地方,你必须提供一个包含15个成员的C语言的struct,但是其中只有一个与你所期望的相关,或者必须用旧式的参数来调用你的函数。

MFC 还有许多让人摸不着头脑的地方,函数名没有任何的连续性。比如,如果你创建了一个graphical类,直到调用了creat()以后该类才会被创建。然而对dialogs,必须要等到OnInitDialog()才能创建这个对象。奇怪的是到了views,创建该类的函数名竟然成了 OnInitUpdate(),......你自己创建一个类用他们的方式调用它,你的程序崩溃了。

比如说有一个dialog包含CEdit控件,如果没有调用DoModal()你就不能使用GetWindowText()。否则将会莫名其妙的失败。总之,MFC充满了丈二和尚摸不着头脑的事情,并且,这种错误很难调试。

Qt 恰恰相反,它的架构明显是经过精心设计的面向对象的。Qt因此在命名,继承,类的组织等方面保持了优秀的一致性。你只需要提供唯一一个方法的参数,仅此一个。在不同的类中调用方式也是有很强的连贯性。返回值也很有逻辑性。所有一切达到了简单和强大的和谐统一。一旦你使用了其中一个类,其他的类也就触类旁通,因为他们是一致的。

在Qt中可以利用Edit控件,用C++创建类的方法来创建自己的QLineEdit。永远可以马上访问任何的方法,不管它是显示还是隐藏。在这里没有迷局,一切都按照你认为的简单的方式来运作。

消息循环

MFC是事件驱动的架构。要执行任何操作,都必须是对特定的消息作出响应。Windows对应用程序发送的信息数以千计,遗憾的是,要分清楚这些分繁芜杂的消息是很困难的,并且关于这方面的文档并不能很好的解决这些问题。

Qt 的消息机制是建立在SIGNAL()发送和SLOT()接受的基础上的。这个机制是对象间建立联系的核心机制。利用SIGNAL()可以传递任何的参数。他的功能非常的强大。可以直接大传递信号给SLOT(),因此可以清楚的理解要发生的事情。一个类所发送的信号的数量通常非常的小(4或者5),并且文档也非常的齐全。这让你感觉到一切尽在掌握之中。SIGNAL/SLOT机制类似于Java中listener机制,不过这种机制更加轻量级,功能更齐全。

创建界面

MFC 无法创建大小动态可变的子窗口 ,必须重新手动修改代码来改变窗口的位置(这恰好解释了为什么windows里的dialog是不可以改变的)这个问题在软件进行国际化翻译的时候更加严重,因为许多国家表达相同意思需要更长的词汇和句子,必须要对每个语言的版本重新修改自己的软件。

在Qt中,任何东西都可以手动的敲出来,因为它很简单:为了得到一个button,可以这样写

button = new PushButton( "buttonName", MyParentName );

如果想在按下某个按钮以后想调用某断代码的执行,可以这样写:

connect( button, SIGNAL( clicked() ), qApp, SLOT( action() ) );

Qt拥有非常简单而又不失强大的layout机制,以至于不使用它就是在浪费时间了。

Qt 还提供了一个图形用户工具,Qt Designer,可以用来帮助建立用户界面。可以修改所使用的任何控件的属性。不用将他们放在严格的位置,可以通过layout完美的组织他们。这个工具所产生的代码我们是可以实际上阅读并且可以理解的。生成的代码单独放在一个文件里,在编程的同时,你可以随心所欲的多次重新生成用户界面。

Qt Designer可以让你完成许多在MFC中不可能完成的任务,比如用预先填好的生成listview,在每个tab上用不同的view来使用tab 控制。

帮助文档

用户选择图形开发环境的时候,帮助文档是否周全是左右其选择的重要因素。Visual的开发环境的帮助文档MSDN(这个还要单独掏钱购买)非常的庞大,有 10个CDROM光盘。他包罗万象,涵盖广泛。但是难免有泥沙俱下,主题模糊,关键信息不突出的遗憾。其链接设计的也很糟糕,通过链接很难从一个类跳转到其父类或者子类以及相关的类。如果你搜索一个关键字,不管是Visual C++, Visual J++, Visual Basic,只要包含这些关键字的信息统统的返回来。

Qt的文档设计的相当优秀。你可以到doc.tolltech.com上面一睹芳容。

Qt 的文档完备且详细的覆盖了Qt的方方面面,竟然仅有18M。每一个类和方法都被详尽描述,巨细靡遗,举例充实。通过Trolltech公司提供的链接或者是Qt Assistant工具,可以方便的从一个类或者方法跳转到其他的类。文档还包含了一个初学者教程和一些典型应用的例子。同时还提供了FAQ和邮件列表,方便通过Internet或者用户群来查阅。如果你购买了授权,在一天之内你将会得到Trolltech公司的技术支持。

实际上,Qt优秀的帮助文档使得寻求外部帮助的机会大大减少。Tolltech公司的一个宗旨是:有如此优秀的Qt产品以及其帮助文档,技术支持是多余的。

Unicode

使用MFC,如果要显示unicode,在编译链接的时候必须用到特殊的参数(和改变可执行文件执行的入口),必须在每个string前面加上T,将 char修改成TCHAR,每个字符串处理函数(strcpy(), strdup(), strcat()...... )都要改变成另外的函数名。更令人恼火的是支持Unicode的软件竟然不能和不支持Unicode的DLL一起工作。当使用外部DLL来开发的时候这是个很严重的问题,但是你毫无选择。

使用Qt,字符串用QString来处理,其本身是与生俱来的Unicode.不需要改变什么东西。不要在编译/链接时候增添参数,不要修改代码,只需要使用QString就可以了。

QSting类功能强大,你可以广泛的使用它,并且不要担心Unicode问题。这使得转换为Unicode非常的方便。QSting提供了转换为char * 和UTF8的函数。

显然,MFC的CString的设计相比于Qt的QString设计有着巨大的不同。CString以char *为基础提供了很少的功能。它的优点是当需要char *类型的时候,可以直接使用CString类型。乍看起来这个好像是个优点,其实实质上还是有很大的缺陷的,特别是可以直接修改char * 而不要更新类。在转变为Unicode的时候这个也碰到很大的麻烦。

相反,QString在内部以unicode存储string,需要时提供char *功能。实际上很少用到char *,因为整个Qt的API用文本的方式响应QString参数。QString还附带许多其他的功能,比如自动分享QString的内容。这是一个非常强大的类,你会喜欢在很多地方用它的。

国际化

使用MFC是可以国际化的,但是需要将每一个字符串放在一个字符串表中,在代码中到处使用LoadString(IDENTIFIET)。然后转化这些资源到DLL中,翻译字符串到所需要的语言,改变图形界面,然后调用程序使用这个DLL。整个过程是如此的繁琐,可谓牵一发而动全身。考虑的事情要面面俱到。

使用Qt的时候,只需要将字符串置于函数tr()中,在程序开发中这算是举手之劳。可以直接在代码中改变字符串的参考。Qt Linguist,Qt的一个工具,能够提取所有待翻译的string并按照友好的界面显示出来。这个用户界面非常适合翻译,使用字典,显示字符串内容,恰当的unicode显示,快捷方式冲突检测,检测未翻译的字符串,检测字符串修改情况,功能齐全。这个软件可以供没有任何编程经验的翻译者使用。同时该软件在GPL的版权下发布,可以按照你的需求来修改它。 翻译以后的文档保存在XML中,适合软件复用的原则。为软件增加一种新的语言版本仅仅是用Qt Linguist产生一个新的文件而已。

resources问题

使用MFC,一部分开发过程要依靠“resources”,在很多的案例中开发者必须使用他们。这样会导致如下的后果:

出了Visual Studio,你很难使用其他的工具来完成开发。 资源编辑器仅有有限的功能,比如:通过Dialog编辑器不可能改变所有的属性,一些属性可以改变,另一些属性则不可能改变。 然而Qt并没有资源的概念,这就解决了以上所提到的问题。Qt提供了一个脚本使得能将编入你的代码。对于界面设计,Qt Designer则创建了可读的代码。

价格

一旦你购买了Visual Studio,你将免费的获得MFC SDK。

Qt 在Unix上是可以免费获得其遵守GPL版权的版本(译者注:现在在windows 上也可以免费获得其GPL版本)。如果要开发不公开源代码的软件,必须购买Qt的授权。在特定平台下,每个开发者购买一个永久性授权,并获得一年的技术支持。(译者注:后面关于购买价格等问题删去,因为价格不固定,如果有疑问请到官方网站查询价格)

发布

在发布基于MFC的软件时,必须依靠存在于客户电脑上的MFC。但是这是不安全的,同样是MFC42.dll,可以基于相同的库得到3个不同的版本。通常,需要检查是否拥有正确的MFC42.dll版本,如果不是,就升级它。但是升级MFC42.dll会改变很多软件的行为。这让我感到很不舒服,如果用户在安装我的软件以后导致其机器死机该怎么办?

Qt则没有这个风险,因为Qt压根就没有“升级整个系统”这个概念。

[转载]脱节的国度_韩寒

原文链接点这里

脱节的国度

你一直问,他们何以如此的丧心病狂,他们却觉得自己已经非常的克制忍让。

你一直问,他们何以如此的颠倒黑白,他们却觉得自己已经非常的公正坦率。

你一直问,他们何以如此的包庇凶手,他们却觉得自己已经非常的愧对炮友。

你一直问,他们何以如此的掩盖真相,他们却觉得自己已经非常的透明开放。

你一直问,他们何以如此的生活腐化,他们却觉得自己已经非常的艰苦朴素。

你一直问,他们何以如此的骄横傲慢,他们却觉得自己已经非常的姿态低下。 <!--more-->

你觉得自己很委屈,他们也觉得自己很委屈,他们认为,在清政府的统治下,老百姓连电视机都看不上,现在电视机已经走进了千家万户,这是多大的进步。

他们觉得,我们建了这个,我们建了那个,你别管过程中发生了什么,也别管这是给谁献礼,至少你用到了吧。你以前从上海到北京火车要一天一夜,现在只要不被雷劈,五个小时就到了,你为何不感激,为何充满了质疑?

偶然发生一个安全事故,中央最高领导都已经表示了关心,我们还派人来回答你们记者的问题,原来赔17万,现在赔50万,甚至撤职了一个兄弟,事情都做到这 份上了,你们为什么还抓着一些细节不放呢,你们的思想怎么反而就这样不开放呢?你们的大局观都去哪里了呢?为什么要我们谢罪呢,我们又没犯罪,这是发展的 代价。迅速处理尸体是我们的惯例,早签字多发奖金,晚签字少拿赔偿,这是我们的兄弟部门在强拆工作中被证明了行之有效的手段。掩埋车厢的确是当时一个糊涂 做出的一个决定,况且是上头叫我们这么做的。因为上头觉得任何可能引发的麻烦都是可以就地掩埋的。错就错在大白天就开始施工,洞挖太大,而且没有和宣传部 门沟通好,现场的摄影记者也没有全控制住,准备工作比较仓促。这次事故最大的教训就是以后在就地掩埋某些事物的时候还是要考虑到物体的体积和工作的保密。低估了。

他们认为,总体来说,这次的救援是成功的,及时的。调度合理,统筹规范,善后满意。唯一的遗憾是在舆论上有点失控,他们觉得这就不是我们的责任了,舆论不归我们管。

他们认为,从大的来说,我们举办了奥运会,我们取消了农业税,这些你们不赞美,老是抓住一些细枝末节的东西,这是什么居心。我们本可以在政治上比朝鲜更 紧,在经济上比苏丹更穷,在治国上比红色高棉更狠,因为我们拥有比他们更多的军队,但是我们没有那么做,你们不感恩,却要我们谢罪,我们觉得很委屈。这个 社会里,有产者,无产者,有权者,无权者,每个人都觉得自己很委屈。一个所有人都觉得委屈的国家,各个阶层都已经互相脱节了,这个庞大的国家各种组成的部 分依靠惯性各顾各的滑行着,如果再无改革,脱节事小,脱轨难救。

国家为什么不进步,是因为他们中的很多人一直在用毛泽东斯大林时代的他们来衡量自己,所以他们永远觉得自己太委屈了,太开明了,太公正了,太仁慈了,太低 姿态了,太不容易了。他们将科技裹着时代向前走的步伐当成了自己主动开放的幻象,于是你越批评他,他越渴望极权,你越搞毛他,他越怀念毛。

有一个国家机器朋友对我说,你们就是不知足,你这样的文人,要是搁在四十年前,你就被枪毙了,你说这个时代,是进步了还是退步了。

我说,你们就是不知足,你这样的观点,要是搁在九十年前,早就被人笑死了,你说这个时代,他到底是进步了还是。

20110727 本来不想写点什么的

其实这片文章要说的还是那件事,在国内说大不大说小不小的高铁追尾事件.

其实很多文字的都在网上看看也就罢了...下面就随意的放几张图吧...<!--more-->