<?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: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-1195584593823240536</id><updated>2012-01-26T19:58:29.137+09:00</updated><category term='経済関係'/><category term='shindig'/><category term='OpenSSO'/><category term='gitorious.org'/><category term='clojure'/><category term='pcre'/><category term='deviceatlas'/><category term='mod_chxj'/><category term='blogspot'/><category term='GNU Screen'/><category term='OpenSocial'/><category term='tomcat'/><category term='SQLite'/><category term='libmemcache'/><category term='Oracle'/><category term='rpm'/><category term='evolution'/><category term='本'/><category term='yum'/><category term='css'/><category term='git'/><category term='valgrind'/><category term='python'/><category term='C言語'/><category term='携帯'/><category term='oauth'/><category term='vim'/><category term='Apache'/><category term='Android'/><category term='work'/><category term='mod_proxy_ajp'/><category term='室温'/><category term='xml'/><category term='myminicity'/><category term='libcroco'/><category term='&#x9;お勉強Android'/><category term='MySQL'/><category term='Gadget'/><category term='CodeReading'/><category term='java'/><category term='CentOS5.1'/><category term='Debian'/><category term='Xorg'/><category term='XStream'/><category term='ohloh'/><category term='CentOS'/><category term='ZendFramework'/><category term='お勉強'/><category term='OpenOffice'/><category term='その他'/><category term='YUI'/><category term='django'/><category term='SDK'/><category term='Haskell'/><category term='PHP'/><category term='Firefox'/><category term='PostgreSQL'/><category term='apr_memcache'/><category term='Ruby'/><category term='libserf'/><category term='Gist'/><category term='stone'/><category term='Apache Shindig'/><category term='memcached'/><category term='JavaScript'/><category term='libmemcached'/><category term='jython'/><category term='unzip'/><category term='foursquare'/><category term='subversion'/><category term='OS'/><title type='text'>とりあえず</title><subtitle type='html'>メモ代わり。てきとーに。
いや、ですからてきとーですって。
2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default?start-index=101&amp;max-results=100'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>620</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-977478759498808312</id><published>2012-01-26T19:55:00.002+09:00</published><updated>2012-01-26T19:58:29.154+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android] 消せないアプリ</title><content type='html'>Android必須ではない、&lt;br /&gt;プリインストールされているアプリで消せないアプリを見つけると、&lt;br /&gt;必要以上にイラっとするね。。。&lt;br /&gt;&lt;br /&gt;まぁ、root取れれば大体は消せるんだけど。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ちなみにIS05&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-977478759498808312?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/977478759498808312/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=977478759498808312' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/977478759498808312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/977478759498808312'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2012/01/android.html' title='[Android] 消せないアプリ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7421155432892929806</id><published>2012-01-26T19:51:00.004+09:00</published><updated>2012-01-26T19:54:41.124+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQLite'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][SQLite] LIMIT OFFSET</title><content type='html'>&lt;pre&gt;&lt;br /&gt;  SELECT * FROM HOGEHOGE WHERE TARATARA = "HOGETARAPIN" LIMIT 10 OFFSET 20&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;は&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SELECT * FROM HOGEHOGE WHERE TARATARA = "HOGETARAPIN" LIMIT 10,20&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;らしい。&lt;br /&gt;&lt;br /&gt;あれ？&lt;br /&gt;&lt;br /&gt;"HOGETARAPIN"じゃなくて"HOGETARAPI"かも。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7421155432892929806?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7421155432892929806/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7421155432892929806' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7421155432892929806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7421155432892929806'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2012/01/androidsqlite-limit-offset.html' title='[Android][SQLite] LIMIT OFFSET'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1958140176750899073</id><published>2012-01-25T23:23:00.001+09:00</published><updated>2012-01-25T23:30:12.451+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android] SQLiteDatabase#closeは明示で呼ぶな、Cursor#closeは明示で呼べ</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/ukiki999/20100524/p1"&gt;http://d.hatena.ne.jp/ukiki999/20100524/p1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;なるほど。。。&lt;br /&gt;&lt;br /&gt;おーまいが&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1958140176750899073?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1958140176750899073/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1958140176750899073' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1958140176750899073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1958140176750899073'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2012/01/android-sqlitedatabaseclosecursorclose.html' title='[Android] SQLiteDatabase#closeは明示で呼ぶな、Cursor#closeは明示で呼べ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-5590342945078598073</id><published>2012-01-21T18:48:00.001+09:00</published><updated>2012-01-21T18:49:04.537+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] あ</title><content type='html'>あけおめーw&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-5590342945078598073?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/5590342945078598073/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=5590342945078598073' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5590342945078598073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5590342945078598073'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2012/01/blog-post.html' title='[その他] あ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-3748868722434938548</id><published>2011-12-13T02:31:00.002+09:00</published><updated>2011-12-13T02:33:23.536+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android] Intent.ACTION_CALL</title><content type='html'>いきなり電話かけちゃうのであせった。。。&lt;br /&gt;&lt;br /&gt;Intent.ACTION_DIAL&lt;br /&gt;&lt;br /&gt;こっちはいきなり電話しちゃうってことはないので安心。。。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-3748868722434938548?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/3748868722434938548/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=3748868722434938548' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/3748868722434938548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/3748868722434938548'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/12/android-intentactioncall.html' title='[Android] Intent.ACTION_CALL'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2327614075658697975</id><published>2011-12-02T19:21:00.001+09:00</published><updated>2011-12-02T19:22:49.509+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android] エミュレータに位置情報通知</title><content type='html'>&lt;pre&gt;&lt;br /&gt;$ telnet localhost 5554&lt;br /&gt;Trying 127.0.0.1...&lt;br /&gt;Connected to localhost.localdomain.&lt;br /&gt;Escape character is '^]'.&lt;br /&gt;Android Console: type 'help' for a list of commands&lt;br /&gt;OK&lt;br /&gt;geo fix 1 2&lt;br /&gt;OK&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2327614075658697975?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2327614075658697975/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2327614075658697975' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2327614075658697975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2327614075658697975'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/12/android.html' title='[Android] エミュレータに位置情報通知'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2083022751933815245</id><published>2011-12-01T20:18:00.001+09:00</published><updated>2011-12-01T20:23:00.245+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foursquare'/><title type='text'>[foursquare] Venues</title><content type='html'>現場、犯行現場、会場。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;現在位置付近の犯行現場の検索は&lt;br /&gt;&lt;br /&gt;https://api.foursquare.com/v2/venues/search&lt;br /&gt;&lt;br /&gt;かな。&lt;br /&gt;&lt;br /&gt;現在位置付近のトレンド現場は&lt;br /&gt;https://api.foursquare.com/v2/venues/trending&lt;br /&gt;かな。&lt;br /&gt;&lt;br /&gt;そして、&lt;br /&gt;現在位置付近のおすすめ現場は&lt;br /&gt;https://api.foursquare.com/v2/venues/explore&lt;br /&gt;かな。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2083022751933815245?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2083022751933815245/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2083022751933815245' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2083022751933815245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2083022751933815245'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/12/foursquare-venues.html' title='[foursquare] Venues'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4090589718471636125</id><published>2011-12-01T20:07:00.002+09:00</published><updated>2011-12-01T20:10:39.748+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foursquare'/><title type='text'>[foursquare] APIで認証</title><content type='html'>APIで認証するには、WebViewなどのEmbededなブラウザか外部ブラウザを&lt;br /&gt;使うしかないらしいよ。&lt;br /&gt;&lt;br /&gt;そのサンプル&lt;br /&gt;&lt;a href="https://github.com/foursquare/android-oauth-example"&gt;https://github.com/foursquare/android-oauth-example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;あ、OAuthだー&lt;br /&gt;&lt;br /&gt;そんだけ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4090589718471636125?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4090589718471636125/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4090589718471636125' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4090589718471636125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4090589718471636125'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/12/foursquare-api.html' title='[foursquare] APIで認証'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1021703625075057402</id><published>2011-12-01T19:50:00.001+09:00</published><updated>2011-12-01T19:51:29.913+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foursquare'/><title type='text'>[foursquare] foursquare</title><content type='html'>なんじゃらほい。&lt;br /&gt;&lt;br /&gt;ということで登録してみた。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1021703625075057402?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1021703625075057402/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1021703625075057402' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1021703625075057402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1021703625075057402'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/12/foursquare-foursquare.html' title='[foursquare] foursquare'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-570161848649555127</id><published>2011-10-13T22:40:00.004+09:00</published><updated>2011-10-13T22:44:30.792+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenOffice'/><title type='text'>[OpenOffice] メモ:SaveAsCSVなど</title><content type='html'>&lt;script src="https://gist.github.com/1284239.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;で、&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1284246.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;参考というかコピー元:&lt;br /&gt;&lt;a href="http://haraita9283.blog98.fc2.com/blog-entry-118.html"&gt;http://haraita9283.blog98.fc2.com/blog-entry-118.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.xml.com/pub/a/2006/01/11/from-microsoft-to-openoffice.html"&gt;http://www.xml.com/pub/a/2006/01/11/from-microsoft-to-openoffice.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-570161848649555127?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/570161848649555127/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=570161848649555127' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/570161848649555127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/570161848649555127'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/10/openoffice-saveascsv.html' title='[OpenOffice] メモ:SaveAsCSVなど'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2592629664966225685</id><published>2011-10-08T15:44:00.004+09:00</published><updated>2011-10-08T15:47:25.278+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unzip'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>[Debian][unzip] 日本語ファイル名の文字化け</title><content type='html'>&lt;pre&gt;&lt;br /&gt;$ unzip -O cp932 foo.zip&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;としたいのだけど、debian squeezeのunzipには-Oオプションが無いので&lt;br /&gt;&lt;a href="http://linux.ikoinoba.net/index.php?mode=page&amp;aim=rpm_deb"&gt;憩いの場&lt;/a&gt;さんが&lt;br /&gt;公開されているリポジトリをありがたく利用した。&lt;br /&gt;&lt;br /&gt;うん、すばらしー&lt;br /&gt;&lt;br /&gt;そんだけ.&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2592629664966225685?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2592629664966225685/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2592629664966225685' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2592629664966225685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2592629664966225685'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/10/debianunzip.html' title='[Debian][unzip] 日本語ファイル名の文字化け'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-5977523389763056354</id><published>2011-09-30T07:01:00.001+09:00</published><updated>2011-09-30T07:01:43.351+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>[Ruby]ＪＩＳ　Ｘ３０１７</title><content type='html'>知らんかった&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-5977523389763056354?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/5977523389763056354/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=5977523389763056354' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5977523389763056354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5977523389763056354'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/09/ruby.html' title='[Ruby]ＪＩＳ　Ｘ３０１７'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7191891731839210747</id><published>2011-08-10T20:28:00.009+09:00</published><updated>2011-08-10T20:42:10.632+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Gist'/><category scheme='http://www.blogger.com/atom/ns#' term='blogspot'/><title type='text'>[Gist][お勉強] blogspotにGistを張る</title><content type='html'>https://gist.github.com/&lt;br /&gt;&lt;br /&gt;にいくといきなりテキストボックスが開いているんで、何か貼り付ける。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そしたら、&lt;br /&gt;&lt;br /&gt;https://gist.github.com/1136605&lt;br /&gt;&lt;br /&gt;みたいなurlが割り当てられて、&lt;br /&gt;&lt;br /&gt;開いたページの右端に"embed"というリンクがあるので押下。&lt;br /&gt;&lt;br /&gt;すると&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script src="https://gist.github.com/1136605.js?file=gistfile1.txt"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;みたいな文字列が出てくるのでコピー。&lt;br /&gt;でblogspot側でペースト。&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1136605.js?file=gistfile1.txt"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ほら。&lt;br /&gt;&lt;br /&gt;今更なんだけどね。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7191891731839210747?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7191891731839210747/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7191891731839210747' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7191891731839210747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7191891731839210747'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/08/gist-gistblogspot.html' title='[Gist][お勉強] blogspotにGistを張る'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7914956423684349601</id><published>2011-08-10T19:45:00.009+09:00</published><updated>2011-08-10T20:07:30.971+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNU Screen'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>[Debian][GNU Screen] gitリポジトリからインストールするよ(squeeze)</title><content type='html'>ふと、GNU Screenをsqueezeの4.0.3から4.1.0開発版へ移行したくなったよ。&lt;br /&gt;&lt;br /&gt;ということで、&lt;br /&gt;&lt;br /&gt;GNU ScreenのプロジェクトページからGitリポジトリの情報をいただき、、、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ git clone git://git.savannah.gnu.org/screen.git ./screen&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;cloneし始めるのでしばし待つ。&lt;br /&gt;&lt;br /&gt;終わったら&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cd ./screen/src&lt;br /&gt;$ vi INSTALL&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;でINSTALLを確認。&lt;br /&gt;&lt;br /&gt;あとはINSTALLのとおり実行すれば良いだけ。&lt;br /&gt;&lt;br /&gt;おおむね、以下のとおり。&lt;br /&gt;1) autogen.sh&lt;br /&gt;2) ./configure&lt;br /&gt;3) make&lt;br /&gt;4) make install&lt;br /&gt;&lt;br /&gt;で一応、autogen.shも確認。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cat autogen.sh&lt;br /&gt;#!/bin/sh&lt;br /&gt;exec autoreconf&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;autoreconfだけみたいね。&lt;br /&gt;autoconf2.13が万が一入ってたら、autoconf2.67に更新しておかないと&lt;br /&gt;EXTENSIONSなんたらが無いって怒られるよ。&lt;br /&gt;そして怒られた。&lt;br /&gt;&lt;br /&gt;configureは一応、--prefix=/usr/localでやった。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ./configure --prefix=/usr/local&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;で、update-alternativesで追加しといた。&lt;br /&gt;&lt;br /&gt;で無事GNU Screen最新版。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ screen -version&lt;br /&gt;Screen version 4.01.00devel (GNU8cf5efc) 2-May-06&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そしておもむろにgit log。&lt;br /&gt;おお、、いるいるw&lt;br /&gt;&lt;br /&gt;そんだけー&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7914956423684349601?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7914956423684349601/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7914956423684349601' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7914956423684349601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7914956423684349601'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/08/debiangnu-screen-gitsqueeze.html' title='[Debian][GNU Screen] gitリポジトリからインストールするよ(squeeze)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2948432427465918155</id><published>2011-08-05T20:59:00.002+09:00</published><updated>2011-08-05T21:03:38.637+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='evolution'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>[Debian][evolution] Evolution-shell -Message: Network disconnected. Forced offline.</title><content type='html'>evolutionなるメールソフトを使ってみようかと&lt;br /&gt;&lt;br /&gt;apt-get installした。&lt;br /&gt;&lt;br /&gt;だけど起動しても&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Evolution-shell -Message: Network disconnected. Forced offline.&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と言われてオンラインにできない。(squeeze)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"Offline Mode" feature fails to detect proper online state for networks that are managed outside of network manager."&lt;br /&gt;&lt;br /&gt;なんてのを見つけたんで、&lt;br /&gt;network-managerをapt-get remove&lt;br /&gt;してみた。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;evolution動いた。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;正しいアプローチじゃないと思うけど、別にいいや。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2948432427465918155?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2948432427465918155/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2948432427465918155' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2948432427465918155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2948432427465918155'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/08/debianevolution-evolution-shell-message.html' title='[Debian][evolution] Evolution-shell -Message: Network disconnected. Forced offline.'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-8973264503978332164</id><published>2011-08-04T22:28:00.004+09:00</published><updated>2011-08-04T23:12:23.601+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gitorious.org'/><title type='text'>[gitorious.org] すぐ落ちるよ・・・</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;あ、よかった・・・つながった&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-8973264503978332164?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/8973264503978332164/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=8973264503978332164' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8973264503978332164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8973264503978332164'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/08/gitoriousorg.html' title='[gitorious.org] すぐ落ちるよ・・・'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1563079082095765661</id><published>2011-08-04T14:27:00.005+09:00</published><updated>2011-08-04T15:05:04.439+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] Activityを半透明にしてみるよ</title><content type='html'>http://developer.android.com/guide/topics/ui/themes.html&lt;br /&gt;&lt;br /&gt;のとおり。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;style name="Theme.Translucent"&amp;gt;&lt;br /&gt;  &amp;lt;item name="android:windowBackground"&amp;gt;@android:color/transparent&amp;lt;/item&amp;gt;&lt;br /&gt;  &amp;lt;item name="android:windowIsTranslucent"&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;  &amp;lt;item name="android:windowAnimationStyle"&amp;gt;@android:style/Animation.Translucent&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんてなテーマがあるので、半透明にしたいActivityのテーマに適用してやると透明に。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;activity&lt;br /&gt;      android:name="jp.co.qsdn.android.iwashi3d.setting.SettingActivity"&lt;br /&gt;      android:label="@string/setting_title"&lt;br /&gt;      android:launchMode="singleTask"&lt;br /&gt;      android:theme="@android:style/Theme.Translucent"&lt;br /&gt;      &amp;gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってな感じ。&lt;br /&gt;&lt;br /&gt;半透明具合や色を変えたいなら、Theme.Translucentのandroid:windowBackgroundの値を&lt;br /&gt;変えてやるみたい。&lt;br /&gt;&lt;br /&gt;なのでTheme.Translucentを継承して自前のThemeを用意しちゃう。&lt;br /&gt;ファイル名はres/values/styles.xmlとかres/values/themes.xmlとかかしら。&lt;br /&gt;&lt;br /&gt;で継承して作った自前Themeは以下な感じ。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;                       &lt;br /&gt;  &amp;lt;color name="prefs_background_color"&amp;gt;#ae000000&amp;lt;/color&amp;gt;            &lt;br /&gt;  &amp;lt;style name="Theme.PrefsBackground" parent="android:style/Theme.Translucent"&amp;gt;&lt;br /&gt;    &amp;lt;item name="android:windowBackground"&amp;gt;@color/prefs_background_color&amp;lt;/item&amp;gt;&lt;br /&gt;  &amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Theme.PrefsBackgroundというテーマを作ってみた。&lt;br /&gt;で、こいつを&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;activity&lt;br /&gt;      android:name="jp.co.qsdn.android.iwashi3d.setting.SettingActivity"&lt;br /&gt;      android:label="@string/setting_title"&lt;br /&gt;      android:launchMode="singleTask"&lt;br /&gt;      android:theme="@style/Theme.PrefsBackground"&lt;br /&gt;      &amp;gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ってな感じで指定すればいい感じ。&lt;br /&gt;&lt;br /&gt;#ae000000の"#ae"は半透明具合だそうで。アルファ値ね。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1563079082095765661?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1563079082095765661/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1563079082095765661' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1563079082095765661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1563079082095765661'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/08/android-activity.html' title='[Android][お勉強] Activityを半透明にしてみるよ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4114893611564319743</id><published>2011-08-03T02:29:00.006+09:00</published><updated>2011-08-03T11:00:53.599+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>[Apache] Apacheデバッグ(Debian squeeze)</title><content type='html'>DebianでのApacheデバッグ.&lt;br /&gt;&lt;br /&gt;1) dbg関連をインストールしまっす.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# apt-get install apache2-dbg libapr1-dbg libaprutil1-dbg gdb&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2) CoreDumpDirectoryディレクティブを指定しまーす.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# vi /etc/apache2/apache2.conf&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;いや&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# vi /etc/apache2/sites-enabled/000-default&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とかかな？&lt;br /&gt;&lt;br /&gt;で、適当に&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;CoreDumpDirectory /tmp&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を追加.&lt;br /&gt;&lt;br /&gt;3)ulimit&lt;br /&gt;rootで以下を実行.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# /etc/init.d/apache2 stop&lt;br /&gt;# ulimit -c unlimited&lt;br /&gt;# /etc/init.d/apache2 start&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4) コアダンプ！&lt;br /&gt;&lt;br /&gt;5) gdbでcoreをのぞく.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# gdb /usr/sbin/apache2 /tmp/core&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;6) dbg系パッケージのアンインストール&lt;br /&gt;&lt;br /&gt;7) おしまい&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ということは&lt;br /&gt;/usr/share/doc/apache2-dbg/README.backtrace&lt;br /&gt;に書いてあるよ.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4114893611564319743?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4114893611564319743/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4114893611564319743' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4114893611564319743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4114893611564319743'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/08/apache-debian-squeeze.html' title='[Apache] Apacheデバッグ(Debian squeeze)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-346958901202650329</id><published>2011-07-28T11:43:00.007+09:00</published><updated>2011-07-28T11:47:56.703+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android]Androidマーケットの検索ボックスでディベロッパーが開発したアプリ一覧</title><content type='html'>Androidマーケットの検索ボックスで&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"pub:ディベロッパー名"&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を入力すると、そのディベロッパーが開発したアプリ一覧が表示される。&lt;br /&gt;&lt;br /&gt;まさに今知った。&lt;br /&gt;&lt;br /&gt;へぇー&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-346958901202650329?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/346958901202650329/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=346958901202650329' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/346958901202650329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/346958901202650329'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/androidandroidde.html' title='[Android]Androidマーケットの検索ボックスでディベロッパーが開発したアプリ一覧'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2852206099545933451</id><published>2011-07-28T11:20:00.002+09:00</published><updated>2011-07-28T11:22:33.468+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] ぎっくり腰その後</title><content type='html'>痛みはひいた。&lt;br /&gt;&lt;br /&gt;でも、シップはってたところが思いっきりかぶれた・・・&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2852206099545933451?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2852206099545933451/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2852206099545933451' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2852206099545933451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2852206099545933451'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/blog-post_28.html' title='[その他] ぎっくり腰その後'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7581912447022524980</id><published>2011-07-28T10:59:00.017+09:00</published><updated>2011-08-10T04:43:53.244+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][その他] BOIDSアルゴリズムなるもので遊んでみた</title><content type='html'>Androidアプリの個人的ネタとして、&lt;br /&gt;Compiz fusionのatlantisプラグイン(metastabilityさん/unpushさんの方)で知った、&lt;br /&gt;群れをシミュレートするというBOIDSアルゴリズムで遊んでみた。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;BOIDSとは&lt;/b&gt;&lt;br /&gt;1987年にCraig Raynoldsさんによって発表された群れモデルで&lt;br /&gt;3つの基本ルールだけで群れをシミュレートできる、というもの。&lt;br /&gt;詳細は&lt;a href="http://www.red3d.com/cwr/boids/index.html"&gt;こちら&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ルールをさらっと書いておくと、&lt;br /&gt;1) 近づきすぎたら離れるよ(Separate)&lt;br /&gt;2) 近い仲間と整列するよ(Alignment)&lt;br /&gt;3) 群れの中心へいくよ(Cohesion)&lt;br /&gt;って感じ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;勢いで3つほど。&lt;/b&gt;&lt;br /&gt;1つ目は、&lt;a href="https://market.android.com/details?id=jp.co.qsdn.android.iwashi3d"&gt;「鰯の群れ」&lt;/a&gt;。1種の群れをシミュレートした。&lt;br /&gt;2つ目は、&lt;a href="https://market.android.com/details?id=jp.co.qsdn.android.jinbei3d"&gt;「甚平鮫と鰯」&lt;/a&gt;。1種＋敵ではないもう1種&lt;br /&gt;3つ目は、&lt;a href="https://market.android.com/details?id=jp.co.qsdn.android.hammer3d"&gt;「撞木鮫と鰯」&lt;/a&gt;。1種＋敵のもう1種&lt;br /&gt;&lt;br /&gt;1つ目はOpenGLの初期化にミスってて、リリースした途端、&lt;br /&gt;エラーレポートがいっぱい・・・&lt;br /&gt;「ウィルスが混入している」とのコメントまでいただいたorz&lt;br /&gt;（実際に混入しているわけではなく、エラーに対しての怒りだと思う・・）&lt;br /&gt;&lt;br /&gt;2つ目以降はわりと安定的にうごいてる。&lt;br /&gt;甚平鮫にしたがった鰯とか、結構個人的にはいい感じ。&lt;br /&gt;&lt;br /&gt;3つ目は敵が近づくと、逃げるようにしたので&lt;br /&gt;せっかくの「群れ」がバラバラに・・・&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ダウンロード数にビックリ&lt;/b&gt;&lt;br /&gt;リリースしても数人が見てくれるだけだろうかと思ったら、&lt;br /&gt;みなさんバンバンダウンロードしてくれるみたいで・・・&lt;br /&gt;なんかうれしいのと同時に申し訳ない気も・・・&lt;br /&gt;（といっても全体から見れば少数かもしれないけど）&lt;br /&gt;&lt;br /&gt;で、ダウンロードしてくれている方々の国を見ると、&lt;br /&gt;アメリカ合衆国と台湾、香港がダントツ。&lt;br /&gt;だもんで説明文に中国語（translated by google)を入れたりしてみた。&lt;br /&gt;よく知らないけど、簡単にしたやつじゃ無い方の中国語ね。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;続き&lt;/b&gt;&lt;br /&gt;BOIDSアルゴリズムに基づく、といっても毎回3ルールを計算しているわけではなく、&lt;br /&gt;Separateしなきゃいけないときは、Separateだけで計算を終了したりしてるので&lt;br /&gt;より本物(?)のBOIDSに近づけたいなぁ、、とか思ったり。&lt;br /&gt;&lt;br /&gt;あと、どこのデバイスか分からないプラットフォームでエラーレポートが1つ来てるんだけど&lt;br /&gt;特定できない。。。&lt;br /&gt;&lt;br /&gt;でも、BOIDSっておもしろいねー&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;ちなみに全部Apache Software License2.0&lt;br /&gt;つか、このソースきたねぇ・・・&lt;br /&gt;そして、何の役にも立ちません・・・&lt;br /&gt;--&lt;br /&gt;毎回3ルール計算するよう修正した！&lt;br /&gt;--&lt;br /&gt;グラフィックはもちろんショボめ・・・&lt;br /&gt;だって重いじゃない・・・&lt;br /&gt;ライブ壁紙だし&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;評価が★5個と★1個でまっぷたつ。&lt;br /&gt;BOIDSにときめいた人とそうでない人かな・・・&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7581912447022524980?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7581912447022524980/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7581912447022524980' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7581912447022524980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7581912447022524980'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/android-boids.html' title='[Android][その他] BOIDSアルゴリズムなるもので遊んでみた'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-338354657095154874</id><published>2011-07-25T17:47:00.001+09:00</published><updated>2011-07-25T17:47:28.914+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] ぎっくり腰</title><content type='html'>now&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-338354657095154874?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/338354657095154874/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=338354657095154874' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/338354657095154874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/338354657095154874'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/blog-post_25.html' title='[その他] ぎっくり腰'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2991751550574470618</id><published>2011-07-23T13:19:00.003+09:00</published><updated>2011-07-23T13:32:59.186+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android] Traceview</title><content type='html'>ドキュメント見りゃ分かるんだけど、とりあえずメモ。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;traceviewとは、&lt;br /&gt;&lt;/span&gt;とある方法で保存した実行ログを、見やすくグラフィカルに表示する&lt;br /&gt;閲覧ツールでっす。&lt;br /&gt;&lt;br /&gt;デバッグやパフォーマンスの改善に役立ちます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;使い方ー&lt;/span&gt;&lt;br /&gt;測定したいところを&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Debug.startMethodTracing("erer");&lt;br /&gt;　 &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Debug.stopMethodTracing();  &lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;で囲みます。&lt;br /&gt;&lt;br /&gt;Debug.startMethodTracingやDebug.stopMethodTracing()を書いた&lt;br /&gt;ソースファイルで、android.os.Debugをインポートします。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import android.os.Debug;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;AndroidManifest.xmlを編集し、sdcardに書き出すパーミッションを与える。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&amp;gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;そしたら、コンパイル＆インストール。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ adb install bin/なにか-debug.apk&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;で、実行。&lt;br /&gt;&lt;br /&gt;すると、Androidマシンの/sdcard配下にerer.traceというファイルが&lt;br /&gt;できているので、取ってくる。&lt;br /&gt;erer.traceはstartMethodTracingの引数で"erer"と指定した場合。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ adb pull /sdcard/erer.trace&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;で、traceviewで閲覧。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ traceview ./erer.trace&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;そんだけー&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2991751550574470618?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2991751550574470618/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2991751550574470618' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2991751550574470618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2991751550574470618'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/android-traceview.html' title='[Android] Traceview'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6232336013836815700</id><published>2011-07-23T13:01:00.012+09:00</published><updated>2011-07-26T22:06:52.909+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><category scheme='http://www.blogger.com/atom/ns#' term='ohloh'/><title type='text'>[その他][ohloh] 登録してみた</title><content type='html'>なんだかよくわからないまま、今更ながら、とりあえず登録してみた。&lt;br /&gt;&lt;br /&gt;プロファイルへのリンクが張れるらしいので張ってみた。&lt;br /&gt;&lt;br /&gt;kudoランク１っていうことは、全然貢献してません！ということかしら。&lt;br /&gt;&lt;br /&gt;うん。。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ってあれ？おかしいな。大きいWidgetの方を張ったつもりが。。。&lt;br /&gt;&lt;br /&gt;ま、いっか。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;mod_chxjはsourceforge.jpにおいてあるからか、&lt;br /&gt;project searchで出てきた。&lt;br /&gt;違うか、、、enlistmentsしてくれたんだねー&lt;br /&gt;&lt;br /&gt;Enlistments先をsourceforge.jpに変えてみた。&lt;br /&gt;importって結構時間かかるね・・・&lt;br /&gt;終わったと思ったら今度はcount・・・&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ちょい前のソースで&lt;br /&gt;48人年だそうで。&lt;br /&gt;2億円〜4億8千万円ぐらい？&lt;br /&gt;ありえないw&lt;br /&gt;&lt;br /&gt;でも、まぁ結構書いたんだなぁ・・・&lt;br /&gt;HTMLパーサーもCSSパーサーもフルスクラッチだし。&lt;br /&gt;&lt;br /&gt;もちろん自分が作ったものなので★5つ！w&lt;br /&gt;positionも登録（分かってないでやってるorz）&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;なんだか使い方間違ってる気が・・・&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6232336013836815700?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6232336013836815700/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6232336013836815700' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6232336013836815700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6232336013836815700'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/ohloh.html' title='[その他][ohloh] 登録してみた'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4711850418507313189</id><published>2011-07-19T14:00:00.001+09:00</published><updated>2011-07-19T14:00:59.839+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] セミが鳴き始めた</title><content type='html'>そんだけ.&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4711850418507313189?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4711850418507313189/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4711850418507313189' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4711850418507313189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4711850418507313189'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/blog-post_19.html' title='[その他] セミが鳴き始めた'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4840702436867842571</id><published>2011-07-13T07:25:00.001+09:00</published><updated>2011-07-13T07:28:04.868+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>[Apache][その他] r</title><content type='html'>それはもしかすると&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;request_rec *r&lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;の"r"かもかもしれない&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4840702436867842571?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4840702436867842571/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4840702436867842571' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4840702436867842571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4840702436867842571'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/apache-r.html' title='[Apache][その他] r'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-8433658061502845867</id><published>2011-07-13T07:15:00.004+09:00</published><updated>2011-07-13T07:22:36.667+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>[Apache][その他] apacheのcoreファイル</title><content type='html'>&lt;pre&gt;&lt;br /&gt; CoreDumpDirectory /tmp&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;って書いておくと、/tmpに吐き出されるよ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;それでも出なきゃ、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ulimit -c&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;って叩くと何か分かるかもね。&lt;br /&gt;&lt;br /&gt;とりあえずは&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ulimit -c unlimited&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;でいいんじゃない？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;で、core吐かれたら&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ gdb /usr/sbin/apache2 /tmp/core&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;でいいんじゃないかな。&lt;br /&gt;環境によるけど。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-8433658061502845867?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/8433658061502845867/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=8433658061502845867' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8433658061502845867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8433658061502845867'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/apache-apachecore.html' title='[Apache][その他] apacheのcoreファイル'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6765682506772732069</id><published>2011-07-01T22:54:00.001+09:00</published><updated>2011-07-01T22:55:10.698+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] gdb apache "in ？？ ()"</title><content type='html'>デバッグシンボルが無いよ。&lt;br /&gt;&lt;br /&gt;-gオプションをつけて再コンパイルすればいいんじゃない？&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6765682506772732069?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6765682506772732069/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6765682506772732069' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6765682506772732069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6765682506772732069'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/gdb-apache-in.html' title='[その他] gdb apache &quot;in ？？ ()&quot;'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-821903662489060194</id><published>2011-07-01T19:07:00.000+09:00</published><updated>2011-07-01T19:08:01.074+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><category scheme='http://www.blogger.com/atom/ns#' term='室温'/><title type='text'>[その他][室温] ただいまの我が事務所の室温</title><content type='html'>19:07現在 34度 湿度48%&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-821903662489060194?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/821903662489060194/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=821903662489060194' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/821903662489060194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/821903662489060194'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/07/blog-post.html' title='[その他][室温] ただいまの我が事務所の室温'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4807745362654439852</id><published>2011-06-30T18:56:00.013+09:00</published><updated>2011-07-01T02:31:54.916+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><category scheme='http://www.blogger.com/atom/ns#' term='室温'/><title type='text'>[その他][室温] ただいまの我が事務所の室温</title><content type='html'>昨日死ぬかと思ったので温度計買ってきた。&lt;br /&gt;&lt;br /&gt;計測開始時点 32度&lt;br /&gt;--&lt;br /&gt;19:09現在 33度&lt;br /&gt;--&lt;br /&gt;19:52現在 34度&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;うん、今日は涼しいw&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;22:34現在 35度 湿度48%&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;24:00現在 36度 湿度46%&lt;br /&gt;&lt;br /&gt;おや？？&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4807745362654439852?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4807745362654439852/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4807745362654439852' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4807745362654439852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4807745362654439852'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/06/blog-post.html' title='[その他][室温] ただいまの我が事務所の室温'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6350610847930333477</id><published>2011-06-30T01:42:00.002+09:00</published><updated>2011-06-30T01:45:27.876+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] external libraryを設置</title><content type='html'>android-sdk-linux_x86/platforms/android-7/templates/android_rules.xml&lt;br /&gt;&lt;br /&gt;あたりを見ると、&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;!-- Directory for the third party java libraries --&amp;gt;&lt;br /&gt;    &amp;lt;property name="external.libs.dir" value="libs" /&amp;gt;&lt;br /&gt;    &amp;lt;property name="external.libs.absolute.dir" location="${external.libs.dir}" /&amp;gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってなってるよ。&lt;br /&gt;&lt;br /&gt;なのでプロジェクト直下のlibsに置けばいいんじゃない？&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6350610847930333477?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6350610847930333477/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6350610847930333477' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6350610847930333477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6350610847930333477'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/06/android-external-library.html' title='[Android][お勉強] external libraryを設置'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6010393671760277066</id><published>2011-06-29T00:04:00.002+09:00</published><updated>2011-06-29T00:11:27.242+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] proguard</title><content type='html'>proguardを使ってみる。&lt;br /&gt;(SDK revision 10)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://developer.android.com/guide/developing/tools/proguard.html&lt;br /&gt;&lt;br /&gt;のとおり。&lt;br /&gt;&lt;br /&gt;default.propertiesの一番下にでも&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;proguard.config=proguard.cfg&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を書き込んで、AndroidManifest.xmlなりでDebuggableならそれをはずし、リリースモードでコンパイル。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ant release&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ん。そんだけ。proguardはSDKについてくるんで別途インストール&lt;br /&gt;する必要なし。&lt;br /&gt;&lt;br /&gt;ant releaseするとbinディレクトリの下にproguardってディレクトリが&lt;br /&gt;できる。で、そのファイルは先のURLの先のとおり。&lt;br /&gt;&lt;br /&gt;proguardが失敗する場合があるのでそれは別途proguard.cfgに設定書き込む。&lt;br /&gt;&lt;br /&gt;Stack TraceもObfuscatedな感じなのでretrace.shを使うんだってさ。&lt;br /&gt;これはまだ試してない。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6010393671760277066?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6010393671760277066/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6010393671760277066' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6010393671760277066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6010393671760277066'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/06/android-proguard.html' title='[Android][お勉強] proguard'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2962982368624114034</id><published>2011-05-28T21:18:00.005+09:00</published><updated>2011-05-28T21:31:59.063+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] 実機のスクリーンショットを取る(Debian Lenny)</title><content type='html'>実機のスクリーンショットを取るよ.&lt;br /&gt;&lt;br /&gt;Android SDKのtools以下にあるddmsを実行する.&lt;br /&gt;が、tools配下にcdしてからじゃないと起動できないみたい.&lt;br /&gt;&lt;br /&gt;ということで、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cd ~/android-sdk/tools&lt;br /&gt;$ ddms&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とする.&lt;br /&gt;&lt;br /&gt;すると、Dalvik Debug Monitorなるものが起動する.&lt;br /&gt;あとは勘で.&lt;br /&gt;&lt;br /&gt;端末選んで、キャプチャ取りたいタイミングで&lt;br /&gt;メニューの「Device」-&gt; 「Screen capture」で&lt;br /&gt;いいんでない？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ほら取れた.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-Ak0hVvoGOCQ/TeDqPJBk35I/AAAAAAAAAIg/jCd9GkVjtfY/s1600/device.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 225px; height: 400px;" src="http://3.bp.blogspot.com/-Ak0hVvoGOCQ/TeDqPJBk35I/AAAAAAAAAIg/jCd9GkVjtfY/s400/device.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5611742681545105298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2962982368624114034?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2962982368624114034/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2962982368624114034' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2962982368624114034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2962982368624114034'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/05/android-debian-lenny_28.html' title='[Android][お勉強] 実機のスクリーンショットを取る(Debian Lenny)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Ak0hVvoGOCQ/TeDqPJBk35I/AAAAAAAAAIg/jCd9GkVjtfY/s72-c/device.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-810954059226081062</id><published>2011-05-28T20:16:00.008+09:00</published><updated>2011-05-29T01:15:14.167+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] 実機でデバッグ(Debian Lenny/Squeeze)</title><content type='html'>http://developer.android.com/guide/developing/device.html&lt;br /&gt;のとおり。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1) microUSBケーブルを買う.&lt;br /&gt;&lt;/span&gt;充電専用ケーブルはダメよorz&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2) /etc/udev/rules.d/92-android.rules を新規追加or編集&lt;br /&gt;&lt;/span&gt;内容は以下のとおり.&lt;br /&gt;(au IS05用)&lt;br /&gt;51-android.rulesではなくて92-android.rulesという91以降にしないと&lt;br /&gt;ダメだって誰かが書いててくれたけど、どこだったか。。。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# For Gusty/Hardy, edit the file to read:&lt;br /&gt;SUBSYSTEM=="usb", SYSFS{idVendor}=="04dd", MODE="0666"&lt;br /&gt;# For Dapper, edit the file to read:&lt;br /&gt;SUBSYSTEM=="usb_device", SYSFS{idVendor}=="04dd", MODE="0666"&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;SYSFS{idVendor}=="04dd"はSHARP用。&lt;br /&gt;別ベンダーの場合、http://developer.android.com/guide/developing/device.htmlの「USB Vendor IDs」を見ていい感じに選択。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3) udevリロード&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# /etc/init.d/udev reload&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4) dmesg&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;&lt;br /&gt;#dmesg&lt;br /&gt;[1399644.464573]  sdb: sdb1&lt;br /&gt;[1399674.493844] usb 1-7: USB disconnect, address 8&lt;br /&gt;[1399675.531427] usb 1-7: new high speed USB device using ehci_hcd and address 9&lt;br /&gt;[1399675.682434] usb 1-7: configuration #1 chosen from 1 choice&lt;br /&gt;[1399675.684372] scsi7 : SCSI emulation for USB Mass Storage devices&lt;br /&gt;[1399675.688897] usb-storage: device found at 9&lt;br /&gt;[1399675.688897] usb-storage: waiting for device to settle before scanning&lt;br /&gt;[1399675.691590] usb 1-7: New USB device found, idVendor=04dd, idProduct=93ff&lt;br /&gt;[1399675.691590] usb 1-7: New USB device strings: Mfr=3, Product=2, SerialNumber=1&lt;br /&gt;[1399675.691590] usb 1-7: Product: au IS05 HSUSB Device&lt;br /&gt;[1399675.691590] usb 1-7: Manufacturer: SHARP Corporation&lt;br /&gt;[1399675.691590] usb 1-7: SerialNumber: SSHEN0XXXXX&lt;br /&gt;[1399681.416448] usb-storage: device scan complete&lt;br /&gt;[1399681.416448] scsi 7:0:0:0: Direct-Access     SHARP    au IS05 microSD  1.00 PQ: 0 ANSI: 0&lt;br /&gt;[1399681.427172] sd 7:0:0:0: [sdb] Attached SCSI removable disk&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;認識されている模様.&lt;br /&gt;SerialNumberは隠しておいた方がよい？のかどうか分からないので&lt;br /&gt;とりあえず他者に習う。&lt;br /&gt;&lt;br /&gt;5) adb devices&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ adb devices&lt;br /&gt;s$ adb devices&lt;br /&gt;List of devices attached &lt;br /&gt;SSHEN0XXXXX     device&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;認識されている模様&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6) いつものようにant debug&amp;ant install&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;7) そしていつものようにadb logcat&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;adb logcat実機だと速すぎてよくわからんw&lt;br /&gt;---&lt;br /&gt;Debian squeezeでやったら、&lt;br /&gt;????? no permissionsって言われた.&lt;br /&gt;&lt;br /&gt;なので、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ sudo -s&lt;br /&gt;# adb kill-server&lt;br /&gt;# adb start-server&lt;br /&gt;# exit&lt;br /&gt;$&lt;br /&gt;$ adb devices&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってやったらOKだった.&lt;br /&gt;そんだけー&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-810954059226081062?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/810954059226081062/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=810954059226081062' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/810954059226081062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/810954059226081062'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/05/android-debian-lenny.html' title='[Android][お勉強] 実機でデバッグ(Debian Lenny/Squeeze)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-5939609446974997766</id><published>2011-05-14T02:04:00.002+09:00</published><updated>2011-05-15T01:24:48.039+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] 投稿が消えたw</title><content type='html'>消えたw&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;そして復旧したw&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-5939609446974997766?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/5939609446974997766/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=5939609446974997766' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5939609446974997766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5939609446974997766'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/05/w.html' title='[その他] 投稿が消えたw'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7798660808863145608</id><published>2011-05-12T21:41:00.000+09:00</published><updated>2011-05-14T05:39:15.438+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='&#x9;お勉強Android'/><title type='text'>[Android][お勉強] 必要そうなAVD</title><content type='html'>とりあえずひととおりのAVDをcreateしてみた。&lt;br /&gt;&lt;br /&gt;AVDは以下な感じ。&lt;br /&gt;&lt;pre name="code" class="shell"&gt;&lt;br /&gt;$ android list avd&lt;br /&gt;Available Android Virtual Devices:&lt;br /&gt;    Name: em15&lt;br /&gt;    Path: /home/konno/.android/avd/em15.avd&lt;br /&gt;  Target: Android 1.5 (API level 3)&lt;br /&gt;    Skin: HVGA&lt;br /&gt;  Sdcard: 64M&lt;br /&gt;---------&lt;br /&gt;    Name: em16&lt;br /&gt;    Path: /home/konno/.android/avd/em16.avd&lt;br /&gt;  Target: Android 1.6 (API level 4)&lt;br /&gt;    Skin: HVGA&lt;br /&gt;  Sdcard: 64M&lt;br /&gt;---------&lt;br /&gt;    Name: em16-qvga&lt;br /&gt;    Path: /home/konno/.android/avd/em16-qvga.avd&lt;br /&gt;  Target: Android 1.6 (API level 4)&lt;br /&gt;    Skin: QVGA&lt;br /&gt;  Sdcard: 64M&lt;br /&gt;---------&lt;br /&gt;    Name: em21-854&lt;br /&gt;    Path: /home/konno/.android/avd/em21-854.avd&lt;br /&gt;  Target: Android 2.1-update1 (API level 7)&lt;br /&gt;    Skin: WVGA854&lt;br /&gt;  Sdcard: 64M&lt;br /&gt;---------&lt;br /&gt;    Name: em22-800&lt;br /&gt;    Path: /home/konno/.android/avd/em22-800.avd&lt;br /&gt;  Target: Android 2.2 (API level 8)&lt;br /&gt;    Skin: WVGA800&lt;br /&gt;  Sdcard: 64M&lt;br /&gt;---------&lt;br /&gt;    Name: em22-1024&lt;br /&gt;    Path: /home/konno/.android/avd/em22-1024.avd&lt;br /&gt;  Target: Android 2.2 (API level 8)&lt;br /&gt;    Skin: 1024x600&lt;br /&gt;  Sdcard: 64M&lt;br /&gt;---------&lt;br /&gt;    Name: em231&lt;br /&gt;    Path: /home/konno/.android/avd/em231.avd&lt;br /&gt;  Target: Android 2.3.1 (API level 9)&lt;br /&gt;    Skin: HVGA&lt;br /&gt;  Sdcard: 64M&lt;br /&gt;---------&lt;br /&gt;    Name: em233&lt;br /&gt;    Path: /home/konno/.android/avd/em233.avd&lt;br /&gt;  Target: Android 2.3.3 (API level 10)&lt;br /&gt;    Skin: HVGA&lt;br /&gt;  Sdcard: 64M&lt;br /&gt;---------&lt;br /&gt;    Name: em30&lt;br /&gt;    Path: /home/konno/.android/avd/em30.avd&lt;br /&gt;  Target: Android 3.0 (API level 11)&lt;br /&gt;    Skin: WXGA&lt;br /&gt;  Sdcard: 64M&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;そんだけー&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7798660808863145608?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7798660808863145608/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7798660808863145608' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7798660808863145608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7798660808863145608'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/05/android-avd.html' title='[Android][お勉強] 必要そうなAVD'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1328994204150624813</id><published>2011-04-29T22:02:00.006+09:00</published><updated>2011-04-29T22:16:51.960+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] ファイルシステム</title><content type='html'>AndroidはLinuxが動いているので、完全なルートファイルシステムがマウントされているそうで。&lt;br /&gt;&lt;br /&gt;とういうことで早速。&lt;br /&gt;&lt;br /&gt;まずはプロジェクト作成。&lt;br /&gt;&lt;pre name="code" class="shell"&gt;&lt;br /&gt;$ android create project -n myfiles -t 7 -p /home/konno/work/t/myfiles -k jp.co.qsdn.android -a MyFiles&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;で、MyFiles.java修正。&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;package jp.co.qsdn.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;import java.io.*;&lt;br /&gt;&lt;br /&gt;public class MyFiles extends Activity&lt;br /&gt;{&lt;br /&gt;  private int counter = 0;&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState)&lt;br /&gt;    {&lt;br /&gt;      super.onCreate(savedInstanceState);&lt;br /&gt;      TextView textView = new TextView(this);&lt;br /&gt;      textView.setText(createFileView("/"));&lt;br /&gt;      setContentView(textView);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected String createFileView(String fileName) {&lt;br /&gt;      File f = new File(fileName);&lt;br /&gt;      String s = fileName + "\n";&lt;br /&gt;      counter++;&lt;br /&gt;      if (counter &amp;gt;= 10) return s;&lt;br /&gt;      if (f.isDirectory() ) {&lt;br /&gt;        File fls[] = f.listFiles();&lt;br /&gt;        for (int i=0;i&amp;lt;fls.length;i++) {&lt;br /&gt;          s = s + createFileView(fls[i].getPath());&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      return s;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;というどうしょうもないActivityに。&lt;br /&gt;&lt;br /&gt;で、コンパイル。&lt;br /&gt;&lt;pre name="code" class="shell"&gt;&lt;br /&gt;$ ant debug&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;で、実機へぽい。&lt;br /&gt;&lt;br /&gt;すると画面には・・・・&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/&lt;br /&gt;/dev&lt;br /&gt;/dev/pts&lt;br /&gt;/dev/socket&lt;br /&gt;/dev/socket/property_service&lt;br /&gt;/dev/socket/void&lt;br /&gt;・・・&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんてなのが表示された。&lt;br /&gt;&lt;br /&gt;ふーん。。。&lt;br /&gt;&lt;br /&gt;パッケージは&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/data/data/パッケージ名&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と言う感じで設置されるらしい。&lt;br /&gt;&lt;br /&gt;入出力する際は、大きなデータを書き込むとI/Oエラーになる。&lt;br /&gt;だって領域小さいもんね。&lt;br /&gt;&lt;br /&gt;SDカードは&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/sdcard&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんですかね。。。&lt;br /&gt;SDカードに書き込む際は、WRITE_EXTERNAL_STORAGEパーミッションを要求しとかないとダメとのこと。(マニフェストファイル）&lt;br /&gt;&lt;br /&gt;そんだけー&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1328994204150624813?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1328994204150624813/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1328994204150624813' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1328994204150624813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1328994204150624813'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android_4102.html' title='[Android][お勉強] ファイルシステム'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6860584034261667637</id><published>2011-04-29T20:34:00.003+09:00</published><updated>2011-04-29T20:52:04.650+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><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;pre name="code" class="java"&gt;&lt;br /&gt;android.os.Bundle&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;で管理される。&lt;br /&gt;&lt;br /&gt;*.onSaveInstanceSate()や*.onRestoreInstanceState()&lt;br /&gt;あたりがインスタンス状態を保存/復帰するいい感じのタイミングで呼ばれるとのこと。&lt;br /&gt;onSaveInstanceStateで保存された「状態」は、再初期化される直前に&lt;br /&gt;リストアされる。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6860584034261667637?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6860584034261667637/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6860584034261667637' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6860584034261667637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6860584034261667637'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android_3565.html' title='[Android][お勉強] インスタンス状態'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1437246178788214546</id><published>2011-04-29T20:26:00.002+09:00</published><updated>2011-04-29T20:32:44.156+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] SharedPreferences</title><content type='html'>データを保存しておくために、&lt;br /&gt;&lt;br /&gt;1) Shared Preferences&lt;br /&gt;2) Internal Storage&lt;br /&gt;3) External Storage&lt;br /&gt;4) SQLite Databases&lt;br /&gt;5) Network Connection&lt;br /&gt;&lt;br /&gt;が用意されているそうな。&lt;br /&gt;その中に、SharedPreferencesがある。&lt;br /&gt;&lt;br /&gt;設定画面を構築する際に用いるPreferenceActivityは&lt;br /&gt;ユーザのPreferenceを保存するのに内部でSharedPreferenceを使っているんだって。&lt;br /&gt;でもSharedPreferenceは厳密にはユーザPreferenceを保存するためのものではないそうな。&lt;br /&gt;&lt;br /&gt;SharedPreferencesはプリミティブなデータのkey-valueストア。&lt;br /&gt;ユーザセッションにまたがってデータを受け渡しできる。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1437246178788214546?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1437246178788214546/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1437246178788214546' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1437246178788214546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1437246178788214546'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android-sharedpreferences.html' title='[Android][お勉強] SharedPreferences'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6721620904263605152</id><published>2011-04-29T18:12:00.002+09:00</published><updated>2011-04-29T18:17:52.756+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] より宣言的に</title><content type='html'>Androidでは、手続き的にデザインを記述（Javaコードごりごり書く）する方法と宣言的にデザインを記述（XMLでごりごり）する方法の2つの方法をサポートする。&lt;br /&gt;&lt;br /&gt;Googleさんは宣言的にアプローチすることを勧めているとのこと。&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;  TextView textView = new TextView(this);&lt;br /&gt;  textView.setText("あいうえお");&lt;br /&gt;  setContentView(textView);  &lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とする代わりにres/layout/main.xmlで&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;TextView&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="wrap_content"&lt;br /&gt;    android:text="あいうえお"&lt;br /&gt;    /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と書くこともできる。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6721620904263605152?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6721620904263605152/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6721620904263605152' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6721620904263605152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6721620904263605152'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android_9153.html' title='[Android][お勉強] より宣言的に'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7831610759978838073</id><published>2011-04-29T18:08:00.001+09:00</published><updated>2011-04-29T18:09:31.077+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] リソース</title><content type='html'>ローカライズされた文字列、画像、プログラムが必要とするコード以外の情報のこと。&lt;br /&gt;リソースはプロジェクトのresディレクトリに配置する。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7831610759978838073?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7831610759978838073/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7831610759978838073' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7831610759978838073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7831610759978838073'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android_2983.html' title='[Android][お勉強] リソース'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-9186392824251548522</id><published>2011-04-29T18:06:00.000+09:00</published><updated>2011-04-29T18:07:34.253+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-9186392824251548522?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/9186392824251548522/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=9186392824251548522' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/9186392824251548522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/9186392824251548522'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android_9501.html' title='[Android][お勉強] コンテンツプロバイダ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-8514065807092978631</id><published>2011-04-29T18:04:00.002+09:00</published><updated>2011-04-29T22:19:41.240+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] Service</title><content type='html'>Unixなどのデーモンと同じように、ユーザと直接的なやりとりを行わず&lt;br /&gt;バックグラウンドでこっそり生きているタスクのことを&lt;span style="font-weight:bold;"&gt;サービス&lt;/span&gt;という。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;現在のアクティビティが終了した後も実行され続けるバックグラウンドプロセスを起動するための方法。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-8514065807092978631?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/8514065807092978631/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=8514065807092978631' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8514065807092978631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8514065807092978631'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android-service.html' title='[Android][お勉強] Service'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-5544781039423925250</id><published>2011-04-29T18:01:00.002+09:00</published><updated>2011-04-29T18:04:11.463+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] Intent</title><content type='html'>AndroidはIntentという部品が強力らしい。&lt;br /&gt;&lt;br /&gt;Intentとは、アクションを記述するメカニズムで&lt;br /&gt;ほとんどすべてのアクションがIntentを経由するとのこと。&lt;br /&gt;&lt;br /&gt;Intentがあることで、コンポーネントの再利用、交換がより簡単になる。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-5544781039423925250?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/5544781039423925250/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=5544781039423925250' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5544781039423925250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5544781039423925250'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android-intent.html' title='[Android][お勉強] Intent'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1600955618160253596</id><published>2011-04-29T17:35:00.004+09:00</published><updated>2011-04-29T17:44:40.333+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強]コマンドラインでログ</title><content type='html'>&lt;pre name="code" class="java"&gt;&lt;br /&gt;Log.d("なんたら","かんたら")&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;というのをあっちこっちに埋め込んだりするんだけど&lt;br /&gt;そのログを見るには&lt;br /&gt;&lt;pre name="code" class="shell"&gt;&lt;br /&gt;$ adb logcat&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってすればよいだけ。&lt;br /&gt;&lt;br /&gt;そして、そんだけー&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1600955618160253596?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1600955618160253596/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1600955618160253596' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1600955618160253596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1600955618160253596'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android_29.html' title='[Android][お勉強]コマンドラインでログ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4688741554357279375</id><published>2011-04-26T23:58:00.002+09:00</published><updated>2011-04-27T00:01:55.541+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><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;br /&gt;ということがありえる。&lt;br /&gt;&lt;br /&gt;端末を縦から横にすると一旦プロセスが終了し、再起動されるとのこと。&lt;br /&gt;&lt;br /&gt;アプリケーションのライフサイクルは、プロセスのライフサイクルと&lt;br /&gt;同じではない。&lt;br /&gt;&lt;br /&gt;ちなみに、電源を入れると最初に表示されるアプリはHomeアプリケーションとのこと。&lt;br /&gt;&lt;br /&gt;これはおもしろいかも。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4688741554357279375?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4688741554357279375/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4688741554357279375' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4688741554357279375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4688741554357279375'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android_2002.html' title='[Android][お勉強] アプリケーション'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-826846183653241946</id><published>2011-04-26T23:51:00.003+09:00</published><updated>2011-04-26T23:56:23.078+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] Activity</title><content type='html'>Activityとは、「ユーザインタフェース画面」らしい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-826846183653241946?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/826846183653241946/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=826846183653241946' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/826846183653241946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/826846183653241946'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android-activity.html' title='[Android][お勉強] Activity'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-5227478761309301566</id><published>2011-04-26T20:00:00.001+09:00</published><updated>2011-04-26T20:02:39.132+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] コマンドラインツールのドキュメント</title><content type='html'>リンク。&lt;br /&gt;&lt;a href="http://d.android.com/guide/developing/tools/index.html"&gt;&lt;br /&gt;http://d.android.com/guide/developing/tools&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-5227478761309301566?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/5227478761309301566/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=5227478761309301566' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5227478761309301566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5227478761309301566'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android_26.html' title='[Android][お勉強] コマンドラインツールのドキュメント'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-5235719072375225286</id><published>2011-04-26T19:37:00.002+09:00</published><updated>2011-04-26T19:56:43.188+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] Androidの特徴</title><content type='html'>なんで今Androidかってーと、&lt;br /&gt;単にAndroidに機種変したからでしたー。&lt;br /&gt;&lt;br /&gt;ということでせっかくだからちゃんと勉強してみるか、&lt;br /&gt;って感じ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;まずはAndroidって何よってところから。&lt;br /&gt;&lt;br /&gt;Androidの特徴&lt;br /&gt;1) Linux、その他のオープンソースを基礎とするフリー&amp;オープンな開発プラットフォーム&lt;br /&gt;2) コンポーネントアーキテクチャ&lt;br /&gt;3) ライフサイクル管理&lt;br /&gt;4) 高品質グラフィックス・サウンド&lt;br /&gt;5) 高い移植性&lt;br /&gt;だそうで。&lt;br /&gt;&lt;br /&gt;DalvikというVMで動作しているんだってさ。&lt;br /&gt;DalvikはJavaクラスファイルをdexというファイル形式に変換後&lt;br /&gt;実行するのでJavaVMではないらしい。&lt;br /&gt;&lt;br /&gt;ちなみに携帯各社が変更してもソースを公開しなくてよいように、&lt;br /&gt;ライセンスはGPLではなくApacheライセンス2.0。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-5235719072375225286?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/5235719072375225286/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=5235719072375225286' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5235719072375225286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5235719072375225286'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android-android.html' title='[Android][お勉強] Androidの特徴'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1005525071922359515</id><published>2011-04-26T02:29:00.004+09:00</published><updated>2011-04-26T02:37:03.238+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] API Levelって何よ</title><content type='html'>「Androidプラットフォームのバージョンによって提供されるフレームワークAPIのリビジョン」&lt;br /&gt;&lt;br /&gt;だそうで。&lt;br /&gt;&lt;br /&gt;ふーん。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ということは、WallpaperServiceとか使う場合には、、、&lt;br /&gt;API Level 7以降を使う、ということで良いのかしらん。&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;できたー&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1005525071922359515?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1005525071922359515/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1005525071922359515' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1005525071922359515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1005525071922359515'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android-api-level.html' title='[Android][お勉強] API Levelって何よ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-8407568864341230907</id><published>2011-04-25T23:10:00.004+09:00</published><updated>2011-04-26T02:29:31.695+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><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;br /&gt;そんなことないならどうでもいいけど。&lt;br /&gt;&lt;br /&gt;とりあえずUSBでデバッグとか、インストールとか&lt;br /&gt;はおいといて、WWWサーバにぽいっとおいてダウンロードすれば&lt;br /&gt;いいだけ。&lt;br /&gt;&lt;br /&gt;まぁ、そりゃそうだ。&lt;br /&gt;&lt;br /&gt;一応「提携元不明のアプリ」という設定にチェックを入れて&lt;br /&gt;おく必要があるかもしれない。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;で、実行してみると・・・んちゃ！&lt;br /&gt;&lt;br /&gt;とりあえずは後はもうJava。&lt;br /&gt;とにかくJava。&lt;br /&gt;ただのJava。&lt;br /&gt;きっと・・・多分・・・&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-8407568864341230907?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/8407568864341230907/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=8407568864341230907' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8407568864341230907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8407568864341230907'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android_25.html' title='[Android][お勉強] 実機で動かす'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-772246998593759648</id><published>2011-04-24T21:41:00.013+09:00</published><updated>2011-04-25T00:46:33.192+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android][お勉強] アプリ開発してみるのメモ</title><content type='html'>Androidアプリでも作ってみるメモ.&lt;br /&gt;&lt;br /&gt;android SDK落としてきてJDKが動く環境は既にあるっていうことで。&lt;br /&gt;&lt;br /&gt;やることはおおむね以下のとおりだよーん。&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1) android用プロジェクトの作成&lt;/span&gt;&lt;br /&gt; $ android create project なんたらかんたら&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2) ソース書く&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3) ant&lt;/span&gt;&lt;br /&gt; とりあえずはant debug。&lt;br /&gt; $ ant debug&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4) apkファイルのエミュレータへのインストール&lt;/span&gt;&lt;br /&gt; $ adb install なんたらかんたら&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;では早速。&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ android list target&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってやると&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;android list target&lt;br /&gt;Available Android targets:&lt;br /&gt;id: 1 or "android-3"&lt;br /&gt;     Name: Android 1.5&lt;br /&gt;     Type: Platform&lt;br /&gt;     API level: 3&lt;br /&gt;     Revision: 4&lt;br /&gt;     Skins: QVGA-P, QVGA-L, HVGA-L, HVGA (default), HVGA-P&lt;br /&gt;id: 2 or "Google Inc.:Google APIs:3"&lt;br /&gt;     Name: Google APIs&lt;br /&gt;     Type: Add-On&lt;br /&gt;     Vendor: Google Inc.&lt;br /&gt;     Revision: 3&lt;br /&gt;     Description: Android + Google APIs&lt;br /&gt;     Based on Android 1.5 (API level 3)&lt;br /&gt;     Libraries:&lt;br /&gt;      * com.google.android.maps (maps.jar)&lt;br /&gt;          API for Google Maps&lt;br /&gt;     Skins: QVGA-P, HVGA (default), HVGA-L, QVGA-L, HVGA-P&lt;br /&gt;id: 3 or "android-4"&lt;br /&gt;     Name: Android 1.6&lt;br /&gt;     Type: Platform&lt;br /&gt;     API level: 4&lt;br /&gt;     Revision: 3&lt;br /&gt;     Skins: WVGA854, WVGA800 (default), QVGA, HVGA&lt;br /&gt;id: 4 or "Google Inc.:Google APIs:4"&lt;br /&gt;     Name: Google APIs&lt;br /&gt;     Type: Add-On&lt;br /&gt;     Vendor: Google Inc.&lt;br /&gt;     Revision: 2&lt;br /&gt;     Description: Android + Google APIs&lt;br /&gt;     Based on Android 1.6 (API level 4)&lt;br /&gt;     Libraries:&lt;br /&gt;      * com.google.android.maps (maps.jar)&lt;br /&gt;          API for Google Maps&lt;br /&gt;     Skins: WVGA854, HVGA, QVGA, WVGA800 (default)&lt;br /&gt;id: 5 or "SHARP Corporation:JN-DK01:4"&lt;br /&gt;     Name: JN-DK01&lt;br /&gt;     Type: Add-On&lt;br /&gt;     Vendor: SHARP Corporation&lt;br /&gt;     Revision: 1&lt;br /&gt;     Description: SHARP JN-DK01 Add-on&lt;br /&gt;     Based on Android 1.6 (API level 4)&lt;br /&gt;     Libraries:&lt;br /&gt;      * jp.co.sharp.android.hardware (hardware.jar)&lt;br /&gt;          &lt;br /&gt;      * jp.co.sharp.android.io.obex (obex.jar)&lt;br /&gt;          &lt;br /&gt;     Skins: WVGA854, HVGA, QVGA, WVGA800, JNDK01 (default)&lt;br /&gt;     Adds USB support for devices (Vendor: 0x04DD)&lt;br /&gt;id: 6 or "android-7"&lt;br /&gt;     Name: Android 2.1-update1&lt;br /&gt;     Type: Platform&lt;br /&gt;     API level: 7&lt;br /&gt;     Revision: 2&lt;br /&gt;     Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA&lt;br /&gt;id: 7 or "Google Inc.:Google APIs:7"&lt;br /&gt;     Name: Google APIs&lt;br /&gt;     Type: Add-On&lt;br /&gt;     Vendor: Google Inc.&lt;br /&gt;     Revision: 1&lt;br /&gt;     Description: Android + Google APIs&lt;br /&gt;     Based on Android 2.1-update1 (API level 7)&lt;br /&gt;     Libraries:&lt;br /&gt;      * com.google.android.maps (maps.jar)&lt;br /&gt;          API for Google Maps&lt;br /&gt;     Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)&lt;br /&gt;id: 8 or "android-8"&lt;br /&gt;     Name: Android 2.2&lt;br /&gt;     Type: Platform&lt;br /&gt;     API level: 8&lt;br /&gt;     Revision: 2&lt;br /&gt;     Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA&lt;br /&gt;id: 9 or "Google Inc.:Google APIs:8"&lt;br /&gt;     Name: Google APIs&lt;br /&gt;     Type: Add-On&lt;br /&gt;     Vendor: Google Inc.&lt;br /&gt;     Revision: 2&lt;br /&gt;     Description: Android + Google APIs&lt;br /&gt;     Based on Android 2.2 (API level 8)&lt;br /&gt;     Libraries:&lt;br /&gt;      * com.google.android.maps (maps.jar)&lt;br /&gt;          API for Google Maps&lt;br /&gt;     Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)&lt;br /&gt;id: 10 or "Samsung Electronics Co., Ltd.:GALAXY Tab Addon:8"&lt;br /&gt;     Name: GALAXY Tab Addon&lt;br /&gt;     Type: Add-On&lt;br /&gt;     Vendor: Samsung Electronics Co., Ltd.&lt;br /&gt;     Revision: 1&lt;br /&gt;     Based on Android 2.2 (API level 8)&lt;br /&gt;     Skins: WQVGA400, WVGA854, GALAXY Tab (default), HVGA, WQVGA432, QVGA, WVGA800&lt;br /&gt;id: 11 or "android-9"&lt;br /&gt;     Name: Android 2.3.1&lt;br /&gt;     Type: Platform&lt;br /&gt;     API level: 9&lt;br /&gt;     Revision: 2&lt;br /&gt;     Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA&lt;br /&gt;id: 12 or "Google Inc.:Google APIs:9"&lt;br /&gt;     Name: Google APIs&lt;br /&gt;     Type: Add-On&lt;br /&gt;     Vendor: Google Inc.&lt;br /&gt;     Revision: 2&lt;br /&gt;     Description: Android + Google APIs&lt;br /&gt;     Based on Android 2.3.1 (API level 9)&lt;br /&gt;     Libraries:&lt;br /&gt;      * com.google.android.maps (maps.jar)&lt;br /&gt;          API for Google Maps&lt;br /&gt;     Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)&lt;br /&gt;id: 13 or "Sony Ericsson Mobile Communications AB:EDK:9"&lt;br /&gt;     Name: EDK&lt;br /&gt;     Type: Add-On&lt;br /&gt;     Vendor: Sony Ericsson Mobile Communications AB&lt;br /&gt;     Revision: 1&lt;br /&gt;     Description: XPERIA Device&lt;br /&gt;     Based on Android 2.3.1 (API level 9)&lt;br /&gt;     Libraries:&lt;br /&gt;      * com.sonyericsson.eventstream_1 (com.sonyericsson.eventstream_1.jar)&lt;br /&gt;          Library for Android Market filtering&lt;br /&gt;     Skins: WQVGA400, WVGA854, Xperia (default), HVGA, WQVGA432, QVGA, WVGA800&lt;br /&gt;id: 14 or "android-10"&lt;br /&gt;     Name: Android 2.3.3&lt;br /&gt;     Type: Platform&lt;br /&gt;     API level: 10&lt;br /&gt;     Revision: 1&lt;br /&gt;     Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA&lt;br /&gt;id: 15 or "Google Inc.:Google APIs:10"&lt;br /&gt;     Name: Google APIs&lt;br /&gt;     Type: Add-On&lt;br /&gt;     Vendor: Google Inc.&lt;br /&gt;     Revision: 1&lt;br /&gt;     Description: Android + Google APIs&lt;br /&gt;     Based on Android 2.3.3 (API level 10)&lt;br /&gt;     Libraries:&lt;br /&gt;      * com.google.android.maps (maps.jar)&lt;br /&gt;          API for Google Maps&lt;br /&gt;     Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)&lt;br /&gt;id: 16 or "android-11"&lt;br /&gt;     Name: Android 3.0&lt;br /&gt;     Type: Platform&lt;br /&gt;     API level: 11&lt;br /&gt;     Revision: 1&lt;br /&gt;     Skins: WXGA (default)&lt;br /&gt;id: 17 or "Google Inc.:Google APIs:11"&lt;br /&gt;     Name: Google APIs&lt;br /&gt;     Type: Add-On&lt;br /&gt;     Vendor: Google Inc.&lt;br /&gt;     Revision: 1&lt;br /&gt;     Description: Android + Google APIs&lt;br /&gt;     Based on Android 3.0 (API level 11)&lt;br /&gt;     Libraries:&lt;br /&gt;      * com.google.android.maps (maps.jar)&lt;br /&gt;          API for Google Maps&lt;br /&gt;     Skins: WXGA (default)&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってなってる.&lt;br /&gt;さて、このlistの中からターゲットとなる&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;id: 5 or "SHARP Corporation:JN-DK01:4"&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を何となく選び、android用プロジェクトを作成するよ.&lt;br /&gt;&lt;br /&gt;プロジェクト作成のためにはandroidコマンドを叩いちゃう.&lt;br /&gt;android --helpでチェック.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;Valid actions are composed of a verb and an optional direct object:&lt;br /&gt;-   list               : Lists existing targets or virtual devices.&lt;br /&gt;-   list avd           : Lists existing Android Virtual Devices.&lt;br /&gt;-   list target        : Lists existing targets.&lt;br /&gt;- create avd           : Creates a new Android Virtual Device.&lt;br /&gt;-   move avd           : Moves or renames an Android Virtual Device.&lt;br /&gt;- delete avd           : Deletes an Android Virtual Device.&lt;br /&gt;- update avd           : Updates an Android Virtual Device to match the folders of a new SDK.&lt;br /&gt;- create project       : Creates a new Android project.&lt;br /&gt;- update project       : Updates an Android project (must already have an AndroidManifest.xml).&lt;br /&gt;- create test-project  : Creates a new Android project for a test package.&lt;br /&gt;- update test-project  : Updates the Android project for a test package (must already have an AndroidManifest.xml).&lt;br /&gt;- create lib-project   : Creates a new Android library project.&lt;br /&gt;- update lib-project   : Updates an Android library project (must already have an AndroidManifest.xml).&lt;br /&gt;- update adb           : Updates adb to support the USB devices declared in the SDK add-ons.&lt;br /&gt;- update sdk           : Updates the SDK by suggesting new platforms to install if available.&lt;br /&gt;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と出るんで、必要なのは"create project".&lt;br /&gt;&lt;br /&gt;で、で、&lt;br /&gt;のりで"android --help create project"と叩いてみる.&lt;br /&gt;create projectに絞られたhelpが表示された.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ android --help create project&lt;br /&gt;&lt;br /&gt;Usage:&lt;br /&gt;  android [global options] create project [action options]&lt;br /&gt;&lt;br /&gt;Global options:&lt;br /&gt;  -v --verbose  Verbose mode: errors, warnings and informational messages are printed.&lt;br /&gt;  -h --help     Help on a specific command.&lt;br /&gt;  -s --silent   Silent mode: only errors are printed out.&lt;br /&gt;&lt;br /&gt;Action "create project":&lt;br /&gt;  Creates a new Android project.&lt;br /&gt;Options:&lt;br /&gt;  -n --name     Project name&lt;br /&gt;  -t --target   Target ID of the new project [required]&lt;br /&gt;  -p --path     The new project's directory [required]&lt;br /&gt;  -k --package  Android package name for the application [required]&lt;br /&gt;  -a --activity Name of the default Activity that is created [required]&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ん。おっけー。&lt;br /&gt;ということで&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ android create project -n Ncha -t 5 -p /home/konno/work/t/ncha -k jp.co.qsdn.android -a Ncha&lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と入力してベーン!&lt;br /&gt;&lt;br /&gt;その結果指定したディレクトリに色々できるよ！&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;Created directory /home/konno/work/t/ncha/src/jp/co/qsdn/android&lt;br /&gt;Added file /home/konno/work/t/ncha/src/jp/co/qsdn/android/Ncha.java&lt;br /&gt;Created directory /home/konno/work/t/ncha/res&lt;br /&gt;Created directory /home/konno/work/t/ncha/bin&lt;br /&gt;Created directory /home/konno/work/t/ncha/libs&lt;br /&gt;Created directory /home/konno/work/t/ncha/res/values&lt;br /&gt;Added file /home/konno/work/t/ncha/res/values/strings.xml&lt;br /&gt;Created directory /home/konno/work/t/ncha/res/layout&lt;br /&gt;Added file /home/konno/work/t/ncha/res/layout/main.xml&lt;br /&gt;Added file /home/konno/work/t/ncha/AndroidManifest.xml&lt;br /&gt;Added file /home/konno/work/t/ncha/build.xml&lt;br /&gt;Added file /home/konno/work/t/ncha/proguard.cfg&lt;br /&gt;　　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と、こんな感じぃ.&lt;br /&gt;&lt;br /&gt;プロジェクトのホームは&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;/home/konno/work/t/ncha&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なので、&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ cd /home/konno/work/t/ncha&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;すると、カレントにbuild.xmlファイルがあるんで&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ ant help&lt;br /&gt;Buildfile: /home/konno/work/t/ncha/build.xml&lt;br /&gt;    [setup] Android SDK Tools Revision 10&lt;br /&gt;    [setup] Project Target: JN-DK01&lt;br /&gt;    [setup] Vendor: SHARP Corporation&lt;br /&gt;    [setup] Platform Version: 1.6&lt;br /&gt;    [setup] API level: 4&lt;br /&gt;    [setup] &lt;br /&gt;    [setup] ------------------&lt;br /&gt;    [setup] Resolving library dependencies:&lt;br /&gt;    [setup] No library dependencies.&lt;br /&gt;    [setup] &lt;br /&gt;    [setup] ------------------&lt;br /&gt;    [setup] &lt;br /&gt;    [setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.&lt;br /&gt;    [setup] &lt;br /&gt;    [setup] Importing rules file: tools/ant/main_rules.xml&lt;br /&gt;&lt;br /&gt;help:&lt;br /&gt;     [echo] Android Ant Build. Available targets:&lt;br /&gt;     [echo]    help:      Displays this help.&lt;br /&gt;     [echo]    clean:     Removes output files created by other targets.&lt;br /&gt;     [echo]    compile:   Compiles project's .java files into .class files.&lt;br /&gt;     [echo]    debug:     Builds the application and signs it with a debug key.&lt;br /&gt;     [echo]    release:   Builds the application. The generated apk file must be&lt;br /&gt;     [echo]               signed before it is published.&lt;br /&gt;     [echo]    install:   Installs/reinstalls the debug package onto a running&lt;br /&gt;     [echo]               emulator or device.&lt;br /&gt;     [echo]               If the application was previously installed, the&lt;br /&gt;     [echo]               signatures must match.&lt;br /&gt;     [echo]    uninstall: Uninstalls the application from a running emulator or&lt;br /&gt;     [echo]               device.&lt;br /&gt;&lt;br /&gt;BUILD SUCCESSFUL&lt;br /&gt;Total time: 1 second&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とすれば大体分かるはず.&lt;br /&gt;とりあえずは、ant debugでapkファイルを作ってみっペ。&lt;br /&gt;せっかくだからソースもちょっとだけいじるよ.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ vi /home/konno/work/t/ncha/src/jp/co/qsdn/android/Ncha.java&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;として&lt;br /&gt;&lt;pre class="java"&gt;&lt;br /&gt;package jp.co.qsdn.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;&lt;br /&gt;public class Ncha extends Activity&lt;br /&gt;{&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState)&lt;br /&gt;    {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を&lt;br /&gt;&lt;pre class="java"&gt;&lt;br /&gt;package jp.co.qsdn.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class Ncha extends Activity&lt;br /&gt;{&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState)&lt;br /&gt;    {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        TextView textView = new TextView(this);&lt;br /&gt;        textView.setText("んちゃ！");&lt;br /&gt;        setContentView(textView);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と変更。&lt;br /&gt;&lt;br /&gt;http://developer.android.com/reference/packages.html&lt;br /&gt;に行けばいつものjavadocは見れると。&lt;br /&gt;&lt;br /&gt;で、ant debug。&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ ant debug&lt;br /&gt;Buildfile: /home/konno/work/t/ncha/build.xml&lt;br /&gt;    [setup] Android SDK Tools Revision 10&lt;br /&gt;    [setup] Project Target: JN-DK01&lt;br /&gt;    [setup] Vendor: SHARP Corporation&lt;br /&gt;    [setup] Platform Version: 1.6&lt;br /&gt;    [setup] API level: 4&lt;br /&gt;    [setup] &lt;br /&gt;    [setup] ------------------&lt;br /&gt;    [setup] Resolving library dependencies:&lt;br /&gt;    [setup] No library dependencies.&lt;br /&gt;    [setup] &lt;br /&gt;    [setup] ------------------&lt;br /&gt;    [setup] &lt;br /&gt;    [setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.&lt;br /&gt;    [setup] &lt;br /&gt;    [setup] Importing rules file: tools/ant/main_rules.xml&lt;br /&gt;&lt;br /&gt;-debug-obfuscation-check:&lt;br /&gt;&lt;br /&gt;-set-debug-mode:&lt;br /&gt;&lt;br /&gt;-compile-tested-if-test:&lt;br /&gt;&lt;br /&gt;-pre-build:&lt;br /&gt;&lt;br /&gt;-dirs:&lt;br /&gt;     [echo] Creating output directories if needed...&lt;br /&gt;&lt;br /&gt;-aidl:&lt;br /&gt;     [echo] Compiling aidl files into Java classes...&lt;br /&gt;&lt;br /&gt;-renderscript:&lt;br /&gt;     [echo] Compiling RenderScript files into Java classes and RenderScript bytecode...&lt;br /&gt;&lt;br /&gt;-resource-src:&lt;br /&gt;     [echo] Generating R.java / Manifest.java from the resources...&lt;br /&gt;&lt;br /&gt;-pre-compile:&lt;br /&gt;&lt;br /&gt;compile:&lt;br /&gt;    [javac] /home/konno/android-sdk-linux_x86/tools/ant/main_rules.xml:384: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds&lt;br /&gt;    [javac] Compiling 2 source files to /home/konno/work/t/ncha/bin/classes&lt;br /&gt;&lt;br /&gt;-post-compile:&lt;br /&gt;&lt;br /&gt;-obfuscate:&lt;br /&gt;&lt;br /&gt;-dex:&lt;br /&gt;     [echo] Converting compiled files and external libraries into /home/konno/work/t/ncha/bin/classes.dex...&lt;br /&gt;&lt;br /&gt;-package-resources:&lt;br /&gt;     [echo] Packaging resources&lt;br /&gt;     [aapt] Creating full resource package...&lt;br /&gt;&lt;br /&gt;-package-debug-sign:&lt;br /&gt;[apkbuilder] Creating Ncha-debug-unaligned.apk and signing it with a debug key...&lt;br /&gt;&lt;br /&gt;debug:&lt;br /&gt;     [echo] Running zip align on final apk...&lt;br /&gt;     [echo] Debug Package: /home/konno/work/t/ncha/bin/Ncha-debug.apk&lt;br /&gt;&lt;br /&gt;BUILD SUCCESSFUL&lt;br /&gt;Total time: 4 seconds&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;できたー。&lt;br /&gt;&lt;br /&gt;したらエミュレータ動かすよ。&lt;br /&gt;AVDは作っといてね。&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ emulator -avd JNDK01&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;あ、JNDK01は先に作っておいたAVDね。&lt;br /&gt;&lt;br /&gt;で、で、いよいよ先に作ったNchaをインストールするよ。&lt;br /&gt;インストールにはadbを使う。&lt;br /&gt;&lt;br /&gt;apkファイルは/home/konno/work/t/ncha/bin/Ncha-debug.apkにあるので&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ adb install /home/konno/work/t/ncha/bin/Ncha-debug.apk&lt;br /&gt;90 KB/s (4546 bytes in 0.049s)&lt;br /&gt; pkg: /data/local/tmp/Ncha-debug.apk&lt;br /&gt;Success&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;でインストール完了。&lt;br /&gt;&lt;br /&gt;virtual端末に行って、メインメニューを出すと、あら不思議。&lt;br /&gt;Nchaアプリがあるよ。&lt;br /&gt;&lt;br /&gt;で、実行してみると、、、、んちゃ！&lt;br /&gt;&lt;br /&gt;そんだけー&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-772246998593759648?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/772246998593759648/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=772246998593759648' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/772246998593759648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/772246998593759648'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/android.html' title='[Android][お勉強] アプリ開発してみるのメモ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-591047482932293854</id><published>2011-04-12T21:26:00.002+09:00</published><updated>2011-04-12T21:29:18.680+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] 「正常化の偏見」</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;「異常化の偏見」&lt;br /&gt;&lt;br /&gt;というかどうかは知らない.&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-591047482932293854?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/591047482932293854/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=591047482932293854' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/591047482932293854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/591047482932293854'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/blog-post.html' title='[その他] 「正常化の偏見」'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7277511164582094253</id><published>2011-04-12T21:13:00.002+09:00</published><updated>2011-04-12T21:15:35.383+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>[xml] コメント</title><content type='html'>xmlのコメントは&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"&amp;lt;!--"&lt;br /&gt;と&lt;br /&gt;"--&amp;gt;"&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんだけど、このコメント間に"--"があるとxmlでエラーとなる.&lt;br /&gt;だから&lt;br /&gt;"---&amp;gt;"とかはNG.&lt;br /&gt;今更なんだけど、見落としてた・・・orz&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7277511164582094253?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7277511164582094253/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7277511164582094253' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7277511164582094253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7277511164582094253'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/xml.html' title='[xml] コメント'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4522628048652241426</id><published>2011-04-12T20:57:00.003+09:00</published><updated>2011-04-12T21:06:21.756+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他]flashblock</title><content type='html'>flashうぜーです.&lt;br /&gt;うーん、皆さんはうっとおしくないのかなぁ・・・&lt;br /&gt;動画とか？&lt;br /&gt;&lt;br /&gt;・・・ゲームとか？&lt;br /&gt;&lt;br /&gt;firefox使うときには&lt;br /&gt;flashblockというプラグインでブロックしてる.&lt;br /&gt;かなり素敵.&lt;br /&gt;Chromeにもあるよね.&lt;br /&gt;&lt;br /&gt;Android2.2でフラッシュ対応とのこと、Googleにがっくり.&lt;br /&gt;flash見えないのが特に良かったのに・・・・&lt;br /&gt;(もちろん使ってないけど)&lt;br /&gt;&lt;br /&gt;と思ったらflashblock for androidというのがあるね.&lt;br /&gt;と思ったらnot needed？んん？&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4522628048652241426?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4522628048652241426/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4522628048652241426' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4522628048652241426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4522628048652241426'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/flashblock.html' title='[その他]flashblock'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-383522715047599283</id><published>2011-04-08T18:02:00.006+09:00</published><updated>2011-04-09T16:20:26.566+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] ATMの節電</title><content type='html'>近所のATMがすべて節電で営業停止.&lt;br /&gt;&lt;br /&gt;ATMって節電で営業停止していいものなのかなぁ・・・&lt;br /&gt;ちょっと微妙だと思った.&lt;br /&gt;自分は移動できるからいいけど.&lt;br /&gt;&lt;br /&gt;そんだけ.&lt;br /&gt;--&lt;br /&gt;&amp;gt;自分は移動できるからいいけど.&lt;br /&gt;と思ったらATM全滅？？&lt;br /&gt;&lt;br /&gt;うーむ、なら計画停電で時限的に停電してもらった方が良い気が・・・&lt;br /&gt;割とライフラインかも...orz&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-383522715047599283?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/383522715047599283/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=383522715047599283' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/383522715047599283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/383522715047599283'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/atm.html' title='[その他] ATMの節電'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2797860657323022847</id><published>2011-04-06T01:52:00.001+09:00</published><updated>2011-04-06T01:55:53.361+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] GeoTrustの証明書</title><content type='html'>geotrust.comからSSL買った.&lt;br /&gt;&lt;br /&gt;pendingになった....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;で問い合わせたら、日本語読めないとのこと.&lt;br /&gt;&lt;br /&gt;あれ？日本語？&lt;br /&gt;&lt;br /&gt;どうやら姓名を日本語で入れてしまったらしい.&lt;br /&gt;再注文してくれとのことだったので、再注文した.&lt;br /&gt;&lt;br /&gt;今度はすぐに発行された.&lt;br /&gt;&lt;br /&gt;めでたしめでたし.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2797860657323022847?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2797860657323022847/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2797860657323022847' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2797860657323022847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2797860657323022847'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/04/geotrust.html' title='[その他] GeoTrustの証明書'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-3885704463459740044</id><published>2011-03-25T20:13:00.001+09:00</published><updated>2011-03-25T20:14:56.771+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>[Apache] disk_cache</title><content type='html'>mod_disk_cache使って一旦キャッシュに入ると&lt;br /&gt;以後fixup_headersが呼ばれない。。。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-3885704463459740044?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/3885704463459740044/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=3885704463459740044' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/3885704463459740044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/3885704463459740044'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/apache-diskcache.html' title='[Apache] disk_cache'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2964530245854895264</id><published>2011-03-23T20:57:00.005+09:00</published><updated>2011-03-23T21:21:47.131+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[python][django] 画面遷移制御ってどうやるんだろう・・・</title><content type='html'>djangoで画面遷移制御ってどうやるんだろう・・・&lt;br /&gt;&lt;br /&gt;viewsがいわゆるControllerにあたるらしい。&lt;br /&gt;で、templateがいわゆるViewにあたるらしい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;まだまだ勉強中なので、いずれ見つかるかもしれないけど、&lt;br /&gt;とりあえず分からないので&lt;br /&gt;input type="submit"のname属性と現ページを保持する&lt;br /&gt;_pageパラメータで遷移することにした。&lt;br /&gt;&lt;br /&gt;form.html、confirm.html、complete.html&lt;br /&gt;の3つのページがあるものとして、&lt;br /&gt;form.htmlは入力フォーム、confirm.htmlは確認画面、&lt;br /&gt;complete.htmlは完了画面。&lt;br /&gt;&lt;br /&gt;form.htmlで、&lt;br /&gt;&lt;pre name="code" class="html"&gt;&lt;br /&gt;  &amp;lt;input type="hidden" name="_page" value="0" /&amp;gt;&lt;br /&gt;  &amp;lt;input type="submit" name="_target1" value="次へ" /&amp;gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とし、&lt;br /&gt;confirm.htmlでは&lt;br /&gt;&lt;pre name="code" class="html"&gt;&lt;br /&gt;  &amp;lt;input type="hidden" name="_page" value="1" /&amp;gt;&lt;br /&gt;  &amp;lt;input type="submit" name="_target0" value="戻る" /&amp;gt;&lt;br /&gt;  &amp;lt;input type="submit" name="_finish" value="登録" /&amp;gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;などとして、遷移制御。&lt;br /&gt;Spring Framework（？）のまね。&lt;br /&gt;&lt;br /&gt;views.pyでは&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;  _page_re = re.compile(r'^_page$')&lt;br /&gt;&lt;br /&gt;  def _get_current_page(request, defvalue):&lt;br /&gt;   for key in request.POST.iterkeys():&lt;br /&gt;    if _page_re.match(key):&lt;br /&gt;      return int(request.POST['_page'])&lt;br /&gt;  return defvalue&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってな感じでgetCurrentPageを実装。&lt;br /&gt;そして、&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;  target_re = re.compile(r'^_target(\d)')&lt;br /&gt;  finish_re = re.compile(r'^_finish$')&lt;br /&gt;  TARGET = [&lt;br /&gt;    u'form.html',&lt;br /&gt;    u'confirm.html',&lt;br /&gt;    u'complete.html',&lt;br /&gt;  ]&lt;br /&gt;&lt;br /&gt;  def _get_target_page(request, defvalue):&lt;br /&gt;    for key in request.POST.iterkeys():&lt;br /&gt;      if target_re.match(key):&lt;br /&gt;        p_no = target_re.search(key)&lt;br /&gt;        return int(p_no.group(1))&lt;br /&gt;      if finish_re.match(key):&lt;br /&gt;        return len(TARGET)-1&lt;br /&gt;    return defvalue&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;って感じでgetTargetPageを実装。&lt;br /&gt;んで、currentとtargetを使って表示すべき画面をrenderすると。&lt;br /&gt;&lt;br /&gt;でも、これだとdjangoのやり方では無いのではないかなぁ。。。&lt;br /&gt;うーむ。。。。&lt;br /&gt;&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;&lt;br /&gt;って書いてて気づいたけど&lt;br /&gt;has_keyした方がいいね！&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2964530245854895264?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2964530245854895264/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2964530245854895264' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2964530245854895264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2964530245854895264'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/pythondjango.html' title='[python][django] 画面遷移制御ってどうやるんだろう・・・'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6570469913010830655</id><published>2011-03-18T23:08:00.003+09:00</published><updated>2011-03-18T23:19:01.786+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[Python][django] チュートリアルメモ6(debian lenny)</title><content type='html'>チュートリアルに従ってごちゃごちゃいじってると、、、&lt;br /&gt;&lt;br /&gt;TemplateSyntaxErrorが起きる。&lt;br /&gt;&lt;br /&gt;Caught an exception while rendering: coercing to Unicode: need string or buffer, long found&lt;br /&gt;&lt;br /&gt;と言われる。&lt;br /&gt;&lt;br /&gt;modelsの__unicode__でチュートリアルどおりやると&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;  def __unicode__(self):&lt;br /&gt;     return self.id&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と書くことになるけど、django側で表示しようとする際に&lt;br /&gt;__unicode__を呼んでunicode型のものを取得しようとするんだけど&lt;br /&gt;self.idってInteger型なんでunicode型ではないものを返してしまうと。&lt;br /&gt;&lt;br /&gt;だもんで、unicode型に変換して返すんだって。&lt;br /&gt;&lt;br /&gt;ということで、&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;  def __unicode__(self):&lt;br /&gt;    return u"%s" % self.id&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とすることで回避。&lt;br /&gt;正しいかどうかは知らない。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6570469913010830655?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6570469913010830655/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6570469913010830655' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6570469913010830655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6570469913010830655'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/pythondjango-6debian-lenny.html' title='[Python][django] チュートリアルメモ6(debian lenny)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-3724910101925748166</id><published>2011-03-18T19:05:00.002+09:00</published><updated>2011-03-18T19:15:00.654+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[Python][django] チュートリアルメモ5(debian lenny)</title><content type='html'>adminページをカスタマイズするチュートリアルやった。&lt;br /&gt;&lt;br /&gt;settings.pyのTEMPLATE_DIRに自分のテンプレート置き場を指定し、&lt;br /&gt;Debian Lennyだと&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; /usr/share/python-support/python-django/django/contrib/admin/templates/&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;あたりに元テンプレートがあるので、コピーして使えって書いてある。&lt;br /&gt;&lt;br /&gt;appppp/admin.pyで管理画面での入力項目の出し方なんてのを&lt;br /&gt;カスタマイズできる。&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;fieldsets&lt;/span&gt;を使えば、複数の項目をグルーピングして表示できるし、&lt;br /&gt;classesにcollapseを指定すると表示／非表示を切り替えるリンクがついて&lt;br /&gt;表示／非表示を切り替えたりできると。&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;class BoyoyonAdmin(admin.ModelAdmin):&lt;br /&gt;  fieldsets = [&lt;br /&gt;    (None,               {'fields': ['abc']}),&lt;br /&gt;    ('ああああ', {'fields': ['aaa','bbb'], 'classes': ['collapse']}),&lt;br /&gt;  ]&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;な感じ。&lt;br /&gt;上記だと"ああああ"というタイトルで、項目aaaと項目bbbが一括りで表示され、さらに非表示／表示リンクがつく。&lt;br /&gt;&lt;br /&gt;あ、ちなみに'ああああ'って使ってるけどもちろん&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;って書いてます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;さて、次はPart3に突入。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-3724910101925748166?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/3724910101925748166/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=3724910101925748166' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/3724910101925748166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/3724910101925748166'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/pythondjango-5debian-lenny.html' title='[Python][django] チュートリアルメモ5(debian lenny)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1711935935390891941</id><published>2011-03-18T01:30:00.002+09:00</published><updated>2011-03-18T02:43:56.001+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[Python][django] チュートリアルメモ4(debian lenny)</title><content type='html'>さんざんデータベースAPIと戯れた！&lt;br /&gt;&lt;br /&gt;のでチュートリアル2に突入。&lt;br /&gt;&lt;br /&gt;あ、ちなみにチュートリアルはいつものdocディレクトリにあるのを見てます。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ w3m file:///usr/share/doc/python-django/html/index.html&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;って感じで。&lt;br /&gt;で今&lt;br /&gt;Tutorial: Writing your first Django application&lt;br /&gt;の&lt;br /&gt;Part2に来たところ。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Admin機能を有効にすっぺ&lt;/span&gt;&lt;br /&gt;settings.pyのINSTALLED_APPSにdjango.contrib.adminを追加っと。&lt;br /&gt;&lt;br /&gt;で、python manage.py syncdbをべーん。&lt;br /&gt;&lt;br /&gt;INSTALLED_APPSに追加したらsyncdbしなきゃいけないんだってさ。&lt;br /&gt;&lt;br /&gt;んで、urls.pyのコメントになっている以下の部分のコメントをはずす。&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;    from django.contrib import admin&lt;br /&gt;    admin.autodiscover()&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;という部分と&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;(r'^admin/(.*)', admin.site.root),&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;という部分。&lt;br /&gt;コメント外したらサーバ実行。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ python manage.py runserver&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;http://127.0.0.1:8000/&lt;br /&gt;にアクセス！&lt;br /&gt;&lt;br /&gt;管理画面が表示された。&lt;br /&gt;&lt;br /&gt;が、早速パスワード忘れた。。。&lt;br /&gt;チュートリアルPart1で登録したらしい。。。&lt;br /&gt;あれ？そうだっけ？&lt;br /&gt;&lt;br /&gt;ので、mysql -uroot してdrop database test;して&lt;br /&gt;create database test;して再度&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;$ python manage.py syncdb&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;初めてsyncdbするときにスーパーユーザとパスワード登録するので&lt;br /&gt;今度は覚えておくよ。&lt;br /&gt;&lt;br /&gt;で、ログイン。&lt;br /&gt;おお、ログインできた！&lt;br /&gt;&lt;br /&gt;今apppppのmodels.pyは以下な感じ。&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;from django.db import models&lt;br /&gt;&lt;br /&gt;# Create your models here.&lt;br /&gt;class Boyoyon(models.Model):&lt;br /&gt;  abc = models.TextField(max_length=20)&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;で次は自分で作ったapppppというappのBoyoyonを管理画面で操作できるよにしてみる。&lt;br /&gt;そのためにはadmin.pyというファイルをapppppディレクトリの下に作るらしい。&lt;br /&gt;admin.pyの内容は以下のとおり。&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;from boyoyon.appppp.models import Boyoyon&lt;br /&gt;from django.contrib import admin&lt;br /&gt;                                                                     &lt;br /&gt;admin.site.register(Boyoyon)&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;で、サーバ再起動。&lt;br /&gt;すると管理画面にBoyoyonが現れる。&lt;br /&gt;Boyoyonをクリックすると、、、、Boyoyonの1レコードを編集することができる。&lt;br /&gt;TextFieldで作ったらTextField用のinputフォームに、&lt;br /&gt;CharFieldで作ったらCharField用のinputフォームになる。へぇー。&lt;br /&gt;&lt;br /&gt;で、次はこの管理画面のBoyoyonフォームのカスタマイズらしい。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1711935935390891941?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1711935935390891941/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1711935935390891941' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1711935935390891941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1711935935390891941'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/pythondjango-4debian-lenny.html' title='[Python][django] チュートリアルメモ4(debian lenny)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4131718993241788278</id><published>2011-03-17T16:30:00.004+09:00</published><updated>2011-03-17T16:50:53.545+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[Python][django] チュートリアルメモ3(debian lenny)</title><content type='html'>&lt;span style="font-weight:bold;"&gt;モデルを有効にする&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cd boyoyon&lt;br /&gt;$ vi settings.py&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってやってsettings.pyを編集。&lt;br /&gt;&lt;br /&gt;INSTALLED_APPSって書いてあるところにモデルを追加。&lt;br /&gt;&lt;pre name="code"  class="python"&gt;&lt;br /&gt;INSTALLED_APPS = (&lt;br /&gt;    'django.contrib.auth',&lt;br /&gt;    'django.contrib.contenttypes',&lt;br /&gt;    'django.contrib.sessions',&lt;br /&gt;    'django.contrib.sites',&lt;br /&gt;)&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってなってるんで、そこにboyoyon.apppppを追加。&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;INSTALLED_APPS = (&lt;br /&gt;    'django.contrib.auth',&lt;br /&gt;    'django.contrib.contenttypes',&lt;br /&gt;    'django.contrib.sessions',&lt;br /&gt;    'django.contrib.sites',&lt;br /&gt;    'boyoyon.appppp',&lt;br /&gt;)&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これで有効になったかしら。&lt;br /&gt;ということで以下のコマンドを実行。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ python manage.py sql appppp&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;すると、、、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Error: Django doesn't know which syntax to use for your SQL statements,&lt;br /&gt;because you haven't specified the DATABASE_ENGINE setting.&lt;br /&gt;Edit your settings file and change DATABASE_ENGINE to something like 'postgresql' or 'mysql'.&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;って言われた。&lt;br /&gt;DATABASEの設定しないとダメみたい。&lt;br /&gt;&lt;br /&gt;早速DBの設定。&lt;br /&gt;settings.pyをひらいて、、、&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;DATABASE_ENGINE = ''           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.&lt;br /&gt;DATABASE_NAME = ''             # Or path to database file if using sqlite3.&lt;br /&gt;DATABASE_USER = ''             # Not used with sqlite3.&lt;br /&gt;DATABASE_PASSWORD = ''         # Not used with sqlite3.&lt;br /&gt;DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.&lt;br /&gt;DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってところを環境に合わせて設定。&lt;br /&gt;&lt;br /&gt;自分の環境は以下の感じ。&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;DATABASE_ENGINE = 'mysql'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.&lt;br /&gt;DATABASE_NAME = 'test'             # Or path to database file if using sqlite3.&lt;br /&gt;DATABASE_USER = 'root'             # Not used with sqlite3.&lt;br /&gt;DATABASE_PASSWORD = ''         # Not used with sqlite3.&lt;br /&gt;DATABASE_HOST = 'localhost'             # Set to empty string for localhost. Not used with sqlite3.&lt;br /&gt;DATABASE_PORT = '3306'             # Set to empty string for default. Not used with sqlite3.&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;特にmysqlが好きなわけじゃないけどmysqlを指定。&lt;br /&gt;databaseは'test'、ユーザはroot、パスワードなし。&lt;br /&gt;&lt;br /&gt;んで、再度sql出力コマンド。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ python manage.py sql appppp&lt;br /&gt;BEGIN;&lt;br /&gt;CREATE TABLE `appppp_poll` (&lt;br /&gt;    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,&lt;br /&gt;    `question` varchar(200) NOT NULL,&lt;br /&gt;    `pub_date` datetime NOT NULL&lt;br /&gt;)&lt;br /&gt;;&lt;br /&gt;CREATE TABLE `appppp_choice` (&lt;br /&gt;    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,&lt;br /&gt;    `poll_id` integer NOT NULL,&lt;br /&gt;    `choice` varchar(200) NOT NULL,&lt;br /&gt;    `votes` integer NOT NULL&lt;br /&gt;)&lt;br /&gt;;&lt;br /&gt;ALTER TABLE `appppp_choice` ADD CONSTRAINT poll_id_refs_id_9963a93 FOREIGN KEY (`poll_id`) REFERENCES `appppp_poll` (`id`);&lt;br /&gt;COMMIT;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;おお、SQL文が出力された。。。&lt;br /&gt;idはauto_increment。これ変えたい場合は&lt;br /&gt;なんたらFieldのパラメータにprimary_key=Trueを指定すればいいらしい。&lt;br /&gt;&lt;br /&gt;さて、次は実際にDBにテーブルを作る。&lt;br /&gt;syncdbというコマンドを叩くらしい。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ python manage.py syncdb&lt;br /&gt;Creating table auth_permission&lt;br /&gt;Creating table auth_group&lt;br /&gt;Creating table auth_user&lt;br /&gt;Creating table auth_message&lt;br /&gt;Creating table django_content_type&lt;br /&gt;Creating table django_session&lt;br /&gt;Creating table django_site&lt;br /&gt;Creating table appppp_poll&lt;br /&gt;Creating table appppp_choice&lt;br /&gt;&lt;br /&gt;You just installed Django's auth system, which means you don't have any superusers defined.&lt;br /&gt;Would you like to create one now? (yes/no): yes&lt;br /&gt;Username (Leave blank to use 'konno'): &lt;br /&gt;E-mail address: atkonn@gmail.com&lt;br /&gt;Password: &lt;br /&gt;Password (again): &lt;br /&gt;Error: Blank passwords aren't allowed.&lt;br /&gt;Password: &lt;br /&gt;Password (again): &lt;br /&gt;Superuser created successfully.&lt;br /&gt;Installing index for auth.Permission model&lt;br /&gt;Installing index for auth.Message model&lt;br /&gt;Installing index for appppp.Choice model&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;途中パスワードで怒られた。空パスワードはダメみたい。&lt;br /&gt;&lt;br /&gt;どれ、テーブルできたかな。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ mysql -uroot test&lt;br /&gt;Reading table information for completion of table and column names&lt;br /&gt;You can turn off this feature to get a quicker startup with -A&lt;br /&gt;&lt;br /&gt;Welcome to the MySQL monitor.  Commands end with ; or \g.&lt;br /&gt;Your MySQL connection id is 231&lt;br /&gt;Server version: 5.0.51a-24+lenny4 (Debian)&lt;br /&gt;&lt;br /&gt;Type 'help;' or '\h' for help. Type '\c' to clear the buffer.&lt;br /&gt;&lt;br /&gt;&amp;gt; show tables;&lt;br /&gt;+----------------------------+&lt;br /&gt;| Tables_in_test             |&lt;br /&gt;+----------------------------+&lt;br /&gt;| appppp_choice              | &lt;br /&gt;| appppp_poll                | &lt;br /&gt;| auth_group                 | &lt;br /&gt;| auth_group_permissions     | &lt;br /&gt;| auth_message               | &lt;br /&gt;| auth_permission            | &lt;br /&gt;| auth_user                  | &lt;br /&gt;| auth_user_groups           | &lt;br /&gt;| auth_user_user_permissions | &lt;br /&gt;| django_content_type        | &lt;br /&gt;| django_session             | &lt;br /&gt;| django_site                | &lt;br /&gt;+----------------------------+&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;っと。&lt;br /&gt;もりっとできた。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;次はデータベースAPIと戯れるとのこと。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4131718993241788278?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4131718993241788278/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4131718993241788278' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4131718993241788278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4131718993241788278'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/pythondjango-3debian-lenny.html' title='[Python][django] チュートリアルメモ3(debian lenny)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-8986040174193456588</id><published>2011-03-16T23:45:00.003+09:00</published><updated>2011-03-17T00:03:51.185+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[Python][django] チュートリアルメモ2(debian lenny)</title><content type='html'>「プロジェクトの作成」が終わったら「モデルの作成」をするらしい。&lt;br /&gt;「プロジェクトの作成」では自分用の環境を構築し、作業をする準備。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;モデルの作成&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;まずはアプリケーションを作るんだとさ。&lt;br /&gt;ということで早速作る。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cd boyoyon&lt;br /&gt;$ python manage.py startapp appppp&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;apppppというappを作ってみた。&lt;br /&gt;すると&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls -1&lt;br /&gt;__init__.py&lt;br /&gt;__init__.pyc&lt;br /&gt;appppp&lt;br /&gt;manage.py&lt;br /&gt;settings.py&lt;br /&gt;settings.pyc&lt;br /&gt;urls.py&lt;br /&gt;urls.pyc&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;というふうにapppppディレクトリが作成された。&lt;br /&gt;（これだとprojectとappがカップリングされてしまうのでダメらしいんだけどチュートリアルなんで進めるって書いてある。）&lt;br /&gt;&lt;br /&gt;apppppディレクトリの中身は・・・&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls -1 appppp&lt;br /&gt;__init__.py&lt;br /&gt;models.py&lt;br /&gt;views.py&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってなってる。&lt;br /&gt;お、modelsってある！&lt;br /&gt;これがモデルですか？？&lt;br /&gt;&lt;br /&gt;ちなみにDjangoではDRY則に従うそうな。&lt;br /&gt;models.pyを編集するっす！&lt;br /&gt;vimでひらいて見ると・・・&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from django.db import models&lt;br /&gt;&lt;br /&gt;# Create your models here.&lt;br /&gt;~&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってだけ書いてある。&lt;br /&gt;チュートリアルに従って・・・&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from django.db import models&lt;br /&gt;&lt;br /&gt;# Create your models here.&lt;br /&gt;class Poll(models.Model):&lt;br /&gt;    question = models.CharField(max_length=200)&lt;br /&gt;    pub_date = models.DateTimeField('date published')&lt;br /&gt;&lt;br /&gt;class Choice(models.Model):&lt;br /&gt;    poll = models.ForeignKey(Poll)&lt;br /&gt;    choice = models.CharField(max_length=200)&lt;br /&gt;    votes = models.IntegerField()&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と記述、というかコピペ。&lt;br /&gt;内容は良く分からんが、モデル作成完了。&lt;br /&gt;&lt;br /&gt;次はモデルを有効にするらしい。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-8986040174193456588?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/8986040174193456588/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=8986040174193456588' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8986040174193456588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8986040174193456588'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/pythondjango-2debian-lenny.html' title='[Python][django] チュートリアルメモ2(debian lenny)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-5800000637744662279</id><published>2011-03-16T23:01:00.003+09:00</published><updated>2011-03-16T23:19:42.731+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[Python][django] チュートリアルメモ1(debian lenny)</title><content type='html'>djangoのインストールが終わったみたいなので次。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;プロジェクトの作成&lt;/b&gt;&lt;br /&gt;まずはプロジェクトの作成。djangoのセットアップを行う。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ django-admin startproject boyoyon&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とりあえず、チュートリアルに従ってdjango-adminをstartprojectを引数に&lt;br /&gt;実行してみる。&lt;br /&gt;するとあら不思議。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls&lt;br /&gt;boyoyon&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;boyoyonというディレクトリができているではありませんか！&lt;br /&gt;&lt;br /&gt;ちなみにdebian lennyでapt-get installしたdjangoなんで"django-admin" というコマンドがインストールされているけども、setup.pyでインストールした場合はどこかにdjango-admin.pyがインストールされる模様。&lt;br /&gt;&lt;br /&gt;boyoyonディレクトリの中身は&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls -a boyoyon/&lt;br /&gt;.  ..  __init__.py  manage.py  settings.py  urls.py&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってな感じ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ここまで来たら、プロジェクトなるものが正しく動くか確認するらしい。&lt;br /&gt;早速「開発用サーバ」なるものを動かしてみる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cd boyoyon&lt;br /&gt;$ python manage.py runserver&lt;br /&gt;Validating models...&lt;br /&gt;0 errors found&lt;br /&gt;&lt;br /&gt;Django version 1.0.2 final, using settings 'boyoyon.settings'&lt;br /&gt;Development server is running at http://127.0.0.1:8000/&lt;br /&gt;Quit the server with CONTROL-C.&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;・・・開発サーバが立ち上がった模様。&lt;br /&gt;http://127.0.0.1:8000/にアクセス。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;It worked!&lt;br /&gt;Congratulations on your first Django-powered page.&lt;br /&gt;&lt;br /&gt;Of course, you haven't actually done any work yet. Here's what to do next:&lt;br /&gt;&lt;br /&gt;    * If you plan to use a database, edit the DATABASE_* settings in boyoyon/settings.py.&lt;br /&gt;    * Start your first app by running python boyoyon/manage.py startapp [appname].&lt;br /&gt;&lt;br /&gt;You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work!&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんて書かれてるページが表示される。&lt;br /&gt;It worked!なんて書かれているんで動いてるんだよね、きっと。&lt;br /&gt;&lt;br /&gt;ふむふむ、データベース使うならboyoyon/settings.pyのDATABASE_なんたらを編集するのね。&lt;br /&gt;ふむふむ、DEBUG = Trueなのね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-5800000637744662279?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/5800000637744662279/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=5800000637744662279' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5800000637744662279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5800000637744662279'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/pythondjango-1debian-lenny.html' title='[Python][django] チュートリアルメモ1(debian lenny)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-5528397336116994246</id><published>2011-03-16T22:04:00.002+09:00</published><updated>2011-03-16T22:11:48.318+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>[Python][django] djangoが入っているかどうか</title><content type='html'>djangoがインストールされてるかな？&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ python&lt;br /&gt;Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14) &lt;br /&gt;[GCC 4.3.2] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; import django&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&amp;lt;stdin&amp;gt;", line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;ImportError: No module named django&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; &lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;だめですsた。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;なんでインストール&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ apt-cache search django&lt;br /&gt;cakephp-instaweb - Development webserver for CakePHP applications&lt;br /&gt;python-jinja - small but fast and easy to use stand-alone template engine&lt;br /&gt;python-mako - fast and lightweight templating for the Python platform&lt;br /&gt;libmapnik-dev - C++/Python toolkit for developing GIS applications (devel)&lt;br /&gt;libmapnik0.5 - C++/Python toolkit for developing GIS applications (libraries)&lt;br /&gt;mapnik-utils - C++/Python toolkit for developing GIS applications (utilities)&lt;br /&gt;python-mapnik - C++/Python toolkit for developing GIS applications (Python)&lt;br /&gt;python-django - A high-level Python Web framework&lt;br /&gt;python-jinja2-dbg - small but fast and easy to use stand-alone template engine&lt;br /&gt;python-jinja2 - small but fast and easy to use stand-alone template engine&lt;br /&gt;python-django-debug-toolbar - Embedded debugging toolbar for Django projects&lt;br /&gt;python-django-south - Intelligent schema migrations for django apps&lt;br /&gt;python-django-doc - High-level Python web development framework (documentation)&lt;br /&gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;うーん、、、python-djangoでいいのかしらん。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ sudo apt-get install python-django&lt;br /&gt;パッケージリストを読み込んでいます... 完了&lt;br /&gt;依存関係ツリーを作成しています                &lt;br /&gt;状態情報を読み取っています... 完了&lt;br /&gt;以下の特別パッケージがインストールされます:&lt;br /&gt;  javascript-common libjs-jquery wwwconfig-common&lt;br /&gt;提案パッケージ:&lt;br /&gt;  python-psycopg2 python-psycopg python-flup apache apache-ssl&lt;br /&gt;以下のパッケージが新たにインストールされます:&lt;br /&gt;  javascript-common libjs-jquery python-django wwwconfig-common&lt;br /&gt;アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 140 個。&lt;br /&gt;4795kB のアーカイブを取得する必要があります。&lt;br /&gt;この操作後に追加で 22.8MB のディスク容量が消費されます。&lt;br /&gt;続行しますか [Y/n]? y&lt;br /&gt;取得:1 ftp://ftp.debian.org lenny/main wwwconfig-common 0.1.2 [21.9kB]&lt;br /&gt;取得:2 ftp://ftp.debian.org lenny/main javascript-common 5 [3574B]&lt;br /&gt;取得:3 ftp://ftp.debian.org lenny/main libjs-jquery 1.2.6-2 [62.7kB]                      &lt;br /&gt;取得:4 ftp://ftp.debian.org lenny/main python-django 1.0.2-1+lenny2 [4707kB]              &lt;br /&gt;4795kB を 53s で取得しました (89.0kB/s)                                                   &lt;br /&gt;未選択パッケージ wwwconfig-common を選択しています。&lt;br /&gt;(データベースを読み込んでいます ... 現在 483804 個のファイルとディレクトリがインストールさ れています。)&lt;br /&gt;(.../wwwconfig-common_0.1.2_all.deb から) wwwconfig-common を展開しています...&lt;br /&gt;未選択パッケージ javascript-common を選択しています。&lt;br /&gt;(.../javascript-common_5_all.deb から) javascript-common を展開しています...&lt;br /&gt;未選択パッケージ libjs-jquery を選択しています。&lt;br /&gt;(.../libjs-jquery_1.2.6-2_all.deb から) libjs-jquery を展開しています...&lt;br /&gt;未選択パッケージ python-django を選択しています。&lt;br /&gt;(.../python-django_1.0.2-1+lenny2_all.deb から) python-django を展開しています...&lt;br /&gt;man-db のトリガを処理しています ...&lt;br /&gt;wwwconfig-common (0.1.2) を設定しています ...&lt;br /&gt;javascript-common (5) を設定しています ...&lt;br /&gt;libjs-jquery (1.2.6-2) を設定しています ...&lt;br /&gt;python-django (1.0.2-1+lenny2) を設定しています ...&lt;br /&gt;python-support のトリガを処理しています ...&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;で、とりあえずインストール。&lt;br /&gt;javascriptで苦しみまくったわたくしとしましては&lt;br /&gt;libjs-jqueryとか気になります。&lt;br /&gt;それは置いといて&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ python&lt;br /&gt;Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14) &lt;br /&gt;[GCC 4.3.2] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt; import django&lt;br /&gt;&gt;&gt;&gt; &lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;お、入ったっぽい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そんだけ！！！&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-5528397336116994246?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/5528397336116994246/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=5528397336116994246' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5528397336116994246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5528397336116994246'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/pythondjango-django.html' title='[Python][django] djangoが入っているかどうか'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2760136253520663426</id><published>2011-03-12T20:21:00.000+09:00</published><updated>2011-03-12T20:23:09.227+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] コンビニから食べ物が消えた</title><content type='html'>コンビニから食べ物が消えた.&lt;br /&gt;&lt;br /&gt;近所のセブンイレブン、サンクス、ミニストップ、ローソンに行ってみたけど&lt;br /&gt;なんもないよ。&lt;br /&gt;&lt;br /&gt;腹減った！&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2760136253520663426?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2760136253520663426/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2760136253520663426' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2760136253520663426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2760136253520663426'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/blog-post_12.html' title='[その他] コンビニから食べ物が消えた'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4870349372632391745</id><published>2011-03-12T16:21:00.002+09:00</published><updated>2011-03-12T16:38:07.699+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他] 地震</title><content type='html'>地震が起きたら真っ先に倒壊するかと思ってたビルに居るんだけど&lt;br /&gt;意外や意外、結構もつものだ。&lt;br /&gt;&lt;br /&gt;損害は結構良いサーバが一台棚から落ちて壊れたぐらい。。。&lt;br /&gt;&lt;br /&gt;UPSも棚からずり落ちたけど、こちらは大丈夫みたい。&lt;br /&gt;タワー型のPCは軒並み倒れた。液晶ディスプレイも倒れた。&lt;br /&gt;何か壊れているかもしれないけど、今のところ使えてるみたい。&lt;br /&gt;&lt;br /&gt;もともと汚い事務所が汚くなったので汚くなったっぷりが良く分からない。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;地震が起きたあと千代田区内をぷらぷら散歩してみたら&lt;br /&gt;皆さん道路に避難していたようで大混雑。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;とにもかくにもうちのメンバは無事なようでなにより。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4870349372632391745?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4870349372632391745/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4870349372632391745' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4870349372632391745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4870349372632391745'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/blog-post.html' title='[その他] 地震'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1550198668878288944</id><published>2011-03-12T16:11:00.004+09:00</published><updated>2011-03-12T21:35:03.801+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mod_chxj'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>[Apache][mod_chxj] POST時微妙</title><content type='html'>POST時の動きが微妙なんだけど&lt;br /&gt;クライアント側から送付された文字コードを変換したいからなんだよね・・・&lt;br /&gt;&lt;br /&gt;header_fixup時にContent-Lengthを決めないといけないっぽいんだけど&lt;br /&gt;そうするとPOSTデータはどっから持ってくるんだろう・・・&lt;br /&gt;&lt;br /&gt;input filter側でPOSTデータは読めるんだけどそうすると&lt;br /&gt;Content-Lengthを変更できないっぽい。&lt;br /&gt;&lt;br /&gt;だもんでinput_filterは止めて、input_handlerで処理するように&lt;br /&gt;し、serf使ってローカルに対してPOSTするようにしてる。　&lt;br /&gt;&lt;br /&gt;1.3の時には変更（していいかどうかは別にして）できたんだけど、&lt;br /&gt;2.xではできないみたい。（もっともっと調査必要）&lt;br /&gt;&lt;br /&gt;なんだか、そもそも勘違いしていそうな気もするんだけど。&lt;br /&gt;&lt;br /&gt;メーリングリストなんかでも、POSTデータを変更したい人はいるようで&lt;br /&gt;質問投げてるみたいなんだけど、「何でそんなこと必要なのか」で終わっちゃっている。。。&lt;br /&gt;&lt;br /&gt;えー。。。&lt;br /&gt;&lt;br /&gt;。。。&lt;br /&gt;&lt;br /&gt;。。&lt;br /&gt;&lt;br /&gt;。&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;追記&lt;br /&gt;&lt;br /&gt;apache付属のmod_charset_liteのinput filter部にも書いてあった。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;A Content-Length header is present, but it won't be valid after&lt;br /&gt;conversion because we're not converting between two single-byte&lt;br /&gt;charsets.  This will affect most CGI scripts and may affect&lt;br /&gt;some modules.&lt;br /&gt;Content-Length can't be unset here because that would break&lt;br /&gt;being able to read the request body.&lt;br /&gt;Processing of chunked request bodies is not impacted by this&lt;br /&gt;filter since the the length was not declared anyway.&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ま、無理やりセットしてもinput filterの時点では有効にならないようなんだけど。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ということから、やはり&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;1) Content-Lengthは無視する&lt;br /&gt;2) 内部から外部リクエスト投げる&lt;br /&gt;　　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;の2つぐらいしか解決策は思いつかない&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1550198668878288944?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1550198668878288944/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1550198668878288944' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1550198668878288944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1550198668878288944'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/apachemodchxj-post.html' title='[Apache][mod_chxj] POST時微妙'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-8717454910545736614</id><published>2011-03-12T15:55:00.004+09:00</published><updated>2011-03-12T16:06:50.833+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>[Debian] lennyでxz</title><content type='html'>gzipやらよりも圧縮率がすごいらしいxzっていうコマンドを&lt;br /&gt;Debian Lennyで使いたくなったとさ。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# apt-cache search xz&lt;br /&gt;xzoom - リアルタイム更新機能付き X ディスプレイの部分拡大鏡&lt;br /&gt;xzip - Infocom フォーマットによるストーリーファイルのインタプリタ&lt;br /&gt;zblast-x11 - X11 版スペースシューティングゲーム zblast&lt;br /&gt;nexuiz-server - Nexzui 用のスタンドアロンなサーバ&lt;br /&gt;xzgv - サムネイルベースのセレクタが付いた X 用写真ビューア&lt;br /&gt;makexvpics - コマンドラインから .xvpics サムネイルを更新&lt;br /&gt;horae-examples - ATHENA and ARTEMIS examples and tutorials&lt;br /&gt;#　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とのことで無い模様。&lt;br /&gt;&lt;br /&gt;ということで/etc/apt/source.listに以下を追加。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;deb http://www.backports.org/debian/ lenny-backports main&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;んで、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# apt-get update&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;aptitude使えといわれても、指が勝手にapt-getと入力してしまうのでした。&lt;br /&gt;&lt;br /&gt;改めてサーチ。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# apt-cache search xz&lt;br /&gt;xzoom - リアルタイム更新機能付き X ディスプレイの部分拡大鏡&lt;br /&gt;xzip - Infocom フォーマットによるストーリーファイルのインタプリタ&lt;br /&gt;zblast-x11 - X11 版スペースシューティングゲーム zblast&lt;br /&gt;nexuiz-server - Nexzui 用のスタンドアロンなサーバ&lt;br /&gt;xzgv - サムネイルベースのセレクタが付いた X 用写真ビューア&lt;br /&gt;makexvpics - コマンドラインから .xvpics サムネイルを更新&lt;br /&gt;horae-examples - ATHENA and ARTEMIS examples and tutorials&lt;br /&gt;liblzma-dev - XZ-format compression library - development files&lt;br /&gt;liblzma-doc - XZ-format compression library - API documentation&lt;br /&gt;liblzma2 - XZ-format compression library&lt;br /&gt;xz-lzma - XZ-format compression utilities - compatibility commands&lt;br /&gt;xz-utils - XZ-format compression utilities&lt;br /&gt;xzdec - XZ-format compression utilities - tiny decompressors&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ういうい。&lt;br /&gt;&lt;br /&gt;んだばインストール&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# apt-get install xz-utils&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;どれどれ。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# which xz&lt;br /&gt;/usr/bin/xz&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ぐへへ。&lt;br /&gt;&lt;br /&gt;早速&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# xz -d FreeBSD-8.2-RELEASE-i386-dvd1.iso.xz&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;・・・でいいのかしらん&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-8717454910545736614?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/8717454910545736614/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=8717454910545736614' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8717454910545736614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8717454910545736614'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/03/debian-lennyxz.html' title='[Debian] lennyでxz'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-731521229105450251</id><published>2011-02-28T21:43:00.003+09:00</published><updated>2011-02-28T21:55:20.022+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>[Apache] r-&gt;headers_outに出力するヘッダ</title><content type='html'>r-&gt;headers_outに出力するヘッダ情報ってvalにNULL出していいのかな。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  apr_table_setn(r-&gt;headers_out, "User-Agent", NULL);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってな感じで。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;apache http server付属のmod_disk_cache.cを見ると&lt;br /&gt;valの値を無条件でstrlenしてるんだよね。&lt;br /&gt;(keyも）&lt;br /&gt;&lt;br /&gt;ってことで余裕のSEGV。&lt;br /&gt;&lt;br /&gt;ダメじゃんか。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-731521229105450251?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/731521229105450251/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=731521229105450251' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/731521229105450251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/731521229105450251'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/02/apache-r-headersout.html' title='[Apache] r-&gt;headers_outに出力するヘッダ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4988401479361341443</id><published>2011-02-28T21:36:00.004+09:00</published><updated>2011-02-28T21:54:24.040+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>[Apache] プロファイラ</title><content type='html'>gprofを利用するためにapache http server(以下apache)から-pgオプションをつけてコンパイルする、なんてことをやってたんだけど面倒くさ。&lt;br /&gt;あっちゃこっちゃにgmon.outが作成されるし。&lt;br /&gt;（もっと調べろっていう話は置いといて）&lt;br /&gt;&lt;br /&gt;で、oprofileってやつに切り替えた。&lt;br /&gt;&lt;br /&gt;gprofよりも精度は落ちるらしいんだけど、これは楽。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# opcontrol --no-vmlinuz&lt;br /&gt;# opcontrol --start&lt;br /&gt;# /etc/init.d/apache2 start&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってやって&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ab うんたらかんたら&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;で、実行しまくって&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# opcontrol --stop&lt;br /&gt;# opreport -l /usr/lib/apache2/module/mod_chxj.so &gt; erer&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってやるとそこそこ素晴らしいアウトプットが得られる。&lt;br /&gt;さらに&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# opannotate -a -s /usr/lib/apache2/module/mod_chxj.so | lv&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんてやるとコードも一緒に表示してくれる、と。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;もちろんmod_chxj自体は-gオプションをつけてコンパイルだぜぇ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;使い終わったら&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# opcontrol --shutdown&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ですかね。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4988401479361341443?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4988401479361341443/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4988401479361341443' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4988401479361341443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4988401479361341443'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/02/apache_28.html' title='[Apache] プロファイラ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-3454390216856053568</id><published>2011-02-28T21:27:00.004+09:00</published><updated>2011-02-28T21:34:22.509+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>[Apache] なんか情報増えてるよね</title><content type='html'>Apacheモジュールに関する日本語の情報がやたらと増えてるよね。&lt;br /&gt;&lt;br /&gt;以前は日本語情報といえば、Apacheモジュール本の著者の方のページとmod_uploaderの作者の方が公開している情報ぐらいだった。&lt;br /&gt;&lt;br /&gt;さて、それは置いといて、&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ gdb /usr/sbin/apache2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;と起動して&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;gt;run -X -f /etc/apache2/apache2.conf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんてたたいてdebugするわけなんだが&lt;br /&gt;module内で内部リクエストではなく外部リクエストとして&lt;br /&gt;自分自身へリクエスト投げると、さあ大変。&lt;br /&gt;&lt;br /&gt;お手軽デッドロック。&lt;br /&gt;&lt;br /&gt;で？&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-3454390216856053568?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/3454390216856053568/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=3454390216856053568' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/3454390216856053568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/3454390216856053568'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/02/apache.html' title='[Apache] なんか情報増えてるよね'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-8714097206021735097</id><published>2011-02-28T21:25:00.000+09:00</published><updated>2011-02-28T21:27:02.936+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>復活するよ</title><content type='html'>ちょっといろいろあってさぼってた。&lt;br /&gt;復活するよ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-8714097206021735097?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/8714097206021735097/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=8714097206021735097' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8714097206021735097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8714097206021735097'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2011/02/blog-post.html' title='復活するよ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-853121706185190002</id><published>2010-02-05T22:12:00.000+09:00</published><updated>2010-02-05T22:13:23.816+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>[Haskell][お勉強] 勉強するよ</title><content type='html'>今年はHaskell勉強するよ！&lt;br /&gt;&lt;br /&gt;そんだけ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-853121706185190002?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/853121706185190002/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=853121706185190002' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/853121706185190002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/853121706185190002'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2010/02/haskell.html' title='[Haskell][お勉強] 勉強するよ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6318253447870392613</id><published>2010-02-05T22:10:00.000+09:00</published><updated>2010-02-05T22:11:23.392+09:00</updated><title type='text'>テストですよ</title><content type='html'>テストですよ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6318253447870392613?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6318253447870392613/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6318253447870392613' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6318253447870392613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6318253447870392613'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2010/02/blog-post.html' title='テストですよ'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6975712430684812165</id><published>2009-08-21T20:04:00.002+09:00</published><updated>2009-08-21T20:10:05.352+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mod_chxj'/><title type='text'>[mod_chxj] mod_chxjでFlashを使う</title><content type='html'>今のところ、mod_chxjにはFlashに関して、特になんの機能もないので、&lt;br /&gt;chxj:ifタグを使用して以下のようにする。&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;chxj:if lang="xhtml" lang="chtml" lang="hdml" lang="jhtml" lang="jxhtml"&amp;gt;&lt;br /&gt;  &amp;lt;object data="/swf/top_logo.swf" type="application/x-shockwave-flash" width="240" height="100"&amp;gt;&lt;br /&gt;    &amp;lt;param name="bgcolor" value="#000000"&amp;gt;&lt;br /&gt;    &amp;lt;param name="loop" value="on"&amp;gt;&lt;br /&gt;    &amp;lt;param name="quality" value="high"&amp;gt;&lt;br /&gt;  &amp;lt;/object&amp;gt;&lt;br /&gt;&amp;lt;/chxj:if&amp;gt;&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;っと。&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6975712430684812165?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6975712430684812165/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6975712430684812165' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6975712430684812165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6975712430684812165'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/08/modchxj-modchxjflash.html' title='[mod_chxj] mod_chxjでFlashを使う'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7334006127269411841</id><published>2009-08-03T18:14:00.009+09:00</published><updated>2009-08-11T22:54:22.192+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='oauth'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ120 shindigで3legged OAuthなるものをしてみる</title><content type='html'>OAuthには、2legged OAuthなるものと、3legged OAuthなるものがあるらしい。&lt;br /&gt;で、署名付きリクエストは、2legged OAuthというらしい。&lt;br /&gt;&lt;br /&gt;2legged OAuthはHMACもRSAもやってみたので、次は3legged OAuthなるものをやってみる。&lt;br /&gt;サービスプロバイダはGoogle。&lt;br /&gt;サンプルとしてGoogle Contact（だっけ？)にアクセスして&lt;br /&gt;自分で構築したShindig環境でアドレス張のデータを表示してみる。 &lt;br /&gt;&lt;br /&gt;おおきな作業の流れは以下な感じ。&lt;br /&gt;1) ガジェットを用意&lt;br /&gt;2) とりあえずShindigを動かして、該当するガジェット別のdomainを取得&lt;br /&gt;3) google アカウントのManageDomainsページにアクセスし、2)で取得したドメインを登録&lt;br /&gt;4) 3)で登録するとconsumer keyとconsumer secretが発行されるので、それをconfig/oauth.jsonへ記述。&lt;br /&gt;5) ガジェットXMLの一部修正&lt;br /&gt;6) shindigコンパイル&amp;起動&lt;br /&gt;でできるはず。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1) まずガジェットXMLを用意。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://code.google.com/intl/ja/apis/gadgets/docs/oauth.html"&gt;http://code.google.com/intl/ja/apis/gadgets/docs/oauth.html&lt;br /&gt;&lt;/a&gt;のページを見ると、gadgetのサンプルXMLがあるので、それをコピペ。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="OAuth Contacts" scrolling="true"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="opensocial-0.8" /&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="locked-domain"/&amp;gt;&lt;br /&gt;    &amp;lt;OAuth&amp;gt;&lt;br /&gt;      &amp;lt;Service name="google"&amp;gt;&lt;br /&gt;        &amp;lt;Access url="https://www.google.com/accounts/OAuthGetAccessToken" method="GET" /&amp;gt;&lt;br /&gt;        &amp;lt;Request url="https://www.google.com/accounts/OAuthGetRequestToken?scope=http://www.google.com/m8/feeds/" method="GET" /&amp;gt;&lt;br /&gt;        &amp;lt;Authorization url="https://www.google.com/accounts/OAuthAuthorizeToken?oauth_callback=http://oauth.gmodules.com/gadgets/oauthcallback" /&amp;gt;&lt;br /&gt;      &amp;lt;/Service&amp;gt;&lt;br /&gt;    &amp;lt;/OAuth&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html"&amp;gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- shindig oauth popup handling code --&amp;gt;&lt;br /&gt;  &amp;lt;script src="http://gadget-doc-examples.googlecode.com/svn/trunk/opensocial-gadgets/popup.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;style&amp;gt;&lt;br /&gt;  #main {&lt;br /&gt;    margin: 0px;&lt;br /&gt;    padding: 0px;&lt;br /&gt;    font-size: small;&lt;br /&gt;  }&lt;br /&gt;  &amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;div id="main" style="display: none"&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;div id="approval" style="display: none"&amp;gt;&lt;br /&gt;    &amp;lt;img src="http://gadget-doc-examples.googlecode.com/svn/trunk/images/new.gif"&amp;gt;&lt;br /&gt;    &amp;lt;a href="#" id="personalize"&amp;gt;Personalize this gadget&amp;lt;/a&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;div id="waiting" style="display: none"&amp;gt;&lt;br /&gt;    Please click&lt;br /&gt;    &amp;lt;a href="#" id="approvaldone"&amp;gt;I've approved access&amp;lt;/a&amp;gt;&lt;br /&gt;    once you've approved access to your data.&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    // Display UI depending on OAuth access state of the gadget (see &amp;lt;divs&amp;gt; above).&lt;br /&gt;    // If user hasn't approved access to data, provide a "Personalize this gadget" link&lt;br /&gt;    // that contains the oauthApprovalUrl returned from makeRequest.&lt;br /&gt;    //&lt;br /&gt;    // If the user has opened the popup window but hasn't yet approved access, display&lt;br /&gt;    // text prompting the user to confirm that s/he approved access to data.  The user&lt;br /&gt;    // may not ever need to click this link, if the gadget is able to automatically&lt;br /&gt;    // detect when the user has approved access, but showing the link gives users&lt;br /&gt;    // an option to fetch their data even if the automatic detection fails.&lt;br /&gt;    //&lt;br /&gt;    // When the user confirms access, the fetchData() function is invoked again to&lt;br /&gt;    // obtain and display the user's data.&lt;br /&gt;    function showOneSection(toshow) {&lt;br /&gt;      var sections = [ 'main', 'approval', 'waiting' ];&lt;br /&gt;      for (var i=0; i &amp;lt; sections.length; ++i) {&lt;br /&gt;        var s = sections[i];&lt;br /&gt;        var el = document.getElementById(s);&lt;br /&gt;        if (s === toshow) {&lt;br /&gt;          el.style.display = "block";&lt;br /&gt;        } else {&lt;br /&gt;          el.style.display = "none";&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Process returned JSON feed to display data.&lt;br /&gt;    function showResults(result) {&lt;br /&gt;      showOneSection('main');&lt;br /&gt;&lt;br /&gt;      var titleElement = document.createElement('div');&lt;br /&gt;      var nameNode = document.createTextNode(result.feed.title.$t);&lt;br /&gt;      titleElement.appendChild(nameNode);&lt;br /&gt;      document.getElementById("main").appendChild(titleElement);&lt;br /&gt;      document.getElementById("main").appendChild(document.createElement("br"));&lt;br /&gt;&lt;br /&gt;      list = result.feed.entry;&lt;br /&gt;&lt;br /&gt;      for(var i = 0; i &amp;lt; list.length; i++) {&lt;br /&gt;        entry = list[i];&lt;br /&gt;        var divElement = document.createElement('div');&lt;br /&gt;        divElement.setAttribute('class', 'name');&lt;br /&gt;        var valueNode = document.createTextNode(entry.gd$email[0].address);&lt;br /&gt;        divElement.appendChild(nameNode);&lt;br /&gt;        divElement.appendChild(valueNode);&lt;br /&gt;        document.getElementById("main").appendChild(divElement);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Invoke makeRequest() to fetch data from the service provider endpoint.&lt;br /&gt;    // Depending on the results of makeRequest, decide which version of the UI&lt;br /&gt;    // to ask showOneSection() to display. If user has approved access to his&lt;br /&gt;    // or her data, display data.&lt;br /&gt;    // If the user hasn't approved access yet, response.oauthApprovalUrl contains a&lt;br /&gt;    // URL that includes a Google-supplied request token. This is presented in the&lt;br /&gt;    // gadget as a link that the user clicks to begin the approval process.&lt;br /&gt;    function fetchData() {&lt;br /&gt;      var params = {};&lt;br /&gt;      url = "http://www.google.com/m8/feeds/contacts/default/base?alt=json";&lt;br /&gt;      params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;&lt;br /&gt;      params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.OAUTH;&lt;br /&gt;      params[gadgets.io.RequestParameters.OAUTH_SERVICE_NAME] = "google";&lt;br /&gt;      params[gadgets.io.RequestParameters.OAUTH_USE_TOKEN] = "always";&lt;br /&gt;      params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;&lt;br /&gt;&lt;br /&gt;      gadgets.io.makeRequest(url, function (response) {&lt;br /&gt;        if (response.oauthApprovalUrl) {&lt;br /&gt;          // Create the popup handler. The onOpen function is called when the user&lt;br /&gt;          // opens the popup window. The onClose function is called when the popup&lt;br /&gt;          // window is closed.&lt;br /&gt;          var popup = shindig.oauth.popup({&lt;br /&gt;            destination: response.oauthApprovalUrl,&lt;br /&gt;            windowOptions: null,&lt;br /&gt;            onOpen: function() { showOneSection('waiting'); },&lt;br /&gt;            onClose: function() { fetchData(); }&lt;br /&gt;          });&lt;br /&gt;          // Use the popup handler to attach onclick handlers to UI elements.  The&lt;br /&gt;          // createOpenerOnClick() function returns an onclick handler to open the&lt;br /&gt;          // popup window.  The createApprovedOnClick function returns an onclick&lt;br /&gt;          // handler that will close the popup window and attempt to fetch the user's&lt;br /&gt;          // data again.&lt;br /&gt;          var personalize = document.getElementById('personalize');&lt;br /&gt;          personalize.onclick = popup.createOpenerOnClick();&lt;br /&gt;          var approvaldone = document.getElementById('approvaldone');&lt;br /&gt;          approvaldone.onclick = popup.createApprovedOnClick();&lt;br /&gt;          showOneSection('approval');&lt;br /&gt;        } else if (response.data) {&lt;br /&gt;          showOneSection('main');&lt;br /&gt;          showResults(response.data);&lt;br /&gt;        } else {&lt;br /&gt;          // The response.oauthError and response.oauthErrorText values may help debug&lt;br /&gt;          // problems with your gadget.&lt;br /&gt;          var main = document.getElementById('main');&lt;br /&gt;          var err = document.createTextNode('OAuth error: ' +&lt;br /&gt;            response.oauthError + ': ' + response.oauthErrorText);&lt;br /&gt;          main.appendChild(err);&lt;br /&gt;          showOneSection('main');&lt;br /&gt;        }&lt;br /&gt;      }, params);&lt;br /&gt;    }&lt;br /&gt;    // Call fetchData() when gadget loads.&lt;br /&gt;    gadgets.util.registerOnLoadHandler(fetchData);&lt;br /&gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt;  &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;。&lt;br /&gt;コピペしただけ。&lt;br /&gt;hogehoge.xmlとして保存する。&lt;br /&gt;外部からhttp://www.example.com/opensocial/hogehoge.xmlとして見える場所に設置。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) とりあえずShindigを動かして、該当するガジェット別のdomainを取得&lt;br /&gt;lockedDomain機能を有効にしているので、gadgetXML毎のiframeのdomainが分からない。&lt;br /&gt;SHA1の結果をBase32してみても良いんだけど、Shindig動かした方が楽しかったので、&lt;br /&gt;そうした。&lt;br /&gt;&lt;br /&gt;表示された結果のソースファイルを見てみると、、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;http://59vs5qn45f2fqulv6shuu20n9v6ig218.gadget.example.com/gadgets/ifr?url=http://www.example.com/opensocial/hogehoge.xml&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;などとiframeのsrc属性だったので、ホスト名を抜き出す。&lt;br /&gt;すると、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;59vs5qn45f2fqulv6shuu20n9v6ig218.gadget.example.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんてなものが抜き出せる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3) google アカウントのManageDomainsページにアクセスし、2)で取得したドメインを登録&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;2)で抜き出したgadgets毎のiframeのドメインをgoogleアカウントのmanageDomainsから登録する。&lt;br /&gt;URLは&lt;a href="https://www.google.com/accounts/ManageDomains"&gt;https://www.google.com/accounts/ManageDomains&lt;/a&gt;。&lt;br /&gt;で、「Add a New Domain」ってところから2)で取得した&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;59vs5qn45f2fqulv6shuu20n9v6ig218.gadget.example.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を登録。&lt;br /&gt;Googleからverifyなリクエストが飛んでくるので、とある決まったファイルを置いておく。&lt;br /&gt;（登録時にGoogleの画面に従えばOK）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4) 3)で登録するとconsumer keyとconsumer secretが発行されるので、それをconfig/oauth.jsonへ記述。&lt;/span&gt;&lt;br /&gt;3)で登録完了すると、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;OAuth Consumer Key:    59vs5qn45f2fqulv6shuu20n9v6ig218.gadget.example.com&lt;br /&gt;OAuth Consumer Secret:   hogehogehoge&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;などと表示されるので、それをshindigのconfig/oauth.jsonへ記述する。&lt;br /&gt;記述したoauth.jsonは以下な感じ。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;{&lt;br /&gt;  "http://www.example.com/opensocial/hello.xml" : {&lt;br /&gt;    "google" : {&lt;br /&gt;      "consumer_key" : "59vs5qn45f2fqulv6shuu20n9v6ig218.gadget.example.com",&lt;br /&gt;      "consumer_secret": "hogehogehoge",&lt;br /&gt;      "key_type" : "HMAC_SYMMETRIC"&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3行目の"google"は、ガジェットの&amp;lt;Service name="google"&amp;gt;と合わせておくっぽい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5) ガジェットXMLの一部修正&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Googleからコピーしてきたガジェットを修正する。&lt;br /&gt;ガジェットXMLの10行目、&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;Authorization url="https://www.google.com/accounts/OAuthAuthorizeToken?oauth_callback=http://oauth.gmodules.com/gadgets/oauthcallback" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;というところを&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;Authorization url="https://www.google.com/accounts/OAuthAuthorizeToken" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とoauth_callback以降を削除。&lt;br /&gt;とりあえず、今はコールバックいらないんで。&lt;br /&gt;また、shindig.propertiesのshindig.signing.global-callback-urlも空にセット。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6) shindigコンパイル&amp;起動&lt;/span&gt;&lt;br /&gt;そしたら、shindigをコンパイル&amp;起動する。&lt;br /&gt;で、ガジェットを表示してみる。&lt;br /&gt;&lt;br /&gt;すると画面に&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;  Personalize this gadget  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;というリンクが表示されるんで、クリックする。&lt;br /&gt;すると、別Windowが開いて、Googleにログインしていなければ、Googleのログイン画面が表示される。&lt;br /&gt;ログインすると、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;The site 59vs5qn45f2fqulv6shuu20n9v6ig218.gadget.example.com is requesting access to your Google Account for the product(s) listed below.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんて書かれたページが表示される。そのページの「Grant access」ボタンを押下。&lt;br /&gt;ボタンを押下すると、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;You have successfully granted 59vs5qn45f2fqulv6shuu20n9v6ig218.gadget.example.com access to your Google Account. You can revoke access at any time under 'My Account'. &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんて書かれたページが表示される。このWindowはもういらないので、閉じる。&lt;br /&gt;&lt;br /&gt;するとあら不思議。&lt;br /&gt;ガジェットにメールアドレス一覧が表示されているではありませんか！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;まだいろいろ試したわけじゃないので、なんとも言えないが、&lt;br /&gt;ガジェットを表示する際のOWNERとVIEWERをGoogleのアカウント名と合わせておかないと&lt;br /&gt;駄目かも。&lt;br /&gt;--&lt;br /&gt;OWNERを合わせておかないと、ダメかも。&lt;br /&gt;OWNERが違うときにはGoogle側でエラーになる。&lt;br /&gt;--&lt;br /&gt;ちなみに上記は、Shindig-1.1-SNAPSHOTでやった。&lt;br /&gt;(Java版)&lt;br /&gt;&lt;br /&gt;--(2009/08/11)&lt;br /&gt;OwnerIdとViewerIdが違うとShindigでエラーになる。&lt;br /&gt;OAuthRequest.javaの320行目あたり参照。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7334006127269411841?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7334006127269411841/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7334006127269411841' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7334006127269411841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7334006127269411841'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/08/apache-shindigopensocial-120.html' title='[Apache Shindig][お勉強][OpenSocial] メモ120 shindigで3legged OAuthなるものをしてみる'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-5918298281671206306</id><published>2009-08-02T04:48:00.002+09:00</published><updated>2009-08-02T04:49:08.543+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CentOS'/><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>[その他][CentOS] CentOS</title><content type='html'>&lt;a href="http://ssig33.ddo.jp/blog/2009-07-31-1.html"&gt;http://ssig33.ddo.jp/blog/2009-07-31-1.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;へぇ。&lt;br /&gt;CentOSやばいんだ。。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-5918298281671206306?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/5918298281671206306/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=5918298281671206306' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5918298281671206306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/5918298281671206306'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/08/centos-centos.html' title='[その他][CentOS] CentOS'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1525871624286681073</id><published>2009-08-02T03:20:00.006+09:00</published><updated>2009-08-19T19:08:01.074+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ119 gadgets.io.makeRequest 認証認可タイプSIGNEDをやってみる(MHAC-SHA1で署名)</title><content type='html'>ついでにMHAC-SHA1でのSIGNEDもやってみる。&lt;br /&gt;&lt;br /&gt;MHACはパスワードを自分と先方とで共有する方式。&lt;br /&gt;&lt;br /&gt;まずconfig/oauth.json。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;  "http://localhost/opensocial/hello.xml" : {&lt;br /&gt;    "" : {&lt;br /&gt;      "consumer_key" : "gadgetConsumer",&lt;br /&gt;      "consumer_secret": "testpass",&lt;br /&gt;      "key_type" : "MHAC_SYMMETRIC"&lt;br /&gt;    }&lt;br /&gt;  },&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;な感じに修正。&lt;br /&gt;&lt;br /&gt;key_typeはMHAC_SYMMETRIC。&lt;br /&gt;別にMHAC_SYMMETRIC使いたい場合は、"UNKO"とかでもOK。(BasicOAuthStoreの場合)&lt;br /&gt;&lt;br /&gt;そしてそして、&lt;br /&gt;通信相手側（サービス側というのか？）のサーブレットも修正。&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;       OAuthConsumer consumer =&lt;br /&gt;           new OAuthConsumer(null, "gadgetConsumer", "testpass", provider);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;OAuthConsumerをnewするときのパラメータにconsumer_secretで指定したパスワードを&lt;br /&gt;渡してあげる。&lt;br /&gt;&lt;br /&gt;で、おしまい。&lt;br /&gt;&lt;br /&gt;ガジェットは「メモ118」と一緒。&lt;br /&gt;&lt;br /&gt;で実行すると、画面に、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;*** OAuthMessage Params:&lt;br /&gt;URL: http://localhost/oauth/SignedFetchVerifyServlet&lt;br /&gt;Param Name--&amp;gt;opensocial_viewer_id Value--&amp;gt;root&lt;br /&gt;Param Name--&amp;gt;oauth_signature Value--&amp;gt;hcnKb9xBH6xlXrcFXNtkhNcccKI=&lt;br /&gt;Param Name--&amp;gt;oauth_body_hash Value--&amp;gt;2jmj7l5rSw0yVb/vlWAYkK/YBwk=&lt;br /&gt;Param Name--&amp;gt;oauth_nonce Value--&amp;gt;1249151173936074000&lt;br /&gt;Param Name--&amp;gt;oauth_version Value--&amp;gt;1.0&lt;br /&gt;Param Name--&amp;gt;oauth_signature_method Value--&amp;gt;HMAC-SHA1&lt;br /&gt;Param Name--&amp;gt;oauth_consumer_key Value--&amp;gt;gadgetConsumer&lt;br /&gt;Param Name--&amp;gt;opensocial_owner_id Value--&amp;gt;root&lt;br /&gt;Param Name--&amp;gt;opensocial_app_id Value--&amp;gt;http://localhost/opensocial/hello.xml&lt;br /&gt;Param Name--&amp;gt;opensocial_app_url Value--&amp;gt;http://localhost/opensocial/hello.xml&lt;br /&gt;Param Name--&amp;gt;oauth_timestamp Value--&amp;gt;1249151173&lt;br /&gt;VALIDATING SIGNATURE&lt;br /&gt;REQUEST STATUS::OK&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と表示される。oauth_signature_method ValueもHMAC-SHA1になってる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;おしまい。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1525871624286681073?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1525871624286681073/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1525871624286681073' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1525871624286681073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1525871624286681073'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/08/apache-shindigopensocial-118.html' title='[Apache Shindig][お勉強][OpenSocial] メモ119 gadgets.io.makeRequest &lt;s&gt;認証&lt;/s&gt;認可タイプSIGNEDをやってみる(MHAC-SHA1で署名)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-9110609219136698948</id><published>2009-08-02T03:06:00.005+09:00</published><updated>2009-08-19T19:08:42.343+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ118 gadgets.io.makeRequest 認証認可タイプSIGNEDをやってみる(RSA-SHA1で署名)</title><content type='html'>makeRequestでsignatureをリクエストにつけて通信することができるとのこと。&lt;br /&gt;これもOAuthの一種っぽい。&lt;br /&gt;&lt;br /&gt;ということでMy Shindigでもやってみる。&lt;br /&gt;参考にしたサイトは&lt;a href="http://wiki.opensocial.org/index.php?title=Validating_Signed_Requests"&gt;http://wiki.opensocial.org/index.php?title=Validating_Signed_Requests&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;Shindigでは、RSA-SHA1かHMAC-SHA1が使えるらしい。&lt;br /&gt;&lt;br /&gt;まず、shindigでoauthを使えるようにセットアップする。&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;config/oauth.json&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;に設定できる。&lt;br /&gt;&lt;br /&gt;oauth.jsonの中身は、デフォルトでは&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;{&lt;br /&gt;  "http://localhost:8080/gadgets/files/samplecontainer/examples/oauth.xml" : {&lt;br /&gt;    "" : {&lt;br /&gt;      "consumer_key" : "gadgetConsumer",&lt;br /&gt;      "consumer_secret" : "gadgetSecret",&lt;br /&gt;      "key_type" : "HMAC_SYMMETRIC"&lt;br /&gt;    }&lt;br /&gt;  },&lt;br /&gt;  "http://localhost:8080/gadgets/files/samplecontainer/examples/shindigoauth.xml" : {&lt;br /&gt;    "shindig" : {&lt;br /&gt;      "consumer_key" : "http://localhost:8080/gadgets/files/samplecontainer/examples/shindigoauth.xml",&lt;br /&gt;      "consumer_secret" : "secret",&lt;br /&gt;      "key_type" : "HMAC_SYMMETRIC"&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんてなふうになっているんで、自分のガジェット用定義にする。&lt;br /&gt;&lt;br /&gt;で、下記自分用。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;{&lt;br /&gt;  "http://localhost/opensocial/oauth.xml" : {&lt;br /&gt;    "" : {&lt;br /&gt;      "consumer_key" : "gadgetConsumer",&lt;br /&gt;      "consumer_secret" : "gadgetSecret",&lt;br /&gt;      "key_type" : "RSA_PRIVATE"&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;最初のURLの"http://localhost:8080/opensocial/oauth.xml"は、&lt;br /&gt;ガジェットのURL。shindigはmakeRequestをSIGNEDで受け取ると、&lt;br /&gt;現在実行中のガジェットのURLをキーに、oauth.jsonの中身を探しにいく。&lt;br /&gt;&lt;br /&gt;consumer_keyというのは、どこのコンテナから送られてきたリクエストかを指し示す。&lt;br /&gt;consumer_secretというのは、key_typeにHMAC_SYMMETRICを指定した場合の、先方と共有すべき&lt;br /&gt;パスワード、みたいなものらしい。&lt;br /&gt;RSA_PRIVATEの場合、consumer_secretには、BasicOAuthStore.java（デフォルト)を使うのであれば、opensslで作成した証明書の秘密鍵を指定する。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;次は、証明書と秘密鍵の作成。&lt;br /&gt;特に設定しないで起動すると、ログに&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;Couldn't load OAuth signing key.  To create a key, run:&lt;br /&gt;  openssl req -newkey rsa:1024 -days 365 -nodes -x509 -keyout testkey.pem \&lt;br /&gt;     -out testkey.pem -subj '/CN=mytestkey'&lt;br /&gt;  openssl pkcs8 -in testkey.pem -out oauthkey.pem -topk8 -nocrypt -outform PEM&lt;br /&gt;&lt;br /&gt;Then edit gadgets.properties and add these lines:&lt;br /&gt;shindig.signing.key-file=&lt;path-to-oauthkey.pem&gt;&lt;br /&gt;shindig.signing.key-name=mykey&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;などと出力されているんで、そのとおりにopnessl、設定を実行。&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;$ openssl req -newkey rsa:1024 -days 365 -nodes -x509 -keyout testkey.pem -out testkey.pem -subj '/CN=mytestkey'&lt;br /&gt;$ openssl pkcs8 -in testkey.pem -out oauthkey.pem -topk8 -nocrypt -outform PEM&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;で、できあがったファイルをWEB-INFの直下に配置。（getResourceで見える場所ならどこでも良い)&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;$ cp ./oauthkey.pem /tmp/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;で、shindig.propertiesを修正。&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;shindig.signing.key-file=/tmp/oauthkey.pem&lt;br /&gt;shindig.signing.key-name=mytestkey&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と。&lt;br /&gt;&lt;br /&gt;さらに、oauthkey.pemをoauth.jsonのconsumer_secretにセットする。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;  "http://localhost/opensocial/hello.xml" : {&lt;br /&gt;    "" : {&lt;br /&gt;      "consumer_key" : "gadgetConsumer",&lt;br /&gt;      "consumer_secret": "-----BEGIN PRIVATE KEY-----\nMIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAMMTit67BWHr6lY/\nsIGrNljDff5ZG6M5RCSDvIwHKwmhMFIRE1rhfdzmxst1wpih6X4D/r9W6rMVqMEz\nD8UVz+D7guS6VAJLzOVMi08bo3aOvUuTbnqt6vsVTO41wwPkoHzBWkQsIk5BLBia\neDr/nTR0Hih8cHCDo8KOjyl6lUJBAgMBAAECgYAx/Fr0MaXybnoQeadnwpBddFJf\nj0O2smDUnnD8zIVppUT1cmysN+WBahz8W4NuiuaCpNFtA/+FvgIM52GeFbW7NInS\nkCKQ/d0IxFII9qiE/VHGiSIx2tM978LtEZ90oUDcBSfOfkmuAiZmNNa7MPvxzXBH\n6ykLtK6I0Jdsc7vutQJBAPX6waYp8oyjR/ju6dN/BpYknzeTcH4xV6sX1gtAD1SR\noFpui5VgkPrTAHsHNHNlEakH+olzOyW/kEmteg4WiUMCQQDLBe7CrkZQt1UjhIij\nazE2TzpNHkxocsFa27vp3fnfSo3U+RxsX+Veyz09SoSEVfj40Zbaz9u35BUDV5Hk\nlbwrAkA870iHjD6svko3DaBZJ0+PZDUZBGpKqJiKJtZ8ZPsnPQgXPulPMOPZbung\nkFFbAL+WOwbChAwz9recuN/Sm5yXAkAr4LhdcvTXdQf9iSNOzlfweOcMy8OPv11y\nmZLfVI4waBiHMt+lvIQCHMK7gGNrhnksrX+BAvNlpvGzqzVoxcPJAkA4m5u5skPY\nmbpIPAPda/lr8XN88U5QROr/LdWeu46WO/402U86R+cVRwM/m7WVHAC8MCxzQ+8U\nDOWOrYDKefew\n-----END PRIVATE KEY-----",&lt;br /&gt;      "key_type" : "RSA_PRIVATE"&lt;br /&gt;    }&lt;br /&gt;  },&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;な感じ。（BasicOAuthStoreを使用の場合。デフォルト)&lt;br /&gt;BasicOAuthStoreは実運用には耐えられるものではないとshindig-devのメーリングリストで&lt;br /&gt;見つけた。実運用する際には別途実装せよ、とのこと。&lt;br /&gt;&lt;br /&gt;でコンパイル。で、起動。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;今度は通信先のサーブレットを実装。&lt;br /&gt;&lt;a href="http://wiki.opensocial.org/index.php?title=Validating_Signed_Requests"&gt;http://wiki.opensocial.org/index.php?title=Validating_Signed_Requests&lt;/a&gt;&lt;br /&gt;にあるものそのままだけど、一応コピペ。&lt;br /&gt;そのままじゃ動かないので、一部現状のOAuthライブラリに合わせて修正。&lt;br /&gt;さらに環境に合わせて修正。&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;package net.oauth.example.provider.servlets;&lt;br /&gt;&lt;br /&gt; import net.oauth.OAuth;&lt;br /&gt; import net.oauth.OAuthAccessor;&lt;br /&gt; import net.oauth.OAuthConsumer;&lt;br /&gt; import net.oauth.OAuthMessage;&lt;br /&gt; /* ここから修正 */&lt;br /&gt; import net.oauth.OAuthValidator;&lt;br /&gt; import net.oauth.SimpleOAuthValidator;&lt;br /&gt; /* ここまで修正 */&lt;br /&gt; import net.oauth.OAuthProblemException;&lt;br /&gt; import net.oauth.OAuthServiceProvider;&lt;br /&gt; import net.oauth.server.OAuthServlet;&lt;br /&gt; import net.oauth.signature.RSA_SHA1;&lt;br /&gt;&lt;br /&gt; import java.util.ArrayList;&lt;br /&gt; import java.io.IOException;&lt;br /&gt; import java.util.Map;&lt;br /&gt; import java.io.PrintWriter;&lt;br /&gt; import java.util.List;&lt;br /&gt;&lt;br /&gt; import javax.servlet.ServletException;&lt;br /&gt; import javax.servlet.http.HttpServlet;&lt;br /&gt; import javax.servlet.http.HttpServletRequest;&lt;br /&gt; import javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;br /&gt; public class SignedFetchVerifyServlet extends HttpServlet {&lt;br /&gt;&lt;br /&gt;   private final static String CERTIFICATE =&lt;br /&gt;       "-----BEGIN CERTIFICATE-----\n"&lt;br /&gt;           + "MIIDHDCCAoWgAwIBAgIJAMbTCksqLiWeMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNV\n"&lt;br /&gt;           + "BAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIG\n"&lt;br /&gt;           + "A1UEChMLR29vZ2xlIEluYy4xDjAMBgNVBAsTBU9ya3V0MQ4wDAYDVQQDEwVscnlh\n"&lt;br /&gt;           + "bjAeFw0wODAxMDgxOTE1MjdaFw0wOTAxMDcxOTE1MjdaMGgxCzAJBgNVBAYTAlVT\n"&lt;br /&gt;           + "MQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChML\n"&lt;br /&gt;           + "R29vZ2xlIEluYy4xDjAMBgNVBAsTBU9ya3V0MQ4wDAYDVQQDEwVscnlhbjCBnzAN\n"&lt;br /&gt;           + "BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAseBXZ4NDhm24nX3sJRiZJhvy9eDZX12G\n"&lt;br /&gt;           + "j4HWAMmhAcnm2iBgYpAigwhVHtOs+ZIUIdzQHvHeNd0ydc1Jg8e+C+Mlzo38OvaG\n"&lt;br /&gt;           + "D3qwvzJ0LNn7L80c0XVrvEALdD9zrO+0XSZpTK9PJrl2W59lZlJFUk3pV+jFR8NY\n"&lt;br /&gt;           + "eB/fto7AVtECAwEAAaOBzTCByjAdBgNVHQ4EFgQUv7TZGZaI+FifzjpTVjtPHSvb\n"&lt;br /&gt;           + "XqUwgZoGA1UdIwSBkjCBj4AUv7TZGZaI+FifzjpTVjtPHSvbXqWhbKRqMGgxCzAJ\n"&lt;br /&gt;           + "BgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEU\n"&lt;br /&gt;           + "MBIGA1UEChMLR29vZ2xlIEluYy4xDjAMBgNVBAsTBU9ya3V0MQ4wDAYDVQQDEwVs\n"&lt;br /&gt;           + "cnlhboIJAMbTCksqLiWeMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA\n"&lt;br /&gt;           + "CETnhlEnCJVDXoEtSSwUBLP/147sqiu9a4TNqchTHJObwTwDPUMaU6XIs2OTMmFu\n"&lt;br /&gt;           + "GeIYpkHXzTa9Q6IKlc7Bt2xkSeY3siRWCxvZekMxPvv7YTcnaVlZzHrVfAzqNsTG\n"&lt;br /&gt;           + "P3J//C0j+8JWg6G+zuo5k7pNRKDY76GxxHPYamdLfwk=\n"&lt;br /&gt;           + "-----END CERTIFICATE-----";&lt;br /&gt;&lt;br /&gt;   @Override&lt;br /&gt;   protected void doGet(HttpServletRequest req, HttpServletResponse resp)&lt;br /&gt;       throws ServletException, IOException {&lt;br /&gt;     verifyFetch(req, resp);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   @Override&lt;br /&gt;   protected void doPost(HttpServletRequest req, HttpServletResponse resp)&lt;br /&gt;       throws ServletException, IOException {&lt;br /&gt;     verifyFetch(req, resp);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   private void verifyFetch(HttpServletRequest request, HttpServletResponse resp)&lt;br /&gt;       throws IOException, ServletException {&lt;br /&gt;     resp.setContentType("text/html; charset=UTF-8");&lt;br /&gt;     PrintWriter out = resp.getWriter();&lt;br /&gt;&lt;br /&gt;     try {&lt;br /&gt;       OAuthServiceProvider provider =&lt;br /&gt;           new OAuthServiceProvider(null, null, null);&lt;br /&gt;       /* ここから修正(oauth.jsonに書いたconsumerKeyをセット) */&lt;br /&gt;       OAuthConsumer consumer = &lt;br /&gt;           new OAuthConsumer(null, "gadgetConsumer", null, provider);&lt;br /&gt;       /* OAuthConsumer consumer = &lt;br /&gt;           new OAuthConsumer(null, "orkut.com", null, provider);&lt;br /&gt;       */&lt;br /&gt;       /* ここまで修正 */&lt;br /&gt;       consumer.setProperty(RSA_SHA1.X509_CERTIFICATE, CERTIFICATE);&lt;br /&gt;&lt;br /&gt;       String method = request.getMethod();&lt;br /&gt;       String requestUrl = getRequestUrl(request);&lt;br /&gt;       List&amp;lt;OAuth.Parameter&amp;gt; requestParameters = getRequestParameters(request);&lt;br /&gt;&lt;br /&gt;       /* ここから修正 */&lt;br /&gt;       OAuthMessage message = &lt;br /&gt;           new OAuthMessage(method, requestUrl + "/SignedFetchVerifyServlet", requestParameters);&lt;br /&gt;       /*&lt;br /&gt;       OAuthMessage message =&lt;br /&gt;           new OAuthMessage(method, requestUrl, requestParameters);&lt;br /&gt;       */&lt;br /&gt;       /* ここまで修正 */&lt;br /&gt;       OAuthAccessor accessor = new OAuthAccessor(consumer);&lt;br /&gt;       out.print("*** OAuthMessage Params:");&lt;br /&gt;       out.print("&amp;lt;br&amp;gt;URL: " + OAuthServlet.htmlEncode(message.URL));&lt;br /&gt;       for (java.util.Map.Entry param : message.getParameters()) {&lt;br /&gt;         String key = param.getKey().toString();&lt;br /&gt;         String value = param.getValue().toString();&lt;br /&gt;         out.print("&amp;lt;br&amp;gt;");&lt;br /&gt;         out.print("Param Name--&amp;gt;" + OAuthServlet.htmlEncode(key));&lt;br /&gt;         out.print("&amp;nbsp;");&lt;br /&gt;         out.print("Value--&amp;gt;" + OAuthServlet.htmlEncode(value));&lt;br /&gt;       }&lt;br /&gt;       out.print("&amp;lt;br&amp;gt;");&lt;br /&gt;       out.print(" VALIDATING SIGNATURE ");&lt;br /&gt;       out.print("&amp;lt;br&amp;gt;");&lt;br /&gt;       /* ここから修正 */&lt;br /&gt;       OAuthValidator validator = new SimpleOAuthValidator();&lt;br /&gt;       message.validateMessage(accessor, validator);&lt;br /&gt;       /* message.validateSignature(accessor); */&lt;br /&gt;       /* ここまで修正 */&lt;br /&gt;       out.print("REQUEST STATUS::OK");&lt;br /&gt;       out.print("&amp;lt;br&amp;gt;");&lt;br /&gt;     } catch (OAuthProblemException ope) {&lt;br /&gt;       out.print("&amp;lt;br&amp;gt;");&lt;br /&gt;       out.print("OAuthProblemException--&amp;gt;"&lt;br /&gt;           + OAuthServlet.htmlEncode(ope.getProblem()));&lt;br /&gt;      } catch (Exception e) {&lt;br /&gt;         out.println(e);&lt;br /&gt;         System.out.println(e);&lt;br /&gt;       throw new ServletException(e);&lt;br /&gt;     } finally {&lt;br /&gt;       out.flush();&lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   /**&lt;br /&gt;     * Constructs and returns the full URL associated with the passed request&lt;br /&gt;     * object.&lt;br /&gt;     *&lt;br /&gt;     * @param  request Servlet request object with methods for retrieving the&lt;br /&gt;     *         various components of the request URL&lt;br /&gt;     */&lt;br /&gt;   public static String getRequestUrl(HttpServletRequest request) {&lt;br /&gt;     StringBuilder requestUrl = new StringBuilder();&lt;br /&gt;     String scheme = request.getScheme();&lt;br /&gt;     int port = request.getLocalPort();&lt;br /&gt;&lt;br /&gt;     requestUrl.append(scheme);&lt;br /&gt;     requestUrl.append("://");&lt;br /&gt;     requestUrl.append(request.getServerName());&lt;br /&gt;&lt;br /&gt;     if ((scheme.equals("http") &amp;&amp; port != 80)&lt;br /&gt;             || (scheme.equals("https") &amp;&amp; port != 443)) {&lt;br /&gt;       requestUrl.append(":");&lt;br /&gt;       requestUrl.append(port);&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     requestUrl.append(request.getContextPath());&lt;br /&gt;     requestUrl.append(request.getServletPath());&lt;br /&gt;&lt;br /&gt;     return requestUrl.toString();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   /**&lt;br /&gt;    * Constructs and returns a List of OAuth.Parameter objects, one per&lt;br /&gt;    * parameter in the passed request.&lt;br /&gt;    *&lt;br /&gt;    * @param  request Servlet request object with methods for retrieving the&lt;br /&gt;    *         full set of parameters passed with the request&lt;br /&gt;    */&lt;br /&gt;   public static List&amp;lt;OAuth.Parameter&amp;gt; getRequestParameters(&lt;br /&gt;       HttpServletRequest request) {&lt;br /&gt;&lt;br /&gt;     List&amp;lt;OAuth.Parameter&amp;gt; parameters = new ArrayList&amp;lt;OAuth.Parameter&amp;gt;();&lt;br /&gt;&lt;br /&gt;     for (Object e : request.getParameterMap().entrySet()) {&lt;br /&gt;       Map.Entry&amp;lt;String, String[]&amp;gt; entry = (Map.Entry&amp;lt;String, String[]&amp;gt;) e;&lt;br /&gt;&lt;br /&gt;       for (String value : entry.getValue()) {&lt;br /&gt;         parameters.add(new OAuth.Parameter(entry.getKey(), value));&lt;br /&gt;       }&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     return parameters;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;で、CERTIFICATEの値をさっきつくったtestkey.pemの&lt;br /&gt;BEGIN CERTIRICATEの方、証明書をコピペ。&lt;br /&gt;&lt;br /&gt;で、コンパイル。OAuthライブラリは、&lt;br /&gt;&lt;a href="http://code.google.com/p/oauth/"&gt;http://code.google.com/p/oauth/&lt;/a&gt;&lt;br /&gt;にある。&lt;br /&gt;&lt;br /&gt;クラスパス通してコンパイル。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;次にSINGEDでリクエストするガジェットを用意。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt; &amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="oAuth Java Example"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="opensocial-0.8"&amp;gt;&amp;lt;/Require&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="dynamic-height"&amp;gt;&amp;lt;/Require&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html"&amp;gt;&lt;br /&gt;   &amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;      var servletUrl="http://localhost/oauth/SignedFetchVerifyServlet";&lt;br /&gt;&lt;br /&gt;      function response(data) {&lt;br /&gt;        document.getElementById('dom_handle').innerHTML=data.text;&lt;br /&gt;      };&lt;br /&gt;&lt;br /&gt;      function request() {&lt;br /&gt;        var params={};&lt;br /&gt;        params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT;&lt;br /&gt;        params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;&lt;br /&gt;        gadgets.io.makeRequest(servletUrl,response,params);&lt;br /&gt;      };&lt;br /&gt;&lt;br /&gt;      gadgets.util.registerOnLoadHandler(request);&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;div id="dom_handle"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;   ]]&amp;gt;&lt;br /&gt;   &amp;lt;/Content&amp;gt;&lt;br /&gt; &amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;な感じ。&lt;br /&gt;&lt;br /&gt;実行させると、、、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;*** OAuthMessage Params:&lt;br /&gt;URL: http://localhost/oauth/SignedFetchVerifyServlet&lt;br /&gt;Param Name--&amp;gt;opensocial_viewer_id Value--&amp;gt;root&lt;br /&gt;Param Name--&amp;gt;oauth_signature Value--&amp;gt;uR7NP8VHHIvUTVl6wQI6iDUtp25DSrg1zrdfzLByvLR1/4xE2aT3+J+l9aGDBQGO8jFky9qC6CEQE1UFruif4cSDXY7PhQZZnCcaNxPLvPMmknc2lNafYt1h0xlTCZ1YupgwCXegCYTCrEcONTD2X+xPs9amKFIcRTpsHCojNb4=&lt;br /&gt;Param Name--&amp;gt;oauth_body_hash Value--&amp;gt;2jmj7l5rSw0yVb/vlWAYkK/YBwk=&lt;br /&gt;Param Name--&amp;gt;oauth_nonce Value--&amp;gt;1249149514626651000&lt;br /&gt;Param Name--&amp;gt;oauth_version Value--&amp;gt;1.0&lt;br /&gt;Param Name--&amp;gt;oauth_signature_method Value--&amp;gt;RSA-SHA1&lt;br /&gt;Param Name--&amp;gt;oauth_consumer_key Value--&amp;gt;gadgetConsumer&lt;br /&gt;Param Name--&amp;gt;opensocial_owner_id Value--&amp;gt;root&lt;br /&gt;Param Name--&amp;gt;opensocial_app_id Value--&amp;gt;http://localhost/opensocial/hello.xml&lt;br /&gt;Param Name--&amp;gt;opensocial_app_url Value--&amp;gt;http://localhost/opensocial/hello.xml&lt;br /&gt;Param Name--&amp;gt;oauth_timestamp Value--&amp;gt;1249149514&lt;br /&gt;VALIDATING SIGNATURE&lt;br /&gt;REQUEST STATUS::OK&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんてなふうに表示される。&lt;br /&gt;&lt;br /&gt;完璧。これで、&lt;br /&gt;RSA-SHA1での署名付きリクエスト、&lt;br /&gt;さらにはRSA-SHA1の署名VERIFYまでできた。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;というか、config/oauth.jsonとshindig.propertiesの両方に秘密鍵指定しないと&lt;br /&gt;動かないのは、なんか変。何か間違えたかも。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-9110609219136698948?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/9110609219136698948/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=9110609219136698948' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/9110609219136698948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/9110609219136698948'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/08/apache-shindigopensocial-117_02.html' title='[Apache Shindig][お勉強][OpenSocial] メモ118 gadgets.io.makeRequest &lt;s&gt;認証&lt;/s&gt;認可タイプSIGNEDをやってみる(RSA-SHA1で署名)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-8106251289129528076</id><published>2009-08-01T20:54:00.002+09:00</published><updated>2009-08-01T21:00:02.851+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><title type='text'>[vim] 開いているファイル一覧</title><content type='html'>&lt;pre name="prettyprint"&gt;&lt;br /&gt;:ls&lt;br /&gt;　&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;とかでどうでしょう？&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-8106251289129528076?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/8106251289129528076/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=8106251289129528076' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8106251289129528076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8106251289129528076'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/08/vim.html' title='[vim] 開いているファイル一覧'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1841780430303661151</id><published>2009-07-31T23:17:00.001+09:00</published><updated>2009-07-31T23:21:13.169+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ117 gadgets.io.makeRequest 認証タイプNONEでfeed取得</title><content type='html'>RSSやFEEDなんかも&lt;a href="http://code.google.com/intl/ja/apis/gadgets/docs/remote-content.html#Fetch_Feed"&gt;http://code.google.com/intl/ja/apis/gadgets/docs/remote-content.html#Fetch_Feed&lt;/a&gt;&lt;br /&gt;にあるとおり、gadgetsの機能で扱えるらしい。&lt;br /&gt;&lt;br /&gt;ということで、早速やってみた。&lt;br /&gt;GadgetXMLは上記リンクにあるとおりで、"http://atkonn.blogspot.com/feeds/posts/default&lt;br /&gt;を取得してみた。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;・・・すげー。&lt;br /&gt;できてるし。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1841780430303661151?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1841780430303661151/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1841780430303661151' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1841780430303661151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1841780430303661151'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-117.html' title='[Apache Shindig][お勉強][OpenSocial] メモ117 gadgets.io.makeRequest 認証タイプNONEでfeed取得'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-8718440792181548555</id><published>2009-07-31T22:44:00.003+09:00</published><updated>2009-07-31T22:49:26.930+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ116 gadgets.io.makeRequest 認証タイプNONEでtext取得</title><content type='html'>gadgets.io.makeRequestというメソッドを使用して、&lt;br /&gt;外部リソースへリクエストを投げるらしい。&lt;br /&gt;&lt;br /&gt;まずは、認証タイプはNONEで、textファイルを取得してみる。&lt;br /&gt;&lt;br /&gt;ガジェットは&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="makeRequest NONE"&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html" view="canvas,profile,view"&amp;gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;div id="content_div" style="height: 100px;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;      function getHtml() {&lt;br /&gt;        var params = {};&lt;br /&gt;        /* テキストタイプ */&lt;br /&gt;        params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT;&lt;br /&gt;        /* www.google.comからとってくる */&lt;br /&gt;        var url = "http://localhost/a.txt";&lt;br /&gt;        /* リクエスト */&lt;br /&gt;        gadgets.io.makeRequest(url, response, params);&lt;br /&gt;      };&lt;br /&gt;      /**&lt;br /&gt;       * コールバック&lt;br /&gt;       */&lt;br /&gt;      function response(obj) {&lt;br /&gt;        /* obj.textにリクエストの応答が入っている。 */&lt;br /&gt;        var html = '';&lt;br /&gt;        if (obj.rc != 200) {&lt;br /&gt;          html = 'ぼよよん';&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;          var str = obj.text;&lt;br /&gt;          /* 最初の400文字取得 */&lt;br /&gt;          html =  str.substr(0,400);&lt;br /&gt;        }&lt;br /&gt;        document.getElementById('content_div').innerHTML = html;&lt;br /&gt;      };&lt;br /&gt;      gadgets.util.registerOnLoadHandler(getHtml);&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt;  &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;な感じ。&lt;br /&gt;urlに指定するものは&lt;br /&gt;サーバから見てのURLっぽい。上記のようにlocalhostで指定して取得できた。&lt;br /&gt;ガジェットXMLのソースはGoogleのgadgets APIリファレンス。&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-8718440792181548555?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/8718440792181548555/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=8718440792181548555' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8718440792181548555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8718440792181548555'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-116.html' title='[Apache Shindig][お勉強][OpenSocial] メモ116 gadgets.io.makeRequest 認証タイプNONEでtext取得'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6688428341568645297</id><published>2009-07-31T21:43:00.002+09:00</published><updated>2009-07-31T21:47:50.470+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ115 外部との通信</title><content type='html'>外部との通信の認証には、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;gadgets.io.AuthorizationType.OAUTH (コンテナは OAuth プロトコルを使用する)&lt;br /&gt;gadgets.io.AuthorizationType.SIGNED (コンテナが要求に署名する)&lt;br /&gt;gadgets.io.AuthorizationType.NONE&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;の3種類があるらしい。&lt;br /&gt;&lt;br /&gt;NONEはデフォルト。&lt;br /&gt;SIGNEDは署名付きリクエストでリクエスト送信元を保証する。&lt;br /&gt;OAUTHはOAuthによる認証を行うらしい。&lt;br /&gt;&lt;br /&gt;まず、NONEからやってみようっと。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6688428341568645297?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6688428341568645297/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6688428341568645297' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6688428341568645297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6688428341568645297'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-115.html' title='[Apache Shindig][お勉強][OpenSocial] メモ115 外部との通信'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4780026188823514080</id><published>2009-07-31T19:48:00.003+09:00</published><updated>2009-07-31T21:29:50.216+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ114 content-rewriterを使ってみる</title><content type='html'>shindigのソースを読む限り、使えそうなcontent-rewriter機能を使ってみる。&lt;br /&gt;shindigのバージョンは1.1-SNAPSHOT。&lt;br /&gt;&lt;br /&gt;まず、デフォルトでの機能をオフにする。&lt;br /&gt;デフォルトでは全てのURLで有効になっている模様。&lt;br /&gt;この設定を変更するには、&lt;br /&gt;&lt;br /&gt;shindig.properties&lt;br /&gt;&lt;br /&gt;をいじる。&lt;br /&gt;デフォルトだと、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;shindig.content-rewrite.include-urls=.*&lt;br /&gt;shindig.content-rewrite.exclude-urls=&lt;br /&gt;shindig.content-rewrite.include-tags=link,script,embed,img,style&lt;br /&gt;shindig.content-rewrite.expires=86400&lt;br /&gt;shindig.content-rewrite.proxy-url=/gadgets/proxy?url=&lt;br /&gt;shindig.content-rewrite.concat-url=/gadgets/concat?&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;となっているので、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;shindig.content-rewrite.exclude-urls=&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;shindig.content-rewrite.exclude-urls=.*&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とする。&lt;br /&gt;&lt;br /&gt;exclude-urlsとinclude-urlsはexclude-urlsが優先。&lt;br /&gt;で、Patternクラス用正規表現で指定できる。&lt;br /&gt;&lt;br /&gt;キャッシュを無効にするだけであれば、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;shindig.content-rewrite.expires=86400&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;shindig.content-rewrite.expires=0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とすればよさそう、だけど試していない。&lt;br /&gt;注意点としては、GadgetのXML自体のキャッシュの無効化、とは関係ない点。&lt;br /&gt;content-rewriterは、あくまでGadgetXMLの中の要素にのみ有効となっている模様。&lt;br /&gt;もし、GadgetのXMLファイルのキャッシュを無効化したいのであれば、&lt;br /&gt;nocacheパラメータをつけるか、もしくは&lt;br /&gt;shindig.propertiesのshindig.cache.xml.refreshIntervalを0なりに設定するか、&lt;br /&gt;shindig.propertiesのshindig.cache.lru.gadgetSpecs.capacityの行を削除するか、&lt;br /&gt;で、無効化できる。&lt;br /&gt;&lt;br /&gt;ついでに、gadgetのXMLファイルのキャッシュも無効化。&lt;br /&gt;shindig.propertiesの&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;shindig.cache.xml.refreshInterval=300000&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;shindig.cache.xml.refreshInterval=0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;に修正。&lt;br /&gt;&lt;br /&gt;修正したら、コンパイルして起動。&lt;br /&gt;で、アクセスしてみると、修正の度に新しいGadgetXMLが読み込まれるし、&lt;br /&gt;imgタグなんかのURLもrewriteされていない。&lt;br /&gt;&lt;br /&gt;proxyUrlとconcatのURLは、container.jsに記述があれば、そちらが優先。&lt;br /&gt;container.jsに記述が無ければshindig.propertiesが優先される。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そしたら、今度は、&lt;br /&gt;content-rewriterフィーチャーを使ってみる。&lt;br /&gt;で、使ってみたXMLは以下。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="content-rewrite"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="opensocial-0.8" /&amp;gt;&lt;br /&gt;    &amp;lt;Optional feature="content-rewrite"&amp;gt;&lt;br /&gt;      &amp;lt;Param name="expires"&amp;gt;86400&amp;lt;/Param&amp;gt;&lt;br /&gt;      &amp;lt;Param name="include-urls"&amp;gt;.*&amp;lt;/Param&amp;gt;&lt;br /&gt;      &amp;lt;Param name="exclude-urls"&amp;gt;&amp;lt;/Param&amp;gt;&lt;br /&gt;    &amp;lt;/Optional&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html" view="canvas,profile,view"&amp;gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;div id="content_div" style="height: 100px;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;どうかな,&lt;br /&gt;どうかな,&lt;br /&gt;どうかな&lt;br /&gt;    &amp;lt;img src="http://www.google.co.jp/intl/ja_jp/images/logo.gif" alt="googleだよ" /&amp;gt;&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt;  &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;imgタグはちゃんとproxy経由になった。&lt;br /&gt;キャッシュも効いている模様。&lt;br /&gt;&lt;br /&gt;さて、&lt;a href="http://wiki.opensocial.org/index.php?title=Content_Rewriter_Feature"&gt;http://wiki.opensocial.org/index.php?title=Content_Rewriter_Feature&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;を見ると、&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;      &amp;lt;Param name="include-urls"&amp;gt;.*&amp;lt;/Param&amp;gt;&lt;br /&gt;      &amp;lt;Param name="exclude-urls"&amp;gt;&amp;lt;/Param&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;のところは、&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;      &amp;lt;Param name="include-url"&amp;gt;.*&amp;lt;/Param&amp;gt;&lt;br /&gt;      &amp;lt;Param name="exclude-url"&amp;gt;&amp;lt;/Param&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と's'なしで指定すべきっぽいが、shindig-1.1-SNAPSHOTでは&lt;br /&gt;'s'ありで指定しなきゃ動かないっぽい。&lt;br /&gt;&lt;br /&gt;あとexclude-urlsは空で定義してあるけど、&lt;br /&gt;shindig.propertiesでexclude-urlsを指定してある場合には、&lt;br /&gt;Optional featuresでは空で指定してあげないと、&lt;br /&gt;shindig.propertiesの方のexclude-urlsが優先される。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;おしまい。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4780026188823514080?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4780026188823514080/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4780026188823514080' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4780026188823514080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4780026188823514080'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-114-content.html' title='[Apache Shindig][お勉強][OpenSocial] メモ114 content-rewriterを使ってみる'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-4898208520498933056</id><published>2009-07-31T18:18:00.003+09:00</published><updated>2009-07-31T18:41:08.872+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ113 setprefsフィーチャー</title><content type='html'>ガジェットのユーザ毎の設定(UserPref？)をガジェットから扱える機能を追加するもの。&lt;br /&gt;&lt;br /&gt;使えるメソッドは、&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;gadgets.Prefs.set(key, value)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;gadgets.Prefs.setArray(key,value)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;のみ。&lt;br /&gt;setArrayの方は、valueに文字列か数値の配列を指定する。&lt;br /&gt;指定された配列は'|'によって連結され保存される。&lt;br /&gt;&lt;br /&gt;setprefsフィーチャに関係なくgadgets.Prefsの読み込み系は使える。&lt;br /&gt;&lt;br /&gt;で、やってみる。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="setprefsフィーチャー"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="opensocial-0.8" /&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="setprefs" /&amp;gt;&lt;br /&gt;    &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;UserPref name="counter" default_value="0" datatype="hidden"/&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html" view="canvas,profile,view"&amp;gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;div id="content_div" style="height: 100px;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;    var prefs = null;&lt;br /&gt;    var html = "";&lt;br /&gt;    var div = '';&lt;br /&gt;    function incrementCounter() {&lt;br /&gt;      var count = prefs.getInt("counter");&lt;br /&gt;      div.innerHTML = "The count is " + count + ".";&lt;br /&gt;      prefs.set("counter", count + 1);&lt;br /&gt;    }&lt;br /&gt;    function resetCounter(){&lt;br /&gt;      prefs.set("counter", 0);&lt;br /&gt;      div.innerHTML = "Count reset to " + prefs.getInt("counter") + ".";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function init() {&lt;br /&gt;      prefs = new gadgets.Prefs();&lt;br /&gt;      html = "";&lt;br /&gt;      div = document.getElementById('content_div');&lt;br /&gt;      var count = prefs.getInt("counter");&lt;br /&gt;      div.innerHTML = "The count is " + count + ".";&lt;br /&gt;    }&lt;br /&gt;    gadgets.util.registerOnLoadHandler(init);&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;input type=button value="Count" name="count" onClick="incrementCounter()"&amp;gt;&lt;br /&gt;    &amp;lt;input type=button value="Reset" name="reset" onClick="resetCounter()"&amp;gt;&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt;  &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;な感じ。&lt;br /&gt;Googleのgadgets APIリファレンスを参考、というかほぼそのまま使用した。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これは、もう何度もやっているので、動作する。&lt;br /&gt;cookieに保存する場合はサンプルがあるので、コンテナ側で設定する必要あり。&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-4898208520498933056?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/4898208520498933056/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=4898208520498933056' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4898208520498933056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/4898208520498933056'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-113-setprefs.html' title='[Apache Shindig][お勉強][OpenSocial] メモ113 setprefsフィーチャー'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-2066778432886776388</id><published>2009-07-31T18:05:00.002+09:00</published><updated>2009-07-31T18:17:57.293+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ112 settitleフィーチャー</title><content type='html'>ガジェットのタイトルをプログラムから設定する場合に指定するもの。&lt;br /&gt;&lt;br /&gt;使えるメソッドは、&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;gadgets.window.setTitle(title)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;のみ。&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;_IG_SetTitle&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;という名前でもコールできる。&lt;br /&gt;&lt;br /&gt;で、やってみる。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="settitleフィーチャー"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="settitle"/&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html" view="canvas,profile,home"&amp;gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    function init() {&lt;br /&gt;      gadgets.window.setTitle('ああああ');&lt;br /&gt;    }&lt;br /&gt;    function changeTitle(form) {&lt;br /&gt;      _IG_SetTitle(form.inputbox.value);&lt;br /&gt;    }&lt;br /&gt;    gadgets.util.registerOnLoadHandler(init);&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;  &amp;lt;FORM NAME="myform" ACTION="" METHOD="GET"&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;  &amp;lt;INPUT TYPE="text" NAME="inputbox" VALUE=""&amp;gt;&lt;br /&gt;  &amp;lt;INPUT TYPE="button" NAME="button" Value="Add" onClick="changeTitle(this.form)"&amp;gt;&lt;br /&gt;  &amp;lt;INPUT TYPE="button" NAME="button2" Value="Clear" onClick="clearList(this.form)"&amp;gt;&lt;br /&gt;  &amp;lt;/FORM&amp;gt;&lt;br /&gt;  &amp;lt;div id="content_div"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt;  &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;初期表示時にgadgets.window.setTitleを使ってタイトルを設定。&lt;br /&gt;フォームから入力されると、_IG_SetTitleを使ってタイトルを設定。&lt;br /&gt;&lt;br /&gt;ちゃんと動いた。&lt;br /&gt;このメソッドも、結局は、gadgets.rpc.call(null,'set_title', null, title)な感じで&lt;br /&gt;rpc経由。&lt;br /&gt;&lt;br /&gt;rpc経由でコールされる側のメソッドでは、&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;gadgets.IfrGadgetService.prototype.setTitle = function(title) {&lt;br /&gt;  var element = document.getElementById(this.f + '_title');&lt;br /&gt;  if (element) {&lt;br /&gt;    element.innerHTML = title.replace(/&amp;amp;/g, '&amp;amp;amp;').replace(/&amp;lt;/g, '&amp;amp;lt;');&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;となっているので、タイトルを出力したいところのidは&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;ガジェットを表示するiframeの名前+'_title'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とする必要がある。もちろんShindigデフォルトの場合。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-2066778432886776388?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/2066778432886776388/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=2066778432886776388' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2066778432886776388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/2066778432886776388'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-112-settitle.html' title='[Apache Shindig][お勉強][OpenSocial] メモ112 settitleフィーチャー'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-242766178663214221</id><published>2009-07-31T16:26:00.002+09:00</published><updated>2009-07-31T16:44:03.737+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ111 dynamic-heightフィーチャー</title><content type='html'>dynamic-heightフィーチャーを使うことで、ガジェットの高さを動的に変更できる。&lt;br /&gt;&lt;br /&gt;使えるメソッドは、&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;gadgets.window.adjustHeight(opt_height)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;gadgets.window.getViewportDimensions()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;の2つ。&lt;br /&gt;&lt;br /&gt;gadgets.window.adjustHeight(opt_height)は、&lt;br /&gt;&lt;pre nmae="code" class="js"&gt;&lt;br /&gt;_IG_AdjustIFrameHeight&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;という名前でもコールできる。&lt;br /&gt;&lt;br /&gt;ということで早速。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="Dynamic Height"&lt;br /&gt;    height="100"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="dynamic-height"/&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html"&amp;gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    // This example lets users add items to a grocery list and then clear the list.&lt;br /&gt;    // When items are added or cleared, the gadget resizes itself.&lt;br /&gt;    var mylist = "";&lt;br /&gt;    var flag = 0;&lt;br /&gt;&lt;br /&gt;    // Function that is invoked whenever user clicks the Add button to add an&lt;br /&gt;    // item to the list.&lt;br /&gt;    function addToList (form) {&lt;br /&gt;        var input = _trim(form.inputbox.value);&lt;br /&gt;        if (input == "") {&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Make alternating lines green/white, depending on value of flag variable.&lt;br /&gt;        var d = gadgets.window.getViewportDimensions();&lt;br /&gt;        if(flag == 0){&lt;br /&gt;            mylist += "&amp;lt;div style='padding-left: 5px;background-color: #E6FFE6; font-family:Arial, Helvetica;'&amp;gt;" +input + " width:" + d.width + " height:" + d.height + "&amp;lt;/div&amp;gt;";&lt;br /&gt;            flag = 1;&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;            mylist += "&amp;lt;div style='padding-left: 5px;font-family:Arial, Helvetica;'&amp;gt;" +input + " width:" + d.width + " height:" + d.height + "&amp;lt;/div&amp;gt;";&lt;br /&gt;            flag = 0;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Call setContent to output HTML to div and resize gadget&lt;br /&gt;        setContent(mylist);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Clear the list&lt;br /&gt;    function clearList(form) {&lt;br /&gt;        // Call setContent to remove all items from the list and resize the gadget&lt;br /&gt;        setContent("");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Outputs content to the div and resizes the gadget&lt;br /&gt;    function setContent(html) {&lt;br /&gt;        document.getElementById('content_div').innerHTML = html;&lt;br /&gt;&lt;br /&gt;       // Tells gadget to resize itself&lt;br /&gt;       gadgets.window.adjustHeight();&lt;br /&gt;    }&lt;br /&gt;    gadgets.util.registerOnLoadHandler(_IG_AdjustIFrameHeight);&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;  &amp;lt;FORM NAME="myform" ACTION="" METHOD="GET"&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;  &amp;lt;INPUT TYPE="text" NAME="inputbox" VALUE=""&amp;gt;&lt;br /&gt;  &amp;lt;INPUT TYPE="button" NAME="button" Value="Add" onClick="addToList(this.form)"&amp;gt;&lt;br /&gt;  &amp;lt;INPUT TYPE="button" NAME="button2" Value="Clear" onClick="clearList(this.form)"&amp;gt;&lt;br /&gt;  &amp;lt;/FORM&amp;gt;&lt;br /&gt;  &amp;lt;div id="content_div"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt;  &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;サンプルはGoogleのgadgets APIリファレンスから。&lt;br /&gt;少々修正。&lt;br /&gt;&lt;br /&gt;実行すると、自動でガジェットの高さが低くなり、&lt;br /&gt;何か入力していくと、自動でガジェットの高さが調整される。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-242766178663214221?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/242766178663214221/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=242766178663214221' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/242766178663214221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/242766178663214221'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-111-dynamic.html' title='[Apache Shindig][お勉強][OpenSocial] メモ111 dynamic-heightフィーチャー'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-162301895673313878</id><published>2009-07-31T12:07:00.003+09:00</published><updated>2009-07-31T15:39:30.704+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ110 viewsフィーチャーって何よ？</title><content type='html'>ガジェットにviewを切り替える機能を追加できるらしい。&lt;br /&gt;&lt;br /&gt;ふーん。&lt;br /&gt;&lt;br /&gt;ということで、やってみる。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="viewsフィーチャー" &amp;gt;&lt;br /&gt;    &amp;lt;Require feature="views" /&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;&amp;lt;Content type="html"&amp;gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;  サポートされているビュー:&amp;lt;div id="supported_view"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;  現在のビュー:&amp;lt;div id="current_view"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;   var views = gadgets.views.getSupportedViews();&lt;br /&gt;   var ul = document.createElement('ul');&lt;br /&gt;   for (var xx in views) {&lt;br /&gt;     var li = document.createElement('li');&lt;br /&gt;     var a = document.createElement('a');&lt;br /&gt;     a.href = 'javascript:void(0);';&lt;br /&gt;     a.innerHTML = '名前:' + xx + '&amp;lt;br /&amp;gt;'&lt;br /&gt;                 + 'タイプ:' + views[xx].getName() + '&amp;lt;br /&amp;gt;&amp;lt;hr /&amp;gt;';&lt;br /&gt;     function setView(a, view) {&lt;br /&gt;       a.onclick = function(){gadgets.views.requestNavigateTo(view);};&lt;br /&gt;     }&lt;br /&gt;     setView(a, views[xx]);&lt;br /&gt;     li.appendChild(a);&lt;br /&gt;     ul.appendChild(li);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   document.getElementById('supported_view').appendChild(ul);&lt;br /&gt;&lt;br /&gt;   var current = gadgets.views.getCurrentView();&lt;br /&gt;   document.getElementById('current_view').innerHTML = current.getName();&lt;br /&gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;  &amp;lt;br /&amp;gt;&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;な感じ。&lt;br /&gt;&lt;br /&gt;クリックすると、VIEWが切り替わる。&lt;br /&gt;ShindigデフォルトのviewのurlTemplateとか使わずに、&lt;br /&gt;jQuery使ってガジェットのフレームの大きさと位置を調整した。&lt;br /&gt;&lt;br /&gt;とてもいい感じ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-162301895673313878?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/162301895673313878/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=162301895673313878' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/162301895673313878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/162301895673313878'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-110-views.html' title='[Apache Shindig][お勉強][OpenSocial] メモ110 viewsフィーチャーって何よ？'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7158485483230580953</id><published>2009-07-31T12:05:00.001+09:00</published><updated>2009-07-31T12:06:48.106+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ109 flashフィーチャーって何よ？</title><content type='html'>flashのswfを実行できるflashフィーチャーというものがある。&lt;br /&gt;&lt;br /&gt;面倒なので、Googleに張ってあったgadgetのサンプルをそのまま実行してみた。&lt;br /&gt;&lt;br /&gt;あらら。&lt;br /&gt;Shindigデフォルトでちゃんと動くっぽい。&lt;br /&gt;&lt;br /&gt;すばらしいねー。&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7158485483230580953?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7158485483230580953/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7158485483230580953' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7158485483230580953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7158485483230580953'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-109-flash.html' title='[Apache Shindig][お勉強][OpenSocial] メモ109 flashフィーチャーって何よ？'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-6989540836105892801</id><published>2009-07-31T11:43:00.002+09:00</published><updated>2009-07-31T12:01:36.562+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ108 minimessageフィーチャーって何よ？</title><content type='html'>gadgets APIのひとつにminimessageというフィーチャーがあるけど、&lt;br /&gt;minimessageフィーチャーってなんだろね。&lt;br /&gt;&lt;br /&gt;コメントによると、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;メッセージをガジェットに表示する際に使用できるもの&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;らしい。&lt;br /&gt;&lt;br /&gt;なんだか良く分からないので、使ってみる。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="minimessageフィーチャー"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="minimessage" /&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;UserPref name="selectedTab" value="0" /&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html" view="home,profile,canvas"&amp;gt;&lt;br /&gt;    &amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;      var msgObj = null;&lt;br /&gt;      function getInstance() {&lt;br /&gt;        if (msgObj) {&lt;br /&gt;          return msgObj;&lt;br /&gt;        }&lt;br /&gt;        return new gadgets.MiniMessage();&lt;br /&gt;      }&lt;br /&gt;      function init() {&lt;br /&gt;        var msg = getInstance();&lt;br /&gt;        msg.createDismissibleMessage("ぼよよーん");&lt;br /&gt;      }&lt;br /&gt;      function onclick() {&lt;br /&gt;        var msg = getInstance();&lt;br /&gt;        msg.createDismissibleMessage("ぶよよーん");&lt;br /&gt;      }&lt;br /&gt;      gadgets.util.registerOnLoadHandler(init);&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;input type="button" value="ボタンだよ" onclick="onclick();" /&amp;gt;&lt;br /&gt;    ]]&amp;gt;&lt;br /&gt;  &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とりあえず、GadgetXMLはこんな感じ。&lt;br /&gt;&lt;br /&gt;で、表示させてみると。。&lt;br /&gt;&lt;br /&gt;へぇ。。&lt;br /&gt;gadgetの中に[x]ボタンが付いたメッセージが表示される。&lt;br /&gt;&lt;br /&gt;なるほどねー。&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-6989540836105892801?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/6989540836105892801/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=6989540836105892801' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6989540836105892801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/6989540836105892801'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-108.html' title='[Apache Shindig][お勉強][OpenSocial] メモ108 minimessageフィーチャーって何よ？'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7053733098363315936</id><published>2009-07-31T09:29:00.004+09:00</published><updated>2009-07-31T11:40:22.098+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ107 ShindigのtabsフィーチャーでUserPref name="selectedTab"</title><content type='html'>Shindigのgadgets.tabsでは、選択したタブをUserPrefsに自動保存する、&lt;br /&gt;という機能が効かないみたい。&lt;br /&gt;（コードにそのような記述はない。）&lt;br /&gt;&lt;br /&gt;Google gadgets APIでは、&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="tabsフィーチャー"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="setprefs" /&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="tabs" /&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;UserPref name="selectedTab" value="0" /&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html" view="home,profile,canvas"&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;などと書いておくと、再表示したときに、前回表示したときに選択したタブが選択される&lt;br /&gt;らしい。&lt;br /&gt;&lt;br /&gt;これをShindigでもやってみた。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;--- tabs.js.old 2009-07-30 23:48:32.000000000 +0900&lt;br /&gt;+++ tabs.js     2009-07-31 09:28:01.000000000 +0900&lt;br /&gt;@@ -171,6 +171,9 @@&lt;br /&gt;       'text-decoration: none;',&lt;br /&gt;     '}'&lt;br /&gt;   ].join(''));&lt;br /&gt;+  if (gadgets.util.hasFeature('setprefs')) {&lt;br /&gt;+    this.prefs = new gadgets.Prefs();&lt;br /&gt;+  }&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;@@ -230,6 +233,12 @@&lt;br /&gt;   if (tabName == this.defaultTabName_ || (!this.defaultTabName_ &amp;&amp; tabIndex === 0)) {&lt;br /&gt;     this.selectTab_(tab);&lt;br /&gt;   }&lt;br /&gt;+  if (this.prefs) {&lt;br /&gt;+    var selectedTab = this.prefs.getString("selectedTab");&lt;br /&gt;+    if (selectedTab === tabName) {&lt;br /&gt;+      this.selectTab_(tab);&lt;br /&gt;+    }&lt;br /&gt;+  }&lt;br /&gt;&lt;br /&gt;   this.tabsAdded_++;&lt;br /&gt;   this.displayTabs(true);&lt;br /&gt;@@ -602,7 +611,13 @@&lt;br /&gt;  * @return {Function} Callback function to select the tab.&lt;br /&gt;  */&lt;br /&gt; gadgets.TabSet.prototype.setSelectedTabGenerator_ = function(tab) {&lt;br /&gt;-  return function() { tab.handle_.selectTab_(tab); };&lt;br /&gt;+  var self = this;&lt;br /&gt;+  return function() {&lt;br /&gt;+    if (self.prefs) {&lt;br /&gt;+      self.prefs.set("selectedTab", tab.getName());&lt;br /&gt;+    }&lt;br /&gt;+    tab.handle_.selectTab_(tab);&lt;br /&gt;+  };&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;と、features/tabs/tabs.jsを修正する。&lt;br /&gt;すると、あら不思議。&lt;br /&gt;&lt;br /&gt;前回選択したタブが選択された状態で表示できるじゃありませんか。&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7053733098363315936?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7053733098363315936/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7053733098363315936' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7053733098363315936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7053733098363315936'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-170.html' title='[Apache Shindig][お勉強][OpenSocial] メモ107 ShindigのtabsフィーチャーでUserPref name=&quot;selectedTab&quot;'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7450771447166972994</id><published>2009-07-31T02:36:00.002+09:00</published><updated>2009-07-31T02:38:45.461+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] gadgets APIとOpenSocialのgadgets API</title><content type='html'>どうも、Googleのgadgets APIとOpenSocialのgadgets APIは&lt;br /&gt;とても似ているけど、別ものらしい。。&lt;br /&gt;&lt;br /&gt;Google gadgets APIの内容とShindigのgadgets APIが微妙に違う。&lt;br /&gt;&lt;br /&gt;おかしいなぁと思っていたら、OpenSocialのgadgets APIはgadgets APIの「拡張」と&lt;br /&gt;書いてあった。&lt;br /&gt;要は別もの。&lt;br /&gt;&lt;br /&gt;なるほどねー。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7450771447166972994?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7450771447166972994/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7450771447166972994' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7450771447166972994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7450771447166972994'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-gadgets.html' title='[Apache Shindig][お勉強][OpenSocial] gadgets APIとOpenSocialのgadgets API'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-184176940732701916</id><published>2009-07-30T02:25:00.003+09:00</published><updated>2009-07-30T02:39:16.558+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ105 tabs(2) 削除</title><content type='html'>&lt;a href="http://code.google.com/intl/ja/apis/opensocial/docs/0.8/reference/gadgets/#gadgets.Tab"&gt;リファレンス&lt;/a&gt;見ればわかるんだけど、一応出力。&lt;br /&gt;&lt;br /&gt;tabの削除をしてみた。&lt;br /&gt;使用するのはこれ。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;gadgets.TabSet.prototype.removeTab = function(tabIndex) {&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;で、以下ガジェットXML。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="tabsフィーチャー"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="opensocial-0.8" /&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="tabs" /&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="setprefs" /&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="jquery" /&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html" view="home,profile,canvas"&amp;gt;&lt;br /&gt;    &amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;      var tabdayon = function() {&lt;br /&gt;        this.tabs = null;&lt;br /&gt;        this.tabDivId = {};&lt;br /&gt;      };&lt;br /&gt;      tabdayon.prototype.init = function() {&lt;br /&gt;        this.tabs = new gadgets.TabSet(__MODULE_ID__, "タブセットだよーん");&lt;br /&gt;        var oneId = this.tabs.addTab("One");&lt;br /&gt;        this.tabDivId = {};&lt;br /&gt;        this.tabDivId[oneId] = oneId;&lt;br /&gt;        var twoId = this.tabs.addTab("Two");&lt;br /&gt;        this.tabDivId[twoId] = twoId;&lt;br /&gt;        document.getElementById(oneId).innerHTML = "最初のタブのコンテンツだよ";&lt;br /&gt;        document.getElementById(twoId).innerHTML = "2番目のタブのコンテンツだよ";&lt;br /&gt;      };&lt;br /&gt;      /**&lt;br /&gt;       * タブの追加&lt;br /&gt;       */&lt;br /&gt;      tabdayon.prototype.addTab = function(ev) {&lt;br /&gt;        var tabName = $('.tabName').val();&lt;br /&gt;        $('.tabName').val('');&lt;br /&gt;        var divId = this.tabs.addTab(tabName);&lt;br /&gt;        this.tabDivId[divId] = divId;&lt;br /&gt;        document.getElementById(divId).innerHTML = tabName + 'を追加したよ';&lt;br /&gt;      };&lt;br /&gt;      tabdayon.prototype.removeTab = function() {&lt;br /&gt;        var tab = this.tabs.getSelectedTab();&lt;br /&gt;        var cont = tab.getContentContainer();&lt;br /&gt;        this.tabs.removeTab(tab.getIndex());&lt;br /&gt;        this.tabDivId[cont.id] = null;&lt;br /&gt;      };&lt;br /&gt;      var tabInstance = null;&lt;br /&gt;      function init() {&lt;br /&gt;        tabInstance = new tabdayon();&lt;br /&gt;        tabInstance.init();&lt;br /&gt;        $('.addTab').click(function(ev) {tabInstance.addTab(ev);});&lt;br /&gt;        $('.removeTab').click(function(ev) {tabInstance.removeTab();});&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      gadgets.util.registerOnLoadHandler(init);&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;form&amp;gt;&lt;br /&gt;      &amp;lt;input type="text" class="tabName" value=""&amp;gt;&lt;br /&gt;    &amp;lt;/form&amp;gt;&lt;br /&gt;    &amp;lt;a href="#" class='addTab'&amp;gt;タブ追加だよ&amp;lt;/a&amp;gt;&lt;br /&gt;    &amp;lt;a href="#" class='removeTab'&amp;gt;タブ削除だよ&amp;lt;/a&amp;gt;&lt;br /&gt;    &amp;lt;div id="result"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    ]]&amp;gt;&lt;br /&gt;  &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;な感じ。&lt;br /&gt;&lt;br /&gt;これでタブも削除できるようになった。&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-184176940732701916?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/184176940732701916/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=184176940732701916' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/184176940732701916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/184176940732701916'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-105-tabs2.html' title='[Apache Shindig][お勉強][OpenSocial] メモ105 tabs(2) 削除'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1235314390368855713</id><published>2009-07-30T01:24:00.005+09:00</published><updated>2009-07-30T02:23:26.684+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ104 tabs(1)</title><content type='html'>フィーチャーのtabsを見ていく。&lt;br /&gt;&lt;br /&gt;ソースは、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;features/tabs/tabs.js&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;。&lt;br /&gt;&lt;br /&gt;で、これは何かというと、、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;ガジェットにタブ付きのユーザー インターフェースを追加できます。&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とのこと。&lt;br /&gt;&lt;br /&gt;ほほう。&lt;br /&gt;通常は、setprefsフィーチャーと一緒に使うのだそうだ。&lt;br /&gt;&lt;br /&gt;さっそくやってみる。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="tabsフィーチャー"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="opensocial-0.8" /&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="tabs" /&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="setprefs" /&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="jquery" /&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html" view="home,profile,canvas"&amp;gt;&lt;br /&gt;    &amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;      var tabdayon = function() {&lt;br /&gt;        this.tabs = null;&lt;br /&gt;        this.tabDivId = {};&lt;br /&gt;      };&lt;br /&gt;      tabdayon.prototype.init = function() {&lt;br /&gt;        this.tabs = new gadgets.TabSet(__MODULE_ID__, "タブセットだよーん");&lt;br /&gt;        var oneId = this.tabs.addTab("One");&lt;br /&gt;        this.tabDivId = {};&lt;br /&gt;        this.tabDivId[oneId] = oneId;&lt;br /&gt;        var twoId = this.tabs.addTab("Two");&lt;br /&gt;        this.tabDivId[twoId] = twoId;&lt;br /&gt;        document.getElementById(oneId).innerHTML = "最初のタブのコンテンツだよ";&lt;br /&gt;        document.getElementById(twoId).innerHTML = "2番目のタブのコンテンツだよ";&lt;br /&gt;      };&lt;br /&gt;      /**&lt;br /&gt;       * タブの追加&lt;br /&gt;       */&lt;br /&gt;      tabdayon.prototype.addTab = function(ev) {&lt;br /&gt;        var tabName = $('.tabName').val();&lt;br /&gt;        $('.tabName').val('');&lt;br /&gt;        var divId = this.tabs.addTab(tabName);&lt;br /&gt;        this.tabDivId[divId] = divId;&lt;br /&gt;        document.getElementById(divId).innerHTML = tabName + 'を追加したよ';&lt;br /&gt;      };&lt;br /&gt;      var tabInstance = null;&lt;br /&gt;      function init() {&lt;br /&gt;        tabInstance = new tabdayon();&lt;br /&gt;        tabInstance.init();&lt;br /&gt;        $('.addTab').click(function(ev) {tabInstance.addTab(ev);});&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      gadgets.util.registerOnLoadHandler(init);&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;form&amp;gt;&lt;br /&gt;      &amp;lt;input type="text" class="tabName" value=""&amp;gt;&lt;br /&gt;    &amp;lt;/form&amp;gt;&lt;br /&gt;    &amp;lt;a href="#" class='addTab'&amp;gt;タブ追加だよ&amp;lt;/a&amp;gt;&lt;br /&gt;    &amp;lt;div id="result"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    ]]&amp;gt;&lt;br /&gt;  &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ってな感じ。&lt;br /&gt;&lt;br /&gt;最初に表示させたときは感動した。。&lt;br /&gt;&lt;br /&gt;さらにいろいろできるみたい。&lt;br /&gt;詳細は、&lt;a href="http://code.google.com/intl/ja/apis/gadgets/docs/ui.html#Tabs"&gt;http://code.google.com/intl/ja/apis/gadgets/docs/ui.html#Tabs&lt;/a&gt;&lt;br /&gt;を見ればよくわかると。&lt;br /&gt;&lt;br /&gt;ちなみに&amp;lt;Require feature="jquery" /&amp;gt;はgooホームでは使えるようだけど、&lt;br /&gt;shindigをインストールしただけでは使えない。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1235314390368855713?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1235314390368855713/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1235314390368855713' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1235314390368855713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1235314390368855713'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-104-tabs1.html' title='[Apache Shindig][お勉強][OpenSocial] メモ104 tabs(1)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-7401284124184903594</id><published>2009-07-30T01:20:00.002+09:00</published><updated>2009-07-30T01:22:08.232+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ103 サーバ側ひととおり触った</title><content type='html'>たぶんこれでサーバ側ひととおり触った、ような気がする。&lt;br /&gt;&lt;br /&gt;次はgadgets APIを見ていく。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;とにかくJavaScriptにはまった。。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-7401284124184903594?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/7401284124184903594/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=7401284124184903594' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7401284124184903594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/7401284124184903594'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-103.html' title='[Apache Shindig][お勉強][OpenSocial] メモ103 サーバ側ひととおり触った'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-3902304412412378968</id><published>2009-07-29T23:38:00.003+09:00</published><updated>2009-07-29T23:56:57.068+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ102 opensocial.requestShareAppのサーバ側実装をしてみる(1)</title><content type='html'>opensocial.requestShareAppをサーバ側まで含めて動かしてみる。&lt;br /&gt;&lt;br /&gt;方針は、&lt;br /&gt;1) requestShareAppがコールされると、ダイアログを表示する。&lt;br /&gt;2) ダイアログには友達一覧が表示され、requestShareApp先を選択できる。&lt;br /&gt;3) ダイアログで「送信」ボタンを押下すると、messages.modifyがサーバ側へ発行される。&lt;br /&gt;4) サーバ側はmessageサービスのmodifyメソッドにて処理する。&lt;br /&gt;5) DBに保存。&lt;br /&gt;といった感じ。&lt;br /&gt;&lt;br /&gt;requestSendMessageと分けるために、msgCollIdにrequestShareAppから来たデータで&lt;br /&gt;あることが分かるような値をセットする。&lt;br /&gt;&lt;br /&gt;まずは&lt;br /&gt;features/opensocial-jsonrpc/jsonrpccontainer.jsで、ガジェットと同じフレームで&lt;br /&gt;実行されるrequestShareAppを定義。（前やったけどやりなおし。）&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt; JsonRpcContainer.prototype.requestShareApp = function(recipientIds, reason,&lt;br /&gt;      opt_callback, opt_params) {&lt;br /&gt;    var callbackId = "cId_" + Math.random();&lt;br /&gt;&lt;br /&gt;    var self = this;&lt;br /&gt;    var callback = function(success, recip, title, body) {&lt;br /&gt;      var req = opensocial.newDataRequest();&lt;br /&gt;      var viewer = new opensocial.IdSpec({'userId' : 'VIEWER'});&lt;br /&gt;      var rpc = { method : "messages.modify" };&lt;br /&gt;      rpc.params = self.translateIdSpec(viewer);&lt;br /&gt;      rpc.params.appId = "@app";&lt;br /&gt;&lt;br /&gt;      FieldTranslations.translateNetworkDistance(viewer, rpc.params);&lt;br /&gt;&lt;br /&gt;      rpc.params.msgCollId = 'shareApp';&lt;br /&gt;      rpc.params.entity = {};&lt;br /&gt;      rpc.params.entity["title"] = title;&lt;br /&gt;      rpc.params.entity["body"]  = body;&lt;br /&gt;      rpc.params.entity["recipients"] = recip&lt;br /&gt;&lt;br /&gt;      var shareAppRequest = new JsonRpcRequestItem(rpc);&lt;br /&gt;&lt;br /&gt;      req.add(shareAppRequest, 'key');&lt;br /&gt;      req.send(function(response) {&lt;br /&gt;         opt_callback(response.get('key'));&lt;br /&gt;      });&lt;br /&gt;    };&lt;br /&gt;    callbackIdStore[callbackId] = callback;&lt;br /&gt;&lt;br /&gt;    var body = gadgets.util.unescapeString(reason.getField(&lt;br /&gt;        opensocial.Message.Field.BODY));&lt;br /&gt;&lt;br /&gt;    if (!body || body.length === 0) {&lt;br /&gt;      var bodyMsgKey = gadgets.util.unescapeString(reason.getField(&lt;br /&gt;        opensocial.Message.Field.BODY_ID));&lt;br /&gt;      body = gadgets.Prefs.getMsg(bodyMsgKey);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /* 修正ここから */&lt;br /&gt;    /* 友達一覧を取得する */&lt;br /&gt;    var friendsArray = [];&lt;br /&gt;    var handleGetFriends = function(data) {&lt;br /&gt;      var friends = data.get("get_friends");&lt;br /&gt;      if (friends.hadError()) {&lt;br /&gt;        return;&lt;br /&gt;      }&lt;br /&gt;      var data = friends.getData();&lt;br /&gt;      data.each(function(friend) {&lt;br /&gt;        var tmp = {};&lt;br /&gt;        tmp.thumbnailUrl = friend.getField(opensocial.Person.Field.THUMBNAIL_URL);&lt;br /&gt;        tmp.nickname     = friend.getField(opensocial.Person.Field.NICKNAME     );&lt;br /&gt;        tmp.id           = friend.getField(opensocial.Person.Field.ID           );&lt;br /&gt;        friendsArray.push(tmp);&lt;br /&gt;      });&lt;br /&gt;      gadgets.rpc.call('..', 'shindig.requestShareApp',&lt;br /&gt;          null,&lt;br /&gt;          callbackId,&lt;br /&gt;          friendsArray,&lt;br /&gt;          body);&lt;br /&gt;    };&lt;br /&gt;    var getfriends = function() {&lt;br /&gt;      var params = {};&lt;br /&gt;      params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] = [&lt;br /&gt;        opensocial.Person.Field.ID,&lt;br /&gt;        opensocial.Person.Field.NICKNAME,&lt;br /&gt;        opensocial.Person.Field.THUMBNAIL_URL,&lt;br /&gt;        opensocial.Person.Field.PROFILE_URL&lt;br /&gt;      ];&lt;br /&gt;      var req = opensocial.newDataRequest();&lt;br /&gt;      var idSpecParam = {};&lt;br /&gt;      idSpecParam[opensocial.IdSpec.Field.USER_ID]  = opensocial.IdSpec.PersonId.VIEWER;&lt;br /&gt;      idSpecParam[opensocial.IdSpec.Field.GROUP_ID] = opensocial.IdSpec.GroupId.FRIENDS;&lt;br /&gt;      var idSpec = opensocial.newIdSpec(idSpecParam);&lt;br /&gt;&lt;br /&gt;      req.add(req.newFetchPeopleRequest(idSpec, params), "get_friends");&lt;br /&gt;      req.send(handleGetFriends);&lt;br /&gt;    };&lt;br /&gt;    getfriends();&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;な感じ。callbackはここでは実行せずcallbackIdStoreに入れておく。&lt;br /&gt;親フレームでダイアログ表示後、「送信」ボタンが押下されたときに、&lt;br /&gt;callbackを実行する。callbackではダイアログで選択された友達のID一覧を&lt;br /&gt;受け取り、messages.modifyを発行する。&lt;br /&gt;このcallbackは、親フレームからのクロスドメイン通信により、requestShareAppCallback_がコールされたときにコールされる。&lt;br /&gt;&lt;br /&gt;callbackをつくり終わったら、友達一覧を取得する。&lt;br /&gt;これは親フレームで表示するダイアログに友達一覧として出力するため。&lt;br /&gt;&lt;br /&gt;で、友達一覧を取得し終わったら、&lt;br /&gt;gadgets.rpc.callで親フレームのrequestShareAppをコールする。&lt;br /&gt;次は親フレームのrequestShareApp。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;gadgets.IfrGadgetService.prototype.requestShareApp = function(rpc, callbackId, friends, body) {&lt;br /&gt;  if (!gadgets.container.gadgetService.shareAppDialog_) {&lt;br /&gt;    return;&lt;br /&gt;  }&lt;br /&gt;  var title = gadgets.container.getGadget(this.getGadgetIdFromModuleId(rpc.f))&lt;br /&gt;    .title + 'はお勧めだよ！';&lt;br /&gt;  var shareAppDialog = gadgets.container.gadgetService.shareAppDialog_;&lt;br /&gt;  var onSubmit = function() {&lt;br /&gt;    var friendsIds = this.getData().shareAppDialog_friendsId;&lt;br /&gt;    var recipients = [];&lt;br /&gt;    if (typeof friendsIds === 'boolean') {&lt;br /&gt;      if (friendsIds) {&lt;br /&gt;        recipients = [friends[0].id];&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;      var len = friendsIds.length;&lt;br /&gt;      for (var ii=0; ii&amp;lt;len; ii++) {&lt;br /&gt;        if (friendsIds[ii]) {&lt;br /&gt;          recipients.push(friends[ii].id);&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    if (callbackId) {&lt;br /&gt;      window.setTimeout(function() {&lt;br /&gt;        gadgets.rpc.call(rpc.f,&lt;br /&gt;                         'shindig.requestShareApp_callback',&lt;br /&gt;                         null,&lt;br /&gt;                         callbackId,&lt;br /&gt;                         true,&lt;br /&gt;                         recipients,&lt;br /&gt;                         title,&lt;br /&gt;                         body);&lt;br /&gt;      }, 0);&lt;br /&gt;    }&lt;br /&gt;    this.cancel();&lt;br /&gt;  };&lt;br /&gt;  var onCancel = function() {&lt;br /&gt;    if (callbackId) {&lt;br /&gt;      window.setTimeout(function() {&lt;br /&gt;        gadgets.rpc.call(rpc.f,&lt;br /&gt;                         'shindig.requestShareApp_callback',&lt;br /&gt;                         null,&lt;br /&gt;                         callbackId,&lt;br /&gt;                         false,&lt;br /&gt;                         [],&lt;br /&gt;                         title,&lt;br /&gt;                         body);&lt;br /&gt;      }, 0);&lt;br /&gt;    }&lt;br /&gt;    this.cancel();&lt;br /&gt;  };&lt;br /&gt;  document.getElementById('shareAppDialog_title').innerHTML = title;&lt;br /&gt;  document.getElementById('shareAppDialog_body').innerHTML = body;&lt;br /&gt;  var ul = document.createElement('ul');&lt;br /&gt;  var fc = 0;&lt;br /&gt;  document.getElementById('shareAppDialog_friends').innerHTML = '';&lt;br /&gt;  for (xx in friends) {&lt;br /&gt;    var li = document.createElement('li');&lt;br /&gt;    li.innerHTML = '&lt;label&gt;' + friends[xx].id + 'さん&lt;/label&gt;'&lt;br /&gt;      + '&lt;img src="' + friends[xx].thumbnailUrl + '" /&gt;'&lt;br /&gt;      + '&lt;input type="checkbox" name="shareAppDialog_friendsId" value="' + friends[xx].id + '" /&gt;';&lt;br /&gt;    ul.appendChild(li);&lt;br /&gt;    fc++;&lt;br /&gt;  }&lt;br /&gt;  if (fc == 0) {&lt;br /&gt;    document.getElementById('shareAppDialog_friends').innerHTML = 'ひとりぼっちだよ';&lt;br /&gt;  }&lt;br /&gt;  else {&lt;br /&gt;    document.getElementById('shareAppDialog_friends').appendChild(ul);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  shareAppDialog.setHeader('確認');&lt;br /&gt;  shareAppDialog.cfg.queueProperty("icon",YAHOO.widget.SimpleDialog.ICON_WARN);&lt;br /&gt;  shareAppDialog.cfg.queueProperty("buttons", [&lt;br /&gt;    {text: "送信", handler: onSubmit, isDefault: true},&lt;br /&gt;    {text: "キャンセル", handler: onCancel}&lt;br /&gt;  ]);&lt;br /&gt;  shareAppDialog.registerForm();&lt;br /&gt;  shareAppDialog.render();&lt;br /&gt;  shareAppDialog.show();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とりあえず動かしたかったのでfiles/container/gadgets.jsに追加した。&lt;br /&gt;ガジェット側フレームのrequestShareAppから渡された友達一覧を、&lt;br /&gt;ダイアログに展開し、ダイアログを表示する。&lt;br /&gt;「送信」ボタンが押下されたら、選択された友達のIDを配列にして、&lt;br /&gt;ガジェット側フレームワークへクロスドメイン間通信により、渡す。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;次に、ガジェット側requestShareApp_callback。&lt;br /&gt;これはまた戻ってきてjsonrpccontainer.jsに記述した。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;  JsonRpcContainer.requestShareAppCallback_ = function(callbackId,&lt;br /&gt;      success, recipientIds, title, body) {&lt;br /&gt;    callback = callbackIdStore[callbackId];&lt;br /&gt;    if (callback &amp;&amp; success) {&lt;br /&gt;      callbackIdStore[callbackId] = null;&lt;br /&gt;      callback(success, recipientIds, title, body);&lt;br /&gt;    }&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;こんだけ。&lt;br /&gt;Shindigのデフォルト状態からちょっと修正。&lt;br /&gt;requestShareAppで登録されたコールバックをコールするだけ。&lt;br /&gt;&lt;br /&gt;これでサーバ側へmessages.modifyが発行される。&lt;br /&gt;&lt;br /&gt;次にサーバ側。&lt;br /&gt;サーバ側はrequestSendMessageを実装してみたときのまま。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;で、実行すると、DBに登録された。&lt;br /&gt;&lt;br /&gt;ちなみにDialogはYUIを使用。&lt;br /&gt;&lt;br /&gt;そんだけ。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-3902304412412378968?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/3902304412412378968/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=3902304412412378968' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/3902304412412378968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/3902304412412378968'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-102.html' title='[Apache Shindig][お勉強][OpenSocial] メモ102 opensocial.requestShareAppのサーバ側実装をしてみる(1)'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-8542633668883333273</id><published>2009-07-29T15:11:00.003+09:00</published><updated>2009-07-29T16:32:30.687+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ101 requestShareAppを動かす</title><content type='html'>なんだかshindig-1.1-SNAPSHOTだと動かないっぽいので、&lt;br /&gt;動かす。&lt;br /&gt;&lt;br /&gt;まず、jsonrpccontainer.jsを見てみる。&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;&lt;br /&gt;  JsonRpcContainer.prototype.requestShareApp = function(recipientIds, reason,&lt;br /&gt;      opt_callback, opt_params) {&lt;br /&gt;    var callbackId = "cId_" + Math.random();&lt;br /&gt;    callbackIdStore[callbackId] = opt_callback;&lt;br /&gt;&lt;br /&gt;    var body = gadgets.util.unescapeString(reason.getField(&lt;br /&gt;        opensocial.Message.Field.BODY));&lt;br /&gt;&lt;br /&gt;    if (!body || body.length === 0) {&lt;br /&gt;      var bodyMsgKey = gadgets.util.unescapeString(reason.getField(&lt;br /&gt;        opensocial.Message.Field.BODY_ID));&lt;br /&gt;      body = gadgets.Prefs.getMsg(bodyMsgKey);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    gadgets.rpc.call('..', 'shindig.requestShareApp',&lt;br /&gt;        null,&lt;br /&gt;        callbackId,&lt;br /&gt;        recipientIds,&lt;br /&gt;        body);&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;opensocial.requestShareAppがコールされると、この関数がコールされる。&lt;br /&gt;関数の最後にgadgets.rpc.callで、親の'shindig.requestShareApp'がコールされている。&lt;br /&gt;&lt;br /&gt;ということで、今度は、gadgets.jsを見てみる。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;gadgets.IfrGadgetService = function() {&lt;br /&gt;  var self = this;&lt;br /&gt;  gadgets.GadgetService.call(this);&lt;br /&gt;  gadgets.rpc.register('resize_iframe', this.setHeight);&lt;br /&gt;  gadgets.rpc.register('set_pref', this.setUserPref);&lt;br /&gt;  gadgets.rpc.register('set_title', this.setTitle);&lt;br /&gt;  gadgets.rpc.register('requestNavigateTo', this.requestNavigateTo);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;となっていて、shindig.requestShareAppの登録はされていない。&lt;br /&gt;ま、そりゃそうか。&lt;br /&gt;&lt;br /&gt;jsonrpccontainer.jsも、gadgets.jsも、本来自分で実装すべきところっぽい。&lt;br /&gt;だからサンプルが動く程度の実装しかされていないんで、「追加」という形で実装してみる。&lt;br /&gt;&lt;br /&gt;呼び出し元のパラメータは&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;    gadgets.rpc.call('..', 'shindig.requestShareApp',&lt;br /&gt;        null,&lt;br /&gt;        callbackId,&lt;br /&gt;        recipientIds,&lt;br /&gt;        body);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;となっているので、&lt;br /&gt;gadgets.rpc.registerで記述すべきは、&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;  gadgets.rpc.register('shindig.requestShareApp', function(callbackId,recipientIds,body) {&lt;br /&gt;  self.requestShareApp.apply(self,[this, callbackId, recipientIds, body]);&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と、こんな感じか。&lt;br /&gt;&lt;br /&gt;でrequestShareAppの実装。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;gadgets.IfrGadgetService.prototype.shareAppDialog_ = null;&lt;br /&gt;gadgets.IfrGadgetService.prototype.setShareAppDialog = function(dialog) {&lt;br /&gt;  gadgets.container.gadgetService.shareAppDialog_ = dialog;&lt;br /&gt;};&lt;br /&gt;gadgets.IfrGadgetService.prototype.requestShareApp = function(rpc, callbackId, recipients, body) {&lt;br /&gt;    if (gadgets.container.gadgetService.shareAppDialog_) {&lt;br /&gt;      /* 以下YUI前提 */&lt;br /&gt;      var onSubmit = function() {&lt;br /&gt;        if (callbackId) {&lt;br /&gt;          window.setTimeout(function() {&lt;br /&gt;            gadgets.rpc.call(rpc.f, 'shindig.requestShareApp_callback', null, callbackId, true, recipients, body);&lt;br /&gt;          }, 0);&lt;br /&gt;        }&lt;br /&gt;        this.cancel();&lt;br /&gt;      };&lt;br /&gt;      var onCancel = function() {&lt;br /&gt;        if (callbackId) {&lt;br /&gt;          window.setTimeout(function() {&lt;br /&gt;            gadgets.rpc.call(rpc.f, 'shindig.requestShareApp_callback', null, callbackId, false, recipients, body);&lt;br /&gt;          }, 0);&lt;br /&gt;        }&lt;br /&gt;        this.cancel();&lt;br /&gt;      };&lt;br /&gt;      gadgets.container.gadgetService.shareAppDialog_.cfg.queueProperty("buttons", [&lt;br /&gt;        {text: "送信", handler: onSubmit, isDefault: true},&lt;br /&gt;        {text: "キャンセル", handler: onCancel}&lt;br /&gt;      ]);&lt;br /&gt;      document.getElementById('shareAppDialog_body').innerHTML = body;&lt;br /&gt;      gadgets.container.gadgetService.shareAppDialog_.render();&lt;br /&gt;      gadgets.container.gadgetService.shareAppDialog_.show();&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;      if (callbackId) {&lt;br /&gt;        window.setTimeout(function() {&lt;br /&gt;          gadgets.rpc.call(rpc.f, 'shindig.requestShareApp_callback', null, callbackId, true, recipients, body);&lt;br /&gt;        }, 0);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;と、ざっくりこんな感じ。馬鹿の一つ覚えでYUIをまた使用。&lt;br /&gt;親側でダイアログを出して、子フレーム側のrequestShareApp_callbackをコールできればＯＫ。&lt;br /&gt;shindigのままだと、bodyをコールバックに渡せないので、&lt;br /&gt;jsonrpccontainer.jsの法をちょっとだけいじる。&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;  JsonRpcContainer.requestShareAppCallback_ = function(callbackId,&lt;br /&gt;      success, recipientIds, body) {&lt;br /&gt;    callback = callbackIdStore[callbackId];&lt;br /&gt;    if (callback) {&lt;br /&gt;      callbackIdStore[callbackId] = null;&lt;br /&gt;&lt;br /&gt;      var data = null;&lt;br /&gt;      if (recipientIds) {&lt;br /&gt;        data = {'recipientIds': recipientIds};&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      var responseItem = new opensocial.ResponseItem(null, data, opensocial.ResponseItem.Error.BAD_REQUEST);&lt;br /&gt;      callback(responseItem);&lt;br /&gt;    }&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;こんな感じ。今のところはエラーを返す。&lt;br /&gt;&lt;br /&gt;これでよいはず。&lt;br /&gt;&lt;br /&gt;で動かした。&lt;br /&gt;で動いた。&lt;br /&gt;&lt;br /&gt;BAD_REQUESTになった。&lt;br /&gt;次はサーバとの連携。&lt;br /&gt;-- &lt;br /&gt;と思ったけど、何しよう。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-8542633668883333273?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/8542633668883333273/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=8542633668883333273' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8542633668883333273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/8542633668883333273'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-101.html' title='[Apache Shindig][お勉強][OpenSocial] メモ101 requestShareAppを動かす'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1195584593823240536.post-1650936576871859416</id><published>2009-07-29T15:00:00.001+09:00</published><updated>2009-07-29T15:02:49.138+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='お勉強'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>[Apache Shindig][お勉強][OpenSocial] メモ100 ガジェットを友達に勧めるだけのガジェット</title><content type='html'>opensocial.requestShareAppを使ってみる。&lt;br /&gt;&lt;br /&gt;とりあえずガジェットXML。&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;  &amp;lt;ModulePrefs title="opensocial.requestShareApp"&amp;gt;&lt;br /&gt;    &amp;lt;Require feature="opensocial-0.8" /&amp;gt;&lt;br /&gt;  &amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;  &amp;lt;Content type="html" view="home,profile,canvas"&amp;gt;&lt;br /&gt;    &amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;      function shareApp() {&lt;br /&gt;        opensocial.requestShareApp(&lt;br /&gt;          "VIEWER_FRIENDS",&lt;br /&gt;          opensocial.newMessage("ぼよよーん"),&lt;br /&gt;          call_back);&lt;br /&gt;      }&lt;br /&gt;      function call_back(status) {&lt;br /&gt;        if (status.hadError()) {&lt;br /&gt;          document.getElementById('result').innerHTML = '失敗したよ:' + status.getErrorCode();&lt;br /&gt;        } else {&lt;br /&gt;          document.getElementById('result').innerHTML = '送ったよ';&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;div id="result"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;input type="button" value="このガジェットを友達と共有する" onclick="shareApp();" /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;    ]]&amp;gt;&lt;br /&gt;  &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;な感じ。&lt;br /&gt;今のところ、ボタンを押下すると、&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;Unknown RPC service: shindig.requestShareApp&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;といわれる。&lt;br /&gt;&lt;br /&gt;さて、調べよう。。&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1195584593823240536-1650936576871859416?l=atkonn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atkonn.blogspot.com/feeds/1650936576871859416/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1195584593823240536&amp;postID=1650936576871859416' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1650936576871859416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1195584593823240536/posts/default/1650936576871859416'/><link rel='alternate' type='text/html' href='http://atkonn.blogspot.com/2009/07/apache-shindigopensocial-100.html' title='[Apache Shindig][お勉強][OpenSocial] メモ100 ガジェットを友達に勧めるだけのガジェット'/><author><name>atkonn</name><uri>http://www.blogger.com/profile/07913370613168816259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_ki-hzHQEZTs/R5DT4_jafrI/AAAAAAAAAAM/kGIrtg0ITNI/S220/a.bmp'/></author><thr:total>0</thr:total></entry></feed>
