Lingr Hat

githubを"Lingr"で検索してたらdrikinさんのLingr HatというLingrクライアントを発見。面白かったのでbuildしてFluidから乗り換えましたw

日本の祝日が分かるgem、holiday_jp 0.3.1をリリースしました。

単純なgemなんですが、何故か@pwimさんが高速化してくれたり、@kakutaniさんがリファクタリングしてくれたりで、gemを介して遊んでるみたいな感じです。

今回はjewelerオワコンってことでbundlerにしたり、travis-ciしたり、rubygems-test対応したりしました。

僕も他のgemで新しいツールを使う前の実験台として使ったりしています。:-)

rubygems-testって面白いですね。僕はperl使ってた時に、「cpanの自動テストうっっっz」とか思ってましたが、良い物ですね。すいません。

特にrubygems-testをユーザーがインストールをしてるとプラットフォーム毎にテストが通ったかどうかを自動でhttp://test.rubygems.org/にアップしてくれるのがイカス。

Gem Testers

holiday_jpに幸あれ、rubygems-testに幸あれ。

Railsアプリで画像添付メール経由で画像を受け取りたい。(ガラケーとか)

/etc/aliases:

foo: "| cat $1 > /tmp/foo"

これだとファイルのownerがnobodyとかになっちゃうので.forwardを使う。

/home/unk/.forward:

"| cat $1 > /tmp/foo"

Railsでメールを受け取る

Railsでメールを受け取りたい。railsをCLIから呼び出すにはrails runnerを使う。しかし、railsコマンドはRAILS_ROOT外ではrails new用の動きをするので困る。

しかし、その為にあるのかも知れないscript/railsを使えばOK。

rvm経由で呼び出すと相当長くなる。

"| BUNDLE_GEMFILE=/var/www/foo/current/Gemfile /home/unk/.rvm/bin/rvm ruby-1.9.2p290@foo exec bundle exec /var/www/foo/current/script/rails runner 'PictureMailer.receive(STDIN.read)' -e production"

しかしまだ画像ファイルが600で作成されるという問題が残る。下記の様にchmodするようにしてもいいけど、umaskを変更する方がいいかも。

mod_passenger利用時の注意点 - komagata

"| umask 0022; BUNDLE_GEMFILE=/var/www/foo/current/Gemfile /home/unk/.rvm/bin/rvm ruby-1.9.2p290@foo exec bundle exec /var/www/foo/current/script/rails runner 'PictureMailer.receive(STDIN.read)' -e production"

umaskは子プロセスに引き継がれるのでPaperclip経由で出来るファイルもこれで644になる。

私「会社の経理業務で源泉徴収とやらで半年に一度税務署に行って金を払わないといけないんだ。面倒だ。」

O氏「それ本当に必要なの?フィッシング詐欺にあってるんじゃないの?リアルの。」

私「いやでも、渋谷区税務署のおばちゃんが、こんなちっちゃい紙くれるし・・・えぇ!?あれ、あのおばちゃんが勝手に紙作って払った金はポケットに・・・?」

O氏「そうそう。そもそもそれって何に金払ってるの?何税?」

私「知らない。よくわからないけど言われるがままに払ってる。所得税?」

O氏「げんせんちょうしゅうって何?」

私「源の泉から徴収だから動詞だな。税金の名前じゃないな。所得税って何?所得に税金がかかるってこと?いや、税って何?まてよ・・・」

私「国がサービスを提供する代わりに国民がお金を払う。それが税か。サービス要らないからお金払いませんって言ったら、北斗の拳みたいな世界になるってこと?」

O氏「え、そこから? そうでしょ。個人でやるより集団でやった方が効率的で強いからでしょ。」

私「そっかOK。所得税は何か収入を得た時にそこから国に金を取られるのか。」

O氏「法人税ってのもあるじゃん?」

私「そうだね。法人税って何?法人は人じゃない会社を法的に人とみなすってことでしょ?なんで個人からも金取ってるのに集団からも取るの?あ、だから法的に集団を人にするのか。」

私「会社はcompanyでしょ?大航海時代に一人の資金で船を出すのは余りにリスクが高いので集団で出し合ってリスクと利益を分配するという・・・」

O氏「そうそう」

私「何でcompanyから金取るの?船が他国に襲われた時、国が守ってくれるとか?」

O氏「わかんない。でも取られるよね。問題はそのおばちゃんに払ってるのは何なのかってことだ。年金とか住民税もあるじゃん?」

私「そうだね。年金と住民税はうちは個人で払ってるから違うな。」

O氏「ってことは・・・」

私・O氏「所得税!!??」

私「所得税だったぁ〜www あ〜あのおばちゃんに半年毎に払ってるの所得税だったのか〜〜〜」

O氏「よかったじゃん。フィッシング詐欺じゃなくて。」

私「良かったァ〜、すいません、ハイボールください!」

# hello.rb:
require 'rubygems'
require 'sinatra/base'

class Hello < Sinatra::Base
  get '/' do
    'hello'
  end
end

Hello.run! if __FILE__ == $0
$ ruby hello.rb

Sinatra::Baseと違ってSinatra::Applicationは便利な初期化をかなり色々やってくれるので1ファイルで書く時はやっぱり普通のがオススメ。

utf-8のメールをmail.gemを使って送るとWARNINGが出る。

Non US-ASCII detected and no charset defined.
Defaulting to UTF-8, set your own if this is incorrect.

明示的にcharsetを指定すればOK.

# coding: utf-8
require 'rubygems'
require 'mail'

mail = Mail.new do
  to       'foo@example.com'
  subject  'テスト'
  body     'テストメール'
end

mail.charset = 'utf-8' # It's important!
mail.delivery_method :sendmail
mail.deliver

ハイ、私はコマガタです。

新潟県に株式会社コマガタという会社があって、化粧箱屋ドットコム (www.komagata.co.jp) というサイトをやっている。

紙の化粧箱専門の会社という非常にニッチな会社であってとても興味深く、同姓の僕は応援している。いつかオーダーメイドの化粧箱が必要になった時に使いたい・・・。

僕の祖父の手記、大東亜戦争従軍記 (war.komagata.org) を読んでもらうとわかるんだけど僕の祖父は新潟出身だ。駒形という苗字は新潟に多い。遠縁なのかもしれない。

komagata.co.jpは確かに株式会社コマガタの所有ドメインとして相応しい。しかし僕にはkomagata.orgを所有する資格があるんだろうか?

自転車(GIOS SIERA)が一ヶ月メンテナンス(二ヶ月ぐらい経ってるけど)で行ってきました。

通勤に使ってますが、オフィス内に置けるお陰で雨風埃は防げてます。夜ちょっと怖いのでバックライトも購入。

TokyuRuby会議で渋谷まで行って感じたけど、20号での通勤は距離は長いけど楽。山手通りは起伏が激しくていつか事故りそうで怖い。

たっぷり寝て、自転車で通勤するとやっぱり気持ちいいですね。

TokyuRuby会議04でLokkaについてLTさせていただきました。

TokyuRuby会議に初めて参加させていただきました。運営に携わった皆様ありがとうございました。スポンサーのサントリー様のプレミアムモルツ美味しゅうございました。@2celebさんの料理もとても美味しかったです。

Lokkaでもpadrino-helpersをマージしようとしてますが、Padrinoエヴァンジェリストの@udzuraさんと話せたのも嬉しかったです。

改めて勉強会やイベントの目的とは何なのか考えさせられたイベントでした。

routesがシンプルなところ。

# routes.rb:
require 'rubygems'
require 'sinatra'
require 'pp'

get('/foo')  {}
post('/foo') {}
get('/bar')  {}
post('/bar') {}

pp Sinatra::Application.routes

exit
% ruby routes.rb 
{"GET"=>
  [[/^\/foo$/,
    [],
    [],
    #<Proc:0x000001009c5a58@/Users/komagata/.rvm/gems/ruby-1.9.2-p290@default/gems/sinatra-1.3.1/lib/sinatra/base.rb:1212>],
   [/^\/bar$/,
    [],
    [],
    #<Proc:0x0000010159c318@/Users/komagata/.rvm/gems/ruby-1.9.2-p290@default/gems/sinatra-1.3.1/lib/sinatra/base.rb:1212>]],
 "HEAD"=>
  [[/^\/foo$/,
    [],
    [],
    #<Proc:0x0000010159cd90@/Users/komagata/.rvm/gems/ruby-1.9.2-p290@default/gems/sinatra-1.3.1/lib/sinatra/base.rb:1212>],
   [/^\/bar$/,
    [],
    [],
    #<Proc:0x0000010159bee0@/Users/komagata/.rvm/gems/ruby-1.9.2-p290@default/gems/sinatra-1.3.1/lib/sinatra/base.rb:1212>]],
 "POST"=>
  [[/^\/foo$/,
    [],
    [],
    #<Proc:0x0000010159c868@/Users/komagata/.rvm/gems/ruby-1.9.2-p290@default/gems/sinatra-1.3.1/lib/sinatra/base.rb:1212>],
   [/^\/bar$/,
    [],
    [],
    #<Proc:0x0000010159ba08@/Users/komagata/.rvm/gems/ruby-1.9.2-p290@default/gems/sinatra-1.3.1/lib/sinatra/base.rb:1212>]]}

Hash, Array, Regex, Procの組み合わせに過ぎない。自由度MAX。

これはセクシーだ。