cygwin下rails开发环境的搭建

February 12th, 2010

首先说一下我用到的工具

  1. cygwin
  2. ruby1.8.7(注意:用了1.8的)
  3. sqlite3-ruby+ sqlite3(好久才搞定)
  4. rails, rake, rspec, cucumber …
  5. console2(用来启动cygwin,可以实现tab方式的终端。)
  6. e-texteditor(据说是windows下面最像textmate的编辑器了)

首先从cygwin开始说吧

用默认的肯定是不行了,我凭记忆说一些需要的包吧:ruby, iconv,git,automake,make,autoconf,subversion,ruby,sqlite,libsqlite3,libsqlite3-devel,tidy, vim。我其他的还装了很多,比如readline等。具体有没有用不知道,反正我用cygwin还有别的作用,所以就装了很多

sqlite3-ruby

这个就比较麻烦了,从/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/driver/dl/api.rb里面可以看到,没考虑cygwin的,不过可以认出来是mswin也行。但是mswin只会找/bin下面的sqlite3.dll。但是cygwin默认装的/bin/cygsqlite3-0.dll。两个方法可以解决:1. 改api.rb 2.给那个dll改名。因为第一种方法可能以后给sqlite3-ruby升级的时候有问题,所以就把dll复制了一份,命名为sqlite3.dll。搞定

rails等

这个就容易了吧,gem install rake rails rspec cucumber webrat

记得装webrat的时候需要几个库,其中有iconv,其他的忘记了。。。。。反正他要哪个就装哪个呗

console2

这个工具中文系统装了以后显示很怪异,其实好解决,他有个readme,可以解决。我用的win7,从console2里面启动cmd窗口,把cmd窗口默认值里面的字体改成新宋体就搞定了,巨丑,没关系,在console2里面再换成好看的consolas就好了。然后把菜单栏和工具条都去掉了,快捷键改成跟ubuntu下面的终端一样的键位了,舒服。ctrl+shift+t开新tab。ctrl+shift+c复制。ctrl+shift+v粘贴。

e-texteditor

支持正版哈,大家尽量不要破解它。很好的工具,希望他继续发展呢。以前对中文支持巨烂,现在慢慢的程序也稳定了,不错的程序,安装的时候报的错误时因为有些文件名windows下面没法处理,全部忽略就可以。然后在cygwin里面git clone git://github.com/gtcaz/ebundles.git,这个是他最新bundle的发布地址。下载最新的bundles复制到安装目录里面就可以cp Bundles/ /cygdrive/c/Program\ Files/e/ -r。bundles就ok了

总结

文章里面可能就是cygwin具体装了那些包我有点忘记了,反正报错就能看到缺啥了,花我最多时间的就是sqlite3了,哎。

上图

界面截图

界面截图

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