我动手做解释器的原因是多方面的。
-
平时工作搞SSH,没机会接触cool的东西。
-
我不懂汇编,也不懂java字节码,所以只好做解释型的语言,不能做编译型的语言。
-
我工作中遇到的工作流引擎,我越发觉得那个流程图其实也是一个函数而已,只是执行速度慢,逻辑也简单,关键是执行的状态可以持久化。
-
我天天编程,对编程这块特殊的业务,可以说是业务专家。一般情况下,我认为只要需求明确,我又理解深刻,没道理做不出软件来(即使性能差些)。
于是,我开始动手,首先对业务实体进行建模,我要做的是类似java的OO语言,主要的实体就是Package,Class,Object,Method,Field,。。。,这些都是在再普通不过的实体了,参考java的reflect包,基本雷同。
有了这些实体以后,我发现剩下的就是方法内部的逻辑如何建模的问题了。我整理了一下,有2种方法去表示逻辑:
-
流程图
-
指令
我最终选择了流程图,因为我不喜欢顺序的指令集。于是又多了一些实体:FlowChart,Node,StartNode,EndNode,DecisionNode,…
好了,至此所有的静态模型基本完成了。
光有静态模型显然是不够的,激动人心的部分终于要来了。我接下来要写一个执行引擎,去执行流程图。接过我发现要解释执行流程图是很容易的。每个节点都有箭头指向下一个节点,直到EndNode结束。节点类型基本就是顺序,分支。每个节点都有一句指令,最基本的就是赋值,调用。
...
qq其实也开通了微博,我本来是不想用的,结果发现李开复在qq微博上滔滔不绝,而且似乎还算精彩。没办法,只好去fo了几个人。
这个情况有点像新浪博客,我就是因为有韩寒博客,才订阅了新浪博客。
二者有一个共同点,国内的社交应用从名人开始。
这是一个组件化,事件型的web开发框架,完全是按照我自己的喜好来做的,集合了同类框架(GWT,JSP,ASP.net,Delphi,Wicket等)的特点。比如完全抛弃了jsp,只有html和java代码组成,支持模式对话框,最重要的一点是有状态。
做了一个
Demo
。代码都在google code上(javawebbrowser.googlecode.com)。我打算先把这个东西应用于自己做的项目上,这个个人网站便是第一个吃jwf这只螃蟹的项目。我会慢慢把常用组件添加到Demo里,同时也尽可能学习美工,把界面做好看一些。
GAE早期只有python版本,我就匆匆学了一点python,然后做了一个个人博客网站。后来google推出java版本,至今也有好久了。我对python实在不熟,平时工作主要用java,正好我最近在打造一个java的组件化开发框架,于是我就想到用java重写这个网站。风格和以前一样,但我有空会慢慢改善。
自己写一个小游戏,也许是很多程序员最初的梦想。从初中学习BASIC开始,到如今31岁了,我也今天是刚刚实现了自己的这个理想。我用那写了7年SQL 语句的键盘,用我那学习了OO思想,23种模式,UML,MDD的脑袋,第2天,终于写出了一个俄罗斯方块游戏。加上稍微学习了一下J2ME,游戏可以运行在我的N-Gage QD上,当然,也可以运行在任何一台支持Java游戏的手机上。见到一个朋友,我就有冲动通过蓝牙发给他。哈哈
照例,代码还是保存在
google code
上。
由于公司里使用的是ISA proxy,还需要NTLM认证,我发现ubuntu大多数程序不支持这个NTLM认证,不过火狐例外,所以,上网是没问题的。
可是ubuntu总得更新吧,Synaptic总需要下载软件吧!
幸好有人做了二级代理服务器,专门化解NTLM认证的问题。即把下面的代理服务器软件的上家设为原本的isa服务器,然后在浏览器或者其他软件里的代理服务器一栏,指向二级代理服务器,就不需要ntlm认证了,甚至不需要basic认证了。下面2个软件都是支持win和linux的。他们既可以装在本机,也可以专门搞一台用作代理服务器。
我用了以后,发现ntlmaps似乎不够稳定,还是cntlm好用。 在ubuntu里设置系统全局的代理服务器就是System->Preference->Network Proxy。 然后,貌似等同于设置系统变量http_proxy=
然后,Ubuntu确实能够在线升级了。
最近看到一篇blog讲freelance。于是,又激发了我尝试的念头。去elance.odesk注册了帐号。在odesk算是人认真真的做了readiness test,其他几个测试都没通过,系统说过2个月才能再次测试,真够专业的。
但是过了2天就没兴趣,因为终于发现做freelance的成本都在找单子上。一句话说得很精辟:“花几天找活干,花几小时干完活。”特别是项目都很小的情况下,实在不合算。回头看看我们的fulltime job,花1个月找工作,也许就一干干了好几年。
在windows下,命令行启动和停止系统服务的方法是:
net start|stop
在ubuntu下,竟然也有类似的命令:sudo /etc/init.d/mysql start|stop|restart 以前不懂这个的时候,老想着kill pid,发现不管用,只好重启OS。
很显然,这个/etc/init.d目录下,放着所有的服务,随时可以启停来着。
想到很快就要做个presentation,但是我的ubuntu好像不能连接投影仪。于是google了一把,找到了办法,在xorg.conf里加入一段Options,的确就可以了。然后重启,结果不能进入X了,不知道跟我改了xorg.conf文件有没有关系。这是第二次没有任何征兆的出现问题了,上次我毫不犹豫重装了系统。这次我也本来不打算做任何挣扎,直接重装。结果在重启的时候,我还是忍不住选择了recovery mode。结果我选择修复X,然后重启就好了。