new takyam();

Qiitaぽい話はQiitaに書いていくことにする気がする http://qiita.com/takyam

Google Computing Engine 触ってみた

AWS対抗の「Google Compute Engine」がGAに 値下げや対応OS追加を発表 http://www.itmedia.co.jp/enterprise/articles/1312/04/news052.html

的なニュースが流れてたんで、日曜から使い始めたAWSのsmallインスタンスをそっ閉じして、GCEのスモールインスタンスを立ち上げてみた。

  • EC2 : $0.060/h == $43.2/month
  • GCE : $0.054/h == $38.9/month

というわけで、気持ち安い。 GCEはUSかEUしか無いけど。

とりあえずインスタンス適当にデフォルト状態で作って、初ログインしようとしたんですが、まず、gcutil Toolというのをインストールしなきゃいかんらしい。 インスタンス情報とかみても大した情報なくて、「SSH」ってボタン押すと、「このコマンド叩けやぼけー」って言われる

gcutil --service_version="v1" --project="プロジェクト名" ssh  --zone="ゾーン名" "インスタンス名"

んで、gcutil Toolsインストールして、言われた通りコマンド叩いたら怒られる。

There is no currently active account.
You can activate an already-authorized account with
 $ gcloud config set account <account>
or authorize a new account with
 $ gcloud auth login
or any of the other gcloud auth subcommands with
 $ gcloud auth --help

gcloudって何やねん、と思ったけどとりあえず言われた通りにやる。

gcloud config set account **********@gmail.com
gcloud auth login

そしたらいきなりChromeでOAuthの認証画面開いてビビる。 Chromeで開いたWEB画面から認証OKしたら、コンソール上で「認証できたで!」って言われる。 謎技術。

gcloud auth login                                                                                                                                    
Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?scope=なんやらーかんやらー

You can list your projects and create new ones in the Google Cloud console at https://cloud.google.com/console. If you have a project ready, you can enter it now.
Enter a cloud project id (or leave blank to not set): プロジェクト名
You are logged in as ************@gmail.com.

んでもってようやくgcutilコマンド叩いたらびっくり

gcutil --service_version="v1" --project="プロジェクト名" ssh  --zone="ゾーン名" "インスタンス名"
WARNING: You don't have an ssh key for Google Compute Engine. Creating one now...
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
INFO: Updated project with new ssh key. It can take several minutes for the instance to pick up the key.
INFO: Waiting 300 seconds before attempting to connect.

鍵勝手に生成すんのはいいとして、マジでリアルに5分くらい待たされた。 思わずブログ記事書き始めるくらい待たされた。

NFO: Running command line: ssh -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i /path/to/.ssh/google_compute_engine -A -p 22 ユーザー名@インスタンスIP --
Warning: Permanently added 'インスタンスIP' (RSA) to the list of known hosts.
Identity added: /path/to/.ssh/google_compute_engine (/path/to/.ssh/google_compute_engine)
[takyam@takyam-test~]$

みたいなーかんじでSSH接続できた。面倒くさい。 とりあえずログイン直後にdfとfree叩いてみた。

[takyam@takyam-test ~]$free
             total       used       free     shared    buffers     cached
Mem:       1741488     183916    1557572          0       8804      47256
-/+ buffers/cache:     127856    1613632
Swap:            0          0          0
[takyam@takyam-test ~]$ df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda1             10319160    918852   8876124  10% /
tmpfs                   870744         0    870744   0% /dev/shm

10GBのディスクのうち10%は使われてるから、このままだと実質9GBしか使えないね!課金乙!

[takyam@takyam-test ~]$ cat /etc/centos-release
CentOS release 6.4 (Final)

CentOSは6.4みたい。

[takyam@takyam-test ~]$ sudo service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

SSHくらいしか通ってない?(適当)

とりあえず適当に/etc/sysconfig/iptables書き換えて80を許可

[takyam@takyam-test ~]$ sudo service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

この状態でApacheいれてみたけど繋がらない。アレか。

GCEのWEBコンソールの左メニューの「ネットワーク」から「default」を選んで「ファイヤーウォール」のところ見ると、10.0.0.0/8 の全てと 0.0.0.0/0のtcp:22以外しか通るようになってないっぽい。 これまた適当に0.0.0.0/0のtcp:80を通すように設定すると、ようやくhttpd見れた。

というわけで割と普通でした。

感想としては、EC2と比較して日本円で500円程安いだけの事はあるな、という感じ。 AWSがイケてるUI提供してるとは微塵も思ってなかったけど、 GCEと比べると全然いけてるなと感じる。比較って大事。

コンソールとかのレスポンスが微妙にモッサリするのはUSリージョンだからかなぁと想像。

いやぁ、AWSの東京リージョンって素敵ですね。

まぁクラウドの価値ってこんなんじゃ測れない部分にあるんで、 別にだからどうしたって事でもないんですが、 久しぶりにブログ書かなきゃな‐って気がしたので書きましたとさ。

転職にあたっての振り返り

◯◯を退職しました!系のやつです。

9月いっぱいで、現在勤めている会社を退職し、10月1日から新しい職場に移ります。
退職した会社には約4年9ヶ月程お世話になりました。
長いようであっという間でした。

このエントリではこの4年9ヶ月の振り返りと、次の1年に向けての心構えみたいなのを書きたいなと思ってます。自分語りなので対象読者は未来の俺ってことで。

入社当時を振り返って

最初はエンジニアではなくてWEBディレクターとして入社しました。
元々はマークアップエンジニア(HTMLコーダー)になりたくて上京してきて、
結果的にそんな仕事が見つからなかったのですが(ノープラン上京うぇーい)、
とはいえWEBには関わりたかったので今の職場に入社しました。

この時はVBAとAS3がちょろっと書けるくらいで、GETとPOSTの違いもわかってなかったです。
少なくともこの瞬間プログラマーになるなんてのは考えてなかったと思います。
プログラミングは好きで楽しいなーと思ってた程度で。

WEBのディレクターというと実際何をする仕事なのかよくわからないまま働き出しましたが、今思うにディレクターの人は超大変だよね、と改めて思います。プログラミングの何とストレスの無い事か。案件にも依るでしょうが、手を抜こうと思えば割と楽な仕事にもできるのでしょうが、良い物を作ろうとか思うと途端に難しくなる職種だなぁと思います。ディレクターにかぎらずお客様と直接関わったり社内の調整したりするところは何でもそうなんでしょうけど。

あとは技術的な要素に対して、エンジニアと比べると明るくないので、当然の事ではあるのですが、大変だなぁと。幸い私の案件はプログラミングが発生する事が少なかった事と、たまにあった事についてもエンジニアの方が優秀だったのでよしなにやっていただけて、あまり苦労する事はありませんでしたが。

自分が出した依頼として簡単なデータからの検索機能ページみたいなやつを、データをJSONで組んでくれと依頼しました。理由は当時の自分がSQL読めなかったから。今ならMySQLとかで組んじゃうべきところ何でしょうが、自分が理解できないという事でDBを使うんじゃなくてJSONでデータを組んでもらいました。そのデータの運用は私がやる事になるので、あり得ない選択肢では無いにしろ、好手で無い気はします。
とはいえ今の自分が当時の自分を説得するのは面倒くさそうだなとも思うわけです。
「SQLくらい勉強すりゃいいじゃん」と思ってしまう今の自分と「俺はJSONの方がメンテしやすいんだよバーヤバーヤ」っていう当時の俺とで折り合いつけるのは面倒クセェなぁと。

というわけで、ディレクターさんは大変だな、というのを何となく思いました。

エンジニアさまさま、俺さまさまな思考になりがちなところも多少あるので、この辺は謙虚に皆々様なくして成り立たない現実を見て、うまいこと協調できるように心掛けなければなーと改めて反省。

ディレクターとエンジニアの2足のわらじ

ディレクターとしてトータル2年くらい従業させていただいたのですが、そのうちの1年半くらいはエンジニアとの2足のわらじでした。この1年半の間にPHPとかMySQLとか勉強しながらプログラマーに専念したいな熱をためていきました。

この期間の間は本当に良くプログラミングしてたなという感じで、たまに改修入って当時のソースコードを読むと死にたくなる反面、一応いろいろ考えてたんだなーと思いました。なんていうか、この当時は引き出しが少なすぎて、やりたい事、やろうとしてる事はわかるんですが、それがスマートに出来てないというか。
今現在も完璧にスマートでベストなアプローチでプログラミングできてるかっていうと、何がベストなのかも今でもようわからんのは変わらんのですが、今だともっと別なアプローチできるよな、と改修したい欲求に駆られたものです。恐らく新人も似たような感じなんだろうなと思うので、プログラミングの上手い下手は引き出しの数ってのが結構大きいファクターなんだろうなと思います。

エンジニアになる

入社して3年目が始まるタイミングでディレクター業を引退し、プログラミングだけに専念できるようになりました。
社内での配置転換を認めていただいたかたちで、よくよく考えてもありがたい話だったなと感謝が溢れます。割とガチでこのタイミングでの転職も考えたのですが、すんなり面倒くさい事もなく、技術部署への配置転換及び業務内容の変更を受け入れていただきました。
また、ディレクション業務を引き継いでいただいたTさんにも大きな感謝です。ありがとうございました。

エンジニアとして新規プロダクト開発に投入していただいたのですが、この時に初めてミドルウェア含めたサーバー構成の設計や、アプリケーション構成の設計、プロダクトの企画などなど、「製品を作る」工程にイチから関わらせていただき、非常に非常に大きな経験を得る事ができました。

NFSもDRBDもようわかってなかったのですが、各先輩方に教えを請い、無事に形にする事ができました。大規模JS書いたのもこれが初めてで、ここでの苦労が現在のJS開発方針に活きてます。

最後のしごと

最後の業務として約1年間、もうひとつの新しいプロダクト開発にかかわらせていただきました。

アジャイルだったりFuelPHPだったりChefだったりと、ナウい感じの事を1年間やらせていただいて、非常に楽しい1年間でした。ストレスがたまるような苦労は特に無く、チームでチャレンジし続けられた1年間だったと思います。

プロダクトの完成を見る事なく途中で去ってしまうわけで、チームの皆さんはまだまだ大変だと思いますが、よりグレードアップしたかたちでリリースされる事を楽しみにしています。

皆様へ

最終出社日にお菓子を40個くらいお配りしたのですが、全然足りませんでした。
YAPCに行ってる人もたくさんいたのでお会いできなかった方もたくさんいたのですが、それでも全然足りず。

この4年9ヶ月の間にお世話になった人の多さに改めてびっくりしました。普段の業務で関わらない方だとなかなか感謝する機会も無かったのですが、あらためてオフィスを回って挨拶すると、お世話になった人がたくさんたくさんいました。

送別会もたくさん開いていただき、ただで飲み食いさせてもらってごちそうさまでしたm( )m

本当に皆様ありがとうございました。

何名かのエンジニアへ

本当に多くの方にお世話になったのですが、特に何名かの方には多大な影響を受けました。本当に多くの刺激を受けました。
この方たちがいなかったら自分はエンジニアになっていただろうか?ってレベルでお世話になりました。
本当に本当にありがとうございました。

また勉強会や飲み会で会える事を楽しみにしています。

最後に

正直まだ辞めた事があまり実感できてなかったりはするのですが(長い秋休み気分)、明日から新しい職場になりますので、何だかんだとドタバタするんだろうなと思ってますので、こういうふうに感慨に浸れるのも今日までだなぁと。

次の職場は規模が現職より大きくなるので、立ち回りも書くコードも全然違うものなんだろうなとは思っているので、その中で技術者として高いレベルを目指す予定です。漏れ聞こえる範囲でも高いレベルの技術者がいるようなので、追いつけるように努力します。モンハンやってる場合じゃないね!

明日が初出社という事でわりとドキドキしてるんですが、楽しく働けるといいですね。

特にオチは無いのですが、皆様いままで本当にありがとうございました。そしてこれからもよろしくお願いします。(飲み会呼んでね)
新しい職場の皆様は何卒よろしくお願いします。

FuelPHPのHttpNotFoundExceptionはControllerに書かないとだめ

表題のとおりなのですが、ViewModel内でHttpNotFoundExceptionしても404にならない仕様ですのでご注意を。

https://github.com/fuel/core/issues/1019

ViewModelはControllerの処理を切り出すくらいの認識だったのですが、HTTPまわりの処理は切り出させるもんじゃないって思想みたいす。

Response::redirect()とかはできますけど。

IE8でjquery fileuploadでTypeError アクセス拒否な感じのアレやソレ

マジドハマりしましたよ・・・。

Ajaxでファイルをアップロードしようとする時に、IE9以下はXHR Lv2に対応してないので、IFRAMEの中にフォーム生成してうんたらかんたらする必要があります。
で、jQuery File Upload Pluginとか使うとその辺良いようにやってくれるんですが、やってくれるはずなんですが、何故か送信してくれない事案が発生。

ソース追ってくと、IFRAME内のform.submit()(formはjQueryオブジェクト)で止まってるっぽ。なんじゃこりゃ。

ソースはこちら

同じソースでChromeとかは問題なく動くんでIE8の何かにぶちあたったわけですが、結論から言いますと、<input type="file">display:none;だったのがダメっぽいです。

今回は、デザインされたボタンをクリックすると、display:none;$file = $('input[type="file"]')$file.trigger('click')な感じでファイル選択ダイアログが開き、最終的にそれをjQuery File Uploadに渡してPOSTしてたんですが、これだと$fileがhiddenな感じなので、IE8の(わけわかんない)セキュリティによりsubmit()が動作せず(TypeError Access Deniedとかアクセス拒否とかなエラー)、jQuery File Uploadが正常に動作できなかったというオチでした。

なので、IE8の時は<input type="file">display: none;にしないようにしないと、無駄にハマるようでした。

IE駆逐されればいいのに(^q^)

PhpStormで選択中の文字列をクォートでラップする

タイトルの事をやる場合に(たぶん)デフォルトの設定では、

  1. 文字列を選択する
  2. 「'」を押す
  3. 選択した文字列が「'」に置き換わる

っていう挙動なので、これを

  1. 文字列を選択する
  2. 「'」を押す
  3. 選択した文字列が「'」でラップされる

にしたい場合の設定をメモ

下の画像のとおりです。

f:id:takyam1213:20130806144113p:plain

Setting -> IDE Settings: Editor -> Smart Keys -> Surround selection on typing quote or brace

のチェックボックスをオンにすればOK。簡単でしょー。