<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6435427080198561295</id><updated>2024-08-29T08:43:58.818+09:00</updated><category term="android"/><category term="CodeIgniter"/><category term="GCM"/><category term="Macbook Air"/><category term="MySQL"/><category term="Oracle"/><category term="PEAR"/><category term="PHP"/><category term="apache"/><category term="subversion"/><category term="つぶやき"/><title type='text'>すけろぐ</title><subtitle type='html'>技術的メモや140文字以上のつぶやきなど。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6435427080198561295.post-8727544276931584341</id><published>2013-08-19T18:53:00.001+09:00</published><updated>2013-08-19T19:01:27.260+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="CodeIgniter"/><category scheme="http://www.blogger.com/atom/ns#" term="GCM"/><category scheme="http://www.blogger.com/atom/ns#" term="PEAR"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>GCM(Google Cloud Message) を PHP + PEAR Request2 + CodeIgniter で JSON で</title><content type='html'>タイトルの通り、CodeIgniter に PEAR の Request2 をインストールし、JSON形式でプッシュ送信を行う備忘録。&lt;br /&gt;
&lt;br /&gt;
[前提条件]&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;CodeIgniter が使える&lt;/li&gt;
&lt;li&gt;PEAR がインストールされている&lt;/li&gt;
&lt;li&gt;Google より Project ID 取得済&lt;/li&gt;
&lt;li&gt;Google より Server API Key 取得済&lt;/li&gt;
&lt;li&gt;通知したい端末の RegistrationID が取得済&lt;/li&gt;
&lt;/ul&gt;
[やる事]&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;PEAR Request2 のインストール&lt;/li&gt;
&lt;li&gt;CodeIgniter へ PEAR Request2 のインストール&lt;/li&gt;
&lt;li&gt;プッシュ通知の実装（サンプル後述）&lt;/li&gt;
&lt;/ol&gt;
1. &amp;nbsp;PEAR Request2 のインストール&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:shell&quot;&gt;$ su
# pear install http_request2
&lt;/pre&gt;
&lt;br /&gt;
PEAR Request でハマった。
これは非推奨となっているが、CodeIgniterでは使えない。&lt;br /&gt;
Request2 を使う。&lt;br /&gt;
&lt;br /&gt;
2. CodeIgniter へ PEAR Request2 のインストール&lt;br /&gt;
&lt;br /&gt;
2.1. PEAR用ディレクトリをCodeIgniterへ作成&lt;br /&gt;
&lt;br /&gt;
色々サイトを見たが、 system/application/pear ディレクトリを作る、と良く見かける。これでまず少しハマる。&lt;br /&gt;
どうやら実際は &quot;CIが配置された場所&quot;/application/pear ディレクトリを作る。&quot;system&quot;の部分は&quot;system&quot;ディレクトリではない。アプリケーションのトップディレクトリ、というか、プロジェクトディレクトリの事を表している。&lt;/project&gt;&lt;br /&gt;
&lt;pre&gt;project dir/
    application/
        cache/
        config/
        controllers/
        core/
        helpers/
        hooks/
        language/
        libraries/
        logs/
        models/
        pear/
        third_party/
        views/
&lt;/pre&gt;
&lt;br /&gt;
理解すると、他の場所にも移せると思うがとりあえず時間無いので確実に動く方法という事で。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:shell&quot;&gt;$ cd &amp;lt;インストールされているディレクトリ&amp;gt;/application
$ mkdir pear

$ sudo chown apache pear
&lt;/pre&gt;
&lt;br /&gt;
パーミッション変更は適宜。Mac OS X ユーザなら &quot;apache&quot;ではなく&quot;_www&quot; になると思う。&lt;br /&gt;
（apache を起動しているユーザが参照できれば良い）&lt;br /&gt;
&lt;br /&gt;
2.2. PEARの一部を CodeIgniter へコピー&lt;br /&gt;
&lt;br /&gt;
調べてみると、依存関係がどうのこうのとあったが、面倒なので、PEAR.php と HTTPディレクトリ、Net ディレクトリをコピーする。&lt;br /&gt;
&lt;br /&gt;
pear を探す。&lt;br /&gt;
&lt;pre class=&quot;brush:shell&quot;&gt;$ which pear
/usr/bin/pear
$
$ more /usr/bin/pear
#!/bin/sh
exec /usr/bin/php -C -d include_path=/usr/share/pear \
    -d output_buffering=1 /usr/share/pear/pearcmd.php &quot;$@&quot;
$&lt;/pre&gt;
&lt;br /&gt;
ちなみにこれは &quot;CentOS release 6.4 (Final)&quot; で実行した結果 /usr/share/pear にPEARがあった。Mac OS X(Mountain Lion) だと&amp;nbsp;/usr/lib/php/pear&lt;br /&gt;
&lt;pre class=&quot;brush:shell&quot;&gt;$ cd /usr/share/pear
$ cp -p PEAR.php /xxxxxxxx/application/pear
$ cp -pr HTTP /xxxxxxxx/application/pear
$ cp -pr Net /xxxxxxxx/application/pear
&lt;/pre&gt;
&lt;br /&gt;
2.3. CodeIgniter 各種設定&lt;br /&gt;
&lt;br /&gt;
/application/config/config.php&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;$config[&#39;enable_hooks&#39;] = TRUE;
&lt;/pre&gt;
&lt;br /&gt;
/application/config/hooks.php&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;$hook[&#39;pre_controller&#39;][] = array(
        &#39;class&#39; =&amp;gt; &#39;Pear_hook&#39;,
        &#39;function&#39; =&amp;gt; &#39;index&#39;,
        &#39;filename&#39; =&amp;gt; &#39;pear_hook.php&#39;,
        &#39;filepath&#39; =&amp;gt; &#39;hooks&#39;
);
&lt;/pre&gt;
&lt;br /&gt;
include path の調整を行う為、ここで定数を用意しておく。&lt;br /&gt;
PEAR のファイルを CodeIgniter へコピーしたが、PEARにも同じファイルがあり、通常なら、元のPEARのへの include path が始めに参照されてしまう。&lt;br /&gt;
もし、CodeIgniter に配置した PEAR のファイルに手を入れるような事があった場合、混乱を防ぐ為、include path の順序を CodeIgniter 側の PEAR が先にくるように修正していく。&lt;br /&gt;
&lt;br /&gt;
/web/index.php&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;define(&#39;TOPPATH&#39;, realpath(BASEPATH . &#39;..&#39;) . &#39;/&#39;);
&lt;/pre&gt;
&lt;br /&gt;
/application/hooks/pear_hook.php&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;if (!defined(&#39;BASEPATH&#39;)) exit(&#39;No direct script access allowed&#39;);

class Pear_hook{
    function index(){
        // OS independent
        ini_set(&#39;include_path&#39;,TOPPATH.&#39;application/pear/&#39;.PATH_SEPARATOR.ini_get(&#39;include_path&#39;));
        
        // on Apache
        // ini_set(&#39;include_path&#39;,ini_get(&#39;include_path&#39;).&#39;:&#39;.BASEPATH.&#39;application/pear/&#39;);
        // on Windows
        // ini_set(&#39;include_path&#39;,ini_get(&#39;include_path&#39;).&#39;;&#39;.BASEPATH.&#39;application/pear/&#39;);
    }
}

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
これで準備は整った。後は実装。&lt;br /&gt;
その前に、サーバから 443 ポートで外へ接続できるか確認しておく事。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:shell&quot;&gt;$ curl https://www.google.co.jp
&lt;/pre&gt;
&lt;br /&gt;
これで画面にHTMLが表示されれば、443ポートで外に出られるのが確認できる。&lt;br /&gt;
&lt;br /&gt;
3. プッシュ通知の実装&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;class SampleController extends CI_Controller {
    /** Android 通知用プロジェクトID */
    const NOTIFY_ANDROID_PROJECT_ID = &#39;6330938XXXXXX&#39;;
    /** Android プッシュ通知用サーバーAPIキー */
    const NOTIFY_ANDROID_SERVER_API_KEY = &#39;AIzaSyAc_IazhhxVfdCgaRsBesgXXXXXXXXXXXX&#39;;
    const NOTIFY_ANDROID_GCM_URL = &#39;https://android.googleapis.com/gcm/send&#39;;

    function _notifyAndroid($registrationId, $message) {
        if( !$registrationId ) {
            return FALSE;
        }

        $this-&amp;gt;load-&amp;gt;library(&#39;pearloader&#39;);
        $https_request = $this-&amp;gt;pearloader-&amp;gt;load(&#39;HTTP&#39;, &#39;Request2&#39;);
        $https_request-&amp;gt;setUrl(SampleController::NOTIFY_ANDROID_GCM_URL);
        $https_request-&amp;gt;setMethod(HTTP_Request2::METHOD_POST);
        $https_request-&amp;gt;setConfig(&#39;ssl_verify_peer&#39;, false);
        $https_request-&amp;gt;setHeader(&#39;Content-Type&#39;, &#39;application/json&#39;);
        $https_request-&amp;gt;setHeader(&#39;Authorization&#39;, &#39;key=&#39; . SampleController::NOTIFY_ANDROID_SERVER_API_KEY);

        // 端末レジストレーションID
        if(!is_array($registrationId)) {
            $registrationId = array($registrationId);
        }
        $data[&#39;registration_ids&#39;] = $registrationId;
        // メッセージグループ
        //$message[&#39;collapse_key&#39;] = &#39;&#39;;
        // デバイスがアイドルではない場合すぐには送らない設定
        //$message[&#39;delay_while_idle&#39;] = &#39;true&#39;;
        // デバイスがオフラインの時、メッセージを保持しておく時間（秒）
        $data[&#39;time_to_live&#39;] = 600;
        // メッセージ内容
        $data[&#39;data&#39;] = array(&#39;message&#39; =&amp;gt; $message);
        $https_request-&amp;gt;setBody(json_encode($data));

        $response = $https_request-&amp;gt;send();

        $resDecoded = json_decode($response-&amp;gt;getBody());
        if( !$resDecoded-&amp;gt;success ) {
            //Logger::error(__FILE__, __LINE__, &#39;GCM response&#39; . $response-&amp;gt;getBody());
            return FALSE;
        }
        return $resDecoded-&amp;gt;success;
    }
}

&lt;/pre&gt;
&lt;br /&gt;
見ての通り、&quot;_&quot;から始まるメソッド名なので、外から叩けない。&lt;br /&gt;
パラメータ&quot;$registrationId&quot; は、１つの文字列でも、配列に入った複数でも問題ない。&lt;br /&gt;
Registration ID は端末毎に取得し、サーバ側に何らかの状態で保持しておく必要がある。&lt;br /&gt;
&lt;br /&gt;
一つ注意が必要な場所があった。&lt;br /&gt;
端末一つでのテストしかしていないので、40行目の success は複数端末を指定した場合、何になるか分からない。&lt;br /&gt;
ちなみに、端末一台にプッシュ通知を行った結果 Google  サーバから返るJSONのサンプルは以下。&lt;br /&gt;
※ &quot;success&quot; : 1 ... のところが、複数端末へ実行した時何が返るか試してません。なのでサンプルコードの if文の所の調整が必要になるかもしれない。&lt;br /&gt; 
&lt;br /&gt;
&lt;pre&gt;{&quot;multicast_id&quot;:772188850101XXXXXXXX,&quot;success&quot;:1,&quot;failure&quot;:0,&quot;canonical_ids&quot;:0,&quot;results&quot;:[{&quot;message_id&quot;:&quot;0:1376887251914339%352f836XXXXXXXXXX&quot;}]}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/8727544276931584341/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://dice--k.blogspot.com/2013/08/gcmgoogle-cloud-message-php-pear.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/8727544276931584341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/8727544276931584341'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/2013/08/gcmgoogle-cloud-message-php-pear.html' title='GCM(Google Cloud Message) を PHP + PEAR Request2 + CodeIgniter で JSON で'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6435427080198561295.post-2813956770065795560</id><published>2012-11-25T23:52:00.000+09:00</published><updated>2012-11-25T23:53:34.788+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="Macbook Air"/><title type='text'>apache設定。。とほほ@Macbook Air</title><content type='html'>いつも同じハマり方してると思う。&lt;br /&gt;
いい加減学習しろっつの。ということで、&lt;br /&gt;
書いておきます。&lt;br /&gt;
&lt;br /&gt;
ついに、 Macbook Air を買ってしまいました。&lt;br /&gt;
特別にアップル信者ではないですが、自宅デスクトップ、Thinkpad がクタクタになってきたので、そろそろ、、ということで、次は64bitパソコンだろうと思ってましたが、私もついにMacを使い始めることになるとはね。。&lt;br /&gt;
&lt;br /&gt;
MacはBSDです。ずっとLinuxをいじっていたので、大丈夫かなと思ってましたが、今のところ問題ないですね。もちろんMac独自のものが色々あると思いますが。&lt;br /&gt;
&lt;br /&gt;
今日は、だらだら余計なことを言ってしまいましたが、、、&lt;br /&gt;
起こっていた現象&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;デフォルトのドキュメントルートだとうまく表示される&lt;/li&gt;
&lt;li&gt;ドキュメントルートを変更するとForbidden が返る。&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
もう、初心者か！と自分に突っ込みました。&lt;br /&gt;
&lt;br /&gt;
指定したドキュメントルートはこんな感じ&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;/Users/MY_ACCOUNT/Documents/workspacePDT/MyProject/web
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Macで浮かれていたのか、BSDでさくさく自由にプロセス立ち上げて開発できるのが嬉しくて、か、、上記で言いたいのは、&quot;/Users/...&quot; にドキュメントルートを指定したことです。（&quot;/Users&quot;は、言うまでもなく、ユーザディレクトリで、Linuxなら、&quot;/home&quot;に該当）&lt;br /&gt;
Mac OS X (10.8.2) の apache は、&quot;_www&quot;ユーザ、&quot;_www&quot;グループでプロセスが起動されます。&lt;br /&gt;
ドキュメントルートパスがトップディレクトリからたどって行って、この_wwwユーザか_wwwグループの権限の人が&quot;読み込み&quot;、&quot;実行&quot;権限がないディレクトリが一つでも間に入ると、読み取ることができなくなり、&quot;Forbidden&quot;になってしまいます。&lt;br /&gt;
&lt;br /&gt;
とりあえず、&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;chgrp _www /Users/MY_ACCOUNT/Documents
chmod 750 /Users/MY_ACCOUNT/Documents
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
これで見れるようになりました。&lt;br /&gt;
Documents ディレクトリ意外は &quot;その他&quot;のグループ権限に読み込み・実行権限が割り当てられていました。&lt;br /&gt;
という事でした。&lt;br /&gt;
ふぅー、危なくMacPortsで新たにapacheをインストールするところだった。&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/2813956770065795560/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://dice--k.blogspot.com/2012/11/apachemacbook-air.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/2813956770065795560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/2813956770065795560'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/2012/11/apachemacbook-air.html' title='apache設定。。とほほ@Macbook Air'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6435427080198561295.post-7797003322058975161</id><published>2012-11-10T18:17:00.000+09:00</published><updated>2012-11-10T18:17:43.384+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><title type='text'>MySQL BLOB の画像が切れる</title><content type='html'>ふひー。やはりブログは性に合わない。。&lt;br /&gt;
&lt;br /&gt;
いくつか書きたまってますが、公開してません。間違ったこと書きたくないので。なるべくね。&lt;br /&gt;
&lt;br /&gt;
今日は、忙しいのに、なぜか書いてる。&lt;br /&gt;
&lt;br /&gt;
ちょっとだけハマった事書いておきます。&lt;br /&gt;
&lt;br /&gt;
MySQL の BLOB 型は 64KB までしか入りません。&lt;br /&gt;
64KB 以上のバイナリを入れようとすると、そこで切れます。&lt;br /&gt;
&lt;br /&gt;
64KB 以上の画像など、バイナリをMySQLへ保存したい時は、MIDIUMBLOB とかにします。&lt;br /&gt;
MIDIUMBLOB は 64M までいけます。&lt;br /&gt;
&lt;br /&gt;
それだけです。。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/7797003322058975161/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://dice--k.blogspot.com/2012/11/mysql-blob.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/7797003322058975161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/7797003322058975161'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/2012/11/mysql-blob.html' title='MySQL BLOB の画像が切れる'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6435427080198561295.post-2716077834547354518</id><published>2012-03-05T00:40:00.001+09:00</published><updated>2012-03-05T00:42:36.673+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="subversion"/><title type='text'>svn: File not found: transaction</title><content type='html'>subversionでタグを作成する際に発生したエラー。&lt;br /&gt;
原因は単純。&lt;br /&gt;
中間のディレクトリが存在しない状態でタグやブランチを作成しようとするとエラーが発生します。&lt;br /&gt;
例えば&lt;br /&gt;
&lt;br /&gt;
/svn_repositories/projects/AAA/source/trunk/&lt;br /&gt;
&lt;br /&gt;
このtrunkから&quot;release1.0&quot;タグを作成したい場合&lt;br /&gt;
&lt;br /&gt;
svn copy file:///svn_repositories/projects/AAA/source/trunk/ file:///svn_repositories/projects/AAA/source/tags/release1.0&lt;br /&gt;
&lt;br /&gt;
を実行する際には、間のディレクトリ&lt;br /&gt;
&lt;br /&gt;
/svn_repositories/projects/AAA/source/tags&lt;br /&gt;
&lt;br /&gt;
が先に作成されていなくてはなりません。&lt;br /&gt;
作成されない状態で、実行すると&lt;br /&gt;
&lt;br /&gt;
svn: File not found: transaction&lt;br /&gt;
&lt;br /&gt;
が発生します。&lt;br /&gt;
&lt;br /&gt;
間のディレクトリを作成するには&lt;br /&gt;
&lt;br /&gt;
svn mkdir file:///svn_repositories/projects/AAA/source/tags&lt;br /&gt;
&lt;br /&gt;
を実行します。</content><link rel='replies' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/2716077834547354518/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://dice--k.blogspot.com/2012/03/svn-file-not-found-transaction.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/2716077834547354518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/2716077834547354518'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/2012/03/svn-file-not-found-transaction.html' title='svn: File not found: transaction'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6435427080198561295.post-1518912800372564884</id><published>2012-02-12T22:29:00.000+09:00</published><updated>2012-02-12T22:29:04.882+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><title type='text'>ORA-00907:右カッコがありません。</title><content type='html'>職場でちょっとハマったのでメモ。&lt;br /&gt;
&lt;br /&gt;
副問い合わせにorder byを入れると右カッコがありませんになる。</content><link rel='replies' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/1518912800372564884/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://dice--k.blogspot.com/2012/02/ora-00907.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/1518912800372564884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/1518912800372564884'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/2012/02/ora-00907.html' title='ORA-00907:右カッコがありません。'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6435427080198561295.post-3842055199577552804</id><published>2012-02-09T22:43:00.001+09:00</published><updated>2012-02-09T22:48:29.326+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><title type='text'>Android のログレベル</title><content type='html'>ログレベルについて軽く調べたところによると、特にマニュフェストファイルの &lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;application android:debuggable&amp;gt;
&lt;/pre&gt;属性に連動しているわけではないという事がわかった。&lt;br /&gt;
&lt;br /&gt;
知らないうちにLog.d()などを沢山埋めている場合、&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;application android:debuggable=&amp;quot;false&amp;quot;&amp;gt;
&lt;/pre&gt;にしたところで、勝手に抑止されるわけではないので、以下のようなクラスを用意すると良いだろう。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;
public class Log {

 private Log() {
 }

 public static void i(final String tag, final String msg) {
  i(tag, msg, null);
 }

 public static void i(final String tag, final String msg, final Throwable th) {
  // info は常に出す。
  if (null == th) {
   android.util.Log.i(tag, msg);
   
  } else {
   android.util.Log.i(tag, msg, th);
  }
 }

 public static void d(final String tag, final String msg) {
  d(tag, msg, null);
 }

 public static void d(final String tag, final String msg, final Throwable th) {
  if (!AppMan.DEBUG_MODE) {
   return;
  }
  if (null == th) {
   android.util.Log.d(tag, msg);
  } else {
   android.util.Log.d(tag, msg, th);
  }
 }

 public static void e(final String tag, final String msg) {
  e(tag, msg, null);
 }

 public static void e(final String tag, final String msg, final Throwable th) {
  // error レベルは常に出す
  if (null == th) {
   android.util.Log.e(tag, msg);
  } else {
   android.util.Log.e(tag, msg, th);
  }
 }

 public static void w(final String tag, final String msg) {
  w(tag, msg, null);
 }

 public static void w(final String tag, final String msg, final Throwable th) {
  // warning も常に出す事にする。
  if (null == th) {
   android.util.Log.w(tag, msg);
  } else {
   android.util.Log.w(tag, msg, th);
  }
 }

 public static void v(final String tag, final String msg) {
  v(tag, msg, null);
 }

 public static void v(final String tag, final String msg, final Throwable th) {
  if (!AppMan.DEBUG_MODE) {
   return;
  }
  if (null == th) {
   android.util.Log.v(tag, msg);
  } else {
   android.util.Log.v(tag, msg, th);
  }
 }
}

&lt;/pre&gt;&lt;br /&gt;
後は、各クラスでeclipseの ctrl + shift + o でimport定義を更新して、上記クラスを利用するようにすれば、簡単にマニュフェストファイルに連動して抑止する事ができる。&lt;br /&gt;
&lt;br /&gt;
ただし、上記ソースを見て頂ければわかると思いますが、AppMan.DEBUG_MODE がマニュフェストファイルと連動していなくてはならない。&lt;br /&gt;
アプリケーション起動の際、この定数をマニュフェストファイルを参照して初期化する必要がある。&lt;br /&gt;
&lt;br /&gt;
マニュフェストファイルの android:debuggable 属性を参照するコードは以下。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public class Utils {
 private Utils() {
 }

 public static boolean  isDebugAble(Context ctx){
  PackageManager manager = ctx.getPackageManager();
  ApplicationInfo appInfo = null;
  try {
   appInfo = manager.getApplicationInfo(ctx.getPackageName(), 0);
  } catch (NameNotFoundException e) {
   Log.e(e.toString());
   return false;
  }
  if((appInfo.flags &amp; ApplicationInfo.FLAG_DEBUGGABLE) == ApplicationInfo.FLAG_DEBUGGABLE) return true;
  return false;
 }
}
&lt;/pre&gt;&lt;br /&gt;
このソースは以下から貰いました。ありがとうございます。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.taosoftware.co.jp/blog/2009/03/android_apireleasedebug.html&quot;&gt;http://www.taosoftware.co.jp/blog/2009/03/android_apireleasedebug.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
後は、アプリケーション起動時、一番最初に表示されるActivityなどで、独自のAppManクラスのDEBUG_MODE定数に上記ユーティリティの戻り値をセットすれば良い。</content><link rel='replies' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/3842055199577552804/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://dice--k.blogspot.com/2012/02/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/3842055199577552804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/3842055199577552804'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/2012/02/android.html' title='Android のログレベル'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6435427080198561295.post-5009306632398683393</id><published>2010-11-17T00:38:00.003+09:00</published><updated>2010-11-17T00:47:19.816+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><title type='text'>Activity クラスのコンストラクタ</title><content type='html'>Activityクラスのコンストラクタについてちょっとだけ調べてみた。&lt;br /&gt;
ただし、検証機は&lt;br /&gt;
&lt;br /&gt;
xperia&lt;br /&gt;
Android 2.1&lt;br /&gt;
&lt;br /&gt;
での話。&lt;br /&gt;
&lt;br /&gt;
MAINのアクティビティが起動される際、そのアプリケーションについて１度でも起動した事があるとか、設定が完了していないと使う事ができないようなアプリケーションの場合、起動時に確認が必要になる。&lt;br /&gt;
Activityのライフサイクルではじめに呼ばれる&lt;br /&gt;
&lt;br /&gt;
onCreate()&lt;br /&gt;
&lt;br /&gt;
でチェックしても良いが、余計なオーバーヘッドをなるべく減らすために、onCreate() よりも呼ばれる頻度が低く、はじめに呼ばれるメソッドにチェックするコードを書きたいと思い、それは、、、結局もうコンストラクタしかない。&lt;br /&gt;
&lt;br /&gt;
アプリケーションのMAINに指定してあるActivityのコンストラクタがどんなタイミングで呼ばれるか調べた。&lt;br /&gt;
検証した内容は&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;アプリケーション起動後、ホーム キーを押し、また起動&lt;/li&gt;
&lt;li&gt;アプリケーション起動後、戻るキーを押して、アクティブじゃなくなった後、また起動&lt;/li&gt;
&lt;li&gt;アプリケーション起動後、ホーム キー、電源ボタンを１度押し、サスペンド状態にして、再び起動&lt;/li&gt;
&lt;li&gt;アプリケーション起動後、戻るキーを押して、アクティブじゃなくなった後、電源ボタンを１度押しサスペンド状態にして、再び起動&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;検証結果は、&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;「戻る」で非アクティブした場合（その後サスペンドにしてもしなくても）、次回起動時、ほぼ必ずコンストラクタが呼ばれる。（今んとこ100%）&lt;/li&gt;
&lt;li&gt;ホーム キーで非アクティブにした場合（その後サスペンドにしてもしなくても）、次回起動時はほぼ必ずコンストラクタが呼ばれない（今んとこ100%)&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;って結論になったよ。という話。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;ただし、xperia、android 2.1 でしか試してないので、他のプラットホームでは、どうなるかは分からない。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;おそらく、その時の空きメモリ容量などの都合によるかもしれないので、残りが少ない時は、毎回コンストラクタが呼ばれるかもしれない。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;とりあえず、自分が使いたいと思った目的には合ってるから、これで良いかなという事で。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;それからandorid を利用する際、なるべくメモリに残さないように非アクティブにしたいのであれば、ホーム キーより、戻るキーの方が良いみたい、って事がわかった。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/5009306632398683393/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://dice--k.blogspot.com/2010/11/activity.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/5009306632398683393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/5009306632398683393'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/2010/11/activity.html' title='Activity クラスのコンストラクタ'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6435427080198561295.post-6083904712148733699</id><published>2010-11-07T10:10:00.005+09:00</published><updated>2010-11-07T19:51:01.531+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><title type='text'>Android ローカライズメモ</title><content type='html'>やりたい事&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;指定のない場合の言語を英語にする&lt;/li&gt;
&lt;li&gt;端末の言語設定が日本語の場合、日本語のテキストを表示&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
やる事&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;/res/values/strings.xml には英語用のテキストを書く&lt;/li&gt;
&lt;li&gt;/res/values-ja フォルダ作成し、strings.xmlファイルを作る&lt;/li&gt;
&lt;li&gt;ja のstrings.xml には、日本語のテキストを書く&lt;/li&gt;
&lt;/ol&gt;これだけ。&lt;br /&gt;
&lt;br /&gt;
端末の言語設定にかかわらずアプリ個別で言語を指定する方法はよくわからない。&lt;br /&gt;
このページ(&lt;a href=&quot;http://developer.android.com/intl/ja/guide/topics/resources/localization.html&quot;&gt;Localization&lt;/a&gt;)を全部読んだらわかるかも知れない、、がとりあえず保留。&lt;br /&gt;
&lt;br /&gt;
とりあえず、xperiaでは、端末の言語設定に従ってテキストが英語、日本語に切り替わるのは確認済み。&lt;br /&gt;
&lt;br /&gt;
他言語と言語を表す2文字はここ(&lt;a href=&quot;http://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt&quot;&gt;ISO-639-2_utf-8.txt&lt;/a&gt;)</content><link rel='replies' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/6083904712148733699/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://dice--k.blogspot.com/2010/11/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/6083904712148733699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/6083904712148733699'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/2010/11/android.html' title='Android ローカライズメモ'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6435427080198561295.post-19711639302735810</id><published>2010-11-07T10:10:00.003+09:00</published><updated>2010-11-07T10:10:00.169+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><title type='text'>ListPreference サンプル</title><content type='html'>今では色々サンプルが転がってますが、完結してなくて結局いくつかを見て回ることになるので記録を残しておこうかなと。&lt;br /&gt;
&lt;br /&gt;
/res/xml フォルダを作成し、setting.xml（ファイル名は適宜）を作成&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&lt;preferencescreen xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt;
    &lt;preferencecategory android:title=&quot;@string/setting_title&quot;&gt;
        &lt;listpreference android:defaultvalue=&quot;1&quot; android:dialogtitle=&quot;@string/select_choice_dlg_title&quot; android:entries=&quot;@array/select_labels&quot; android:entryvalues=&quot;@array/select_values&quot; android:key=&quot;select_choice&quot; android:summary=&quot;@string/select_choice_summary&quot; android:title=&quot;@string/select_choice_title&quot;&gt;
        &lt;/listpreference&gt;
    &lt;/preferencecategory&gt;
&lt;/preferencescreen&gt;
&lt;/pre&gt;&lt;br /&gt;
strings.xml に以下のように記述&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&lt;string name=&quot;setting_title&quot;&gt;設定&lt;/string&gt;
 
 &lt;string name=&quot;select_choice_dlg_title&quot;&gt;選択&lt;/string&gt;
 &lt;string name=&quot;select_choice_summary&quot;&gt;設定を選びます。&lt;/string&gt;
 &lt;string name=&quot;select_choice_title&quot;&gt;以下から選んでください。&lt;/string&gt;
 
 &lt;string-array name=&quot;select_labels&quot;&gt;
        &lt;item&gt;選択１&lt;/item&gt;
        &lt;item&gt;選択２&lt;/item&gt;
    &lt;/string-array&gt;
    &lt;string-array name=&quot;select_values&quot;&gt;
        &lt;item&gt;1&lt;/item&gt;
        &lt;item&gt;2&lt;/item&gt;
    &lt;/string-array&gt;
&lt;/pre&gt;&lt;br /&gt;
javaサンプル&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public class Main extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
  
        addPreferencesFromResource(R.xml.setting);
    }
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/19711639302735810/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://dice--k.blogspot.com/2010/11/listpreference.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/19711639302735810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/19711639302735810'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/2010/11/listpreference.html' title='ListPreference サンプル'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6435427080198561295.post-8271719719299079385</id><published>2010-11-07T08:30:00.003+09:00</published><updated>2010-11-07T08:30:00.788+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="つぶやき"/><title type='text'>初ブログ</title><content type='html'>はじめまして&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;はじめましたー&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;実は、ナント、人生初ブログです！&lt;br /&gt;
今更ながら！&lt;/div&gt;&lt;div&gt;凄いな、俺！&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;ここまで乗りきれてないやつはなかなかいない。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;なぜなんでしょう。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dice--k.blogspot.com/feeds/8271719719299079385/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://dice--k.blogspot.com/2010/11/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/8271719719299079385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6435427080198561295/posts/default/8271719719299079385'/><link rel='alternate' type='text/html' href='http://dice--k.blogspot.com/2010/11/blog-post.html' title='初ブログ'/><author><name>dice-k</name><uri>http://www.blogger.com/profile/18445039629887106195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmaG34g1LVDi-biyEYFWgm6kFpu294CITAdFe-uFzuVzXLRNfrk9mBxp8l9_iUwZHx23X7oA4b8JYMsEigCU9J4hBavYd7sBrAkTbU8cykVDztGKAdt6dK1-u-KEY8Q/s220/mokkori.jpg'/></author><thr:total>0</thr:total></entry></feed>