2012-01-11

[rails] uninitialized constant MysqlCompat::MysqlResの対処法
rails2.3.9とかでアプリを動かそうとすると上記のエラーが出てはまったのでメモ。
周りの人たちはだいたいmac 64bit化したことで起きてたようですが、
当方32bit redhat + ruby 1.8.7とかで発生しました。(mysqlライブラリのバージョンは2.8)
gem install -v 2.7 mysql
とりあえずこれで動くようになりました。
おやすみなさい。
2011-05-27
Notificationsの使い方
html5 | |
FirefoxでNotification を利用できるようになり、(Chromeはデフォルトで実装されてる)今後実装する機会も多くなりそうです。Google先生に聞いてみるとdesktopifyが有名ですが中身を見ると自分で実装した方が早い気がしてます。簡単に以下使い方をメモで残しておきます。
今回確認する用のアプリ
今回はRails 3.1.0rc1で簡単なアプリを作ってみました。
簡単ですが、以下の流れで確認していきます。
- クライアントにデスクトップ通知の確認を実施
- 現状の通知状態を確認
- 実際に通知してみる
クライアントにデスクトップ通知の確認を実施
画面のActivateを選択すると以下のダイアログができてデスクトップ通知を有効にするかどうか確認します。
ここのコードはこんな感じです。(CoffeeScriptです)
$(document).ready ->
$("#activate").live("click", ->
window.webkitNotifications.requestPermission()
)
<button id="activate">Activate</button>
上記のwindow.webkitNotifications.requestPermission()を呼べばユーザさんに確認できます。
現状の通知状態を確認
画面のConfirmを選択すると以下のダイアログができてデスクトップ通知を有効にするかどうか確認します。
ここのコードはこんな感じです。(CoffeeScriptです)
$(document).ready ->
$("#confirm").live("click", ->
alert(window.webkitNotifications.checkPermission())
)
<button id="confirm">Confirm</button>
0がユーザに許可されている状態、2がユーザが拒否している状態です。
実際に通知してみる
画面のNotification!を選択すると実際に通知が表示されます。
ここのコードはこんな感じです。(CoffeeScriptです)
$(document).ready ->
$("#notification").live("click", ->
window.webkitNotifications.createNotification("mail.png", "pochi", "bowbow!").show()
)
<button id="notification">Notification!</button>
showメソッドで表示することができます。
まとめ
jQueryPlugin使うのもいいですが結構簡単に使えるのでそのまま呼び出してもいいかなと個人的に思ってます。以下はなんか注意。。。
2011-05-18
Thorで書いたタスクのテストをする方法
Thorでタスクを書くとそのメソッドが普通のRubyのようには呼べません。それでもやっぱりテストは書きたいのでThorのspecをいろいろ見てたらありました。
# encoding: utf-8 require "rubygems" require "thor" require "rspec" require "stringio" class Sample < Thor desc "name", "sample name" def name puts "pochi" end end describe Sample do it "should display 'pochi'" do capture(:stdout) { Sample.new.invoke("name") }.strip.should == "pochi" end end
2011-05-17
extendの使い方
ruby | |
今まではincludeは全てのインスタンスに対して機能を追加したいときに利用して、extendは特定のインスタンスのみに機能を追加したい場合に使うものと思っていたけどextendはクラスメソッドを追加したいときにも使える事がわかったので、メモしておく。
module ClassMethod def hoge puts "hoge" end end class Empty end Empty.extend ClassMethod Empty.hoge #=> "hoge"
2011-04-14
socket.ioのイベント一覧
昨日からnode.js+socket.ioでチャットアプリを作り出しました。
簡単に作れて楽しいのだけどサーバ側のeventで"message"しか受け取れないのかしらと疑問に思ってどうせならついでにsocket.ioのドキュメントをちょっと見てみました。ドキュメントは4/14日時点のgithubにあがっているものです。
socket.ioって?
シンプルなHTTP Socketインタフェースです。簡単にリアルタイム接続処理をかけるようになります。socket.ioはリアルタイムプロトコルをwebsocketAPIみたいに利用できるのでそのあたりを気にしないとこがいいんだよ。
サポートプロトコル
- WebSocket
- Adobe Flash Socket
- ActiveX HTMLFile (IE)
- XHR with multipart encoding
- XHR with long-polling
- JSONP polling (for cross-domain)
サポートブラウザ
- Safari 4
- Google Chrome 5
- Internet Explorer 6
- Internet Explorer 7
- Internet Explorer 8
- iPhone Safari
- iPad Safari
- Firefox 3
- Firefox 4 (Minefield)
- Opera 10.61
その他
- ActionScriptがプロキシの配下で動かない事がよく知られています。すなわちそれはCONNECT HTTPメソッド経由でアクセスできないことを意味します。このあたりは別の方法を考えようと思っています。
- 接続に成功した場合、そのプロトコルはcookieに保存され、次回アクセス時に利用されます。
注意
もし別ドメインからswfファイルを受け取る場合 WEB_SOCKET_SWF_LOCATION は別の不安定バージョンを利用してください。
<script>WEB_SOCKET_SWF_LOCATION = '/path/to/WebSocketMainInsecure.swf';</script>
Documentation
io.Socket
new io.Sokcet(host, [options]);
options:
- secure
false
https使うときはtrueなんだとおもう
- port
Current port or 80
socket.ioサーバが利用するポート(default: document.location.port)
- resource
socket.io
どんなHTTPサーバでもリアルタイムでないリクエストを受け付けたままsocketリクエストを受けれるようになります。
- transports
['websocket', 'flashsocket', 'htmlfile', 'xhr-multipart', 'xhr-polling', 'jsonp-polling']
プロトコルリスト。
- transportOptions
{
someTransport: {
someOption: true
},
...
}
プロトコルごとにオプションを設定可能
- rememberTransport
true
接続したプロトコルを覚えておくかどうか(cookieを利用)
- connectTimeout
5000
millisecでかく
- tryTransportsOnConnectTimeout
true
connectTimeoutが発生したときに別プロトコルで接続するかどうか
- reconnect
true
接続が切れたときに再度接続しにいくかどうか
- reconnectionDelay
500
サーバに再度接続しにいくときにまつ時間
- maxReconnectionAttempts
10
接続の試行回数
Properties:
- options
デフォルトのオプションを見る。
- connected
サーバと接続されていたかどうか(true/false)
- connecting
サーバと接続されているかどうか(true/false)
- transport
どのプロトコルで接続しているか
Methods:
- connect
接続を実施
- send(message)
文字列データをサーバに送る
- disconnect
接続をきる
- on(event, λ)
listenerイベントの登録
- removeEvent(event, λ)
eventからλ処理を削除する
Events:
- connect
接続が確立されたとき
- connecting(transport_type)
引数で指定したtranport_typeでの接続に失敗したとき
- connect_failed
connectTimeoutによって接続失敗されたときに発生するイベント。
tryTransportsOnConnectTimeoutを設定していた場合全てのtransportに失敗した場合のみ発生する。
- message(message)
サーバからリクエストがきたとき
- disconnect
接続が閉じられたとき
- reconnect(transport_type, reconnectionAttemps)
接続が再び確立されたとき
- reconnecting(reconnectionDelay, reconnectionAttemps)
- reconnection_failed
。。。
messageの中でがんばれってことか。まぁそうかという気もしてきた。
[追記]
見逃していたけど本家のページにNode.js以外でも動くって書いてある。
対象は以下。
- Python(tornard)
- Java
- Google GO
- Rack
ruby動きそう!



