Logicool Utltrathin Keyboard miniが届いたのでいろいろ試して見た

AppleStoreで注文しておいたLogicool Ultrathin Keyboard miniが届いたので試して見た結果をバラバラと記述してみる。

ちなみに検証としてさくらのVPSにPHP、MySQL、WordPressをインストールしてみた。

まずは、キーピッチについて。
アルファベットにあたる部分については全く問題を感じないレベルで快適に入力できる。
しかし、そのしわ寄せとして特殊キーが細長くなっている点や、Esc、TabがFnキーとの組み合わせでしか使えなかったりといったデメリットがある。
インストール作業はsshで行ったのだが上記のキーを比較的多用する作業なので、慣れるまでは大変。特にEscはホームキーに割り当てられているのでうっかりFn押さないで押しちゃうとsshアプリを閉じてしまう(もちろん切断はされないが・・・)のでめんどくさいことに。
パスを補完するときにTabキーを使うのだけどこちらはqに割り当てられているので、うっかりQQQQQとなることが何度かあった。

まぁ、でも概ね快適に入力できる。

キータッチはフニャっとはしてなくて比較的悪くない。薄くて軽い割に検討しているのではないか。

一番不満があるのは、iPad miniを載せる溝の角度が急なため、実際に利用する時に結構画面が見づらい状況になっている点である。
かなり上から見下ろすかたちになるので、もう少し斜めになっていた方がありがたかった。

用途として、文章入力には普通に実用的なレベルで入力ができるキーボードだが、コマンド入力したりviでスクリプト書いたりとかは、まぁ、なんとか使えるかなというレベルである。

とりあえず、買ってよかったかどうかと言われたら、良かったと答えられるレベルの製品で安心した。

#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();