-
两个经典的解释
日期:2009-07-30 | 分类:Playing With Technology
什么是面向对象(Object-Oriented)?
BEFORE:
睁开眼看见天亮了,那是因为有光,抬头望望窗外,太阳出来了...
AFTER:
睁开(Eye.Open)眼(Object:Eye)看见(Event:I.See)天(Object:Sky)亮(Sky.Dawn)了,那是光(Object:Light),抬(Head.Up)头(Object:Head)望望(I.Look)窗(Object:Window)外,太阳(Object:Sun)出来(Sun.Sunup)了...
什么是句柄(Handle)?什么是指针(Pointer)?
VERSION1:
正如杜牧写的《清明》:清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村。
诗中,牧童的手为指针,杏花村的牌子为句柄,杏花村中的酒家就是对象的实例.
VERSION2:
句柄就是烤叉,用烤炉烤过鸭,鸡,牛,羊,狗么?
炉子里的东西是看不见,摸不到的,但你能用叉子去控制,
至于叉子上的是什么,你放进去前应该记住。 -
用于SmartMovie的SRT字幕转SUB字幕工具
日期:2009-07-07 | 分类:Playing With Technology
SmartMovie是Symbian平台一款效果很不错的播放器,缺点就是只支持目前比较少见的SUB字幕,此SUB还不同于传统意义上的SUB字幕,它是文本描述的,而不是图像描述的。
先看看SRT和SUB的格式,都可以用记事本打开:
SRT字幕中,两个Block之间用空行隔开,每个Block中第一行为Block编号,没有意义,第二行为该Block的出现以及消失时间,格式为“小时:分钟:秒,毫秒”,中间用“ --> ”分割,其后为字幕内容。

SUB字幕中,每一行代表一个Block,第一对括号之间为该Block出现的帧号,第二对括号中为该Block消失的帧号,其后为字幕内容。
转换工具主要的工作有二:
1.SRT是基于时间的,SUB是基于帧的,所以首先要将时间转换成帧。
2.将SRT的格式调整成SUB的格式。
按照以上思路,我用C#写了一个程序,用于完成上诉工作。
SRT转SUB工具下载地址:
点击这里下载
需要注意的是这是托管代码写的,需要安装有.Net Framework 2.0或以上版本才可运行。 -
发布Java简体中文分词组件 - KSeg4J 1.0
日期:2009-07-03 | 分类:Playing With Technology
May 22, 2009 更新下载地址
May 16, 2009 更新一个Swing例子
Jul 3, 2009 更新下载地址到大米盘自己写的一个简单的用于简体中文分词的Java组件。有关机械分词算法可以参考我的另一篇文章。
已实现的功能:
1.对简体中文文本进行分词。
2.使用用户自定义分词词典。
3.结合正、逆向最大匹配算法消除歧义。
尚未实现功能:
1.繁体中文分词。
2.中文姓名识别。
3.中英文混合词识别。
4.词性标注。
使用方法:
1.导入KSeg4J包到项目
2.实例化Seg类
3.调用seg方法分词
(详情请参见Javadoc文档)
一个Swing例子:
在上方文本框输入待分词文本,在下方文本框输出。
截图:
下载此Example:
KSeg4J - Example
注意事项:
1.Seg类最好在程序运行时实例化,而不是每进行一次分词实例化一次,因为分词前需要加载分词词典(如果你打开jar文件,可以看到这个词典大约包含28万个条目),这个过程需要消耗较多时间(在我的电脑上大约1~2秒)。
2.本组件的线程安全性未经测试,请避免多线程同时访问。
3.本组件仅用于学习研究,是作者在业余时间开发。作者将尽力保证本组件的可靠性、正确性,但不会对使用此组件产生的任何后果负任何责任。下载此组件,意味着您已默认同意此条目。
4.如果有疑问或者bug反馈,欢迎通过Email联系我,Email地址可以在主页右上方找到。KSeg4J下载地址:
KSeg4J 1.0 Jar and JavaDoc -
在Windows下使用Eclipse+CDT+MinGW开发C++
日期:2009-04-18 | 分类:Playing With Technology
首先介绍一下这三样东西:
Eclipse:IBM捐献出来的一个开源、免费、跨平台的IDE,具有极其强大的可扩展性。
CDT:C/C++ Development Tools,Eclipse用于进行C/C++开发的插件。
MinGW:简单的讲,它就是一个用于Win32下生成二元码的编译环境,它也是开源、免费的。
这篇文章使用的各种工具的版本: Eclipse 3.4.2, MinGW 5.1.4, CDT 5.0.2
假 设Eclipse已经安装好了(如果没有,直接去下载之后解压就可以了,它是完全绿色的),因为默认的Eclipse是不支持C++开发的(除非你选择安 装的是Eclipse for C++),所以首先需要安装Eclipse用于C++开发的插件Eclipse C/C++ Development Tools。可以在Help -> Software Update -> Available Software -> Ganymede Update Site -> C and C++ Development中找到这个插件。
-
一个令我十分费解的java问题(Updated)
日期:2009-04-10 | 分类:Playing With Technology
今天做了一些J2SE的工作,有一个计算结果反复尝试都不能得到正确的值,在接近崩溃的调试过程中,我偶然发现了一个很让我非常费解的现象,两个形式相同的double值和String值(比如说String的"0.0"和double的0.0),全部转化为String后进行比较,竟然得不到正确的结果,但是全部转化为double后比较,就可以得到正确的结果.
看一段代码,我特登人为制造了上面两种情况:public static void main(String[] args) {
// 首先定义两个变量,一个double 0.0,一个String 0.0
double a = 0.0;
String b = "0.0";
// 然后,将double值转成String,再和另一个String比较
String c = String.valueOf(a);
// 先打印出两个String看看
System.out.println(b);
System.out.println(c);
// 进行比较
if (c == b)
System.out.println("OK");
else
System.out.println("???");
System.out.println();
// 接着,把String转成double,再和另一个double比较
Double d = Double.parseDouble(b);
// 先打印出两个double看看
System.out.println(a);
System.out.println(d);
// 进行比较
if (a == d)
System.out.println("OK");
else
System.out.println("???");
System.out.println();
// 再直接新建一个String的"0.0"用于比较
String e = "0.0";
System.out.println(e);
System.out.println(b);
if (e == b)
System.out.println("OK");
else
System.out.println("???");
}看看运行后输出:
0.0
0.0
???
0.0
0.0
OK
0.0
0.0
OK就是这三个不同结果,非常让我费解,两个String值(b和c)输出都是"0.0",但是却不相等,直接新建两个"0.0"的String经行比较,是相等的,转成double比较,也是相等的,问题肯定出在Double.parseDouble()上,but, WHY???
有高人能解释一下,鄙人将十分感谢!
p.s. 我的环境是openSUSE 11.1, Eclipse for J2EE 3.4.2, Eclipse Modeling Tools, Java EE 5 SDK Update 6 with JDK for Linux. 不会是和环境有关吧. -
You know what is cool? Check it out
日期:2009-02-13 | 分类:Playing With Technology
click the caption to watch the video.
-
Cope with Unicode in MFC
日期:2009-01-01 | 分类:Playing With Technology
Due to some special requirements, I have to move some ANSI codes to Unicode. Before I started, I never thought such job could be so annoying. It's a tough job, but anyway, I made it.
Here's the tips:
(1)VS2005 MFC sets Unicode as the default encoding stardard, if you don't need it, don't activate it, it will save you a lot of trouble.
(2)Unicode file start with 0xFF and 0xFE, if you want to read an unicode file, make sure you skip those 2 indicators.
(3)In the latest Unicode version(5.1.0), Simplified Chinese has a value between 19968(0x4E00) and 40869(0x9FA5), you can just compare a character with those value to judge whether it is a Simplified Chinese character. In regular expression, it's ^[\u4E00-\u9FA5]+$.
Advantages of using Unicode:
(1)Unicode 5.1.0 contains over 100,000 characters, far more than ANSI can has. You won't have non-English characters interchange/processing/display problems in your software in other regions.
(2)In Unicode, a character takes only 1 widechar space, no matter what kind of character it is(Chinese/English/symbol...). In ANSI, an non-English character takes 2 char space, but an English character takes 1 char space, it makes processing hybrid text really troublesome.
Some resources:(1)the Unicode charts of the latest Unicode version.
Click here...
(2)David Pritchard wrote an a class(in MFC) derived from CStdioFile which transparently handles the reading and writing of Unicode text files as well as ordinary multibyte text files.
Notice that his function IsFileUnicodeText() is rely on the file's entry, it's not an absolute guarantee.
Click here... -
中文信息处理之一 - 机械分词
日期:2008-10-23 | 分类:Playing With Technology
最近忙,很忙,所有事情都凑到一起了,于是每天早上9点起床,晚上昏天黑地的做到一两点才睡觉.脑袋里面有很多好的idea也没时间去实现.
突然对中文信息处理感兴趣了,因为英文默认每个词都是用空格分开的,这给英文信息处理带来了很大的方便,中文则不是这样,要处理中文信息,首先要把一个字符串按照有意义的词分开.这就涉及到一个分词算法的问题了.最简单的分词方法就是基于词典的正向最大匹配机械分词.
如果现在有一个理想中文字典,最大字长是4(4个中文字符,下同),一条中文信息:温.家宝会见新加坡总理.
首先建立一个循环,设置两个整形变量标志位,begin和end,初始状态下,begin=0,位于字符串头,也就是温字前,end=str.GetLenth(),位于字符串尾(字符串长度小于4的时候)或者end=8,第四字处(字符串长度大于等于4).
设置一个临时字符串temp,拷贝输入字符串从begin到end的一段,也就是"温.家宝会",在字典中搜索temp
显然,这四个字是不会在字典中搜索到的,于是判断搜索函数返回值后,end-=2,向前移动一个字,begin不变.返回循环开始处.
这次执行循环的时候,由于end前移一个字,所以temp="温.家宝",这个词在字典中就可以搜索到了,于是判断搜索函数返回值后,把词分离出来,之后移动标志位,begin=end,begin向后移动到end的位置,end+=8,end向后移动4个字(begin之后的字长大于4时候),或者是end=str.GetLenth(),end位于字符串尾(begin之后字长小于4的时候),重复循环
最后,当begin位置在最后一个字或者最后一个字之后的时候,也就是str.GetLenth()-begin<=2的时候,整个分词结束,也就是整个循环的出口.对于上述例子,因为"总理"是个词,所以完成分离"总理"之后,begin位于字符串末尾.
-
王小云真的破解了MD5和SHA-1吗?
日期:2008-08-05 | 分类:Playing With Technology
最近中文媒体上,MD5和SHA-1被"破解"的消息很盛行,主角是一个伟大的女性,山东大学教授,王小云博士.那么MD5和SHA-1真的就这样被破解了吗?我这几天在家有空,于是研究了一下王小云博士的几篇论文.
首先弄清楚什么是MD5,通俗的讲,MD5就像是人类的指纹一样,是一种消息摘要,可以把任意长度的消息依靠某种算法迭代生成固定长度的摘要.就像人类通过指纹来区分不同的人一样,我们也可以通过消息的MD5值来区分不同的消息.MD5的设计者,让MD5有了这样的一种性质,即对消息的任何小小的修改,都会造成最终MD5值的极大改变(传说中的雪崩效应),这可以在消息传递过程中防止消息被轻易篡改.SHA-1同这类似,下文都是对MD5的分析.
其次,弄清楚什么叫"破解",在密码学中,如果找到一种算法,使其他人能轻易的从密文算出明文,那么这个密码体制才能叫破解.注意"轻易的"三个字,因为有的密码体制,是建立在现实的难题之上的(例如前面我写到过的Diffie-Hellman难计算假设),这样会造成一种结果,就是,这种算法在理论上是存在逆向算法的,但是正向计算很容易,逆向计算就需要耗费非常大的计算资源,这样也不能说是破解.
-
WordPress问题,解决方法与插件总结
日期:2008-07-24 | 分类:Playing With Technology
我上一个blog是自己在国外一个站点(www.gofreeserve.com)上搭建的传说中最好的blog系统--WordPress,花了很长时间调试,最后竟然给封了,经验也不少,贴出来分享分享
问题:
1.困扰了无数人的单引号问题,即无论在什么语言版本的WordPress中'总是显示成'(一个是半角单引号,一个是全角单引号),有这个问题的符号不仅仅是单引号这一个,但是单引号是最常用的,这造成了用英文写blog时,显示十分丑陋,原因据说是因为WordPress为了避免某些字符在MySql中二义性而改用全角显示和储存这种字符.解决方法见下文.
2.注册麻烦的问题.不知道WordPress设计人员是怎么考虑的,默认状态下,WordPress注册只需要访问者填写用户名和一个邮箱,然后发送注册信息(包含一个随机生成的字符串密码)到填写邮箱中,访问者收邮件的时候再用生成的密码登陆后,在系统中更改成自己想要的密码.这样做效率先不说,很多WordPress用户都是把自己的blog假设在免费的web hosting上的,而这样的免费web hosting很多都限制了php函数的使用,为了防止spam,mail()函数就在限制之列,这就造成了WordPress根本就没法发出邮件,用户收不到含有密码的邮件,也就没法登陆.解决方法见下文







