闭门造脚本语言解释器的一点感想

我动手做解释器的原因是多方面的。

  1. 平时工作搞SSH,没机会接触cool的东西。
  2. 我不懂汇编,也不懂java字节码,所以只好做解释型的语言,不能做编译型的语言。
  3. 我工作中遇到的工作流引擎,我越发觉得那个流程图其实也是一个函数而已,只是执行速度慢,逻辑也简单,关键是执行的状态可以持久化。
  4. 我天天编程,对编程这块特殊的业务,可以说是业务专家。一般情况下,我认为只要需求明确,我又理解深刻,没道理做不出软件来(即使性能差些)。

于是,我开始动手,首先对业务实体进行建模,我要做的是类似java的OO语言,主要的实体就是Package,Class,Object,Method,Field,。。。,这些都是在再普通不过的实体了,参考java的reflect包,基本雷同。
有了这些实体以后,我发现剩下的就是方法内部的逻辑如何建模的问题了。我整理了一下,有2种方法去表示逻辑:

  1. 流程图
  2. 指令

我最终选择了流程图,因为我不喜欢顺序的指令集。于是又多了一些实体:FlowChart,Node,StartNode,EndNode,DecisionNode,…
好了,至此所有的静态模型基本完成了。

光有静态模型显然是不够的,激动人心的部分终于要来了。我接下来要写一个执行引擎,去执行流程图。接过我发现要解释执行流程图是很容易的。每个节点都有箭头指向下一个节点,直到EndNode结束。节点类型基本就是顺序,分支。每个节点都有一句指令,最基本的就是赋值,调用。

...

Posted by jack Thu Aug 19 09:55:34 UTC 2010 Tag: script Comments( 1 )

SNS的草根与名人

qq其实也开通了微博,我本来是不想用的,结果发现李开复在qq微博上滔滔不绝,而且似乎还算精彩。没办法,只好去fo了几个人。 这个情况有点像新浪博客,我就是因为有韩寒博客,才订阅了新浪博客。 二者有一个共同点,国内的社交应用从名人开始。

Posted by jack Fri Aug 06 13:46:59 UTC 2010 Tag: sns Comments( 0 )

JavaWebForm v0.1release

这是一个组件化,事件型的web开发框架,完全是按照我自己的喜好来做的,集合了同类框架(GWT,JSP,ASP.net,Delphi,Wicket等)的特点。比如完全抛弃了jsp,只有html和java代码组成,支持模式对话框,最重要的一点是有状态。
做了一个 Demo 。代码都在google code上(javawebbrowser.googlecode.com)。我打算先把这个东西应用于自己做的项目上,这个个人网站便是第一个吃jwf这只螃蟹的项目。我会慢慢把常用组件添加到Demo里,同时也尽可能学习美工,把界面做好看一些。

Posted by jack Mon May 31 23:46:19 UTC 2010 Tag: JWF Comments( 0 )

用java重写了程序

GAE早期只有python版本,我就匆匆学了一点python,然后做了一个个人博客网站。后来google推出java版本,至今也有好久了。我对python实在不熟,平时工作主要用java,正好我最近在打造一个java的组件化开发框架,于是我就想到用java重写这个网站。风格和以前一样,但我有空会慢慢改善。

Posted by jack Fri May 07 05:38:56 UTC 2010 Tag: python java gae Comments( 0 )

做了平生第一个游戏:俄罗斯方块

自己写一个小游戏,也许是很多程序员最初的梦想。从初中学习BASIC开始,到如今31岁了,我也今天是刚刚实现了自己的这个理想。我用那写了7年SQL 语句的键盘,用我那学习了OO思想,23种模式,UML,MDD的脑袋,第2天,终于写出了一个俄罗斯方块游戏。加上稍微学习了一下J2ME,游戏可以运行在我的N-Gage QD上,当然,也可以运行在任何一台支持Java游戏的手机上。见到一个朋友,我就有冲动通过蓝牙发给他。哈哈

照例,代码还是保存在 google code 上。

Posted by jack Mon Mar 09 12:18:50 UTC 2009 Tag: game tetris J2ME Comments( 0 )

Ubuntu通过需要NTLM认证的代理服务器(ISA)进行升级

由于公司里使用的是ISA proxy,还需要NTLM认证,我发现ubuntu大多数程序不支持这个NTLM认证,不过火狐例外,所以,上网是没问题的。

可是ubuntu总得更新吧,Synaptic总需要下载软件吧!
幸好有人做了二级代理服务器,专门化解NTLM认证的问题。即把下面的代理服务器软件的上家设为原本的isa服务器,然后在浏览器或者其他软件里的代理服务器一栏,指向二级代理服务器,就不需要ntlm认证了,甚至不需要basic认证了。下面2个软件都是支持win和linux的。他们既可以装在本机,也可以专门搞一台用作代理服务器。

  • NTLMAPS(python)
  • CNTLM(c)

我用了以后,发现ntlmaps似乎不够稳定,还是cntlm好用。 在ubuntu里设置系统全局的代理服务器就是System->Preference->Network Proxy。 然后,貌似等同于设置系统变量http_proxy=

然后,Ubuntu确实能够在线升级了。

Posted by jack Mon Jan 12 06:55:49 UTC 2009 Tag: ubuntu ntlm proxy Comments( 0 )

freelance的成本分析

最近看到一篇blog讲freelance。于是,又激发了我尝试的念头。去elance.odesk注册了帐号。在odesk算是人认真真的做了readiness test,其他几个测试都没通过,系统说过2个月才能再次测试,真够专业的。
但是过了2天就没兴趣,因为终于发现做freelance的成本都在找单子上。一句话说得很精辟:“花几天找活干,花几小时干完活。”特别是项目都很小的情况下,实在不合算。回头看看我们的fulltime job,花1个月找工作,也许就一干干了好几年。

Posted by jack Wed Dec 10 05:35:05 UTC 2008 Tag: freelance Comments( 3 )

daemon in Ubuntu

在windows下,命令行启动和停止系统服务的方法是:
net start|stop

在ubuntu下,竟然也有类似的命令:sudo /etc/init.d/mysql start|stop|restart 以前不懂这个的时候,老想着kill pid,发现不管用,只好重启OS。

很显然,这个/etc/init.d目录下,放着所有的服务,随时可以启停来着。

Posted by jack Mon Dec 01 03:49:13 UTC 2008 Tag: ubuntu Comments( 0 )

Ubuntu,投影仪及fsck

想到很快就要做个presentation,但是我的ubuntu好像不能连接投影仪。于是google了一把,找到了办法,在xorg.conf里加入一段Options,的确就可以了。然后重启,结果不能进入X了,不知道跟我改了xorg.conf文件有没有关系。这是第二次没有任何征兆的出现问题了,上次我毫不犹豫重装了系统。这次我也本来不打算做任何挣扎,直接重装。结果在重启的时候,我还是忍不住选择了recovery mode。结果我选择修复X,然后重启就好了。

Posted by jack Thu Nov 13 09:35:15 UTC 2008 Tag: ubuntu Comments( 0 )