open_sessionで特異メソッドを定義するときの注意

open_sessionで特異メソッドを定義したら、変数の持ち主に注意しましょうというお話。 次のように定義したとします。 def user open_session do |u| def u.access_to_home get '/home/index' end end end まず、これはエラーなく実行できます。 get '/home/i…

vimで編集中のrubyテストを実行できるプラグイン

vimでrubyのテストを編集しているとき、テストメソッドごとに結果を確認しながら書き進めたいことなどないでしょうか。 ruby test/unit/hoge.rb -n test_fuga でテストメソッド単位の実行はできるけど、テストケース名が長かったりするとかなり面倒・・・ と…

In App Purchase (Apple アプリ内課金システム) のしくみ

iOS SDK Hacksに載っていた内容のまとめ。 販売コンテンツの幅 Non-Consumable (非消費型) プロダクト 一度しか購入できない この型に限り、Apple側で購入情報が管理される 再度購入しようとした場合、無料でダウンロードできる 別の端末にもリストアできる …

演算子の優先順位

演算子の優先順位を意識していないと予想外の結果になることがあるので注意しましょうというお話。 和集合を代入したい場合 irb(main):001:0> hoge = nil || 'hoge' => "hoge" irb(main):002:0> hoge = (nil || 'hoge') => "hoge" 結果は同じ。 和集合を配列…

画像の非同期ロード

前回の内容とも関わるのですが、UITableViewCellの画像をWEBからロードする場合も、スクロールが非常に重くなることがあります。 前回同様、配列を使って回避できるかなと思ったのですが、うまく表示させることができませんでした。(もし方法があればご教示…

JSONによるWEBアプリとiPhoneアプリのAPI連携

RailsアプリケーションでJSONデータを返すAPIを実装し、iPhoneアプリから受信する方法をご紹介します。 環境 Rails 1.2.3 json 0.4.1 [gem] iPhoneSDK 3.1.3 json-framework 2.2.3 iPhoneアプリ json-framworkというフレームワークを使ってJSONを扱うことが…

UITableViewCellのパフォーマンス

UITableView の tableView:cellForRowAtIndexPath:indexPath からデータリクエストを飛ばしたりすると、パフォーマンスが著しく低下することがあります。 私はこちらのAPIの開発中に各セルからJSONデータをリクエストさせていたのですが、スクロールの際に引…

企業選びの軸は「やりたいこと」だけではない

下記記事に関連してツイッターで呟いたところ反響がありましたので、こちらにまとめ直します。 「好きを仕事に」という幻想が就職難を加速する Rayの取材を受けたときにも感じたことだが、そしてこれはいつの時代もそうなのだが、就活難の原因に、「好きを仕…

2009年に出たコンピュータ書ならこれを読め!

『2009年に出たコンピュータ書ならこれを読め!』に行ってきました。 他にもブログ書いているかたいるけど、備忘録も兼ねて。 なお、個人的にアンテナ引っかかったものが中心となりますので悪しからず・・・笑 まず、昨年度売れたのはやっぱりiPhone関連とtw…

自分の小さな「箱」から脱出する方法

たまには技術以外の話題を。 人間関係やチームの活動におけるトラブルを根本解決する、という内容。 特に興味深かった点は、次の2点です。 自分が箱に入ってしまうこと 「こうすべき」という自分の感情に逆らった行動をとることを、『自分への裏切り』と呼ぶ…

イベントハンドラからrailsのAjaxアクションを呼び出す

RTMの設定みたいに、ラジオボタンをポチポチ押したらrailsのAjaxアクションが実行されるコードを書いていて思ったこと。 イベントハンドラから、JavaScript関数ではなくrailsのAjaxアクションを呼び出したい場合には、remote_function メソッドを使います。 …

Gitから学ぶ仕事のしかた

現在railsのコーチングをして頂いている先生が、Gitを奨めて下さいました。 実際のバージョン管理も体験させて頂き、基本的な使い方は何となくわかってきたのですが、考え方の面で特に勉強になっています。 WEB+DB PRESS Vol.50 特集『はじめてのGit』 より …

簡易アラーム(カウントダウン)

rubyでカウントダウンアラームを作ってみました。 実行時に「○○分」の数値を引数として渡す 10分前に1回、5分前に3回、時間になったら10回ビープ音が鳴る ビープ音を鳴らすには? Windows環境のため、rubyプログラム中で echo ^G コマンド(バッチファイルに…

テキストボックスのテキストを全選択&編集不可にする

テキストボックスの中身をコピペしやすくするためには、下記をオプションで指定するのがよいでしょう。 (サンプルを示したいのですが、はてダでは表示できないようです) クリックするだけで全選択: onclick="this.select()" 中身のテキストは編集不可: r…

HashでArray#map!(collect!)のようなことを実現する

意外とハマったのでメモ。 例えば、配列の各要素を数値から文字列に変換したいと思ったら、map!(collect!)メソッドを使って実現できます。 array = [1, 2] array.map!{|item| item.to_s} #=> ["1", "2"] では、これと同様のことをハッシュで行う(各キーに…

WEBデザイン ユーザビリティ

そういえばWEBアプリのリデザインを担当したことがあり、そのとき読んだ本のメモが出てきたので、まとめました。 実際に読んだのはこちらでしたが、現在は改訂版が出ているようです。 ユーザビリティ ユーザビリティの基本概念 有効さ(なにかを目的として操…

子コントローラで特定のフィルタを無効化する

親コントローラで定義した before_filter / after_filter はすべての子コントローラに継承されますが、「この子コントローラではフィルタを外したい」ということがあります。 これは skip_before_filter / skip_after_filter を使って実現でき、オプション(…

コールバックメソッドのカプセル化

複数のテーブルの任意のフィールドにおいて、レコード保存時に同一の処理を行いたかったので、before_saveメソッドをカプセル化するハンドラを作成しました。 共有したいコールバックメソッドを定義したハンドラクラスを、app/models下に作成 class Hoge def…

プロセス名からプロセスをkill

プロセスをkillするのに、プロセス番号ではなくプロセス名を指定する方法はないんか? と探していて、便利コマンドに出会いました。 Linux コマンド 勉強中 - pkill プロセス名、プロセスの属性を指定してシグナルを送信する・プロセスを停止する 例えばこの…

ActionMailer基礎とヘルパーの指定

コードリーディングの際にActionMailerに触れたので、覚え書き。 ActionMailer基礎 メーラクラスapp/models/hoge_mailer.rb class HogeMailer < ActionMailer::Base def fuga() … end def piyo() … end end メールテンプレートapp/views/hoge_mailer/fuga.rh…

Twitterからmixiボイスへのポスト

自分で書いてみようかと思っていたのですが、rubyスクリプトを公開している方がいらっしゃったので拝借しました(笑) ちなみにrubyのバージョンは1.8.6です。 ライブラリをインストール $ gem install mechanize $ gem install rubytter Mechanizeインスト…

マイグレーションファイルに外部ファイルのロジックを持ち込んではならない

以前railsで、『あるテーブルのレコードの配列を取ってきて、その配列の順番を数値として既存フィールドに上書きする』というのをマイグレーションで実行したことがありました。 このマイグレーション(VERSION=1 とします)でやらかしていたことが後から判…

ERBでcase文を使うとsyntax errorになる問題

railsのビューで <% case params[:action] %> <% when 'hoge' %> ほげ <% when 'fuga' %> ふが <% end %> としたら、"syntax error, unexpected tIDENTIFIER, expecting kWHEN" というエラーが出ました。 次のように書かなければならないようです。 <% case …

特定のディレクトリ以下のファイルを対象に文字列置換【find編】

こちらの記事にフィードバック頂きまして、「findコマンド使ってもできますよ!」とのこと。 $ find . ! -name '*\.log' | xargs grep -l str_before | xargs sed -i 's/str_before/str_after/g' # 置換不要なログファイル等を除外 # 残りのファイルについて…

Railsのログ監視&デバッグをcoLinuxで行う

ログの監視 Windowsでrails開発していた頃は、デバッグ方法の一つとしてコマンドプロンプト×pメソッドを利用していました。 が、coLinux開発だとコンソールには何も表示されない! => 嘘。これは -d オプションで立ち上げた場合でした。 いちいちログファイ…

特定のディレクトリ以下のファイルを対象に文字列置換

railsアプリ内のある文字列を一気に置換したかったので、アプリのルートディレクトリで次のコマンドを実行しました。 $ grep -lr str_before ./ | grep -v '\.log' | xargs sed -i 's/str_before/str_after/g' # 置換前の文字列を含むファイルをすべて表示 #…

【Rails:6】コントローラとビュー(応用編)

セッション セッションあるユーザからのリクエストを、他ユーザのものと区別するための接続情報。通常サーバは、複数のリクエストを受け取ったとき、すべて独立したものと見なします。ユーザのログイン状態を保持したい場合などは、ユーザとサーバの接続状態…

【Rails:7】データベースとモデル(応用編)

リレーションシップ リレーションシップテーブルとテーブルの関連のこと。 外部キー別のテーブルの主キーを参照するフィールド。 参照先テーブル(entries) id(主キー) title 1 8/1の日記 2 8/2の日記 3 8/3の日記 参照元テーブル(comments) id entry_i…

【Rails:8】セキュリティとAjax

セキュリティ SQLインジェクションWEBアプリケーションに対して、不正にデータを操作したり、任意のSQL文を実行させてしまうような攻撃。 危険な式次のように、変数を直接SQL文に埋め込むコードは危険です。 # params[:owner_name] = "hoge" のとき Mail.fin…

Hpricotを使って、文字列に含まれるHTMLタグを取得

先輩にHpricotというライブラリを教えて頂いたので、これを使ったモジュールを作ってみました。 やりたいこと 特定のタグ以外は非推奨タグとする 文字列strに含まれるHTMLタグを調べる 非推奨タグが含まれていたら、その部分(開始タグ〜終了タグの文字列)…