D.

ブログを移転しました。

いままでこの「はてなダイアリー」にブログを書いてきましたが、以下のアドレスにブログを移転することにしました。このブログはもう更新されません。以下の新しいブログを購読してください。http://id774.net/blog/

Ruby で序数 (1st, 2nd, 3rd...) を生成する。

こんな感じ。 def number_to_ordinal(num) num = num.to_i if (10...20)===num "#{num}th" else g = %w{ th st nd rd th th th th th th } a = num.to_s c=a[-1..-1].to_i a + g[c] end end number_to_ordinal(3) => "3rd" number_to_ordinal(13) => "13th" …

マルチアーキテクチャなステージング環境で bundler を利用する。

Ruby on Rails 等で使われる bundler はアプリケーションに依存する gem パッケージをバンドルすることができ、パッケージの管理に役に立つ。しかしアーキテクチャ固有のパッケージを保持してしまうことで、ステージング環境で複数のアーキテクチャが混在し…

Linux ディストリビューションを安全に利用するための基本。

これらはすべて基本中の基本、絶対に守るべき原則と言っても良い内容である。しかしながら企業や学校の内部等ではこれらが遵守されていないような場面も多々見受けられるため、ここに書き記しておく。 root ログインを避け、管理作業には sudo を利用する。 …

LVM のサイズをオンラインのまま変更する。

lvm

最近のメジャーな Linux ディストリビューションでは標準で LVM が利用可能となっている。この LVM のオンラインリサイズを利用すると、システムの停止無しにファイルシステムのサイズを変更できる。これは非常に便利なのでやり方をまとめておく。 ここでは …

Kaminari で超お手軽にページネートを実装する。

Kaminari を使うと超簡単にページネートが実装できる。 sudo gem install kaminari Gemfile で gem 'kaminari' を指定して bundle install する。 あとはコントローラーで Model.all の代わりに .scoped メソッドを利用する。ページ数はモデルで指定しても良…

二度押し防止機能をデフォルトで付ける。

昔からよくある Form が Submit された瞬間にボタンを disable にするというアレ。これをデフォルトの挙動にする。 config/initializers/submit_with_disable.rb # -*- encoding: utf-8 -*- module ActionView module Helpers module FormTagHelper alias_me…

Asset Pipeline でまとまった JS から必要な処理だけ呼び出す。

Rails 3.1 から Asset Pipeline で JS がひとつに纏められて全部読み込まれるから対策が必要だよねという話。 http://text.ssig33.com/81 色々やり方があるが、おそらく現状では JS の URL Dispatcher とか Router で分岐するのが正解なのだろう。 http://al…

CoffeeScript で URL パラメータと値を取得する。

/hoge/new?key=value&hoge=fuga みたいな URL パラメータと値を取得したい。 get_url_param = () -> v = [] hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&') for hash in hashes h = hash.split('=') v.push(h[0]) …

Node.js と CoffeeScript を入れる。

サーバーサイド JavaScript の Node.js と、その JavaScript にトランスコンパイルされる新しいプログラミング言語 CoffeeScript の勢いはとどまるところを知らないッ!というわけで、これらをサクッっとインストールするためのスクリプトを書いた。 CoffeeS…

Ubuntu で古いカーネルを破棄する

Ubuntu でアップデートを繰り返すと、古いカーネルがたまってきて Grub2 のブートセレクタが埋め尽くされディスク容量も無駄に占有してしまう。手作業で古いカーネルを削除しても良いのだが面倒だしミスが怖い。そこで現在のカーネル以外を一括で消去するス…

RedHat/CentOS で古いカーネルを破棄する

yum -y update を発行してカーネルを更新した場合、古いカーネルを破棄しないとディスク容量をどんどん占有していくので package-cleanup --oldkernels でクリーンアップする必要がある。 $ df -T -h Filesystem Type サイズ 使用 残り 使用% マウント位置 /…

Mac で git 等を利用する際に UTF-8-MAC 問題を解決する方法。

Mac で主に git などを利用すると、日本語の濁音ファイル名がおかしくなる問題がある。通称 UTF-8-MAC 問題という。詳細は以下を参照のこと。 UTF-8-MAC http://macwiki.sourceforge.jp/wiki/index.php/UTF-8-MAC 対策 いろいろ解決方法は考えられるのだが、…

svn+ssh は利用できるが対話的なログインはできないユーザーを作成する。

svn+ssh は安全に svn を利用する方法のひとつとして広く知られている。このとき、対話的な ssh ログインを許可しておくと、そのユーザーアカウントの権限内でシステム内部を参照されてしまうことになる。単に svn サービスを他者に提供する場合、最小権限の…

Ramdisk を使う。

mac

Mac で Ramdisk を利用することにした。手順をメモ。 起動時に Ramdisk を生成して初期化するシェルスクリプトを作る。 /Library/Ramdisk/ramdisk.sh を作成する。 # Ramdisk を作る RAMDISK="$(hdid -nomount ram://1048576)" # 1 ブロック = 512 バイト di…

プラガブルに拡張可能な zshrc を書きたくなったので、書いた。

zsh

zsh は zcompile コマンドにより中間バイトコードをあらかじめ生成し起動の高速化を図ることができる。だが一人で複数ユーザーを利用したりしていると、いちいち各ユーザーごとに zcompile するのがダルイし、どうせなら /etc/zsh あたりに共通のファイルを…

zsh の自動インクリメンタル補完が素晴らしい件。

zsh

これはまさに Life Changing だ。 zsh で自動的にインクリメンタル補完をしてくれる。いままで Tab キーを入力して手動で補完していたのだがそれを自動でやってくれる。 Incremental completion on zsh http://mimosa-pudica.net/zsh-incremental.html 以下…

rails 3.0.x で scaffold する。

もう rails 3.1 beta1 が edge に来ているというのに 3.0 にいまさら移行した。すぐ忘れるのでメモ。 ruby 1.9.2 を入れる。 適当 rubygems を最新化する (しなくても良い)。 gem update --system rails を入れる。 sudo gem install -v "< 3.1" rails mysql…

Git と Subversion を共存させる。

まず最初に Subversion の管理下のファイルをチェックアウトし .git を管理対象外に設定する。 svn propset svn:ignore ".git" . Git の excludesfile で .svn を指定しておく。~/.gitconfig [user] email = yourname@gmail.com name = yourname [core] excl…

git で複数のリモートリポジトリに一度に push したりする。

git

git リポジトリの .git/config には remote origin となる URL がテキストで書かれている。 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url…

プライベートな git リポジトリを手軽に用意する。

git

プログラマなら誰しも自分用のプライベートな git リポジトリを持っていることだろう。いままで自分専用のリポジトリを利用するために github を利用してきた。 github は Web インターフェースを備えており Wiki や Graph などチームで開発をするために有用…

CentOS を VMware 上で動作させる際の設定

同じ内容の記事が他に山ほどありそうだけど毎回検索するのが面倒なのでメモ。 時刻がずれる問題の対応 RedHat/CentOS の Linux カーネルはタイマ割り込み頻度が 1,000 Hz とかなり高い値のままでビルドされている。このままだとカーネルモードでの動作のオー…

VMware の Ubuntu ディスクイメージを他のホストに移動すると発生する問題と解決法。

つまらない障害で思わずハマってしまったのでメモ。 事象 Ubuntu 10.04 LTS のディスクイメージを別のマシンに配置して起動すると以下のエラーがずらずら出て eth0 が認識されない。当然 IP アドレスの割り当ても失敗する。 SIOCSIFADDR: No such device 原…

複数の Debian システムの差異を調べる。

それぞれのホストで以下のコマンドを実行する。 dpkg -l | awk '/^i/' > $HOST_packages.txt できあがった "ホスト名_packages.txt" を diff すれば、インストールされたパッケージの差異が判明する。

Java で Web アプリケーションを開発する。(前編)

環境構築がいちいち面倒なので情報をまとめておく。手早く設定してすぐに開発に取り掛かれるようにしたい。 Java JDK Mac OS X の場合、すでに Java がシステムに組み込まれている。 $JAVA_HOME を /System/Library/Frameworks/JavaVM.framework/Versions/1.…

コマンド終了を自分に通知

引用された後に誤りに気づいたので訂正。 http://d.hatena.ne.jp/gnarl/20110204/1296819862 ./do-something-that-takes-long-long-time.sh && (echo "本文:終わったよん" | mail -s "件名:ジョブが終わりました" hoge@hoge.co.jp) 技術情報は Twitter より…

外部関数を利用する。(2)

a.sh #!/bin/sh A=aaaaa . ./lib/b echo $A echo $B echo $C echo $D echo $E ./lib/b B=bbbbb . ./lib/c set_e ./lib/c C=ccccc set_d() { D=ddddd } set_e() { E=eeeee } set_d 実行結果 $ ./a.sh aaaaa bbbbb ccccc ddddd eeeee

外部関数を利用する。

a.sh #!/bin/sh export A=hoge ./b.sh echo $A echo $B b.sh #!/bin/sh export B=fuga 実行結果 $ ./a.sh hoge a.sh を以下のようにする (b.sh は変更しない) #!/bin/sh export A=hoge . ./b.sh echo $A echo $B 実行結果 $ ./a.sh hoge fuga 参考 http://ww…

IP アドレスをコマンドラインから切り替える。

Windows のノート PC をあちこちのネットワークに接続して利用する、というのはよくあるシチュエーションである。そんなときに毎回コントロールパネルのネットワーク設定のダイアログを開いて IP アドレスを再設定するのは非常に面倒な作業である。 このよう…

先行ジョブの実行を待つ。(解決編)

昨日の先行ジョブの実行を待つ。のコメントで setlock なるツールを教えてもらった。しかしプラットフォームに依存しない (すなわち Windows 等でも汎用的に使える) 手法が欲しかったので結局 ruby でコマンドを自作した。 class Wait end class << Wait def…