That TDD Fellow | Tech Blog | Screencasts

Let’s stop fearing our own creations and start being in control of them. Let’s be professional.

Websocket Using Ruby and Nodejs

| Comments

在看HTML5高级程序设计时,简单的了解了一下websocket, 然后做了个简单的demo 服务端用ruby实现,结合em-websocket这个gem,客户端使用的是nodejs的ws这个插件。

require 'em-websocket'

EM.run {

EM::WebSocket.run(:host => "0.0.0.0", :port => 8080) do |ws|
        ws.onopen { |handshake|
puts "WebSocket connection open"

  # Access properties on the EM::WebSocket::Handshake object, e.g.
  # path, query_string, origin, headers

  # Publish message to the client
  ws.send "Hello Client, you connected to #{handshake.path}"
}

ws.onclose { puts "Connection closed" }

ws.onmessage { |msg|
  puts "Recieved message: #{msg}"
  ws.send "Pong: #{msg}"
}
  end
}

客户端使用的是ws, 安装方法,

    sudo npm install ws -g

    wscat -c ws://localhost:8080

连接之后,就可以相互通信了。

以后在添加网页上互动的例子

to be continued….

短网址解析功能(使用ruby和shell)

| Comments

上twitter的时候,经常发现一些链接,点进去之后,链接到一个短网址,而因为一些原因,这些短网址没法解析。为了解析短网址,需要去一些专门的网站,贴上地址,点击解析,然后才能看到网址的真正面目。过程不复杂,但是经常这样很烦。今天终于不甚其烦,想写个shell命令,实现这个解析功能(当然是调用别人的已有的api完成此事)。无奈,shell不是很熟悉,写bash脚本尚有些难度,只好把ruby搬出来了,ruby与shell可是好朋友啊。

功能很简单,脚本也不复杂。

    require 'rubygems'
    require 'httpclient'


    API_URL = "http://imbolo.com/unshortenurl/api.php"
    def unshorten(url)
       url = 'http://' + url unless url.start_with?('http')

       puts "Debug: url => #{url} "

       start_time = Time.now 
       res =  HTTPClient.get(API_URL, {:url => "#{url}"})
       end_time = Time.now
       puts "Debug: status => #{res.code}"
       puts "Debug: time costs #{end_time - start_time}"
       res.body
    end

    result = unshorten(ARGV[0])
    if result =~ /^http/
       system("open #{result}")
    end

可以看到,调用的是 http://imbolo.com/unshortenurl/api.php 提供的api,参数只需要url即可。代码很简陋,且没有异常处理,但基本上能满足我个人的需求。

要在终端中能调用需要另外做两件事情。

1、给文件执行权限

chmod +x unshorten.rb 

2、在.bash_profile或者.bash 文件中添加

alias unshort='/usr/bin/ruby /Users/wenleslie/unshorten.rb'

source一下文件,就可以在终端中执行ruby代码,并且打开相应的页面.

How to Uninstall Global Bundler Under Rvm?

| Comments

之前经常遇到这样的问题:

Fetching gem metadata from http://rubygems.org/.........
Bundler could not find compatible versions for gem "bundler":
In Gemfile:
    rails (= 3.0.1) ruby depends on
      bundler (~> 1.0.0) ruby

Current Bundler version:
    bundler (1.
This Gemfile requires a different version of Bundler.

估计就是安装了好几个版本的bundler,而当前项目需要的不是当前版本的bundler,因此产生了这样的问题,解决办法是bundle的时候,指定所需要的版本,比如1.0.22

bundle _1.0.22_ install

但是每次部署都这样也不是办法,特别是时间一长,有些操作都忘记了,那时候就特别头疼。

今天在stackoverflow上看到别人提的这样一个问题: Rvm: Cannot uninstall bundler 1.1.0,终于明白了问题的关键在于

    *it is because gems are also installed in global gemset, and you can uninstall it using:*


    rvm @global do gem uninstall bundler

rvm下有个全局的 bundler,把它卸除就ok了。。。

Firefox and Go Agent in Mac

| Comments

我现在采用很暴力的手段解决ssh证书问题(也是firefox上使用go_agent的唯一问题),方法如下:

1、删除之前所有的文件,包括证书 2、在钥匙管理中,添加新生成的go_agent的根证书 3、在firefox的advanced/encyption/ view certificates 中,添加根证书

注意: 不需要自己手动添加每个需要证书的网站,比如twitter,youtube等