参照:あたま うじお - komagata

ko8(こーや)が何で

o)加速度センサー x)加速センサー

o)アシェルタ・イタリアン x)アシェルタン

のように名詞を雑に覚えてるのか気になってた。ちょっとした違いかもしれないけど、プログラマーがJavaを絶対にJAVAと書かないように、絶対ありえないタイプの間違えだと思う。

それが最近、すごくしっくり来る理由を思いついた。

たぶんko8は名詞を音の響きで覚えてる。

普通の成人は意味で覚えてる。“加速度”の“センサー”だなとか、“アシェルタ”という“イタリアン”なんだなという風に覚えてる。加速度とセンサーは個別にすでに知っているのでそれの組み合わせだと理解するわけだ。

しかしko8は音の響きで覚えてるのでまっさらな新しい単語として覚える。そして1音違うぐらいはたいした間違えではない。

子供のころは音で覚えてるものが沢山あったとおもう。言語を覚える時というのは最初はそういうものなんだと思う。俺も実家の近くにあった多摩御陵を「たまごりょう」という音で覚えてた。「たまご」はわかるけど「りょう」ってなんだろう?などとは思わなかった。

大人になって初めて多摩の御陵という意味で、陵というのは天皇の墓を示すというのを知った。意味で覚えていれば、“多摩陵”というような間違えはあるかもしれないが、“たまごろう”とかそいういう間違えはありえない。

音で覚えていると新しい名詞に出会った時に理解が遅い。何度も繰り返し耳にしないと覚えないから。音で覚えていると応用が効かない。

多摩御陵を意味で覚えているなら、XX御陵という他の墓が存在するだろうとか、天皇の墓というのであれば多摩御陵は何天皇の墓なんだろうとかもうすこし立体的に理解できる。

しかしko8は今日が誕生日だそうで(おめでとうございます)、今日ゼロ歳で生まれ変わったと言っていたので大丈夫だと思う。コーヤリボーン!

このブログのLokkaのテーマをslimにしてみた。

docs-komagata-org/public/theme/komagata/layout.slim at master · komagata/docs-komagata-org

以前はバグが多かった印象だけど最近rails案件で使って特に問題なかったので。

従軍記のLokka移行をやっていますが、それを実験台としてさっさとactive-recordブランチをmasterにしたい。あとちょっとなんですけどねー。datamapperからactive-recordへの移行になるからexport/import機能が必要になる。フォーマットはxmlかymlか?とにかくactiverecord化がまずは完了しないと何も進められないのでがんばろう。

@yandoさんから下記を教えてもらったのでやってみた。

Engine Yard Cloudでカスタムレシピを使う

本家に日本語の記事があります。

Chef レシピによる環境のカスタマイズ : Engine Yard Developer Center

最初全体像がつかめなかったんですが、要は環境毎にrecipeを保存してるサーバーがどこかにあって、アプリのコードとは別に、カスタマイズしたrecipesをey recipesコマンドでそこにアップできるそうです。

timezoneの変更

EYCのinstanceに入ってtimezoneを確認してみるとUTCになっています。
$ ls -l /etc/localtime 
lrwxrwxrwx 1 root root 25 May 17 19:13 /etc/localtime -> ../usr/share/zoneinfo/UTC
$ date
Sun Aug  4 02:54:45 UTC 2013
timezoneのrecipeはengineyardが用意してるrecipeに元々あるので、それを読み込んで変数を変更してやればいい。(recipeはforkして使う)
% git clone git@github.com:fjordllc/ey-cloud-recipes.git
% cd ey-cloud-recipes
% git diff -U0
diff --git a/cookbooks/main/recipes/default.rb b/cookbooks/main/recipes/default.rb
index 5bbd736..f9d39b0 100644
--- a/cookbooks/main/recipes/default.rb
+++ b/cookbooks/main/recipes/default.rb
@@ -148,0 +149,2 @@
+
+include_recipe "timezone"
diff --git a/cookbooks/timezone/recipes/default.rb b/cookbooks/timezone/recipes/default.rb
index e62ec33..b0de8de 100644
--- a/cookbooks/timezone/recipes/default.rb
+++ b/cookbooks/timezone/recipes/default.rb
@@ -4 +4 @@
-timezone = "UTC"
+timezone = "Asia/Tokyo"

僕はsunzi派ですがchefも触っておいて良かった。

ey recipesでupload, applyする。

% ey recipes upload -e jp_production    
Loading application data from Engine Yard Cloud...
Recipes in cookbooks/ uploaded successfully for jp_production
% ey recipes apply -e jp_production 
Loading application data from Engine Yard Cloud...
Uploaded recipes started for jp_production

ちゃんとtimezoneが変わってるかどうか確かめる。

$ ls -l /etc/localtime 
lrwxrwxrwx 1 root root 30 Aug  4 12:06 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
$ date
Sun Aug  4 12:08:20 JST 2013

うん。変わってる。DBサーバーの方もちゃんと変わってました。appサーバーだけ変更する場合にはroleを指定するとか何かあるんでしょう。多分。

これってTokyoリージョン使う場合は必須の作業ですね。

% CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.0.0-p247
% rbenv global 2.0.0-p247
% ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
% gem install bundler rbenv-rehash

Engine Yard Cloudに限りませんがちょっとハマったので。

UTCで動いてるサーバーで、例えば日本からのアクセスが大半で一番空いてる時間が朝5時(よくある)の場合、JST 5時はUTC 20時(前日の)なので集計バッチなどは上記の用な感じにしておく。

herokuのbamboo stackからcedar stackへのアップグレードは無理なので新規に作ってDBを移行後ドメインを切り替えた。

tapsを使ったdb:pull/db:pushはruby1.9.2とruby.19.3の間のmarshal互換性の断絶で無理なので(このbamboo stackはruby1.9.2で動いてる)pgbackups(pg_dump)を使う。

pgbackupsを使ってpg_dumpを取得したあと、postgres.heroku.comの下記の右側にある矢印アイコンのメニューの中のpg_restoreを選ぶとrestoreコマンドが親切に出るのでそれでさっきのdumpを読み込んで完了。

Lokkaももうちょっとドラスティックに変えていこうかなと思っています。仕事外の時間でちまちまと進めます。

Mailがいちいち立ち上がってウザいのでmailto:ハンドラを処理するデフォルトのメーラーをGmailにしたい。

Google Notifierを入れてデフォルトメーラーに設定すればOK。

ただ、内容が長すぎるとURLに全部はいるのでエラーになってしまうのが使い辛い所。

undefined method `render_partial_with_logging'というエラーが時々出る。調べてみるとkaminariのthreadsafe系のissueが上がってた。ちょうどrails4アプリのweb serverをpumaにした所だったのでまさにコレっぽい。(heroku + rails4のアプリをpumaにしたらかなり速くなった)

undefined method `render_partial_with_logging' for class `#<Class:0x617ead84>' org/jruby/RubyModule.java:2256:in `alias_method' · Issue #214 · amatsuda/kaminari

上記のissueが修正されたのが4 months ago、kaminari最新の0.14.1がリリースされたのが去年。masterを指定するのは怖いので最後のcommitのrefを指定してアップ。

# Gemfile:
gem 'kaminari',
  git: 'git://github.com/amatsuda/kaminari.git',
  ref: '2ed8adfe378594ae1585ac4a457a6d01f04478eb'

@ko8「@komagataさん、ちょっと確認したいんですけど、僕って8月末までプログラミングを勉強して9月から就職活動する・・・んでいいんですよね?」

@komagata「え?そうなんじゃないの?」

@ko8「ちょっと迷ってて。7月末に前に話してた友達が日本に帰ってくるんですけど。」

@komagata「あの、一緒に起業するって言ってたのに裏切って就職するっていって香港に行ったというあの?」

@ko8「いや裏切ってないっすよ。良いヤツですよ。そいつが7月末に帰ってくるのでまた一緒に起業しようって。」

@komagata「え?香港で就職はどうなったの?」

@ko8「そいつは香港の会社でインターンしてたんですけど、就職したら日本の部署に配属になるからそれだったら嫌だって話になって。」

@komagata「へえ。それで起業って何するの?」

@ko8「前から考えてたんですけど、ニートとか引きこもりの人とかがこう・・・集まれる”場”が作りたいなって。プログラミングを教えてもらえたりする・・・」

@komagata「"場"?何かWebサービスでも作るの?」

@ko8「それもあるんですけど特にITにこだわってなくて、実際に来れる場所があってコーヒーが飲めて。月額で課金しようと思ってるんですよ。」

@komagata「ノマドカフェ・・・みたいな・・・コワーキングスペースをやるってこと?」

@ko8「そう・・・なんですかね?」

@komagata「金はどうすんの?5分前に生活費の金策の相談を受けたばかりだけど。友達が金持ってるの?」

@ko8「そいつは奨学金というか借金があります。まあ出資を受ける・・・?」

@komagata「そのあたまにうじがわいてるような案で???」

@ko8「え、駄目っすか?」

@komagata「マジで大丈夫?せっかくちょっとプログラムが書けるようになってきたのに急に何で?」

@ko8「僕プログラマーとして働いてるイメージが沸かないっていうか。会社員とか向いてないんじゃないかなーって。」

@komagata「コワーキングスペースを経営するイメージは沸くわけ?」

@ko8「・・・まあ。」

@komagata「それって完全にさ、最近職業訓練校で企業面談とかやりはじめたから就職が近づいてきてビビって逃げてるだけでしょ?別にコワーキングスペースそんなにやりたいわけじゃないんじゃない?ただ就職したくないだけでさ。」

@ko8「(しばらく考えて)・・・。@komagataさん。その通りです・・・。」

@komagata「あっ、もしかしてさ、前に留学の為の学校を辞めた時も表向きは留学するより実際の会社で働いてみたほうが良いって人に言われたとか言ってたけどそれとは別に何か逃げたくなるようなことがあったんじゃない?」

@ko8「あ、ありました!留学の為の学校で僕だけ英語の点数が悪くて、留学先でも数ヶ月英語の授業を受けなくちゃいけないということが判明して。なんかかっこ悪いなって。うわっ、ホントだ!」

@komagata「そうやって逃げ出したくなることがあるとすぐ他人の甘い言葉に飛びつくタイプなんだね。しかも無自覚に。」

@ko8「うわあ、どうしよう。友達にもちゃんと話さなきゃいけないし。」

@komagata「うーん、どうせその何だっけ、あたまにうじがわいてる・・・あたまうじお?と長時間話したらまた影響されて説得されちゃうんだろうしなあ。」

@ko8「そんなことないっすよ。」

@komagata「ちょっとどうなるか考えてみようか。」

----------------------------

まず7月末にそのUZO(うじお)と知らないけど深夜のファミレスで夜通し熱く話し合うことになるじゃん?UZOは日本で会ってた時とは全く違う価値観を香港で手に入れた的なことを言ってくるわけ。

UZO「ko8(こーや)もプログラムもいいけどさ、アッパークラスになるにはこれからはXXXXじゃなきゃ駄目だよ。」

みたいなこと言ってきて。@ko8くんも深夜のファミレスでその新しい価値観に感化されるわけ。

で、

UZO「俺の知り合いにXXXXっていう凄い人がいてさ、俺はその人のイベントで知り合ったカフェをやってる人にあってみて色々動いてみるよ。ko8(こーや)はプログラミングできるからさ、それでWebサイトとFacebookページを作ってよ。」

みたいな感じになるのよ。

で、”山形のあたまにうじがわいてる王”とか、”鳥取のうじわき野郎”とか、全国のあたまにうじがわいてる人の全国大会会場である渋谷のコワーキングスペースをUZOは回るんだけど、何人かに自分の案を話すと「それってちょっとかわったコワーキングスペースをやりたいってこと?」ってまとめてくれるわけ。

それで、知り合い経由で実際にコワーキングスペースをやってる人の話を聞きに行くと、かなり景気の悪い話もちらほら出てくるの。一番うまくいってそうなところですらトントンみたいな。中にはUZOの感覚からいったら不本意な、お金のための活動の話も出るわけ。「いやー実際大変だよ?」みたいな。

そのころ丁度@ko8くんの作ったWebサイトとFacebookページが公開されるんだけど、もちろんイマイチなスキルとユーザーのことを全く考えない、自分たちが良い感じで働きたいというためだけに作られたひとりよがりのサイトを誰もシェアしてくれないわけ。@ko8くん的にはかなり頑張って作って、はじめてにしてはちゃんと完成したじゃん。って感じなんだけど案がアレだから。

UZOのFacebook周辺の人々の反応も苦笑い的なものでさ。あれ?俺の思ってた感じと違うなって。もちろん@ko8くんとの定期的な話し合いではそんなテンションの下がることは言わないよ?

Facebookページの作り方とかわかってちょっとおもしろくなってきたところの@ko8くんとUZOの意識がそこでちょっとづつ離れてくるわけだ。

で、UZOの尊敬する凄い人はUZOの能力はともかく行動力はかってるわけ。

UZOの師匠「ところでUZO君、スペース借りるにもお金とか大丈夫なの?」

UZO「うーん、ある程度は貯めるとかしないと・・・(実際にコワーキングスペースを開くイメージはもうわいてない)」

UZOの師匠「だったらさ、XXXさんのところで人探してるみたいだから週2ぐらいでいいって言ってるから行ってみれば?」

そこはコワーキングスペースつながりで知り合った不動産屋なんだけど、UZOは週2で働き始める。そこはやっぱり長い時間いるコミュニティに絶対影響されるから不動産屋業界でUZOがかっこいいと思う働き方みたいな、ロールモデルがいるわけ。コワーキングスペースの話はもうどうでもよくなってて。

そして、

UZO「でさko8(こーや)、XXXXさん(不動産業界の凄い人)がほんとに凄いんだよ。俺もしばらく経験積んだらさ、独立してああゆうのをやろうと思ってさ。」

ってUZO&ko8(うじおあんどこーや)の起業計画はなんとなく終わるわけ。その時UZOはちゃんと不動産屋に就職できてるんだけど、それだけに注力してきた@ko8くんは高卒で25歳になってるからやばいよね。

----------------------------

@komagata「全部俺の妄想だけど、結論としては100歩譲ってコワーキングスペースをやるのはいいけどバイトなり就職なりキャリアをすてずにプログラマーをやりながらやったほうがいいんじゃない?」

@ko8「ですかねぇ・・・」

これsunzi recipeにした。

使い方

sunzi.ymlにremoteのrecipeを持ってくる設定を書く。 wordpress_domainにはwordpressで使うdomain名を書く。 wordpress_jaは日本語で使いたい時だけ必要。 eval_erbはテンプレート中でrubyを評価するのに必要。

sunzi.yml:

---
attributes:
  wordpress_domain: fjord.jp

recipes:
  wordpress: https://raw.github.com/komagata/sunzi-recipes/master/recipes/wordpress.sh
  wordpress_ja: https://raw.github.com/komagata/sunzi-recipes/master/recipes/wordpress_ja.sh

preferences:
  eval_erb: true

install.shで読み込む。

#!/bin/bash
set -e

export DEBIAN_FRONTEND=noninteractive
source recipes/sunzi.sh
sunzi.mute "apt-get update"
sunzi.mute "apt-get -y upgrade"
source recipes/wordpress_ja.sh

sunzi.installを使ってるのでsunzi.shもsourceする。日本語化の必要がなければwordpress.shだけをsourceすればいい。

$ sunzi deploy fjord.jp

便利。