- 博客(84)
- 收藏
- 关注
基于总线模式的消息服务
前言一直以来,都对异步事件很感兴趣,比如一个应用在运行一个耗时的过程时,最好的方式是提交这个耗时的过程给一个专门的工作线程,然后立即返回到主线程上,进行其他的任务,而工作线程完成耗时任务后,异步的通知主线程,这个过程本身是很有意思的。传统的事件-监听器模型可以较好的解决这个问题,不过事件和监听器两者的耦合往往略显紧密,所以需要另一种实现,使得这两者的耦合尽量小,那样模块可以比较通用。 ...
2009-07-14 23:05:41
284
使用smack与GTalk通信
前言前两天无意中发现了smack(火星了,如果你比我还火星,请参看此处:http://www.igniterealtime.org/downloads/index.jsp),在网上也看到了几个例子,于是想用Swing将其包装一下,做一个简单的gtalk客户端,一来时间有限,而来自己对Swing的熟悉程度不够,代码就不贴出来现眼了,大概说下smack的API,先看下图:主界面,显示c...
2009-07-05 23:38:57
249
C语言中的多级指针
前言C语言中指针,可以算是最灵活,最强大的地方,同时也是最艰深的地方。用不好的话,什么段错误,内存违例等以前没见过的东西都会跳出来。最近看《UNIX系统编程》,感觉能把C语言用到这个水平,才能算是登堂入室。一般来说,我们会把指针跟数组联系起来理解,比如*p就是一个一维数组,**p是两维数组等,而一般而言,见到两维的指针也算是难得了,更高维的只怕看一会就会晕掉。《UNIX系统编程》中有个关于...
2009-06-27 22:13:17
218
原创 vim命令简表
前言Vim是一个超级牛的编辑器,可以说是专为程序员设计的编辑器,强大的有些不可思议。不过其学习曲线稍显陡峭,前两天在网上找到一个小图表,比较全,如果对表中所列的命令学习熟悉以后,处理日常的文本就已经足够,所以贴出来,大家参考参考。Vim的牛B之处不在于其功能之繁多,更不在于其学习曲线之陡峭,而在于这些命令大都可以进行组合,比如,9yy命令表示复制9行内容,9表示要复制的行数,同样100dd...
2009-06-27 14:34:08
397
事件和监听器
前言事件监听器是经常可以遇到的一种设计模式,一般用在这样一种场景下:当模块的一部分A在完成后需要通知其他的软件模块B,而等待通知的模块B在事先不需要采用轮询的方式来查看另一个模块A是否通知自己。即,当某事件发生,则监听器立刻就知道了该事件。这种模式大量的应用在GUI设计中,比如按钮的点击,状态栏上状态的改变等等。接口的设计我们需要一个对事件(event)的抽象,同样需要一个对监听器(l...
2009-06-21 22:06:00
242
有限自动机与建模
前言在学校学程序设计语言的时候,能接触到的所有例子没有一个跟现实世界是有关系的。大多是关注于语言的细节层次,根本没有模型的概念,而我认为,要真正的让别人理解模型是如何建立的,最好的方法是从一个实实在在的东西开始,逐步的建立一个与物理世界可以有对应关系的模型出来。那样,在以后的实践中,可以很轻易的对未知的对象进行数学建模。OO最大的特点并非继承,多态等概念,而是与物理世界建立对应的关系!选择...
2009-06-06 10:48:00
401
python网络编程随笔
前言python实在是太方便,太易用了,三方库的支持又全,语法又简单,对开发人员来说,实在是居家旅行,XXXX的必备利器。周末研究了下python的网络支持,做一下记录,以备随后翻阅。 python支持BSD的socket进行网络编程,其API跟C中的大同小异,先看看TCP方式的,说到网络编程,肯定会设计到server和client,分别来看下TCP方式server端ser...
2009-06-03 23:19:31
233
C和指针(续)
前言上一篇《C和指针》可能对关于C和指针的有些内容没有说透,下来写了一个链表的实现,当然,也是用C的函数指针来模拟OO的结构来做的。链表结构本身比较复杂(关于指针的使用方面),所以这个例子可能更清晰一些。之所以选List这个例子来说,是因为大家在学校里肯定接触过这个简单数据结构,从一个比较熟悉的例子入手可能比较容易理解一些。接口定义可以先看看接口的定义,与Java或者C#类似:...
2009-05-25 23:41:00
137
C和指针
前言指针是C的灵魂,正是指针使得C存在了这么多年,而且将长期存在下去。事实上,我自己不用C语言写程序已经有一年了,工作中接触到的只有java,python和javascript。最近用C完成了一下类似于OO中的封装(即"类")的概念,顺便把指针复习了下,感觉有必要记一下。本文中的例子有这样两个概念:任务(Task),执行器(Executor)。任务有名称(taskName),并且可以执行(...
2009-05-21 23:15:00
188
函数式编程(javascirpt)
前言Javascript,有人称其为C+LISP,C只怕是尽人皆知,但是一直活跃在人工智能领域的另一个古老而优美的语言LISP,掌握的恐怕不是很多.这个倒不是因为这个语言太难或者用途不广泛,而是大多数人在接受计算机语言启蒙的时候都走的是图灵机模式,而LISP,做为一种函数式编程语言,是另一个体系:lambda演算体系.这个体系的运算能力跟图灵机的运算能力是相当的。所以Javascript...
2009-04-18 22:18:00
149
C实现的Hash表
Hash表这种数据结构在java中是原生的一个集合对象,在实际中用途极广,主要有这么几个特点:访问速度快大小不受限制按键进行索引,没有重复对象用字符串(id:string)检索对象(object)今天整理以前在学校写的一些算法,翻出来一个hash表的实现,就贴出来,自己也温习温习。先看看头文件,也就是数据结构的定义,相当于java中的接口的概念:<!--<br />...
2009-04-18 17:28:00
199
脚本引擎的设计与实现(javacc) [一]
打算写一个系列,比较系统的介绍一下一个脚本引擎的设计和实现过程,本来打算使用lex/yacc来举例子,但是由于最近对java语言有了新的认识,故决定使用javacc这个工具来做,这个系列中就是以javacc中的一个比较复杂的例子来进行解说的。这篇文章是本系列的第一篇,主要说几个概念的定义,有了这些定义,后边就容易理解了。对一个语言的源文件进行解析,主要是做这样几件事:词法分析语法分析...
2009-04-18 14:42:00
266
jjTree解析
这篇文章可以算是这篇小型桌面计算器的实现(javacc)的续。 可以这么说,使用javacc作分析器生成器,如果没有用到jjTree,那么就是对语义分析的过程理解不够深入。如果用到了jjTree而且用好了,那么对编译原理,BNF等的理解才算是比较到位了。jjTree中最重要的概念是Node接口,所有的非终结符都可以规约为一个节点。这个节点一般来讲是实现了Node接口的节点类其中主要...
2009-04-07 22:33:44
487
Java反射机制的一个实例
JSP的规范中,有个表达式语言(Expression Language, 简称EL),可以算是一个微型的语言,其中对request, page, session, application中预存的JavaBean对象的引用方式很是简单。最近正好需要写一个支持简单EL的taglib,所以就研究了下Java中的反射机制,目前基本上实现了多级bean的属性的访问,经测试,还是可以用的。 如: pub...
2009-04-03 17:20:18
128
小型桌面计算器的实现(javacc)
从开始学计算理论,就对形式语言,编译原理很感兴趣,所以大学对这门课学的也算是最好了。自己也实现过一些简单的词法分析器之类的东西,不过也都是学习目的的,质量一般后来一直在Linux学习,对lex/yacc研究过一点时间,设计过一个小的脚本引擎,可以做一些比较复杂的数学运算,这个可以参考我的这篇博客<hoc>。工作以后,平台变成了java,跟C渐渐的离得远了,也喜欢上java这个提供语...
2009-04-01 23:23:34
289
原创 编辑器sed笔记
sed是一个非常非常强大的命令行编辑器,说是编辑器,还不如说是编辑程序,因为它是面向流的(没有GUI),看起来比较土,但是功能却一点也不含糊,在*nix下的shell中工作,如果有这个东东帮忙,可以少做不少事(尤其是程序员所讨厌的那种重复动作) 首先,sed是一个面向行的流编辑器,所以使用方法一般是通过shell中的管道,基本起一个过滤的作用(不是简单的过滤),sed对原始文件不会修改,因此可...
2009-03-13 14:29:27
159
Python图形图像处理库的介绍之ImageFilter模块(滤镜)
ImageFilter模块 ImageFilter是PIL的滤镜模块,当前版本支持9中加强滤镜,通过这些预定义的滤镜,可以方便的对图片进行一些过滤操作,从而去掉图片中的噪音(部分的消除),这样可以降低将来处理的复杂度(如模式识别等)。 滤镜名称含义ImageFilter.BLUR模糊滤镜ImageFilter.CONTOUR轮廓ImageFilter.EDGE...
2009-03-10 12:01:16
959
Fedora Core 10 声卡问题的解决
前几天工作平台转到Fedora Core 10,硬件支持很好,唯独声卡有些小问题,整了好一阵,终于解决了。现在把note贴出来,方便以后查看,也可以方便其他有同样问题的人。(linux下声卡貌似从来就没有完美的支持,呵呵) 声卡问题描述:有声音,但是播放mp3时会卡,看电影也有同样的问题,有可能影音不同步。 解决方法:1.查看声卡信息 写道$lspci | grep Audio #...
2009-03-07 17:58:00
200
Python图形图像处理库的介绍之ImageEnhance模块(图像增强)
ImageEnhance模块import ImageEnhanceenhancer = ImageEnhance.Sharpness(image)for i in range(8): factor = i / 4.0 enhancer.enhance(factor).show() 所有的图片增强类都实现了一个通用接口,这个接口只包含一个方法:enhance(fac...
2009-03-04 13:28:30
3505
3
Python图形图像处理库的介绍之ImageChops模块
ImageChops 模块这个模块主要包括对图片的算术运算,叫做通道运算(channel operations)。这个模块可以用于多种途径,包括一些特效制作,图片整合,算数绘图等等方面。但是到目前为止,通道运算只支持8位图片("L"和"RGB"模式,可参看前文)。 这次的图片主要来源于网络上的一些关于黑客帝国的壁纸:Matrix Revolution,同样,如有侵权行为情快速联系...
2009-03-03 23:07:51
652
浅谈*nix类系统的设计哲学与OO
最早接触的计算机系统,是一家企业的FreeBSD的数据服务器。由于我家老大在其中工作,所以分配给我一个帐号,我就天天在其中尝试一些命令,who了,vi了,cc了什么的,当时,系统只是一个黑屏绿字的终端,比较无聊。后来上了大学,在自己的机器上装了Fedora Core Linux,用来学习数据结构,编译原理,操作系统原理等等,十分有意思。现在想来,*nix系统中的很多思想仍然是非常有用的。 大二...
2009-03-01 16:48:33
607
工作环境移植至linux
上学的时候,大概是大二时,将自己那个很古老的ThinkPad T23 装成了linux,很舒服的用了一年多,深深的喜欢上了这种纯面向开发的操作系统环境。最近,一直再考虑工作环境的移植问题。由于公司是开发基于web的java产品,所以基本时平台无关了,趁周末的机会,将机器装成了Fedora Core 10。新版本就是好啊! 安装完成后,基本上所有的硬件都正常的设别出来了,连刚出来没多久的一个摄像头也...
2009-02-28 23:31:25
152
OpenCV库的简介
OpenCV全程open source computer vision library.是Intel开发的一个计算机视觉库,包含了多种计算机图形图像处理的库,目前版本为V1.0,可以在商业和研究领域免费实用。主要用于处理图像处理计算机视觉模式识别物体识别(人脸识别,Object识别)运动跟踪等等方面,源库由C和一少部分C++写成。包含了很多算法的实现,而且而且,她有python版...
2009-01-21 16:25:55
889
Python图形图像处理库的介绍之Image模块
Image模块的介绍创建一个新的图片Image.new(mode, size)Image.new(mode, size, color) 层叠图片层叠两个图片,img2和img2,alpha是一个介于[0,1]的浮点数,如果为0,效果为img1,如果为1.0,效果为img2。当然img1和img2的尺寸和模式必须相同。这个函数可以做出很漂亮的效果来,而图形的算术加减后边会说到。Image....
2009-01-12 16:13:16
1224
python图形处理库PIL(Python Image Library)的介绍
关于PIL库的一些概念pil能处理的图片类型pil可以处理光栅图片(像素数据组成的的块)。通道一个图片可以包含一到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进行叠加模式1 1位像素,黑和白,存成8位的像素L 8位像素,黑白P 8位像素,使用调色板映射到任何其他模式RGB 3×8位像素,真彩RGBA 4×8位像素,真彩+透明通道...
2009-01-11 22:36:38
1335
Python图形图像处理(使用PIL)
Python是一个神奇的语言,上手极快,而且可以找到很多写的非常优秀的模块。这几天在给单位做CSS Sprites时,需要将一些图片先进行缩略,然后拼成一张大图,这样虽然数据量的传输没有降低,但是可以减少链接请求数,从而提高WEB服务的速度。一时没有找到顺手的图形处理工具,(photoshop, GIMP太专业,而且体积太大,如果为了处理几百张图片就要装,未免浪费)于是自己用python写了一个...
2009-01-05 23:18:08
194
高阶函数学习(JavaScript)
大家不要被这个名字诱惑,我讲的是javascript的高阶函数的概念,而不是说本教程为高阶教程。最近研究SICP,对其中的高阶函数抽象有了一些体会,并用javascript中进行了一些实验,现在把这些实验分析一下,希望对大家有所帮助。高阶函数思想由来已久,最早可能要追溯到可计算理论的初期,在lambda演算理论中就有了这个思想了。最早的实现可能算是lisp语言。可以说,这个运算模型跟图灵机...
2008-12-31 14:46:04
367
原创 一个动态的Tip的实现
在web开发中,有时需要实时的向用户提示一些有用的信息,比如数据库插入/删除成功,网络情况等。而由于面板上的空间有限,我们需要设置一种可以动态显示的提示信息,这种信息在页面上动态生成,过一段时间(如5秒)后自动消失,这样既可以通知到用户,又可以节省页面上的空间。事实上,一些桌面应用早就使用了这个技术,比如gmail的提示,卡巴斯基的提示等都采取这种方式。周末研究了一下这块,自己用javascri...
2008-12-29 12:02:22
404
脚本解释器(HOC)的实现与分析
HOC(High Order Calculator)是一个解释型的程序语言,最初的版本由Brain Kernighan和Rob Pike在《The UNIX Programming Environment》[UNIX编程环境]一书中作为一个例子给出。本身由lex/yacc构造,结构十分清晰,作为一个教学语言,HOC支持函数,具有类C的语法,有简单的I/O,变量赋值,表达式计算,错误恢复等机制...
2008-12-23 16:06:46
820
原创 可编辑表格(table)的一个实现
写了好几篇关于表格的操作的JS脚本设计了,倒不是说我个人有表格情结,实在是日常工作中表格用的地方太多,但是又由于表格本身不太好操作,所以用JS脚本化一下,还是比较有必要的。把前一段时间做的一个表格编辑的脚本整理了一下,拿出来跟大家共享一下,按照惯例,先看效果图,然后贴代码,然后分析代码。 单击表格中的一个cell进入编辑状态,在这个实现中,选中的cell会被一个红框括起来,在编辑完成后,...
2008-12-22 16:18:51
1438
1
原创 一个实用的JS对表格的特效
正如上一篇文章所说,table是日常编辑中比较常用的一种结构。而单调的表格效果已经无法满足日益强烈的视觉需求。周末对表格的各行变色,鼠标跟踪进行了一些学习和研究,并学习了html的自定义标签,实现了按行进行mark的一个简单功能。现在把效果和代码贴出来分享,希望给需要的人以帮助。先看看效果:图中第3条记录所在的行的背景色与别的行不一样,标志着鼠标目前在此行悬停。当鼠标移开之后,改行会恢...
2008-12-22 14:32:04
303
原创 Forward和Viterbi的一个Python实现
前一向研究HMM(隐马尔可夫模型),在wiki上看到了一个python实现的forward&viterbi算法,就先放在这里,过几天研究。HMM是人们在研究人工智能(语音设别,模式识别)方面的一个重要理论,差不多相当于“知道一些线索的情况下,跟据结论推出结果”的算法,很简单,很强大! 好了,先看看这个代码,慢慢分析之def forward_viterbi(obs, states, s...
2008-12-12 14:27:51
281
原创 JavaScript高级验证器
首先说一下,这个例子不是我原创的,例子本身来自《JavaScript权威指南》(4th Edition),之所以放在这里,实在是因为这个js脚本太牛B了,如果有正则表达式的基础,你可以很轻松的实现各种各样的js验证器,这个js脚本只是提供一个通用的验证框架,具体的验证规则,以及不能通过验证的时候所产生的动作完全可以定制。好了,言归正传。 首先,给需要验证的表单(Form)中的需要加入验证器的i...
2008-12-09 14:52:15
147
原创 对Table进行排序 (可指定排序方式)
在日常的WEB开发中,对表格的排序经常会用到,于是在网上找了些资料,然后自己下来研究了下,做了一些整理,现在将他贴出来,一来备忘,二来可以帮助其他需要的人。 需要注意的地方:关于table中按行按列排序的方法:1. 取出每一行作为排序的单元,结果即为完整的正确的排序。2. 每一行中有一个关键字用于排序的标准 2.1 每一个关键字都有类型的区别,如string, int, date,...
2008-12-09 14:29:08
2130
原创 RMI的简单例子
Java的远程方法调用(Remote Method Invocation)是为了分布式计算而提出来的,最近做一个项目需要用到,所以学习了一番,现在将一个简单的demo贴出来,以便想要学习RMI的同志可以快速上手。 RMI的调用是基于接口的,这个接口的定语需要客户知道,客户程序运行时需要一个实现该接口的类的存根(stub)。RMI的内部使用了TCP/IP连接方式,因此需要一个安全机制,且需要...
2008-12-02 16:37:42
207
原创 一个脚本解释器的实现与分析(HOC改进版)
HOC(High Order Calculator)是一个解释型的程序语言,最初的版本由Brain Kernighan和Rob Pike在《The UNIX Programming Environment》[UNIX编程环境]一书中作为一个例子给出。本身由lex/yacc构造,结构十分清晰,作为一个教学语言,HOC支持函数,具有类C的语法,有简单的I/O,变量赋值,表达式计算,错误恢复等机制...
2008-11-22 23:31:18
274
原创 我的Vim配置文件
大学里,有一年多是在Fedora core 4下度过的,现在依然怀念Linux下方便的开发方式,一些用惯了的工具在windows下还真找不到替代品。还好,有很多好心人做了很多移植工作,比如unixutils包里面包含了大量的*nix环境下的工具的win32版,都特别好用。 在平时的工作,学习中,个人比较习惯用vim做编辑器,装上vim71 for windows 后,在网上找了些配置和脚本,完...
2008-11-21 17:51:37
193
原创 遗传算法(原理及简单应用)
在维基(wiki)中关于自然选择的词条的搜索结果如下: 写道自然选择(Natural selection)也称为天择。指生物的遗传特征在生存竞争中,由于具有某种优势或某种劣势, 因而在生存能力上产生差异,并进而导致繁殖能力的差异,使得这些特征被保存或是淘汰。 基因是遗传特征的基础,也是自然选择的单位,自然选择则是演化的主要机制。经过自然选择而能够称成功生存, 称为“适应”;当一个物种中的不同族...
2008-11-13 16:40:53
1118
原创 一个同步打印机的简单实现
内部机制打印机内部设有缓冲区,当有新任务来到的时候,打印机只是简单的从任务中取出需要打印的消息,然后将其存入自身的缓冲区,然后返回,具体的打印任务交给一个线程来处理,打印线程从缓冲区中读消息,打印,然后等待,直到有别的线程唤醒它。其结构如图所示: 单例模式作为一个系统硬件的模拟,在一个项目中有一个打印机就够用了,在项目中任何需要打印消息的地方,需要使用SyncPrint...
2008-11-12 20:50:55
404
原创 事件监听器模式(一个简单的例子)
事件监听器模式(一个简单的例子)在GUI程序设计中,在设计时通常不会知道用户的动作什么时候会发生,如用户可能点击某一个按钮,也可能不点击,而且点击按钮的时机在运行时才可能知道。如果用传统的程序控制方式,则很难做到准确的响应。通常这种情况或者类似的情况下,我们可以使用事件/监听器模式。将一个监听器(listener)与特定的控件(如按钮等)绑定起来,当发生用户点击等事件(Event)时,...
2008-11-12 14:06:04
670
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅