卢国峰

Do Whatever U Like Without Evil =>To Be A Ruby Geek - Fashion - Function

Recently小记

| Comments

最近各种没状态,我的Rails学习落下了不少,主要是胃病来袭外加一些校内的揪心事。哎,说到底,还是我还不会调整状态。一有什么较为棘手的外部因素就立马各种没状态,定不下来学习!

前几天开始着手写公司的论坛,在本地跑的时候,日志文件显示,居然每个请求都执行两次,各种不能找到问题根源,偶然间换了firefox(原本是chromium),这一跑居然正常了!!!想来chromium为嘛会跑出这样的bug呢?尝试关闭插件,最终发现,罪魁祸首居然是之前安装的“Web Technology Notifier”插件。好吧,就这么个小玩意让我蛋疼了两天。

小胃又折腾我了,每次看好了(可能只是治好标了)一个小小的放纵就估计又要悲剧了。这次貌似比往前两次要严重了些。Y,想起那天冒着大暴雨在威尼斯版妖都的大马路上艰难前进的求医…或许,以后必须一切以自己的胃为优先考虑。好吧,我每次都这么对自己说,却貌似没坚持得了多久。

目前我最需要的应该是静下心来,整理好思路…

还有就是必须学会的调整,事情无法改变的就别想太多。无论什么事情,什么时候,能轻易地控制自己的思维不跑调!

ubuntu12.04 and Rails

| Comments

昨晚,把ubuntu升级到了12.04,其实,对我目前的使用来说,系统是否升级几乎没影响。不过看着更新管理器冒出了新版本,反正也就按几个下的功夫,于是就升上去了。

新版本多了首先感觉感觉性能上貌似快了些许,不多…另外对我而言直观的体验是launcher,之前的launcher也太敏感了,不过现在这倒是太呆板了,有时想要却不出来。不过桌面状态下不显示这点我比较喜欢。(以前也可以设置?不知道,木有研究)

另外alt键貌似上边会冒出个可输入命令行的,目前还木有发现其实际作用。

好吧,其实,我对这些改进啊有的没的还不怎么敏感。所以与其要看我介绍新功能新特性还不如直接搜索。

我敏感的只是,我的一些rails项目都跑不动了。passenger报错

1
2
Error message:
libmysqlclient_r.so.16: cannot open shared object file: No such file or directory - /home/xguox/.rvm/gems/ruby-1.9.2-p290@rails/gems/mysql2-0.3.11/lib/mysql2/mysql2.so

我还以为是我缺少了libmysqlclient_r.so.16这个文件,自己下载了之后也还是不行。期间尝试重装mysql,也试过之前说的那个,安装各种组建的命令还是无果。最终在ruby-china得到大神指点,居然只需卸了重装mysql2这个gem就可以了。貌似是因为/usr/lib 下的mysql2.so没有link到gem里边的mysql2.so 过后,还是跟往常没有多大差别的继续Rails…

Rails中try的用法

| Comments

居然今晚才发现Rails中try的用法,初一看,怎么那么像印象中某些语言的异常处理?不对啊,ruby中的异常处理不是长这个样子的。 查了下rails的API才了解了大致用法。

API:

不使用try的时候是

1
@person && @person.name

需确保@person不是nil,否则会报错

1
NoMethodError: undefined method `name' for nil:NilClass

如果用try的话

1
@person.try(:name)

如果@person为nil则返回nil而不是报错

另外,try还可以接收block作为参数,

1
2
Person.try(:find, 1)
@people.try(:collect) {|p| p.name}

漏了一句,API开头就说了,像常规的ruby的Object#send 那样工作 看了下源码,貌似是利用了send实现的。最近在研究ruby的元编程。

My VIM Config

| Comments

其实前不久就要写挺多东西的,只是忽然间事情就集中的涌了过来,状态没调整好,也就耽搁了些。之前是直接使用网上高人的vim配置以及插件,发现有很多自己也用不上,而且自己东添西改了之后就变得更臃肿了。于是,杠杠的重新整理.vim&.vimrc

首先是配色方案,可能是我的屏幕分辨率比较低的缘故,感觉好几个自带的配色方案挺不错的,但是相对却比较模糊。最后发现,fruity的那个配色比较好一些(主要是没有那种模糊感),不过配色方面不咋滴,于是自己在fruity.vim里头东改西改,最终个人感觉还不错。

and then就是一些插件了。目前主要是做Rails开发,以下几个插件是我较常使用到的: NERD treesnipMatectrlpctags

NERD tree主要提供的是树型目录结构(如上图左),它的功能不仅这一点,丰富的多了,不过我感觉最强大最常使用的还是书签功能。简单的一个:Bookmark 命令,以后就不用一直在目录下跳转啊跳转

snipMate则是一个代码补全的插件,比如在controller下输入rp然后按下tab会直接输出

1
render :partial =>  "item"

在view里边输入rp然后按下tab的话则会直接输出

1
<%= render :partial => "file" %>

在view下使用都会智能的为你添加上<% %>或者<%= %>

补充一个,delimitMate,这个貌似也是一个补全代码的插件,不过我是作为snipMate的补充来用的,因为snipMate标点符号不会自动补充,比如输入 { 不会自动显示 }

很多人都说这类插件会阻碍学习熟记代码什么的,不过我是觉得,既然能方便、快速编写代码,何乐而不为呢,再说并不是所有的代码都自动补全(那就不用开发了),这个阻碍并没传说那么大吧。

ctrlp 个人比较依赖的一个插件,快速打开你想要的文件,这对于Rails这种MVC框架来讲是灰常有帮助的。印象中Sublime Text同样的功能也是ctrl+p这个快捷键组合。

ctags 在根目录下使用命令ctags -R后会创建一个tags文件,之后,你可以轻易地通过ctrl+]跳转到某个方法定义的地方。不过要提的一点是,一般的项目都能正常运行,但是我发现在公司的大项目下这个功能貌似有点问题,经常跳转不成功,不知道是否因为太多子目录的缘故。

另外说个rails.vim,很多人都强烈推荐这个插件,不过装上后目前没发现什么功能是我特别需要的。

最后就是配置文件。默认字体,大小等等一些基本设置。

好吧,有兴趣的童邪直接往我的github看过来吧,我把.vim挂上去了。

Two Weeks Withs Rails

| Comments

并不是我刚开始接触Rails两周,而是这两周我才能真正的算个入门吧。虽然学校有教C与Java,但就像我之前所说那般,其实Ruby才是我的first&major。

为嘛说这两周才算真正的入门呢?自认为自己不是什么学习能力超常的人。但是我觉得,一般人能做到的,我也能做到,一般人难以做到的,maybe我加多几把油也能做到。

从去年10月开始接触ruby,看完《Ruby编程语言》就开始《Ruby on Rails Tutorail Learn Rails by Example》期间也交替翻翻AWDWR中文第三版和英文第四版。前不久的Github被爆事件,那会让我郁闷了好一会,看着社区上好多人在议论纷纷我却什么都不懂。仲使我再关注又如何。直到好久之后才通过各种奋力查资料知道Mass Assignment究竟是怎么回事。

在这两周之前,我的Rails知识点很杂乱,大概是因为我的学习习惯吧。通常都是一般般懂的把整体过一遍,再回头逐个细细推敲。但是,这个整体过一遍的度把握的不太好,于是…在此之前,我能不用对着官网那个guide搭出同样的博客,但是我之所以能搭出来只是因为我把那些步骤很纯粹的记住了,这一步做完大概下一步要做啥死记了。呃,有时候发觉自己的记忆能力还不错下。

这两周,我想很大原因是有大牛指导着吧。前一周,我做好各种被拒绝的心理准备决定出去找一些用rails的公司实习,但是很幸运的是,我的第一次面试就成功了。(PS:其实很疑惑为什么会招我,很明显的我并不是个牛X的Railser,当时的笔试题目貌似我答出来的也就一半那样吧;并且,在某网站上我发现我们的头头回复一名求职的实习生时说只招全职之类的。)

相较之以往,如今,我的学习也比较系统一些。虽然在多表关联那一块运用还不太熟练,但Rails的MVC结构算是基本搞明白了。以及很多helper,route,也基本懂了。另外,我们的头头总喜欢问我们一句,有没更好的方法。每次我都只把这个更好的方法了解一半,彻底钻研的精神还不够啊。结果每次都不是最好的方法。泪奔啊…让头儿失望了。

不过有点小悲催的是,公司的VCS一直都是用SVN,而我只熟悉Git,呃,也不叫熟悉吧,要是我真的了如指掌了一定力劝公司改用Rails。

这两周固然很多以前模模糊糊的都理解了。不过我想,要是没有以前的缓慢前进,也不会有这两周的成果呢?

记得那次面试时候我发现我最大的缺点并不是基础不牢什么的,而是我的学习时间的分配以及计划没有安排好。我每天除了睡觉吃饭等等几乎就是学习Ruby/Rails相关,但其实我的效率可以说是比较低。

哦,还有一个应该算是进步吧,编码的规范。以往只是自己练习写的代码各种凹凹凸凸…现在都会注意那些空格换行等等格式了。

虽说是进步了不少,但是,公司的代码看起来还是挺吃力的。能不吃力嘛,动不动一个model类或者view页面就5~600行。也不知道几个月的实习下来我能熟悉几成。

Something in Google Plus

| Comments

忘了从什么时候开始g+貌似不用翻墙就能上(貌似我一直都要开着VPN才能上),也逐渐的有了不少的国人开始登陆到这片“新土地”。其实不管g+上的国人多了少了怎么的,都跟我没一毛钱关系。但是,当我发现奥巴马的g+页面下的那某一些无聊,幼稚,低级的中文评论时…呃,好吧,其实也跟我也没啥关系。但是,那种侵占式地发垃圾评论,别说是外国人。即使是作为中国人的我都真看不下去了。

当然的,在上面宣泄下天朝的某一些不开放的制度,某一些腐败没什么,或许我还会+1,因为这些在国内社区一般都是被各种封杀。但是,我却发现更多的是一些,比如,什么“广告位招租”“xxx我爱你”“求绿卡”更有甚者居然还能在那评论上吵起来。哎…

嗯,我还是那句,在那发些水帖烂帖脑残帖压根不关我事,我也没有权利去阻止、禁止你们。但是,请这些发帖者知道一点,那样的行为只会让中国人的素质在全世界的眼中又大大的降低。当然,或许又会有人要说,“别人眼中的中国人素质怎么样关我蛋事”云云…嗯,的确,也不关事。所以,我在这写这篇东西喷这写脑残也不关谁的事。只是真心希望你们把那些一点营养都没的发言换成有意义些的。别浪费了一个相对来说能让你们自由发言的地方

我想,如Google再不采取点措施,这样下去只会让g+逐渐沦落。

DRY

| Comments

从刚接触Rails开始就被灌输三种观念—–DRY、COC、REST。虽然这三种思想还没完全的领悟透彻,但是,已经感受到了它们的强大之处。

目前印象最深刻的则是DRY。最近在跟着Ruby on Rails Tutorial学写一点Rspec测试。这种感觉又更强烈了。看着下面代码一步步的减少,感慨DRY的思想无处不在啊。这里只是一个Example可能感觉不到什么,但是当Example多了而且几乎都在测试同一样东西的时候,优点不言而喻。

1
2
3
4
5
6
7
8
9
10
11
12
describe "Home page" do
    it "should have the h1 'Sample App'" do
      visit '/static_pages/home'
      page.should have_selector('h1', text: 'Sample App')
    end

    it "should have the title 'Home'" do
      visit '/static_pages/home'
      page.should have_selector('title',
                        text: "Ruby on Rails Tutorial Sample App | Home")
    end
  end
1
2
3
4
5
6
7
8
9
10
11
12
describe "Home page" do
  it "should have the h1 'Sample App'" do
    visit root_path
    page.should have_selector('h1', text: 'Sample App')
  end

  it "should have the title 'Home'" do
    visit root_path
    page.should have_selector('title',
                      text: "Ruby on Rails Tutorial Sample App | Home")
  end
end
1
2
3
4
5
6
7
8
9
10
11
12
describe "Home page" do
  before { visit root_path } 

  it "should have the h1 'Sample App'" do
    page.should have_selector('h1', text: 'Sample App')
  end

  it "should have the title 'Home'" do
    page.should have_selector('title',
                      text: "Ruby on Rails Tutorial Sample App | Home")
  end
end
1
2
3
4
5
6
7
8
9
subject { page }

  describe "Home page" do
    before { visit root_path } 

    it { should have_selector('h1', text: 'Sample App') }
    it { should have_selector 'title',
                        text: "Ruby on Rails Tutorial Sample App | Home" }
  end
1
2
3
4
5
6
7
8
subject { page }

  describe "Home page" do
    before { visit root_path }

    it { should have_selector('h1',    text: 'Sample App') }
    it { should have_selector('title', text: full_title('Home')) }
  end
1
2
3
4
5
6
7
8
9
10
11
12
shared_examples_for "all static pages" do
    it { should have_selector('h1',    text: heading) }
    it { should have_selector('title', text: full_title(page_title)) }
  end

  describe "Home page" do
    before { visit root_path }
    let(:heading)    { 'Sample App' }
    let(:page_title) { 'Home' }

    it_should_behave_like "all static pages"
  end

其实,Rspec只是Ruby写的测试框架。但是,目前rails程序上写测试用的最多的还是Rspec吧。而在Rails中,最直观的运用到这思想的应该是helper、partial了吧。把好几个view的重复代码。整合在一个partial下。代码量的减少不言而喻。减少了出错的几率。修改重构起来方便很多。

当然DRY的思想绝不仅仅在于这一点点。不然国外也没那么名著专门描述它。

昨天刚从一位网友也可以说是Rails学习道友那买了本打印版的《Agile Web Development with Rails,Fourth Edition》。在跟这位道友面交的时候他不断地鼓舞我,即使到最后用的人寥寥无几也要坚持 Rails下去,坚持它的思想。其实,不用他跟我说我也会坚持。不然,我不会在学校开展JAVA课程的时候自己那么寂寞的跑去学Ruby/Rails。只是他的一番话的确对我又有了不少的鼓舞。他不断地说我和年纪就接触这么新的语言框架什么的,其实,我更感慨敬佩他比我大了15~6岁还那么有power学习这些新事物。

OK,扯远了,Over

Ruby/Rails.note

| Comments

把平常中一些开发出错以及解决方法记录了下来,其实,基本上都是Google或者StackOverflow得到的答案。然后有些都不知道问题的根源,只知道个解决方法

*

1
2
Issue--
  RVM is not a function, selecting rubies with 'rvm use ...' will not work.
1
2
3
Solution--
  添加下面这句到  ~/.bashrc
  [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"重启终端

*

1
2
3
4
5
6
7
Issue--
  Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
  .
  .
  An error occured while installing mysql2 (0.3.11), and Bundler cannot continue.

  Make sure that `gem install mysql2 -v '0.3.11'` succeeds before bundling.
1
2
Solution--
sudo apt-get install libmysql-ruby libmysqlclient-dev (Ubuntu)

*

1
2
Issue--
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
1
2
3
4
Solution--
Just install execjs and the rubyracer in your gemfile and run bundle after.
gem 'execjs'
gem 'therubyracer'

*

1
2
3
Issue--
>Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "database"=>"o_p_", "pool"=>5, "username"=>"root", "password"=>nil, "socket"=>"/tmp/mysql.sock"}, charset: , collation:
1
2
Solution--
host:127.0.0.1(diff??localhost)

*

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Issue--
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

/usr/bin/ruby1.9.1 extconf.rb 
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
--with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
* extconf.rb failed *
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.


sudo apt-get install libpq-dev

sudo gem install pg
1
2
3
4
5
Solution--
sudo apt-get install libpq-dev
sudo gem install pg

#貌似跟之前那个mysql的问题有点像
1
2
除了系统的ruby文件可以用相对路径,自己编写的ruby文件如果要require的话需要用绝对路径。否则会报错no such file to load .
而load则无论什么ruby文件都可以用相对路径加载

Travel Photo Code

| Comments

原本这是一篇记录我从第一天开始这次厦门义工行的流水帐文章。然后,前几天的一次重大失误导致我的硬盘全部东西都没了。没错,全部…

于是,就这样变成了现在这篇。

1月29号,一张让人蛋疼的硬座票,一台还未完全驾驭的单反,一颗不知道是喜欢宅还是不宅的心,一个人,从妖都来到陌生的厦门。

今天,我又拽着一张让人蛋疼的硬座,还是那台单反,还是没搞懂我到底是宅还是不宅,还是一个人,从有那么些熟悉的厦门回到妖都。

我是来这旅行的,同时,我也是来这里当工人的。幸运的是,客栈的老板都是好人。至少不会苛刻。再加上现在是淡季,客栈每天也没什么事让我这义工去干。

但是我的旅行却有点跟意料的不一样。原本是想一个人独自去体味鼓浪屿的风骚和冬末春初的海、以及与妖都相似又不太似的那些街道…只是,中途来了两波朋友。于是,我就成了专业的三陪。不过,最后我还是自己一个人实现了独行的愿望。毕竟呆了一个月,这点时间只要我想,还是有的。

O,我忘了说还是那个路过无数次进去N次的厦大。厦大是个好学校。只可惜。没福气来去那儿读书。这一个月以来拍的那么多相片,最喜欢的那几张都是在厦大拍的。其他的时候,我大多数是把单反当成卡片机在记录,尤其是第一波朋友来的那时。

我更喜欢拿着来到这边才败的那个55-250扫街。嗯,虽然是个狗头级的长焦,但成像已经足以让我兴奋一阵子。这还是在我没好好利用的情况下。

在这边认识了些人,也因为我不是善于交流的人,所以不多。来来去去也就那么几个。很多人在豆瓣上发帖互相串门,也不知道究竟有多少是真的互相串过了。反正我没…相反,我有不少时间是宅在客栈里头,对着我的那些code。

整个义工生活还是很不错的。真的…只是,期间的某些小插曲让其失色不少。因为这些插曲,我甚至有想提前回去的冲动。只是,因为说好了做到26号,为了我一向纠结的所谓的善心,我坚持下来了。

其实,我们20号就开始上课了。也就是说,我已经逃了一个礼拜的课了。不过,即使我回去了…只是,我居然想念洞里的那些人那些事了…

这一个月让我游览了厦门最美丽的这一带,让我结识了很多新朋友(不管是否深交,我相信你们也会把我当朋友的),让我见识到一些人情事故(我也不知道有没有学会处理好)。而我,也利用这一个月的时间继续学习ruby/rails。再进一步的了解rails的MVC结构,以及对Rspec的一些认识,但还没掌握好…

或许还应该感谢上一次的硬盘崩溃,让我舍去一些我应该舍去却没有舍下心舍去的东西。还在这一个月想了一些我的未来。但是,却让我有点小小的矛盾。我心中总会冒出一些小小的创业点子,其实是上大三以来就开始了,正在逐渐具化。但,其实我更愿意简简单单的当个黑客。(我不知道要不要注明些什么,或许没有读过《黑客与画家》的人会有所误解),这样,我就不用费心去管理经营。但是,我不用心去管理经营,我会觉得我对不起那些点子,那样,如果不好好干,我还是情愿它永远埋藏在我心中,这样,的话,它能够随着我的想象去变化,而不是随着现实…

最后一晚在曾厝垵

| Comments

这是最后一晚了,一直都有记流水帐日记的习惯,包括从来到厦门的那一天起,只是,前段时间的那个悲剧让我之前的记录都泡汤了。但是,今晚让我感觉,那些流水帐没了也没啥,或许更好些。

到处串村子,去下小酒吧,跟客人聊聊天…

打从我来那天,就有听到“晴天见”这家店的名字,只是很不凑巧,我去了几次都没开门,刚好开门的那些时候我没心思去。于是,等到最后一晚在曾厝垵的时候我就去了。

厦门不缺这些文艺的店铺,曾厝垵也一样。在客栈跟客人聊了聊天后我一个人来到了这个传说中的小酒吧。

坐下后要了杯山茶酒就一边发呆一边喝着,用了很多息的时间慢慢地打量着周围。这是一个很繁杂的地方。纷乱的吧台上吊摆着各式各样的酒杯,和酒。周围充斥着酒味和烟味(这不就是酒吧该有的?)还有客人三三两两不理旁人的大声聊天。当然,我也属于那个不理旁人的发呆者。尽管与我只有一拳相隔的两侧都有人在大声地聊,我依旧可以很投入地望着某样东西走神。

把那杯山茶酒喝完后我又要了杯苦艾。相比起山茶酒,这苦艾更称得上酒这个字眼吧。若不是喉咙还感觉到一点点酒烧的感觉,或许我还会以为山茶酒只是一杯不知名的普通饮料。 我不喜欢苦艾进口那瞬间的感觉,但是我喜欢过后残存在嘴里的余味。

偶尔一口含着喝着想东西,期间,我左侧一拳之隔的那位似乎是来自厦大的短发豪放女子在不断求醉买酒。后来,女掌柜的推荐了一种名叫琥珀的,原名就不知道是什么了。还递上一杯冰水,教她:先喝一口冰水,抿一小口,含在嘴里…咽下……

虽然我跟这两位豪放女子很陌生,但是,可以看出她们俩的性格很像。

然后,又听到右侧一拳之隔的一对不知是否情侣的在大谈爱情,他们是没醉的,但是喝了不少,借着微晕说话也有些大声了。“你到底爱不爱我?XXXXXX”当时也没太留心听,所以没记着了。

嗯,我开始注意起旁人的说话了,所以,我发不了呆了,应该走了。

其实,喝酒没什么特殊情况没必要喝得烂醉吧,只要氛围可以,只要你想,少量的酒也能达到所想要的那种状态,或许效果更好,就像隔壁那对,我想,他们要是再喝下去会过了。当然,或许过了才是他们要的。好吧,就算不考虑身体原因,我的确也不是个有多大酒量多会品酒的人,所以,我走了。

我想,这应该就是我来这里将近一个月所想要的过活。只是,直到即将离开的今晚我才过上了。去串门去溜达去酒吧去发呆去聊天…