windows程序员装13指南

October 29th, 2009
  1. 开机先开命令行,win+R -> cmd -> enter 不要点开始运行,否则失败
  2. 命令行预先调成黑底绿字,打开还是黑底白字的失败。调整方法:打开一个命令行窗口,标题栏点右键,属性,颜色,选黑底绿字,然后应用到所有
  3. 编辑器用vim,装cygwin或者gvim for win,然后把path加入只想vim的bin文件夹,这样子可以从命令行启动vim。别用gvim,跳出新窗口来的失败(win下面emacs装13效果不好,如果emacs阵营的建议使用linux,下篇帖子说明)
  4. 如果是用vs的,可以用vs的nmake,不过效果不好,建议下载gnu make for win,这样可以写的时候告诉别人这个是跨平台的Makefile,装13效果好,而且可以用devcpp软件生成,生成过程不要被人看见。自己手动调用cl编译的失败。如果用eclipse的可以考虑用ant,用eclipse可以生成,不过生成的时候不要让别人看见,被人发现的失败。
  5. vim里面可以直接调用make,退出vim的失败
  6. 调试程序可以看log,用vim的查看log的插件可以,或者用tail for win32更佳
  7. vim打很多插件,让刚刚看完vimtutor的孩子们羡慕的不得了,全部手动编辑的失败
  8. vim的配色方案调整为酷酷的样式,喜欢黑底绿字的就用torte,要求高的朋友可以考虑下载textmate的配色方案,也是黑底的,但是颜色更柔和
  9. 加分项目:cygwin必备,而且要说,简单操作还行,复杂操作感觉win命令行太瘸腿,还是unix用的顺手,注:可以不用
  10. 可以考虑去星巴克等内行人少的地方coding,在软院机房装13的直接失败。至于星巴克特有的方式参见《星巴克装13指南》

vim on rails解决方案

September 25th, 2009

为了那个tab补全的插件用了几天emacs。觉得还是不如vim趁手。今天刚刚看到有vim的textmate-like插件,终于可以回归了。公布插件组合如下:

以上

crontab写错了,嘲笑自己

September 14th, 2009

今天来到公司,发现服务器的cpu使用率和IO非常高,突然想到今天是周一,上周写的一个备份crontab该生效了
登录到服务器上面一看,原来上次写了个 ****1的crontab,周一每分钟执行一次备份脚本,太丢人了。

改成11**1搞定

struts2与velocity接合的配置

September 9th, 2009

搜索到好多文章在web.xml里面加入velocity的解释引擎,然后映射*.vm,这样的话struts2就没有参与到页面render的过程中来,所以是错误的方法
在struts2文档里面明确说明了它支持velocity作为模板,所以不添加任何配置的情况下,在struts.xml的转向里面写/index.vm这样的代码就可以使用velocity模板的。但是这样默认没有加入velocity-tools的支持,velocity像瘸腿了一样,好多功能实现不出来
正确的方法是在struts.xml文件头部加入下面几行

注意:”com.ssh.tzx.commons.VelocityFixedManager”是我自己写的一个VelocityManager的子类,主要是覆盖掉默认的createContext方法,因为在velocity tools 1.3以后,里面调用的getToolboxContext被去掉了,改成getToolbox就可以了。其他的地方依赖问题啥的都解除就ok,我做好的文件见附件

所以,web.xml文件里面只要加入对struts的配置就可以了,velocity会被struts自动调用

参考:进一步提升Struts2对Velocity的支持力度

附代码:

package com.ssh.tzx.commons;

import java.util.Iterator;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.util.VelocityStrutsUtil;
import org.apache.struts2.views.util.ContextUtil;
import org.apache.struts2.views.velocity.StrutsVelocityContext;
import org.apache.struts2.views.velocity.VelocityManager;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.context.ChainedContext;

import com.opensymphony.xwork2.util.ValueStack;

public class VelocityFixedManager extends VelocityManager {

@SuppressWarnings("unchecked")
@Override
public Context createContext(ValueStack stack, HttpServletRequest req,
HttpServletResponse res) {
VelocityContext[] chainedContexts = prepareChainedContexts(req, res, stack.getContext());
StrutsVelocityContext context = new StrutsVelocityContext(chainedContexts, stack);
Map standardMap = ContextUtil.getStandardContext(stack, req, res);
for (Iterator iterator = standardMap.entrySet().iterator(); iterator.hasNext();) {
Map.Entry entry = (Map.Entry) iterator.next();
context.put((String) entry.getKey(), entry.getValue());
}
context.put(STRUTS, new VelocityStrutsUtil(getVelocityEngine(), context, stack, req, res));

ServletContext ctx = null;
try {
ctx = ServletActionContext.getServletContext();
} catch (NullPointerException npe) {
// in case this was used outside the lifecycle of struts servlet
//log.debug("internal toolbox context ignored");
}

if (toolboxManager != null && ctx != null) {
ChainedContext chained = new ChainedContext(context, getVelocityEngine(), req, res, ctx);
chained.setToolbox(toolboxManager.getToolbox(chained));
return chained;
} else {
return context;
}
}

}

回归

June 16th, 2009

今天又回来gz这边了,早上去咖啡店吃了好吃的早餐,店员看到我格外热情,虽然煎鸡蛋的水平还是那样,呵呵。今天可能是因为咖啡店有电影拍摄的原因,店员就一个没来,不知道是不是还在这里工作。早餐吃的很丰盛,以至于午餐都不怎么吃得下了。午餐准时在11:30开始,呼呼~

实验室的同学们还是一如既往的努力学习,生活滋润的很哪。来了个新成员,估计也是要参与到新项目里面来的。

突然有点想念这里的环境,舒适而且又有我所需要的设备,想做什么就做什么,不需要拼命,或许这才是正常的工作吧。以后如果工作总是需要长时间,高强度的工作,或许真的要考虑30岁以后离开IT业了。最可怕的是看到有的人把这个当做很自然的事情,更是让我不可接受,正常的工作应该是5*8,而不是14*7。否则任你挣多少钱都没时间花了。

晚上还要放松下,没有工作真爽~
(咱不理那帮疯子,做好自己的工作,让他们抓狂去吧)

js控制ie里table的innerHTML

June 12th, 2009

不知道算不算IE的bug,反正在firefox里面innerHTML是可写的,但是IE里面就是只读的。

今天碰到这个问题,用ajax替换表格的tbody内容的时候,ie里面报个错,不让替换了。后来在table外面套个div,对整个div的innerHTML替换就ok了

上代码:

stationGoodsDiv.innerHTML = "<table id='stationGoodsTable' style='width:100%'><tr id='stationGoodsTableHeader'>" + stationGoodsTableHeader.innerHTML + "</tr>" + xmlHttp.responseText + "</table>";

我的DISC测评结果

May 17th, 2009

行为类型:完美主义者

类型特征:被动和制约

通常强调精确性,注重细节并沉稳坚定,善于系统思考。在生活和工作中倾向于按部就班,遵守既定的流程。

行事老练,会很小心的规避冲突,所以很少有一引发矛盾。非常有责任心,工作中一丝不苟,有着极高的标准,可以被信赖。

行为概述:

  • 保守的,拘谨的
  • 怀疑的,悲观的
  • 安于现状的,不活跃的
  • 仔细相近的,精确的

关注重视:程序,支持

探索追求:事实,时间

害怕担心:不确定性或者改变

压力反映:逃避或者妥协

正面态度:精确地,精细的

沟通法则:证据,也会回应承诺

外在行为模式和认知行为模式的比较说明,我能够成功的转换自我行为来满足程序的要求,而不同改变自己的本性

http form的默认method是get

May 5th, 2009

查了不少资料都没说,很可能跟浏览器实现相关吧。
听晨光说默认是post,所以写了端代码测试下,哇哈哈哈,不标准,反正能测form就ok了

<html>
<body>
<form action=”http://localhost/hello”>
<input type=”hidden” name=”num” value=”123″>
<input type=”submit” text=”submit” />
</form>
</body>
</html>

sorry,超人在休息

May 1st, 2009

飞一般的奔回家来了,最近的工作状态太差了,再继续这样的工作状态实在没什么意义。家,永远都是自己的避风港,躲到家里来就有无穷大的安全感,啥都不用自己想,完完整整地休息几天。即使是在家里工作都是休息。

今天早上又收到nickel的电子邮件,对于这个项目才刚刚开始就产生了抵触情绪,完全是因为这个X。我现在都很难平静的跟别人提到这个X。因为一提到X就难免说脏话就难免气愤。今天X又一次发了邮件给我,让我写周报给他,还CC给了王老师。

不要意思,既然老子的提交产品里面没有周报,那你不用恳请的语气让我写我是不会考虑的。不要想让老子替你完成工作,那你的工作就只剩每天打电话发邮件恶心我了吧。注意,这里说的是替,我自己的工作我自己自然会完成,但是你的工作一点也休想让我替你做。

现在感觉比以前成熟一些了吧,我也要学习当面笑哈哈的拒绝他的要求,背后心里面不停的骂他,甚至连他划归到humen还是其他啥种族里面都没法界定。

从我目前的状态来看,估计以后遇到比这个项目恶心的不会很多了,所以我暂时不会放弃,我要坚持到最后,给自己积累这个非常重要的经验。最近我已经放弃太多次了,或许有些困难我本可以越过的,但是总是放弃会让自己养成懦弱的习惯,所以我依然要做过去的自己,打倒困难。

最近对软件工程的开始有些理解了呢,果然软件工程经验需要横向对比,单纯纵向对比是没有很大意义的,因为纵向只能找到自己在单个项目里面的优势和劣势,但是横向就能发现一些规律性的东西,学到一些管理技巧。如果能再参加一个项目一定能学到更多东西。

最近两天一直说到自己想去找个公司实习一下看看,希望能有一个比较规范的环境,让我学习一下项目管理,配置管理等。最近依然感觉自己所处的环境规范性太差,以至于nickel那样非常不规范的人以规范要求我们。但是跟鞠那边所处的环境比,我们这边开发环境的配置管理又规范很多。总是质疑自己到底是否适合做软件开发管理,从开发团队内部来说,我非常不擅长划分工作给别人做,一方面是自己对工作量估算的感觉还不够,另一方面总是不太愿意给在学习中的人机会。。。而从跟外部的关系处理来说,或许我总是学不会跟人交往,以前梦想的手上有技术就可以横行的场景在软件业是没办法实现了。

反思完毕,keep going

对于辩论的一点观点

April 21st, 2009

昨晚政治课老师给放的是一个cctv2的一个节目录像,辩题是关于研究生卖猪肉是否应该,其实辩题不是关键,关键的是辩论这种形式

节目里面貌似并不是严格的辩论,因为一边只有3个人。场景异常火爆,辩手各抒己见慷慨陈词。。。。。

其实我想说的是这种形式其实有问题,他让本来可以从多个角度思考问题的辩手限制在一个角度,并且不停的用各种方法来证实自己。众所周知,能说服别人的首要条件是说服自己,如果我站到了反方,那么无论我同意与否,我必须先让自己同意,研究生不能卖猪肉。那么很可能时间长了 ,就给自己一种心理暗示。就像我参加过的唯一一场辩论赛中,当时选中的论题我自己都认为是扯淡,但是很长的一段时间内,无论谁跟我提起对方的观点,我都会疯狂举出各种理由驳倒他,很可怕的一种心理暗示。所以我以后应该不会再参加辩论了,或许我的鉴别力还不够吧。

另外,让非常文雅的人坐在桌子两边谈判本来是一个非常好的形式,但是加入了输赢的考虑因素之后,反倒可以激起人内心最深处的好胜心,于是乎,高声打断别人的谈话,阻止对方发言,挖苦对方的漏洞,强化对方的口误等非常低劣的手段也拿上了台面。甚至,夸张的用来哗众取宠的肢体语言也用来吸引观众和评审的注意力。可笑又可悲。

我自己是非常喜欢看辩论的,因为双方会提出非常多的观点来支持自己的论点,因此可以得到非常多的不同的思路,是一种很有观赏性的节目。同样,我也喜欢看批评的节目,比如李敖有话说,或者听愤青讲话,不是为了YY自己的祖国多么强大,也不是为了自卑所在的环境多么恶劣,而是作为一个对于人文科学几乎一无所知的人对于外部世界的精彩的渴望吧。我需要很多的资料,让我组织成自己的观点,自己的价值观,而单纯从某一个甚至某几个角度出发都是不够的。我站的高度总是达不到需要发表言论的程度。非常羡慕政治老师的口才,她总是能从相当的高度去分析国家的政策,或许我认为保鲜教育等非常浪费时间,或者科学发展观学习没啥必要,但是从她那里讲出来,就不再是干巴巴的文件,而是鲜活的例子,生动的对比,这得益她理论水平的高度。我不懂,就不乱说了。

今天又看到了小帅的一片blog,说到辩论的一些技巧,以及1234辩的侧重点都与整场的论题的关系,非常有趣,或许辩论可以被称为一种运动,需要团队合作,需要个人技巧,去争取最后的胜利。否则也就没人认真辩论了吧。