First we try, then we trust

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  183 随笔 :: 111 文章 :: 2953 评论 :: 297 Trackbacks

2005年10月4日 #

     摘要: SharpICTCLAS 1.0 发布了,修正了测试版的几处错误。  阅读全文
posted @ 2007-04-18 15:52 吕震宇 阅读(7845) | 评论 (66)编辑

     摘要: SharpICTCLAS(测试版)发布了!  阅读全文
posted @ 2007-03-15 12:52 吕震宇 阅读(14565) | 评论 (39)编辑

具体内容请访问我的文章:

SharpICTCLAS分词系统简介(7)OptimumSegment

SharpICTCLAS分词系统简介(8)其它

===全文完===

非常高兴在这最后一篇文章写完之时得到了张华平老师的授权。我会尽可能快的将SharpICTCLAS源文件放上来供大家测试使用的。

posted @ 2007-03-14 23:19 吕震宇 阅读(3670) | 评论 (6)编辑

具体内容请访问我的文章

SharpICTCLAS分词系统简介(6)Segment

posted @ 2007-03-13 22:38 吕震宇 阅读(3117) | 评论 (1)编辑

具体内容请访问我的文章

SharpICTCLAS分词系统简介(5)NShortPath-2

posted @ 2007-03-12 22:44 吕震宇 阅读(3541) | 评论 (3)编辑

具体内容请访问我的文章

SharpICTCLAS分词系统简介(4)NShortPath-1

posted @ 2007-03-09 22:51 吕震宇 阅读(3623) | 评论 (1)编辑

具体内容请访问我的文章

SharpICTCLAS分词系统简介(3)DynamicArray

posted @ 2007-03-09 09:02 吕震宇 阅读(3632) | 评论 (0)编辑

具体内容请访问我的文章

SharpICTCLAS分词系统简介(1)读取词典库

SharpICTCLAS分词系统简介(2)初步分词

posted @ 2007-03-08 14:36 吕震宇 阅读(3954) | 评论 (2)编辑

在研究了一段时间中科院计算所张华平、刘群所开发的ICTCLAS分词系统(Free版)代码后,阅读了大量的相关资料,我开始着手将C++的ICTCLAS分词系统移植到.net平台下,并取得了较好的实验结果。这种移植并不容易,在研究了ICTCLAS分词理论的同时还要阅读C++代码实现,其中遇到了很多困惑、迷茫,也不得不重写了一小部分代码,我将在随后的文章中介绍具体实现。

目前除了最后的词性标注部分还没有完全完工外,其它部分已经接近尾声(包括初始切分、N最短路径、人名、地名的识别以及最终优化等)。

部分分词结果以及移植思路请访问我的文章:《实现ICTCLAS到C#平台的移植

posted @ 2007-03-07 22:45 吕震宇 阅读(3901) | 评论 (9)编辑

上篇文章《天书般的ICTCLAS分词系统代码(一)》 说了说ICTCLAS分词系统有些代码让人无所适从,需要好一番努力才能弄明白究竟是怎么回事。尽管有很多人支持应当写简单、清晰的代码,但也有人持不同意见。主要集中在(1)如果效率高,代码复杂点也行; (2)只要注释写得好就行;(3)软件关键在思路(这我同意),就好像买了一台电脑,不管包装箱内的电脑本身怎么,一群人偏在死扣那个外面透明胶带帖歪了(这我坚决不同意,因为只有好思路出不来好电脑,好电脑还要性能稳定,即插即用的好硬件;另外天书般的代码不仅仅是透明胶带 贴歪的问题,他甚至可能意味着电脑中的绝缘胶带失效了...)。

这两天在抓紧学习ICTCLAS分词系统的思路的同时,也在消化学习它的代码实现,然而我看到的代码已经不仅仅是为了效率牺牲代码清晰度的问题了,我看到的是连作者都不知道自己真正想要做什么了......

更多内容请参考我的文章《天书般的ICTCLAS分词系统代码(二)

posted @ 2007-02-26 13:34 吕震宇 阅读(3006) | 评论 (4)编辑

ICTCLAS分词系统是由中科院计算所的张华平、刘群所开发的一套获得广泛好评的分词系统,该版的Free版开放了源代码,为初学者提供了宝贵的学习材料。

然而在我阅读代码的过程中,越来越对ICTCLAS天书般的代码感到厌烦。我不得不佩服中科院计算所的人思维缜密,头脑清晰,能写出滴水不漏而又让那些“头脑简单”的人百思不得其解的代码。将一件本来很简单的事情做得无比复杂...

更多内容请参考我的文章《天书般的ICTCLAS分词系统代码(一)

posted @ 2007-02-21 00:29 吕震宇 阅读(3771) | 评论 (9)编辑

     摘要: 为了今后随笔中所带的代码更具特色一些,特给代码格式来个“Copy Code”功能,允许直接将代码内容拷贝到剪贴板上。大家可以试一试。目前至少支持IE和FireFox两种浏览器的访问。  阅读全文
posted @ 2007-02-08 10:09 吕震宇 阅读(4691) | 评论 (14)编辑

最近阅读了黄忠成的Object Builder系列文章感到受益匪浅,所以将该系列文章整理了一番(将繁体转换为简体,另外对于一些习惯用法进行了调整,对文章及代码格式重新进行了调整,修订了文中几处小错误),现放上来供大家参考。

[转][黄忠成]Object Builder Application Block (1)
[转][黄忠成]Object Builder Application Block (2)
[转][黄忠成]Object Builder Application Block (3)
[转][黄忠成]Object Builder Application Block (4)

~~~~~~~~~~~~~~~~~~~~~~~~~~~

另外受这一系列文章的启迪,目前正在构思几篇新文章,初步题目定为《创建对象的方法及其应用》。目前文章用到的代码调试已经完成了大半,如果有时间我会开始着手文章写作工作。基本内容分以下几部分:

  • 1、CreateOjbWithNew

使用new命令完成对象的创建。(既然是一个系列,缺少此部分就不完整了)

  • 2、CentralizeObjCreation2Factory

针对接口编程(使主程序依赖于公共接口与工厂)

集中对象的创建(出现问题好找)

问题(仍然摆脱不了工厂对其它对象的依赖,仅仅实现了创建对象的集中管理而已)

  • 3、IndependentFactoryModel

使用Assemby以及CreateInstance方法创建对象,实现了工厂与产品间解耦。

  • 4、AddinSample

案例分析,使用上面模型实现一个插件结构的应用程序。该程序运行机制仿照SharpDevelop(当然是大大简化了)的AddinTree结构,只要在Addins目录下存放的文件会被自动的Pickup并容入主界面。

  • 5、BeforeDependencyInjection

为了后面的案例做准备工作。在没有Dependency Injection框架时,自己手工创建对象。

  • 6、DependencyInjectionWithConfig

自己实现的一个“依赖注入”框架(非常简单,纯粹演示目的),使用配置文件指导对象创建工作。

  • 7、DependencyInjection与Ioc

通过上面两个例子我们了解了什么是依赖注入,可为什么依赖注入为什么最开始叫做控制反转呢?本段内容揭示其中的联系以及“容器”这个概念的特殊含义。

  • 8、ObjectBuilder

可以将ObjectBuilder理解成一个智能加工工场,根据用户的不同订单策略在流水线上加工各种对象。该部分内容对ObjectBuilder做一个宏观的介绍。先将文中一张图放上来:

  • 9、TranslatorSampleUsingOB

对OB的一个实际应用案例。模拟TechEd英文会场,参会人员可根据需要选择不同的翻译服务,充分享受"容器"以及"依赖注入"的强大功能,系统借助ObjectBuilder实现。

 

posted @ 2007-02-06 11:25 吕震宇 阅读(4635) | 评论 (18)编辑

大家好!好久没有在园子里面写点什么了,感觉好像欠了一屁股的债似的。放假了,整理了点东西先放上来,希望对大家有用!

~~~~~~~~~~~~~~~~~~~~

文章内容为本人在《数据库原理》课程中的一个课堂案例,幻灯片提供的动画演示有助于理解并发控制的本质,文章内容为幻灯片的摘要及部分代码。

1、下载本文所对应的幻灯片; 2、下载本文对应的VS2005代码

如果你对自己并发控制的能力很有自信的话,读完“一、问题提出”后直接可以跳转到“四、看来问题真不简单”处阅读。

本文最后给出了部分测试用代码的简单讲解。

阅读全文请访问我的文章:《数据库并发一致性案例分析

posted @ 2007-01-29 15:43 吕震宇 阅读(3557) | 评论 (25)编辑

文中所有内容均代表本人对问题的理解,可能与实际有所差别!文中C语言代码的调试环境为MyTc 5.4.1,C#代码调试环境为VS.NET 2003。

为什么VB.net的Shared(共享)方法在C#中叫Static(静态)? 这个问题看起来很愚蠢,但是透彻的了解它确需要掌握面向对象程序设计语言中深层次、本质上的内容。本文将通过以下几个层面的分析深入剖析隐藏在Shared与Static背后的究竟是什么。

    一、C#中的Static方法为什么在VB.net中叫Shared方法

    二、VB.net中的Shared方法为什么在C#中叫Static方法

    三、实例方法及其实现

    四、为什么实例方法不能叫动态方法?

另外本题目仅仅是个引子,本文除了讨论静态外,同时还要更多的讨论"动态"方法(Object Method或Instance Method),并试图揭示面向对象的本质。

感兴趣可以访问我的文章《为什么VB.net的Shared(共享)方法在C#中叫Static(静态)?》。

posted @ 2006-04-26 00:42 吕震宇 阅读(3752) | 评论 (3)编辑

前几天一个学生问了一个关于接口的问题,程序代码如下:

using System ;
interface IControl 
{
   void Paint();
}
public class EditBox: IControl 
{
   void IControl.Paint() 
   {
      Console.WriteLine("IControl.Pain method is called!");
   }
}
class Test 
{
   static void Main() 
   {
      EditBox editbox = new EditBox(); 
      editbox.Paint();
   }
}

程序在编译时报错,错误信息如下:

“EditBox”并不包含对“Paint”的定义

EditBox明明实现了IControl接口,而又为什么说Paint方法没有定义呢?由于问题比较复杂,所以特写了篇文章介绍C#中的接口。感兴趣可以访问我的文章《C#中的接口

posted @ 2006-04-17 23:58 吕震宇 阅读(3748) | 评论 (12)编辑

第2章 并发操作的一致性问题 (2)》已经全部完成,又添加了RepeatableRead以及Serializable两种隔离模式的分析以及后台锁定机制研究,感兴趣可以阅读一下。

posted @ 2006-02-16 22:01 吕震宇 阅读(3115) | 评论 (1)编辑

数据库应用基础系列》好长时间没有更新了,上次说到并发操作的一致性问题只说到50%,这后50%一隔就是半年。假期终于抽出点时间,看看上次写的代码,居然是2005年8月的事了。这次将并发一致问题的后半部分争取尽快补全。

这次放上来的是并发操作中并发一致的问题表现、封锁协议、事务隔离以及使用SQL Server 2000 + ADO.NET演示的ReadUnCommitted与ReadCommitted的区别。文中深入讨论了后台的锁机制。目前此部分工作已经完成。有关RepeatableRead以及幻影读的解决办法随后也会添加进去。对此感兴趣的可以访问我的文章《第2章 并发操作的一致性问题 (2)

posted @ 2006-02-14 15:52 吕震宇 阅读(3564) | 评论 (0)编辑

笔迹鉴别的最后一部分内容,放到了我的文章区,请访问《笔迹鉴别(5) —— 笔迹判别》。

posted @ 2006-02-07 10:58 吕震宇 阅读(3129) | 评论 (0)编辑

放到了我的文章区,请访问《笔迹鉴别(4) —— Gabor变换(2)》。

posted @ 2006-02-06 11:02 吕震宇 阅读(2697) | 评论 (0)编辑

放到了我的文章区,请访问《笔迹鉴别(3) —— Gabor变换(1)》。

posted @ 2006-02-05 20:38 吕震宇 阅读(2743) | 评论 (1)编辑

放到了我的文章区,请访问《笔迹鉴别(2) —— 纹理制作》。

posted @ 2006-02-05 11:33 吕震宇 阅读(2598) | 评论 (0)编辑

几年思索、徘徊、彷徨后,还是准备放弃已经学了很多、下了很多功夫的程序开发方向,潜下心准备读完拖了好几年的计算机应用专业的同等学力研究生。

二零零五年对于我是不寻常的一年,这一年发生了很多事,从无所事事的年初(给爷爷八十大寿制作了一张Flash盘和一张DVD盘,边学边做,效果还算不错,但不能算是正事),到被逼无奈考研(同等学力那种,从2002年开始上课,可自己一直觉得研究生没什么,一直到2005年,全国统考仅仅通过了英语,专业课一点没看。迫于外界强大压力,从三月中旬到五月底,自己从头自学了《离散数学》《组合数学》《计算机系统结构》等几门课程,没想到居然以60分成绩通过了综合考试,可以参加毕业设计和毕业答辩了,实属万幸),然后紧接着就是喜得贵子(儿子6月份出生,给我添了不少乐趣,也增加了不少负担,几个月下来基本上都是围着他转了),10月份从导师那里拿到毕业设计题目“笔迹鉴别”对于我又是一个不小的打击(从前认为研究生不过尔尔的看法不攻自破,自己才发现业已学习了很久的程序开发技术在这个毕业设计面前显得如此无力,面对导师推荐的一大堆参考书中复杂的数学公式懊悔不已,后悔自己没有早上正途。亡羊补牢,为时不晚,下定决心即使是同等学力研究生——让人看不起的那种,也要做出个样子来)。2005年的倒数第二天,八十五岁的奶奶平静的离我们而去,我从小跟奶奶的感情非常深,她走了对我是一个沉重的打击,我真的非常想念奶奶。

我尽可能在有限时间内将我的毕业论文做好,虽然没有什么创新的地方,但毕竟做下来了,而且实验结果很成功。以往做数字图像处理和模式识别的人多用C++来开发,而此次我全部使用的是C#语言,这也从一个侧面展示了C#强大的功能。为此,我在文章分类中特意增加了一个分类“笔迹鉴别”,随后将此次设计中用到的关键技术、关键代码放上来,以供大家参考。

做设计的这几个月一直没有在博客园发表什么文章,尽管在这里发表.net开发的笔迹鉴别程序似乎有些不入主流,还是恳请各位批评指正。我会在随后一段时间内在我文章“笔迹鉴别”分类中将关键的东西放上来。

笔迹鉴别(1) —— 实现步骤概述

笔迹鉴别(2) —— 纹理制作

笔迹鉴别(3) —— Gabor变换(1)

笔迹鉴别(4) —— Gabor变换(2)

笔迹鉴别(5) —— 笔迹判别

=== 全文完 ===

posted @ 2006-02-03 16:08 吕震宇 阅读(2607) | 评论 (9)编辑

这学期教ASP.NET,期末考试试题中有这样一道题:

使用RangeValidator控件验证TextBox控件输入的数据是在0到150之间的整数,需要设置该控件的MaximumValue属性值为【    】, MinimumValue属性值为【    】......

有些学生如此回答:

MaximumValue:【0】 ;MinimumValue:【150】。

如果说这些学生不知道什么是Max,什么是Min的话,还有一部分学生如此回答:

MaximumValue:【2004-10-1】 ;MinimumValue:【2004-10-7】。

天啊!我真的不是一个好老师。

posted @ 2006-02-03 15:04 吕震宇 阅读(2793) | 评论 (23)编辑

这是一张拍自我家小区门口的照片,由于有一辆汽车阻挡,没能将所有文字都拍下来,其实完整的内容是"北大青鸟软件工程师培训,高薪、尊贵、一生无忧的选择"。这张横幅已经在这里挂了近一年的时间了。我无意评论北大青鸟软件工程师的培训究竟如何,只想就"高薪、尊贵、一生无忧的选择"谈谈想法。

我是一名计算机教师,我的任务就是教授程序设计语言、数据库技术,培养学生对计算机知识的兴趣,然而昨天与一个学生的对话却让我再也抑制不住埋在内心里的情绪,去揭露隐藏在计算机华丽外衣之下的漂亮的真实的谎言。

这两年,计算机培训可以说是比比皆是。程序员培训、软件工程师培训、软件认证的广告充斥了大街小巷;很多国际大公司纷纷与高校联合,力争将培训认证课程融入计算机教学体系;更有很多培训机构甚至打出"就业"牌,包找工作、包就业。我们暂且不谈包就业,就说说他们用到的宣传词"高薪"、"尊贵"、"白领"等等就足以让很多计算机软件开发的门外汉们怦然心动。我曾经见到很多培训机构定制的两年、三年计划,任何人看了后都会相信"高薪"与自己只有咫尺之遥。就连给我家擦油烟机的人,当得知我是教计算机的后也表示几年后自己体力跟不上的时候就去转行做程序员。

我不排除有很多人通过这种途径找到了理想的工作,但我怀疑这些人中很多人最初就有很好的功底。我在高校教书多年,大学本科4年的时间都不足以将每个学生都打造成"尊贵"的程序员,何况集中授课的短短时间呢?我的怀疑来自以下方面:

1、究竟有百分之多少的人能够在任何形式计算机培训后"一生无忧"?又有百分之多少的人能够"高薪"呢?从我对高校大学生计算机学习的经验上估计,这个数字恐怕要在5%甚至更少。

2、计算机发展太快了,即使任何一个培训中心实现三年打造高薪白领程序员,恐怕三年后的计算机早就不是三年前的模样了。

3、经过短、平、快出来的程序员真的能够承担程序开发重任吗?还是一座空中楼阁?没有扎实的基础知识,单单靠写代码混口饭吃的日子不会长久的。

昨天,一个学生对我说"咱们信息管理与信息系统专业的学生什么都不行,我又不想考研,看来唯一的出路就是去做程序员了"。这让我很是气愤。至少我认为管理信息的学生深入学习"用友"、"金碟"ERP,然后到企业中去实施、维护也比单纯走编程这条路要好。作为一名程序开发人员,所要学习的何止是那些培训中定制的内容,要远比这个多得多。成为一名优秀的开发人员不比考研容易多少。

这让我联想到一件事情:我从小成长在一个小县城里,当初中毕业时,很多我和很多同学一样面临考中专还是考高中。在我们县里,只有最优秀的学生才能够考上中专,并且当时在人们眼里,上中专的学生是最优秀的学生,早毕业、早上班、早挣钱,尤其是可以到父母单位里工作,有人罩着,真可谓"一生无忧"了。当时我已经拿到了中专的录取通知,后来没去,在人家都开课了好几天后,我上了高中。现在看来,我虽然晚拿了四年的工资,但并不后悔。其中缘由不言而喻。

培训广告中过分的浮夸造成了有关程序员生活的真实谎言,在这里我奉劝很多朋友不要过分沉迷于谎言造就的云端,飘飘然起来。一定要脚踏实地,从根基做起,不断努力提升自己的认知层次,软件是一种工具,程序员做的工作是创造工具,在我们为创造工具而感到骄傲和自豪的同时千万不要忘了工具是用来干什么的。不要被眼前一些华而不实的宣传所吸引,环顾四周,也许你能找到更好的选择。

写这篇文章的目的:

(1)比尔盖茨辍学成就了微软帝国,但今非昔比。我实在不忍心看到很多“精英”过度沉迷于计算机,以至丢弃了学业。有很多大学生计算机很有灵性,甚至早把ASP.NET 2.0学的烂熟(我做不到),可英语四级还没有通过,其它课程一塌糊涂,我感到很惋惜。

(2)有些学生在“没有出路”的情况下投奔了程序开发,我更不赞同。不管有人爱听不爱听,我认为学好程序开发有很大一部分取决于天赋(我说的“天赋”是指对计算机无比的兴趣和百折不挠的精神),单纯相信一些广告宣传是徒劳无功的。

(3)一个有“天赋”的人在学好基础后再深入学习程序开发仍然能赶得上。一个没有“天赋”的人就算舍弃一切学习程序开发也可能失败得很惨。因此,就象道器所说“培养起勤恳、踏实、好学、有恒的品质才是保证他们的人生能够步步向上的根本”,我非常赞同。

posted @ 2005-11-05 20:46 吕震宇 阅读(6976) | 评论 (88)编辑

TechEd2005上得到一张SQL Server 2005 Beta3光盘,并且里面有一个虚拟机和教程可以供使用者学习,只有30天期限,现在正在抓紧学习。今天要说的是一个SQL Server 2005编辑器Bug,如下:

首先启动SQL Server Management Studio,选择File | New | Database Engine Query(或是从Project中创建一个Query),向里面输入一多行SQL命令并存盘,入下图:

从图中可以看到左侧出现绿色线,表示已更改并存盘。现在将最后一行若干个字符用鼠标选中,然后按Del键删除,左侧变成黄色线,表示该行已经发生编辑,如图:

然后让我们按下键盘的“Ctrl+Z”,撤销刚才的修改,被删除的字符再次出现,但左侧标志线却出现了异常,第1、2行左侧的绿线没有了!

我在Visual Studio .net 2005 Beta2中用C#程序做同样的编辑操作(注意:一定要一条命令多行书写!),左侧标志线也会出现类似问题。我想应当是编辑器的问题。

posted @ 2005-10-04 11:22 吕震宇 阅读(2126) | 评论 (4)编辑