ruby

pryがCtrl-Yでサスペンドしてしまう

Macのターミナル上でRubyのpryを使っている際、Ctrl-Kなどでカットした文字列を貼り付けようとCtrl-Yをタイプすると、サスペンドしてしまうことがあります。ちなみにirbだと発動しません。 $ pry [1] pry(main)> [^Yをタイプ] [1]+ Stopped pry $ これはDSUS…

Open vSwitchやNamespaceの関係図をコマンド一つで描く

LinuxでSDNっぽいことをOpen vSwitchでやろうとすると、BridgeやらNamespaceやらInterfaceやらが増えまくって全貌の把握が困難になってきます。また、なぜかpingが通らないときなど、あっちこっちでtcpdumpして回るのは大変です。そこで、コマンド一つでOpen…

Gmailでプッシュ配信されるメールを取得

Gmailをはじめとする、IMAPのメールサーバ*1から、プッシュ配信されるメールを取得する方法を調べたのでメモ。新規メールを監視してリアルタイムに何らかの処理を実行するといったことが可能になります。使うライブラリは require 'net/imap' まず接続と認証…

12言語polyglotで足し算

CodeIQのコーディングパズルで、同一のソースコードで複数の言語処理系で動作するプログラム(いわゆるpolyglot)として、標準入力からの2つの数を加算して出力するものを書くというお題"hybrid A+B problem"が出ていました。12言語(Bash, Brainfuck, C, CL…

twicliでUser Streaming APIを利用する

twicliでUser Streaming APIを利用できるようにするプラグイン stream.js を実験的に公開しました。 これを導入することで、 タイムラインを数分ごとの更新ではなく、リアルタイムで追いかけることができるようになります。 実験的ということで、不安定だっ…

ロボットボールSpheroをLeap Motionでジェスチャー認識してコントロールしてみた

Leap Motionで手の位置やジェスチャーを認識し、それに合わせてロボットボールSpheroを走らせてみました。手を握った状態から開くと、コントロール開始。 手を開いたときの位置を基準に、前後左右に手を動かすだけで、Spheroを思うがままに走らせることがで…

室温をSiriでコントロール

ボストンに引っ越しました。 こちらのアパートは日本と違って各部屋のエアコンというものはなく、全室空調になっています。その温度設定をするのがサーモスタットと言われているこういうコントローラ。 要するに、室温をセンサで読み取って、設定値より高く …

twicliでUser Streamsを試してみる

現在β版となっているTiwtter Streaming APIのUser Streamsを試してみました。http://dev.twitter.com/pages/user_streamsこれを使うと、Twitterの自分に関する情報(フォロワのつぶやきやDM、follow/remove, RTなどなど)をリアルタイムに通知してもらうことが…

Grass言語用アセンブラ

昔書いたGrass言語用アセンブラwwww in Ruby*1。 http://codepad.org/mSVlTFg3 easyGrass.rbという名前で保存して、test.egというファイルにDSLを書いて ./easyGrass.rb test.egのように渡すと、Grass言語に変換されます。 仕様wwww *1:アセンブラというかGr…

Railsで"404 - Not Found"などのエラーを出すには?

id:NeoCat:20080531ではroutesを設定してURLの形式をデフォルトから変更してURLを短くしました。 が、分かりやすくなった分、ユーザ自身がいじりやすくなり、存在しないidを伴ってコントローラが呼び出されやすくなりました。(というか自分で何回か「そんな…

routesを記述する

Twitterもどき monologue 作成の続き。 id:NeoCat:20080525:1211709039 でconfig/routes.rb を使ってデフォルトコントローラを指定しましたが、もう少し詳しく指定して、短いURLでリソースにアクセスできるようにしてみます。例えば、これまでユーザの情報ペ…

Follow中のユーザの発言をmixして表示する

ではフォロー中のユーザの発言も、自分のタイムラインにmixして表示できるようにしてみましょう。 コントローラの変更 Userコントローラに以下のhomeメソッドを追加します。ついでに、1ページに表示される発言を最大12件に絞っておきます。また、各ユーザの…

ユーザをFollowするためのインターフェース

Twitterもどき、monologue制作の続き。 id:NeoCat:20080528で作ったフォロー機能を使って、他のユーザをフォローするためのインターフェースをユーザ情報ビューに入れます。app/users/index.rhtml の発言フィールドの部分を次のようにしておきます。既にフォ…

Followerの取得

引き続きTwitterもどき「monologue」の作成。 昨日作ったフォロー中のユーザ(followee)の取得に加えて、逆方向、つまり自分をフォローしているユーザ(follower)を@user.followersで取得できるようにしてみます。まずFollowsテーブルからfollowee_idが自分のi…

Followを実装

id:NeoCat:20080525 から作り始めたTwitterもどき「monologue」に、他のユーザのFollow機能を実装していきます。 まずは、ActiveRecordを使ってユーザ間の関連を取得できるようにします。 テーブルの作成 NeoCat:20080525:1211652175 に書いたように、Follow…

その他の変更

以上に加えて、 ログイン/新規ユーザ追加や各ページにリンクを張る 発言時間を「〜分前」という表記に ユーザアイコンやユーザ情報ページの背景色をusersテーブルに追加。ビューにも反映するコードを追加 ユーザ編集画面の追加 (userコントローラにeditメソ…

DIVの枠線を角丸に

ちょっと見た目を改善しよう、ということで、DIVで作っている枠線を角丸にしてみることにします。 画像を使う方法、CSSとJavaScriptで実現する方法があります。前者は色や丸みを変えたりするのが大変なので、今回は後者の方法を使います(画像よりも重くなり…

共通部分を部分テンプレート化

現状ではユーザ一覧表示やログアウト用のリンクなどがないので、いちいちURLを手で打たないとログアウトできません。 また他のユーザを表示させたあと、ホームに戻るリンクも必要です。単純には <div id="control"> <strong>Welcome, <%= current_user.login %> </strong> <%= link_to "ホーム",</div>…

ユーザ一覧の表示

上記の最新ステータス取得方法を使って、ユーザ一覧を作ります。登録されている全てのユーザを一覧表示してみます(本当は上限を決めてページで分割しないと、ユーザが増えたら大変なことになりますが、後回し。)まず、Userコントローラに以下の list メソ…

ActiveRecordでユーザの最新の発言を取得する

id:NeoCat:20080525に引き続き monologue (Twitterもどき)を作っていきます。 特定のユーザの最新の発言を取得するにはどうすれば良いでしょうか。 まず思いつくのは、そのまま「あるユーザのステータスを日付順に並べたときに、一番最初のもの」と記述する…

デフォルトコントローラの設定

URLにいちいち user を書くのが面倒だなあという気がしてきたし、http://localhost:3000/ でアクセスできるようにしたいところです。 この設定は、config/routes.rb で行います。 もとからある「map.connect '' 〜」のコメントを外し、以下のようにデフォル…

Statusコントローラを書く

Userのindexビューに発言用のフォームを作ったので、これを受理して発言をユーザに追加登録するコントローラを書きましょう。まず、コントローラのひな形をgenerateします。 % script/generate controller statusそして、app/controllers/status_controller.…

flashを表示できるようにする

AdobeなFlashではなくて、ページをリダイレクトしたときにメッセージを伝達する仕組みがflash。 この辺が詳しい。 実は既に flash[:notice] = "You're logged in" とかいった設定がaccountコントローラ内で自動生成されています。 これを表示するようにして…

ユーザ情報のビューを作成

app/views/index.rhtml を編集し、次のようにします。ログインした状態で http://localhost:3000/user/ を見ながら、どんどん書いていきます。発言内容のフォームもまだ機能しませんが、書きます。 <div id="left"> <% if current_user == @user %> <div id="update_status"> <p><% form_for :status, </p></div></div>…

全体レイアウトを作る

先ほど生成されたビューを見てみると、本当にユーザ名しか書かれておらず、〜などの基本的な構造すら入っていないのが分かります。しかし、これからビューを増やしていくことを考えると、いちいち全てのビューに同じことを書いていくのは大変です。そこで、R…

Userコントローラの作成

まずは、ログイン時の謎のポエムをなんとかしましょう。 Userコントローラの自動生成 ユーザの情報を表示するためのコントローラとして、userコントローラというのを作ることにします(userモデルと名前を一致させておきます)。例によってscript/generateで…

発言管理用のテーブル&モデルを作成

ユーザ管理テーブルではいきなり変則的なモデルの作り方をしてしまいましたが、次は「普通」に発言を管理するStatusテーブルを作ってみます。まず、次のコマンドを打ち込んでmodelとmigrationのファイルを自動生成します。 % script/generate model status e…

ユーザ認証用のプラグインの導入とテーブルの生成

普通なら、ここでDBにテーブルを作ってしまうか、テーブル生成用のmigrationを書くのでしょうが、今回はユーザ認証のシステムを作る必要があるため、まずはプラグインを入れておきます。restful_authenticationというのがあるらしいのですが、今回Rails自体…

DB設計

まずはDB設計から。といっても簡単に。Railsなら後から変更も楽に違いない(思い込み)。 ┌──────────┐ ┌────────┐ │User │n⇔n│Follow │ │──────────│ │────────│ │名前、パスワード、 │ │user_id │ │プロフィール、設定、│ │ followee_id │ │などなど… │ …

とりあえず基本設定

作業環境はMac OS X 10.5を使います。rubyはもちろん、なんとrails標準インストール済み(ただしver1.2.6)。 というわけで、さっそく作成開始です。まずは、railsの開発環境を生成。 % rails monologue create create app/controllers create app/helpers cre…

Ruby on Railsで延々作るTwitterもどき

Ruby on Railsで10分で作るTwitterもどきに触発されて、Ruby on RailsでTwitterもどきを作ってみることにしました。 が、実はRailsは初。どう考えても10分じゃ無理なので、ゆっくり作っていくことにします。 作成過程はちょっとずつここで書いていく予定。 …

PlaceEngineの位置ログをGoogle Maps上にプロット

PlaceEngineには、10秒〜に一度自動的に電測を行ってログを記録するオートスポットという機能があります(「環境設定>ログ」の中)。この機能を使って、MacBook Proで新幹線での移動中(とりあえず横浜〜名古屋辺り)を記録してみました。Mac版では記録した…

PlaceEngineをrubyから使う?

周囲の無線LANのアクセスポイントの信号から現在位置を割り出すPlaceEngineをMacにインストールしてみました。 上記サイトからダウンロードできるアプリには、内部に簡易Webサーバが搭載されていて、HTTPプロトコルでアクセスすると電波を測定して結果を返し…

exerbで作ったバイナリのディレクトリを取得するには

なぜかexerbで作ったruby→exeな実行ファイルは、 ダブルクリックしたとき → カレントディレクトリ = 実行ファイルのある場所 ファイルをドロップしたとき → カレントディレクトリ = C:/WINDOWS/INF ?? というよく解らない動作をする。実行ファイルのあるディ…