又用回了ruby 1.8.7
因 1.9.1 装载gem的速度只有1.8.7的1/2~1/3。:(
自上次关注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?
同样都是源码编译,参数也都一样,
一、异常
| 名称 | 描述 | 相当于 |
|---|---|---|
| $! | 捕获的异常 | 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选项开启则为真 |
目标:通过本文章学习并编写一个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、桌面操作系统用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打“你好”,思维过程是
1、左手无名指第一排,左手小指第一排,食指下面一排2个
2、 然后翻译成 wqvb
3、 再映射到Dvorak键盘 中指下面一排,无名指下面一排,无名指下面,食指下面
因为有了1这个过程,所以很难全部Dvorak化至少很长一段时间。
这就是母语和第一外语的区别啊。
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
附:测速地址
程序员专用的键盘布局。提高打英文的速度:
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之路是否有前景。
运行命令:
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;
现有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、完成
近期评论