<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;CkEFRHs8fyp7ImA9WhRaE0Q.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478</id><updated>2012-02-16T20:10:15.577+09:00</updated><category term="ruby" /><category term="plpgsql" /><category term="cassandra" /><category term="PostGIS" /><category term="postgresql" /><category term="javascript" /><category term="CSS" /><category term="java" /><category term="php" /><category term="web" /><category term="Rails" /><category term="CentOS" /><category term="sqlite" /><category term="azure" /><category term="perl" /><category term="IT" /><category term="boost" /><category term="swig" /><category term="ネットワーク管理" /><category term="原発" /><category term="Oracle" /><category term="gecko" /><category term="mssql" /><category term="Programming" /><category term="delphi" /><category term="pgRouting" /><category term="C++" /><category term="kayak" /><category term="android" /><category term="cmake" /><category term="ski" /><category term="food" /><category term="spam" /><category term="Objective-C" /><category term="mac" /><category term="雑記" /><category term="windows" /><category term="BOOK" /><category term="iPad" /><category term="ubuntu" /><category term="OpenGL" /><title>grayhole</title><subtitle type="html">三流C++プログラマによる随筆</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>760</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Grayhole" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="grayhole" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0YHR3k7cSp7ImA9WhRaEk4.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-8988382442408199389</id><published>2012-02-14T23:52:00.000+09:00</published><updated>2012-02-14T23:52:16.709+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-14T23:52:16.709+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>devfestx sapporo 2012 に参加した</title><content type="html">非常に濃い２日間で、楽しかったです。特に Google の山崎さんは、フットワークが軽く、にこやかで、なるほど...グーグルが悪に感じるのは、きっと我々が悪だからなんだwww
と、妙に納得した次第です。基本的にスピーカーの方々は、根明で謙虚で自分なりの価値観を持っている印象で、素晴らしかったと思います。１日目のハンズオンでは、Google Apps Script が大変勉強になりました。学習曲線で負荷のかかる場所と言えば、とっかかりの部分か、本格的にツッコミはじめる部分だと思うのですが、みんなで「わいわい」と手を動かしてコードを組むというのは、とても良かったです。MSオフィスのマクロみたいな事ができるらしいぐらいの知識しか無く、ドキュメントを開いて、コピーして、コピーしたドキュメントに対して正規表現で置換をかけてPDFに保存して電子メールで送信するなんて事ができるんだなーとわかった時は、ちょっと感動しました。Hangouts API で遊ぼうのセッションでは、Google Maps API のエキスパートの石丸さんとペアで、日頃から購読している Web OS Goodies の伊藤さんから手ほどきを受けるという、たぶん豪華なハンズオン。消化不良気味でしたが、普段は使った事のない Google Console とか使えて世界が広がった気がします。
　懇親会では、江川さんと足立さんに挟まれて、江川さんには「雪明かりの路」が良いですよと、オススメしたものの、日曜日の夜に家族で小樽まで出かけたら吹雪いていて遭難しそうになりました。もし、小樽に行かれてたとしたら、ごめんなさいです。足立さんも、後から考えてみればG＋で「Simeji」が買収されたという話が持ち切りだったので、もうちょっと自分の方でもピンと来てれば、もっと話が広がったかなーと反省してます。

　当初 Android のハンズオンを受けようかと思っていたんですが、ここんところ仕事で Android 漬けなんで、すんません、お腹いっぱいで受ける気力が起きなかったです。どっちにしろ、WebGL のセッションだけは、どうしても興味があったので、結果は変わらなかったとは思います。WebGL は独学ではきついなぁと感じていたので、情報が聞けて凄い良かったです。
　Google Maps のセッションで Fusion Tables というものがあるのは、知りませんでした。これで地図を描画できるようになったのは、何時からなんでしょうか？2010年の４月には、C++で ダイレクトに図形を描画してタイル化する PHP Extension (Closed source) を自分で作成してます。Google Maps API は使いこなせば凄いんでしょうけど、自分の会社はGISをやってて対局にあるので、ちょっと距離を置いて見てしまうところがありました。Fusion Tables は、ちょっと癪に障るから、もっと違うもん考えよっ。
　心残りは、GAE のハンズオンを受けれなかった事。

　抽選会では、初音ミクの「ねんどろいど」当たりましたwww。クリプトンフューチャーの皆様、ありがとうございました。

　今回の貴重な資料は　&lt;a href="https://sites.google.com/site/devfestxsapporo/document"&gt;https://sites.google.com/site/devfestxsapporo/document&lt;/a&gt;　にあります。

　それから、ちょっと今、仕事がツボっていて書く暇がないですが、Zeemote というコントローラをもらったので、Android における Bluetooth 接続 のポストを書くかもしれません。多分、この辺に関する、まとまった情報はネット上にも無いと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-8988382442408199389?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/8988382442408199389/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=8988382442408199389" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8988382442408199389?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8988382442408199389?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2012/02/devfestx-sapporo-2012.html" title="devfestx sapporo 2012 に参加した" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0MGRXs-cCp7ImA9WhRbEkk.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-8214024505247177172</id><published>2012-02-03T12:56:00.001+09:00</published><updated>2012-02-03T12:57:04.558+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-03T12:57:04.558+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>android における sqlite3 のスレッドによるアクセス</title><content type="html">SQLiteOpenHelper を利用していて、IlligalStateException みたいなものに出くわしたので、スレッドによるアクセスは？データベースのインスタンスは？と、気になり、結局ソースコードを追った。ぐぐって見つけたのは、「&lt;a href="http://d.hatena.ne.jp/ukiki999/20100524/p1"&gt;SQLiteを使う場合の注意点&lt;/a&gt;」で、ここに書いてある事は概ね正しいです。

　SQLiteOpenHelper.java にて SQLiteDatabase は、mDatabase というメンバ変数に保持しているので、1クラスにつき、１インスタンスしか扱えません。&lt;br /&gt;
データベースに対しては、読み書きを行うでしょうから、getWritableDatabase 関数をコールして、内部で保持しているデータベースのインスタンスを取得する事になります。スレッドで読取り専用であっても、データベースは、DBOpenHelperに対して、ひとつのインスタンスなのでしょうがないです。内部のコードを追っていると、DBOpenHelper::getReadableDatabase 関数の中から DBOpenHelper::getWritableDatabase をコールしている場所があるので、現時点では、あまり違いは無いかもしれません。ただし、現在どっちのモード（読取り専用かどうか）でデータベースを開いているかは、内部で管理しているみたいで、整合性が合わないと、IlligalStateException がスローされます。&lt;br /&gt;
  カーソルを作成すると、データベースの読取領域がメモリ上に読み込まれる感じになるので、この同じデータベース・インスタンスに対して、別スレッドから同時アクセスしても、そんなに大きな問題にはならないでしょう。ただし、これが可能なのは、１つの書き手と残りは複数の読み手に限られます。書き込みトランザクション中に別スレッドから読取操作が行われながらトランザクションが完了するので、非常に気持ちの悪い動作になります。よって、常識的にコードを書くならば、スレッド１個に対してDBOpenHelperのインスタンスを１つ用意すべきでしょう。そうすれば、読取り専用と書き込みの区別もできます。&lt;br /&gt;
　あと、この辺の情報を検索していて、データベースを開いた状態でメンバ変数に保持する事や、カーソルを開いたままメンバ変数に保持するのは、ご法度だみたいな事を書いている人もいるみたいですが、これは間違いです。Android では、デバイスから得られる情報を取得するためのイベント・リスナ中の関数は、別スレッドになるので、ここら辺を意識できないでコードを組む人には、そのような説明をした方が都合が良いからだと思われます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-8214024505247177172?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/8214024505247177172/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=8214024505247177172" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8214024505247177172?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8214024505247177172?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2012/02/android-sqlite3.html" title="android における sqlite3 のスレッドによるアクセス" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUIHSX48fCp7ImA9WhRUF0k.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-3364857924263357238</id><published>2012-01-28T18:38:00.003+09:00</published><updated>2012-01-28T18:38:58.074+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-28T18:38:58.074+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BOOK" /><title>最近読んで、良かった本</title><content type="html">「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/479812530X/tigerblade-22"&gt;ビッグデータ・ビジネスの時代&lt;/a&gt;」 北海道だと、まだまだIT化さえ進んでいない所が多いというのに、第１段階目のIT化されているレベル、第２段階目のIT化によってデータが集積できているレベル、第３段階目の集積されたデータを活用できているレベル、このうちの３段目のレベルのお話です。ほんの１年前までは、NoSQLやHadoopなんて、ちょっと毛色の変わった人の話という感じでした。しかし、最近では頻繁に、これらの事例を目にするように（ウェブ上）なりました。うちの社長には、ビッグデータ・ビジネスは、うちの会社のビジネスじゃないだろ・・・という風に言われました。半分は当たってますが、今から念頭に置いておかないと浦島太郎になりそうです。本書を読んで、そう思いました。この本を読む前から、データ実証主義の行き着く先は、この辺になるだろうから、どこかでビッグデータを取り扱う話にぶち当たる予感はありました。&lt;br /&gt;
「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822248526/tigerblade-22"&gt;グレイトフル・デッドにマーケティングを学ぶ&lt;/a&gt;」いやいや、凄いビジネス書です。万人にわかりやすく書かれていて、素晴らしい。今の時代のビジネスの本質をついてると思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-3364857924263357238?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/3364857924263357238/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=3364857924263357238" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/3364857924263357238?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/3364857924263357238?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2012/01/blog-post_9268.html" title="最近読んで、良かった本" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0ACSXk5eCp7ImA9WhRUF0k.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-8771691448039320867</id><published>2012-01-28T18:09:00.000+09:00</published><updated>2012-01-28T18:09:28.720+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-28T18:09:28.720+09:00</app:edited><title>どんどんと生産が海外に流れていくが…</title><content type="html">もの作りの生産における人件費の占める割合って、いったい、いかほどのものなんだろうか？ソフトウェアのように、ほとんどが人件費のものならば、人件費が安いところで開発しようというのは、頷ける。酔っ払ってて、いまいち記憶が曖昧だが正月に自動車メーカーにいる友人と話てて、車のような大きいものでは、部品代と比較して人件費の割合なんて存外たいした事ないんじゃない？って聞いたような聞かないような・・・。
　G+で知った「&lt;a href="http://learnbydoing.jp/2012/01/26/globalization/"&gt;togetterにまとめきれなかった、グローバリゼーションの本質&lt;/a&gt;」にもあるように、世界の大衆車の販売を目指すのならば、やっぱり標準化してコストダウンしていかないと、お話にならないですよね？何が言いたいかというと、生産拠点を移しただけで勝てるとでも思ってるのかね？という事なんです。みんな、薄々そう感じながらも、コストダウン命で海外に生産拠点を移転ってやってるけど、本当に本質はそこですか？と、書いてみたかった。
　競争するならスーパーカブのような車を作って、急須のようにデザイン性の高い民具レベルまで落とし込んだら、ロングセラーで商売してデザイン普遍で徹底的にコストを抑えるとか、逆に、もの凄いコンセプトカーを作って、ニッチな市場で高額販売するとか？
　いや、どんどん生産拠点が海外に行ってる上に、NECが１万人削減とか、寂しい話が多いなーという訳で、書いてみました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-8771691448039320867?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/8771691448039320867/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=8771691448039320867" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8771691448039320867?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8771691448039320867?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2012/01/blog-post_28.html" title="どんどんと生産が海外に流れていくが…" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0MNRnwzcSp7ImA9WhRUFEg.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-5043931889777118460</id><published>2012-01-24T20:39:00.001+09:00</published><updated>2012-01-25T10:38:17.289+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-25T10:38:17.289+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>GeomagneticField に関する疑問</title><content type="html">android のセンサーはカオスで、加速度系の方向が機種によって違うとか、いろいろ聞きます。
山をやる人には馴染みの磁北線ですが、&lt;a href="http://vldb.gsi.go.jp/sokuchi/geomag/index.html"&gt;国土地理院のページ&lt;/a&gt;に詳しく書かれています。正確には測量によって算出されるもので、API に落としこむ Google は凄いなと思います。現在は時計回りを正とした場合、日本では反時計回り方向に磁北線があり、西偏X度というような表現をします。日本でも過去には東偏だった事があるようです。
さて、手持ちの機種　IS03, Regza AT3S0, Lenovo Ideapad K1 で検証したところ、方位は時計回りを正として表現されています。従って西偏として考えれば、北海道では９度ちょいなので時計回りを正とすれば、Android SDK の GeomagneticField.getIncrenation() で取得できるべき値は負であるべき気がしますが正。逆に GeomagneticField.getDeclination() で取得できる値は正であるべき気がするのですが負。API で取得できる値は正負が逆のような気がしてならない・・・。
　もちろん、センサーで取得できる方位も時計回りが正なので、真北の補正は、
&lt;pre&gt;  magneticAngle - declination  // 間違い&lt;/pre&gt;
か &lt;pre&gt;  magneticAngle + inclination  // 間違い&lt;/pre&gt;
 だと思うのですが、ググッて見つかるのは magneticField + declination というものばかり・・・俺、間違ってるのかな・・・自信なくなってきた・・・。
　ちなみに、SensorManager.remapCoordinateSystem から SensorManager.getOrientation の API を使って取得できる方位は単位がラジアンで、GeomagneticField.getDeclination で取得できる偏角は単位が度なので、注意が必要です。
&lt;br /&gt;
2012/01/25 追記：

　どうも、小学校からやり直しですな…。センサが方位０度を示している時、真北の値はX度な訳です。写像にすると、X度を０度にが補正写像な訳ですから、-X度を足し算すれば良い事になります。
従って、
&lt;pre&gt;  magneticAngle + declination  // 正解&lt;/pre&gt;
か &lt;pre&gt;  magneticAngle - inclination  // 正解&lt;/pre&gt;
で良い事になります。あー、すっきりした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-5043931889777118460?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/5043931889777118460/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=5043931889777118460" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/5043931889777118460?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/5043931889777118460?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2012/01/geomagneticfield.html" title="GeomagneticField に関する疑問" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUEMQns4cCp7ImA9WhRWGUk.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-5487959586348662563</id><published>2012-01-07T23:48:00.000+09:00</published><updated>2012-01-07T23:48:03.538+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-07T23:48:03.538+09:00</app:edited><title>あけおめー</title><content type="html">皆さん、新年あけましておめでとうございます。&lt;br /&gt;
今年は嫁さんの実家に行って、その後、五色温泉～&lt;a href="http://www.goose-berry.com/"&gt;グスベリ&lt;/a&gt;と、まわりました。&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; お約束の五色温泉は、こんな感じです。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-Cyl0k2EJh9k/TwCAHm6X55I/AAAAAAAAF0M/5pNTWPxd9SM/s1600/01+-+1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-Cyl0k2EJh9k/TwCAHm6X55I/AAAAAAAAF0M/5pNTWPxd9SM/s320/01+-+1" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-rPqKIaWEFi4/TwCAH8vPpSI/AAAAAAAAF0Y/zBjRVX7bEso/s1600/01+-+2" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://1.bp.blogspot.com/-rPqKIaWEFi4/TwCAH8vPpSI/AAAAAAAAF0Y/zBjRVX7bEso/s320/01+-+2" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-FcGo0SB1_9I/TwCAH-QBclI/AAAAAAAAF0k/C-zEci3Di0I/s1600/01+-+3" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-FcGo0SB1_9I/TwCAH-QBclI/AAAAAAAAF0k/C-zEci3Di0I/s320/01+-+3" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-IVwdr4LS2_M/TwCAIXizNrI/AAAAAAAAF0w/nbHfurgvwpI/s1600/01+-+4" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-IVwdr4LS2_M/TwCAIXizNrI/AAAAAAAAF0w/nbHfurgvwpI/s320/01+-+4" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-iCTrrYCaSUo/TwD_8zm1nQI/AAAAAAAAF3A/SxIiekJX_Sc/s1600/01+-+1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-iCTrrYCaSUo/TwD_8zm1nQI/AAAAAAAAF3A/SxIiekJX_Sc/s320/01+-+1" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-j7JC0sLhEq4/TwD9MRVcymI/AAAAAAAAF1w/1b-GneNNE9A/s1600/01+-+1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-j7JC0sLhEq4/TwD9MRVcymI/AAAAAAAAF1w/1b-GneNNE9A/s320/01+-+1" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-zqtvFdkGC10/TwD9MhYSEMI/AAAAAAAAF18/DAy-lLdZVGk/s1600/01+-+2" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://1.bp.blogspot.com/-zqtvFdkGC10/TwD9MhYSEMI/AAAAAAAAF18/DAy-lLdZVGk/s320/01+-+2" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-cngxPO3eoNo/TwD9Mgki5gI/AAAAAAAAF2I/kBRmvZ2KpFc/s1600/01+-+3" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://4.bp.blogspot.com/-cngxPO3eoNo/TwD9Mgki5gI/AAAAAAAAF2I/kBRmvZ2KpFc/s320/01+-+3" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-qsImQoot4bg/TwD9MtxIf6I/AAAAAAAAF2U/fChRQahEo3s/s1600/01+-+4" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-qsImQoot4bg/TwD9MtxIf6I/AAAAAAAAF2U/fChRQahEo3s/s320/01+-+4" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
そして、坊ちゃんと、旧友の家族とで初滑りしたのですが、風が凄くて一本で敗退・・・。ほら、冬山に登ると空気が変わって、もの凄い厳しい風雪に見舞われる事があるじゃないですか？スキー場がそんな感じでした。旧友の坊ちゃん、うちの坊ちゃんより一歳年下なんですが、ちょっとだけ可哀想な感じでした…。&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-3TqWAwvuezc/TwE4UYuDcPI/AAAAAAAAF3s/d6J0R1ibxLs/s1600/01+-+1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-3TqWAwvuezc/TwE4UYuDcPI/AAAAAAAAF3s/d6J0R1ibxLs/s320/01+-+1" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
次はグスベリさんのところへ&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-8AtiaVSAhIc/TwFd40htOoI/AAAAAAAAF4s/gQBDJkuSbaI/s1600/01+-+1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-8AtiaVSAhIc/TwFd40htOoI/AAAAAAAAF4s/gQBDJkuSbaI/s320/01+-+1" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-aeve6z9Cobs/TwFd49CLFlI/AAAAAAAAF44/t2DEC4yVJdA/s1600/01+-+2" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://4.bp.blogspot.com/-aeve6z9Cobs/TwFd49CLFlI/AAAAAAAAF44/t2DEC4yVJdA/s320/01+-+2" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-X5_ZaZaWjN8/TwFd48rXvOI/AAAAAAAAF5E/DoAC7RzoGM4/s1600/01+-+3" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-X5_ZaZaWjN8/TwFd48rXvOI/AAAAAAAAF5E/DoAC7RzoGM4/s320/01+-+3" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-mBnXkGAsNr8/TwFd5fn9uZI/AAAAAAAAF5Q/ndfiUhfyIqc/s1600/01+-+4" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://1.bp.blogspot.com/-mBnXkGAsNr8/TwFd5fn9uZI/AAAAAAAAF5Q/ndfiUhfyIqc/s320/01+-+4" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
ロケーションは、バッチシです。夜には、雪で寝かせた真狩村名産の百合根のグラタンが美味かった。
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-GUI48_1kal0/TwFuTjEgXPI/AAAAAAAAF6E/0FIYGo-ESNE/s1600/02+-+1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://4.bp.blogspot.com/-GUI48_1kal0/TwFuTjEgXPI/AAAAAAAAF6E/0FIYGo-ESNE/s320/02+-+1" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-U7FR2Ol1wjs/TwFuTypPf7I/AAAAAAAAF6Q/2N-EwX1yvNA/s1600/02+-+2" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-U7FR2Ol1wjs/TwFuTypPf7I/AAAAAAAAF6Q/2N-EwX1yvNA/s320/02+-+2" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-1pJY57EBKRs/TwFuT22HxZI/AAAAAAAAF6c/q1XgZJVilkM/s1600/02+-+3" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-1pJY57EBKRs/TwFuT22HxZI/AAAAAAAAF6c/q1XgZJVilkM/s320/02+-+3" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-8gXqMvvjaTU/TwFxz0WYzVI/AAAAAAAAF7I/8QPfF5_0nII/s1600/02+-+1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://4.bp.blogspot.com/-8gXqMvvjaTU/TwFxz0WYzVI/AAAAAAAAF7I/8QPfF5_0nII/s320/02+-+1" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Fn3r7pd4occ/TwFyKusEyLI/AAAAAAAAF7o/f-A1UpZF-PU/s1600/02+-+1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-Fn3r7pd4occ/TwFyKusEyLI/AAAAAAAAF7o/f-A1UpZF-PU/s320/02+-+1" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-WbBlmv-4dH0/TwF2K15dFHI/AAAAAAAAF9E/gRT_HZMHf-A/s1600/02+-+1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-WbBlmv-4dH0/TwF2K15dFHI/AAAAAAAAF9E/gRT_HZMHf-A/s320/02+-+1" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
と、こんな感じの正月でした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-5487959586348662563?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/5487959586348662563/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=5487959586348662563" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/5487959586348662563?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/5487959586348662563?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2012/01/blog-post.html" title="あけおめー" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Cyl0k2EJh9k/TwCAHm6X55I/AAAAAAAAF0M/5pNTWPxd9SM/s72-c/01+-+1" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkIGRHg4eip7ImA9WhRVF0Q.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-8979254451599171822</id><published>2012-01-07T23:12:00.000+09:00</published><updated>2012-01-17T17:55:25.632+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T17:55:25.632+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>android ２重起動の禁止</title><content type="html">いやー、android 開発、難しいですね～。こんな事は、もう語り尽くされているだろうと思ったかもしれませんが、もうちょい突っ込んだ内容になります。

android 関連の情報では、圧倒的にお世話になっている yanzm さんのところに &lt;a href="http://y-anz-m.blogspot.com/2011/02/androidlauchmode.html"&gt;Android　launchMode の違い&lt;/a&gt;と、あるんで、基本は、これでオッケーなんです。

　ところが、アプリケーションを終了して、直後に、アプリケーションを起動すると、一時的にアプリケーションというか、Activity が２重起動している状態になります。この時に初期化処理と終了処理が前後してしまう事があるんですわ。いやいや、ちゃんと行儀よくActivityを書いていれば、何の問題もないんです。どういう事をやっているかというと、
&lt;br /&gt;
&lt;pre&gt;  
  ...
  class FooActivity extends Activity {
    public static Hoge hoge_ = null;
  ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      hoge_ = new Hoge();
    }
    @Override
    protected void onDestroy() {
      hoge_.close();
      super.onDestroy();
    }
  ...
  }
&lt;/pre&gt;
みたいな事をやってるんです。フッ、static な global 変数ですか？って笑われるかもしれませんが、正直、あちこちの Activity が関連を持って利用しなければならないとなると、こうするより他無いんです。こんなんで共有できてしまうのは、将来的に地雷を踏む可能性もあります。だって、アプリケーション全体でデータを共有するためには、どうしたらいいですか？に対する回答は、「ApplicationBean を使いましょう」だからです。データは、Parcelable で受け渡しすべきです。さて、この android.app.Application ですが、onDestroy に相当するメソッドがありません。正直言って使えません。また、画面の回転でレイアウトが変わる度に onDestroy と onCreate が呼ばれるので、うざくてしょうがありません。だから、私はダミーの BaseActivity を作成して、そこで共通リソースの初期化と破棄を行なってます。そうすれば、MainActivity の onDestroy と onCreate が何回呼ばれようが気にしなくて済みます。

　話を巻き戻して、SingleTask なのに一時的に２重起動してもプロセスが別なら問題ないんじゃないですか？と思うやないですか？ところが、違うんです。この２つのアプリケーションから hoge_ が共有できてしまっており、先に終了したアプリの onDestroy よりも先に、後から起動したアプリの onCreate がコールされる状況があるんです。いや、もうビックリですね？しょうがないので、

&lt;br /&gt;
&lt;pre&gt;
  ...
  class FooActivity extends Activity {
    public static Hoge hoge_ = null;
    private static int process_count_ = 0;
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      if( 0 == process_count_ ) {
        ++process_count_;
        hoge_ = new Hoge();
      } else {
        ++process_count_;
      }
    }
    @Override
    protected void onDestroy() {
      --process_count_;
      if( 0 == process_count_ ) {
        hoge_.close();
      }
      super.onDestroy();
    }
  ...
  }
&lt;/pre&gt;
という感じで、プロセス？カウントをとって、対処してます。ちなみにタイミングがシビアじゃ無いので、カウントの保護は一切行なっていません。

追記：static 変数の記述場所を間違えてたので修正しました。やっぱりカウンタは同期保護した方が良いかもしれません。synchronized(this)ではダメっぽい気がしますが、突っ込んでません。やるとすれば private static Object sync_ = new Object(); しておいて、synchronized(sync_) でしょうか？&lt;br /&gt;
訂正： final 修飾子が余計だったのを取った。

2012/01/15 追記：　どうも、Activity 再開時の挙動など、singleTask 等で細かく異なるようである。&lt;a href="http://www.usagi1975.com/blog/archives/681"&gt;参考になるサイト&lt;/a&gt;を見つけた。こちらも目を通した方が良いです。一旦 HOME ボタンを押した後に再開すると、singleTask では BaseActivity の onDestroy がコールされるので思わしくない。&lt;s&gt;そこで、このような事をやる場合は、singleInstance を選択する事にしました。&lt;/s&gt; singleInstance は、Activity のフォーカスが外れる時点で、onDestroy がコールされ破棄されるので、使えない。別に single である必要は無い気がしてきた…。もう少し突っ込んで、整理した後に書く予定。追試する度に、挙動が違って困る…。

2012/01/17 追記： BaseActivity に Manifest で android:screenOrientation="landscape" と指定するようにした。 BaseActivity -&gt; MainActivity と表示している時にレイアウトの縦横が変更された時、MainActivity だけが変更の影響を受けるわけではなく、BaseActivity にまで変更の影響を受けている事がわかった。そのせいで、BaseActivity の onDestroy と onCreate がコールされる事になる。この辺の挙動は、かなりトリッキーだ。BaseActivity の onCreate 時に MainActivity を起動しているのだが、MainActivity が縦横変更時にどんどん増殖するという恐ろしい事態を引き起こしていた。現在は、singleInstance で実装している。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-8979254451599171822?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/8979254451599171822/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=8979254451599171822" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8979254451599171822?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8979254451599171822?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2012/01/android.html" title="android ２重起動の禁止" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0YGQ3Y9cCp7ImA9WhRQEko.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-6787255733424557322</id><published>2011-12-08T00:15:00.001+09:00</published><updated>2011-12-08T00:18:42.868+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-08T00:18:42.868+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IT" /><title>アイデアを形にする（「アイデアの９９％」を読んで）</title><content type="html">「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4862761178/tigerblade-22"&gt;アイデアの９９％&lt;/a&gt;」を読むまで、自分のタイプを自覚できていなかった。厳密には、自覚はあっても、どうすべきかまでは思いが至らなかった。自分のタイプは、興味があちこちに移り、ひとつの事に集中できないと思えば、他の事が頭に入らないほど考え込んでしまったりで、夢追い人。片づけ魔では無い。&lt;br /&gt;
くどくて退屈な本「イノベーションの神話」には、死蔵していったアイデアの話が載っており、何か特別なアイデアが適切なタイミングで実現されなければいけないような事が書かれていたから、思い違いをしていたのだ。&lt;br /&gt;
アイデアを実現する＝ビジネスで成功する＝スタートアップで成功する＝政策を実現する＝日本を変える＝...とにかく何でも良い。そのためには、適切なアクションを起こすための仕組みを作る事だったのだ。アクション・メソッドに落とすとは、プロジェクト管理をキッチリと行う事に他ならない。アクション・メソッドとは、アイデアを実現するために、誰か(協力者・社員・パートナー・下請けなど)にわかる形(作業指示書)へ分解して推し進める単位である。&lt;br /&gt;
日本にはビジョナーがいないのではなく、プロジェクトを組んで仕事をするノウハウが足りないだけなのではと思う。&lt;br /&gt;
&lt;br /&gt;
　自分の視点が変わったせいか、ひとつの事に取り組む姿勢を指摘した書き物が目につくようになった。しかも、ここ最近、よく目にする。一種のシンクロニシティを感じているところなのだ。これは決して偶然なのではなく、社会的な要請が、そこにあるからだと思う。（つい最近、目にしたものでは、瀬戸内寂聴先生の本で、政治家が「あれもやりたい、これもやりたい」と八方美人的に語っているのを叱責するもの。Software Design の震災でうまくいっているプロジェクトの特徴を述べたもの。など）&lt;br /&gt;
&lt;br /&gt;
　日本の文化として、１７条憲法にあるように「和を以て貴しと為す」が根底にあるのかどうかしらないが、和を歪曲しているからなのかもしれない。あれも良いよね？うんうん、でも、これも良いよね？うんうん。でも、あれをこうしたら良いんじゃない？うんうん。良いよね談義で終わってしまっているのではないか？思い返せば、学校教育からしてひどかった。「何々についてどう思いますか？」「何々だと思います。」「何々してはいけないと思います。」「何々しないように気をつけましょう。」終止抽象的な話で終わって、これがアクション・メソッドにブレークダウンされるような事は無かった。アクション・メソッドは有っても、プロジェクトを組んで自分の頭で考える訓練なぞ皆無ではなかったろうか？お上ならぬ大人の考えたプログラムを実行する訓練ばかりでは無かったか？&lt;br /&gt;
&lt;br /&gt;
　何事かを成すためには、一見、たいした事がないように思える事でも、多大なリソースが必要なのだ。特にグローバル競争で、中途半端なものは生き残れない。だから余計に最後までやり抜く覚悟が必要なのだ。やり抜くためには、実現するための具体的なアクション・ステップ（プロセス）に落とし込み、プロジェクト管理を行って、一歩一歩前進しなければならない。&lt;br /&gt;
&lt;br /&gt;
　ソフトウェア業界に目を移せば、TPPで仕事がグローバルになっていけば、アイデアを形にするためのプロジェクト管理という手法は必須であり、避けて通れない問題になっていくでしょう。海外では、ファンクション・ポイント法により見積もりを作成し、予算と期間を決めて契約を行う時には、インセンティブ契約というのを結ぶ事もあるそうです。このインセンティブ契約とは、定数人員で期間が短工期に仕上がった場合、受注金額の残工期分を、発注側と受注側で折半するというもの。これでは、プロジェクト管理をしっかりとハンドリングし、本当に実績を上げているグローバルな会社と競争した時に勝てるはずもない。これは何もソフトウェアだけに限った話ではなく、官僚丸投げの政治家にも言える事であります。マネジメントされていないプロジェクトの行き着く先は、不幸そのものです。&lt;br /&gt;
&lt;br /&gt;
　逆算で考えて行くと、アイデアを形にするためには、プロジェクト管理が必須であり、プロジェクト管理をするためには、何をゴールとするか明確なビジョンに落とし込む作業が必要なわけです。そのためにはマネジメントが必要で、ビジョンを伝え共有し、共有されたビジョンが何らかの形でプロジェクトの血となり肉となる必要があります。アイデアを形にするために足りないリソースがあれば、外部から持ってくる(調達）。これが、プロジェクト・チームとなるわけです。アライアンスの時代と言われていますが、１＋１＝３なのではなく、"H" + "e" + "l" + "l" + "o" = "Hello" な時代というのが本質では無いかと思います。&lt;br /&gt;
&lt;br /&gt;
　それでは、どんなアイデアを形にすべきか？闇雲にアイデアを形にしていったとしても、事業として成り立たない可能性だってあります。俗に言う「スタートアップは、どんな問題を解決するのか？が明確でなければならない」とは、世の人々のために役立ち支持され、事業として成立するようなアイデアですか？を端的に問うたものです。ITにより様々なルールが変更され、従来のビジネスモデルが成立しない中、何を選択し、何に集中していくのか？マネジメントに携わる人は、本当に厳しい課題を突きつけられていると思います。&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/364436233378282478-6787255733424557322?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/6787255733424557322/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=6787255733424557322" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/6787255733424557322?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/6787255733424557322?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/12/blog-post_08.html" title="アイデアを形にする（「アイデアの９９％」を読んで）" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUMDSX46cSp7ImA9WhRRGEo.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-6871361225756184593</id><published>2011-12-03T10:57:00.000+09:00</published><updated>2011-12-03T10:57:58.019+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-03T10:57:58.019+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IT" /><title>ブログの役割（時代は、やっぱりソーシャルなのかもしれない…）</title><content type="html">Bloggerのレイアウトを元に戻した。動的ビューは、全体を見渡すには良いのだが、コード等が読みにくい。で、統計を見てみたのだが、投稿の内容によって閲覧のバラつきが顕著である。自分のポストする内容も、ごった煮なので波長の合う投稿と合わない投稿の格差が激しいというのも考えられるのかも..&lt;br /&gt;
　ブログの時代は終わった…とする煽り記事を目にする事もあるが、ブログに求められる役割が変わりつつあるのではないか？という気がしている。&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Twitter をやる人ならば、ちょっとした事は呟けば良い&lt;/li&gt;
&lt;li&gt;今日こんな事があったよ。それいいね！共感を得たければ Facebook にポストすれば良い&lt;/li&gt;
&lt;li&gt;なんか知らんけど、ワーッと固まって騒ぎたければ Google+ にポストすれば良い&lt;/li&gt;
&lt;/ul&gt;　Facebook というのは、連帯感を演出するには良いが、私には、ちょっと息が詰まる感じがして、そんなに楽しく無い。今はまだ、G+民というのは、どことなくギークっぽい人が多くて面白い。もしかしたら各サービスの役割が既に定着しているので、G+では、カテゴライズされたサークルを形成するというのが G+の役割なのかもしれない。嫁さんのブログの使い方だと、半分匿名のような緩い繋がりがあるようである。ただ、この繋がりは Twitter,Facebook,G+ 等に侵食されている気がしてならない。こうやって考えると、やっぱりソーシャルなのかな？と思う。ソーシャル、ソーシャルつうけど、元々、人間は社会的な生き物なので、その本質がデジタルになっただけなのだろう。&lt;br /&gt;
&lt;br /&gt;
　では、ここでブログの役割について考えてみよう。&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;独り言日記&lt;/li&gt;
&lt;li&gt;ある分野に特化した情報&lt;/li&gt;
&lt;li&gt;密度の濃い情報&lt;/li&gt;
&lt;li&gt;距離を置いたマスメディア的な繋がり&lt;/li&gt;
&lt;/ul&gt;と、こんなところに集約しつつあるでは？&lt;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/364436233378282478-6871361225756184593?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/6871361225756184593/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=6871361225756184593" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/6871361225756184593?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/6871361225756184593?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/12/blog-post.html" title="ブログの役割（時代は、やっぱりソーシャルなのかもしれない…）" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEEGQXgycCp7ImA9WhRRGEU.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-3432767674171279714</id><published>2011-12-01T23:00:00.003+09:00</published><updated>2011-12-03T12:23:40.698+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-03T12:23:40.698+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>インテル ソフトウェア カンファレンス 2011 札幌に参加してきた</title><content type="html">札幌JRホテルで開催され、昼食付きで、「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4877832602/tigerblade-22"&gt;Cilkがやってきた&lt;/a&gt;」という本まで貰って、高速並列化の話まで聞けて凄いカンファレンスでした。なのに、席が空いている…。これはもったいないです。2012年も開催したいそうなので、札幌のC++の技術者は是非とも参加するようにしましょう。&lt;br /&gt;
&lt;br /&gt;
　最初のセッションは、intel CPU Sandy Bridge の最適化について、SSEの流れを汲むベクトル・エクステンションのバス長が２倍の２５６に拡張されたAVXというものが登場とか、１次キャッシュ～３次キャッシュの構造やら、分岐予測の話やら、ロード＋演算の組がμops になった話、最初からレジスタにZEROを割り当てるゼロ・イディオムの話、プリフェッチ・キューの話やら、深良い話が聞けた。ハイパースレッドでは、コアで、キャッシュを共有するよなんてのは知らなかったです。&lt;br /&gt;
　tipsぽい話では、Sandy Bridge では、ローテーションとシフトの速度が逆転してますよとか、16bit命令と32bit命令を混在させるとペナルティ食らいますよとか、ロードバンク衝突があるので先にロードを済ませましょうとか、将来的には、CPUによる乱数生成命令がサポートされますよとか、RSDTC の拡張命令として、コア番号と経過クロックの組を返す命令がサポートされますよとか…。こうやって振り返ってみると、結構ボリュームがあります。&lt;br /&gt;
&lt;br /&gt;
　続いて、インテル Parallel Studio XE の使い方から、コンパイラ・オプションの話。これまた、ためになる内容が盛りだくさん。普通はインテルのコンパイラを使うだけで、何もしなくても 30%ぐらいは速くなるから、人を導入して速度アップをするぐらいならコンパイラ買った方がマシって事になるみたいです。デモの内容を見ても、実際速くなってました。C++のコードを使って、OpenMPやら、自動ベクトル化(SSE命令)をしてマルチスレッドによる高速化なり、ベクトル演算による高速化なりを実現。コンパイル・オプションで最適化のヒントなんてのもあって、/Qguide4 とかすると、コンパイラが、「ここのベクトル化に失敗したでー」「ここのループは、マルチスレッドで並列化した方がいいでー」とか、べらべら羅列してくれて、面白い。&lt;br /&gt;
&lt;br /&gt;
　インテル Cilk Plus によるソリューションというセッションが、また面白かった。OpenMP を使って並列化させる事は、できるけども職人技が必要で、速度を上げる事は難しい。例えば、並列化するにあたって、ジョブの割り当てを工夫しないと１つのスレッドに負荷がかかって他のスレッドが遊んでしまうとか、メモリ・キャッシュを考慮して処理単位をメモリが集中している粒度に分けて並列化するとか、奥が深い。これらの問題をもっと簡単に書けるようにしましょうというのが、Cilkだ。&lt;br /&gt;
　ちなみに GCC の次期バージョンでは、Cilkが実装されると決定しているようなので、決してインテル独自の仕様に留めるつもりでは無いようです。Cilk の特徴は、大きく３つあるように思います。&lt;br /&gt;
&lt;br /&gt;
　１つ目は、MapReduce のように、並列化をサポートするための仕組みをサポートする事。下のコードは、動作検証していないので、雰囲気だけ味わってください。&lt;br /&gt;
&lt;pre&gt;cilk::reducer_list_append&amp;lt;char&amp;gt; res;
  cilk_for(int i = 'A'; i &amp;lt; 'Z'; ++i ) {
    res.push_back( static_cast&amp;lt;char&amp;gt;(i) );
  }
&lt;/pre&gt;　こうする事で並列化しながら順序を保って処理がされます。cilk::reducer_opadd&amp;lt;int&amp;gt; とかを宣言して、合計の計算を並列化してみたりできます。&lt;br /&gt;
&lt;br /&gt;
　２つ目は、副作用の無いループ中の演算表現。関数型言語を勉強していると、ピンとくるかと思います。私は、こう解釈しましたが、本当は、コンパイラがSSEの命令を使って最適化しやすい表記を考えたら、こうなったって事なのかもしれません。これも動作検証は未です。&lt;br /&gt;
&lt;pre&gt;y[:] += a * x[:];
&lt;/pre&gt;　配列に対して、レンジ演算が記述できます。&lt;br /&gt;
&lt;br /&gt;
　３つ目は、自動負荷分散。処理の単位をCilkが自動で分割し、スレッドへの処理割り当てを自動化してくれます。&lt;br /&gt;
&lt;br /&gt;
　特別講演は、ディジタル・ワークス株式会社さまのインテル・コンパイラー導入事例紹介。TBB の allocator とか、tbb::concurrent_hash_map,tbb::concurrent_queue とか、速くていいです！との事。&lt;br /&gt;
&lt;br /&gt;
　最後にインテル・アーキテクチャにおける並列分散処理のための技術交流サイト &lt;a href="http://www.isus.jp/"&gt;IA Software User Society&lt;/a&gt; がオープンしたので、皆さん是非参加してくださいとの事でした。会員になると、特別な資料とかも用意されています。無料です。&lt;br /&gt;
&lt;br /&gt;
　インテル・ジャパンの皆様、XLsoftの皆様、ディジタル・ワークスの皆様、ありがとうございました。楽しかったです。&lt;br /&gt;
&lt;br /&gt;
追記：Cilk は強烈で、今後を占う上で重要な役割を担いそうな印象を持っているのだが、この書き込みは人気が無いようだ…。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-3432767674171279714?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/3432767674171279714/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=3432767674171279714" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/3432767674171279714?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/3432767674171279714?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/12/2011.html" title="インテル ソフトウェア カンファレンス 2011 札幌に参加してきた" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUUAQXYzeSp7ImA9WhRREUk.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-3635928566010948105</id><published>2011-11-25T00:07:00.000+09:00</published><updated>2011-11-25T00:07:20.881+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-25T00:07:20.881+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mac" /><title>Unity MonoDevelop 文字化け備忘録</title><content type="html">結構探したのに、なかなか&lt;a href="http://www.sd-tech-blog.com/2011/01/monodevelopunity-for-mac.html"&gt;情報&lt;/a&gt;が無くて困った。&lt;br /&gt;
&lt;br /&gt;
補足すると、&lt;br /&gt;
/Applications/Unity/MonoDevelop.app/Contents/Frameworks/Mono.framework/Versions/Current/etc/gtk-2.0/gtkrc &lt;br /&gt;
のファイルを修正する。&lt;br /&gt;
&lt;br /&gt;
私の場合は、&lt;br /&gt;
font = "Lucida Grande 12" &lt;br /&gt;
ではなく &lt;br /&gt;
font = "Lucida Grande 14" &lt;br /&gt;
であった。 &lt;br /&gt;
これは、最後の gtk-font-name = "Lucida Grande 12" の部分ではなく、途中に記述されている部分なので、注意が必要だ。&lt;br /&gt;
これの後に、&lt;br /&gt;
font_name ="Hiragino Kaku Gothic Pro 10"&lt;br /&gt;
を追加する。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-3635928566010948105?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/3635928566010948105/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=3635928566010948105" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/3635928566010948105?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/3635928566010948105?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/11/unity-monodevelop.html" title="Unity MonoDevelop 文字化け備忘録" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C08FQHo5cCp7ImA9WhRSGE0.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-8555114857374277703</id><published>2011-11-21T00:10:00.000+09:00</published><updated>2011-11-21T00:10:11.428+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-21T00:10:11.428+09:00</app:edited><title>近況など</title><content type="html">時間がとれなくて、コーディングできてません。破綻してると思います。&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4862761178/tigerblade-22"&gt;「アイデアの９９％」&lt;/a&gt;最高に良いです。&lt;br /&gt;
　時々、自分の本の選び方とか、出来すぎてると思う事があります。あと、札幌ITリーディング(もうちょい戦略を持てという札幌市のIT企業強化事業)にて、都合良く、プロジェクトマネジメントのセミナーを受けて、３乗効果でインスピレーションを得たので、ビジョンを実現する事について書く予定です。&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/364436233378282478-8555114857374277703?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/8555114857374277703/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=8555114857374277703" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8555114857374277703?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8555114857374277703?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/11/blog-post_21.html" title="近況など" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0MARXw4cCp7ImA9WhRTGU8.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-8012959855948032941</id><published>2011-11-10T21:50:00.000+09:00</published><updated>2011-11-10T21:50:44.238+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-10T21:50:44.238+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>WSDL2Ws Tool で再チャレンジ</title><content type="html">WSDL2C で変換に失敗したスキーマを WSDL2Ws で再チャレンジ。結果は、やっぱりダメでしたが、まだ、こちらの方が希望が持てた。&lt;br /&gt;
&lt;br /&gt;
　WSDL2Ws.java 中に以下のコメントが残されていたからだ…。&lt;br /&gt;
&lt;pre&gt;
  //TODO the code require the attributes name at extension base types
  //different, the WSDL2Ws do not support it having same name at up and below.

  // The names of the inherited parms are mangled
  // in case they interfere with local parms.
  // String mangle = "";
  //if (i &gt; 0) {
  // mangle = "_" +
  //  Utils.xmlNameToJava(te.getQName().getLocalPart()) +
  //  "_";
  //}

&lt;/pre&gt;&lt;br /&gt;
　ひっかかっているのは、xsd ファイル中の以下のような定義だ&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
   &amp;lt;xsd:element name="Add" type="ogc:BinaryOperatorType"
      substitutionGroup="ogc:expression"/&amp;gt;
   &amp;lt;xsd:element name="Sub" type="ogc:BinaryOperatorType"
      substitutionGroup="ogc:expression"/&amp;gt;
   &amp;lt;xsd:element name="Mul" type="ogc:BinaryOperatorType"
      substitutionGroup="ogc:expression"/&amp;gt;
   &amp;lt;xsd:element name="Div" type="ogc:BinaryOperatorType"
      substitutionGroup="ogc:expression"/&amp;gt;
   &amp;lt;xsd:element name="PropertyName" type="ogc:PropertyNameType"
      substitutionGroup="ogc:expression"/&amp;gt;
   &amp;lt;xsd:element name="Function" type="ogc:FunctionType"
      substitutionGroup="ogc:expression"/&amp;gt;
   &amp;lt;xsd:element name="Literal" type="ogc:LiteralType"
      substitutionGroup="ogc:expression"/&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
まさに、type 属性が同じだけど、name 属性が異なるってやつだ。&lt;br /&gt;
はて、どうしたものか…。こいつら、大抵 enum で置き換えれそうだが、ソース吐き出すところまで全般に渡って手を入れないとダメそうだ…。とりあえず、スキーマを simpleType に置き換えて、後から enum にセコセコ修正する感じで逃げちゃうか？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-8012959855948032941?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/8012959855948032941/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=8012959855948032941" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8012959855948032941?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/8012959855948032941?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/11/wsdl2ws-tool.html" title="WSDL2Ws Tool で再チャレンジ" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0MGQn04eCp7ImA9WhRTGUw.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-1757188550855542130</id><published>2011-11-10T19:03:00.000+09:00</published><updated>2011-11-10T19:03:43.330+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-10T19:03:43.330+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>axis cpp があった</title><content type="html">　どうもリサーチ不足感は否めない…。よくよく探せば、&lt;a href="http://ws.apache.org/axis/cpp/"&gt;Axis C++ &lt;/a&gt;バージョンがあった。&lt;br /&gt;
&lt;br /&gt;
  どいつもこいつも、ジェネレータが出力するコードが C なんで、階層が深いと、入れ子のメンバー要素を取得｜生成して、その入れ子の要素を取得｜生成して、そのまた入れ子のメンバー要素を取得｜生成して、そのまた入れ子の要素を取得｜生成してってーーーーー長いっちゅうねーーーーーーーーーーーーーん。&lt;br /&gt;
&lt;br /&gt;
　こいつら全部ポインタです。しかも型が全部違うんで、再帰もできません。C 死ね。C 死ね。C 死ね。C 死ね。&lt;br /&gt;
C 死ね。C 死ね。C 死ね。C 死ね。&lt;br /&gt;
C 死ね。C 死ね。C 死ね。C 死ね。&lt;br /&gt;
C 死ね。C 死ね。C 死ね。C 死ね。&lt;br /&gt;
C 死ね。C 死ね。C 死ね。C 死ね。&lt;br /&gt;
C 死ね。C 死ね。C 死ね。C 死ね。&lt;br /&gt;
&lt;br /&gt;
　それで、WSDLからのコードジェネレータは、どこにあんねーーーーーん！って、探したら、ありました。&lt;a href="http://ws.apache.org/axis/cpp/arch/WSDL2Ws.html"&gt;WSDL2WS-Tool&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/364436233378282478-1757188550855542130?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/1757188550855542130/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=1757188550855542130" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/1757188550855542130?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/1757188550855542130?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/11/axis-cpp.html" title="axis cpp があった" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0MCR3s5eCp7ImA9WhRTGE8.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-7835991253259320263</id><published>2011-11-09T15:51:00.000+09:00</published><updated>2011-11-09T15:51:06.520+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-09T15:51:06.520+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>cスタイル整形備忘録</title><content type="html">自動生成されるコードの修正を結構やらなきゃいけない場合、スタイルが無茶苦茶だとしんどい。&lt;br /&gt;
&lt;a href="http://www.6809.net/tenk/html/lib/doc/astyle_j.htm"&gt;astyle &lt;/a&gt;を使用する。&lt;br /&gt;&lt;br /&gt;
apt-get install astyle &lt;br /&gt;&lt;br /&gt;
とりあえず、K&amp;R スタイルで整形するなり…&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;#!/bin/bash
for file in *.c
do
  astyle --style=kr -s2 -cc &amp;lt; $file &amp;gt; ${file%c}cc
done
for head in *.h
do
  astyle --style=kr -s2 -cc &amp;lt; $head &amp;gt; ${head%h}hpp
done
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-7835991253259320263?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/7835991253259320263/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=7835991253259320263" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/7835991253259320263?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/7835991253259320263?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/11/c.html" title="cスタイル整形備忘録" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkEGQXk4fyp7ImA9WhRTFU0.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-5581393275052833892</id><published>2011-11-06T00:50:00.002+09:00</published><updated>2011-11-06T00:57:00.737+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-06T00:57:00.737+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="boost" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>boost 勉強会 in 札幌に参加してきた</title><content type="html">　講師陣の皆様、ありがとうございました。まずは、お礼を申し上げます。&lt;br /&gt;
まず最初は、cpp_akira さんの &lt;a href="http://www.slideshare.net/faithandbrave/boostgeomtry"&gt;boost::geometry の話&lt;/a&gt;。コンセプト・ベースの部分は、設計の思想を知らないと使えないので、非常に為になる話でした。余談ですが、仕事上、geometry 系は使ってはいます。ただ、データ構造の関係でインナーポリゴンを一筆書きで扱っている事もあって、どちらかというと、boost::polygon の方でないと現状と合わないので、導入には至っていません。他には、図形の演算はデリケートな面があり、特にユーザさんが入力するデータや既存のデータには、恐ろしい構成点の組み合わせ（例:ポリゴンが閉じてるけど１点オーバランしている、穴空きポリゴンを一筆書きで表現しているが回しがねじれていて時計回りでも反時計周りでもない）への対応をしている。などがあります。挙動が変わると、まずいので、なかなか、切り替えるのも大変だったりします。後で、函数型のparaisoが刺激的で面白かったよという話をしたのですが、一応&lt;a href="http://www.paraiso-lang.org/haddock/ICFP2011-Lightining-Paraiso.pdf"&gt;リンク&lt;/a&gt;をはっときます。&lt;br /&gt;
&lt;br /&gt;
　で、uskz さんによる&lt;a href="https://public.me.com/yusuke1984/ja/"&gt;圏論のお話&lt;/a&gt;...圧倒的に会場を置き去りにして（と思う）、熱くHaskellいいよとまとまりました。個人的には、c++にはstd::cout やglobal 変数を更新するという恐ろしい函数の副作用がありますという次に、World が出てきたところがウケてました。先の並列化という面で考えれば、concept ベースのデータ構造に依存しない設計アプローチは、SIMDのような並列化とは相性が悪いのかな？と漠然と考えてました。&lt;br /&gt;
&lt;br /&gt;
　fadis_さんの&lt;a href="http://quaternion.sakura.ne.jp/study/container_facade.pdf"&gt;ContainerFacade&lt;/a&gt;、微妙に違いのあるコンテナに対して、なるべく少ない手数でアルゴリズムを実装できるようにしようという話でした。ベースにあるのは、stlではイテレータを介してコンテナにアクセスしているから、コンテナの要素を挿入／削除するような事ができない、そこで、なるべく多くのコンテナに対してコードの補完ができるようにしようというものです。聞いてて思ったのは、リンクドリストのような構造のものに２分探査のアルゴリズムを実装しても全くの無駄なので、このアプローチは便利なように見えて、実は良くないだろう...でした。この辺に対して考慮をし、合わないアルゴリズムは、コンセプトを満たしていないからエラーにするといった改良を加えれば、面白いのかなぁという感想です。すかさず、cpp_akiraさんが、ダメ出ししていたので、さすがだと感じました。&lt;br /&gt;
&lt;br /&gt;
　DigitalGhost さんの &lt;a href="https://github.com/dechimal/metaexpr"&gt;Template MetaPrograming as 式&lt;/a&gt; DigitalGhostさんワールドが展開されていたような...質問も無いですよね？で終了されてたのが、ウケてました。&lt;br /&gt;
&lt;br /&gt;
　主催者のhotwatermorningさんの&lt;a href="http://prezi.com/gjinq-q24jpw/read-pstadeoven-and-egg/"&gt;PStade.OvenとEggの実装を読む&lt;/a&gt; ソースの追い方がデジャヴな感じで、面白かったです。あっち読んで、こっち読んで、考えて、またあっち読んで...確かに、Eggを読むのはしんどそうです。&lt;br /&gt;
&lt;br /&gt;
egtraさんの char32_tとBoost.Xpressiveと、char16_t, char32_t ができたので、それを使いましょうという話で、文字コード変換が iconv か ICU 以外に特にライブラリが無くてどうしよう？という切実な訴え...道化師さんの &lt;a href="http://tricklib.com/cxx/ex/babel/"&gt;babel&lt;/a&gt; もあるけど...不便には違いないです。windows に限定すれば&lt;a href="http://grayhole.blogspot.com/2009/04/blog-post.html"&gt;文字コード変換&lt;/a&gt;のようなアプローチもあります。wconv.hpp は最初に書いた時点からは、若干設計が変わっていて、特殊化によってUNICODEとコードベース間の変換コードがカスタマイズできるよう考慮が加わってます。xpressive の対応の話も興味深かったです。これも、余談ですが、Linux で FreeType2 を利用した時は、char16_t でないと使えなくて、-fshort-wchar オプションを使用しました。&lt;br /&gt;
&lt;br /&gt;
　Kikairoya さんの &lt;a href="https://sites.google.com/site/kikairoya/file-cabinet/Boost6-sapporo.pdf"&gt;組み込みでこそC++を使う100の理由&lt;/a&gt; C++偏執狂には、面白すぎて、爆笑しまくり。楽しかったです。組み込みの世界のわからないチップの話を質問されて、例外とRTTIをオフにすれば、ooバイトぐらいに収まるので大丈夫ですと即答されていたのには、スゲーと感心してました。懇親会では、別の方KさんからチップセットのコンパイラがC++に対応していない実情もあるのでやむを得ない場合もあるけど、c++のコンパイラに通すと、型チェックを行ってくれるので有効な手法に間違いないという情報も得ました。&lt;br /&gt;
&lt;br /&gt;
　redbolzさんの &lt;a href="http://d.hatena.ne.jp/redboltz/20111030/1319972141"&gt;Boost.MSMの使い方&lt;/a&gt; 白状すると、ユースケースの中で、ステートチャート図だけは、何を書いていいのかさっぱりわかんねぇ状態の私には、耳が痛い話でもあり、有用な話でもありました。UMLからBoost.MSM のひな形コードを生成するツールに興味のある方は、ちょっと飲み会で話をしましょうとの事でした。&lt;br /&gt;
&lt;br /&gt;
　ライトニングでは、道化師さんの &lt;a href="http://www.slideshare.net/wraith13/cxx-tips1-include"&gt;#include の話&lt;/a&gt;、#include だけで、あそこまで話を引っ張れるのが凄いです。何でも、後から５分だよと聞かされて、ボリュームを減らしたのだとか...(^^;&lt;br /&gt;
懇親会でも、いろんな方と話ができて楽しかったです。&lt;br /&gt;
&lt;br /&gt;
　皆さん、ありがとうございました。&lt;br /&gt;
&lt;br /&gt;
追記：ひとつ、思い出しました。boost base64 への変換の実装は、iterator を利用しています。そのため、最終のバイト境界が３バイト以外では、終端を正しく終える事が出来ていません。Fadis_さんの ContainerFacade のアプローチならば、これをうまく扱えるのではないか？と感じました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-5581393275052833892?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/5581393275052833892/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=5581393275052833892" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/5581393275052833892?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/5581393275052833892?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/11/boost-in.html" title="boost 勉強会 in 札幌に参加してきた" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0MNQ34-eip7ImA9WhRTE04.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-3169002994694774803</id><published>2011-11-03T23:44:00.000+09:00</published><updated>2011-11-03T23:44:52.052+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-03T23:44:52.052+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BOOK" /><title>いろいろ</title><content type="html">　毎度の事ながら、いろいろで...&lt;br /&gt;
「東電陰謀説は、実は文部科学省〜経済産業省の引き起こしたブーメラン効果」というエントリーを上げようとしたけど、見つからないリンク先とかあって、めんどくさくなり、ポストするのをやめた。教育、広告、広報活動、手の込んだやらせ、歪曲した推進のための資料など、こんだけやってれば、ブーメランで返ってくるだろうという趣旨。記録に残っているものとしては、ウィキペディアのホルミシス効果の編集履歴などを見れば、面白いのではなかろうか、お暇な人はどうぞ。&lt;br /&gt;
&lt;br /&gt;
　考えてもみれば、ローカルBBS時代から、「朝のガスパール事件」など、この手のネガティブな芸風は確立されていたわけです。文字だけの対話には、ニュアンスの情報が無い上に記録に残されるので、受け手のちょっとした感情が増幅されてしまうのではないか？とも思います。もしかしたら、ニュアンスに文脈が託された日本語固有の問題なんじゃ？という気までします。梅田望夫さんが、日本残念と語った背景は、案外こんなところなのかも？と感じる今日この頃です。&lt;br /&gt;
&lt;br /&gt;
　東京出張で、地方自治情報化推進フェアと全国SaaSベンダー連合会に行ってきました。クラウドビジネスは、もう定着しつつあると感じました。かなりレッドオーシャンな感じです。そろそろ違う事も考えないと、駄目そうです。変化、速すぎ。出張レポートをまとめつつ、現実逃避の書き込み...です&lt;br /&gt;
&lt;br /&gt;
　本を買ってきました。&lt;br /&gt;
「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4862761178/tigerblade-22"&gt;アイデアの９９％&lt;/a&gt;」成功しないアイデア（ビジネス）には、何の価値も無いという事を肝に銘じよう&lt;br /&gt;
&lt;br /&gt;
「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4532316758/tigerblade-22"&gt;任せる技術&lt;/a&gt;」代替できない部分は置いて、代替できそうな部分は任せないと...苦手な部分は再考しよう&lt;br /&gt;
&lt;br /&gt;
「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4833419815/tigerblade-22"&gt;AsOne&lt;/a&gt;」本当は、こんな組織を目指さなきゃ駄目なんだろうなぁという趣旨&lt;br /&gt;
&lt;br /&gt;
「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4098251183/tigerblade-22"&gt;リーダーの条件が変わった&lt;/a&gt;」現状の再確認&lt;br /&gt;
&lt;br /&gt;
「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/448006561X/tigerblade-22"&gt;年金は本当にもらえるのか？&lt;/a&gt;」河野太郎先生の指令、国民も勉強しましょう。&lt;br /&gt;
&lt;br /&gt;
「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4532195799/tigerblade-22"&gt;BCG流経営者はこう育てる&lt;/a&gt;」参考のため&lt;br /&gt;
&lt;br /&gt;
「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/404110047X/tigerblade-22"&gt;諸行無常を生きる&lt;/a&gt;」震災をテーマにした本。大震災を前にして、諦めるという態度は、前向きに強く生きるという態度でもある。この言葉に惹かれました。&lt;br /&gt;
&lt;br /&gt;
　今週末の土曜日は、札幌 Boost 勉強会。なんか、いいネタ無いかなと思いつつも、移り気で、何一つものにならず...（汗）余裕無い中、講師陣の皆さん、今頃、必死こいてるのかな...&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/364436233378282478-3169002994694774803?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/3169002994694774803/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=3169002994694774803" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/3169002994694774803?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/3169002994694774803?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/11/blog-post.html" title="いろいろ" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEcCSX8-eSp7ImA9WhRQEko.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-4564572742242491238</id><published>2011-10-29T02:32:00.001+09:00</published><updated>2011-12-08T00:34:28.151+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-08T00:34:28.151+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>C++でSoapは、マイノリティ？</title><content type="html">ここんところ、プラットフォームに依存しない Soap ライブラリというテーマで、どハマリしてます。axis2 の wsdl2c では、xsd ファイル中の、abstract が処理できませんでした。GML の Filter も曲者でして、abstract な choise で４つのタイプに派生して、それぞれが、また、abstract で複雑に派生していきます。中には BinaryOp, UnaryOp とかもあって、&lt;s&gt;Sentence&lt;/s&gt;Statement(文)とExpression(式)までXMLで表現しているので、人手でコードを補完して書くレベルを超えてます。あわよくばパッチを当ててやろうか？と思って、SchemaCompiler.java を読んでみたもののパッと修正できる代物では無さそうでした。C++ のコードは、XSLT を使って処理しているようでしたが、xsd:include を使ってないので、ごった煮でコードが読みにくい。&lt;br /&gt;
　で、まともに処理できたのは、gSOAP でした。SOAP Toolkit を使って ISAPI Extension を記述し、mod_isapi を利用するという手もあるとは思いますが…。&lt;br /&gt;
　はたと、思い出したように akaxsio2 引っ張り出してみたんですが、コンパイル通りませんでした。strcpy とか使っている部分は、string.h を include する。アドレス計算している部分は、int から stddef.h の ptrdiff_t に変える。unsigned int でなく size_t を使うといったあたりまでは、パッチを当てれそうでしたが、mutable output_file&amp; の部分が、ちょっと厳しくて挫折しました。const output_file&amp; に変えて、const_cast 使えば、なんとかなるかも…。でも gml のスキーマを通すのは、並大抵の事ではなく、akaxiso2 も通さなかったような記憶があります。akaxiso もちょろちょろソースを見たのですが、相当な大作です…。今なら、fusion とか使って、もっとクールに表現できそうな気もするけど、xml ライブラリは、しんどいですわ。&lt;br /&gt;
　お前、OpenSoap にパッチ当ててたやん？どないしてん？と思っている方もいるかもしれないので、触れておくと、ComplexType と array がサポートされていないので、使えませんでした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-4564572742242491238?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/4564572742242491238/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=4564572742242491238" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/4564572742242491238?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/4564572742242491238?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/10/csoap.html" title="C++でSoapは、マイノリティ？" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0ANQX07eyp7ImA9WhdaGEw.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-2428137410915740884</id><published>2011-10-29T01:36:00.000+09:00</published><updated>2011-10-29T01:36:30.303+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-29T01:36:30.303+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="原発" /><title>放射能の航空測量の結果感想</title><content type="html">　10月に入って、東京も含めて航空測量の結果が公表されているようである。久しぶりにデータを見てみたが、その感想を述べてみようと思う。静観すると書いておいて、何故言及するか？というと、ヒステリック過ぎる人が多いからで、書いておいた方がいいかなと思ったからである。現在はセシウムの分布もだいぶ落ちてきており、福島を中心とした一部が高いだけである。日本の気候は雨が多いので、だいぶ流れたのではないかと思う。&lt;br /&gt;
　また、除染の効果なのか、野菜のベクレル数も下がってきているので、３～６月ほど気にする事も無くなってきたように思う。魚に関しては、引き続き注視したいが、全体としては、良い方向に流れているのではないだろうか？&lt;br /&gt;
　東京などは、トンデルの論文でも有意な結果かどうかわからない程度の量である事がわかる。&lt;br /&gt;
　今頃になって、大騒ぎしているが、正直、反応が遅すぎるだろうと思う。もう線量は落ちてきていて、外部からちょろっと被曝する分には、どうって事は無いと思う。そういう意味では、つくづく事故直後の対応が残念でならない。SPEEDIの結果を有効活用できたはずである。発表してたとしても、せいぜい「痛いニュース」で大騒ぎされたぐらいで、日本ではパニックになる事は無かっただろうに…。&lt;br /&gt;
　尚、汚染の高い地域に関して、安全と言えるのかどうかについては、また別問題である。これについては、引き続き静観しようと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-2428137410915740884?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/2428137410915740884/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=2428137410915740884" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/2428137410915740884?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/2428137410915740884?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/10/blog-post_29.html" title="放射能の航空測量の結果感想" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkQNQHczeyp7ImA9WhdaFk8.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-7565904989886060757</id><published>2011-10-26T19:19:00.000+09:00</published><updated>2011-10-26T19:19:51.983+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-26T19:19:51.983+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="boost" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>XMLのschemaに日本語の要素名は、いい迷惑 on apache axis2c</title><content type="html">&lt;a href="http://grayhole.blogspot.com/2011/10/blog-post_26.html"&gt;正常な前処理トークンとなりません&lt;/a&gt;の続き&lt;br /&gt;
要素名が日本語になっている部分を修正し、文法上エラーにならないようにして、wsdl2c で生成したソースファイルの中で、axis2_extension_mapper.c に対して、マッピングの修正をかける事にします。自動生成なので、コピペ・コーディングの変数名に修正をかけるのは、ちょっとしんどいので、boost preprocessor の出番です。&lt;br /&gt;
&lt;pre&gt;

        /**
         * axis2_extension_mapper.c
         *
         * This file was auto-generated from WSDL
         * by the Apache Axis2/Java version: 1.6.1  Built on : Aug 31, 2011 (12:23:23 CEST)
         */

        #include "axis2_extension_mapper.h"

        #include "adb_foo_type0.h"
        #include "adb_foo_type1.h"
        #include "adb_Bar.h"
        
        // ここ
        #include &amp;lt;boost/preprocessor.hpp&amp;gt;
        #include &amp;lt;boost/preprocessor/cat.hpp&amp;gt;
        #include &amp;lt;boost/preprocessor/seq/for_each.hpp&amp;gt;
        #include &amp;lt;boost/preprocessor/tuple/elem.hpp&amp;gt;
        #include &amp;lt;boost/preprocessor/stringize.hpp&amp;gt;

#define TYPE_LIST \
(("要素名に","adb_要素名に",foo_type0))\
(("日本語を","adb_日本語を",foo_type1))\
(("使うなゴラー","adb_使うなゴラー",bar))

#define ADB_CREATE_MACRO(r,data,elem)  \
   if(0 == axutil_strcmp(type, BOOST_PP_TUPLE_ELEM(3,0,elem))) { \
       return (adb_type_t*) BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_create(env))); \
   }

#define ADB_CREATE_DEFAULT_MACRO(r,data,elem) \
   if(0 == axutil_strcmp(default_type, BOOST_PP_TUPLE_ELEM(3,0,elem))) { \
       return (adb_type_t*) BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_create(env))); \
   }

#define ADB_FREE_MACRO(r,data,elem) \
   if(0 == axutil_strcmp(adb_type_get_type(_object), BOOST_PP_TUPLE_ELEM(3,1,elem))) { \
       return BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_free_obj))( \
              (BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_t))*) _object, env); \
   }

#define ADB_FREE_DEFAULT_MACRO(r,data,elem) \
   if(0 == axutil_strcmp(default_type, BOOST_PP_TUPLE_ELEM(3,1,elem))) { \
       return BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_free_obj))( \
              (BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_t))*) _object, env); \
   }

#define ADB_DESERIALIZE_MACRO(r,data,elem) \
   if(0 == axutil_strcmp(adb_type_get_type(_object), BOOST_PP_TUPLE_ELEM(3,1,elem))) { \
       return BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_deserialize_obj))( \
              (BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_t))*) _object, env, dp_parent, dp_is_early_node_valid, dont_care_minoccurs); \
   }

#define ADB_DESERIALIZE_DEFAULT_MACRO(r,data,elem) \
   if(0 == axutil_strcmp(default_type, BOOST_PP_TUPLE_ELEM(3,1,elem))) { \
       return BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_deserialize_obj))( \
              (BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_t))*) _object, env, dp_parent, dp_is_early_node_valid, dont_care_minoccurs); \
   }

#define ADB_SERIALIZE_MACRO(r,data,elem) \
   if(0 == axutil_strcmp(adb_type_get_type(_object), BOOST_PP_TUPLE_ELEM(3,1,elem))) { \
       return BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_serialize_obj))( \
              (BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_t))*) _object, env, om_node, om_element, tag_closed, namespaces, next_ns_index); \
   }

#define ADB_SERIALIZE_DEFAULT_MACRO(r,data,elem) \
   if(0 == axutil_strcmp(default_type, BOOST_PP_TUPLE_ELEM(3,1,elem))) { \
       return BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_serialize_obj))( \
              (BOOST_PP_CAT(adb_,BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3,2,elem),_t))*) _object, env, om_node, om_element, tag_closed, namespaces, next_ns_index); \
   }

        struct adb_type
        {
            axis2_char_t *property_Type;
        };

        /**
         * Auxiliary function to determine an ADB object type from its Axiom node.
         * @param env pointer to environment struct
         * @param node double pointer to the parent node to deserialize
         * @return type name on success, else NULL
         */
        axis2_char_t *AXIS2_CALL
        axis2_extension_mapper_type_from_node(
            const axutil_env_t *env,
            axiom_node_t** node)
        {
            axiom_node_t *parent = *node;
            axutil_qname_t *element_qname = NULL;
            axiom_element_t *element = NULL;

            axutil_hash_index_t *hi;
            void *val;
            axiom_attribute_t *type_attr;
            axutil_hash_t *ht;
            axis2_char_t *temp;
            axis2_char_t *type;

            while(parent &amp;amp;&amp;amp; axiom_node_get_node_type(parent, env) != AXIOM_ELEMENT)
            {
                parent = axiom_node_get_next_sibling(parent, env);
            }

            if (NULL == parent)
            {
                /* This should be checked before everything */
                AXIS2_LOG_ERROR(env-&amp;gt;log, AXIS2_LOG_SI,
                            "Failed in building adb object : "
                            "NULL elemenet can not be passed to deserialize");
                return AXIS2_FAILURE;
            }

            element = (axiom_element_t *)axiom_node_get_data_element(parent, env);

            ht = axiom_element_get_all_attributes(element, env);

            if (ht == NULL)
                return NULL;

            for (hi = axutil_hash_first(ht, env); hi; hi = axutil_hash_next(env, hi)) {
                axis2_char_t *localpart;
                axutil_hash_this(hi, NULL, NULL, &amp;amp;val);
                type_attr = (axiom_attribute_t *)val;
                localpart = axutil_qname_get_localpart(axiom_attribute_get_qname(type_attr, env), env);
                if (axutil_strcmp(localpart, "type") == 0) break;
            }

            type = axiom_attribute_get_value(type_attr, env);
            if (type != NULL &amp;amp;&amp;amp; (temp = axutil_strchr(type, ':')) != NULL)
            {
                if (axutil_strchr(temp, ':') != NULL)
                    type = temp + 1; /* Pointer arithmetic */
            }

            return type;
        }

        axis2_char_t* AXIS2_CALL
        adb_type_get_type(const adb_type_t *object)
        {
            if (object != NULL)
              return object-&amp;gt;property_Type;

            return NULL;
        }

        adb_type_t* AXIS2_CALL
        axis2_extension_mapper_create_from_node(
            const axutil_env_t *env,
            axiom_node_t** node,
            axis2_char_t *default_type)
        {
            axis2_char_t *type = axis2_extension_mapper_type_from_node(env, node);

            if (type != NULL)
            {
              // ここ
              BOOST_PP_SEQ_FOR_EACH(ADB_CREATE_MACRO, _, TYPE_LIST)
            }
            // ここ
            BOOST_PP_SEQ_FOR_EACH(ADB_CREATE_DEFAULT_MACRO, _, TYPE_LIST)

            return NULL;
        }

        axis2_status_t AXIS2_CALL
        axis2_extension_mapper_free(
            adb_type_t* _object,
            const axutil_env_t *env,
            axis2_char_t *default_type)
        {
            if (_object != NULL &amp;amp;&amp;amp; adb_type_get_type(_object) != NULL)
            {
              // ここ
              BOOST_PP_SEQ_FOR_EACH(ADB_FREE_MACRO, _, TYPE_LIST)
            }
            // ここ
            BOOST_PP_SEQ_FOR_EACH(ADB_FREE_DEFAULT_MACRO, _, TYPE_LIST)

            return AXIS2_FAILURE;
        }

        axis2_status_t AXIS2_CALL
        axis2_extension_mapper_deserialize(
            adb_type_t* _object,
            const axutil_env_t *env,
            axiom_node_t** dp_parent,
            axis2_bool_t *dp_is_early_node_valid,
            axis2_bool_t dont_care_minoccurs,
            axis2_char_t *default_type)
        {
            if (_object != NULL &amp;amp;&amp;amp; adb_type_get_type(_object) != NULL)
            {
                // ここ
                BOOST_PP_SEQ_FOR_EACH(ADB_DESERIALIZE_MACRO, _, TYPE_LIST)
            }
            // ここ
            BOOST_PP_SEQ_FOR_EACH(ADB_DESERIALIZE_DEFAULT_MACRO, _, TYPE_LIST)

            return AXIS2_FAILURE;
        }

        axiom_node_t* AXIS2_CALL
        axis2_extension_mapper_serialize(
            adb_type_t* _object,
            const axutil_env_t *env,
            axiom_node_t* om_node,
            axiom_element_t *om_element,
            int tag_closed,
            axutil_hash_t *namespaces,
            int *next_ns_index,
            axis2_char_t *default_type)
        {
            if (_object != NULL &amp;amp;&amp;amp; adb_type_get_type(_object) != NULL)
            {
                // ここ
                BOOST_PP_SEQ_FOR_EACH(ADB_SERIALIZE_MACRO, _, TYPE_LIST) 
            }
            // ここ
            BOOST_PP_SEQ_FOR_EACH(ADB_SERIALIZE_DEFAULT_MACRO, _, TYPE_LIST) 

            return AXIS2_FAILURE;
        }
    
&lt;/pre&gt;&lt;br /&gt;
  こういうのって、精神的に消耗しますね…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-7565904989886060757?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/7565904989886060757/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=7565904989886060757" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/7565904989886060757?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/7565904989886060757?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/10/xmlschema-on-apache-axis2c.html" title="XMLのschemaに日本語の要素名は、いい迷惑 on apache axis2c" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEECQHw7fyp7ImA9WhdaFkw.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-4371775394949812803</id><published>2011-10-26T17:11:00.000+09:00</published><updated>2011-10-26T17:11:01.207+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-26T17:11:01.207+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="boost" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>正常な前処理トークンとなりません</title><content type="html">XML のスキーマ定義ファイルの要素名に日本語を使うやつがいて、そのおかげで、apache axis2 を使って、wsdlファイルからcソースを自動生成したのだが、ファイル名と変数名が日本語で出力されてしまった。ぬぉーーーっ、設計したやつ何考えとんじゃーと怒りながら、対策を考えた末、boost preprocessor で対処するのが一番だろうとテストしてみたが、一筋縄ではない。こういう設計した人に限って、別にXMLの仕様には反していませんよね？とか言いそうな気がして、ひとり、ぼやきまくっていた…。&lt;br /&gt;
　どこで詰まってるんやろ？と追試していると、どうやらマクロ展開する過程で、１回処理した直後に、規格通りかどうかのチェックが入っているからと推察する。&lt;br /&gt;
&lt;pre&gt;#include &amp;lt;boost/preprocessor/cat.hpp&amp;gt;
#include &amp;lt;boost/preprocessor/tuple/elem.hpp&amp;gt;
#include &amp;lt;boost/preprocessor/seq/for_each.hpp&amp;gt;
#include &amp;lt;boost/preprocessor/stringize.hpp&amp;gt;

#define TYPE_LIST \
((システム,1))\
((x,2))\
((y,4))\
((z,3))

#define MACRO(r, data, elem) BOOST_PP_STRINGIZE(BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,elem), _hoge_),BOOST_PP_TUPLE_ELEM(2,1,elem)))

BOOST_PP_SEQ_FOR_EACH(MACRO, _, TYPE_LIST)
&lt;/pre&gt;&lt;p&gt;x.cpp:14:1: エラー: "�" と "_hoge_" を貼付けましたが正常な前処理トークンとなりません&lt;br /&gt;
&lt;/p&gt;　こいつを避けるためには、日本語部分は最初から文字列リテラルとして記述しておく必要がありそうだ。幸い、日本語部分の表現は、１種類につき2通りしかないので、BOOST_PP_TUPLE_ELEM で対処しても、そんなにしんどくなさそうだ。&lt;br /&gt;
UTF-8 が標準ならば…と、ちょっと考えてしまう一幕でした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-4371775394949812803?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/4371775394949812803/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=4371775394949812803" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/4371775394949812803?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/4371775394949812803?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/10/blog-post_26.html" title="正常な前処理トークンとなりません" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C08MR3w9eyp7ImA9WhdaE0U.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-1465122304355650977</id><published>2011-10-22T22:35:00.001+09:00</published><updated>2011-10-23T23:58:06.263+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-23T23:58:06.263+09:00</app:edited><title>いろいろ</title><content type="html">　iTunes の環境を Windows から MacBook に変更しました。家での環境は、まじめに MacBook をメインにしようと思っています。Scansnap は、mac バージョンを間違って買ったのですが、心のどこかで確信的間違えたのではないか？と思うようになりました。&lt;br /&gt;
&lt;br /&gt;
本日は、「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4062171392/tigerblade-22"&gt;大震災の後で人生について語るということ&lt;/a&gt;」と「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4093881898/tigerblade-22"&gt;日本の未来について話そう&lt;/a&gt;」の２冊を購入した。G＋の方で紹介してもらった「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4150309841/tigerblade-22"&gt;虐殺器官&lt;/a&gt;」も、ちょい前にゲットした。どうでもいい事ですが、Web+DB 本屋に置いてなくて、がっくし...&lt;br /&gt;
&lt;br /&gt;
ギリシャの暴動を見ていると、「ないものねだり論者」というのは、世界的な潮流なのではないか？と、同意したくなってきました。違和感を感じている部分と、同意したい部分と２通りあります。日本の震災の放射能に関する考え方の分断では、２通りの人間がいるという事なのかもしれないです。他人を心配する事で、安全とする人たちへの態度を硬化させるグループと、単純に文句を言うだけのグループです。前者の中にも、好きになれない例外の人はいますけど...。隣人への愛という点では、前者のグループも、そこからスタートしているので、そこを見間違えてはいけないと思います。それだけです。&lt;br /&gt;
隣国の韓国も、なかなかのものです。韓国の現状を見ていると、グローバル競争の元に、やりたいようにやったらLG電子やサムスンなど、市場を制覇する事ができたが、気がつけば、制覇した分だけ未曾有の借金が残っていて、LG電子は赤字転落で、液晶パネルの競争は国家的なダンピングだったのではないか？とも思えてきます。円高やべぇと騒いでたけども、実は白川総裁の考え方が正しくて、世界中の皆が間違っていたのでは？とも思えてきます。経済は雲をつかむようで、ほんと難しいです。世界経済もDQNが牛耳っていた？？？&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/364436233378282478-1465122304355650977?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/1465122304355650977/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=1465122304355650977" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/1465122304355650977?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/1465122304355650977?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/10/blog-post_22.html" title="いろいろ" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0INQHkzfyp7ImA9WhdaEEw.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-2949930505713875855</id><published>2011-10-19T19:19:00.000+09:00</published><updated>2011-10-19T19:19:51.787+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T19:19:51.787+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>XMLを処理するのに…</title><content type="html">Windows で C++ にて XML を処理しようと思ったら、考えられそうな選択肢がいくつかあります。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;LibXML2&lt;/li&gt;
&lt;li&gt;Expat&lt;/li&gt;
&lt;li&gt;MSXML&lt;/li&gt;
&lt;li&gt;TinyXML&lt;/li&gt;
&lt;li&gt;XMLLite&lt;/li&gt;
&lt;li&gt;Xerces-C++&lt;/li&gt;
&lt;/ul&gt;そこで、なるべくならプラットフォームを固定して書きたくないので、MSXML と XMLLite が候補から外れます。&lt;br /&gt;
LibXML2 でやろうとしたら、ICU か iconv あたりをなんとかしないといけません。正直 iconv はmsvc でコンパイルするのが困難です。libiconv for windows ありますが、vc で、すんなりコンパイルが通りません。じゃあ ICU だわさ？って、ICUを使おうとすると、icu.lib が無いとか変なリンクエラーが出て萎えてしまいます。ICU も大げさな感じがして、使うのをちょっと躊躇われるのという事情もあります。&lt;br /&gt;
おまえ、選り好みが激しすぎと怒られそうですが、Xerces-C++ も、なんか、あんまり好きじゃないんです。&lt;br /&gt;
TinyXML もいいんですけど、ちょっと考えてしまう…（こんな事ばかり書いてると、いい加減に袋叩きにあいそう）。&lt;br /&gt;
&lt;br /&gt;
そうすると残されたのは、Expat って事になります。ところが、この Expat って、SJIS に対応していないんですよね…。APIで&lt;a href="http://yebisuya.dip.jp/Software/expatJP/"&gt;日本語対応する&lt;/a&gt;って事も可能なんですが、なんというか、どうもしっくり来ない。XMLの構文を解析するついでに、文字コード変換もやりましょうという思想なんで、1文字か2文字づつコード変換の処理をしなきゃならない。これ、文字コード変換ライブラリのメンテナンスも考えたら、結構大変です。SJIS に限って言えば、SJIS第一バイトの場合は２バイト処理します。なんつーか、もやもや～とするんですよねー。&lt;br /&gt;
&lt;br /&gt;
で、結論は何かと言うと、そもそも wchar_t が嫌い。これに尽きるんですわ。UTF-8 は、ほんと良く出来てると思います。&lt;br /&gt;
&lt;br /&gt;
結局、自分の好みでやってくと、「&lt;a href="http://grayhole.blogspot.com/2009/04/blog-post.html"&gt;文字コード変換&lt;/a&gt;」と「&lt;a href="http://grayhole.blogspot.com/2008/11/expat.html"&gt;expatで遊ぼ&lt;/a&gt;」を組み合わせて、こんな感じになってしまいました。ただ、encoding の指定が全然関係ないやん…って部分が気に入りません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;expat.h&amp;gt;
#include &amp;lt;boost/shared_ptr.hpp&amp;gt;
#include &amp;lt;boost/foreach.hpp&amp;gt;

#include "codepage.hpp"
#include "wconv.hpp"

class xml_node;

class xml_node {
public:
&amp;nbsp; xml_node( const XML_Char* name ) : node_name_(name) {}
public:
&amp;nbsp; std::basic_string&amp;lt;XML_Char&amp;gt; &amp;nbsp;node_name_;
&amp;nbsp; std::basic_string&amp;lt;XML_Char&amp;gt; &amp;nbsp;node_value_;
&amp;nbsp; std::vector&amp;lt; boost::shared_ptr&amp;lt;xml_node&amp;gt; &amp;gt; childs_;
};


class xml_holder {
public:
&amp;nbsp; std::vector&amp;lt; boost::shared_ptr&amp;lt;xml_node&amp;gt; &amp;gt; &amp;nbsp;stack_;
&amp;nbsp; boost::shared_ptr&amp;lt;xml_node&amp;gt; &amp;nbsp;current_;
};

void starter(void* userData, const XML_Char* name, const XML_Char* attrs[]) {
&amp;nbsp; xml_holder* holder = reinterpret_cast&amp;lt;xml_holder*&amp;gt;(userData);
&amp;nbsp; holder-&amp;gt;stack_.push_back( holder-&amp;gt;current_ );
&amp;nbsp; boost::shared_ptr&amp;lt;xml_node&amp;gt; element( new xml_node( name ) );
&amp;nbsp; holder-&amp;gt;current_-&amp;gt;childs_.push_back( element );
&amp;nbsp; holder-&amp;gt;current_ = element;
}

void ender( void* userData, const XML_Char* name) {
&amp;nbsp; xml_holder* holder = reinterpret_cast&amp;lt;xml_holder*&amp;gt;(userData);
&amp;nbsp; holder-&amp;gt;current_ = holder-&amp;gt;stack_.back();
&amp;nbsp; holder-&amp;gt;stack_.pop_back();
}

void data( void* userData, const XML_Char* s, int len ) {
&amp;nbsp; xml_holder* holder = reinterpret_cast&amp;lt;xml_holder*&amp;gt;(userData);
&amp;nbsp; holder-&amp;gt;current_-&amp;gt;node_value_.assign( s, s + len );
}

void trace( int depth, boost::shared_ptr&amp;lt;xml_node&amp;gt; elem ) {
&amp;nbsp; for( int i = 0; i &amp;lt; depth; ++i ) { std::cout &amp;lt;&amp;lt; " "; }
&amp;nbsp; std::cout &amp;lt;&amp;lt; elem-&amp;gt;node_name_ &amp;lt;&amp;lt; ":" &amp;lt;&amp;lt; code_to_code&amp;lt;CP_ACP,CP_UTF8&amp;gt;(elem-&amp;gt;node_value_) &amp;lt;&amp;lt; std::endl;
&amp;nbsp; BOOST_FOREACH( boost::shared_ptr&amp;lt;xml_node&amp;gt; e, elem-&amp;gt;childs_ ) {
&amp;nbsp; &amp;nbsp; trace( depth+1, e );
&amp;nbsp; }
}

bool parse_xml( const std::string&amp;amp; xml ) {
&amp;nbsp; xml_holder holder;
&amp;nbsp; holder.current_ = boost::shared_ptr&amp;lt;xml_node&amp;gt;( new xml_node( "root" ) );
&amp;nbsp; XML_Parser &amp;nbsp;parser = XML_ParserCreate("UTF-8");
&amp;nbsp; if( !parser ) return false;
&amp;nbsp; XML_SetUserData( parser, &amp;amp;holder );
&amp;nbsp; XML_SetElementHandler( parser, starter, ender );
&amp;nbsp; XML_SetCharacterDataHandler( parser, data );
&amp;nbsp; int iseof = 0;
&amp;nbsp; XML_Parse( parser, xml.c_str(), xml.size(), iseof );
&amp;nbsp; XML_ParserFree( parser );
&amp;nbsp; trace( 0, holder.current_ );
&amp;nbsp; return !iseof;
}

#include &amp;lt;fstream&amp;gt;

int main(int argc, char* argv[] ) {
&amp;nbsp; if( argc != 2 ) return 1;
&amp;nbsp; std::ifstream ifs( argv[1] );
&amp;nbsp; std::string xml;
&amp;nbsp; std::string line;
&amp;nbsp; while( ifs.good() ) {
&amp;nbsp; &amp;nbsp; std::getline( ifs, line );
&amp;nbsp; &amp;nbsp; xml += line;
&amp;nbsp; &amp;nbsp; //std::cout &amp;lt;&amp;lt; line &amp;lt;&amp;lt; std::endl;
&amp;nbsp; }
&amp;nbsp; //std::cout &amp;lt;&amp;lt; std::endl;

&amp;nbsp; parse_xml( code_to_code&amp;lt;CP_UTF8,CP_ACP&amp;gt;(xml) );

&amp;nbsp; return 0;
}


&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-2949930505713875855?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/2949930505713875855/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=2949930505713875855" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/2949930505713875855?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/2949930505713875855?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/10/xml.html" title="XMLを処理するのに…" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DE4FRHo_eCp7ImA9WhdbFEo.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-3679171465782286328</id><published>2011-10-13T12:35:00.000+09:00</published><updated>2011-10-13T12:35:15.440+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-13T12:35:15.440+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="boost" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>spirit::qi raw 習作</title><content type="html">&lt;pre&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;boost/spirit/include/qi.hpp&amp;gt;


int main() {
  std::string src = "123456789";
  int a, b, c;
  
  namespace qi = boost::spirit::qi;
  bool result = qi::phrase_parse( 
    src.begin(), src.end(), 
    qi::raw[ qi::repeat(2)[qi::digit] ]
    &amp;gt;&amp;gt; qi::raw[ qi::digit &amp;gt;&amp;gt; qi::digit ]
    &amp;gt;&amp;gt; qi::int_
    ,
    qi::ascii::space,
    a, b, c
  );

  if( result )  std::cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; "," &amp;lt;&amp;lt; b &amp;lt;&amp;lt; "," &amp;lt;&amp;lt; c &amp;lt;&amp;lt; std::endl;
  else std::cout &amp;lt;&amp;lt; "fault" &amp;lt;&amp;lt; std::endl;

  return 0;
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-3679171465782286328?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/3679171465782286328/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=3679171465782286328" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/3679171465782286328?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/3679171465782286328?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/10/spiritqi-raw.html" title="spirit::qi raw 習作" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0UGQHg-eCp7ImA9WhdbE0w.&quot;"><id>tag:blogger.com,1999:blog-364436233378282478.post-9114186667280996591</id><published>2011-10-11T16:37:00.004+09:00</published><updated>2011-10-11T16:47:01.650+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-11T16:47:01.650+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="boost" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>boost::range 習作３ (reference)</title><content type="html">&lt;pre&gt;#include &amp;lt;boost/assign.hpp&amp;gt;
#include &amp;lt;boost/bind.hpp&amp;gt;
#include &amp;lt;limits&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;boost/range/algorithm/for_each.hpp&amp;gt;
#include &amp;lt;boost/foreach.hpp&amp;gt;
#include &amp;lt;boost/ref.hpp&amp;gt;

struct minmax {
private:
  int max_;
  int min_;
public:
  minmax() : min_(std::numeric_limits&amp;lt;int&amp;gt;::max()), max_(std::numeric_limits&amp;lt;int&amp;gt;::min()) {}
  void operator() (int val) {
    min_ = std::min( min_, val );
    max_ = std::max( max_, val );
  }

  int get_min() const { return min_; }
  int get_max() const { return max_; }

};

int main(int argc, const char* argv[]) {
  using namespace boost::assign;

  std::vector&amp;lt;int&amp;gt; input;
  input += 1,2,3,4,5,6,7,8,9;

  {
    minmax mm;

    std::cout &amp;lt;&amp;lt; "range foreach with functor" &amp;lt;&amp;lt; std::endl;
    boost::for_each( input, mm );
    std::cout &amp;lt;&amp;lt; mm.get_min() &amp;lt;&amp;lt; "," &amp;lt;&amp;lt; mm.get_max() &amp;lt;&amp;lt; std::endl;
  }
  {
    minmax mm;
    std::cout &amp;lt;&amp;lt; "range foreach with bind" &amp;lt;&amp;lt; std::endl;
    boost::for_each( input, boost::bind( &amp;amp;minmax::operator(), &amp;amp;mm, _1 ) );
    std::cout &amp;lt;&amp;lt; mm.get_min() &amp;lt;&amp;lt; "," &amp;lt;&amp;lt; mm.get_max() &amp;lt;&amp;lt; std::endl;
  }
  {
    minmax mm;
    std::cout &amp;lt;&amp;lt; "macro base foreach" &amp;lt;&amp;lt; std::endl;
    BOOST_FOREACH( int val, input ) {
      mm( val );
    }
    std::cout &amp;lt;&amp;lt; mm.get_min() &amp;lt;&amp;lt; "," &amp;lt;&amp;lt; mm.get_max() &amp;lt;&amp;lt; std::endl;
  }
  return 0;
}
&lt;/pre&gt;&lt;br /&gt;
追記：これは、1,9 の集合を返す関数に変形すべき？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/364436233378282478-9114186667280996591?l=grayhole.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://grayhole.blogspot.com/feeds/9114186667280996591/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=364436233378282478&amp;postID=9114186667280996591" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/9114186667280996591?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/364436233378282478/posts/default/9114186667280996591?v=2" /><link rel="alternate" type="text/html" href="http://grayhole.blogspot.com/2011/10/boostrange-reference.html" title="boost::range 習作３ (reference)" /><author><name>tiger</name><uri>http://www.blogger.com/profile/02799507690565143487</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_tBMBOjup_WA/SWygKkng0VI/AAAAAAAADhQ/MaSFIdRWEek/S220/image_preview.jpeg" /></author><thr:total>0</thr:total></entry></feed>

