2013年1月15日火曜日

OptimusGのQメモ機能

Optimus G L-01Eについてた
Qメモ機能について調べてみた。

Qメモ機能は、ボリュームボタンのUP、DOWN同時押しか、
通知領域のボタンからのどちらかしか起動方法がないみたい。

でこいつらが何をしてるかをLogcatで見てみると
下記のようなログが出る。どうやらアクティビティを起動してるだけっぽい。

 I/ActivityManager(467): START {flg=0x14810000 cmp=com.lge.QuickClip/.QuickClipActivity} from pid 21478

ということで同じ事をするアプリ作ってみた。
中身は起動時にQuickClipActivityアクティビティを
起動してるだけ。ちゃんとメモできます。
使い道は特に思いつかない。。

QMemoLauncher
Junpei
価格:無料

2012年12月24日月曜日

PHPのforループの書き方

jQuery/JavaScriptの高速化テクニックまとめ
を見てたら下記のような記述があった。

for内にlengthを使わない(3倍以上早い)
for( i = 0 ; i < array.length ; i++ ){
}
より
for(var i = 0 ,len = array.length; i < len ; i++ ){
}
の方が3倍以上早い
JavaScriptはいろいろ面倒なんだなぁ・・と思ってたけど、
もしかしてPHPでも同じだったりしてと思い試してみた。

検証コードは下記のとおり。
PEARのBenchmarkで長さ100万の配列を
ループするだけの処理を作って実行時間を計測した。
    require_once 'Benchmark/Timer.php';

    // 長さ100万の配列
    $array = array_fill(0, 1000000, 0);

    echo "[1. 毎回count()]" . PHP_EOL;
    benchmark(function () use($array) {
        for ($i = 0; $i < count($array); $i++) {
            ;
        }
    });
    echo PHP_EOL;

    echo "[2. 最初に一度だけcount()]" . PHP_EOL;
    benchmark(function () use($array) {
        $count = count($array);
        for ($i = 0, $count = count($array); $i < $count; $i++) {
            ;
        }
    });
    echo PHP_EOL;

    echo "[参考. foreach]" . PHP_EOL;
    benchmark(function () use($array) {
        foreach ($array as $key => $value){
            ;
        }
    });
    echo PHP_EOL;

    echo "[なぞ. 2.とおなじ処理でuseを参照渡し]" . PHP_EOL;
    benchmark(function () use(&$array) {
        for ($i = 0, $count = count($array); $i < $count; $i++) {
            ;
        }
    });
    echo PHP_EOL;

    exit();

    function benchmark($func) {
        $timer = new Benchmark_Timer();
        $timer->start();

        $func();

        $timer->stop();
        $timer->display();
    }

結果は、前述のJavaScriptの例と同じように
  • 2. 最初に一度だけcount() → 約5ms
  • 1. 毎回count() → 約28ms
となった(詳細は文末に)。
2.のほうが断然速い(5倍くらい)。
今までずっと1.で書いてたけど、
foreachより遅いみたいでちょっとショック。

あと一点謎なのが、本題と関係ないけど
無名関数にuseで外側の配列みれるようにしているのを
リファレンスにすると、なぜかすごく遅くなること。

実行結果
(環境:Windows8 64bit/Intel Core2 Duo E6600/メモリ4GB)


[1. 毎回count()]
----------------------------------------------------
marker  time index            ex time         perct   
----------------------------------------------------
Start   1356292436.43409400   -                0.00%
----------------------------------------------------
Stop    1356292436.70909500   0.275001       100.00%
----------------------------------------------------
total   -                     0.275001       100.00%
----------------------------------------------------

[2. 最初に一度だけcount()]
----------------------------------------------------
marker  time index            ex time         perct   
----------------------------------------------------
Start   1356292436.70931900   -                0.00%
----------------------------------------------------
Stop    1356292436.76084800   0.051529       100.00%
----------------------------------------------------
total   -                     0.051529       100.00%
----------------------------------------------------

[参考. foreach]
----------------------------------------------------
marker  time index            ex time         perct   
----------------------------------------------------
Start   1356292436.76101700   -                0.00%
----------------------------------------------------
Stop    1356292436.97736200   0.216345       100.00%
----------------------------------------------------
total   -                     0.216345       100.00%
----------------------------------------------------

[なぞ. 2.とおなじ処理でuseを参照渡し]
----------------------------------------------------
marker  time index            ex time         perct   
----------------------------------------------------
Start   1356292436.97756500   -                0.00%
----------------------------------------------------
Stop    1356292437.18008100   0.202516       100.00%
----------------------------------------------------
total   -                     0.202516       100.00%
----------------------------------------------------




2012年3月19日月曜日

男は黒に染まれ

ということで、黒背景にするための手順まとめ。
下記の3つが対象。
  1. vim
  2. Eclipse
  3. TeraPad

vimはメニューから適当なのを選ぶだけ。


EclipseはプラグインのEclipse Color Themesをインストールして設定画面から適当なのを選べばOK。



TeraPadはここから色設定ファイルをDLしてきて設定画面で読み込む。



2011年6月8日水曜日

Google +1 Buttonのテスト

Google +1 Buttonを設置してみたので、
試しにおして見るためのテスト記事

2011年5月31日火曜日

JSONPで遊んでみた

最近JavaScript界隈のことが全然分かってないことに気づき、
ちょっとあせったので手始めにJSONPで遊んでみた。

ことの始まりは、下記の記事を発見したこと。

内容は、jsonip.comというサイトにアクセスすると
JSON形式で自分のIPが返ってくるというもので、さらにしらべてみると、
URLの末尾に/xxxをつけるとJSONPになるらしい。
JSONPというのは、呼び出し側で指定したコールバック関数に、
JSON形式の値を適用する形(↓の形で)でJavaScriptを
返してくれる仕組みのこと。

例えば、 http://jsonip.com/callback と指定したら下記のようになる。
callback({"ip":"xx.xx.xx.xx"});
(xxの部分はホントは数字)

難しいことは分からないけど、このやり方だと別のドメイン間でも
呼び出しができるらしい。

ということで、早速実践。まずはローカルのHTMLでjsonip.comに
アクセスして自分のIPを表示させてみる。全体の流れはこんな感じ。
  1. コールバック関数の定義
  2. JSONP実行
2.の部分はいろいろやり方あるみたいだけど、今回は
一番お手軽なscriptタグのsrc属性でURLを指定するやり方を使う。

自分のIPを表示(HTML版)
<html>
<head>
<script>
<!--
function callback(obj) {
     // 受け取ったJSONオブジェクトのipの値表示するだけ
     alert(obj.ip);
}
// -->
</script>
</head>
<body>
<script type="text/javascript" src="http://jsonip.com/callback"></script><p>test</p>
</body>
</html>

これだけだとおもしろくないので、次はこれをブックマークレットにしてみる。
やりかたは別ドメインの外部スクリプトを実行するブックマークレットを参考にした。

説明が面倒くさくなったので、ポイントだけいうと下記の2点がHTML版とちがうところ。
  • コールバック関数を呼び出せるようにwindowオブジェクトに定義する
  • JSONP呼び出しのために動的にscript要素を生成する
自分のIPを表示(ブックマークレット版)
javascript:(function(){
window.callback = function(obj) {
 alert('あなたのIPは ' + obj.ip + ' です。');
};
var d = document;
var e = d.createElement('script');
e.charset='utf-8';
e.src = 'http://jsonip.com/callback';
d.getElementsByTagName('head')[0].appendChild(e);
})();

これを使うとわざわざ確認君にいかなくてもIPアドレスが分かります。

実用性ほぼ0だけど、数時間で動くものができたのでよしとしよう。

2010年10月25日月曜日

HeliosでPHP書いてSVNにコミット

最新のEclipse 3.6(Helios)でPHP開発環境とSVNへコミット出来る環境の両方をそろえるのに意外と苦労したので、手順のメモをまとめておきます。

  1. Eclipse 3.6のインストール
    普通にEclipseのサイトから落として、普通にインストールする。この時、「Eclipse Classic」のほうを落とすこと。「Eclipse for PHP Developers」だと理由は分からないけど、Subversiveいれてもうまく動きません。image
  2. PDTとSubversiveのインストール
    「Eclipse Classic」を起動して、Help > Install New Software…からPDTとSubversiveをインストールする(標準の更新URLでPHPとSVNを検索すればでてくる)。 image 再起動後に下記のダイアログが表示されるので、そこからSVN Kit 1.3.2(一番新しいバージョンでOK)をインストールする。ダイアログが表示されない場合、Help > Subversive > Migrate Projects and Settingsを選択するといいかも。
    image
  3. PDTのアップデート
    この状態で、PHPファイル同士で比較を行うと比較エディタがまともに動かなくなる。
    image
    PDTのバグらしいので、下記の更新URLからPDTをアップデートする。
    http://download.eclipse.org/tools/pdt/updates/2.2/milestones
    すると比較エディタがちゃんと動作するようになる。
    めでたしめでたし。
    image
    参考リンク:
    https://bugs.eclipse.org/bugs/show_bug.cgi?id=324051