2009年8月21日星期五
2009年8月19日星期三
原来是这样的工作效率
本人是一个大型公司分公司的,"有幸"来总部开发项目,见识到了这里的工作效率,不但是沟通成本的问题,大多数人不上心是项目达不到我认为的理想的效果的原因,设计不好好做,开发的也没有疑问,勉强做完设计也就罢了,不去想为什么;工作时间玩游戏聊天的大有人在,我这个分公司的不小心跑到这个重要项目里面居然成为主力;一看他们之前的写的代码,意大利面条,捏着鼻子看完,为了一个GenericDao都争取了好久,而技术负责人对某些技术的无知而又不愿意去学习的情况真是恐怖,既然定了在项目在JDK1.5的平台上,却不使用新特性,Dao设计的特别差,造成了大量代码冗余;最后多次和其他开发人员沟通,最终是换来;决定系统使用大量Ajax,居然没有几个人会;说的如此重要,我这个原本做设计和架构只得负责写了大量的JavaScript;可怜我玩命工作,在短短两个星期之内开发了框架,培训了人员,贡献了大量代码,轮到评绩效,居然是个C;
是否看重了工作,是否太用心,是否在自己身上花的时间不够?在分公司,由于人手少,没有可以推卸的人和对象,什么都要自己搞定,反而有成倍的工作效率?而在总部号称重要项目的大型团队,反而觉得难受;也许这就是国企吧,在国企,表现最重要;选择国企的原因是工作性价比比较高,身体要紧,我要悠着点了
360safe导致Eclipse启动出错?
2009年8月7日星期五
不再由于p2,而迟疑升级到Eclipse 3.5
7.5, 其是基于3.4, 为了装个SubClipse插件是费劲了功夫。由于这个我不喜欢的P2,我迟迟没有用Eclipse 3.5,
我喜欢用Link的方式引入,并且按照插件名组织好,不喜欢可以很方便的去掉一些插件,虽说dropin目录可以提供手动安装下载的功能,但是由于GUI在线安装时P2不能选择目录,有些插件不提供下载的时候就非常麻烦了,只能安装之后在去安装目录中找出来,自己组织到另外的文件夹中,这样非常的烦人,而3.4之前宣称的可以enable
classic update manager的功能,在JEE的eclipse版本中都找不到选项,只有eclipse-SDK版本中可以,当时甚至有人总结eclipse
3.4是质的倒退。今天突然心血来潮在网上找这个方面的解决方案,找到了一个比较好的方法:
# I start eclipse with:
-configuration C:\eclipse\extensions\foo\eclipse\configuration
# I install foo using the update manager.
# Now I can use the extension by creating a foo.link file inside the
links directory of an eclipse installation (you might have to create
the links directory) containing:
path=C:/eclipse/extensions/foobar
另外,貌似3.5中JEE版本可以选择性的enable classic update
manager了,那么对比上面的方法,更倾向于使用老版了更新管理器安装插件到指定目录。
2009年7月15日星期三
2009年7月2日星期四
突然想赞一下VeryCD和电驴
其实之前基本上是不用电驴的,下电影用迅雷多些,最近由于找一些学习资料,才用电驴比较多;
迅雷的速度确实不错。但我最不爽的是迅雷客户端广告,即使用迅雷,我用完马上就关掉,避免偶尔给我弹个广告出来!
相对于VeryCD客户端,迅雷就像全身贴满了创口贴一样恶心
VeryCD页面上的广告大多会非常的干净和漂亮,不像很多其他网站和客户端上面满满都是关于"增大"之类的广告
最近看到有人评绿坝的文章,说到了暴风影音曾经造成的全国断网事件,我其实一直对暴风影音嗤之以鼻,我用的MPC版本是VeryCD发布的,
干净没有广告,可怜我们信息部门,很多搞维护的同事给需要安装媒体播放器的同事还安装满身都是广告的暴风影音!终于有一次开会的时候,
我忍不住了,把正在讲操作系统镜像制作而集成了暴风影音的同事打断了,说
暴风影音是个流氓,你们不知道啊?它是盗用了开源的MPC成果不惜损害千万用户权益,蒙混菜鸟电脑使用者,并且以此发家致富的流氓你们不知道啊,
要用就用VeryCD版的StormPlayer, 或者用开源的smplayer!
在互联网创业英雄的榜单中,我对VeryCD的创始人是非常敬佩的,对于有些赚得金钵满盆的人觉得在创业经历上可以学习,但是在道德层面上我是非常讨厌的。
纵观现在的网络共享平台,在线媒体也好,即时通讯也好,还有哪几个客户端可以如电驴一样干干净净?
当你登陆verycd的首页,标题拦上的哲言是否让你偶尔深思,又偶尔斗志激昂呢?我尊敬和喜爱verycd团队!
2009年6月19日星期五
python的几个图表解决方案
(1) 科学绘图,数学函数,GNUPLOT,http://www.gnuplot.info/,它有一个python的bind,但是考虑生成柱状饼状图等图表还是不考虑它为妙
(2) XML/SWF Charts,
这个实际上也不是python的,而是接受标准的XML数据,但是其生成的图表非常的好看,并且有交互性,相对于静态图片图表我更加倾向于flash,只可惜它是商业软件,免费版本有如下限制,点击图表将进入它的主页;另外不能在另外的flash中显示一个图表,我理解为不能图表嵌套,所以免费版本基本也可以接受吧
(3) ChartDirector, 这个图表软件几乎为所有主流编程语言提供了API,可是免费的版本没有,而且显示效果我看也没有XML/SWF Charts好
(4) 可以采用Eclipse Birt项目,把BIRT部署为单独的web app,然后传送数据让其显示,这样做就是又引入了java了
(5) 在线方案,使用google chart api,动态由google给你生成png图片,然后你显示就可以了,但是这样对于内网应用不行。
(6) 目前我觉得最好的方案,open flash chart, 是使用flash生成图表的,并且是开源的,这就具备了XML/SWF
Charts的优势,交互性比较强,然而从显示效果上来看,确实不如XML/SWF Charts,
不过这些只要努力就可以改变的,并且它的样式可以定义,所以图表是否漂亮是自己定制的本事了。并且SWF是开放的格式。open flash
chart2 它使用现在最流行的json数据格式,这实际上比xml更加简单和小巧,并且没有xml解析的时间,也许在性能上可以更加的突出吧。再有就是open
flash chart也不是python独有的方案,由于json是标准格式的,现在由的库基本所有的主流编程语言都有库了,非常不错。其中python的绑定就是pyofc2,
http://btbytes.github.com/pyofc2/. 只要你搞清楚了open flash
chart的格式和控制,那么你用任何语言开发都不要重复投资学习了,这一点真是不错。
(7) 同样是flash chart解决方案, amchart, http://www.amcharts.com/,
它也提供了免费版本,但不是开源的,唯一的限制就是会在生成的图的左上角有一个到其主页的链接
2009年6月12日星期五
对绿坝很无语
况且也屡屡收到FLG等等组织发的反动邮件, 抱怨两句也就算了, 最终还是认了, 翻墙翻惯了之后, 也利索了, 对于有经验的的人,
这点阻碍也就算不了什么了.
最近在网上闹得沸沸扬扬得的信工部,绿坝事件, 刚开始也没有什么, 反正此等软件是限制不了我的, 大多数会重装系统的人也限制不了,
就算要微软加入系统了, 我还有Linux呢, 但是看到所谓4700多万人民币买断其一年的服务供全社会使用这样的消息时, 我受不了了,
真是太无语了.
这种过滤软件, 世面上早就有, 我记得好像10年前就有美萍安全专家等类似的软件, 如果家长需要, 自行安装下载这样的软件即可, 何必这么大手笔的喂宝这两家小公司呢? 就算全社会招标来做, 如果只是一年让全社会使用, 就算不花钱, 我想很多大公司也是愿意的, 这能先期占领市场啊! 为什么要花这个冤枉钱!如果有钱, 如果真的想促进中国信息业发展, 为什么不资助类似于文泉驿这样的项目, 或者干脆买断几个商业字体供全社会使用, 这样利国利民...
我们的胡主席, 我们的温总理, 尚能通过网络听取大家的意见, 因此被大家亲切的称为"拾锦八宝饭", 而下面这些个小鬼究竟哪个经搭错了,
按说搞信息产业的, 思维应该比较新才对.
我无语了, 我真的无语了...
我甚至开始担心我们国家的未来...
无语了...
2009年6月11日星期四
从UCWEB和雷军博客想到的
触摸滑动控制前进后退滚动
缓存页面
多窗口浏览
这两点大大加强了用户的体验,所以才成就了它的成功,随着移动互联网的发展,我想它们还能进一步发展壮大!
从它的导航栏里,我找到了雷军的博客,阅读了之后,其中关于创业的文章让我印象非常深刻,他说到了产品要做到极致才可以获得用户,另外快速抢占市场也非常重要,结合自己在里面软件开发工作中的经验还有眼前的UCWEB带给我的震撼,感受真的是非常深刻!在做产品的时候极致和快速是两个有着辩证关系的方面,要做到极致自然要更多的时间,这需要更加高的开发技术才可以尽量缩短开发周期,在这一点有时在做产品的时候有点心有余而力不足,所以加强学习是今后很长一段时间内的事,自己懂得的还太少太少!
2009年6月5日星期五
遗失的美好
大学里面曾经有一段时间沉迷于吉他和midi音乐,想着自己用音乐软件怎么谱曲做midi音乐。
那个时候最大的兴趣是计算机,所以始终没有搞出过什么名堂,所谓弹了三年吉他还停留在初学者的水平。
工作了之后,有了钱,终于买了个好点的吉他,然而工作挤占了太多的时间,计算机也是个学不完的东西,再加上自己是个兴趣,慢慢吉他还是蒙上了灰尘。
可慢慢发现自己慢慢成为了没有什么特别业余爱好的人,这是一个很危险的事情。打球是锻炼身体,不能算;看电影是消遣和学习英语,也不能算,那么我那把蒙尘的吉他呢?钱该要把它拾上来好好练练了,也不枉自己曾经那么爱过吉他。可是那样的心情呢?那样的同学呢?
2009年6月4日星期四
加速smplayer的运行
自然想到了smplayer, 它在windows下的移植版本非常好, 现在mplayer网站上都推荐它.
下载之后,开始的体验并没有怎么好, 因为总感觉界面载入有很多迟延, 不过怎么想, smplayer应该不会这样才对.
今天偶然在设置里面选择了默认字体, 发现程序运行速度大大提升了, 猜想是由于之前没有预设的字体, 导致程序需要探测字体,
而设置了默认字体之后能大大增加速度, 顺便说一下, 我用的zune主题, 该主题好像很多地方都有问题, 比如GTK程序默认下的中文乱码等.
smplayer是基于QT程序, 从感官体验上来看, 似乎QT开发的windows程序要舒服很多,
用smplayer的感觉就比基于gtk的stardict和gnucash要舒服些. 如果用c++开发跨平台图形界面, 会要考虑QT一下了.
2009年6月2日星期二
my blog has been marked as a spam blog?
It's a huge mistake!
Recently, I cann't visit my blog directly from China, because of the blocking of GFW, and I keep updating my blog via gmail. Today, when I login to blogger.com via proxy to edit a post, to my surprise, my blog has been marked as a spam blog! I checked blogger's service terms, and the criteria of judging a spam blog, I am sure I have nothing to do with it! I insist blogger send me an email to explain this, why my blog was marked as a spam blog!
我的blogger被标记为垃圾博客?!
最近好久没有登录blogger了,由于在中国大陆防火墙的限制的原因,一直使用gmail邮件发送blog,今天突然想起要登录修改一篇post,就发现我的blog已经被标记为垃圾博客了,如果不及时申请解除封锁,那么在20天内将被删除?我看了blogger关于垃圾blog的评判规则, 我觉得我没有任何违反的地方,鉴于此,我强烈要求blogger给我发邮件解释!这是侮辱!
LVM初接触
上个星期在一台服务器上装CentOS的时候选择要系统自动分区,它给分成了一个/boot卷,另外一个就是LVM,突然好奇,CentOS默认的在服务器上应该不错,所以就要它默认装了。昨天突然想到这是个光盘景象服务器,将来要添加硬盘怎么办,除了新建一个分区挂载新的硬盘之外,那么能否一个分区跨越硬盘呢?于是google了LVM,看到LVM的资料,我又一次的感觉自己之前了解得太少了。之前为了充分利用这个160G的硬盘,没有考虑平常系统恢复的需求,要是我自己操作,要是系统当掉了,肯定可以尝试使用Live
CD修复,而且原来以为那个逻辑卷管理器占用了整个物理分区,那么也不存在坏硬盘坏一个分区的情况,所以只分了一个根分区和一个swap分区。后来领导想到我不在的时候,如果系统当掉,要能直接像GHOST那么恢复,那么自然根分区就要分开了。我现在需要的是减少ext3分区大小,很多文章上都是说的使用reiserfs时扩大分区的情况,
下面说说我的经验
扩大分区时, 是先扩LVM大下,然后括文件系统分区大小,文件分区大小的扩大,ext3和reiserfs可以动态在线扩展,并且速度非常快。涉及到磁盘减少大小时,就不能在线了,如果是根分区的改变,还必须使用live
cd启动,而不能是本身的操作系统。可以想到的是,减少分区,要先缩文件系统,再缩逻辑卷。并且需要注意的是,逻辑卷要先激活才能挂载,不要尝试直接挂载/dev/sda2之类的分区,它的分区类型是8e,是不能直接挂载的。LVM的相关命令里面,可以分为几个组,以pv开头的命令,是表示处理物理卷的相关命令,vg开头的命令是处理卷组的工具,以lv开头的是处理逻辑卷的工具。相关使用使用-h参数打印命令帮助即可。值得注意的是,文件系统的resize和逻辑卷的resize的大小单位可能不一致,所以做两次resize可以保证文件系统使用了所有的逻辑分区大小。比如第一次resize缩小到你需要的大小之下,然后缩小逻辑卷,然后再一次不带参数resize文件系统,文件系统就能完全的使用逻辑卷大小了,
下面是参考命令。
vgdisplay #display the volume group, you can get volume_group_name here
vgchange -ay volume_group_name
lvdisplay #show the logic volumes
#假设要改变大小的是/dev/VolGroup00/Lov00, 需要缩小到10G
e2fsck -f /dev/VolGroup00/Lov00 #在resize之前强制要求的
resize2fs /dev/VolGroup00/Lov00 9G
lvreduce -L10G /dev/VolGroup00/Lov00
resize2fs /dev/VolGroup00/Lov00
使用vim编辑docbook文档
另外, vim有一个xml.vim插件,把此插件放在ftplugin中,当你编辑xml文档的时候,就可以tag自动补全了,你会感觉使用它写xml简直是行云流水,使用参看一下文档:help xml-plugin。基本的用途当你输入<tag>就能自动补全</tag>, 输入<tag>>就能自动补全</tag>并且换行,光标停留在将要输入的地方,非常贴心。
docbook虽然也是xml文档,但是你用vim编辑时,会发现自动补全的功能丧失了,因为vim为它设定了单独的文件类型docbk,所以在ftplugin目录中,做一个名为docbk.vim到xml.vim的符号链接,在windows下就只能复制了,其实这个在xml.vim插件的安装说明上就有,我忘了看了,所以还疑惑了好一会,为什么编辑docbook文档时不能自动补全。
最后,顺便搞了一下在window下安装使用docbook的方法,在linux下,我最常用xmllint作xml验证,还有xsltproc做xslt转换,很多网上有的文档都是使用java的xslt处理器工作的,因为通常会在linux下使用一个Makefile来驱动,最好有xsltproc的windows版本就好了,在网上查了一下还真的有,我在windows上本来就设定了一个GNU工具集,所以只要把xsltproc的可执行文件还有相关支持类库放到GNU工具集一起就可以了,Makefile文件也能在windows平台上用来编译docbook文档了。这里有一个设置的文档。
需要注意的是,xmlcatalog的设置,需要设置一个XML_CATALOG_FILES环境变量指向这个catalog文件,那么在处理xml文档时就会在本机找DTD文档了。
2009年5月22日星期五
亲爱的,你听我说
我在写这些东西的时候, 你就坐在不远的地方背对着我,
你知道吗, 我此刻有多么的难受和伤心, 看着你刚刚的表现, 我对我们的未来生活不禁担心起来.
在一起这么久, 我总想着我们可以跨越一切困难, 一起走下去, 我总认为作为男人, 我可以承担起组建家庭的一切. 交往快两年了, 中间吵吵闹闹, 甚至一度分手, 可每当想起你的好, 想起你写在我日记本上的那些傻傻的文字, 想起被你收拾的干干净净的家里, 我就舍不得, 我想, 我努力一点, 我容忍一点, 我们在一起就会好的.
宝贝, 我从来不理会别人的评价, 也从来不想去想我们之间学历的差距, 我也没有认为我正规大学毕业和你一个旅游职业学校的中专生相比会有什么优越感, 我相信自己的感觉, 我觉得你会成为一个好妻子, 可是, 我有时候真的发现我们不能互相理解.
今年, 旅游业不景气, 一直在张家界没有赚到什么钱的你, 准备到长沙来发展, 也为将来结婚在长沙立足打个基础. 而你似乎也对旅游业厌烦了, 不想再在旅游业内工作. 我托熟人在机票代理行业给你找个位子, 可是回复是今年经济情况不好, 大家都要熟手. 我们也一起分析过你的优势和劣势, 学历低, 没有什么特长, 再加上想转行无疑是艰难的, 在各大招聘网站搜索的结果, 适合你工作的没有几个, 而你却还是迷茫的, 你在想着期望中的导游高薪水, 而实际上又是饥一顿饱一顿的日子, 我想你先安定下来, 然后我辅导你学习专业技术, 提升学历, 然后再一步一步发展, 可以似乎看不到, 在你的眼中, 那些职业都是看不上的, 可自己实际上又是高不成低不就的, 你的眼中我看到的斗志越来越少.
刚给你在网上参考的职业, 帮你发邮件去应聘咨询, 你却担心会马上聘上不能下周回去跟你见父母, 这让我很难受和失望, 还记得去年我推荐你来我们公司应聘呼叫中心人员, 你却连简历表都填不好, 也许你没有经历过这些, 可是我心中的你, 冰雪聪明啊, 人只要有信心就可以提升啊, 你为什么就不能坚持, 为什么就不能理解呢?
去见你的父母, 有时间都可以去, 我的父母你见过了, 大家都喜欢你, 房子也准备买了, 只查你能在长沙立足下来, 可我看到现在的你真是好无助, 我不知道你心里到底在想什么, 我跟你说, 你听不进去, 还理直气壮的跟我吵, 可我是为了我们的将来啊.
我是一直好好奋斗的, 也会为了你的幸福一直奋斗下去, 可是作为一个刚刚毕业三年的人, 我现在拿什么来养活你呢, 你说你不想当家庭主妇, 可是你要有自己的能力能立足啊, 我需要你和我一起奋斗啊, 我甚至在心里设想, 将来我们要一起创办一个小公司, 我利用业余时间负责技术层面的东西, 你来做日常管理的工作, 我想我们会比那些对我们评价的人过得好的, 可你的斗志呢, 你跟我说过的斗志和信心呢? 你的智慧和理解呢?
宝贝, 对不起, 我决定了, 我要等你把工作确定了, 不管是在张家界还是在长沙, 我才会跟你回去看你的父母, 否则我不知道去你的老家对于我们还有什么样的意义. 对不起, 我要给你压力的, 我不要看到你嘴上说着要努力, 实际上工作找不到工作, 学习又学习不好这样的生活.
这些我如果跟你谈, 你会不跟我吵吗? 我写给你, 你能看进去吗? 亲爱的, 我觉得我们之间到了一个坎上了, 要是迈不过, 我们就没有未来了. 你能否和我携手走下去?
使用pure-ftpd取代vsftpd
自从使用ftp服务端软件以来就是使用的vsftpd,因为最初它是内置在redhat安装光盘里面的,并且它的表现一直不错.
使用pure-ftpd的理由, 支持定义ClientCharset, 所以ftp和samba共享目录时不会出现乱码
Pure-ftpd功能很多, 如果要自定义和配置用户登陆账户还有配额等设置, 要非用pure-ftpd不可了.
但是在Centos上, pure-ftpd默认的使用PAMAuthentication是不工作的, 要改到UnixAuthentication才可以, 我为了这个功能试验了一个下午, 最终从网上搜到有其他人也有如此的问题.
而使用Virtual-User的功能, 最初也犯了个大错误, 最终仔细看文档才知道最终配置在配置文件中的不是pureftpd.passwd,而是增加完用户之后, 必须使用pure-pw mkdb生成pureftpd.pdb索引. 认真阅读README.Virtual-User的说明文件!
当blogger被封还有MS Live Space没有广告的时候
突然上我的live space居然发现没有广告了~ 说实话, Live Space上的广告并不讨厌, 挺漂亮的
但是以前有blogger, Live Space只是做一个备份而已. 看来我现在要重新启用了, 并且要改变习惯
使用gmail来发布blog,就能同时保证两个博客的更新了, 并且还能备份到gmail党中, gmail总没有理由被封吧~
2009年5月15日星期五
sphinx的一点使用心得
为什么不考虑Lucene? 避免引入过多的复杂性,Lucene是基于Java的程序,我现在是对一个光盘镜像数据库进行索引,光盘的描述信息都存储在了和光盘镜像同名的的xml文件中,搜索界面直接用php和python即可,很简单,不想引入Java,在服务器上也不用过多配置了,另外,考虑到sphinx有一个xmlpipe驱动,我以为我只要写一个程序读取所有的xml文档,然后按照要求输出即可。xml文件信息中没有数据库中id的概念,而是根据上传时间生成了一个时间字符串,精确到秒,比如20090514101210. 我按照我的想法做了,发现一个问题
(1)Sphinx作为文档id的话,必须要求int值,在这里我是想直接使用时间字符串来做,可以经过实验发现sphinx最多支持id的长度为10位,也就是100亿,而时间字符串超长了。
(2)Sphinx在索引时并没有存储原始信息内容,所以搜索结果除了文档ID,什么也得不到,需要根据ID重新获取记录的原文,这样在没有数据库的条件下,从XML中检索效率太低,本来考虑在建立索引的时候,生成一个文档id到记录原文的索引,然后从此索引中拿数据,但是这样觉得多此一举,sphinx对于mysql是原生支持的,所以还是转换一次,从xml数据到mysql数据库,再用sphinx检索才可以。
从这两方面来讲,sphinx还是不能和Lucene比的,Lucene索引的数据中就可以直接获取摘要不用再从纪录集中取了,对于任何性质的文档都可以进行索引了。Sphinx的优点就是简单快速,所以要根据需要灵活选取了,为了不引入Java,我在此项目中还是使用sphinx好了。
2009年5月14日星期四
等待中的catalyst 9.5
目前使用开源ATI驱动的问题是有的时候鼠标所在的位置会花一小块,虽然也不是什么big deal,但是还是感觉不爽,今天网上偶尔看到有关于性能调整的文章,照做了,果然产生了效果。
#section device
Option "AccelMethod" "EXA" #default is XAA, EXA is faster
Section "DRI“
Mode 0666
EndSection
Section "Extensions"
Option "Composite" "Enable"
EndSection
早先是知道这些调整选项的,但是ubuntu自动配置之后运行起来没有什么问题,就没有去管它了。现在调整一下效果更好了,不错,呵呵。
另外,找到了一个在gnome dual monitors下控制窗口的脚本,原来是想自己开发使得metacity具有转换monitor, workspace的功能,其实借用wmctrl程序,结合一些其他的小工具,这个功能就可以实现了,然后绑定到一个快捷键,即可达到一键移动窗口的功能了,在这个小脚本里面wmctrl指令的使用并没有什么特殊性的,值得关注的作者使用一些小工具做到了找到当前活动窗口的功能,这里贴一下, 根据这个脚本还可以调整wmctrl指令参数,达到把窗口在workspace中间传送的功能哦。
#!/bin/bash
# swap_monitor.sh
# Moves the active window to the other screen of a dual-screen Xinerama setup.
#
# Requires: wmctrl, xprop, xwininfo
#
# Author: Raphael Wimmer
# raphman@gmx.de
# get monitorWidth
monitorLine=$(xwininfo -root | grep "Width")
monitorWidth=$((${monitorLine:8}/2 ))
echo $monitorWidth
# get active window id
activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")
activeWinId="${activeWinLine:40}"
# get window position
xPosLine=$(xwininfo -id $activeWinId | grep "Absolute upper-left X")
xPos=${xPosLine:25}
# get window width
xWidthLine=$(xwininfo -id $activeWinId | grep "Width")
xWidth=${xWidthLine:8}
# calculate new window position
if (( ${xPos} + ${xWidth}/2 > ${monitorWidth} ))
then xPos=$(( ${xPos} - ${monitorWidth}))
else xPos=$(( ${xPos} + ${monitorWidth}))
fi
# make sure window stays on screen completely
(( ${xPos} < 0 )) && xPos=0
(( ${xPos} + ${xWidth} > 2 * ${monitorWidth} )) &&
xPos=$((2*${monitorWidth} - ${xWidth}))
echo ${xPos}
# if maximized store info and de-maximize
winState=$(xprop -id ${activeWinId} | grep "_NET_WM_STATE(ATOM)" )
if [[ `echo ${winState} | grep "_NET_WM_STATE_MAXIMIZED_HORZ"` != "" ]]
then
maxH=1
wmctrl -i -r ${activeWinId} -b remove,maximized_horz
fi
if [[ `echo ${winState} | grep "_NET_WM_STATE_MAXIMIZED_VERT"` != "" ]]
then
maxV=1
wmctrl -i -r ${activeWinId} -b remove,maximized_vert
fi
# move window (finally)
wmctrl -i -r ${activeWinId} -e 0,${xPos},-1,-1,-1
# restore maximization
((${maxV})) && wmctrl -i -r ${activeWinId} -b add,maximized_vert
((${maxH})) && wmctrl -i -r ${activeWinId} -b add,maximized_horz
# raise window (seems to be necessary sometimes)
wmctrl -i -a ${activeWinId}
# and bye
exit 0
2009年5月12日星期二
使用gcc 4.3编译某些程序的出错问题解决
如果你编译的程序没有遵从这样的移植指引, 那么你就不得不自己去修改一下程序了.
2009年5月6日星期三
编写没有dos窗口的windows应用程序
(1) 如果启动其他的应用程序, 使用system函数是会产生dos窗口的, 要改用WinExec程序, 在地二哥参数中传入SW_HIDE常量才可以. 另外, 应WinExec有额外的好处, 那就是它默认从它launcher程序被loader的地方寻找要启动的程序, 所以你被启动的程序可以不在系统环境路径中
(2) 如果要使得launcher程序本身没有dos窗口, 也需要一些额外的设置, 需要在程序中写下如下的编译器注释:
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
当然你用了这个之后就必须使用VC的编译器了, mingw/gcc不认这个注释.
2009年4月28日星期二
继续等待ubuntu 9.04成熟
但是也还是存在一些问题, 首先是双显示器的问题
(1) 使用ATI官方驱动,窗口最大化时会把两个屏幕认成一个屏幕, 所以会跨越两个屏幕, 这点非常不爽
(2) 使用开源驱动不玩游戏, 不开compiz也可以接受, 但是不知道怎么回事, 使用fvwm会搞反双屏, 或者干脆有一个屏幕起不来, 真是奇怪.
由于metacity不支持配置快捷键切换窗口屏幕, 所以平常用fvwm居多, 而上面两条问题, 会让我感觉工作巨不爽, 甚至还没有windows下双屏感觉好, 在windows下顶多只是切换屏幕低效一点, 偶尔hydravision控制软件不响应一下, 其他的感觉都还不错.
其实9.04虽然没有宣称有什么巨大的改变什么的, 但是实际上是跨越很大的一个版本, 内核升级, xorg升级, 这些"大头"的升级在各个版本上甚至都造成了问题, 我也是从Arch上遇到问题改回到ubuntu, 现在这些我以前遇到的问题在9.04上虽然有所改善, 但是还不够, 所以继续我的8.10吧!
另外, 最近的很多业余时间都花在配置系统上了, 这样是不对的, 使用好的操作系统的目的是为了加速工作, 提醒下自己不能本末倒置了!
2009年4月26日星期日
使用metacity内置的符合特性
使用配置编辑期把metacity的符合特性打开了, 嘿, 居然可以了, 很漂亮, 而且tilda也可以透明了!原来我总以为要开xcompmgr才可以开tilda透明, 原来是要用metacity的复合特性!以前在8.10中试过metacity的这个功能, 但是觉得比较卡,不好用,有时候有花屏的情况,但是在9.04中,使用开源ati驱动, 完全没有问题!^_^
163有了ubuntu 9.04的源了
2009年4月25日星期六
ubuntu 9.04的一些贴心改变
顺便记一下使用AMD官方驱动的方法, 以前没有搞过的
./ati-driver-installer-- .run --listpkg
#follow the instrunction
#e.g for ubuntu 9.04
./ati-driver-installer-- .run --buildpkg Ubuntu/jaunty
#use dpkg -i install the generated deb files.
但是还有几个欠缺就是
(1) 使用ATI驱动,驱动X时,副显示器会狂闪几秒钟才启动,而主显示器不会,这让我感觉奇怪, 也担心是否会对显示器有影响
(2) 不知道是显卡还是X的问题,窗口最大化时认为两个显示器是一个桌面,所以会最大化到两个桌面上,这让我有点抓况!
只能用拖动来改变窗口大小了。
除了广为宣传的启动迅速, 支持EXT4之外, 还有几个地方让我感觉非常舒服
(1) gnome-display-properties, 对双屏的支持增加, 可以单独设置显示器, 它应该是调用xrandr命令来做这个事情,但是目前用起来还是有点不顺,比如设置无法保存, 设置不对的问题, 还需要改进。
(2) 在language support中, gnome界面菜单等希望用英文,而核心语言又希望是中文,能方便中文输入的要求,这两个在语言设置中可以分别设置不同的了。
(3) 新版本的gnome-do, 很有意思, 它的皮肤当复合窗体特性打开的时候特别有意思,有一个dock模式, 特别像苹果下的dock, 既可以快捷键打开命令, 又可以当任务栏用, 这点跟苹果系统很像, 用起来很方便,有些喜欢用苹果样式的就不用再去装AWN了。gnome-do就可以满足你了。
其他的,等待进一步发掘吧! 决定试着往9.04上转了, 如果显卡还有ext4文件系统经过一段时间的测试使用正常的话.
2009年4月24日星期五
ubuntu 9.04试用手记
ubuntu9.04昨天正式发布,了解到ubuntu 9.04上使用xorg-server 1.6, 这点和Arch的配置相同,由于之前在Arch上ATI显卡的问题,所以不甘心的想在ubuntu 9.04上试一下,是否是我配置Arch的功力不够,还是确实在软件方面有问题。
Desktop CD启动计算机的结果是双屏只有一个点亮,安装fglrx驱动之后,提示不能插入fglrx模块,这是由于和已经载入的radeon冲突造成的,但是desktop CD不是那么容易听你调摆的,当手工停用gdm之后,想手工卸载radeon模块,加载fglrx模块,系统居然死了,所以这让我狠下心来把以前装arch的分区拿来装这个9.04了,当然把arch打了个包备份了,防止要回来。
首先是顺便使用desktop cd安装,发现desktop cd硬盘安装时,它始终提示有磁盘分区挂载了,确实也是挂载了,但是只要安装的分区不是放iso的分区应该就没有问题,可是desktop cd还是在那提示,于是只有再下载了一个alternative cd了。安装成功。
安装私有驱动之后,光重启X是不行的,要么就自己把gdm的服务停掉,然后手工卸载radeon模块,然后自己加载fglrx模块,所以干脆重启好了。
但是重启之后,启动X故障,键盘都不响应,也退不出来,只有重启了,在这之前学聪明了,把gdm服务停掉了,在测试的时候使用startx来启动X。在xorg.conf serverFlags节中加上DontZap为false的配置,这样就可以使用Ctrl+Alt+Delete关闭X了。
重启之后才发现刚刚可能不是启动故障,而是使用fglrx驱动造成X CPU占用100%,所以需要很久才能启动起来,在查资料的时候,发现了ubuntu关于这个问题的讨论。从文中貌似到了现在fglrx已经可以和xorg-server-1.6合用了,但是我这里的结果还是不行,另外也了解到了-ati驱动中已经加入了对ATI r6xx芯片的支持,也许这个驱动可以呢?于是卸载了fglrx驱动,改了xorg.conf, 使用开源驱动。
使用开源驱动默认只点亮了一个显示器,比如我只点亮了左边的显示器,这个时候,如果使用xrandr或者gnome-display-properties调整,会造成左边(主)显示器,显示整个虚拟桌面的右边,于是都没有办法点到菜单了。找到了开源ati驱动的网页,这个网页上的内容值得一读,另外关于双屏的设置,这个网页中所提到的文章应该好好读一下。由于xrandr是比较新的东西,以前做双显我了解到都是在xorg.conf中来作,并且aticonfig也是这么来做的,复制Device, Screen, Monitor节,然后在ServerLayout中配置两个屏幕的关系,但是这样做,在现在的xorg中,搭配ati驱动是会造成xorg不能启动的。我照着xrandr的how to实验xrandr的命令才后然发现下面的指令:
xrandr --output DVI-1 --mode 1280x1024 --rate 75
这样才点亮了右边的显示器,也才让我看到了在ubuntu 9.04下配置双显示器的可能性。
如果要连接在DVI-1上的显示器在主显示器的右边,使用下面的指令:
xrandr --output DVI-1 --right-of DVI-0
如果xrandr报错,提示屏幕大小不对,那么需要检查一下xorg.conf中关于虚拟屏幕的设置,比如我两个17的显示器,每个分辨率为1280x1024,那么虚拟屏幕大小至少应为2560x1024,我那时在arch上配置不成功,它提示屏幕最大只支持1280x1280,我曾经怀疑是开源radeon驱动仅仅可以支持到此大小,所以一度放弃了,但是也没有在xorg ati驱动的页面上找到此限制,所以才决定今天再试一下的。
但是很有意思的是,在ubuntu 8.10下,fglrx私有驱动工作得非常好,所以没有那么多限制了,直接使用ATI catalyst contrl center配置好就可以了,管它什么VitualScreen的设置!
一般的how to都会说要把xrandr的命令做到.xinirc,或者Xsession中去,但是ubuntu不用那么麻烦,使用gnome-display-properties改双屏设置之后,会在$HOME/.config下生成一个monitors.xml文件,里面保存了显示器的分辨率,相互关系等信息,在这方面ubuntu这是做得不错!
使用开源驱动,对于r6xx以上的显卡,3D支持还没有,性能也不佳,所以桌面效果就不能开了;否则就要等哪天fglrx驱动和xorg-server-1.6可以完美合作了。
看来我还是继续使用ubuntu 8.10好了!显卡支持好,偶尔还能打下Nexuiz呢!
2009年4月22日星期三
使用vim开发python的quickfix方案
在vimrc中设置:
autocmd FileType python set makeprg=python\ %
autocmd FileType python set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
对于vim设置, 我并不是特别熟悉, 所以我也照抄了上面的设置, 使用一下这个设置就知道了, 如果你的python脚本中出错了, 那么quickfix会把你定位到错误堆栈的最高点, 但是在python中错误信息是most recent call last, 所以quickfix捕获到错误实际上是函数调用的顶端, 而在此并非你的代码真正错误的地方, 加入你的代码比较长的话, 那么实际上还会被mislead,然后你再傻傻的去找你的错误, 而且上面的设置把整个错误堆栈下面的信息吞掉了, 要找错误根本还不好找.
这个问题一直没有体会到,直到最近使用wxPython开发, 才知道没有一个好的quickfix是多么的痛苦, 所以下定决心要解决, 花了一个下午加一个晚上, 下面是我的心得.
从上面的分析可以想到最直接的办法, 修改errorformat, 让quickfix可以捕获错误堆栈中所有的内容, 然后用:cl查看, 用:clast定位到实际的错误处, 这个方案再vim站点上有, 可以看一下,不过仍然非常麻烦, 而且用wxPython编程时, 有时会包wxPython lib中的错误, 你就会被定位到lib中,而不是你在你的源代码中出错的地方.
方法二: 借助万能的google找到了别人的一个解决方案:
这个解决方案的核心思想是把python的error message逆转过来, 那么就能让quickfix默认停到第一条出错处, 不过这个解决方案值得改进的地方我认为有两个, 第一, 要能处理当你的源文件没有错误时,防止那个efm_filer.py出错, 应该对errors进行判断, 列表非空才调用pop方法, 第二, 它仍然没有解决在上个方案中我说的在wxPython编程中会被定位到类库中的情况, 也需要进行判断, 只有在当前编辑文件中找到的错误才是我们需要定位的错误. 下面是我改进之后的
efm_filter.py源代码:
#!/usr/bin/env python
import sys
import string
import re
errors = sys.stdin.readlines()
#find current filename, only errors
#in current file will be considered as *true* errors
current_file = None
for error in errors:
m = re.search("""^\s+File\s+"([^"]+)".+""", error)
if m is not None:
current_file = m.group(1)
# print current_file #for testing
break
if len(errors) > 0:
message = errors.pop()[:-1]
errors.reverse()
for error in errors:
if string.find(error, ' File \"%s\"' % current_file) == 0:
print error[:-1] + ", " + message
message = "Traceback"
为了避免上面的链接失效, 我把在compiler/python.vim中的设置贴过来
" python.vim
if exists("current_compiler")
finish
endif
let current_compiler = "python"
setlocal makeprg=python\ %
setlocal shellpipe=2>&1\ \|\ ~/.vim/tools/efm_filter.py\ \|\ tee
setlocal errorformat=\ \ File\ \"%f\"\\,\ line\ %l\\,\ in\ %*[^\\,]\\,\ %m
另外, 在python.vim中, 它说可以改写efm_filter.py,让其将它得到的输入直接输出, 处理后的输出写到vim quickfix临时文件中 (这个临时文件是vim传递的), 这样做的好处是可以在错误信息中看到熟悉的python错误信息, 又可以让quickfix捕获到准确的出错位置, 这个改写很容易,这里就不贴了, 感兴趣的可以试一下.
从python.vim中可以看到, shellpipe中用到了管道符号, 这是*nix系统下才有的概念, 在windows不能使用, 所以上面的解决方案仅仅适合于*nix系统的, 如果你的主要工作环境是Linux, 那么上面的方案非常不错了.
在windows下我也用gvim做编程工作, 那么在windows下如何解决呢? 我的方案是使用一个python脚本调用python解释器,然后做进一步的处理, 这样也许在速度上有点影响, 但是在windows系统上测试使用效果还不错. 改写上面我贴出的efm_filter.py, 你可以重新命名为pymake.py, 把从标准输入流读取错误信息的部分改为如下代码
from subprocess import Popen, PIPE
from cStringIO import StringIO
if len(sys.argv) < 1:
sys.exit(0)
pysrc = sys.argv[1]
output = Popen(["python", pysrc], stderr=PIPE).communicate()[1]
buf = StringIO()
buf.write(output)
buf.seek(0) #move pointer to the start of the file
errors = buf.readlines() #take place sys.stdin.readlines()
buf.close()
把pymake.py放置到PATH中, 然后改vimrc, 指定使用pymake编译:
autocmd FileType python set makeprg=pymake.py\ %
autocmd FileType python set efm=\ \ File\ \"%f\"\\,\ line\ %l\\,\ in\ %*[^\\,]\\,\ %m
当然你要愿意, 通过改python.vim的compiler设置也可以, 不过我认为, 既然不涉及到对其他配置文件的改变, 改这里更加直接.
当然上面的解决方法也同时适合Linux, 如果你同时在windows和Linux下面开发, 需要共享VIM配置的话, 最后一个方案看起来是最好的, 对于速度方面的影响, 一般配置的电脑是感觉不到的.
2009年4月20日星期一
说说ubuntu的一些设定
另外,usplash改分辨率时,光在usplash.conf中改是不行的,它只能影响到重启时的splash,而要在内核启动时就显示,那么还必须使用update-initramfs声称一个新的initrd.img才行!
2009年4月19日星期日
逃回到Ubuntu
时间到了2009年,Linux 64位操作系统已经非常成熟了,我所关心的JDK, eclipse, flash,多媒体codecs, 在64位操作系统下都表现完美了, 如果使用ubuntu的AMD 64bit版本,那么就不存在arch i686优化对于ubuntu i386的速度优势了,我想可以尝试下Ubuntu 64bit了。安装之后体会也确实如此,不知道是计算机硬件升级带来的感觉还是真的64bit操作系统的速度优势,感觉操作流畅了很多。
值得一提的是ubuntu对于双屏的支持也非常好,在8.10中由于xorg-server的自动侦测功能的加入,ubuntu的xorg.conf文件非常简洁,并且双屏配置可以通过xrandr动态配置,使用catalyst control center配置起来更是方便,所以很喜欢。不过仍然有一点遗憾的是gnome的窗口管理器,没有方便的窗口双屏间移动的功能,在windows下可以使用amd提供的驱动来达到虚拟桌面和窗口控制的功能,而Linux下有现成的虚拟桌面功能,但是窗口切换目前只有fvwm很方便,可以配置快捷键,要是gnome的窗口管理器也可以做到该多好阿,使用fvwm好是好,但是从整体表现上来看,如果不考虑性能,gnome还是要易用一些,fvwm则要自己配置很多。看看有没有时间自己找找能否在gnome的metacity窗口管理器中增加这样的功能,最好是同时在窗口的右键菜单中增加还有就是快捷键支持。尽管fvwm可以和gnome一起使用,但是使用起来感觉不伦不类的,不舒服,所以试着要patch一下metacity了
再好好用ubuntu吧!把配置Linux的时间变成生产力!
2009年4月9日星期四
fvwm使用双显示器
在Arch上使用Fvwm已经有一段时间了, 觉得也挺方便,但是换完电脑还有使用双显卡之后还没有怎么使用过,今天也好好的弄了一下, 把xorg. xinerama打开, 达到了那种big desktop的效果, 然后从vladstudio那下载了免费的双显示器的桌面壁纸,fvwm使用双显示器已经非常舒服了。后来看fvwm的文档,才发现fvwm对于multi-screen有特别的支持,它有MoveToScreen的指令, 我把这些绑定到快捷键上, 就像在windows上使用ATI的虚拟桌面一样, 用Alt+F1, Alt+F2控制屏幕选定窗口移动到屏幕1和屏幕2,然后用把9个虚拟桌面分别绑定在小数字键盘的九个键上,操作起来异常顺畅,而且没有使用windows切换虚拟桌面时窗口最小化恢复的延迟现象,所以fvwm使用双屏幕非常的舒服啊!
然而还是有些不满的事情,尽管ATI的catalyst Linux驱动已经更新到9.3版本了,但是还是不支持透明和compiz,以前用2.6.28内核和9.2版本驱动的时候开xcompmgr,窗口支离破碎;compiz反应缓慢;现在用2.6.29内核,9.3版本驱动时干脆报错No composite extension, google遍寻网络也没有一个有效的解决方法;如果使用开源的radeonhd驱动,它对于r6xx系列的显卡的2D加速还支持得不好,虽然透明可以打开,但是双屏幕配置就不行了;就在几个小时前,radeonhd1.2.5发布,在此版本中开始支持r6xx系列显卡, 也就是我的radeonhd 6350显卡的支持已经加入了,Arch源目前没有响应,自己修改PKGBUILD也不能编译成功,看来只有再等几天了,希望有可以完全的配置好。
我不知道自己的显卡是否目前在Linux世界已经可以支持得很好了,看到ArchLinux的catalyst 9.4版驱动开始使用ubuntu源中间的fglrx-installer-8.60来取得从官方下载的installer, 我其实一早就在怀疑ubuntu下面是否可以完美使用compiz和xcompmgr了,后来晚上有时间搞了个LiveCD用了一下,启动私有驱动之后, 居然可以, 看了一下catalyst版本, 8.20!难道老版本显卡驱动反而支持得更好?
要是不能解决, 决定换到ubuntu AMD64了,用Arch虽然觉得可以随心所欲, 但是用ubuntu觉得更省心!
2009年4月4日星期六
在ubuntu dapper上更新subversion
以前从网上看到mercurial和subversion结合的方法, 看到那长段的说明文字,就感觉到太复杂了, 而hgsubversion目前还不成熟; 昨天从网上看到有人说现在hgsubversion可以用了, 于是想试一下。
编译安装好mercurial之后, 也配置好了hgsubversion, 连接到客户段, 发现svnclone下来没有东西, 而hgsubversion提示说服务器subversion太老, 小于1.4, 心想是不是subversion太老的缘故, 后面才知道不是这个原因(其实是因为我用hgsubversion去clone svn的trunk分支了, 而hgsubversion要求版本库的布局必须是branches, tags, trunk, svn clone也必须针对根目录来做, 这些是后面偶然发现总结的),于是决定要升级subversion服务器, 这一个决定便是我接下来24小时痛苦的开始;
上到subversion的主页, 看到1.6版本近日刚刚稳定放出, 心想, 既然要更新就更新到最新版本吧, 根据INSTALL说明, 下载了源代码包还有deps包,编译安装成功,客户段一连发现还是提示版本库过老,以为必须服务器上的版本库更新才行, 所以就挑了一个小点的代码仓库进行了版本库升级操作,这么一搞, 客户端居然打不开版本库了,这时庆幸自己只是用了一个很小的版本库做的实验。停下来想了一下, 通过svnserve访问没有问题, 才想到我是通过apache的mod_dav_svn访问代码库的, 那么mod_dav_svn可能没有更新, 在编译后的目录中找了一下,果然没有,又仔细看了INSTALL说明, 才发现要apx在路径中才可以自动编译mod_dav_svn和mod_authz_svn模块,用aptitude查了一下, 发现apache2-dev没有安装,安装之后再编译configure时提示说apache和APR版本不兼容, 好好看了一下subversion-deps中的内容, 发现其中带了apr和apr-utils依赖,是不是和系统中那些相关dev软件包冲突呢? 重新解压了一个subversion源码包,这次不解压依赖,这个时候configure找到了系统中的apr, 版本为0.9.7, 但是还是提示不兼容, 比较晕倒, 网上一顿狂搜, 找到一个老外的博客说安装1.4.3成功了,根据他博客中说的,我总怀疑我有那个依赖没有安装, 找到ubutnu包查询的网站, 好好看了下还是不行, 这样左搞右搞从下午搞到晚上10点还没搞定, 下午到了办公室继续尝试, 突然想到是不是版本过高?于是下了一个1.5.6的版本来试了一下, 居然configure成功了!另外需要注意的是, 如果需要ssl支持, 那么需要在deps包中取得neon放到subversion源代码包中,系统自带的neon版本过老, subversion1.5要求neon>2.8. 这样成功之后, hgsubversion可以了,不给出警告了,可是有的库可以, 有的库不行? 不行的就是我直接check某个子目录的! 并且对我其中的一个版本库, 也是最重要的版本库, svnclone的时候报错,提示找不到文件。 这样忙忙碌碌搞了两天, 最终还是达不到我的要求,比较懊恼自己浪费了时间样, 不过倒是得到了subversion编译安装的经验, 写下来,给有同样需求的同学参考下。
说说163的源
昨天更新服务器的subversion,试了一下ubuntu.cn99.com, 居然能上, ping一下, DNS解析居然指到了mirrors.163.com, 速度可真快, 可是ubuntu dapper用不了, 很多ubuntu dist没有i386架构的~
于是想想自己电脑上的Arch已经好久没有更新了, 163的镜像上主要的发行版都有了, arch也不例外, 把电脑上的源改到163试了一下, 才发现滞后了很多, 上面的包比我自己电脑上在两三个月前的还旧!看来不能用了,要是163的源更新再及时点就好了!
2009年4月2日星期四
关于VIM使用的惊喜发现
另外, 在这篇文章里, 有一个解决putty中文问题的方案, 解决了一个困扰我很久的putty中文显示和输入的问题, 我曾经在google上搜了很多, 很多人都说可以, 可以我好像没有成功过. 实际上只要保证了远程服务器的encoding为UTF-8, 不管你是zh_CN.UTF-8, 还是en_US.UTF-8; 而putty在连接之前设置encoding为UTF-8, 还有选中treat CJK ambiguous characters as wide, 然后连接, 就可以显示和输入中文了, 解决了这些问题之后, 我完全可以在windows下, 然后用putty连到服务器上去写程序和管理了.
2009年3月26日星期四
说说XSD和XML
2009年3月25日星期三
Netbeans就是一块广告纸上看起来巨漂亮的鸡肋
(2) 你要在Netbeans里面管理库还有库关联的源代码, 郁闷死你! 给库绑定了源代码非要重启重新项目扫描之后才会生效, 但是重启一下, 我双核扣肉二代, 2G Mem, 等三分钟以上, 郁闷死你. 有些人说要把那些项目关闭掉好一点, 是的, 关闭掉了, 下次我要用再去一路一路点开, 重新打开? 这也就算了, 第三方库源代码即使绑定好了, 如果之间互相依赖, 居然不能互相识别? 比如我给cas绑定了源代码, 因为我需要重载其中的一些类, 所以要看到中间的代码程序结构, 那么cas是依赖spring的, 好, 折腾把spring源代码也绑定好, cas源代码打开了, 晕死, 说找不到spring的类? 一个巨大的Glassfish运行库在那里, 找不到javax.http.*包, 难道也用eclipse先代码浏览完来做开发?
(3) 再说代码浏览, 在java开发领域里面研究别人的代码是非常普遍的事, 无论是学习, 还是尝试看清楚别人的代码结构, 来重载完善适合自己需要. 要用netbeans, 你还不如自己用Editplus一个一个去找好了, 省计算机资源; 如果代码包中有可运行的文件, 比如测试, 你在Netbeans中就找不到一个直接运行库中的class的办法, 而用eclipse右键即可!
(4) 宣传很美吧, 支持动态语言开发, php试过不怎么样, ruby on rails我不用, 新花样很多,但是最基本的java, java ee开发也不能从竞争对手那里学点东西完善起来. 总体感觉就是离它所宣传的the only IDE you need, 差了十万八千里. 吃鸡肋, 把肉剔下来吃, 别咬着骨头不爽!
2009年3月23日星期一
我也大二开始写程序, 为什么我就没有成为千万富翁?
说说我不太喜欢Discuz!的方面吧
(1) 对于普通用户Discuz!很方便, 但是由于license的原因, 我的使用就是受限的, 我既不能自己使用于盈利目的, 又不能提交我的patch, mod等, 所以我学习的投资就要白费了.
(2) 缺乏多语系特别是英语的支持.
(3) 程序代码里面, 过程式架构的, 这不对我的胃口和设计风格, 所以潜意识里有点抵触
(4) 程序代码里面唯一的注释就是" This is NOT a freeware, use is subject to license terms", 我不知道是放出源代码时为了减缓用户读懂代码的步调故意用程序把注释去掉了还是怎么的, 要么就是这个公司编码人员的风格不好, 不过这一点也不决定, 其实php代码挺好懂的, 要不要注释无所谓, 不过没有一行注释真是让我感到奇怪.
(5) 代码大小比phpBB大了一倍.
值得学习的地方:
(1) 目前它号称是最快的性能最好论坛程序, 也有人说这是由于它减少了安全性上的限制来换取速度的提升, 或者说php在面向对象架构方面确实性能不高, 过程式代码性能更高, 具体没有研究, 但是在高性能方面的优化策略, 确实值得有时间来学习和研究.
(2) 用户支持, 文档完善性, 创业模式上, 它是一个成功的商业案例!
2009年3月9日星期一
我的修炼之道
(2) 用好编辑器 = 用好VIM
(3) 尝试新的开发环境 = 使用windows, 用DotNet开发
=========
最近一直在windows下做开发, GVIM顺利成为我在windows上最顺手的编辑器, 做了一段时间的DotNet开发工作, 确实发现VS2008不是盖的, 即使是Express版本都很好用, 并且开始喜欢上C#语言了; ASP.NET MVC很对胃口, 至少觉得比Struts对我胃口;
还有一个组件是用C语言来写的, 发现GCC还是我的最爱, GCC的特性比在Visual Studio中编c语言爽多了, 变量可以什么时候想用再申明, 数组的size可以当参数传入;
用Gvim做开发挺好, 但是看着GVim和gdb集成的文章还要自己编译GVIM,自己补丁我就没有兴趣了, 想起了两年前使用过CDT,当时感觉不错, 遂使用Eclipse做c开发的IDE, 调试功能和gdb相比, 那是暴爽无比!
2009年2月26日星期四
赵长林的悲剧
当我更年轻一点的时候, 我在某些地方跟他很像, 这也是我曾经显得格格不入的原因, 我一度以为我已经改变, 可是我还一样愣青.
2009年, 经济危机的浓云笼罩, 公司也印发了形势任务的手册, 看过手册, 也感觉到了经营的压力. 为了配合该活动, 公司还要搞什么宣讲活动, 这就是中国特色, 其实我一直不怎么相信这样的活动有什么现实的意义, 不如实际的投入工作来得真实, 反倒有点劳民伤财的意思在里面, 我有一次跟同事开玩笑, 这就像狼来了, 原地踏步的呐喊一样. 不过搞也就罢了, 不参加就不会浪费我的时间了. 可还
要背诵形势任务手册, 现场要抽人问答! 后来分下来任务, 也到了我的头上, 首先让我演讲, 我坚决不同意, 后来让我点评, 我勉强同意了, 反正也花不了多少时间, 我这个星期给自己安排了很多的任务, 时间实在浪费不起.
昨天居然还要搞彩排预演? 这样的活动彩排预演!? 被拉下去浪费了一个上午.
今天一个党委工作部的朋友拿着摄像机想来录一段我的视频, 说形势任务感想的, 我搞了半天, 一直都做不好秀, 烦着, 这个时候同事打电话过来, 说今天要交形势任务宣讲点评的稿子, 我一听, 当时就没有忍得住, 两分钟话还需要写稿子吗? 不是脑残都没有问题啊.
我的时间就这么好浪费, 于是干脆就不想拍了, 对着镜头把心里想的全都说了, 说话说得是比较冲. 说完之后觉得自己有点不对, 这至少也是对朋友的不尊重啊, 他也是做他的工作, 过了一会心平静下来了, 想找他回来继续拍完, 他自己回来了.
看来以后在修身养性上还是要改啊. 做事要好好做, 别人给面子, 给我宣传, 我应该知道才对. 否则事情做好了, 反而因为自己处理事情的方法不对, 落个悲剧下场.
2009年2月25日星期三
DotNet3.5有点意思
(1) DotNet 3.5的新特性很让我舒服, var关键字, 自动属性, 匿名类, lamba, LinQ, 这点Java目前是没有得比了, 越来越多动态语言的特性被编译器支持,同时又兼顾了强类型,编译语言的高效率.
(2) DotNet的开源社区越来越成熟了, 很多Java社区的技术移植到了.NET, 比如Spring.NET, NHibernate, NUnit, Log4Net, 另外一些ViewEngine, Ioc技术项目也成熟了.所以可以选择的东西也多了.
(3) Visual Studio 2008的Express版本功能也不错了, 对我来说,我觉得足够了
(4) ASP.NET MVC有点意思, 仔细看了之后,觉得很喜欢, 相对于WebForm开发方式来讲,我习惯多了,对于Ajax开发, 我习惯它的这个MVC模式,实在是太方便了, 控件拖来拖去的开发方法,对我来说不习惯.
不过,个人感觉在DotNet中使用第三方开源技术也不是特别方便, 首先很多框架和技术缺乏IDE的支持, 这相对于微软的技术来讲是天生的缺陷, 比如NUnit就没有VS自带的单元测试方便, NHibernate没有Linq方便, MonoRails没有ASP.NET MVC方便, Spark作为模版引擎比ASPX好,但是如果使用VS进行开发, IDE提供的自动补全功能, 使用aspx, htmlhelper开发也很方便, 在ASP.NET MVC中IDE还能自动生成view模版, 实在是比较爽.
说到SP1中的Entity Framework技术, 中文版本可能又一个Bug, 在代码中什么什么"Set"被翻译成了"集", 虽然编码支持UTF8,不引起使用,但是代码属性中出现中文是感觉很便扭的事情.
2009年2月19日星期四
ArchLinux, hal-0.5.11-7造成gnome不能正常挂载NTF分区和USB
,发现hal从0.5.11-4升级到0.5.11-7了,因为之前遇到过类似的问题,猜想是hal的问题,于是编译安装了老版的hal问题解决。另外新的networkmanager依赖于hal-0.5.11-7,所以networkmanager也不能用了,不过感觉也没有啥,只是少了个桌面Applet而已。。
顺便看了一下hal改变, 由于两个hal只是小版本号的问题,也就是说上游源码是没有变化的,问题应该出在Arch Linux的打包者的patch上,看了一下PKGBUILD,发现多了几个补丁,也许是它们造成的问题吧,涉及到源代码的改变,所以暂时算了,用老版本好了。
补充: 貌似是PolicyKit的问题,授权了就是挂不了。。
2009年1月18日星期日
再说ATI显卡
好好查了一下资料,其实还是觉得ATI卡不错的,至少势头是好的,AMD/ATI公布了技术参数,所以开源的xf86-video-radeonhd的开发进度很快,这是X.org上wiki的介绍,另外对ATI显卡的一个分类学习了一下,开始了解自己的显卡,这里是一份资料。
我的ASUS EAH 3650是使用了ATI HD3650的芯片,从上面的资料看,它实际上是RV635这个类的:
* RV635: Radeon HD 3650, HD 3670
从X.org wiki上看到的内容,xf86-video-radeonhd从1.2.0的时候开始支持RV635的显卡,但是目前的2D加速还是仅仅限于R5xx (including RS6xx),也就是Radeon X1800; FireGL V5300, V7200, V7300, V7350,Xpress 1200, Xpress 1250系列芯片的显卡,所以目前2D加速在我的显卡上还是不支持的,需要继续等待了。3D支持在各个系列上都还是空,除非是另外的那个ati开源驱动,在老的芯片上实现了3D加速。如果我用开源的radeonhd驱动,那么就不能玩3D游戏了,比如nexuiz,不过我也不经常玩,所以无所谓;还有就是compiz白屏,我基本上用fvwm用得比较多,所以也无所谓了。但是如果用官方闭源驱动,如果开了透明效果,比如compiz或者xcompmgr(在fvwm中我使用使窗口透明,更加漂亮)就使用不了了,窗口反应特别迟钝,所以不能用。
目前有两个选择了,要么不玩nexuiz,要么不用xcompmgr。这样,我用Linux工作其实还是不影响的。但是上一篇说的使用windows xp来做开发工作,我确实想尝试一下,不知道在windows上用虚拟桌面软件的效果如何,得适用一下,习惯多屏工作了,也要学习一下windows是否有窗口控制的快捷键,我用fvwm快捷键控制窗口,移动,居中,最大最小化可以极大提高我的工作效率,但是不知道windows xp上能不能这么做,要研究一下。
2009年1月17日星期六
叛逃 - 为五斗米折腰
我突然有一个这样的想法:是否我一直以来太执着?喜欢成为异类,还是我真的不用Linux会死?
是个人人都知道,目前桌面市场,windows仍然是老大,而且windows xp目前我觉得非常好用,要比性能,同样的电脑,如果Linux要跟windows比,那么注定它只能装fvwm之类的窗口管理器而已,我想,如果我在windows上花相同的时间,那么我对于它的使用肯定也得心应手,用了这么多年的Linux,做了那么多年的系统管理员,我现在闭着眼睛都可以装出和根据要求配置好一个服务器来,我觉得我自己已经过了学习Linux阶段,而对于它下面的开发,特别是xWindows方面的开发,我觉得目前还差得很远,正因为Linux对于桌面应用来讲,有着这样那样的不成熟,这当然不是Linux社区自身的问题,而是各个硬件厂商的原因,最新的驱动肯定是先保证windows用户的,所以才造成我的最新的显卡不能正常工作,我觉得我要现实一点,别成为愤青了,我自己也承认,在用Linux作为桌面的过程中,我花了不少时间去配置,去使用,并且也确实学到了不少东西,而这些对于我来讲,没有现实的意义了,我已经不是那么只能安心用Free软件的学生了,现在情况变了
(1)我有正版的windows用了,我丝毫不会感觉因为盗版而良心不安了
(2)公司机房有多台Linux服务器了,我完全可以用个putty远程上去编程,而不要自己桌面上用Linux,反正我也基本不需要图形界面
(3)对于服务器来讲,我维护着那么多台Linux,我肯定不会有任何的生疏
(4)我习惯使用的开源软件,都有windows的port了,比如gvim,gnucash
(5) 其实我还是离不开windows了,OA要用windows,迅雷要用windows
(6) 说到安全性,中病毒,其实是一个相对的概念,自己小心,没有那么容易中病毒
(7)使用Eclipse,其实用windows版本的更加的好用
(8) 做WEB开发,免不了还是用IE测试,Linux wine出来的IE还是有些问题,比如字体什么的
所以我决定停用Linux半年甚至更长,至少等待我的显卡驱动成熟起来。
消受不了
2009年1月14日星期三
centos-java6-tomcat5配置
后来装了一下CentOs之后觉得它作为服务器来说,确实不错,它的安装是最快的。其实作为一个服务器来说,很多东西是必须而且不要自己再去定义的,比如SSHD,iptables等等,如果用debian,那么这些东西还要自己安装,在源慢的情况之下,那么装debian就比较费时间了。虽然它有DVD下载,但是它包含的软件包实在太多,有三张DVD,也不知道自己在服务器中用到那张的;而Centos专注于服务器应用,它那一张DVD,基本就能应付了。所以从安装方面来讲,Centos还是比较好的。
另外,Centos的图形配置工具也很值得推荐,比如system-config-securitylevel等等.
对于centos5,有一点不爽就是Java,它自带的Java是GCJ1.4.2,这个肯定是要换的。很多年没有用redhat的东西,当时用redhat的时候都还没有YUM呢,所以也都忘了有jpackage这个东西,对于在redhat之类的Linux上用Java,jpackage这个东西还是不能少的,关于Java的设定,在CentOS的wiki上有一个howto,google到了,自己找到并且编译了sun-jdk-1.6.0,才满足了我的需要,当然,如果愿意直接用sun提供的self-extrac安装包也可以,我原来是以为用jpackage源rpm包自己重新编译的能够解决一些依赖问题,但是不知道为什么,tomcat5还是依赖java-gcj-1.4.2,这让我非常不爽,不知道我用CentOs的经验太少还是怎么的。所以干脆也就不用它的tomcat5的包了,改用直接下载的tomcat5的tar包。其实对于用做服务器,我尽量用服务器自己带的软件包,而不想自己加的软件包更不用提自己手工编译了,因为这样涉及到很多配置的问题。而对于tomcat的这个也是如此,自己下载tomcat包的一个优点是系统会很干净,就加一个第三方包就可以了,也没有依赖的问题,唯一不爽的就是它的自自动。关于它的自启动,有这样几种方法:
(1) 直接把start.sh放到rc.local里面,这样是最省事的方法,但是带来的问题就是是用root启动的,并且不能用启动脚本灵活的控制其起停。
(2) 自己编写脚本,在start,stop函数中调用start.sh,stop.sh来控制tomcat起停,这样也很简单,但是也存在(1)中的问题,并且没有pid创建等等,故不能实现status的功能,可以做到灵活控制启动停止了,但是还是没有做到用non-root启动的目的。在网上找的脚本编写得并不好,由于启动tomcat需要比较多的延时,所以如果不注意控制,很可能发现自动不了,或者不能重启,停止了java还是不退出等等问题。
(3) 可以把catalina.sh放到init.d里面,因为catalina.sh本身就有start,stop之类的调用方法了,当然,为了适应chconfig的要求,这个脚本要做相应的修改,添加用数字表示的启动停止顺序等,缺点同(2)
(4) 使用tomcat带的jsvc,这样可以做到non-root用户,启动到特权端口上,这个是很多人的选择,并且jsvc里面带了启动脚本实例。
(5) 使用su - user -c script方法以其他用户运行tomcat的catalina.sh,这样可以以non-root用户运行tomcat,但是不能使用特权端口。这个也需要自己编写脚本来实现自启动,为这个我专门花了两个小时把CentOS自带的tomcat5的脚本改到合适单独安装tomcat的情况,经过测试不会遇到2的问题,CentOS这个启动脚本考虑问题很周全,建议自己安装tomcat的用户根据需要自己改改。可惜blogger不能贴附件,否则我就传上来。我的需要是使用nginx做前端的反向代理,所以方案5适合我的需要。
另外,经过一天的学习和配置,对CentOS理解越多,还是觉得它在服务器环境来讲确实很不错的,完全没有我担心额外软件包的问题。关于源:mirror.be10.com这个源比较快,在cn99源down掉了之后,比我遇到的任何debian,ubuntu源都快。源也是我挑选发行版的一个重要原因。还有就是epel这个comunity的rpm库也很重要,我原来以为用nginx之类的不包含在centOS发行中的软件包需要自己编译的,google了一下之后,发现还有epel这样一个软件库,由于centos和rhel二进制兼容,因此就不用担心软件包的问题了,基本上需要的软件包在epel里面都有。安装和使用也特别简单。
tomcat5启动脚本:
#!/bin/bash
#
# tomcat5 This shell script takes care of starting and stopping Tomcat
#
# chkconfig: - 80 20
#
### BEGIN INIT INFO
# Provides: tomcat5
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Description: Release implementation for Servlet 2.4 and JSP 2.0
# Short-Description: start and stop tomcat
### END INIT INFO
#
# - originally written by Henri Gomez, Keith Irwin, and Nicolas Mailhot
# - heavily rewritten by Deepak Bhole and Jason Corley
#
# commented out until the RHEL and FC daemon functions converge
# Source the function library
#if [ -r "/etc/rc.d/init.d/functions" ]; then
#. /etc/rc.d/init.d/functions
#fi
NAME="$(basename $0)"
unset ISBOOT
if [ "${NAME:0:1}" = "S" -o "${NAME:0:1}" = "K" ]; then
NAME="${NAME:3}"
ISBOOT="1"
fi
# For SELinux we need to use 'runuser' not 'su'
if [ -x "/sbin/runuser" ]; then
SU="/sbin/runuser"
else
SU="su"
fi
#tomcat setting
TOMCAT_CFG="/etc/tomcat/tomcat5.conf"
if [ -r "$TOMCAT_CFG" ]; then
. ${TOMCAT_CFG}
fi
SHUTDOWN_WAIT=30
# Define which connector port to use
CONNECTOR_PORT="${CONNECTOR_PORT:-8080}"
# Path to the tomcat launch script
TOMCAT_SCRIPT="${CATALINA_HOME}/bin/catalina.sh"
# Tomcat program name
TOMCAT_PROG="$NAME"
# Define the tomcat username
TOMCAT_USER="${TOMCAT_USER:-tomcat}"
# Define the tomcat log file
TOMCAT_LOG="${TOMCAT_LOG:-/var/log/tomcat/catalina.out}"
RETVAL="0"
# remove when the RHEL and FC daemon functions converge
# (pulled from /etc/rc.d/init.d/functions)
function checkpid() {
local i
for i in $* ; do
if [ -d "/proc/${i}" ]; then
return 0
fi
done
return 1
}
# remove when the RHEL and FC daemon functions converge
# (pulled from /etc/rc.d/init.d/functions)
function echo_failure() {
echo -en "\\033[60G"
echo -n "[ "
echo -n $"FAILED"
echo -n " ]"
echo -ne "\r"
return 1
}
# remove when the RHEL and FC daemon functions converge
# (pulled from /etc/rc.d/init.d/functions)
function echo_success() {
echo -en "\\033[60G"
echo -n "[ "
echo -n $"OK"
echo -n " ]"
echo -ne "\r"
return 0
}
function parseOptions() {
options=""
#if GLOBAL VARIABLE is set, TOMCAT_CFG is optional
if [ -r "${TOMCAT_CFG}" ]; then
options="$options $(
awk '!/^#/ && !/^$/ { ORS=" "; print "export ", $0, ";" }' \
$TOMCAT_CFG
)"
fi
TOMCAT_SCRIPT="$options $TOMCAT_SCRIPT"
}
# See how we were called.
function start() {
echo -n "Starting ${TOMCAT_PROG}: "
if [ -f "/var/lock/subsys/${NAME}" ] ; then
if [ -f "/var/run/${NAME}.pid" ]; then
read kpid < /var/run/${NAME}.pid
if checkpid $kpid 2>&1; then
echo "$NAME process already running"
return -1
else
echo "lock file found but no process running for"
echo "pid $kpid, continuing"
fi
fi
fi
export CATALINA_PID="/var/run/${NAME}.pid"
touch $CATALINA_PID
chown ${TOMCAT_USER}:${TOMCAT_USER} $CATALINA_PID
$SU - $TOMCAT_USER -c "$TOMCAT_SCRIPT start" >> $TOMCAT_LOG 2>&1
#$SU - $TOMCAT_USER -c "$TOMCAT_SCRIPT run" #for testing
RETVAL="$?"
if [ "$RETVAL" -eq 0 ]; then
echo_success
touch /var/lock/subsys/${NAME}
else
echo_failure
fi
echo
return $RETVAL
}
function status() {
RETVAL="1"
if [ -f "/var/run/${NAME}.pid" ]; then
read kpid < /var/run/${NAME}.pid
if checkpid $kpid 2>&1; then
echo "$0 is already running (${kpid})"
RETVAL="0"
else
echo "lock file found but no process running for pid $kpid"
fi
else
pid="$(pgrep -u tomcat java)"
if [ -n "$pid" ]; then
echo "$0 running (${pid}) but no PID file exists"
RETVAL="0"
else
echo "$0 is stopped"
fi
fi
return $RETVAL
}
function stop() {
local STOP_VERBOSE="false"
echo -n "Stopping $TOMCAT_PROG: "
if [ -f "/var/lock/subsys/${NAME}" ]; then
$SU - $TOMCAT_USER -c "$TOMCAT_SCRIPT stop" >> $TOMCAT_LOG 2>&1
RETVAL="$?"
if [ "$RETVAL" -eq "0" ]; then
count="0"
if [ -f "/var/run/${NAME}.pid" ]; then
read kpid < /var/run/${NAME}.pid
until [ "$(ps --pid $kpid | grep -c $kpid)" -eq "0" ] || \
[ "$count" -gt "$SHUTDOWN_WAIT" ]; do
if [ "$STOP_VERBOSE" = "true" ]; then
echo -n -e "\nwaiting for processes $kpid to exit"
fi
sleep 1
let count="${count}+1"
done
if [ "$count" -gt "$SHUTDOWN_WAIT" ]; then
if [ "$STOP_VERBOSE" = "true" ]; then
echo -n -e "\nkilling processes which didn't stop"
echo -n -e "after "
echo -n "$SHUTDOWN_WAIT seconds"
fi
kill -9 $kpid
fi
echo_success
if [ "$count" -gt "0" ]; then
echo -n -e "\n"
fi
fi
rm -f /var/lock/subsys/$NAME /var/run/$NAME.pid
else
echo_failure
fi
fi
}
# See how we were called.
case "$1" in
start)
parseOptions
start
;;
stop)
parseOptions
stop
;;
restart)
parseOptions
stop
sleep 2
start
;;
condrestart)
if [ -f "/var/run/${NAME}.pid" ]; then
parseOptions
stop
start
fi
;;
status)
status
;;
version)
parseOptions
"${JAVA_HOME}/bin/java" \
-classpath "${CATALINA_HOME}/server/lib/catalina.jar" \
org.apache.catalina.util.ServerInfo
;;
*)
echo "Usage: $TOMCAT_PROG {start|stop|restart|condrestart|status|version}"
exit 1
esac
exit $RETVAL
2009年1月11日星期日
说说windows7
2009年1月10日星期六
我满25岁了,回忆过去的那些日子
今天睡了个懒觉,10点半才起来,天气太冷了,被窝的诱惑力实在太大。我发现自己的意志力还是有些问题,不能拒绝一些诱惑和欲望,比如早起,即使上班我也要拖到实在是再晚一分钟就会迟到的,所以很多时候就不能像自己所设想的,早上刮个胡子,梳好头发,打好领带,擦好皮鞋,调整一下笑容衣冠楚楚的出门,还好是短发,否则那就真会是蓬头垢面了。我总会有借口让自己多睡个几分钟,比如自己昨晚12点才睡阿,学习工作太累,休息好才能工作好什么的,宁可待会到路上跑步去上班。这也让我想起高中时候,甚至大学时候在天津,大雪天洗冷水澡,想锻炼自己的意志力,看来也没有真正的派上用场,这一点是应该改的,25了,如果生命是100岁的话,那么已经过去了四分之一,而且接下来10年,必须使我最辉煌的时候,我不容许自己错过任何的机会。
今天有个学弟给我发邮件简历,想跳槽到我们公司,我之前是让一个朋友物色的,既然能联系到我,技术能力肯定也不错,他发个介绍过来,我觉得也挺不错,后来继续聊了一下,告诉我他四级也没有过,成绩也不好,我感到挺失望的,这些是公司的硬性规定,将来有无数的场合要看英语成绩,其实我觉得光用四级来评价一个人的英语水平和偏颇,但是从一个方面反应了一个人的学习能力和态度,我总是觉得如果真有能力,即使我英语不行,四级这种东西,死记硬背也要考过来,况且四级考的是词汇和阅读。我四级其实也考了几次才过,那个时候太不上心了,每天脑子里面都是计算机,直到了大三,开窍了,不那么执迷不悟,一口气把四六级都考过了。并且我始终是那么认为,搞计算机的,英语如果好就会如虎添翼,很多最新的文档都是英文的,所以我可以说学习Linux成就了我的今天,让我可以自由的把英语当成一种工具,让我对于事物总是有那么一种新奇感,喜欢研究,不搞明白不罢休,养成了坚持学习的态度。其实我挺怀念大学的,大学几年我有两个遗憾,一是为什么没有更努力些,拿奖学金;二是没有找个女朋友。不过后来想想也许很多事情是注定了点,顾此就要失彼吧,不过就是觉得自己好像还没有用上全力,还可以做得更好。我怀念泡在图书馆的日子,我怀念在启航网站里面的日日夜夜,我怀念和213寝室的同学们上自习的日子,我想念215寝室的兄弟们,我怀念那为数不多的跟同学们踢的几次球,我还记得毕业前夕的喝醉躺在马路上唱歌的情形,我还记得离校时那些拥抱。
我一直不怀疑自己的学习能力,到了单位之后也确实为单位解决了不少问题,有些时候有些问题大家觉得棘手了,领导就会把我叫过去让我看看,而且每次都居然很奇迹般的可以把事情解决,有很多次居然都是全新的我从来没有接触过东西,看看文档,花点时间,用点心。我想这和平常养成的学习习惯有关系,所以还是得要坚持学习才对,我有时候是否在想,是否在大学里面对于学习方面所欠缺的遗憾,所以毕业之后再补补?而且发现自己是一个很随兴趣发展的人,自己也觉得奇怪,我总是觉得学习新的东西有很强的兴趣,总部培训部一个老师听说我的专业之后可一个概括挺有意思,学的自动化,干的计算机,居然还教英语?在这些方面我其实也意识到了我的缺点,一个人时间和精力有限,不可能样样精通,所以在哪一方面我都比不上真正在上面花时间的人,比如这次参加RELTA就没有考过5级,也就当不了民航总局的评分员了,这也许是我和科班出身的差距吧,不过也还是有些不服气吧,自己觉得发挥还不错,自己教了那么多飞行员都考了四级,结果自己也就考了个四级?所以下次再努力了。说到英语,我其实没有丝毫的成就感,想起大学里面,我就完全是因为看国内编的教材不顺眼,并且看翻译过来的,我有时候都很自大的觉得翻译得好笑,所以硬着头皮去啃自动化和计算机的原版书,其实也没有啃完几本,关于当ICAO教员的事也许只是机会好而已,后面也只有硬着头皮边学边用,关于学习我还真是有所体会,因为书到用时方恨少,所以当你需要哪个知识的时候,你才会学得更加的快。我其实是属于那种不是很踏实的从头学到尾的人,我必须要先找到自己的兴趣,我学习起来才不会打瞌睡。比如看一本书,我通常会很快看完,跳着看,但是通常要反复看即便,我想我其实只是那种对新事物有新奇感,并且反应比较迅速,比较容易学以致用而已。这些东西是优点也是缺点,我应该更加聪明的扬长避短便是。
学习,坚持学习就是了。因为我知道机会只给有准备的人。要踏踏实实一步一步,不要好高骛远,但是也要警惕温水煮青蛙的教训,千万不可失去激情和斗志。
25岁了,父母长辈开始念叨终生大事了,老说什么我的某某同学现在结婚了,某某生子了什么的,对于我而言,我倒是不着急,我在等待那样的一个让我不害怕和她一辈子的女子。我没有太多的耐性,这是我的一个缺点,所以对于胡搅蛮缠不可沟通之人我会慢慢失去该有的关心和爱护,我的容忍是以期待着一个改变为前提,而容忍的时间长短是我对她的爱来衡量,当缘尽了,那也该散了。到现在为止交过一个女朋友,在一起一年多,结果还是分了手。说实在的,我挺遗憾的,不是她不好,她非常好,她不爱钱,她爱干净,总是她家里弄得整整齐齐;她漂亮,她对我好,所以有时候一个人呆着,想起她,仍然会叹气,黯然伤神。我记得分手之后的某个周六,我在家大扫除,翻出了一些文字,那是她写给我的,我看着看着慢慢泪水就流了下来,然后一个人在家里号啕大哭。可是我们分手似乎又是必然,分手之前总是吵架,她总是乱发脾气,我也不能像以前那样去容忍和哄她,找她谈她也不说话,沉默,每次遇到那种情形,我连头撞墙的心都有。我发现我们的人生观很不一样,我们相互沟通和理解成了问题,也许是学历和生活经历的差别造成的问题,并且我们相隔两地,相互沟通起来非常困难,有一段时间,每个月手机费都是四五百;她是导游,工作不稳定,我尝试着帮助她提升,为了在一起而努力,我记得我帮她补习功课,准备成人高考,她学不好就发脾气,我要好好哄才能继续学;她回去了,和她那些姐妹在一起,就又不学了,这些是我不能理解的,但是她的理解却是我没有能力,不能养她,还给她压力,关于这些就吵着分过手。经济基础决定了上层建筑吧,对于我而言,我已经比周围人努力很多了,可我不能抢银行来一夜暴富,我在努力,我只是希望有一个善解人意的女子支持我,相信我可以给她幸福,跟她一起我已经是很有压力了,可我一段时间都相信着真爱可以战胜一切,虽然我相信她也可以跟我过朴素的日子,然而我却不愿意我的女人比别人过得差,所以在我最需要理解支持和相信的时候,不要和我吵。后面一段时间几次说过分手,每次都是我重新把她找回来,如果说舍不得分手是因为怕她离开我过得不好,后面听说她姑姑给他介绍男朋友时,我想是我放手的时候到了。我想我应该可以找到那样一个soulmate吧,要是不行,那么就找一个不会乱找我吵架,彼此过得下去的人结婚罢了。
明天是我25岁的第一天了,fighting!
2009年1月7日星期三
Python数据库连接需要关闭数据库连接吗?
cursor:
.close()
Close the cursor now (rather than whenever __del__ is
called). The cursor will be unusable from this point
forward; an Error (or subclass) exception will be raised
if any operation is attempted with the cursor.
.close()
Close the connection now (rather than whenever __del__ is
called). The connection will be unusable from this point
forward; an Error (or subclass) exception will be raised
if any operation is attempted with the connection. The
same applies to all cursor objects trying to use the
connection. Note that closing a connection without
committing the changes first will cause an implicit
rollback to be performed.
显示的调用close方法可以马上关闭连接,但是DBAPI应该在__del__方法中显示关闭数据库连接的操作,因此其实使用符合DBAPI标准的数据库Driver就根本自己不用去管连接的问题了,你初始化一个connection之后,如果connection被GC收集,那么连接会自动释放的!
2009年1月6日星期二
这几天得到的教训
(1) 使用gentoo作服务器时要注意编译参数
准备使用lighttpd+fastcgi来部署程序,结果发现lighttpd不支持fastcgi?左试右试发现编译参数里面没有fastcgi。对于没有时间折腾和相当丰富经验的人,慎用gentoo作为服务器,万一你要增加新功能,那么很可能你不重新编译,就不会支持,内核,php,apache等等都是。
(2) 写配置文件要非常小心,差之毫厘,谬以千里
在workstation上的配置都正常,服务器上lighttpd重新编译之后还是运行不了,比较了两遍配置文件还是没有发现问题,后来把本机上的配置放到服务器上又能运行,仔仔细细比较了一下,发现少了一个斜扛,我rewrite到/code.py,结果在fastcgi.server节里写了code.py,少了一个斜扛,又狂晕
(3) 慎用developing状态的软件
我一直用webpy的git版本,在自己电脑上运行似乎没有问题,部署到服务器上,发现session的问题,造成用户验证的拦截器失效,尝试了很久,后来仔仔细细的把webpy的源代码读了一遍,后来才发现是线程池里的threadLocal变量没有被清空,跟开发者联系,尝试自己fix,结果才发现发布的0.31版本根本不存在这个问题,也许git上是开发者没有完成的版本,通过通读源代码,发现其中有不少bug会造成各种各样的问题。比如db.py模块中,MSSQL中要取kw['pw']关键字,结果写成了kw['kw']。
(4) webpy开发经验,webpy的session功能的加入是以一个processor加入的,那么如果你有自己的processor使用了session的功能,比如用户验证的功能实现,那么你的拦截器必须在session初始话之后再调用app.add_processor(func)加入。
(5) mysql乱码:
我的workstation是archlinux,今天才发现它的mysql默认设置都是latin-1,而不是像其他linux,比如gentoo,centos,debian,ubutnu那样默认用utf8,造成我机器上数据库操作不能支持中文。我把workstation上的数据库导出导入到server的时候,即使服务器的设置全部都是utf8,都是由于mysqldump会把数据库的character set信息保留,所以造成服务器也不可以使用中文了,并且使用alter database, alter table设置default character set 和collate不起作用,调试了一个下午,后面干脆dump之后,把sql文件中的latin-1全部替换成utf8,然后drop数据库后,新建数据库并且设置默认编码为utf8,问题解决。用了mysql很多年了,乱码问题一直都不成问题,但是今天却很多巧合搞到了一起,搞了将近一个下午,问题解决之后觉得自己都可笑。
(6)whatwhat的中文问题:
whatwhat是用turbogears开发的一个项目管理工具,比较简单易用,适合小型团队使用,但是它对于支持中文有几个问题,第一比如hack model.py中person的定义到Unicolumn,要人名可以显示中文,另外,数据库导入文件要像第5点说的那样,改到utf8.
2009年1月1日星期四
服务器准备升级了
centos, 它是redhat enterprise edition的社区打包版本,对于redhat公司的技术力量不用怀疑了,并且它的文档也是最多的,redhat也是我最早接触的linux发行版本。
ubuntu, 也有商业的支持,社区似乎现在是最庞大的,不过专注于桌面的方面占了大量的份额;它的开发维护文档基本就是参考debian的就够了,所以在它和debian之间其实我还更加倾向于debian,据说163的服务器全是debian的
gentoo,曾经是我的桌面最爱,我完全只用它使用了三年的时间,也觉得它的包管理体系实在是很好,很强大,不过对于每台服务器我可没有时间去折腾,编译更新。
arch,我现在使用的桌面,使用了半年之后,感觉作为桌面还可以,但是如果放到服务器上去,感觉怕怕的,都是最新的软件,也不一定经过了详细的测试。
freebsd, 挺向往的一个纯血统的unix系统,还有就是传说的RockSolid Performance,不过想了好多年了,就一直没有狠下心来抛下Linux随BSD去,怕了学习成本。
现在人开始变得现实起来,开始发现商业和利益驱动的力量也不可小觑,高手也是要吃饭的,所以更加倾向于背后有商业支持的Linux版本,Redhat公司在Linux里面做的贡献就很值得钦佩,所以对于centos确实是比较想,并且以前烦躁的RPM包依赖问题,现在有了yum已经不成问题了;而debian在业界的广泛使用也让我倾向于选择它,所以再看看,看看它是否能完美解决这个集群更新的问题~
