@kakutaniさんからpull requestが来てたので改めて、holiday_jpについて。

2009年に仕事で必要になって作ったgemです。祝日が必要なソフトウェアは結構あると思いますが、こんな調査に時間を割くのは一人でいいんで共有できればと。

祝日は法律によって増えたり減ったりするので未来に渡って計算で算出することができません。

休日・祝日の定義について

休日は単に休みの日です。祝日は”国民の祝日を定める法律”で規定されるお祝いのための休日です (土日は祝日ではありません)。皇室の祭典を行った大祭日などが元になっています。

立春の日・秋分の日について

また厄介なのが立春の日と秋分の日です。基本的には国立天文台の算出する定気法による日(天体の動き)から決定されるため「ほぼこの日だろう」という日は分かりますが、実際には前年度の2月1日に閣議決定され、官報で告知されるまで確かなことはわかりません。(天文学に基づいて年毎に国家の祝日が決定されるのは世界的に見ても珍しいそうです。)

つまり、「現行法に置いては」という但し書きをつけても、日本の祝日は1年先までしかわからないということです。

「1年毎に誰かがメンテナンスする必要があるのであればgithubとかあるし100年分ぐらいgemの中に持っちゃえばいいじゃん。」

ということでholiday_jpができました。

関連:holiday_jp - 国民の祝日が分かるライブラリ - komagata

% rake
`include Capybara` is deprecated please use `include Capybara::DSL` instead.

include Capybaraがdeprecatedになってたので指示通り書き換えました。

# test/test_helper.rb:
class ActiveSupport::TestCase  
  (...)
  class ActionDispatch::IntegrationTest 
    include Capybara::DSL      
    Capybara.app = KowabanaJp::Application
  end
end

Unit::TestとCapybaraでのIntegrationTestは簡単なのにちゃんと動く(バグを見つけたりデグレを防ぐ役割をちゃんと果たすという意味で)のでお気に入りです。

これ便利さがちょっと伝わりづらいんですが、rvmで普段使いのruby(default)用にruby-1.9.2-p290@defaultとか作って指定しておくと@globalが空なので混ざらなくて良いって話。新環境作るたびに$ gem install bundlerする必要あるけど。みんなやってることかも?

Paperclipで画像サイズの最後に使うコレ

has_attached_file :foo, :style => {:thumb => '100x80>'}

いつも意味忘れてググるけどImageMagickのオプションなので下記に書いてある。

Resize or Scaling -- IM v6 Examples

  • Ignore Aspect Ratio ('!')
  • Only Shrink Larger ('>')
  • Only Enlarge Smaller ('<')
  • Fill Given Area ('^')
  • Percentage Resize ('%')
  • Pixel Area Limit ('@')
  • Cropping ('#')

参照:[rails]PaperClipでクロッピング - func09

何も変えてないのにjenkinsのdailyのテストが通らなくなった。

% rake test
rake aborted!
no such file to load -- omniauth/password

(See full trace by running task with --trace)

手元でも確かに動かない。omniauthに何が起こった?bundleなどビルドプロセスが外部に依存してるとコードは変わってなくてもこういうことがあるのでdailyのテストも大事だな。

% bundle list | grep omniauth
  * omniauth (0.0.1)

OMG!

何故だかバージョン指定無しだと0.0.1が入るようになっている。

# Gemfile:
gem 'omniauth', '~> 0.2.6'

バージョンを指定して凌ぎましたが、他でも起きたら怖いので原因知ってる人がいたら教えてもらえると嬉しいです。

sqlite3-rubyをインストールしたら(tapsの依存で入る)見覚えのあるマークが。

Terminal — zsh — 80×24

これ、Twitterで聞いたらハートを横にしたマークなんですね。(屁的なものかと思ってた)

「sqlite3-rubyはsqlite3に変わったYO!」ってだけの警告文なのに誰が書いたのか分かるのって凄い個性ですね・・・。

authorを見に行ってみる。

sqlite3-ruby | RubyGems.org | your community gem host

やっぱりアンタか・・・。

ProxyLocal

ProxyLocal could proxy your local web-server and make it publicly available over the internet.

ローカルのWebサーバーに他人にちょっとアクセスして欲しい時(何かの実験中とか)に便利なgem。

# app.rb:
require 'rubygems'
require 'sinatra'

get '/' do
  ' ┐(´ー`)┌'
end

こういう糞アプリがあったとして、まずローカルで立ち上げる。

% ruby app.rb 
== Sinatra/1.2.6 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.2.11 codename Bat-Shit Crazy)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop

でproxylocalをインストールして立ち上げると・・・

% gem install proxylocal
% proxylocal 4567 --host unk
Local server on port 4567 is now publicly available via:
http://unk.t.proxylocal.com/

http://unk.t.proxylocal.com/

xxx.t.proxylocal.comでアクセス出来るようになる。このぐらいの気軽さで外からアクセスさせることができると嬉しい。

datamapper(dm-core) 1.1.0では0.10.0からdeprecatedになっていた明示的なINの利用が出来なくなりました。明示的なINと暗黙的なINって何なのかというと下記の様な違いです。

# implicit
Foo.all(:id.in => [1, 2, 3])

# explicit
Foo.all(:id => [1, 2, 3])

対象がArrayだと自動的にINになるんですね。1.0.2で使ってたけどdeprecatedの表示は出てなかった気がするけどなあ。ヤラレタ。

つい先日、LokkaにもCI環境が整ったのでデグレしないようにテスト駆動バグ修正していくことにしました。

RuntimeError - explicit use of 'in' operator is deprecated - Issues - komagata/lokka - GitHub

$ gem install cmdline-fu
% cmdline-fu matching ssh               
# Copy ssh keys to user@host to enable password-less ssh logins.
$ssh-copy-id user@host

# start a tunnel from some machine's port 80 to your local post 2001
ssh -N -L2001:localhost:80 somemachine

# output your microphone to a remote computer's speaker
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp

# Mount folder/filesystem through SSH
sshfs name@server:/path/to/folder /path/to/mount/point

サイトの方ちゃんと見に行ってみると、「こっちのがいいだろう」とか「それ動かなくね?」とかツッコミが多いので常用するワンライナーを探してる場合はちゃんと見た方がいいかも。

gemにmoneky patch当てないでcloneしてgem 'foo', :git => 'git://foo'しようというのをどっかでみたけどslim-railsで

Deprecated: Use `require 'slim'` instead of `require 'slim/rails'`

が出るのは放置してたらcloneしてる人がいた。pull requestが送られてから2週間たってるけどマージされる気配が無いのでcloneした方を使う。

# Gemfile:
gem 'slim-rails', :git => 'git://github.com/stjernstrom/slim-rails.git'

もっと面倒なのかと思ってたけど簡単。さっさと自分でやればよかったな。