从mac到remote emacs
经常要remote到linux上写code,有些自己的emacs上的设置很方便,偏生NX常常速度慢得不行,VNC啥的看上去跟Terminal也没啥区别,所以就考虑用terminal ssh搞定一个可以远程编辑的,跟图形界面不相上下的环境。
经常要remote到linux上写code,有些自己的emacs上的设置很方便,偏生NX常常速度慢得不行,VNC啥的看上去跟Terminal也没啥区别,所以就考虑用terminal ssh搞定一个可以远程编辑的,跟图形界面不相上下的环境。
有几台Linux,key mapping的配置貌似也没啥特殊的。
有几台Client,分别是Linux / Windows / Mac。经常需要远程等到上述的几台Linux干活,还常常需要开那些个emacs/eclipse什么的。于是,很自然的,就用了NX。然后,问题来了:Linux/Windows下貌似还成,Mac下就老是费,原因是keymapping有问题。大家都知道Apple同学喜欢自己玩一套,所以键都跟别人不大一样,偏偏我老还喜欢用一个无线键盘连到mac,把键map回来干活。因为你知道的,Linux下来时10x键盘最好用吗。
所以,我总共合起来大约花了100小时左右时间再跟NX的xmodmap作斗争,今天调成这样,明天调成那样。这台机器这样,那台机器那样。偶尔还常常碰上一个key明明map上了,打还打不出来的怪事⋯⋯直到碰上了这个软件。
步骤如下:
- 安装之
- 打开System Preference -> KeyRemap4MacBook
- Enable: General -> Don't remap Apple's keyboard
然后不管你连什么样的NX机器,只要Linux/Windows能对的,mac也对了。
它还提供无数的扩展功能,不过为了跟Linux/Windows的clients保持一直,我就统统无视了。
KeyRemap4MacBook,我爱你
Labels: nx key mapping
软件工程事实上越来越标准化了。
我不是很懂CMM之类的东西,只能按我平常开发的流程跑个烂砖头,希望勾出大家有意思的东西来。这个帖子,也是我入伙的时候就很想写的了。我们可以先high-level的讨论一下有那些类,哪些工具。然后以后具体化的开thread一个一个工具讨论过去。
我做的比较土,本来还有点核心的,现在越做越应用了。做核心的时候很是天马行空,不过test啥的还是都有,只是很多时候犯懒,总是依赖我们QA帮我些。现在做应用了,这些东西一个都不能少,要不出了问题客户直接就追到头上了,没有人帮我擦屁屁。慢慢养成了习惯,觉得还是蛮有用的。
首先是test!test已经成我的代码核心了,现在test : src -> 2 : 1了。而且feature deliver之后,因为QA的bug,test会越写越多,绝对是重中之重。这个是影响开发进度的,所以现在基本上老板已经不push我的delivering了,因为我经常delay的。(感谢国家,感谢党,感谢老板,感谢team)
test包括unit test / regression test (smoke test)等等,我不是QA,也没法全懂。自己的code,unit test是肯定免不了的。100% coverage总是求之不得,特别是一些multithreading的,大家如果有特别好的办法,记得共享一下。Java底下的,我们自己还有一些可以定这个thread run到这个method挺一下之类的来check status,C++就完全无解。我写code很马大哈,所以C++ multithreading,我一般就直说我恐怕写不好,虽然以前发paper聊啥minimize critical section一套一套的。
接下来是repository。SourceSafe / CleanCase / cvs / svn / perforce / git都用过,不过现在就比较熟git和perforce了,svn工具多,也可以玩一玩。用了几年的cvs,现在一眼看去,是大不解了。别的bazaar啥的,只能把code check out下来编一编。个人很拜git,确实好用。自己的服务器上放到git repository使用gitosis,还比较简单。这个每个人各有喜好,也没啥好讨论的,就是放堆code的地方吗。git最好的就是没有每个目录给我来一个.svn这样的鬼东西,perforce也是,所以我比较喜欢这两个,仅此而已。(有那个东西的话,我找起东西来,还需要把伊滤掉,like: find . | grep -v "\.svn" | xargs grep -nH "xxx" {} \; (这个命令不做准啊,xargs大意如此,因为我平常只要find . -exec grep -nH "xxx" {} \;就行的)
接下来是code review。感谢国家,感谢党,感谢公司,我们可以用一个command很容易的发patch给相应的人,而且有一个online system做side-by-side的comparing,对效率大有帮助。谈code review不得不谈coding style,一个软件公司,应该有自己的coding style,保证code到哪看上去都差不多。有些人写code比较牛,比如一个函数一行就写完了(我是说很复杂的那种,我有个朋友以前一行可以写1000多个字的),到了组织里,只能不好意思,拉回去重写了。一个project,铁打的营盘流水的兵,要是你的code太牛,后面的人接不了手,再牛的project也只能扔到垃圾堆里,所以coding style是必要的。现在有很多lint工具可以保证coding style,我个人更希望工具能把coding style都包括进去了,否则一个team里,有些边缘的不同点,很容易伤了大家和气,影响以后的士气。不过貌似做lint的人都不怎么喜欢parsing code,所以做出来的lint都还不是特别精确。这方面java好些,有lint / checkstyle / findbug / ...一系列很好的工具,而且即使code已经进去,还是可以用Hudson / Jenkins之类的东西发现。
对于code review的几个原则:reviewer如果看不懂code,一定要弄懂,否则就不要盖章了。reviewer不光要弄懂code,还要理解design,这是最后的design review,这个时候roll-back,远比code出去了再这么干更好一点。reviewer态度一定要nice一点,人总是在不断鼓励中提高的,你打击人几次,人以后就伤了。关于CR的tool,review board / gerrit (Android用那个)等等等等,现在已经有好多,没有装的,赶紧装一个。(对了,以前svn有post code review的概念,个人不太喜欢,code review就是要side by side,有record的把意见啥的记下来,其实这是很好的提高水平的方法)
接下来是CI。没啥好说的,没有CI赶紧去搞一个,你不希望你的软件今天好明天坏,每天的时间都用来抓bug吧?谁出的问题,第一时间报出来总是好的。
还漏了不少,下次慢慢补了。其实,喜欢project,一心想把project做好,才是最重要的东西。
最近top-language => top-company中,发个贴应应景,让大家有点topic讨论讨论。也许跟lang没啥关系,但是大家不都是码农吗,也还是本行吧。
我找了不少的时间,终于找到一个可以parse出DOM Level 2 HTML标准的parser。这个东东嵌在GNU classpath项目里,不过还算好分离。
今天看了一下它的parsing。它是用LL(n)文法的。也就是说,对于每一个tag / comments / ...,需要往前看n个token。自然,每次parsing的时候它都可以确定出自己的下一个文法是什么,所以是递归下降分析。
Parser里有一个validator,用来在每次parse出一个tag (or something else)的时候validate文法,同时加入丢失掉的。这个validator是依赖于一个DTD构造器的,一个很典型的例子可以看HTML_401F.java,这个DTD会对没有header和body的自动加入header和body。然后对于在前面的elements,如果可以加入header就加入,否则就加入到body里。
为了测试方便,我构造了一个没有header的DTD,放在DomHTMLParserTestingUtil里面,同时也有简单的例子。
另外,我还搞了一个Node.toString()来打出需要的node信息。后面有空的话,要把这个改成可以dump出xml文法的东西来,或者是toXML() / toProtoBuf() or something else...
今天很有成就感,这几天都很有成就感,要保持~~~
希望尽快把porting做完,并且有足够的unit tests来保证stability。以后就可以考虑更进一步的东西了。
Firebug用的不多,不过Chrome的Developer Tools还真是不错,这里是一些tips。
- 快捷键列表:http://code.google.com/chrome/devtools/docs/shortcuts.html
- 帮助总汇:http://code.google.com/chrome/devtools/docs/overview.html
POM reference: http://maven.apache.org/pom.html#Directories
这个是所有共享设置的地方。
Plugin references: 看各自的Pluging,主要有下面两类:
- Maven自带的 http://maven.apache.org/plugins/index.html
- Codehaus的 http://mojo.codehaus.org/plugins.html
Our Maven tips: http://code.google.com/p/ascentdimension/wiki/MavenTips
总的来说,maven很好用,需要好好找个地方写wiki
Labels: maven