転職してひと月経ちました

一ヶ月前にクルーズ株式会社を退職しました。

もともと、C#erだった私でしたが、クルーズで何をやっていたかというと、

JavaScriptベースのフレームワークを利用したiPhone/Android向けネイティブアプリ開発
C#を利用した社内システム開発チームのタスク管理及び、開発
PHPを利用した社内システム開発

などをやっていました。

ある程度好きにやらせてもらっていたので、特に不満があったわけでもなく、辞めたいと思ったことも全くありませんでした。

ではなぜ転職したのかというと、
好きな言語であるC#でもっと全力で開発できる環境があると知ってしまったからです。
そして、偶然、その環境と縁があったから。

というわけで、5月1日から株式会社グラニでC#と朝から晩まで向き合っている日々です。

今後は期待に応えられるよう本業で頑張りつつ、C#を中心としたエコシステムに、今まで以上にコミットしていけたらとおもいます。

FacebookTwitterHatenaTumblr共有

#php 向け #LINQ もどきArrayWrapper for PHPでleft joinとjoinキーにラムダを設定できるようにした

ArrayWrapper for PHPで今まではJOINのキーには連想配列のキー名を指定するだけしかできませんでしたが、ラムダ式を渡せるようになりました。
これによって、指定したキーの値が連想配列だった場合など、さらに深い項目をキーに指定したり、加工した結果をキーに指定したりすることができるようになりました。
また、INNER JOINのみ対応していましたが、LEFT JOINにも対応することでJOINの活用の幅が広がりました。

ArrayWrapper for PHP

まず最初に、ラムダ式が指定できるようになった説明から・・・
今までは、

       $leftArray = array(
                    array("key" => 2,"name" => "Nasal Hair Cutter"),
                    array("key" => 3,"name" => "scissors"),
                    array("key" => 5,"name" => "knife")   
                );

        $rightArray = array(
                array("id" => 1,"item_id" => 2,"value" => 10),
                array("id" => 2,"item_id" => 2,"value" => 20),
                array("id" => 3,"item_id" => 2,"value" => 30),
                array("id" => 4,"item_id" => 3,"value" => 40),
                array("id" => 5,"item_id" => 3,"value" => 50),
                array("id" => 6,"item_id" => 5,"value" => 60),
                array("id" => 7,"item_id" => 5,"value" => 70),
            );

という配列に対して

//joinの引数は
//Join対象の配列,
//元の配列のキー一覧,
//join対象のキー一覧,
//joinした結果を表すmap関数,
//INNER JOINかLEFT JOINかを規定する
//となっている。
        $actual = ArrayWrapper::Wrap($leftArray)
                ->join($rightArray,
                        array("key"),
                        array("item_id"),
                        function ($leftValue,$rightValue)
                        {

                            return 
                                array("item_id" => $rightValue["item_id"],
                                         "name" => $leftValue["name"],
                                         "value" => $rightValue["value"]);
                        })
                ->toVar();

とキー指定のところに注目すると

array("key"),
                        array("item_id"),

と書いていましたが、キーにラムダ式を入れられるようになったので、

       $target = ArrayWrapper::Wrap($leftArray);

        $actual = $target
                ->join($rightArray,
                        array("key"),
                        array(function($x){return $x["item_id"];}),
                        function ($leftValue,$rightValue)
                        {

                            return 
                                array("item_id" => $rightValue["item_id"],
                                         "name" => $leftValue["name"],
                                         "value" => $rightValue["value"]);
                        })
                ->toVar();

array("key"),
                        array(function($x){return $x["item_id"];}),

のようにJOINするためのKEYの一覧に”function($x){return $x[“item_id”];}”というようなラムダも渡せるようになりました。
この機能、今みたいな配列の直近のIndexで解決できるものは、全然嬉しくないんですが、
“function($x){return $x[“a”][“b”];}”みたいに、何段か下の値を持ってきたい場合や、ある程度丸めて比較したい場合なんかに効果を発揮します。(実際に使っていてかなりの効果を得られています。)

次にLEFT JOINの説明です。

以下のように、Joinの最後の引数にJoinType::LEFTと渡してあげることで、left joinになります。

       $target = ArrayWrapper::Wrap($leftArray);

        $actual = $target
                ->join($rightArray,
                        array("key"),
                        array("item_id"),
                        function ($leftValue,$rightValue)
                        {

                            return 
                                array("item_id" => $leftValue["key"],
                                         "name" => $leftValue["name"],
                                         "value" => isset($rightValue) ? $rightValue["value"]:0);
                        },JoinType::LEFT)
                ->toVar();

新しいMacBook Airを買ってしまった

新しいMacBook Airを買ってしまった。
今回はAppleStoreで発売日に注文した。
11″ SSD 512GB MEM 8GB core i7
の一番上のモデル。

前回、「新しいMacBook Airを買ってしまった。」と書いたのが昨年の8月だったので、1年経っていないのか。

前回は13″を購入したのだが、

・11″+ACアダプタをセットにしても13″よりも軽い。
・本格的に使う時は結局家で27″ディスプレイに接続する。

の2点から11″を購入。

今まで、11″->13″->13″->11″と来ているので結構迷走しているのかもしれない。

ちなみに、MacBook Airにハードウェア的な魅力はあまり感じていない。
ならば、何故買うのかというと、OSXとWindowsが両方使える中では一番軽いから。

来年は、11″でもRetinaな静電式タッチパネルを搭載し、800gくらいになっているとうれしい。

就職しました9月1日から

ここ12年くらい正社員ではなくフリーで仕事をしていたのですが、縁あって9月1日から就職しました。
もう既に1ヶ月以上が経過しているのですが、さすがに8年くらいいた現場を離れるのにエネルギを結構使いました。
新しい職場は今までやってきた制御系ともSI系とも違い、ソーシャル系のアプリを提供している会社なので、新しい知見が得られるのかなと期待しているのと、私が持っているノウハウを提供出来るのではないだろうかとも思っています。

思えば、8月までいた職場ではずっと一人でフレームワークを開発しながら実際のプロジェクトでの開発も行っていました。
よく7年間誰にも何も言われずブレることなくフレームワーク開発ができたなとも思うし、よく外部の人間にやらせてくれたな。とも思います。
プロジェクト開発の合間に、工数がつけられないままよく低きに流れずに維持できたなと、少し自分をほめて上げたい気もします。
その即物的な資産(実装コードなど)は引き継ぎましたが、その過程で得た「こうすればうまく適用できる。」「こうすれば開発がスムーズにすすむ。」といった知見と自信が無形の資産として自分の中に残っているのでそれが活かせたらいいなと思います。

新しいMacBook Airを買ってしまった

新しいMacBook Airを買ってしまった。
本当は買わないつもりだったんだけど、ついつい。
今回は初めて店頭モデルを購入。
13″ SSD 256GB MEM 4GB core i5 1.7
の店頭モデルでは一番上のモデル。
カスタマイズモデルの最上級との差がi5かi7かの違いだったので、たくさんポイントがつくヤマダ電機で購入した。
さすがに、新しいMacBook Airは3ヶ月前に買った旧型よりも、スクロール等でもたつくことが無いね。

ただ、結構ファンが回るなーという印象。
特に、VMWare起動しているときとか、バックアップしているときなど。

一度、起動して放置していたらファンだけ盛大に回ったまま反応しなくなって、諦めて強制終了しました。

まぁ、そんなわけで前のモデルはヤフオクに出したので、いい里親が見つかるとよいなあと。

OSX 10.7 lion にmacportsでmongodbのインストールが失敗する件の対処(2011/07/30時点)

今日、macportsを利用してmongodbをインストールしようしたら、

sudo port install mongodb
---> Computing dependencies for mongodb
---> Building mongodb
Error: Target org.macports.build returned: shell command failed (see log for details)
Log for mongodb is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_databases_mongodb/mongodb/main.log
Error: Status 1 encountered during processing.
To report a bug, see

こんな感じでインストールに失敗してしまったのだけど、twitterとかいろいろと検索していたら、ちゃんとmacports.orgに対処するための情報が上がっていました。

mongodb @1.8.2 Build failure in Lion (10.7)

上記のリンクを参照するとまさに、lionでビルドに失敗するという情報で、
change historyを下まで見ると既にmongodb.orgにパッチが出ていました。
それによると以下の手順でたしかにインストールができました。

https://trac.macports.org/ticket/30263#comment:4

#pogoplug accessにファイルリストをローディング中の表示を追加

フォルダに存在するファイル数が多く、一回のリクエストで取得しきれなかったときは表示しつつ自動で再リクエストをして、全てのファイルが取得されるまで、その動作を繰り返すようにしています。
しかし、ローディング中の表示をつけていなかったので、まだファイルリストをリクエストしているのか、いないのかが分かりにくい状況でした。
そこで、ファイルリストの表示の一番最後にリクエスト中はローディング中を表すインジケータを表示するようにしました。
全てファイルリストを表示し終わった時に消えるようになっています。

これで、ファイルリストの表示を一番下までスクロールしたときにリクエスト中なのか、違うのかが分かるようになったと思います。

#pogoplug accessの不具合を修正し若干UIを変更しました

pogoplugのバージョンアップにともなって、ハードウェアがなくても、ソフトウェアだけでPC内のフォルダも公開出来るようになりました。
それにともない、ハードウェアユーザはpogoplug本体とPCとでデバイスが二つになりますが、それに付随してうまく表示されない不具合があったので修正しました。
また、デバイスの選択リストをなくし、サービスの選択リストのみとし、オンラインのものだけ表示するようにしました。
おかげで、シンプルになり、ファイルリストの表示領域が若干広がりました。

http://nal-6295.biz/ipogo/