又用回了ruby 1.8.7

2010年3月26日 没有评论

因 1.9.1 装载gem的速度只有1.8.7的1/2~1/3。:(

分类: 闲聊 标签:

开始使用ruby 1.9.1了

2010年3月24日 没有评论

自上次关注ruby 1.9 stable到现在已有13个月(ruby稳定版已更新为1.9.1-p0)
到现在的p376 经过376个版本的考验,加之众gems的完善,是时候更新了。

其中最中意的更新为允许,可惜的是若以这种写法的代码就不兼容1.8了。
{foo:”bar”} 形式写hash

最不满意的更新为由字符默认识别由US-ASCII代替UTF-8,弄得许多文件都要挂个
#encoding:utf-8
—-
有点头疼,1.9.1的rails启动时间是1.8.7的一倍
若有如下代码foo.rb

require 'rubygems'
require 'active_record'
RAILS_ROOT = File.join(File.dirname(__FILE__),"..")
Dir[File.join(RAILS_ROOT,'app/models/*.rb')].each{|file|
	require file
}

time foo.rb
1.8.7 耗时
real 0m0.314s
user 0m0.252s
sys 0m0.049s
% cumulative self self total
time seconds seconds calls ms/call ms/call name
15.12 0.62 0.62 461 1.34 2.21 Array#map
11.46 1.09 0.47 235 2.00 3.15 Array#select
8.54 1.44 0.35 1447 0.24 2.42 Array#each
6.83 1.72 0.28 18931 0.01 0.01 String#to_s
5.85 1.96 0.24 237 1.01 42.57 Kernel.gem_original_require

1.9.1 耗时
real 0m0.728s
user 0m0.586s
sys 0m0.064s
% cumulative self self total
time seconds seconds calls ms/call ms/call name
19.05 0.40 0.40 283 1.41 21.34 Kernel.require
12.38 0.66 0.26 264 0.98 1.55 Array#map
9.05 0.85 0.19 626 0.30 2.59 Array#each
7.62 1.01 0.16 200 0.80 2.80 Module#class_eval
7.62 1.17 0.16 20678 0.01 0.01 Symbol#to_s
5.71 1.29 0.12 346 0.35 0.40 Array#include?

同样都是源码编译,参数也都一样,

分类: 闲聊 标签:

Ruby的预定义变量

2010年3月23日 没有评论

一、异常

名称 描述 相当于
$! 捕获的异常 Exception
$@ 异常的backtrace Exception#backtrace

例:

begin
	raise "err msg"
rescue
	p $! # #<RuntimeError: err msg>
	p $@ #["(irb):2:in `irb_binding'", "/usr/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'", ":0"]
end

二、正则
对于 m=str.match(pattern)

变量 性质 描述 相当于
$& 只读,本地 匹配的项 m[0]
$` 只读,本地 匹配的字符串之前未匹配的部分 m.pre_match
$\’ 只读,本地 匹配的字符串之后未匹配的部分 m.post_match
$+ 只读,本地 最后一个匹配的项 m[m.size-1]
$1,$2 只读,本地 所指定的匹配的项 m[n]
$~ 本地 匹配的结果 m

例:

"start-111-222-333-444-end" =~ /(\d+)-(\d+)-(\d+)-(\d+)/
p $& #"111-222-333-444"
p $` # "start-"
p $' # "-end"
p $+ # "444"
p $1 # "111"
p $2 # "222"
p $~[3] # "333"

三、IO/String

描述 默认 说明
$_ gets,readline最后读入的行
$F $_.split 仅当选项-a为真时
$/ “\n” 用于gets,readline等分割符
$\ nil print与IO.write的分割符
$, nil Array#join的分割符
$; nil String#split的分割符
$. ARGF.lineno
$< ARGF
$* ARGV
$> $defout
$defout print与printf的输出变量,缺省为$stdio
$stdin 当前标准输入 缺省 STDIN
$stdout 当前标准输出 缺省 STDOUT
$stderr 当前标准错误输出 缺省 STDERR

四、进程

名称 描述
$0 当前ruby程序名
$$ Process.pid
$? 最后执行的外部程序的返回状态

四、其它

名称 描述
$: $LOAD_PATH
$” 已require的module,用于避免二次载入
$DEBUG 是否为DEBUG状态, -d –debug开启则为真
$FILENAME $<.filename
$SAFE 安全等级
$VERBOSE verbose选项是开启则为真
$-O $/
$-a -a选项开启则为真
$-d $DEBUG
$-F $;
$-I $:
$-l -lis选项开启则为真
$-p -pis选项开启则为真

分类: 1 ruby/基础, ruby, 编程 标签:

如何编写RubyGems

2010年3月21日 没有评论

目标:通过本文章学习并编写一个gem ‘hello’

一、认识RubyGems
1、什么是RubyGems
RubyGems是ruby下的包管理系统。最著名gem的当属Rails

2、gem的基本文件布局

文件名 类别 描述
gemspec 文件 gem的规范说明。
lib 文件夹 用于lib文件的存放
bin 文件夹 可执行文件
ext 文件夹 c/c++源文件
tests 文件夹 单元测试文件

3、gemspec文件规范常用项

名称 类别 缺省 描述
*name String gem名称
*version String 版本号
*date Time Time.now Gem创建日期
*platform String Gem::Platform::Ruby gems所使用的平台
*summary String gem描述
*require_paths Array ["lib"] 用于require调用时的默认路径
files Array gems所包含的文件

以上为关键的几个选项,其中打*号的为必须的项,若要添加作者,可执行文件等选项可参见Gem规范

3、编译
gem build gemspec文件

4、安装
gem install 生成的gem

二、编写最简gem hello
1、创建文件与文件夹
hello/hello.gemspec
hello/lib/hello.rb

2、编写 hello.gemspec

Gem::Specification.new do |s|
	s.name = 'hello'
	s.version = '0.1.0'
	s.summary = 'hello gems'
	s.files = ["lib/hello.rb"]
end

3、编写 lib/hello.rb

def hello
	"HELLO"
end

4、编译

gem build hello.gemspec

5、安装

gem install hello

6、测试

require 'rubygems'
require 'hello'
puts hello

—-
输出HELLO 测试成功

三、相关链接
1、RubyGems官方网站
2、Rubyforge
2、Gem规范
3、本文的hello gem源码

分类: 1 ruby/基础, ruby, 编程 标签:

好用的非主流软件

2010年3月19日 没有评论

随着电脑使用时间推移,渐渐认识这些被浬没的精华,如今,成了它们忠实的拥护者。

正坚定不移使用的非主流软件:

1、桌面操作系统用Ubuntu,主流的人用Windows
简评:Ubuntu,使用简单,平民化,好用的桌面Linux

2、浏览器用Chromium/Chrome,主流的人用IE/Firefox
简评:Chromium系列,快

3、编辑器用vi,主流的人用Editplus,Notepad,VisualStudio,Eclipse等
简评:vi系列,自定义强,没有最顺手只有更顺手。

4、编程用Ruby,主流的人用Php,Java,C++等
简评:Ruby,简单快捷。但还是无法完全替代php,c++

5、数据库用PostgreSQL,主流的人用MySQL
简评:PostgreSQL,强大。

尝试使用但失败即现已未使用的软件:

1、桌面操作系统用Red Hat
简评:Red Hat用的比较早RH9(上面印的是Red Hat 2004)那大该在04年,当时水平不足用Linux吃力,同时对影音支持不完善,且要玩电脑游戏,还有VC++等,最终放弃而归。

2、编辑器用Emacs
简评:比起vi太笨重

3、Dvorak键盘布局(最近太忙,用Dvorak控制Vim与五笔效率实在是惨不忍睹,等有空再卷土重来)
简评:看上去很美,但习惯不是说变就能变的。

分类: 闲聊 标签:

Dvorak最麻烦的还是用五笔打字

2010年3月9日 没有评论

如用Dvorak打“你好”,思维过程是
1、左手无名指第一排,左手小指第一排,食指下面一排2个
2、 然后翻译成 wqvb
3、 再映射到Dvorak键盘 中指下面一排,无名指下面一排,无名指下面,食指下面
因为有了1这个过程,所以很难全部Dvorak化至少很长一段时间。
这就是母语和第一外语的区别啊。

分类: dvorak, 闲聊 标签:

Dvorak打字速度记录

2010年3月9日 没有评论

3-9
70 points, so you achieved position 199780 of 236761 on the ranking list
You type 126 characters per minute
You have 17 correct words and
you have 0 wrong words
3-9 18:50
90 points, so you achieved position 193999 of 255483 on the ranking list
You type 147 characters per minute
You have 20 correct words and
you have 0 wrong words
3-10 04:23
105 points 26 WPM
3-14 02:34
151 points 211 CPM 39 WPM

3-16~4-7 未使用

4-10 07:26
210 points 283 CPM 52 WPM

4-25 17:48
258 points 341 CPM 65 WPM

5-24 13:19
265 points 358 CPM 67 WPM

8-10 21:10
318 points 415 CPM 74 WPM
注:5个月已回到了到ASDF巅峰水平 http://www.jiangmiao.org/blog/582.html

8-25 17:56
328 points 417 CPM 80 WPM

8-28 01:25
331 points 427 CPM 77 WPM

9-01 14:30
321 points 436 CPM 77 WPM

附:测速地址

分类: dvorak, 闲聊 标签:

开始使用Programmer Dvorak键盘布局

2010年3月9日 没有评论

程序员专用的键盘布局。提高打英文的速度:
http://www.kaufmann.no/roland/dvorak/

目前打字非常吃力,仿佛回到了15年前刚开始学电脑那会儿,特别是用五笔打中文,每分钟不超过6个字。
qwerty 在 http://speedtest.10-fast-fingers.com/ 上的速度是 370~410 CPM 之间
324 points, so you achieved position 11515 of 232742 on the ranking list
You type 418 characters per minute
You have 78 correct words and
you have 0 wrong words
据说 Dvorak比qwerty有30%性能提升,那么使用Dvorak后有望达到500+ CPM。但愿如此。
现在几个小困难需要克服,其中比较关键的是vim的键位要重新适应。
时间证明一切,1周后看看Dvorak之路是否有前景。

分类: dvorak, 闲聊 标签:

PostgreSQL 删除所有函数

2009年12月19日 没有评论

运行命令:

SELECT ns.nspname || '.' || proname || '(' || oidvectortypes(proargtypes) || ')'
FROM pg_proc INNER JOIN pg_namespace AS ns ON (pg_proc.pronamespace = ns.oid)
WHERE ns.nspname = 'public' ORDER BY proname;
可以得到所有函数列表
再依次执行DROP FUNCTION 即可。
分类: PostgreSQL, 编程 标签:

ssh无密码登入设置

2009年11月25日 4 条评论

现有2台机器
1、服务器192.168.1.112
2、个人机192.168.1.110
要使110无需密码通过ssh登入112

步骤
1、创建密钥

miao@u32-192-168-1-110:~/.ssh$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): (忽略)
Enter same passphrase again: (忽略)
Your identification has been saved in /home/miao/.ssh/id_rsa.
Your public key has been saved in /home/miao/.ssh/id_rsa.pub.

2、复制公密到服务器

miao@u32-192-168-1-110:~/.ssh$ scp id_rsa.pub miao@192.168.1.112:/home/miao/.ssh/192.168.1.110
miao@192.168.1.112's password:
id_rsa.pub                                                                   100%  404     0.4KB/s   00:00
miao@u32-192-168-1-110:~/.ssh$

3、添加公密到192.168.112的信任区域

miao@debian-192-168-1-112:~/.ssh$ cat 192.168.1.110 >> authorized_keys
miao@debian-192-168-1-112:~/.ssh$

4、启动ssh-agent
如果ssh 192.168.112返回 Agent admitted failure to sign using the key
ps -Af|agent查看有无ssh-agent有无运行,若没有

miao@u32-192-168-1-110:~/.ssh$ ssh-agent

5、添加id_rsa到ssh-agent

miao@u32-192-168-1-110:~/.ssh$ ssh-add id_rsa

6、完成

分类: ubuntu/debian 标签: