12/25/2006

变形金刚电影预告片

看变形金刚是很小的时候的事情了,十几年过去了变形金刚的电影终于要来了。
由梦工厂和派拉蒙联手,迈克尔·贝(Michael Bay)导演的变形金刚(Transformers)将于2007年的时候上映(预计2007年7月4日美国独立日),总之期待不会太久了。

不过故事似乎是讲变形金刚侵入地球,当然又是狂派飞机人的勾当,然后博派汽车人和地球人联手抗敌。
故事是有点老套了,不过其资料片显示的动画和3D效果显然很不错。

官方网站:http://www.transformersmovie.com/main.html
最新资料片可以在http://movies.yahoo.com/feature/transformers.html下载,当然官方网站上也可以看,中文版尚未更新,直接进主站看就是了。










从资料片和这张截图来看,狂派的飞机人似乎有点异形的味道。

12/18/2006

FLEX2: let the horizontal scroll bar works in Tree control

we know that the horizontal scroll bar is not work properly in tree control of FLEX2, especially the auto option.
what all I want is let horizontal scroll bar appear and work while the width of tree control is not enough to display the visble tree node.
but unfortunately adobe seems make this feataure disabled. so we need make it works ourself.
first thing, of course google it, and I found out a possible solution from everflash
the author try to change the value of maxHorizontalScrollPosition by doing the measurement on all visible items in the tree, yes it works and seems good.
But after I downloaded the source and go through it, I feel sad because the solution need our tree node data extends a custumized class named "TreeNode". in fact it won't be a total solution of this issue. actually what I want is an extensible tree. so I try to imporve the tree control from everflash.
after two days hard work, I make the control much more simple what with out any extends required. so you just need use my tree named "HScrollTree" instead of mx:tree. That's all.

11/24/2006

Google也会down?

用google那么久都没有见过,今天下午就让我见识了一次,呵呵,千年难得啊。

11/22/2006

blogspot再次复活

不知道会持续多久,不然我都没有动力更新blog了

用今天每日一句的话说,”I can't stand it“

11/08/2006

Bean story (2)

叶子终于出来了,还是青春永驻长的最快。

11/02/2006

Bean story (1)



bean 1:青春永驻
bean 2:财源滚滚
bean 3:猪你快乐

blogspot终于复活了

无法访问有近一个星期了吧,今天终于恢复了。

难道有被ZF给封了?或者亲爱的Google又出什么问题了?

拜托希望以后千万不要再发生这种事情了,作为一个中国的网民还真是辛苦的事啊

10/27/2006

《一仆二主》



老婆搞到了两个昨天的赠票 ,跑去美琪看,昨天为了给我姨妈买火车票起了个大早,晚上7点已经昏昏欲睡了,想这个意大利话的喜剧估计我是行赏不了,打算冒着被老婆骂的危险睡一觉。

7点一刻的话剧,6点多就从公司溜了,因为没时间吃饭,所以提前吃了巴比,两个肉包一个霉干菜(还是肉包好吃,经典)。做个地铁直杀剧院(地铁这个挤啊,放过一辆,第二辆才上去),下了地铁想买个水喝都没有,那个地方是寸土寸金啊,便利店开这里肯定亏本,好不容易找到一个小店搞个番茄汁,眼看差不多开场了就杀了进去,在门口花了5块买本剧情介绍,不到10页纸,也没讲啥就当留个纪念了。

赠票果然不怎么样,位置在最后一排的,最角落里,不过我心里窃喜,这个地方睡觉是最好了。闭上眼还没睡着,台上就跑出来个意大利老头开始呜里吗里介绍起这个话剧了(这个大家google一下就好了,省略1000字……)

好不容易开始,点蜡烛先(这是传统哦),然后跑上来一个人哪个棒子敲地板(大概是为让大家安静,以前意大利看这个估计也就是小剧场不上台面),终于开始了,说意大利文,不过头顶上有投影的字幕,心想看下人就可以睡觉了。结果一看就不可收拾,确实是很搞笑。对白、动作都有点无厘头(其实全世界的喜剧都差不多吗,冯导应该坚持下去总有一天走向世界,夜宴这种还是算了吧)。

具体剧情就不讲了,其实也蛮老套,整个过程精彩不足不过笑声不断,喜剧做到这样应该就够了吧。有些地方还有点冗余,不过还可以接受,160分钟的过程也算紧凑(至少没让我睡着)。其中最出彩的就是77岁的主演了,演这个话剧有40多年了,这么大把年纪在台上还要时不时来个杂技动作,跑来跑去的,我看着都有点担心。最后谢幕的时候他把面具(为啥要戴面具?我没说吗?这是一个假面话剧:D)拿掉的时候掌声雷动啊,我也给他拍了,真的不容易,这次要是不看,估计这辈子再也看不到真正的意大利假面喜剧了。

看完都10点多了,这个困啊饿啊,坐车回家直杀兰州拉面店,两分钟搞定一碗。挺着肚子回家睡觉去也……

10/24/2006

PDA一周


从入手PDA到今天有一周时间了,昨天也第一次摔到马路上了,敲出两块伤疤,我这个人真是不爱惜东西啊。

要是当时买了硅胶套就好了,晚矣,晚矣~~~

在这一周里还购入了不少东西,屏幕贴(50),皮包(100),Kingston 2G SD高速卡(360)
据说都买贵了……

装了不少软件,都是反复参考了个大网站的找到的,强烈推荐www.pdafans.com
Resco Explorer 资源浏览器
Resco Registry 注册表工具
Spb Time 不错的时钟工具
Spb Diary 今日插件
Spb Pocket Plus 工具集合,包括今日插件和很多系统增强
掌上万年历 国产的哦
Card Export 必备啊,把你的PDA当内存来用,拷文件方便的多了
HandySwitcher 程序切换和关闭的工具
MemMaid 垃圾清除等一系列工具的集合
Hiclac 超级棒的计算机
Resco Photo Viewer 看图片,截图全靠它了
Mdict 字典工具,一定要装的啦
MangaMeeya 看漫画的东东
Team One's Reader 看电子书的东东

TCPMP 看片一定要用它啦
Realone player 看rm用的啦

Opera 看网页用,支持VGA,可以看到更多的东东

海鹰输入法 拼音输入还不错,不过还是觉得不太爽
BlusLineCE 可以查询公交线路的东东,目前似乎只有上海的公交路线,国人做的要支持
MapView 看地图的mpv格式,配合下载的地图以后就不怕迷路啦

至于游戏就装了几个Astraware的,模拟器之类都还用不起来,有待摸索

目前就是这样,慢慢再更新,最后上个图,手机拍的质量比较差

Gaim2 beta4发布了

等了很久,官方终于发布了beta4,不过遗憾的是这个版本依然没有QQ。
可以这里获取安装包, 如果想要用QQ的朋友,还是去GaimCN下载吧。

至于怎么在ubuntu edgy eft上装还是参考我以前的帖子吧。

10/18/2006

终于入手了Acer N311c

等了那么久简体行货 终于上市了,果断入手,虽然目前的价格还有点高,不过N311c小巧的外型,震撼的3.7" VGA屏幕都足够值回票价了。

昨天玩了一天,装了些软件,还没怎么上手,毕竟是我的第一个PDA吗,估计这段时间要浪费在这个小东西身上了。

唯一感觉不足的是电池,为了保持小巧的外型,N311才用的电池容量不尽如人意,我装了几个软件,开WIFI上了一会儿网(大约半个小时),电力就消耗了50%。等我把它鼓捣好了,要好好测试一下电力究竟能持续多久,是否考虑购入第二块电池(貌似目前没有原装电池可买)。

等过两天玩出个名堂来了,再上图哈

10/12/2006

在firefox中关联ed2k链接到amule

说实话,这是一个很简单的问题,网上也有无数的指南,不过它依然花了我半个小时时间才搞定,所以不得不总结一下到处都没讲清楚的问题。

1、安装amule-utils以前似乎叫(amule-ed2k)
sudo apt-get install amule-utils


2、在firefox中打开about:config,新增如下键值
key:network.protocol-handler.app.ed2k
type:String
value:/usr/bin/ed2k (这个值的具体内容取决于你的版本,可能是ed2k/ed2k.amule/ed2k.emule,最简单的办法就是去/usr/bin下瞧瞧)

key:network.protocol-handler.external.ed2k
type:Boolean
value:true
最后要说明的是,只有在打开amule的前提下才可以使用,而且很好的解决了中文问题,非常棒。

在edgy里使用最新的GAIM开发版,体验QQ

GAIM早就把QQ纳入其源代码中了,不过官方发布了beta3后就再没有发布任何版本,我们也无法享受在GAIM中聊QQ。

不过GAIM一直有发布开发版,今天终于忍不住来体验一下。
首先去gaimcn下载最新的编译版,由于for ubuntu的版本比较慢,所以直接选择了rpm。
wget http://www.gaimcn.com/deploy/gaim-2.0.0-0.beta4.i386.rpm

然后用alien把rpm转换成deb来安装
fakeroot alien gaim-2.0.0-0.beta4.i386.rpm --scripts

如果还没有安装alien,那么就
sudo apt-get install alien

接着就是安装gaim了,建议之前先删除原来的gaim
sudo apt-get remove gaim gaim-data
sudo apt-get autoremove
sudo dpkg -i gaim_2.0.0-1_i386.deb


OK,现在拥有QQ的GAIM2已经安装好了,最后建议在新立德中将gaim锁定版本,免得被源中的版本升级。
最后来看图

10/10/2006

用java产生图片附加码,包含字体翻转功能

现在图片附加码功能已经被WEB应用广泛采纳以防范恶意的机器人攻击。
用java产生类似的附加码其实很简单,无非是产生一个jpeg图片并写上一些字母和数字,再加上一些混淆功能使得字不容易被自动识别即可。
下面的代码展示了如何产生一个图片附加码,并对文字进行翻转以避免被识别。
方法一:展示了如何产生一个图片
public BufferedImage drawImage(String code, float fontSize)
{
int size = code.length();
int width = (int) ((size + 1) * fontSize);
int height = (int) (fontSize * 1.67f);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) image.getGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

//填充矩形
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
//绘制黑色边框
g.setColor(Color.gray);
g.drawRect(0, 0, width - 1, height - 1);

//绘制干扰线
g.setColor(Color.black);
char[] chars = new char[code.length()];
int unitWidth = (int) fontSize;
code.getChars(0, code.length(), chars, 0);
for (int i = 0; i < chars.length; i++) {
//为文字定位
int x = (int) (i * unitWidth + random(unitWidth * 4 / 15) + fontSize / 2);
int y = random(height / 3) + (int) fontSize;
//设置字体旋转,正负30度
AffineTransform at = AffineTransform.getRotateInstance(((random(60) - 30) * PI) / 180, x, y);
g.setTransform(at);
g.drawChars(chars, i, 1, x, y);
}
return image;
}

方法二:展示如何将其输出成图片文件
FileOutputStream fos = new FileOutputStream("code.jpg");
BufferedOutputStream bos = new BufferedOutputStream(fos);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode(image);
bos.close();
方法三:使用Servlet输出到web页面
public class ImageServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("image/jpeg");
//图片自动超时
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
ServletOutputStream out = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
}
}

只需要使用方法一来替换二,三中的image即可实现功能,恕不能提供完整的代码,有任何问题欢迎留言或gtalk和我交流:D

一个不错的在线中英文翻译网站

dict.cn
内容挺多,有在线网页翻译,MSN机器人,在线背单词,还有一个全文朗读,东西不错。
以前一直用google的翻译,不过感觉dict.cn做的更专业一点,虽然它目前只有中英文。

今天还在blog上加了dict.cn的每日一句英语,挺不错的小东西:)

不过今天用它的MSN机器人有点问题,无法翻译中文,我想大概是因为我是UTF-8发行版的linux所以它不认识,已经提交问题给dict.cn了,希望他们能够很快解决。

想玩全文朗读(英文)的看这里:
http://bbs.dict.cn/viewtopic.php?t=3462

9/30/2006

Beryl发布了0.1.0

终于不用再使用cvs版本了

使用以下的源就可以了
deb http://www.beerorkid.com/compiz edgy main-edgy


获取:2 http://www.beerorkid.com edgy/main-edgy beryl-core 0.1.0-1 [259kB]
获取:3 http://www.beerorkid.com edgy/main-edgy beryl-plugins-data 0.1.0-1 [1601kB]
获取:4 http://www.beerorkid.com edgy/main-edgy beryl-plugins 0.1.0-1 [477kB]
获取:5 http://www.beerorkid.com edgy/main-edgy emerald 0.1.0-1 [226kB]
获取:6 http://www.beerorkid.com edgy/main-edgy beryl-settings 0.1.0-1 [218kB]
获取:7 http://www.beerorkid.com edgy/main-edgy beryl-manager 0.1.0-1 [30.8kB]
获取:8 http://www.beerorkid.com edgy/main-edgy beryl 0.1.0-1 [10.1kB]
获取:9 http://www.beerorkid.com edgy/main-edgy beryl-dev 0.1.0-1 [95.8kB]
获取:10 http://www.beerorkid.com edgy/main-edgy emerald-themes 0.1.0-1 [1292kB]

9/26/2006

使用beryl实现Edgy内置的AIGLX

最近compiz正式转移到Beryl了,以前的QUINN分枝正式改名成了beryl。
一直升级的朋友也会发现最近cgwd和csm相关的包都已经从源里消失了,beryl的发布却还没有时间表,下面的方法可以让大家提前使用beryl。

先修改sources.list,增加如下源地址:
deb http://dev.realistanew.com/beryl edgy beryl

然后再执行如下命令,
sudo apt-get update
sudo apt-get install beryl-core beryl-plugins emerald beryl-settings beryl-manager beryl beryl-dev emerald-themes
这样将替换所有cgwd和csm相关的包,手动增加beryl-manager到系统-->首选项-->会话-->启动程序中,重启X开始享受AIGLX吧。

另外使用nvidia的朋友执行
sudo apt-get dist-upgrade

这将升级到最新的nvidia的驱动程序。

用JAVA处理Unicode BOM

Unicode Byte-Order Markup(BOM)是一种字节序标记用来标示随后的字节流是何种Unicode,BOM有以下几种:
Bytes Encoding Form
00 00 FE FF UTF-32, big-endian
FF FE 00 00 UTF-32, little-endian
FE FF UTF-16, big-endian
FF FE UTF-16, little-endian
EF BB BF UTF-8
可以通过这里来获取详细的信息。

但是这些BOM并不是必须的,JAVA的Unicode编码可以处理UTF-16的两种BOM,但是对于UTF-8却无能为力,JDK Bug 4508058很早之前就提到了,可是sun却不愿意修复也不愿意提供一种新的Charset来帮助我们处理UTF-8的BOM。但是例如windows的notepad等程序在保存为UTF-8时都会带上BOM,那么用JAVA的java.io.InputStreamReader来读取就会在最前面出现一个“?”。
既然sun以兼容性的问题不愿意修复,那么只有自己来完成它们了,当然也已经有人帮我们做了这样的事情:
UnicodeInputStream.java
UnicodeReader.java

可以用来弥补,它们可以处理BOM并自动识别流,并且把讨厌的“?”去掉。

9/24/2006

看中了HAMILTON的一款表


汉米尔顿 HAMILTON Jazzmaster Viewmatic系列 H32515555

系列 : Jazzmaster Viewmatic
款式:男款
字盘颜色: 银色
表带用料: 褐色的皮带
柄宽度: 20 毫米
机芯: 自动机械
表壳用料: 不锈钢,40 毫米
防水水深: 50 M

唯一可惜的是这是个美国品牌……

9/22/2006

探测常见的文件编码

在处理文本文件时往往因为不知道文件编码而很痛苦

对于一些特别的编码的文件其实是有办法做出判断的
1 . UTF7 所有字节的内容不会大于127
2 . UTF8 前三个字节为"0xEF 0xBB 0xBF"
3 . Unicode big endian 前两个字节为"0xFE 0xFF"
4 . Unicode little endian前两个个字节为"0xFF 0xFE"

little endian和big endian的区别就是高低位颠倒。

9/19/2006

用文泉驿武装ubuntu

从5.10开始我就一直使用圆体美化,不过对于这种有版权问题的字体总是有点不爽。
所以借升级到edgy之际,决定要开始使用开源的文泉驿字体

其实ubuntu的uming字体也不是很差不过对于要求精益求精的人来说它实在不算完美。
文泉驿在源中默认就有,可以自行安装
sudo apt-get install xfonts-wqy
sudo fs-cache -f -v
edgy源中的是0.7.0已经很新了,想要尝鲜的也可以去下面的地址下载nightly build
http://ftp.ubuntu.org.cn/wqy --中国电信
http://apt.ubuntu.org.tw/ubtw-testing/wqy/ --台湾
http://www.ubuntu-zh.org/~freeflying/wqy/ --香港
http://www.cnopensource.org/download/other/font/
安装完文泉驿,下一步就是让X选用文泉驿来显示中文。

sudo cp /etc/fonts/language-selector.conf /etc/fonts/language-selector.conf_backup
sudo vi /etc/fonts/language-selector.conf
在文件中将字体位置调整成下面的样子

Bitstream Vera Serif
WenQuanYi Bitmap Song
...
上面只显示了第一和第二,其他不用改,只要调整一下顺序,让文泉驿作为第二个候选字体就可以了。

这还不算完,由于文泉驿默认有加粗,所以遇到系统加粗的时候就会黑的一片,所以要让其在合理的情况下对字体加粗

在配置中找到下面的位置,并增加红色的部分:

<test name="weight" compare="less_eq">
<int>100</int>
</test>
<test compare="more_eq" target="pattern" name="weight">
<int>180</int>
</test>
<edit mode="assign" name="embolden">
<bool>true</bool>
</edit>

好了,现在只要重启X就可以看到美丽的文泉驿了,最后是我的截图:


热烈庆祝访问量破百~~~

从9月4日加入访问统计到今天刚好半个月,访问人数终于突破100了,庆祝一下,哈哈哈。
下面是站点统计的信息,也可以通过点击页面上的统计数据来查看。

VISITS

Total101
Average Per Day9
Average Visit Length1:35
Last Hour0
Today7
This Week63

PAGE VIEWS

Total195
Average Per Day12
Average Per Visit1.4
Last Hour0
Today8
This Week87

9/17/2006

做小白鼠的代价


本以为edgy 都knot3了,应该自己不至于成为小白鼠。
可是今天一升级就给了我一个下马威,最关键的firefox启动出错了,以前也只是频繁崩溃,可是这次干脆罢工了。
无奈之下只有用mozilla来上网了,其实我还有Wine的IE,不过在linux上用IE总是那么别扭。

不过这总不是办法,经过反复研究发现是因为中文语言包的问题导致了这次事件,所以就要
sudo apt-get remove mozilla-firefox-locale-zh-cn
sudo apt-get remove mozilla-firefox-locale-zh-tw

OK,果然一切恢复正常,坚持用两天英文菜单就是了,等更新

9/16/2006

修复升级后的软件包版本

升级到edgy之后,在新立德里看到有不少包被放到了陈旧的目录中
这是由于原来安装的版本和edgy中的不同,可以使用新立德中强制版本的功能来将其安装为edgy指定的版本。

不过还有两个包似乎丢失了,一个是imake令一个是makedepend,不仅在edgy中没有定义,而且还无法将其删除,因为这会删除系统中很多的软件包……

另外经过一阵更新后aiglx只要compiz-start就会重启X,仔细查看日志发现启动X的时候说i910_dri.so没有找到,于是
sudo apt-get install libgl1-mesa-dri libgl1-mesa-glx
这下熟悉的3D桌面又回来了

从dapper升级到edgy

edgy的knot3出了之后我实在忍不住要尝尝鲜了,所以昨晚决定升级我的ubuntu,到了这个阶段应该不能被叫做小白鼠了,毕竟还有一个月的时间edgy就要正是发布了。

首先自然是修改/etc/apt/sources.list
我使用的是cn99的源,ADSL速度很快
deb http://ubuntu.cn99.com/ubuntu/ edgy main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ edgy-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ edgy-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ edgy-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ edgy-proposed main multiverse restricted universe
由于我已经装了aiglx所以我增加了
deb http://ubuntu.compiz.net/ edgy main-edgy

还有一个debuntu的源,哪里有gaim2.0
deb http://repository.debuntu.org/ edgy multiverse

接着就是
sudo apt-get update
sudo apt-get dist-upgrade
总共提示我要升级800多个包,安装100多个,大概下载800M左右,主要是我之前将一些没用的包删除了,尤其是那些xxx-dev,不然就要和有些同志一样下载上G的文件了。
1M的ADSL总共下载了2个小时多一点点,一切顺利,开始配置包,这个时候会有一些错误
我分别在openoffice-core和cupsys-common的时候提示出错,这个时候只要
sudo apt-get -f install

来强制安装就好了,如果安装过程中出错,就在强制安装,直到完成。然后就可以继续
sudo apt-get dist-upgrade
整个过程大概需要30分钟时间,不过全部完成之后并没有安装xserver-xorg所以手动安装一下:
sudo apt-get install xserver-xorg
最后只要把那些保持原样的包全部install一下就好了,这样就大功告成了,一共花去我45分钟时间。
现在就可以reboot了,之后会有第一个惊喜,具体是什么升级之后你自然就会直到,不过我估计这到了正式版就看不到了。reboot不太顺利,由于我原来安装了aiglx,而且在配置gdm和xserver-xorg的时候选择了保留配置,导致x无法启动,这个时候只要分别去/etx/X11和/etc/gdm下将xorg.conf和gdm.conf-custom恢复一下就可以了。似乎也可以使用
sudo dpkg-reconfigure gdm
sudo dpkg-reconfigure xserver-xorg
对于配置修改选择Y即可。再重启后一切顺利进入Gnome,aiglx也可以用。
变化不大,传说中的速度提升我也没有看到,firefox2到是有些问题,刚才就crash了一下。
最后将包清理一下,把不需要的都删掉,比如原来装的xserver-xorg-air等等,去新立德里找那些陈旧的包就是了,很简单。

至此一切完成……Good Luck

9/11/2006

看看我的aiglx桌面

终于领会了截图的奥秘,展视一下我的aiglx桌面,嘿嘿

9/10/2006

舒米离开了


在蒙扎一场酣畅淋漓的胜利之后,所有法拉力车米都不原意听到的消息终于到了。
“这是我最后一个蒙扎的大奖赛了!我已经和车队共同决定,在本赛季结束后退出F1比赛。这是一个很不寻常的时刻,因为赛车在过去30多年中留给我太多太多的回忆,无论是好的、坏的,它们都很特别。”
舒米留给我们的是一道道红色的闪电,八个赛季总冠军的头衔(不好意思,我已经算上这个赛季了),这些将永远留在我们记忆当中。
舒米走了之后的F1将真正进入年轻人的时代,Kimi将是他最好的接班人,以后我还是法拉力的车米,这次我看好Kimi,如果不是赛车和车队拖他后腿,也许成为舒米对手的是他而不是阿隆索。
F1的轰鸣将继续,新一代的车王将会产生……

舒米的光辉历史:
迈克尔-舒马赫,F1历史上最成功的车手。244场分站,7个世界冠军,90场分站冠军,68个杆位,甚至37岁的德国车王还将收获他的第8座王冠。

这就是那永不磨灭的红色闪电……

升级到gaim2

虽然目前gaim2还处在beta阶段,但是用1.5那么久早就厌烦了,自然是想升级一下。

对于ubuntu用户可以参考http://repository.debuntu.org/来进行升级安装。
不过这个只针对dapper 和 edgy的版本,如果是其他版本可以到http://mighmos.org/packages.php这里下载deb包进行安装。

在debuntu里还提供了两个gaim消息通知的插件,分别是gaim-libnotify和gaim-guifications,效果都是从右下角弹出的消息提示,至于喜欢那个就看各自的喜好了。

gaim2用了一下下MSN,现在可以显示对方发的自定以表情了,不过似乎还不能发。另外使用方式上也做了不少变化,需要适应一下。其他就没有什么特别的了。

另外,据悉gaim2已经将openq纳入其svn中,也就是说将来gaim2将直接支持QQ了。不过到目前为止发布的 beta都不包含这个版本。有兴趣的可以参考http://forum.ubuntu.org.cn/viewtopic.php?t=21890楼主也有编译好的版本可供下载。

9/08/2006

compiz的新变化

最近compiz做了升级,做了一些改动,尤其是去掉了所有aiglx的包,并且启用了全新的配置工具csm来代替gconf。

最不爽的是右下角的红色方块没有了,如果要启动GL Desktop需要执行compiz-start。

至于设置,还是可以从系统-->首选项里找到CGWD Theme和Compiz Setting Manager(csm)。

这次升级以后效果有了一些提升了,原来比如XMMS两个窗口无法对其的问题已经解决了。

9/07/2006

python,没有类型声明真的很爽吗?

这些天抽空看了一下python,和所有的脚本语言一样在声明变量时无须 声明其类型,包括方法参数也是一样。
这样的好处自然是显而易见的,对于快速代码来说也非常有好处,可是在用到方法定义中却不见得是个好的选择。
为了避免类型错误,不得不总写type(arg)==type("")这类的语句,然后自己抛出TypeError。在一个类中也由此产生了interface method和internal method,其实internal method只是为了写这些无聊的类型检察。

写到这个地方,不得不说还是有类型好,至少虚拟机可以帮我做类型检察,尤其实在编码期就可以检查问题,不然只有到了运行期才能发现这些错误。目前还不知道那个IDE可以做职能的代码分析以发现类型错误。如果有的话,似乎还可以接受。

显然对于只写一个
def print_string(str):
    """print a string"""
    print str
来说非要写成
def print_string(str):
    """print a string"""
    if type(str) != type(""):
        raise TypeError, "print_str requires a string, given a %s" % type(str)
    print str
显然是够烦人的,一个参数也就罢了,要是一个方法有三四个参数,写这个代码非郁闷死,当然还有一个选择,就是压根不写类型检查,不过这样子程序的结果就不好预期了。


目前已经发现一个不爽,继续看下去先~

内存要多少才够?

用了很久的512M(2*256M)内存,前两天终于盼来了老大提供的一条1G,拔下一个256换上,力马感觉运行如飞。

以前开一个IDEA就不能开别的东西了,Gaim也是一个内存大户,还有firefox,往往是眼睁睁的看着电脑却毫无反映。装了aiglx就更甚了,比xorg占更多内存。

不过现在好多了,开个IDEA还能开Eclipse,还把平时都不开的LumaQQ也打开了,速度非常的快,不过用着用着就显得慢了,不过aiglx确实很费内存,不得已只得把Eclipse关了,用的着的时候再开吧。

嗯……什么时候才能再来一个1G呢?

9/01/2006

ubuntu dapper with aiglx

早就听闻xgl的大名,不过一直没有尝试,今天心血来潮要实验以下3D桌面的威力。谁让Vista一直在吹嘘它的桌面呢?
其实网上有很多类似的Guide,不过最终没有一个能万全指引我的,所以将我自己的步骤写下来,以便其他人能受用:
由于我使用的Dell 510m是intel集成显卡,所以不包括显卡驱动安装的部分,如果是使用ati的朋友需要自己按照显卡驱动,以使其支持3D加速。
1,设置你的repositories
安装aiglx我们需要从www.compiz.info来下载软件包
sudo vi /etc/apt/sources.list
添加如下的行
deb http://ubuntu.compiz.net/ dapper main aiglx
还需要更新签名以便获取软件包
get http://ubuntu.compiz.net/quinn.key.asc -O - | sudo apt-key add -

2,更新你的系统
sudo apt-get update
sudo apt-get dist-upgrade

3,安装Direct Rendering Infrastructure (DRI)

sudo apt-get install linux-dri-modules-common
sudo apt-get install linux-dri-modules-`uname -r`

如果将来更新了系统内核,执行下面的代码来解决模块依赖

sudo /sbin/ldm-manager

4,安装AIGLX和Compiz

sudo apt-get install xserver-xorg-air-core compiz gnome-compiz-manager compiz-gnome compiz-core compiz-plugins

5,安装主题和配置工具

sudo apt-get install cgwd cgwd-themes gconf gconf-editor

到此为止,所有的软件包已经下载完成了,接着需要修改配置文件了

1,/etc/X11/xorg.conf (强烈建议你修改之前保存原始文件)

保证以下的模块已经加载

Load "dri"
Load "dbe"
Load "glx"

在Section "Device"栏中增加如下行
Option "XAANoOffscreenPixmaps"

在Section "ServerLayout"栏中增加如下行
Option "AIGLX" "true"

确保Section "DRI"的内容如下:
Section "DRI"
Mode 0666
EndSection

在最后添加如下内容
Section "Extensions"
Option "Composite" "Enable"
EndSection
2,/etc/gdm/gdm.conf-custom (同样建议先做个备份)
修改[servers]栏为如下内容
[servers]
0=aiglx

并增加如下内容
[server-aiglx]
name=aiglx server
command=/usr/bin/Xorg-air :0
flexible=true

3,将/etc/X11/下的X 这个符号连接,修改到/usr/bin/Xorg-air

4,由于xorg-air的一些缺失(不知道是不是bug),我们还需要执行以下的代码:
sudo ln -s /usr/lib/xorg/modules/input /usr/lib/xorg-air/modules/
sudo ln -s /usr/lib/xorg/modules/drivers /usr/lib/xorg-air/modules/

好了,现在已经完成了所有的工作,建议重新启动你的电脑,如果一切顺利进入X后你就可以享受3D桌面了,你应该可以在右上角看到一个红色的方块,那就是配置桌面的,现在可以发挥你的想象力了。

Good Luck~~

下面是我的桌面贴图

透明的标题栏~~~~

旋转中的桌面,我总是截不好,将就看吧......=_=

8/31/2006

pupu到此一游



第二次学Python

曾经玩过一段时间,不过一直不用荒废了,现在打算重新开始学python。

老规矩还是从《Dive into Python》开始,以下是一些比较关注的Python方面的书,会慢慢搞来看看。

Oreilly Learning Python 2nd Edition
Wrox - Beginning Python - 2005
O'Reilly - Advanced Python Programming
O'Reilly - Python and XML - 2002
Python Network Programming by Sebastian V. Tiponut
Manning,.wxPython.in.Action.(2006)

预计花两周左右的时间来学习Python,然后开始做一些小东西,边写再边深入。
目前有打算做的一个东西是对于log4j日志的搜索查看工具

8/30/2006

We love Shanghai

这期的申报附送的CD真的很不错,上海话的RAP好听
有很多话我都已经不会说了,自己的上海话已经掺杂了太多的普通话思想。
听听那些纯真的上海话来讲上海的时尚感觉真的不错。

随便推荐一个上海话RAP的站点

8/29/2006

SSH信任登录

每次ssh,scp都要输入密码实在是太麻烦了,所以弄个信任登录是很有用的

以下办法对OpenSSH有效,其他的偶没有实验过
1.客户端
代码:
cd ~/.ssh
#产生公钥文件(id_dsa.pub)和私钥文件(id_dsa), 类型DSA, 长度1024 bits
#注意询问passphrase的时候直接回车
ssh-keygen -t dsa -b 1024
#将公钥复制到远程主机去
scp id_dsa.pub Server:~/.ssh/id_dsa.pub


2.服务端
代码:
cd ~/.ssh
#将Client的公钥放入Server的信任列表
cat id_dsa.pub >> authorized_keys
#更新权限,很重要
chmod 600 authorized_keys
#把公钥删了
rm -f id_dsa.pub


好了,现在你再也不要输入密码了

8/28/2006

ubuntu 非官方手册

http://ubuntuguide.org/wiki/Ubuntu_dapper

非常好的手册,做为一个ubuntu的使用者,这个 手册很实用。

Multicast and JGroups(未完待续)

1.目的

为了进一步深入了解JBoss-cache,所以觉得有必要好好研究一下JGroups。
要了解JGroups自然不能对Multicast毫无概念,虽然以前有前后多次看过相关文档,但是都没有留下什么系统的东西,所以这次决定从头看起,并写下这个指南。以下大部分内容来自互联网,尤其是www.jgroups.org。

2.什么是Multicast
Multicast是一种同时向多台机器发送数据的机制。
Multicast使用224.0.0.0到 239.255.255.255
这段IP来传送数据,这段IP地址是保留的,发送到这上面的数据不会通过你的子网转发。
在RFC-1060中定义了一部分预留的组播地址,使用时应注意不要重复。

一些比较特别的组播地址:(更多内容请查看RFC-1060)
1)224.0.0.0 这个是保留地址,不会被指定到任何的组播组
2)224.0.0.1 这个地址在所有的主机上被指定为一个永久组播组,这个地址可以用来找到本地子网内所有的组播主机。
使用ping224.0.0.1可以查看这些地址

在一个组播中的所有主机使用一个相同的组播地址,它们被称为一个组(Group),组中的成员是动态的,他们可以随时加入或者离开组。每台主机可以同时是多个组的成员,也可以不属于任何一个组。比较特别的是,并不是只有组中的成员才可以给组发送数据。
组分为两种,一种是永久性的,一种是动态的。对于永久性的组,他们拥有一个众所周知的管理IP地址,这个地址不是组中的成员,它是永久的。永久性的组可以
拥有任何数量的成员,甚至没有成员。而动态组只有在拥有成员的时候才存在。JGroups使用的就是动态组来实现组播数据的。

3.什么是JGroups
JGroups是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。JGroups可以用来创建一个组,这个组中的成员可以给其他成员发送消息。
Jgroups的主要功能如下:

1.创建和删除组,组成员可以分布在局域网或广域网中。

2.组成员加入和离开组
3.成员关系的自动侦测并通知成员的加入,离开和丢失(原文是crashed,大意就是说没有通知的离开吧
4.侦测并删除丢失的成员
5.发送和接收成员到组的消息(点到多点)
6.发送和接收成员到成员的消息(点到点)

JGroups使用灵活的协议栈,这也是JGroups最强大(the most powerful)的功能,它允许开发人员配置协议栈来适用于他们自己的应用需求和网络特征。这样做的好处在于,开发人员只需要关注他们使用到的协议。通过组合和匹配各种协议来满足各种不同应用的需求。JGroups实现了一系列的协议(开发人员也可以编写他们自己的协议),例如:

传输协议:UDP(IP Multicast),TCP,JMS
分块协议:FRAG和FRAG2用来将大消息分块发送
可靠传输协议:UNICAST和NAKACK
失败侦测:FD(passive failure detection),VERIFY_SUSPECT。自动将丢失的成员排除到成员列表以外。
排序协议:Atomic(发送所有或者全部不发),FIFO, Causal, Total Order (序列或基于分块)
成员协议:GMS(Group membership)用来处理成员的加入和离开
加密:AES/ECB/PKCS5Padding/RSA... 对传输的数据进行加密
其他还包括流量控制,统计等

*以上主要内容翻译自http://www.jgroups.org/javagroupsnew/docs/index.html

4.JGroups详解
注意:以下内容基于JGroups2.2,获取最新信息请访问www.jgroups.org
4.1. 基本解构

讲解之前我们先来看一个图,有一个直观的概念先



其中有几个比较重要的概念需要解释一下:
Channel
一个Channel表示一个组播通讯的endpoint。客户端通过连接一个组播地址的Channel来加入一个组。
Channel的FSM(状态机)大致如下:

  • unconnected:表示这个Channel创建了
  • connected:表示这个Channel已经连接到一个组,并可以发送和接收消息
  • unconnected:表示这个Channel从一个组断开,并可以加入其他组
  • closed:表示这个Channel已经关闭

一个Channel同时只能有一个发送者发送消息(同步的),当然一个应用可以有多个Channel。可以使用Channel上send和receive(拉,可以通过linstener来实现推的模式)方法来发送和接收消息。

Protocol Stack
协议栈管理一组协议,并维持他们的上下关系,它负责创建所有的协议,并初始化和启动它们。它同时负责将从协议上接收到的消息发送到注册的对象上,比如Channel和GMP,并将来自这些对象的消息下发到协议栈上。
协议栈可以通过Configurator来设置,初始化,停止和删除协议。

Event
用来在协议层之间传递消息

Protocol
协议层被按顺序的放置到协议栈中。Event被从底层向上传递,比如UDP层接收到一个消息后,此消息将被当作一个Event向上层传递。每层协议都将按顺序处理Event,直到有一层发送一个响应或者丢弃这个消息。发送消息同样,只是从上而下调用协议层。
每个协议都包括两个FIFO的队列,一个存放用来向下消息,一个用来存放向上的。无论消息上行还是下行都将先进入队列,并有相应的队列处理(up-handler和down-handler)来处理它们(调用这个协议上的 up和down方法),协议的实现只需要实现相应的up和down方法,而无须关心这些内容。
有一点要特别指出的是,消息在协议层之间传递是按照FIFO顺序的,所有的协议实现必须保证这一点。
4.2. 协议详解

JGroups中有非常多的协议实现(约50种),这里不可能全部拿来讲,我挑选一些比较常用的协议来讲,其他的可以通过查看Javadoc或者JGroups的源代码来了解。
说明:以下协议中讲到到参数也只是常用参数,具体内容请查阅javadoc。

数据传输及网络层协议

这个协议是协议栈中相当重要的部分,它来完成数据的发送和接收。
JMS
使用Java Message Service(JMS)实现的传输协议,此协议依赖JMS服务器来分发消息,JMS服务器将发消息发送到特定的Topic下,所有订阅此Topic的将收到消息。关于
JMS请访问:http://java.sun.com/products/jms/需要注意的是当使用JMS作为数据传输协议时应避免使用那些打开服务器连接的协议,比如FD_SOCKET。这JMS里FD比FD_SOCKET更合适。(关于FD和FD_SOCKET请看下面的介绍)
参数表如下:






































名称


类型



默认值


描述



topicName



String



必选



完整的JNDI名称,用来表记发送消息的Topic



cf



String



ConnectionFactory



用来创建到Topic连接的ConnectionFactory的JNDI名称



jndiCtx



String



-Djava.naming.factory.initial



JNDI
Initial Context类



providerURL



String



-Djava.naming.provider.url



JNDI
provider URL



ttl



int



0





TP
这是一个传输协议的抽象类,TCP和UDP都是从这里继承而来,主要将将它的一些配置,这些配置都可以用再UDP和TCP协议上。
参数表如下:

























































名称



类型



默认值



描述




bind_addr



String



-Dbind.address=addr



选择使用那个本地NIC来进行数据传输



discard_incompatible_packets



boolean



false



是否屏蔽不兼容得数据包,只JGroups得版本,通常小版本不会有文体,如果将此设置为 true则表示必须完全相同得版本的消息才接收。< /P>


loopback



boolean



false



如果设置为true那么自己发送给自己的消息将被特殊处理。< style="font-family:Vera Sans YuanTi, serif;">unicast消息将被立刻回发,multicast消息则会先在本地进行一个拷贝,真的消息回来是会被丢弃,拷贝的消息将被回发。


对于Window
media (non)sense有用。



use_incoming_packet_handler



boolean



false



如果设置成true,那么消息接收线程将把接收到的消息放入临时队列,并有其他线程来处理反序列化和上发等处理。这可以节约接收线程的处理时间。



use_outgoing_packet_handler



boolean



false



类似上面的,只是针对发送的消息



enable_bundling



boolean



false



是否支持消息合并,即把小的消息和并成大消息来发送。



max_bundle_size



int



由 AUTOCONF监测



max_bundle_timeout



int



20(ms)




TCP,TCP_NIO
使用TCP实现的传输协议,创建一个ServerSocket来监听消息。对于每个连接(accept())都会创建一个线程来监听其消息,所有的外发的
消息对于每个目标地址都使用独立的线程来发送,这些线程是复用的。使用ConectionTable来实现以上机制。
NIO使用java.nio实现,关于NIO请访问:http://java.sun.com/j2se/1.4.2/docs/guide/nio/
参数表如下:






















































名称



类型



默认值



描述



use_send_queues



boolean



true



是否对不同的连接使用不同的发送队列



sock_conn_timeout



int



2000(ms)



连接超时时间,作用于ConnectionTable



skip_suspected_members



boolean



true



是否要丢弃发送到suspect成员的消息



recv_buf_size



int



150000



数据包套接字缓存大小



send_buf_size



int



150000



start_port



int



7800



寻找可用的本地端口段,0表示没有上限



end_port



int



0




对于TCP_NIO有如下附加参数:


















































名称



类型



默认值



描述



reader_threads



int



8



NIO读写线程数



writer_threads



int



8



processor_threads



int



10



消息处理池的设置



processor_minThreads



int



10



processor_maxThreads



int



10



processor_queueSize



int



100



processor_keepAliveTime



int



-1




UDP,UDP_NIO
使用UDP实现的组播协议,分别使用multicast
socket和unicast
socket来实现点到多点以及点到点。
参数表如下:



























































名称 类型 默认值 描述
mcast_addr String 228.8.8.8 组播地址
mcast_port int 6700 组播端口

ip_mcast



boolean



true



是否使用IP
Multicast



ip_ttl



int



64



指定外发消息的TTL



toc



int



0



参见java.net.DatagramSocket#setTrafficClass 和RFC
1349


可用的值如下:


IPTOS_LOWCOST
(0x02)


IPTOS_RELIABILITY
(0x04)


IPTOS_THROUGHPUT
(0x08)


IPTOS_LOWDELAY
(0x10)



mcast_send_buf_size



int



32000



指定 multicast和unicast的数据包套接字的发送和接收缓冲大小< /P>


mcast_recv_buf_size



int



64000



ucast_send_buf_size



int



32000


ucast_recv_buf_size int 64000

TUNNEL
UDP 的替代品,使用一个连接到Router的TCP连接来代替UDP,所有外发的消息都会先发送到Router,然后再有Router来分发所有连接到此组的TUNNEL上。
此协议可以用来穿透防火墙,防火墙外的组成员使用Router连接到其的TCP连接向防火墙内发送消息。
参数表如下:





















名称



类型



默认值



描述



router_port



String





router的地址



router_host



int





router的端口


正式转移blog

对MSN space失去信心了, 先把blog迁移到这里