最新 追記

いがいが日記


2013-12-13 [長年日記]

_ Emacs に helm 導入

anything から helm に乗り換え。anything のままでもよかったのだけど、この前導入した ag を使える helm-ag があったので乗り換えてみた。
M-x package-list-packages
でパッケージを表示させて、helm-なんとか系で使いそうなものを入れた。
helm関係の設定ファイルは今のところこんな感じ。使いながらカスタマイズしていこう。いい感じ。

ちなみに helm と anything は共存できるので、anything もまだ残っている。このまま問題なければ削除しよう。

https://gist.github.com/igaiga/614009c2ca114b23de40


2013-12-22 [長年日記]

_ 空気清浄機 Panasonic F-VXJ90-WZ

以前つかっていた空気清浄機(Panasonic F-PXA28)がファンとなにかが擦れるような音がしはじめたこと、長く使っているのでそろそろ買い換え時かと思って新しいものを買った。(前のものをいつ買ったかも日記に書いておけばよかった。少なくとも2006年9月には買っていたようだ。)

届いて動かしてみたら、明らかに鼻の通りが違う。これは素晴らしい!前のものを買ったときも同じことを思ったので、やはり経年劣化で性能は落ちてたんだな。品質は前のものでまったく問題なく、故障もなかったので今回もPanasonicを買ったけど満足です。

新しいものはいろいろ便利になっている。前はフィルターを外して掃除機がけをする必要があったけど、今回のものは前面のパネルを外して掃除機がけができる。簡単だし掃除機が届かないところもない。加湿器機能も便利だ。程よい湿度に保ってくれて賢い。必要なら加湿器も買おうかと思ったけど、私の6畳の部屋だとこれで十分。

ということで良い買い物でした。もしかしたら今年一番の買い物かも。私が買った白い方は Amazon で現在在庫切れぽい。私が買ったときはたまたま6万円に8000円ポイントでラッキーでした。

F-VXJ90-WZ


2013-12-25 [長年日記]

_ 高専は「はじまりの街」

これは Kosen Advent Calendar 2013の参加記事です。昨日12/24はttata_tritさんの ものづくりのつくりかた でした。「決意するところからスタート」にとても共感します!

はじめましての方もいらっしゃると思いますので自己紹介。このアドベントカレンダーには昨年 Kosen Advent Calendar for Teacher に参加しました。高専の先生ではなく、大学で非常勤講師でRubyとRailsを教えています。仕事ではRailsをつかってオリジナルTシャツサービスと、みんなで花束を贈るサービス(近々オープン)をつくっています。 ちなみに弊社spice lifeのエンジニアは全3人で、全員高専生で、全員このアドベントカレンダーを書いています。 asonasHolyGrailです。弊社では一緒にサービスを作るエンジニア、デザイナーを大募集中です!(宣伝)

はじまりの街と道具箱

卒業してから思い返すと、高専はRPGの「はじまりの街」みたいなものだったな、と感じます。広い世界の入り口で、いろいろ教えてくれる場所、武器を買ったり魔法を覚えたり、冒険の準備をするところです。

今思い返すと、先生は実にいろんな道具を私たちの道具箱にしのばせてくれました。(「いいからもってけ!と私たちの道具箱に入れてくれた」は @june29 さんの名言。)三角関数、フーリエ解析、電気回路、トランジスタの静特性、電磁気学、量子力学・・・。

現役学生の方は、高専の勉強なんて社会に出てから役に立つの?と思っている人も多いかもしれません。たしかに知識は使わないものも多いのですが、私の答えはYESです。

自然科学(情報科学も含む)の世界ではいくつかの黄金パターンがあります。1つ例を挙げると、「ひとつ大きな世界、別の世界を導入して、そこで演算をして、元の世界へ戻す」というものです。抽象的に言うと難しいかもしれませんが、具体的には、物理の極座標、電気交流回路の複素数計算(jωR, 1/jωC)などなど。フーリエ解析して周波数空間で考えるなんてのもあります。

これらの知識を直接使うことがあるかというとレアケースかもしれません。(実際使うこともあります。)ただ、そういう解法があることを知ること、そして抽象的な世界で考えることは世の中のあちこちで役立ちます。これはとても良い訓練でした。

魔法屋 "Rails寺子屋"

私もこのはじまりの街でRails寺子屋という「魔法屋」を今年から構えています。RailsはかんたんにWebアプリをつくるための強力な道具です。1日のワークショップで、初めての方には画像を投稿するミニブログアプリを作って、ネットに公開するという題材を体験してもらっています。2回目以降は課題を選んだり、自分で設定して自由に学ぶ方式で、WebアプリやRailsの基礎、twitter データの解析、オープンソースへの参加の基礎知識となるGithub pull requestの使い方を学んだり、師範に直接質問することもできます。

次回は来年1/18(土)に東京で開催します。次回は師範(現役Railsエンジニアが集まっています)も参加する「コード大喜利」や「ぶつかり稽古」といった見て楽しむエキシビジョン枠も用意しています。申込み〆切日は過ぎていますが、空き枠がある限り申し込めますので興味を持った方は気軽に遊びにきてください。(´▽`)

なぜRails?

なぜRailsを?という質問に答えると長くなってしまうのですが、簡単に書くと次の3つを持っているからです。

  • 人生を面白く、豊かにできる
    自分のために書くちょっとしたコードでも小さな幸せを得ることができます。毎朝天気予報をiPhoneに届けてくれたり、twitterで自分への言及を拾えたり。

  • 世の中を良くすることができる
    現在はWebサービスによって私たちの世界は便利になっていく過程の時代です。世の中を良くすることは対価(給料)をもらえることでもあり、それは持続可能ということでもあります。

  • 分からないことがあったときに、聞ける仲間がいる
    師範や一緒に参加している参加者に聞くと、きっと聞いてないことまで教えてくれます。ちなみに、16歳でイオナズンを唱えるような @sora_h という凄腕師範もいますが、自称怖くないとのことなので、気軽に話かけてみてください。

はじまりの街の歩き方

この街で何をするかはみなさんの手に委ねられています。高専の先生って面白い研究をされている方も多いですよね。先生との距離が近いのが高専の大きなメリットの1つだと思います。(大学だと研究室配属は4年生で、しかも大学院の学生もいて大所帯なので。)興味のあることがあったら、先生の部屋を訪ねたり、Rails寺子屋のような街外れの魔法屋へ行ったり、あるいは外の世界を冒険してみてください。(冒険の旅はたのしいものですが、そのたのしさを書くのはまた別の機会に。)

みなさんの冒険の旅が豊かなものになることを。そして旅のどこかかで出会えることを楽しみにしています。

まとめ

いま、DSで「ファイアーエムブレム覚醒」をやってます。「絆」がモチーフになっていて、近くに仲間がいると能力があがったり、一緒に攻撃してくれたりします。これって現実世界でも同じだなぁと。Rails寺子屋もこんな仲間を探せる場所を提供していきたいです。

Kosen Advent Calendar 2013 は滅びぬ

今年のアドベントカレンダーは今日で終わりですが、感極まってしまっている方は12/26のカレンダーを書いちゃえばいいと思います。↓のコメント欄もURLをつなぐのにご利用ください。٩( 'ω' )و


2013-12-26 [長年日記]

_ Ruby 2.1.0

朝起きたらRuby2.1.0がリリースされていたので、この日記のRubyを 2.0.0-p247 から 2.1.0 へバージョンアップしました。(このバージョンから pXXX がなくなりましたね。)Ruby開発チームのみなさんありがとうございます!

そして最新のRubyでもちゃんと動くtDiary さすがです。tDiary 開発チームのみなさんありがとうございます!


2013-12-28 [長年日記]

_ いがいが日記の Ruby を rbenv へ

先日のRuby 2.1.0 リリースのときにこの日記のサーバ(sakura VPS)へ入ったらまだrvm が使われていた。普段使いは全部rbenvに乗り換えたので既にrvmの使い方もよく分からなくなっている・・・。ってことでrvm から rbenv へ移行した。OSはubuntu。

RVM アンインストール

$ rvm seppuku

rbenv インストール
公式ページの手順通り
https://github.com/sstephenson/rbenv#installing-ruby-versions

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:~/.rbenv/shims:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile   

ruby-buildをインストール(rbenvはRubyをビルドする部分を ruby-build に切り出しているのでセットで使う)
https://github.com/sstephenson/ruby-build#readme

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

設定ファイル読み直し

$ source ~/.bash_profile

Rubyをインストール

$ rbenv install 2.1.0

rbenvで入れたRubyをデフォルトにする

$ rbenv global 2.1.0

mac だと brew にまかせているのでちょっと楽なことが分かった。バージョンアップは

$ brew update
$ brew upgrade rbenv ruby-build

で済むとか、$HOME/.rbenv/bin (rbenv の実行ファイルがある) にパスを通さなくてよかったり。


2013-12-29 [長年日記]

_ いがいが日記の環境を nginx + unicorn へ

ここまでApache + CGI(!)で動いてきたこの日記、時間ができたので nginx + unicorn で動作するようにした。 unicorn がtdiary を8080ポートでWebアプリとして起動する。nginx はそのフロントで80番ポートに来たアクセスを unicorn が待っている 8080 へつなぐことにします。

例によって @machu 先生のページを参考にした。ほとんどまちゅさんのページ通りだけど、メモも兼ねてできるだけ全部書きます。

tDiaryを Nginx + Unicorn + さくらVPSで動かした
tDiaryを Nginx + Unicorn + さくらVPSで動かした(2)

また、昨日の日記に書いたようにRubyは rbenv のものを使います。

前準備

CGI時代と違ってtdiary 関連ファイルをweb公開先に置かなくていいのでホームの下へ移動した。tdiary-contrib はもしかしたらgem 化したものを使えるかもしれないけど、今まで動いてた環境が Github から clone した状態だったので、そのまま使って動かすことにした。

/var/www/ ← nginx の root にする
/home/igarashi/var/tdiary
  tdiary-core/ ← GitHubからtdiary-coreをclone
  tdiary-contrib/ ← GitHubからtdiary-contribをclone
  data/ ← tdiary のデータ置き場。日記データなどが入ってる

インストール

$ sudo apttitude install nginx 
$ gem install unicorn

Apacheを停止

$ sudo /etc/init.d/apache2 stop

tdiary と unicorn を設定

tdiary-core へ移動して以下。bundler と gem群 をインストール。

$ gem install bundler
$ bundle install  --without test development 

tdiary.conf を tdiary-core へ移動。(or サンプルをコピーしてつくる) 以下を変更。

@data_path = '/home/igarashi/var/tdiary/data'
@options['sp.path'] = [
  '/home/igarashi/var/tdiary/tdiary-core/misc/plugin',
  '/home/igarashi/var/tdiary/tdiary-contrib/plugin',
] 

config.ru を編集して、 /diary/ で動かす設定にする。 (まちゅさんのときからいろいろ整備されているので、この変更だけで大丈夫みたい。)

base_dir = '/diary'

ここまで来たらtdiaryを動かせる。まずは rackup コマンドで動かしてアクセスしてみると良い。

$ bundle exec rackup
---
Thin web server (v1.6.1 codename Death Proof)
Maximum connections set to 1024
Listening on 0.0.0.0:9292, CTRL+C to stop
---

起動したら

$ wget http://localhost:9292/diary/ -O -

って感じでアクセスしてみて日記ぽいものが出ていればOK。エラーだったら調査。(sakura で動かしているので、外からはポート制限しているので中から9292にアクセスしてます。)

私はGFMスタイルまわりでエラーが出ていたので調べたら、gem 化されて便利になってた。Gemfile に以下を追加して bundle install し直したところ解消。

gem 'tdiary-style-gfm'

また、この問題 を踏んだのでtdiaryを最新版へアップデート(git pull)。素早く修正されていてありがたい。

あと、 この辺を対応。

  • 使っている theme を tdiary-core/theme 以下へコピー
  • .htpasswd を tdiary-core 以下へコピー

unicorn で動かす

rack で確認したらunicorn で動かしてみる。

tdiary-core に unicorn の設定ファイル unicorn.conf を作成。内容はまちゅさんのページと同じ。

worker_processes 4
listen 8080, :tcp_nopush => true
pid "unicorn.pid"

stderr_path "log/unicorn.stderr.log"
stdout_path "log/unicorn.stdout.log"

preload_app true
GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true

起動する(-D はデーモン化)。8080へアクセスして接続確認してみる。

$ bundle exec unicorn -c unicorn.conf -D
$ wget http://localhost:8080/diary/ -O -

停止と再起動はunicorn プロセスへシグナルを送る。プロセスのPIDは tdiary-core/unicorn.pid ファイルに書いてある。

$ cd /home/igarashi/var/tdiary/tdiary-core
$ kill -HUP `cat unicorn.pid` ← 再起動
$ kill -QUIT `cat unicorn.pid` ← 終了

nginx の設定ファイルを書く

次はnginx をフロントに立ててunicorn へ。

nginx は /etc/nginx/ 以下に設定ファイル一式が置いてある。その中の sites-available フォルダに設定ファイルを置いておいて、 sites-enabled フォルダへそのシンボリックを貼っておくと読み込まれて有効になる。 default っていう設定ファイルを外して、 igarashikuniaki.net というファイルを追加した。

/etc/nginx/sites-available/igarashikuniaki.net

upstream tdiary.unicorn {
        server localhost:8080; 
        # ↑下の方で条件に合致したものをunicorn が待っている 8080へ渡す
}

server {
        server_name  igarashikuniaki.net;
        access_log  /var/log/nginx/localhost.access.log;

        location / {
                root   /var/www/;
                index  index.html index.htm;
        }

        location ~ ^/diary/ {
                try_files $uri @unicorn;
                # ↑ RSSフィードファイルなどのため、ファイルがない時だけ以下の @unicorn 処理へ
               # $uri は nginx が提供する変数で、アクセスされたパスが入っている。
        }

        location @unicorn {
                rewrite /diary/([0-9\-]+)\.html$ /diary/index.rb?date=$1 last;
                # ↑ /diary/20131229.html を /diary/index.rb?date=20131229 へ
                proxy_pass http://tdiary.unicorn;
                # ↑⬆上の方に書いてあるupstream tdiary.unicorn へ流す
        }
}

tdiary は /diary/ で動かす想定。設定ファイルはこれでミニマムのはず。実際は トップへきたら /diary/ へ飛ばしたり、昔つかってたぽい /tdiary/ へ来てもアクセスできるように追記した。

nginx 設定ファイルを有効にする

$ sudo rm /etc/nginx/sites-enabled/default
$ sudo ln -s /etc/nginx/sites-available/igarashikuniaki.net sites-enabled/. 
$ sudo /etc/init.d/nginx restart

ちょっとはまったのが、sites-enabled/ に置くシンボリックリンクを相対パスで書いていたら全然動かなかったこと。

これで外からブラウザで接続できるはず!おつかれさまでした。

nginx 自動起動

OS起動持に nginx を起動するようにする。

$ sudo update-rc.d nginx defaults  # 自動起動

ちなみに解除はこちら

$ sudo update-rc.d -f nginx remove # 自動起動解除

現在の設定は以下で見れる。起動時のレベルに応じた /etc/rc*.d/ にファイルがあれば自動起動する仕掛け。

$ ls /etc/rc*.d/*nginx  

apache の自動起動は解除した。

$ sudo update-rc.d -f apache2 remove

Unicorn 自動起動

unicorn も nginx と同じようにOS起動時に起動させよう。ネットで調べたところ、このようなスクリプト を書けばできる。長いのでgistに置きました。これを /etc/init.d/unicorn として置けば、 $ sudo /etc/init.d/unicorn start や stop が使えるようになる。(ubuntu のお作法だと service コマンド使った方がそれらしいと思うけど慣れてるのでこっちでいいや。また、みんなで管理するなら unicorn を動かす別のユーザーを作った方がいいのだろうけど、個人用なので割愛。)
うまく動くことを確認して以下で自動起動設定。

sudo update-rc.d unicorn defaults  # 自動起動
sudo update-rc.d -f unicorn remove # 自動起動解除
パフォーマンス

CGI(作業前)

$ ab -n 30 -c 3 http://igarashikuniaki.net/diary/
Requests per second:    2.01 [#/sec] (mean)
Time per request:       1494.132 [ms] (mean)
Time per request:       498.044 [ms] (mean, across all concurrent requests) 

nginx + unicorn(作業後)

$ ab -n 30 -c 3 http://igarashikuniaki.net/diary/
Requests per second:    13.60 [#/sec] (mean)
Time per request:       220.560 [ms] (mean)
Time per request:       73.520 [ms] (mean, across all concurrent requests) 

ということで1桁近く速くなりました!CGIが都度Rubyプロセスを起動しているのに対して、unicorn はプロセスを起動した状態で待っていることなどが効いているのでしょう。それでもCGIは手軽にレンサバで動かせる素晴らしい技術でした。10年間使ったなぁ。すごいです。

次は静的ファイルもnginxで返すようにしたり、tdiary の gem を使うように整備していきたいです。


2013-12-30 [長年日記]

_ Emacs勉強会

S社時代の同僚と定例のEmacs勉強会を久々に開催。

helm, all-ext

結構たくさん話題に出たのは anything 後継の helm。しもやまさんに教えてもらった all-ext が便利そう。helmの結果を all という専用のバッファへ流しこんで、そこで検索結果文字列を編集すると元のバッファも編集されている。helm な結果ならなんでも使えるのが便利。ほか、helm-ag(フォルダ以下をgrep)とhelm-ls-git-ls(git 配下のファイルを探す)とか便利。agはshellで使える高速なgrep。2013年の1番ヒットだったかもしれない。

Ruby

Rubyまわりの設定はこのページが便利そう。#=> って書いておくとそこにRubyの実行結果を埋め込んでくれる xmpfilter は便利そう。ruby-electric と ruby-block は以前から導入済み。
http://ktsukuda.net/server/customize_emacs_for_ruby/

また、ruby-beginning-of-defun でclassの中でも今いる def とかに飛んでくれるこの設定をしてみた。でも、さとゆさんから「" def"を検索すればいいんじゃね?」と言われて確かになーと。これはしばらく経過観察。
http://d.hatena.ne.jp/syohex/20130107/1357571652

elisp

いまだに elisp 書けないのですが、日高先生にいろいろ教えてもらった。defun で定義した変数はEmacsが生きてる間ずっと有効だと教えてもらった。書きたかったelispを書くためにいろいろ教えてもらった。日高さんemacs の関数からコードへ飛ぶの速かったな。なんか技を使ってたのかな。

今回も脱線しまくりでとても良い勉強会でした。また次回やりましょう!


2013-12-31 [長年日記]

_ 2013年をふりかえる

いがいが日記

今年はこの日記の 10周年 でした。10年間続けられたことは嬉しいですね。この日記のRubyのバージョンは1.9.3から2.1になりました。10年間動いていたCGIも nginx + unicorn に置き換わって7倍ほど高速に、そしてモダンに。Rubyの高速化も含めて、この1年でこのページはかなり速くなりました。

tDiaryは4月に3.2.2に、現在は4.0.2。gem 化など今年もさらに進化していてすごいです。

Ruby

今年は念願のRubyCity松江へ初めて訪れることができました。夏の松江は暑いながらも水辺が多くて好きな風土でした。島根Ruby合宿 にTAで参加できたのはラッキーでした。カリキュラムも練られているし、参加者のみなさんもがんばっていて、たのしい時間に。NaClさんでバイトという貴重な経験にもなりました。

秋にはRWC2013で発表することができました。これは良い経験になったし、今年1番がんばったのここかもしれない。(講義資料が佳境な時期とも重なったり・・・)RailsGirls松江 はmatzさんが基調講演していたり、中学生が参加してたりでさすがRubyCity松江感がありました。コーチやスタッフの島根のエンジニアのみなさんと話せたのも印象深いです。良い時間でした。

Ruby会議は雪の千葉、大江戸、Tokyu、ぐんま、九州、帰ってきたRuby会議、とちぎ と今年も盛りだくさん。どれもよかったなぁ。 RubyConf はマイアミビーチでパラダイス感ありました。

Rubyは今年は2.0と2.1の2つのメジャーバージョンがリリースされて華やかでしたね。高速化もされ、さらに便利になりました。機能では2.0のキーワード引数とprependは大変便利です。Ruby20周年パーティ はとてもたのしい会でした。

転職

万葉を退職 して spice lifeへ入社 しました。新しい環境ではWebサービスを作るという新しいことに挑戦していて充実しています。あと、渋谷近辺は同業な方々がたくさんいるので、一緒にランチを食べるのがとても楽しいし、有益な時間になってます。弊社のまわり、ご飯屋さんが多いのもうれしい!ということで思い返すと今年も随分と環境が変わったなと思います。

講師業

2年目に突入。2年目なので楽ができるかと思いましたが、資料を最新の環境にあわせたり、もっとよくできるだろうと書き直したおかげでそれなりに大変でした。Rubyは2.0に、Railsは4.0に対応。あとはtwitterがぽんぽん変わりますね。講師業は今学期までで、残り授業はあと2回。もう少しがんばります。

Rails寺子屋, 高専カンファレンス

Rails寺子屋を 第1回第2回 と開催。東京以外からもたくさんの方が参加してくれました。リピーターになってくれてる人もいたり、その後も師範とつながったりしている人もいてやって良かったと感じてます。高専機構へ行ったり、そこで先生を紹介してもらったりしたので、次回1月開催では新しい層の現役学生さんが申込みしてくれたのも嬉しいことです。

また、LL祭りで 出張版 もやりました。出張版はRailsGirlsと一緒にやったり、matzさんも来てくれたり、これもたのしいイベントでした。

ゲーム

ちょっと余裕ができたのでゲームをやろうかと「428」をiPhoneでやりました。渋谷を舞台にしたサウンドノベルで、これのおかげで渋谷の街を好きになれた気がします。ぐいぐい引き込まれるのでお勧め。

まだクリアしてないけど、ファイアーエムブレム覚醒を3DS LL とセットで買いました。これも面白い。となりにキャラがいると能力アップする絆システムが秀逸。

まんが

今年読み始めたものでは「ハイスコアガール」が面白いです。ゲーム好きな私世代の人がターゲット。「大東京トイボックス」が完結。最終巻の展開、好きです。ラブコメ系は「煩悩寺」「ぼくらはみんな河合荘」「実は私は」「ひとつ屋根の下の」と当たり年でした。隣の席の邦明さんのお勧めのおかげです。まだ読みかけですが「ワンパンマン」も面白い。これは社長がオフィスのソファ席に置くというテロ行為の結果です。けしからんのでまたお願いします。

今年は私の中でコミックの電子書籍元年で、買える漫画はKindleなど電子書籍で買いました。まだ電子版があるのは2割くらいですが、置き場を取らないのでずっと所有できるのがとてもいいですね。Amazonで1冊99円セールテロ攻撃も受けたりしましたが、軽傷で済んだのがなによりです。

便利なもの

一番はやっぱり 空気清浄機。 湿度コントロールもしてくれるので重宝してます。

万葉のみなさんから退職時にもらったホームベーカリーも素晴らしいです。朝ご飯に焼きたてパン生活、最高です。

ものじゃないのですが、9月に引っ越した新しい部屋、大家さんが造園業をしているのでベランダから見える庭に緑がたくさんあってすごく幸せです。心が豊かな暮らし。

健康

9月くらいに逆流性胃腸炎になって咳がつらかった・・・。1ヶ月くらい辛くて、こんなに長く調子が悪かったのは初めての経験。その後も咳き込むとむせるような状況になってしまいしんどいときもあります。来年はよくなるといいな。

とはいえ、そのほかは大きな怪我も病気もなく1年過ごせて平和でした。

まとめ

気づいたら1年終わっていた・・・という感じであっという間の1年でした。仕事が変わったり引っ越しもしたりで激動の1年でした。いろいろてんこ盛りで充実の良い1年でした。


最新 追記