by agate - Published: 2008-05-28 [9:35 下午] - Category: 系统操作

一般我们些进行shell变成的时候总需要给sh传入一些参数,这里描述这些参数调用的一些技巧.
1、 位置参数
由系统提供的参数称为位置参数。位置参数的值可以用$N得到,N是一个数字,如果为1,即$1.类似C语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从0开始。第0号为程序名字,从1开始就表示传递给程序的参数。如$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推。
2、 内部参数
上述过程中的$0是一个内部变量,它是必须的,而$1则可有可无。和$0一样的内部变量还有以下几个。
$# ----传递给程序的总的参数数目
$? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。
$* ----传递给程序的所有参数组成的字符串。
$n ----表示第几个参数,$1 表示第一个参数,$2 表示第二个参数 ...
$0 ----当前程序的名称
$@----以"参数1" "参数2" ... 形式保存所有参数
$$ ----本程序的(进程ID号)PID
$! ----上一个命令的PID

Tags: [ , ] - Comments: View Comments
by agate - Published: 2008-05-28 [9:05 下午] - Category: 系统操作

一直说linux快,从我安装第一次使用linux到现在就没觉得他上网快过。特别是这个ubuntu~明显的,我两台机器一台xp一台ubuntu就是xp的上网打开网页快。莫名其妙,后来在网上看到原来win下会自动缓存dns,linux下就没有~找了一个解决办法,(特别是针对我这种使用路由器,即使用dhcp的电脑)转载在这里:
Read more...

Tags: [ , , ] - Comments: View Comments
by agate - Published: 2008-05-27 [8:57 下午] - Category: 开发环境, 软件使用

好好学习,天天ruby!最近决定好好学习一下动态语言!看着那视频里头的高手用着mac os,在textmate上有如魔法般打出成堆的代码!我就暗下决心要用mac,要用textmate.但是事实上我没钱买mac,一时半会也弄不到mac for x86的dvd.linux又刚刚装好,今天就发现原来gedit也可以这么牛B的!试用了一下,发现和我朋友机器上的textmate差不多阿!

gedit是使用插件扩展自身的,所以一定程度上对textmate有优势.
大部分的plugin可以在 连接 下载到.
在这里我列出我使用的插件列表:

Class Browser :显示类的大纲
Code Formatter :自动格式化,作者特为ruby文件做了优化
Find In File :在文件中查找
Full Screen :全屏
Gemini :自动匹配括号引号和%(<%%>)
Rails Hot Commands :按下ctrl + alt + c 可以选择执行rails常用命令 (也可以输入所有的linux终端命令,将在项目根目录下执行)
Rails Hotkeys :按下ctrl+ shift + R 后再按键在相关文件中跳转, 如A打开application.rb M打开model,C打开controller等等,查看帮助按F1。
Snap Open :按下ctrl + shift + O 可以输入文件名(支持正则)打开文件 (新版修正为 ctrl + alt + o)
Word Completion :伪代码提示,只是把当前打开文件中的单词进行提示,但是对于录入速度帮助很大。
缩进行 :多行的缩进与反缩进
外部工具 :运行外部工具,如shell命令等。可根据自己需要设置。
文件浏览面板 :浏览、打开文件

gedit的插件都是用python写的,可以很方便的根据自己偏好修改完善。还有很多插件,根据自己需要酌情添加。
把这些plugin都放在~/.gnome2/gedit/plugins目录下(没有这个目录自己建立一个)

喜欢textmate那个暗调的配色主题,可以到把http://grigio.org/files/darkmate.xml下载下来放入~/.gnome2/gedit/styles目录下方可.要是有其他需求可以到http://live.gnome.org/GtkSourceView/StyleSchemes去看看!

后续有很多细节,比如S的扩展阿,rhtml的支持阿等等,这里记录一些参考资料有待查阅:

http://grigio.org/pimp_my_gedit_was_textmate_linux

Tags: [ , , ] - Comments: View Comments
by agate - Published: 2008-05-27 [7:48 下午] - Category: 历程, 感想

今天有个疑问就是难道动态语言不能重构吗?(似乎是不能=.=|||)google的时候就发现了这篇文章,写得让我有点惊叹,摘抄出来,来自:http://www.blogjava.net/killme2008/archive/2007/07/17/130712.html

先让我们来了解下柏拉图对世界的理解,柏拉图认为,自然界中有形的东西是流动的,但是构成这些有形物质的“形式”或“理念”却是永恒不变的。柏拉图指出,当我们说到“马”时,我们没有指任何一匹马,而是称任何一种马。而“马”的含义本身独立于各种马(“有形的”),它不存在于空间和时间中,因此是永恒的。但是某一匹特定的、有形的、存在于感官世界的马,却是“流动”的,会死亡,会腐烂。柏拉图把这个永恒不变的“形式”称为“理型”,他认为这个世界分为两个部分,一部分是完美的由“理型”组成的世界,另一个就是我们现实的“粗糙”的世界,真实世界是按照理型世界的标准设计的,总是努力达致完美的理型世界,但总是存有偏差。因此他相信人类的灵魂是不朽的,灵魂苏醒后会向往回到完美“理型”的世界,人生来就有“理型”的观念。总之,柏拉图深信“理性”远比“感官”可靠。而他的学生亚里士多德却反驳他的老师,在亚里士多德看来,他也赞成世界是有变化的“质料”与不变的“形式”组成,比如具体的某只马是有一些“质料”组成,它有马的“形式”在里头,因此它被称为马。而“形式”存在于具体的“物”之中,比如“马”的含义就存在具体的千千万万只马之中, “形式”的观念并不是人与生俱来的,而是借助于“感官”去感知外界事物而得来的。他把这种“形式”更多地称为“特征”,由此提出了他的自然界分类观点,对 “物”分类依据的是它能做什么以及它有什么特征。可以说,亚里士多德比他的老师更相信“感官”,没有像他的老师那样陷入对完美“理型世界”的眷念而不可自拔。
联想到我们在使用静态OO语言(比如java)试图去描述现实世界的场景,我们总是试图先设计出一些类(class),这些类秉承我们的意志,我们预期它们能完美地描述事物,并且试图去符合所有的现实的场景。可以注意到,这样的想法不正是柏拉图式的偏执?我们用头脑中出现的“理型”(具体到语言中的类)去描述现实世界,可现实世界往往是模糊的、粗糙的,两者的冲突不可避免,导致类不再按照我们的设想发展,它变的庞大,变的不是那么清晰,因此我们又造出“设计模式”“重构”的“诡辩之术”去弥补、去完整,可这并不是治本之道。首先我们必须承认世界是不完美的,完美的“理型”或者说完美的类是不存在的,类型的划分不能依赖于头脑中的完美“理型”(类型的划分不是取决于类),而应该根据事物的特征以及事物能做什么来划分。放弃对类描述世界的追求,转而构造模糊的类型,对象的类型不再预先构造,它的类型取决于它能干什么,它有什么特征,这正是动态语言中的“Duck-Typing”以及一些函数式语言中的模式匹配希望做到的,两者都是为了描述模糊的现实世界。再比如ruby中的mixin和open class特性又提供了方式让我们去慢慢完善“粗糙”的类,放弃一蹴而就,选择有机成长。
不是很清晰的想法,只是看《苏菲的世界》里对希腊古典哲学的描述突然想到的,各位权当荒唐言。

Tags: [ ] - Comments: View Comments
by agate - Published: 2008-05-27 [3:56 下午] - Category: 开发环境

开头说一句话,windows的确方便!不过终归要到linux上面来的……太多人在这个平台上开发了,windows下很多都不好用,借助cygwin又不是很舒服=。=|||

好言归正传:

1、使用新立得软件包管理器安装

ruby
ruby1.8[自动会勾上,因为这里1.8是默认版本]
ruby1.8-dev
rubygems
rubygems-ruby1.8[自动会勾上,因为这里1.8是默认版本]
其他的依赖管理器会帮你搞定

2、更新rubygem,源里的是0.9的,之所以使用管理器安装是为了解决依赖,如果知道gem依赖什么的话可以直接安装.到官方网站下载最新的版本后,解压到某个文件夹中然后执行

sudo ruby setup.rb

安装之后由于之前安装的gem是0.9的所以bin中的gem还是那样,不能用了,而取而代之的是gem1.8这个执行文件.所以可以执行下面的语句来完成目的.

sudo rm /usr/bin/gem
sudo cp /usr/bin/gem1.8 /usr/bin/gem

3、安装rails,由于最新版本的rails已经到了2.0.2了,但是我还是习惯用1.2.6版本的(因为最新版本改动太大了),所以如果安装最新版本的rails直接

sudo gem install rails --include-dependencies

使用老版本的可以到官方网站上下载对应gem到本地安装

sudo gem install rails-2.0.2.gem --include-dependencies

4、对应安装数据库.之所以说是对应,是因为2.0.2已经不是默认使用mysql数据库了,它迁移到使用sqlite3.这里数据库的安装拜托给新立得软件包管理器安装就ok了.

5、安装对应的数据库驱动.

sudo gem install mysql
如果出现类似

Error installing mysql:
ERROR: Failed to build gem native extension.

说明你没有安装libmysqlclient15-dev,到软件包管理器中安装即可.

sudo gem install sqlite3-ruby
如果出现类似

Error installing sqlite-ruby:
ERROR: Failed to build gem native extension.

说明你没有安装 libsqlite3-dev, 到软件包管理器中安装即可.

基本OK了,试试看使用rails创建一个工程,启动服务器看看首页中的about连接是不是不会出错,不会出错就对了!

============================================

[2009-7-25]
今天我第一次安装 postgres, 也碰到了一些包依赖的问题. 还是通过 google 的方式来解决的. 发现一个不错的配置步骤网页, 是 UBUNTU 官方的.

Install the sqlite3 connector:

$ sudo apt-get install libsqlite3-dev
$ sudo gem install sqlite3-ruby

Install the MySQL database and it's connector:

$ sudo apt-get install mysql-server mysql-client
$ sudo apt-get install libmysql-ruby libmysqlclient-dev
$ sudo gem install mysql

Install the PostgreSQL database and it's connector:

$ sudo apt-get install postgresql-server postgresql-client
$ sudo apt-get install libpq-dev
$ sudo gem install pg

其实只要根据这个安装数据库基本没问题了.
更重要的这次更新是记录: Ubuntu-RubyOnRails

Tags: [ , , ] - Comments: View Comments
by agate - Published: 2008-05-27 [11:52 上午] - Category: 系统操作, 软件使用

为了模拟出Mac下的开发状态,又没有时间去考虑刻录Mac os x的DVD的我干脆就用Linux了。装Ubuntu也是要刻录的~可怜我那个饱经风霜的combo光驱阿!现在不要说刻录了,读它都比较吃力=。=|||

于是乎寻找硬盘安装的方式。下载下来的就是ISO镜像,我想最好的方式无外乎直接用这个镜像咯!Google了一下,果然可以,就是利用Linux下的硬盘引导工具:grub

准备工作

1、ubuntu 8.04 desktop安装镜像

2、grub for dos

分区的问题,我这里不想说什么了,接下来开始做安装前的准备工作

1、把ubuntu 8.04 desktop镜像放到系统根目录下,我这里是C盘。

2、用winrar打开ubuntu-8.04-desktop-i386.iso,提取casper目录内的initrd.gz和vmlinuz两个文件到C根目录下。

3、打开那个“grub for dos”,提取里头的grldr文件,放到C盘下。

4、创建一个menu.lst文件,放在C盘下,内容:

title Install Ubuntu
root (hd0,0)
kernel /vmlinuz boot=casper iso-scan/filename=/ubuntu-8.04-desktop-i386.iso
initrd /initrd.gz

5、编辑 c:\boot.ini

去掉该文件的隐含系统只读属性
用记事本打开 boot.ini
(把 timeout=0 改成 timeout=5 如果需要的话,一般都是30秒的)
在最后一行添加 C:\grldr="Install Ubuntu 8.04 desktop" 保存退出即可!

6、重启计算机,在启动菜单位置,选择Install Ubuntu 8.04 desktop,然后选择最下面一个选项:Install Ubuntu就可以进入安装过程了

Tags: [ , , ] - Comments: View Comments
by agate - Published: 2008-05-25 [5:18 下午] - Category: 系统操作

今天姐姐的电脑莫名其妙无法向任何移动介质写入东西了=。=|||

查了半天发现不是NTFS的问题,发现不是权限问题……找了半天原来是在:

HKEY_LOCAL_ MACHINE\\SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies
中的
WriteProtect项——1为写保护;0为正常

真是神奇的电脑,神奇的小姑娘,神奇的问题……

Tags: [ ] - Comments: View Comments
by agate - Published: 2008-05-23 [10:00 上午] - Category: 历程

哎呀呀!首先要高兴的是:俺的笔记本第二春啦!!!加装了一根1G的内存条,发现俺im全开,开Firefox,开Maxthon,开eclipse,开……就是不卡!原来过去慢都是慢在了虚拟内存的读写上了=。=|||

加之我买了一个Intel迅驰的蝴蝶无线模块->Wireless 2200BG 加之买了两个天线~~~哇哦!爽飞起来了!无线上网嘿嘿。

但是本来装在底部的无线网卡我就把天线连接好就一起丢在了那个底部黑漆漆的槽里了,结果出了房间没信号了=。=|||

于是乎根据网上的拆机贴,把屏幕卸下来把天线安装到屏幕边缘了,发现信号出奇地好,竟然莫名其妙多收到了4个无线信号……嘿嘿,以后偷偷上!

开心ing……

Tags: [ , ] - Comments: View Comments
by agate - Published: 2008-05-10 [6:34 上午] - Category: 软件使用

Eclipse is a global community. It is in everyone’'s interest to ensure that Eclipse is available and translated in as many locales as possible.

Babel will be a set of tools to make the job of globalizing Eclipse projects easier. We also want to provide ways for people world wide, who are interested, to contribute translations in their language of choice.

The project will include tools and activities that are needed to adapt the Eclipse deliverables to properly run in multiple locales and to translate selected Eclipse projects into multiple different languages (French, Japanese, German, etc). The project could eventually include tools to aid in the following areas: Enablement testing (E.g. can the software run in different language environments and handle multiple scripts, etc.), translatability testing (is it ready for translation?), preparation for translation (preparation of resource bundles), Translation testing (Is the translation acceptable?), and more.

So, visit the url : http://www.eclipse.org/babel/ for more information.

Tags: [ , ] - Comments: View Comments
by agate - Published: 2008-05-01 [9:42 下午] - Category: 程序编码

不知道各位使用 Struts1.x 的朋友们晓得不晓得,Struts1.x 的 org.apache.struts.action.Action 中有两个 execute 方法,在我们使用 eclipse 的自动完成 override 功能的时候要是不小心给弄错了你就等着迎接一个不报错的空白页面吧!让我们看看代码:

// one execute
public ActionForward execute(ActionMapping mapping, ActionForm form,
	HttpServletRequest request, HttpServletResponse response) {
	//code...
}
// another execute
public ActionForward execute(ActionMapping mapping, ActionForm form,
	ServletRequest request, ServletResponse response) {
	//code...
}

好,公布结果!只有 override 上面这个 execute 才能起作用。如果你 override 的是下面这个 execute 的话,很不幸,您调用这个 action 的时候响应给你的是一个空白的页面,你也别想得到任何 exception 的提示!

在 eclipse 中我导入了 struts1.x 的 src 路径,并通过 Open Call Hierarchy 查找调用上面第二个 execute 的类时发现竟然没有调用者!换句话说当我们实现第二个 execute 的时候(没有实现第一个 execute ),是根本没用的!程序根本不会调用到我们 override 的那个 execute 只会傻傻地调用第一个 execute 的默认实现,返回一个 null

那第二个 execute 有什么用呢?我觉得他不是用来给我们重写的,看看它的内容:

public ActionForward execute(ActionMapping mapping, ActionForm form,
	ServletRequest request, ServletResponse response)
	throws Exception {
	try {
		return execute(mapping, form,
			(HttpServletRequest) request,
			(HttpServletResponse) response);
	} catch (ClassCastException e) {
		return null;
	}
}

在我看来,其实它是为了当一个请求是一个非 http 请求的时候,作为一个前端转换器,重新包装请求和响应,然后才交给真正的,也就是我们的第一个 execute 方法来实现。这个从 src 的注释中我们也可以比较清晰的了解:

Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic. Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

所以……当你重写这个 action 的 execute 方法时,注意咯!是重写那个参数是 http-request/response 的 execute哦!!!

这里严重鄙视一下 struts1.x 的编码态度!

Tags: [ , , , , , ] - Comments: View Comments