やっぱり恋しいkaeruspoon
なんのかんのいいつつ、またkaeruspoonに戻ってきてみたりしています。
Filnを使っていると、プライベートまでも仕事しているような気分になってきてしまうのが困りものです。
これからはやっぱりkaeruspoonをメインに使っていこうと思います。
なんのかんのいいつつ、またkaeruspoonに戻ってきてみたりしています。
Filnを使っていると、プライベートまでも仕事しているような気分になってきてしまうのが困りものです。
これからはやっぱりkaeruspoonをメインに使っていこうと思います。
「ActionScript 3.0 逆引きクイックリファレンス Adobe Flash CS3対応」を買いました。
いろいろ遊んでみようと思います。
「WEB+DB PRESS Vol.44」を買いました。いつも恒例です。
ひさしぶりに新しいサービスを作ってみました。
「どこでもお気に入り」は、ブラウザのお気に入り(ブックマーク)とほとんど同じ機能のものです。オンラインサービスなので、自宅でも会社でもどこでも自分のお気に入りを使うことができるようになります。
ブラウザのお気に入りとひとつだけ違うところがあって、それはお気に入りに登録しているサイトで更新がされると、自動的に既リンクの色(紫)から未リンクの色(青)に変化して表示されるようになるところです。これで、お気に入りの中のどのサイトが更新されているのかが一目瞭然となります。
こういうのってRSSリーダー使えばいいようにも思えるのだけど、RSSリーダーを使わないような普通の人のためのサービスを作ってみたかったのです。ユルさんのインターネットの使い方を大いに参考にさせてもらいました。
しばらく、livedoor reader から「どこでもお気に入り」に変えてみようかと思います。
どこでもお気に入りを使い始めてすぐに気づいたのだけど、いろんなサイトを見て回るのは実に楽しい。livedoor reader の質素な画面ばかり見ていたのが、いまでは監獄にいたかのような気分なのだ。ひとつひとつ訪問して閲覧していくことは効率は悪いかもしれないけど、いろいろなデザインを楽しむことができる。想像もしていなかったのだけど安らぎに近いものすら覚えるのだ。インターネットってけっこう楽しいぞ、と思い直している今日この頃である。
昨日はたけぞうさんご夫妻が遊びにきてくれました、4人でのんびり過ごして楽しいひとときです。
今度はぼくらが遊びに行かせてもらおうっと。
昔はすごく苦労しながらxorg.confをいじくっていましたが、いまでは素晴らしいことにほとんどGUIでデュアルディスプレイの設定ができてしまいます。
基本的には、「システム」-「設定」-「画面の解像度」でOK。スクリーンのクローン化のチェックボックスを外せば、その時点で認識されているディスプレイが表示されて、解像度や、さらには位置関係までドラッグして設定することができます。
ひとつだけ問題なのが、スクリーンの仮想サイズの設定がxorg.confに必要なこと。これをしないと、デュアルディスプレイになりません。
/etc/X11/xorg.confの"Screen"セクションに以下の"SubSection"を追加します。
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
SubSection "Display"
Virtual 2304 800
EndSubSection
EndSection
"Subsection"の"Display"で、スクリーンの仮想サイズを指定してあげます(ぼくの環境は1280x800と1024x768のディスプレイが横並びになっています)。
GUIを使わなくても、xrandrというコマンドを使えば設定可能です。
xrandr --output VGA --mode 1024x768 --right-of LVDS
こんな感じで直感的に指定できて、さらには再起動も必要ありません。素晴らしい。もうWindowsを使う意味がどんどんなくなってくるな。
携帯メールで投稿できる機能をつけてみました。
Railsで受信メールを処理する方法はけっこう簡単です。HowToReceiveEmailsWithActionMailerに書かれていることがすべてといってもいいでしょう。
ここではPostfixを使った方法を書いておきます。
1.Postfixのインストール
aptitude install postfix
2.受信メールを処理するコードをapp/modelsの下に置く。
class KaeruMailman < ActionMailer::Base
def receive(email)
...ユーザ認証したりメールの内容をDBにインサートしたりといった処理...
end
end
3./etc/postfix/master.cfの最後に、下記を追加する。
kaeruspoon-mailman unix - n n - - pipe flags= user=tsukasa argv=/usr/bin/ruby /var/www/rails/kaeruspoon/script/runner -e production KaeruMailman.receive(STDIN.read)
userはRailsを実行しているユーザにします。KaeruMailmanのrecieveはインスタンスメソッドとして定義しますが、ここではクラスメソッドとして書きます。内部でインスタンスが勝手に作成されて、recieveメソッドが呼ばれるのです。
4./etc/postfix/main.cfの最後に、下記を追加する。
transport_maps = hash:/etc/postfix/transport virtual_mailbox_domains = kaeruspoon.net
受け付ける受信メールのアドレスでユーザ認証を行う場合などは、local_recipient_mapsを無効にしておく必要があります(UNIXユーザ以外のメールアドレスは拒否されるから)。
local_recipient_maps =
5./etc/postfix/transportに(ファイルがなければ作成して)、下記を追加する。
kaeruspoon.net kaeruspoon-mailman:
これでkaeruspoon.netドメインのメールを受信したときは、master.cfで設定したkaeruspoon-mailmanのコマンドを実行するようになります。
上記設定を有効にするために下記コマンドを実行します。
postmap /etc/postfix/transport
これで設定完了です。/var/log/mail.infoをチェックして、受信したメールが正しくRailsに渡されているかどうかを確認できます。
ActiveRecordで、テーブルからランダムにレコードを取り出すときは、
user = User.find(:first, :order => "RAND()")
みたいにすればいい。SQLは
select * from users order by RAND() limit 1;
というような感じになる。
ただし、レコード数が大きくなると、この order by RAND() がかなり遅くなってしまう。そのときは、ランダムなid値をアプリ側で用意して、
user = User.find(:first, :conditions => ["id = ?", rand_id])
みたいにするといい感じ。
また、selectで取り出すカラムを最小限に抑えると、結構はやくなったりするので、アプリの修正が面倒なときはこれを試してみてもいいかも。
user = User.find(:first, :select => "id", :order => "RAND()")
今日は知り合いのエンジニアさんに誘っていただいて、その方の会社の方たちとお食事会に行ってきました。
焼肉くにもと新館
こんな焼肉食べたことないって感じで、とてもおいしかったです。お仕事のお話もいろいろ聞けて楽しいひとときでした。
確認画面などを経由して投稿するシステムを作るとき、たいていはデータをhidden要素に入れてPOSTすると思います。このとき、value値の中の改行が半角スペースに変換されてしまうことがあります(特に携帯とか)。
いろいろ対処方法はあると思うのだけど、僕は単純に改行コード自体を特殊な記号に変換しておいて、POSTの受付側でそれをデコードするという方法をよく使います。
とあるviewで、
<% @article.body = return_code(@article.body) %> <%= hidden_field :article, :body %>
みたいにしておいて、POSTの受け側のアクションで
params[:article][:body] = return_code(params[:article][:body], :decode)
というように、処理の前にデコードしておきます。
return_codeメソッドは
def return_code(text, mode = :encode)
if mode == :encode
text.gsub("\r\n", "[kaeru:ret-rn]").gsub("\r", "[kaeru:ret-r]").gsub("\n", "[kaeru:ret-n]")
elsif mode == :decode
text.gsub("[kaeru:ret-rn]", "\r\n").gsub("[kaeru:ret-r]", "\r").gsub("[kaeru:ret-n]", "\n")
else
text
end
end
こんな感じ。app/controller/application.rbで定義しておいて、
helper_method :return_code
と宣言しておけばcontrollerでもviewでもどこでも使えます。
携帯だと、数字キーによるショートカットってすごく便利……というか、使えないと不便なくらい大事な機能だと思います。
でも、キャリアによってリンクの作り方が違っていたりして面倒です。なので簡単に使えるヘルパを作ってみました。ちなみにjpmobileの使用が前提です。
DOCOMO_NUM = ['戀', '驪', '麗', '黎', '力', '曆', '歷', '轢', '年', '憐']
AU_NUM = [325, 180, 181, 182, 183, 184, 185, 186, 187, 188]
SOFTBANK_NUM = ['', '', '', '', '', '', '', '', '', '']
def number_link_to(num, title, path)
case request.mobile
when Jpmobile::Mobile::Docomo
DOCOMO_NUM[num] + link_to(title, path, :accesskey => num)
when Jpmobile::Mobile::Au
%Q|<img localsrc="#{AU_NUM[num]}">| + link_to(title, path, :accesskey => num)
when Jpmobile::Mobile::Softbank
SOFTBANK_NUM[num] + %Q|<a href="#{path}" DIRECTKEY="#{num}" NONUMBER>#{title}</a>|
else
link_to(title, path)
end
end
使用方法は
<%= number_link_to(6, "次へ", article_path(@next_article) %>
みたいな感じで、link_toみたいに手軽に使えます。数字の絵文字は、実際にはバイナリコードとかのほうがいいかもしれません(docomoとか)。
ひさしぶりにkaeruspoonをちょっとだけ改良しました。リンク元の検索キーワードの集計がいい加減だったのを、きちんとキーワードの組み合わせごとに集計を取るようにしました。それだけ。
アクセス数の多い順に集計した、記事のランキングをサイドバーに表示してみました。それだけ。
めちゃすごい。
kaeruspoon関連のソースコードはsubversionでバージョン管理していますが、ウワサのgitを使うことにしてみます。
sudo aptitude install git-core
gitはsubversionみたいにレポジトリがひとつではなく、あらゆる環境で分散して管理します。つまりローカルにもレポジトリが存在することになるので、ノートパソコンを持って飛行機の中でも電車の中でも開発ができるということ。subversionとsvkをくっつけたような感じですね。
とりあえず、ローカル環境でレポジトリを作ります。
cd ~/devel/kaeruspoon git init
.gitというディレクトリが作られます。
ではkaeruspoonをコミットしてみよう。コミット前にsubversionの.svnディレクトリを削除しておきます。
find . -name .svn -exec rm -fr {} \;
それからコミット。
git add .
と、思ったら
*** Your name cannot be determined from your system services (gecos). Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: empty ident <tsukasa@blue .(none)> not allowed
なにか怒られた。
どうもコミットする者の名前を登録しておく必要があるらしい。
git config --global user.email "tsukasa@example.com" git config --global user.name "tsukasa"
気を取り直してコミット
git add . git commit -m "kaeruspoon commit"
subversionと同様に、-mオプションをつけなければエディタが立ち上がってそこにコメントが書けます。
ぼくの環境ではデフォでnanoがエディタとして選択されたので、~/.zshrcに以下の行を追加してvimを使うように指定しておきました。
export GIT_EDITOR=vim
それからサーバ上にリモートレポジトリを作ります。サーバの環境はdebianなんだけど、微妙にコマンドが違う。なんでだろう。
cd /var/git/kaeruspoon git init-db
それからローカルに戻って、ローカルのレポジトリをリモートレポジトリに反映させます。
git remote add origin ssh://silver/var/git/kaeruspoon git push origin master
このpushが、subversionでいうcommitみたいな感じ。
逆にpullコマンドでリモートレポジトリをローカルに反映させることができる。こちらは update か。
webサーバに、ローカルレポジトリを作って、リモートレポジトリの内容を反映させてみよう。
cd /var/www/rails/ git init-db git clone ssh://silver/var/git/kaeruspoon
これで環境構築は完了。
では開発・コミット・webサーバへの反映の一連の流れをやってみよう。
どこかのソースを修正したあとに
git status
で状態の変化を確認し、
git diff
で実際の変更箇所を確認できる。このあたりはsubversionと同様。
で、ローカルレポジトリへのコミット。
git commit -a
コミットログは
git log
で確認できます。
さて、リモートレポジトリへの反映。
git push origin master
それからwebサーバ上で
git pull origin master
これですべて完了です。
ユルさんに頼まれたので、かえるイメージに確認画面をつけてみました。それだけ。
新規にRailsアプリを作るときのgitでの管理の仕方について自分メモ。
1.Railsアプリの作成
$ rails testapp $ cd testapp
2.ローカルレポジトリの作成とRailsアプリのコミット
$ git init $ git add . $ git commit
3.ログファイルを無効にする
$ rm log/*.log $ git commit -a
log/.gitignoreファイルに以下の行を書き込んで保存する。
*.log
それからコミット
$ git add log/.gitignore $ git commit -a
4.tmp以下のファイルほ無効にする
tmp/.gitignoreファイルを作成し、以下の行を書き込む。
* !.gitignore
そしてコミット
$ git add tmp/.gitignore $ git commit -a
5.database.ymlの無効化
$ cp config/database.yml config/database.example.yml $ git add config/database.example.yml
config/.gitignoreファイルを作成し、以下の行を追加。
database.yml
コミット
$ git add config/.gitignore $ git commit -a
こんな感じです。
会社から持って帰ってきました。もう会社に私物はありません。
目黒に来るのははじめてです。ちょっと素朴な感じ。
webサイトを作っているとよく出会う問題です。日本語は指定された幅を越えると勝手に行を折り返してくれるけど、URLみたいに長い英文は折り返さずに指定した幅を越えて右側に伸びてしまいます。これはカッコ悪いし読みにくい。
一番簡単な解決方法は、一文字ごとに <wbr/>タグを入れてあげるというもの。Rubyで書くなら
text.scan(/./) * "<wbr />"
こんな感じです。
明日、今の会社を退社します。来週からプー太郎です。ちょいプードルです。
さしみさんがおもしろい。
この風景も今日で見納めです。さあ、お家に帰ろう。
さあ、お家に帰ろう、などと言いながら、同僚のプログラマの方におごってもらってみんなで居酒屋にいきました。みんなが退職するのでお別れ会みたいなものですが、普通の飲み会でした。もっと、こういう飲み会を月一でもやっておけばよかったなあと思わないでもありません。とりあえず、「マクロス」と「大きく振りかぶって」を観ろと勧められました。楽しかった。
RubyKaigi行きたかったなあ。知り合いのエンジニアさんも講演するし……。サブセッションはチケットいらないみたいだけど、行ってみようかな。
に来ました。プー生活をのんびり過ごしています。
ニコニニ動画のプレミアム会員をやめました。もうニコニコも飽きてきてしまった。
いまさらながらなのですが、Railsのソースコードを読んでいます。ウワサに違わぬ綺麗さですね。ひとつひとつのメソッドがコンパクト。10行越えてるのってめずらしいくらいです。
ひとつだけ気になるのが、修飾子としてのifやunless。一行におさめるには長すぎるとき、
people.go_to_spaceship if the_earth.blank?
みたいな感じで2行にしているところがちょっと違和感。ぱっと見た感じだと、ふたつのセンテンスだと錯覚しそう。
こういうときぼくは、
if the_earth.blank? people.go_to_spaceship end
みたいにして書いてしまう。どっちがいいのかな。
楽しそう。こういう旅がしてみたい。
友だちの現在位置を、方角と距離で知ることができるサービス「いまどこ」を作ってみました。マップまで表示してくれる似たようなサービスがすでにあるのだけど、あえてシンプルに方角と距離のみの情報をメールで送信するようにしてみました。
それだけだとさびしいので、近くにあるお店の情報もついでにお知らせするようにしています。こちらは食べログのAPIを利用させてもらいました。
これはGPS付き携帯のみに対応しているサービスなのでPCからアクセスしても利用できません。また、AUでしかテストをしていないので、他のキャリアではバグがあるかもです。