vi experience

干了这么多年的java开发,最近觉得没什么好玩的了。下载了jvm的源码想看看,结果发现c的功力不够。于是打算学习c。据说c程序员不用eclipse的,只用vi。于是我一头钻下去,学习vi。

vi据说很难,喜欢的人很喜欢。一个朋友介绍了个 快速教程 给我。我花了30分钟学习了一下,做完了练习。觉得其实vi不过如此,大可不必害怕学习。

我觉得vi其实就是一个很普通的文本编辑器,功能上基本和notepad没什么区别。当然,深度用户可以做一些自定义的设置。就像word一样,80%的用户只适用其20%的功能。想一想一个文本编辑器需要什么功能:

  1. 打字,删除,退格,移动光标
  2. 选择,复制,粘帖
  3. 查找,替换
  4. 保存

windows下的notepad,或者任何一款editor都能做到上述功能。vi也不例外。notepad是windows程序,保存,查找,替换等功能是通过菜单,对话框来实现的。而vi作为字符界面,没有这些东西。它提供3种模式:

  1. normal 普通模式允许浏览,移动光标
  2. editing 允许编辑,打字
  3. command 在普通模式下,键入冒号,后面跟命令,比如w表示write,q(quit),/foo表示查找,/foo/FOO表示foo替换为FOO。

很简单吧。vi还提供语法高亮,就像ultraedi和notepad++。

...

Posted by jack Fri Feb 11 12:40:20 UTC 2011 Tag: linux Comments( 0 )

使用了新ghs反向代理

用了you8g的反向代理一段时间了,毕竟的免费的,非常感谢。但有它有一个问题,也许是内部使用了多台服务器的缘故,session会无故丢失(同时说明you8g是非常强大的,有“云”技术在支持)。最近换了个代理(免费的),目前还没发现问题。这里不能透露服务器的名字。

Posted by jack Wed Nov 17 02:48:21 UTC 2010 Tag: ghs Comments( 0 )

gc原理小记

最近许多公司面试喜欢问垃圾回收的问题了,仅仅回答当引用为0时,可以回收已经不能满足面试官的要求了。
sun的jvm的垃圾回收策略是按对象的年龄分3代,新生代,旧生代,永生代。
英文分别是young generation,tenured generation, perment generation.
其中对象创建之初,自然是新生代。
后代垃圾回收线程不断的对新生代对象进行扫描,发现引用为0时自然将其回收,否则记下回收失败的次数。
经过N次扫描以后仍然存活的对象将被归类为旧生代。
对旧生代的扫描频率可以减小。
新生代和旧生代是存放在heap里的,而永久代是存放在单独的一个内存区域里的。
永久代存放是的类数据,或者string数据,或其他jvm自用的数据。
永久代顾名思义是不被垃圾回收的。

 

附一个权威的链接:

Frequently Asked Questions about Garbage Collection in the Hotspot TM Java TM Virtual Machine

 

Posted by jack Mon Oct 18 07:49:34 UTC 2010 Tag: java gc Comments( 0 )

my4gl playground

今天看见新闻说google为go语言做了一个简单易用的 go playground .还真不知道怎么翻译这个单词:操场,游乐场?anyway,反正就是一个试验平台,你可以随便写一个很简单的小程序,然后点击运行,最后运行结果就由网页返回了。

我想到我上次diy的那个脚本语言,我也可以为它做一个 my4gl playground 啊。于是马上动手做了。很快就做好了。

当然,我的脚本语言没有什么文档,除了我也没人知道语法。幸亏语法是类java的。

Posted by jack Sun Sep 19 08:07:46 UTC 2010 Tag: my4gl Comments( 0 )

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

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

  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 )

坐飞机耳鸣的解决办法

近日和娇妻去海南渡假,在飞机上,毫无悬念的又要遭受耳鸣的折磨,从第一次坐飞机开始,就染上此病。虽有旁人指导说要咀嚼或张大嘴巴,均对我无任何疗效。突然老婆说吞咽就OK了,我嘴里没什么食物,于是尝试 吞咽空气 。不料,效果甚佳!
**此法为我老婆版权所有,效仿须注明

Posted by jack Mon Nov 10 14:38:06 UTC 2008 Tag: Comments( 0 )