2012-01-01
2011年振り返りと2012年やること
年越しでなんとなくコードを書く雰囲気じゃなかったから、CDTVのAKB48観ながら振り返りと来年やることについて書いてみます。
2011年を振り返ってみると、転職して1月から今の会社で働いたこともあって、その影響が大きい一年だったなぁという感じでした。
自分なりに好きにPerl書いたりしていた環境から、バリバリPerlを使っている環境へ変わったことはとても刺激的でした。
後は、こどもが生まれて如何に勉強する時間を確保して、効率的に勉強することを模索し続けた一年だった感じがします。
この辺りは今も模索中なので、もっと色んな人に話を聞いてみたいですね。
仕事
GitとかGearmanとかMemcachedなどの仕事では使ったことなかったようなソフトウェア、複数人でのCPAN Moduleをバリバリ使った開発と、とにかく慣れることに必死な感じでした。
仕事の内容としてはこの1年はソーシャルアプリの開発をずっとやっていて、ひどい設計や実装で迷惑を掛けながら学ぶことの多い一年でした。
特にDB設計の難しさを特に痛感しました。あとMySQL力の低さ。。
またPerl以外でもスマートフォン用にFlashをJavaScriptでCanvas使って移植したり、新しくActionScript2(!?)に触れたりと色々やらせてもらって有り難かったです。
もっと頑張らないとヤバいという危機感を感じまくりながら2012年も頑張りたいと思います。
あと今やっている仕事で結果出したいです。
個人
仕事での学びが多いことをいいことに、自分で触手を伸ばして新しいことを学ぶことをおろそかにした一年だったなぁという感じです。
いくつかWebサービスやTitanium Mobileを使ったiPhoneアプリ的なものも作ってみたりしたのですが、作ってみて自分ですら必要性を感じなかったので公開しなかったり。。。
唯一公開したのは CountDownLastFMRanking というサービスなのですが、問題点や修正したい部分はあるもののこれで新しい音楽を知ることが出来たので個人的には気に入っていて使っています。
(アクセスは全然来てないですが。。。)
あと、Youtube動画の検索結果を連続再生するだけの1枚のHTML、これも時々使っています。
感じたこと
- 勉強会はきっかけ
- 勉強会は勉強するきっかけや気持ち、テンションをもらうところだと感じていて、勉強会行ってその後の行動に結びつけられなかったら意味ないなぁということを痛感し反省です。感想ブログ書いて終わったりと。。。
- 自分の性格にあったサービス
- http://blog.livedoor.jp/kensuu/archives/53456283.html
- このエントリにもありますが、自分がそのサービスを作る理由って大事だなと感じました。みんなが求めていることを汲みとってサービスの形で表現出来る人もいますが、自分は自分が必要だと思っているサービスしか作れないと感じました。なのでもっと純粋な気持ちでサービスを考えて作っていきたいと思っています。
2012年
振り返ってばかりでもしょうがないので個人で2012年すること。
- 最近Objective-Cの本を読み始めていて、今更ながら面白いなぁと思い始めているので、2012年中に何か作ってAppStoreで配信したいと思います。
- まだ何を作りたいか決まっていなくて、それを決めるのが一番大きな壁な感じもしますが。あとデザイン。。
- なんか、ウェブサービスを1つ作ってリリースします。(出来ればスマートフォン向けで)
- これもネタはこれから考えます。。。
- もっとソース読んだり、開発に参加したりする。
- Tengは便利だし全部読みたいなぁと思っています。
2011年に関わった全ての皆様、ありがとうございました。
本年も宜しくお願い致します!
2011-12-06
Perlでダブルクォーテーション中の関数の結果を展開する
Advent Calendar、今年は書くことが出来なかったのでちょっとした小ネタを。
printなんかで文字列と一緒に関数の値を表示するときには、下のように「.」で連結させるかprintfで表示させるのが一般的なのかなと思うのですが、
#!perl use strict; use warnings; use DateTime; print "Now it is " . DateTime->now( time_zone => "Asia/Tokyo" ); # or printf "Now it is %s", DateTime->now( time_zone => "Asia/Tokyo" ); # Now it is 2011-12-06T00:27:02
今の会社に入って知ったのですが、下のような書き方も出来るんですね。
#!perl use strict; use warnings; use DateTime; print "Now it is @{[ DateTime->now( time_zone => q{Asia/Tokyo} ) ]}"; # Now it is 2011-12-06T00:27:02
関数の戻り値を配列のリファレンスに入れて、それをデリファレンスしているように見えるのですが、何でこれで表示されるのかがわからない。。
と思って調べてみたら、既に2008年のAdvent CalendarでTAKESAKOさんが書かれていました。
というわけで、Advent Calendarは素晴しい企画ですね!
2011-12-02
ユーザーデータRowにマスタデータRowへのアクセサを生やすこと
単なる反省&メモです。
反省
- DBIx::SkinnyなどのO/R Mapper使ってる場合のお話です。
- よくあるユーザーが所持しているアイテム一覧を表示するページで、便利だからついユーザーアイテムのRowにアイテムマスタのRowへのアクセサを生やして、それを意識せずループの中などで使ってしまうことがあります。。すみません。。
while ( my $user_item = $iter->next ) { print $user_item->item->name . "を" . $user_item->count . "個\n"; }
- 特にテンプレートの中なんかでやってしまってさらにごめんなさいという感じです。
どうしよう
- じゃあどうしようという話ですが、ユーザーアイテムデータから持っているアイテムidを取り出してアイテムテーブルにinで投げて、idをキーとしたハッシュに入れるっていうのがSQLの実行回数も少なくて、後でも使いやすくていいのかなと思ったりしています。
my $item_ids = []; while ( my $user_item = $iter->next ) { push @$item_ids, $user_item->item_id; } my $item_hash = { map { $_->id => $_ } $db->search('item', { id => $item_ids})->iter->all }; $iter->reset; while ( my $user_item = $iter->next ) { print $item_hash->{$user_item->item_id}->name . "を" . $user_item->count . "個\n"; }
- またこういう場合って、マスタデータを全部キャッシュに載せておくことが多いのかなとも思ったりするのですがどうなのでしょうか!?
Tengで遊んでみた
- というわけで、上記のような場合のベンチマークなどを勉強も兼ねてTengで試したりしています。
- また、上記のようにidをキーにしたハッシュにしたい場合、DBIのselectall_hashrefのようなメソッドがあると便利だなぁと思い、勉強がてらTengのプラグイン書いてみました。
- search_hashrefというデフォルトではidがキー、rowが値になったハッシュを返してくれるだけの関数です。
- 上記のようにmap使ったりして1行で書けるのですが、、、毎回書くのが面倒だなぁと思ったので。。
- https://github.com/koba04/p5-teng-plugin-searchhashref
- Tengは使うのも簡単だし、ソースもシンプルでとても勉強になるモジュールですね!
