tag:blogger.com,1999:blog-70054058146898843502023-11-16T23:40:53.078+09:00mumumuの日記Development, Translation, daily life, thoughts, and so on.mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.comBlogger236125tag:blogger.com,1999:blog-7005405814689884350.post-71954810184150536382013-04-26T19:34:00.000+09:002013-04-27T23:14:57.848+09:00moved to github.io<a href="http://mumumu.github.io/blog/2013/04/26/trying-to-write-blog-on-github-dot-io/">http://mumumu.github.io/blog/2013/04/26/trying-to-write-blog-on-github-dot-io/</a><br />
<br />
github.io にブログを移行してみることにした。これがここでの最後のエントリになる。<br />
<br />
Google の様々なサービスとの連携は素晴らしいと思う。けど、少し気分転換をしたいのと、プログラミング的な記事を書く時に gist に書かないと不便だという点は気になっていた。<br />
<br />
けど、気分転換という面が一番大きい。 github.io にしたって、画像の管理が面倒だという欠点はあるわけだし。どこのブログエンジンに行ってもぎゃあぎゃあいうなら自作しろ、という話である。<br />
<br />
久しくここに書いていなかったけれども、2013年に入って生活も随分変わりました。いろんな意味で丸くなりそうな気がします。けれども、何があっても、いろんなことをプラスに変えていけるような動きをしていきたい。初心は忘れてはいけない。そう思います。<br />
<br />
ですので、このブログの続きは github.io をご覧くださいませ。宜しくお願いします。mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-89750124853921955462013-01-01T20:53:00.002+09:002013-01-01T20:53:33.040+09:00Happy New Year 2013旧年中は大変お世話になりました。
本年も宜しくお願い致します(*´〜`)
今年はいろんな意味で変化が大きい年になりそうです。
そんな変化の波も頑張って乗り越えていきたいですです。mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-72891914384952814762012-12-24T19:53:00.001+09:002012-12-25T00:36:44.795+09:00Bad arg length for Socket::pack_sockaddr_in - tcp socket communication by Perl<a href="http://www.perlmonks.org/?node_id=642313">http://www.perlmonks.org/?node_id=642313</a><br />
<br />
Perl を久々に触っていて、TCP 通信のコードを書こうと思った。ただ、自分がHACKしようと思っているソフトウェアはモダンなライブラリを使っておらず、低レベルなAPIを使っていたのでそれに合わせることにした。<br />
<br />
そこで書いたのが以下のコードである。<br />
<br />
<script src="https://gist.github.com/4368762.js"></script><br />
このコードを実行すると「Bad arg length for Socket::pack_sockaddr_in, length is 14, should be 4 at invalid_tcp_code.pl line 15.」というエラーになる。なんでやねんと数十分悩み、よくよく <a href="http://perldoc.perl.org/Socket.html#%24sockaddr-%3d-pack_sockaddr_in-%24port%2c-%24ip_address">pack_sockaddr_in関数のドキュメント</a> を読んでみると、以下のようになっていた。第2引数には <a href="http://perldoc.perl.org/Socket.html#%24ip_address-%3d-inet_aton-%24string">inet_aton 関数</a>の戻り値を渡せとある。<br />
<br />
Takes two arguments, a port number and an opaque string (as returned by inet_aton(), or a v-string).<br />
<br />
要するにドキュメントはよく読みましょうね、、ってことで。。<br />
動くコードの全体は以下の通りである。www.google.com に HTTP通信するコードだ。エラー処理は省略しているので注意。<br />
<br />
<script src="https://gist.github.com/4368792.js"></script><br />mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-49847660722403013832012-12-24T03:50:00.000+09:002012-12-24T03:54:13.660+09:00[memo] Apache Core Dump on CentOSCentOS で Apacheモジュール のデバッグをしていて、 Core Dump を吐かせようと思ったときに少し迷ったのでここにメモしておく。<br />
<br />
Core Dump はプログラムがクラッシュしたときのメモリの状態を示すものであり、gdb でいろいろ解析ができるのでデバッグ時に重宝するのだが、サイズが結構巨大になる。それに Production な環境では不要なものなので、ディストリビューションはあの手この手で Core Dump を出力しないようにしているのが普通だ。<br />
<br />
ググるといろんなやり方が書いてあるけれども、ディストリビューションによって手順が違うのに加えて、一般論も混じっていてかなりわかりづらい。CentOS(Red Hat系ディストリビューション) で一番簡単なのは以下だ。<br />
<br />
これは、/etc/init.d/functions で ulimit を環境変数で毎回設定していることによる。<br />
<br />
----<br />
<br />
1. httpd.conf に CoreDumpDirectory を追加。<br />
<br />
CoreDumpDirectory /tmp/<br />
<br />
2. コアファイルの ulimit 設定を指定して Apache を再起動<br />
<br />
DAEMON_COREFILE_LIMIT=unlimited; /etc/init.d/httpd restartmumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-61361736541534302812012-12-15T19:50:00.000+09:002012-12-16T22:33:05.516+09:00Titanium 2.x traps<br />
これは、<a href="http://atnd.org/events/34644">Titanium Mobile Advent Calendar 2012</a> の参加エントリです。<br />
<br />
いやーついに <a href="http://developer.appcelerator.com/blog/2012/12/announcing-titanium-3-0.html">Titanium 3.0 がリリースされました</a>ね! このエントリでは、僕が 2.x を触っていてハマった様々な罠について述べていきますが、3.0 以降ではこれらが全てfixしていることを祈っています。<br />
<br />
今回のエントリでも、自分が iPhone, Android 両対応アプリを開発した経験に基づいていますので、皆様の環境では必ずしも再現しない場合もあると思いますが、その点は御容赦くださいませ m(__)m<br />
<br />
<b><span style="font-size: large;">1. String.format ってクロスプラットフォームで使うときはちょっと注意いりませんか?</span></b><br />
<br />
今年の <a href="http://qiita.com/items/899233af9b0ae292da81">Advent Calendar でも触れられている String.format</a> 関数。C言語でのsprintf関数の如く、文字列処理では重宝する関数なのでいやー便利ですよね皆さん! といいたいところなんですけど、、<br />
<br />
String.format("input value was %d !!!", "hogehoge");<br />
<br />
とかいう具合で誤った使い方をすると以下のような感じだったと記憶しています。<br />
<br />
A) iPhone ではアプリが落ちる。<br />
B) Android ではスルーされた。。なんで通るんだ。。<br />
<br />
そもそも文字列連結処理が面倒だという理由で この関数を自分は使っていたので、"+" 演算子を使って回避した記憶があります。<br />
<br />
<span style="font-size: large;"><b>2. "iphone" というフォルダ名を [Resources|ui] ディレクトリ以下に作るとアプリが落ちる件</b></span><br />
<br />
<a href="http://developer.appcelerator.com/question/136031/couldnt-find-module-error-on-device">http://developer.appcelerator.com/question/136031/couldnt-find-module-error-on-device</a><br />
<br />
android とか、 iphone という名前は root フォルダで予約されているようで、ビルドが壊れてしまいました。"Could'nt find module error on device" というエラーメッセージが出たときは要注意です。<br />
<br />
自分はこの罠によって iPhone アプリのエミュレーターで何の前触れもなくアプリが落ちる事象に遭遇しました。3時間悩み、フォルダ名を変えて動いたときはなんのこったいと頭をかきむしった記憶があります。<br />
<br />
<b><span style="font-size: large;">3. アプリを起動したとき "application restart is required" と表示される</span></b><br />
<br />
<a href="https://jira.appcelerator.org/browse/TIMOB-4941">https://jira.appcelerator.org/browse/TIMOB-4941</a><br />
<br />
これは Android 限定の現象ですが、Google Play から落としてきた配布済みのアプリを Google Play から、またはアプリのショートカットから起動すると "application restart is required" と表示されてしまうという事象がありました。<br />
<br />
Titanium 2.0 SDK 以降でこの現象は fix されたとありますが、2.1.x でも再現しました。<br />
<div>
<br /></div>
Google Play にアップロードした時以降「だけ」この現象が再現するのは始末が悪かったです。回避策は、 tiapp.xml に以下のような設定を入れることです。<br />
<br />
<property name="ti.android.bug2373.disableDetection" type="bool">true</property><br />
<br />
<b><span style="font-size: large;">4. UTF-8 以外のエンコーディング問題</span></b><br />
<br />
御存知の通り Titanium Mobile では UTF-8 が使われています。ですがいろいろな理由で UTF-8 以外の文字コードを使わざるを得ない場合もあったりなかったり。。<br />
<br />
必要な場合は Escape Codec Library を使うのがよいとは思いますが、ライセンスが不明確なので組み込みは微妙です。<br />
<br />
<a href="http://www.vector.co.jp/soft/other/java/se342855.html">http://www.vector.co.jp/soft/other/java/se342855.html</a><br />
<br />
<span style="font-size: large;"><b>5. JSS (JavaScript StyleSheet) の扱い</b></span><br />
<br />
もはや 3.0 以降では別の形でウィジェットの装飾方法が確立されているため、この記述は役に立たないでしょうが、一応記しておきます。<br />
GUIの装飾をJavaScriptで行うjss (Javascript Style Sheet) はドキュメントは残っていないし、仕様と動作が[不明確|不便]なため、自分は結局いろいろ試した末使いませんでした。JSS の記述は以下にあったりしますが、2.x では使わない方がよいでしょう。<br />
<br />
<a href="http://gihyo.jp/dev/serial/01/titanium/0015">http://gihyo.jp/dev/serial/01/titanium/0015</a><br />
<br />
JSSの代替となる流儀は、require してプラットフォームごとに設定を切り替える方法です。僕は以下にあった方法を使いました。<br />
<br />
<a href="http://higelog.brassworks.jp/?p=1144">http://higelog.brassworks.jp/?p=1144</a><br />
<br />
<br />
<b><span style="font-size: large;">おわりに</span></b><br />
<br />
Titanium 3.0 では Alloy という MVC フレームワークで大幅にアプリの開発が変わるでしょうが、個々のコンポーネントやアプリを公開する時にまつわるバグや罠はいろいろなところに潜んでいることでしょう。けどそれを乗り越えて皆でノウハウをシェアしつつアプリ開発を楽しめればよいなーと思います。再度書きますが、3.0 以降では変な罠を踏みたくないものですね!<br />
<br />
次は <a href="https://twitter.com/astronaughts">@astronaughts</a> さんですね! 宜しくお願いします!mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-24999659664981000452012-12-06T22:59:00.002+09:002012-12-07T00:36:28.863+09:00[iPhone|Android] enabled Design Tips by Titanium<span style="background-color: white; color: #222222; font-family: arial, sans-serif;">これは、</span><span style="background-color: white; color: #222222; font-family: arial, sans-serif;"><a href="http://atnd.org/events/34644">Titanium Mobile Advent </a></span><span style="background-color: white; color: #222222; font-family: arial, sans-serif;"><a href="http://atnd.org/events/34644">Calendar 2012</a> の参加エントリです。</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif;"><br /></span>
<span style="background-color: white; color: #222222; font-family: arial, sans-serif;"><a href="http://developer.appcelerator.com/blog/2012/12/titanium-studiosdk-rc-now-available.html">Titanium Mobile 3.0 RC</a> がつい最近リリースされ、新バージョンが目前ですね。</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif;">今年の前半は 4ヵ月くらい Titanium Mobile を触りました。何もないところから</span><span style="background-color: white; color: #222222; font-family: arial, sans-serif;">流儀を身につけてそれなりのコードを書き、2ヵ月半くらい</span><span style="background-color: white; color: #222222; font-family: arial, sans-serif;">で [iPhone|Android] </span><span style="background-color: white; color: #222222; font-family: arial, sans-serif;">アプリの両方をリリースしました。</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif;"><br /></span>
<span style="background-color: white; color: #222222; font-family: arial, sans-serif;">今回はその経験を踏まえて、自分なりの iPhone, Android 両対応の Titanium Mobile における</span><span style="background-color: white; color: #222222; font-family: arial, sans-serif;">設計の流儀をまとめておこうと思います。「設計の流儀」</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif;">としたのは、Titanium のバージョン</span><span style="background-color: white; color: #222222; font-family: arial, sans-serif;">がそれなりにあがっても自分的に通用しうるな、</span><wbr style="background-color: white; color: #222222; font-family: arial, sans-serif;"></wbr><span style="background-color: white; color: #222222; font-family: arial, sans-serif;">と思ったものだけをまとめたものだからです。 コードを書くときも様々なトラップを踏んだ覚えがありますが、それは別途まとめてみようと思います。</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, sans-serif;">自分が作った経験に基づいていますので、以下のような内容になります。念頭に置いてお読みください。</span><br />
<span style="color: #222222; font-family: arial, sans-serif;"></span><br />
<span style="color: #222222; font-family: arial, sans-serif;"> A) Native 部分とスマホ向けのWebサイトを組み合わせたハイブリットアプリ向け </span><br />
<span style="color: #222222; font-family: arial, sans-serif;"> B) ゲームアプリではないので、3D などのTipsは含まれていません。</span><br />
<span style="color: #222222; font-family: arial, sans-serif;"> C) Titanium に限らず、スマホアプリを作るときはいつも当てはまるだろう、という事項も含まれています。</span><br />
<br />
<span style="color: #222222; font-family: arial, sans-serif;"><br /></span>
<b><span style="font-size: x-large;">1. Android -> iPhone の順で設計する</span></b><br />
<br />
<span style="color: #222222; font-family: arial, sans-serif;">iPhone より Android の方が出来ることが少なく、また Titaniumでの実装上の罠も 2.x 系では多い気がしました。よって、こちらをベースに先に作業した方が後々苦しまなくて済むと感じました。</span><br />
<span style="color: #222222; font-family: arial, sans-serif;"><br /></span><span style="color: #222222; font-family: arial, sans-serif;">UI は当然のことながら全然違うし、APIによって使える使えないが勿論存在するので、両対応を考えるなら汎用的に使えるコンポーネントで組み立てた方があとあと楽になれるかもしれません。そうした「使えそうなコンポーネント」を選ぶにあたって使えるのが御存知 「<a href="https://github.com/appcelerator/KitchenSink">KitchenSink</a>」です。</span><br />
<span style="color: #222222; font-family: arial, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, sans-serif;">KitchenSink は iPhone, Android の両方で(できれば実機で)動かしてみることを強くお勧めします。それによって、それぞれのプラットフォームにおける見た目や動きが把握でき、しかもその中身がサンプルコードとして見ることができるからです。本やWebでコンポーネントの情報を把握することもよいのですが、実機での動きに勝るものはありません。</span><br />
<br />
<span style="color: #222222; font-family: arial, sans-serif; font-size: x-large;"><b>2. Titanium で出来ることと出来ないことをきちんと把握しておく</b></span><br />
<span style="color: #222222; font-family: arial, sans-serif;"><br /></span>
<span style="color: #222222; font-family: arial, sans-serif;">当たり前だろう、と石が飛んできそうですが、出来ることの限界が意外にわかりづらかったり、作っている途中で「これはできない」とわかったりするのが Titanium の世界だったりすると自分は思っています。。</span><span style="color: #222222; font-family: arial, sans-serif;">そうでもないですかね(´ー`; )</span><br />
<br />
当たり前のことですが、Titanium Mobile を使えば iPhone や Android で使える機能が全部使えるとか考えてはいけません。対応していない機能は [Objective-C|Java] でモジュールを書く必要があるため、それなりの労力が必要になってきます。<br />
<br />
Titanium のバグで動かない API をモジュールで代替せねばならない場合もあります。自分の場合は、 Android で 音声認識機能 を Intent 経由で呼びだそうと思ったらうまくいかなかったので、モジュールを書いた経験があります。<br />
<br />
<a href="https://github.com/mumumu/Titanium-Android-VoiceRecognition">https://github.com/mumumu/Titanium-Android-VoiceRecognition</a><br />
<br />
また、出来ることと出来ないことについての限界を知る目的でも、上で述べた KitchenSink は大変役に立ちます。骨の髄までしゃぶりつくしましょう。<br />
<br />
<b><span style="font-size: x-large;">3. iOS 向けの対応ハードはきちんと吟味する</span></b><br />
<br />
これは Titanium に限ったことではありませんが、iOS 向けの場合は、必要な機能によっては使えるハードが限られてしまうので、iPhone や iPod、 iPad のどの世代から使えるのか、設計および実装時にきちんと吟味しておきましょう。<br />
<br />
iTunesConnect Developer Guide にハードごとの機能互換性が表になっています。<br />
<br />
<a href="http://developer.apple.com/library/ios/#documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/B_DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html#//apple_ref/doc/uid/TP40011225-CH17-SW1">http://developer.apple.com/library/ios/#documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/B_DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html#//apple_ref/doc/uid/TP40011225-CH17-SW1</a><br />
<br />
最近はそれぞれに世代も進んできたので、差は小さくなっているのかもしれませんが。<br />
自分の場合はカメラのオートフォーカスが弱いことが理由で一部機能が iPod Touch や iPad で使えなかったりした経験があります。<br />
<br />
<span style="font-size: x-large;"><b>4. Webサイトが既にあり、組込む予定がある場合は、Webサイトとアプリでやることをはじめに切り分ける</b></span><br />
<br />
アプリから組み込みブラウザでスマホサイトを呼び出せますが、組み込みブラウザのパフォーマンスはそんなに期待できません。WebView にモバイルサイトを表示させれば全て快適に動くなんていうハッピーな世界は期待してはいけません。特に3G では通信速度の問題もありますし、一気に張れるコネクションの数がそんなに多くないからです。LTE ではまた違うかもなのですが。<br />
<br />
ハードの機能が必要な部分のみアプリで、という思考に行きがちですが、その点は以下のような態度がよいのではないかと思いました。<br />
<br />
<blockquote class="tr_bq">
<i>スピードが必要な部分ではアプリで。それで面倒な仕組みのみ、スマホサイトに任せる方式が現実的</i></blockquote>
<br />
<span style="font-size: x-large;"><b>5. アプリから組み込みブラウザ(WebView) を用いて、Webサイトを呼び出すときの注意</b></span><br />
<br />
上で述べた通り、組み込みブラウザのパフォーマンスはそんなによくありませんし、自分がアプリを作ったときは 3G の通信ではかなり遅く感じました。なので、以下のような流儀が役に立ちました。<br />
<br />
<b>・できうる限り通信の本数は最小にする</b><br />
<br />
1本あたりの通信がとても重いです。そのため、以下の流儀が役に立ちます。<br />
<br />
a) 小さなモバイル向けの画像については、<a href="http://www.koikikukan.com/archives/2012/06/12-012345.php">data スキーム</a>を大いに活用しましょう。<br />
b) CSS や JS も可能な限りHTML内部に収めましょう<br />
c) jQuery Mobile はダウンロード・実行ともにとても重かったのでキャッシュが効<br />
かない iOS 向けではminifyした上でアプリ内部に納め、ページロード後にeval<br />
させるという荒業を使った経験があります。<br />
<br />
<b>・テキストのコンテンツは gzip 圧縮する</b><br />
<b><br /></b> やむを得ず js, css などをダウンロードさせざるを得ない場合は、必ず圧縮して転<br />
送しましょう。jsonも当然対象です。<br />
<br />
<a href="http://www.blogger.com/"><span id="goog_248151381"></span>「HTML5 Web アプリケーションのつくりかた」<span id="goog_248151382"></span></a>というエントリもとても参考になります。<br />
----<br />
<br />
<b><span style="font-size: x-large;">まとめ</span></b><br />
<br />
なんだか基本的なことばっかりのような気もしますが、Titanium は Android が特に罠が多いように思います。それぞれのプラットフォームの特徴を見極めながら作るのは経験も必要だとは思いますけど、予備知識がそれなりにあれば大分違うよね、という思いでまとめてみました。何かのお役に立てれば幸いです。<br />
<br />
では明日の担当 <a href="http://twitter.com/h5y1m141">@h5y1m141</a> さんにバトンタッチします! よろしくお願いします。mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-45358542681967779452012-11-30T16:24:00.001+09:002012-11-30T16:46:12.461+09:00Dirty code is allowed?<a href="http://kyuns.hatenablog.com/entry/2012/11/30/143037">http://kyuns.hatenablog.com/entry/2012/11/30/143037</a><br />
<br />
汚いコードでいいから云々は基本的に「経営者の論理」なんだけど、そういう経営者の論理と折り合いをつけつつうまくエンジニアリングを引っ張っていくのがCTOの役目だと自分は思う。そういう意味で上記の筆者は非常に良心的だ。<br />
<br />
こういうしっかりしたCTOがいる会社はまだ良くて、「経営者の論理」に抗し切れない、またはそれに抗しきれなかったコードがひとたび書かれてしまうと、それがずるずると引きずられ、メンテするエンジニアが泣くハメになる。それはいつしかその会社のエンジニアリングの文化になり、それを変えることは容易ではない環境になる。<br />
<br />
だから「はじめが肝心なのだ」なんていうつもりは毛頭ない。重要なのは、そうした文化があってもチャンスを見つけてそれを少しでも突破しようと意識することだ。それには、自分が動かなければ始まらない。と自戒を込めて思う。そして、上記のエントリにも書かれている、以下の目的を見失わないようにすることが重要だなとおもいます。まる。<br />
<br />
----<br />
<br />
「よりよい実装をすることによって開発の効率化を進め、開発サイクルを早めてより素早くプロダクトをリリースし、最終的にユーザーに満足してもらうことが目的である。」 mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-25737551106564867562012-11-28T15:31:00.001+09:002012-11-28T15:31:17.580+09:00Goma-tarou And Fox-zirou<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlIx8GZBVQ-f53K62das0_LlwbIIxzUeT55rJqElcn4AF63q1rC-_O2BjmPv_eAyKEoc7F_wceVpmgI462569OX25NDYQS4s6ccMwHRCyfo_o17dZVqdGkUPz6eDKz5BZIiWxcwdoPWoU/s1600/1353996188449.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlIx8GZBVQ-f53K62das0_LlwbIIxzUeT55rJqElcn4AF63q1rC-_O2BjmPv_eAyKEoc7F_wceVpmgI462569OX25NDYQS4s6ccMwHRCyfo_o17dZVqdGkUPz6eDKz5BZIiWxcwdoPWoU/s320/1353996188449.jpg" width="240" /></a></div>
<a href="http://ja.wikipedia.org/wiki/%E3%81%97%E3%82%8D%E3%81%9F%E3%82%93">http://ja.wikipedia.org/wiki/%E3%81%97%E3%82%8D%E3%81%9F%E3%82%93</a><br />
<br />
我が家には10年以上置いてあるぬいぐるみがある。いわゆるしろたん(タテゴトアザラシ) のぬいぐるみである。相方がどっかから買ってきて抱き枕として使用していたものの、結婚してからはソファーの上に鎮座している。<br />
<br />
昔は「ごまごまん」と呼んでいたのだが、最近は「ゴマ太郎」と呼ぶようになった。見た目が素直でとてもよろしい。尚、このしろたん関連グッズが我が家には至る所にあり、枕や置物など様々な用途に活用されている。<br />
<br />
ちゃんと調べてみて、これがオリジナルキャラだというのをはじめて知った(´ー`;)<br />
<br />
----<br />
<br />
<a href="http://foxkeh.jp/">http://foxkeh.jp/</a><br />
<br />
昨日そのゴマ太郎に加えて、Mozilla Firefox の「フォクスケ」が やってきた。<a href="http://k-tai.impress.co.jp/docs/news/20120914_559761.html">Android 版 Firefox のキャンペーン</a>があり、それに応募して当てたものだ。うちにアザラシ以外のぬいぐるみが来ることは極めて珍しいので「フォク次郎」という名前を早速つけた。相方からも尻尾のモフモフ具合がよいと好評である。<br />
<br />
ひょんな縁でやってきた新しいぬいぐるみ。我が家もよりにぎやかになりそうである(*´~`)<br />
<br />
mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-8014288454371315322012-10-16T23:33:00.005+09:002012-10-16T23:36:06.095+09:00[memo] blogger android app enhanced<span style="background-color: white;">常用している Blogger の Android公式アプリにちょっと不満がある。ある意味ニッチな不満なので久々にアプリを書いてみるか、と思いつつ不満に思っていることをメモ。</span><br />
<br />
<span style="color: #333333; font-family: lucida grande, tahoma, verdana, arial, sans-serif; font-size: x-small;"><span style="line-height: 18px;">----</span></span><br />
<div>
<br /></div>
1. 投稿日時をコントロールできるようにしたい<br />2. あるエントリを複製して新しいエントリを起こしたい<br />3. ラベルを過去に投稿したものから選択できるようにしたい<br />4. 特定のエントリをアプリからWebViewを経由せずにオフライ<wbr></wbr>ンで見られるようにしたい<br />5. 上記をラベルで絞ってみたい<ol>
</ol>
mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-32506927306457611912012-10-12T01:00:00.000+09:002012-10-17T01:32:15.347+09:00Returns kindle 4th generation(2)<a href="http://d.hatena.ne.jp/s-fridge/20101124/1290604325">http://d.hatena.ne.jp/s-fridge/20101124/1290604325</a><br />
<br />
以前返品した Amazon Kindle 第4世代が何の理由もなく戻ってきたよ( ;´Д⊂ヽ<br />
<br />
日本の業者ってリチウム電池を運ぶのにいろいろとあるらしく、Amazon.comに直でメールしたらUPS経由で返すように案内されますた。<br />
<br />
けど、配送料を調べたら普通に5k超えることがわかったので大人しく他の方にお譲りすることにしました。。上の id:s-fridge さんは 9000円したとか。よく返品する気になったなあ、、と。<br />
<br />
----<br />
<br />
ということで、新品の Kindle第4世代(Wifi版、広告なし)を欲しい方コメントよろですー。5000円でこうちくれると嬉しいのです(´ー`; )mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-61233040557218132592012-09-30T15:02:00.005+09:002012-10-17T01:27:34.631+09:00Returns kindle 4th generation第4世代の <a href="http://www.amazon.com/Kindle-Ereader-ebook-reader/dp/B007HCCNJU">Amazon Kindle International</a> 版を買ったが、返品することにした。<br />
<br />
Amazon Kindle はこのエントリを書いている現在、第4世代が発売されている。だが、よりによって明日から <a href="http://www.amazon.com/Kindle-Paperwhite-Touch-light/dp/B007OZNZG0">Kindle PaperWhite</a> が発売されるわ、1週間前には十分電子書籍リーダーとして使えそうな <a href="https://play.google.com/store/devices/details?id=nexus_7_16gb">Nexus 7</a> が発売されるわで、この時期に第4世代の Kindle を定価で買うのは明らかに負け組であることに気付いた。<br />
<br />
よって、Kindle は返品して様子を見ることにした。Amazon.com の返品は面倒な感じがしたのだが、以下の手順を踏めば簡単だ。<br />
<br />
<b>[ Update October 12th 19:32 JST by m ]</b><br />
<br />
... てな具合で以下には返品手順を馬鹿正直に写真付きで以前は書いていたのだが、この手順にそって郵便局から発送したところ、<a href="http://mumumuorg.blogspot.jp/2012/10/returns-kindle-4th-generation2.html">無言で送り返されてきてしまった</a>。リチウム電池を日本の運送業者が扱うのはアレでソレなことが原因らしい。<br />
<br />
よってここに載せていた手順は削除しました。ごめんなさい(´ー`; )mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-5956606732702764832012-09-20T02:36:00.000+09:002012-09-20T02:48:56.061+09:00HTML5, gzip deflate皆様、スマホサイトを構成する時は、HTML5テキストそのものを gzip するのを忘れないようにしましょう。僕は忘れていました。。<br />
<br />
CSSのリクエストを減らす代わりにHTMLに埋め込んでいる場合は尚更です。<br />
<div>
<br /></div>
なぜ Apache 2.2 で以下のようなトチ狂った設定をしていたのか未だに理解できない。<br />
要するに、static なリソースで縛って満足していた、と(´ー`; )<br />
<br />
<Location /smartphone_static_resource><br />
<location smartphonesite_static_dir="smartphonesite_static_dir"></location>
SetOutputFilter DEFLATE<br />
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript<br />
# ...<br />
</Location><br />
<br />
----<br />
<br />
スマホアプリと連携する HTML5サイトの高速化のキモってどこもやっていることは基本同じだなーと最近思う次第。<br />
<ol>
<li>data:url や ファイル統合等を駆使してリクエスト数を減らす</li>
<li>minify, gzip 等を駆使して転送量を減らす</li>
<li>キャッシュできる処理はキャッシュさせる</li>
<li>ハード側に多くをやらせない</li>
</ol>
1. の リクエスト数って大したことないじゃんって思うかもですけど、3G回線とかでは結構効いてくると思います。<br />
<br />
4. についてはそう心配することはないのかもしれない。自分は HTML5 や JS でゲームを作ったことがないのでそこらへんノウハウがあれなんですけど、jquery-mobile を採用したサイトとかをふるーい Android 端末とかで動かすとやっぱり描画が遅いので、変に複雑な処理は書かないようにしています(んなこたーねーよって思ったらコメント希望)。<br />
<br />
以下を読んで、ああやっぱ同じですよねー。デスヨネーってな感じでした。<br />
<br />
「HTML5 Web Application のつくりかた」<br />
<a href="http://ameblo.jp/ca-1pixel/entry-11009598050.html">http://ameblo.jp/ca-1pixel/entry-11009598050.html</a>mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-14554421092838631122012-09-17T03:31:00.000+09:002012-09-24T18:31:46.463+09:00XP-matruri 2012<a href="http://xpjug.com/xp2012/">http://xpjug.com/xp2012/</a><br />
<br />
9月15日(※1)にXP祭り2012に行ってきた。<br />
<br />
----<br />
<br />
なんとか現場にTDDとか自動ビルドだけでも取り入れてほしいなーって思っていて、そこらへんのヒントを探りに行こっかなーとか、最近イベントに行ってないなーっていうのが動機になって明らかにアウェーなカンファレンスに顔を出してみた次第。<br />
<br />
「XXというプラクティスを現場で使いたいんだけど、現状に満足している連中ばかりで何も動きません」云々という話題はアジャイル界隈では定番らしく、そういう話題が<a href="http://xpjug.com/xp2012-contents-a2/">最初のラウンドテーブル</a>でもやはり出た。薄々感じてはいたが、やっぱり『自分が動かないことには何も変わらない』、という結論は自分の状況(※2)と一致した。このイベントの中の様々な講演やLTの中でもこの話は出てきたくらい重要な話(※3)である。<br />
<br />
動いた成果をうまく見せつける策が重要だと思う。「仲間も必要」という話も確かに同意はするけど、それだけに逃げてはダメな気がする。<br />
<br />
----<br />
<br />
あと、Scrum のざっくりとしたイメージを<a href="http://xpjug.com/xp2012-contents-d3/">ワークショップ</a>で持つことが出来たのがとても大きな収穫だった。この世界でプラクティスを自分一人でやってみることを「素振り」というらしいが、これを素振りしようと思っても、TDDや自動ビルド、CIとかと違ってチームが前提のプラクティスなのでどうかなーと思いつつ考えてやってみるかーとか思った。<br />
<br />
----<br />
<br />
LT では SonicGarden さんのビデオレターがとてもよろしゅうございました。マワシモノではないけれども、とても個人的には勇気をもらえたのでこちらに貼っておきますね。<br />
<br />
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="http://www.youtube.com/embed/8D_bd9QpyjM" width="560"></iframe><br />
<br />
----<br />
<br />
あと、最近イベントまわりについてアウトプットできていなかったので、XP祭りのメディアスポンサーである <a href="http://www.manaslink.com/">ManasLink</a> さんが募集していた「公式レポーター(※4)」に応募し、イベントの参加レポートを書くコミットをしてきた。<a href="http://dl.dropbox.com/u/15537366/xpjug_report_2012.txt">dropbox には既にレポートを置いてある</a>のだが、掲載が遅れているらしい。今週末には多分掲載されるだろう。<br />
<br />
<strong>[ Update September 24th 2012 18:50 JST by m ]</strong><br />
<br />
ManasLink さんのところに<a href="http://www.manaslink.com/article/xp/xp2012/report_2/">レポートが掲載された</a>ようだ。<br />
<br />
----<br />
<br />
(※1) つか、<a href="http://phpcon.php.gr.jp/w/2012/">ぺちこん</a> や <a href="http://2012.pycon.jp/">PyCon</a> となんで被ってるんだYO!<br />
(※2) この世界では「コンテキスト」というようだ<br />
(※3) 常識ジャンとか苛めないでください<br />
(※4) 公式レポーターの制度に意味があるのかはちょっとわからない感じ。ただ、自分の中ではアウトプットに確実にコミットできるので応募した次第mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-33827117456981688492012-09-12T14:18:00.001+09:002012-09-12T14:23:20.813+09:00Livedoor DataHotel Patrol<a href="https://patrol.datahotel.ne.jp/index.html">https://patrol.datahotel.ne.jp/index.html</a><br />
<br />
<a href="http://mumumuorg.blogspot.jp/2012/09/server-monitor-for-android.html">前のエントリ</a>で書いた スマホで監視 というのはあくまで簡易のお遊びなんだけど、やっぱりメール飛んできて欲しいよね的なところもある。そこで NHN傘下の<a href="http://www.datahotel.ne.jp/">データホテル</a>がやっている上記を登録してみた。<br />
<br />
<a href="https://patrol.datahotel.ne.jp/guide.html">使い方ガイド</a>にもある通り、少し細かいところでもWebインターフェイスから面倒見てくれる。SSLの更新切れとか、名前解決のチェックもしてくれたり。
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVgAiXmUnFkTXn_AtTJCQp_WA6zX_bXnOO68ioje5k7tK3v_o9bFIKDEd7h0SI0pGIhevFxXwvHQmK2rnuIv1Sq9AO3pnlOqvhUcFTv-sVD5jC2I9Fi5TxbvUtypiZiWp0QRAIeO70ke4/s1600/monitoring_sample.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVgAiXmUnFkTXn_AtTJCQp_WA6zX_bXnOO68ioje5k7tK3v_o9bFIKDEd7h0SI0pGIhevFxXwvHQmK2rnuIv1Sq9AO3pnlOqvhUcFTv-sVD5jC2I9Fi5TxbvUtypiZiWp0QRAIeO70ke4/s320/monitoring_sample.png" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
まぁ <a href="http://b.hatena.ne.jp/entry/mumumuorg.blogspot.com/2012/09/server-monitor-for-android.html">id:shimooka さんの言うとおり</a>、携帯じゃあ悲しいよね的な。それだけなんです、、が! まぁ別のツールも遊んでみるつもり。mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-23632296109324775892012-09-09T18:56:00.001+09:002012-09-09T19:00:22.733+09:00Server monitor for Android<a href="https://play.google.com/store/apps/details?id=net.spc.app.svrmon">https://play.google.com/store/apps/details?id=net.spc.app.svrmon</a><br />
<br />
TCP, http, ECHO で携帯電話から簡易的なサーバ監視が出来るのが上記の Server Monitor だ。以前から監視したいなーけど別回線のためにお金出すのもなーとか思っていたら、Android アプリ作れば(使えば)いいよね、ということで上記に行き着いた。<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJRDddCHQwX3n5ioAxdnGrxwXwoPcmfIpcOVJt-F6fzIizMqRAp8z1SGs3GUEjYo3or9Uu6oQim4QBsiHVnJ2FkDvGoougU-yQKq6SbBf4N4UCq8H8m1u4A7xK9okZ0s9nDGu3WbqBd40/s1600/unnamed.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJRDddCHQwX3n5ioAxdnGrxwXwoPcmfIpcOVJt-F6fzIizMqRAp8z1SGs3GUEjYo3or9Uu6oQim4QBsiHVnJ2FkDvGoougU-yQKq6SbBf4N4UCq8H8m1u4A7xK9okZ0s9nDGu3WbqBd40/s320/unnamed.jpg" width="192" /></a><br />
家の自宅サーバの回線が切れたかどうかを監視する仕組みとしては、別の回線から普通にpingやプロトコルに応じたリクエストを出せばいい。<br />
<br />
その別の回線というのが自分の場合は Air"H だったり、e-mobile だったりしたわけだが、そのリクエストを出すアプリケーションを携帯に載せるのが容易ではなかったし、自分にはその力がなかった。というか、そういうことを思いつかなかったと言った方が正しい。<br />
<br />
今の会社に転職して <a href="http://www.nagios.org/">nagios</a> のアラートに追われる身となり、そういう監視ツールが身近になったことと、Android というオープンで非常に与しやすいプラットフォームが e-mobile でも手に入りやすくなったことから、そういうリクエストを出すツールも手に入りやすくなった。自分で作ろうかなと思ったが、やっぱり同じことを考える人はいるものだ。mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-51121537413566821842012-08-30T21:16:00.001+09:002012-09-02T22:48:57.895+09:00Onsen<div class="separator" style="clear: both; text-align: center;">
</div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpe5oR6Ae-A4hlcfuJvX7hUYMQszzUmymaFbabP1ikE-xrwSGNklosBIYDMz78PDjqNCY9Im2zUDmWBaAkuucVbRx9uPWkZ6wuGzJowP_TTYdLGj8nDxiIA_YnC2RJ6z6_8HSGZAgxwtQ/s1600/IMAG0515.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpe5oR6Ae-A4hlcfuJvX7hUYMQszzUmymaFbabP1ikE-xrwSGNklosBIYDMz78PDjqNCY9Im2zUDmWBaAkuucVbRx9uPWkZ6wuGzJowP_TTYdLGj8nDxiIA_YnC2RJ6z6_8HSGZAgxwtQ/s320/IMAG0515.jpg" width="320" /></a><br />
温泉に行ってきた。相方と過ごしながらいろいろ考えることもあったのだけど、何より結婚して以降なにも相方にしてやれなかった部分を少しは埋めることができたのであれば嬉しいな、と。<br />
<br />
ギーク的な観点からは「おもてなし」はいらないかな、と思いました。あと、部屋に露天風呂があるとヒキコモリ度が上り過ぎて困る感じです。<br />
<br />
まぁ、「<a href="http://tatsu-zine.com/books/learnalgorithm">アルゴリズムを学ぼう</a>」や「<a href="http://tatsu-zine.com/books/howtochangetheworld">チェンジ・マネジメント3.0</a>」等、数冊の本をを読み進めたことが収穫だろうか。<br />
<br />
社会復帰できるかどうかが心配だ(´ー`; )mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-90488538339885714632012-08-27T23:55:00.001+09:002012-08-28T00:14:19.424+09:00tibar image ovarlay patch<a href="http://code.google.com/p/tibar/">http://code.google.com/p/tibar/</a><br />
<br />
iPhone でバーコードを読ませたいと思ったとき、いくつかライブラリはあったりするが、読み取り精度やコードの安定性とかを見たところ、<a href="http://zbar.sourceforge.net/iphone/sdkdoc/">ZBar SDK</a> が一番良いと感じた。これを Titanium Mobile から使うモジュールが tibar である。<br />
<br />
tibar のサイトや、日本語の情報を見ていると、Titanium Mobile 1.4 から 1.8 あたりまでしか動作事例がみあたらなかったのだが、最新の svn コードを試した限り、2.0.1GA2 でのビルドと動作は少なくとも確認できた。<br />
<br />
1. 以下のコマンドで最新コードをチェックアウトする<br />
<br />
svn checkout http://tibar.googlecode.com/svn/trunk/ tibar-read-only<br />
<br />
2. titanium.xcconfig のバージョン指定を、使用している Titanium Mobile のバージョンに置き換える<br />
===================================================================<br />
--- titanium.xcconfig (リビジョン 17)<br />
+++ titanium.xcconfig (作業コピー)<br />
@@ -4,9 +4,8 @@<br />
// OF YOUR TITANIUM SDK YOU'RE BUILDING FOR<br />
//<br />
//<br />
-TITANIUM_SDK_VERSION = 1.5.1<br />
+TITANIUM_SDK_VERSION = 2.0.1.GA2<br />
<br />
3. build.py を実行<br />
<br />
一応上記でビルドでき、組み込んだら動いたのだが、画像を以下のようにカメラの表示にオーバーレイさせたいと思ったときに、公開されているコードだとうまくいかなかった。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSZz8CeKbjci7xSMS_bkQAJfFbBm-zntJuBiTYCR8Wg-FS1U5g9LPrrq6EgY3mxkIS0gGhaJQWKUSZtvExcW10bH5f3S92dubkgzl4uNPpdc9WKWoFIBcEoA9Ac3g8UeODGCFUUwApo7M/s1600/overlay_in_simulator.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSZz8CeKbjci7xSMS_bkQAJfFbBm-zntJuBiTYCR8Wg-FS1U5g9LPrrq6EgY3mxkIS0gGhaJQWKUSZtvExcW10bH5f3S92dubkgzl4uNPpdc9WKWoFIBcEoA9Ac3g8UeODGCFUUwApo7M/s200/overlay_in_simulator.png" width="133" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<a href="http://code.google.com/p/tibar/issues/detail?id=15#c5">patch が貼られていた</a>りしたものを試したのだがそれもうまくいかなかったので、自分で以下のような patch を書いた。設定されるオブジェクトが ImageView であることを前提にしているので、画像以外のオーバーレイ用途にはうまくいかない。それに overlay キーが設定されていないと問答無用でエラーにしているので、その点もとても汎用的とは言えないだろう。使用は自己責任で。<br />
<br />
<script src="https://gist.github.com/3489109.js?file=TibarModule.m.diff"></script><br />mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-34053822025896802582012-08-26T12:21:00.001+09:002013-01-17T11:15:56.409+09:00RapidSSL<a href="http://rapidssl.jp/">http://www.rapid-ssl.jp/</a><br />
<br />
SSLサーバ証明書は自分で設定したいと思っていたが、以前は値段が高くてなかなか手が出せなかったものだ。ところが最近は1年で数千円とかめちゃくちゃ安く、とりあえず遊ぶ程度でも十分に手が届く。しかも審査の内容は本当にSSL証明書を申請する人が、ドメインを持っているか、という審査のみ。自前でドメインを登録している人ならお手軽だ。<br />
<br />
そこで、お手軽SSL認証局のひとつである RapidSSL でちょっと遊んでみた。以下は Debian Squeeze で実行している。<br />
<br />
まずは認証局への署名要求(CSR) を生成する。そのための秘密鍵(server.key)を生成する<br />
RapidSSL は2048bit以上の秘密鍵を要求するため、最後のオプションでその値を指定している。<br />
<br />
$ openssl genrsa -des3 -out server.key 2048<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMvfsLrpO6VeDvE77vnDduS2pixdbJEG2m0GV8bZEPUYbUxc5wvQReYsos1Z3aquesIl96YZaKH_kNv4nxwTvPF0YAgRKS9Um2_STAuvIJJ13ZEhEhN4NyYH6JZZGJrRvN6AnwCQDkGYM/s1600/server_key.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMvfsLrpO6VeDvE77vnDduS2pixdbJEG2m0GV8bZEPUYbUxc5wvQReYsos1Z3aquesIl96YZaKH_kNv4nxwTvPF0YAgRKS9Um2_STAuvIJJ13ZEhEhN4NyYH6JZZGJrRvN6AnwCQDkGYM/s640/server_key.png" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
次に秘密鍵をもとに署名要求(CSR) を生成する。<br />
<br />
$ openssl req -new -key server.key -out server.csr<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAYP2I-W6P3NddJzD2xxv5lkNiwreu7qIBMYo60mO9W8IMLePs3EPsky6aMKogCEe4dTlmUkx1eEFtv1u6wNxoqNltmn8dVHm9esGjiBHzKd2dr0hnIrULl2X7Ofo-KACaRohP-MUki6Q/s1600/server_key1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAYP2I-W6P3NddJzD2xxv5lkNiwreu7qIBMYo60mO9W8IMLePs3EPsky6aMKogCEe4dTlmUkx1eEFtv1u6wNxoqNltmn8dVHm9esGjiBHzKd2dr0hnIrULl2X7Ofo-KACaRohP-MUki6Q/s640/server_key1.png" width="640" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
ここで注意すべきなのは、CSRを生成するにあたって入力する情報は、SSL設定を行うドメインの管理情報と基本的に一致させておかなければならないということだ。つまり、ドメインの whois 情報と一致するようにすること、ということだ。少なくとも以下の情報は一致させておく必要がある。<br />
<br />
<br />
Country Name<br />
State or Province Name (full name)<br />
Locality Name (eg, city)<br />
Organization Name (eg, company)<br />
<br />
<br />
また、SSLを設定したい FQDN を Common Name に指定し、Email Address にはドメインの登録者 Emailアドレスを設定すればよい。<a href="http://www.rapid-ssl.jp/rapidssl-order/ssl-order.htm">Emailアドレス は他にも指定できる</a>が、多分これが一番やりやすい。「a challenge password」や「An optional company name」は空にしておく。<br />
<br />
whois情報を隠すサービスってのが最近はあって、レジストラの情報でwhois情報が置き換わっているドメインが存在するが、そういうサービスは外した上で正しい情報を登録した方がよい。<br />
<br />
----<br />
<br />
CSR を生成したら、<a href="https://www.rapid-ssl.jp/ssl/orderForm.php">申し込みフォーム</a>から上記で生成したCSRを貼り付けて必要事項を記入してSubmitすると、CSR生成時に指定した Emailアドレス に「【重要】 SSLサーバ証明書発行承認のお願い」というメールが送られてくる。そのURLをクリックすると、以下のようなドメイン証明画面がブラウザで開く。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj9wxWcIPOrSANx0f_QO_S-vtgXmSMj7cZ_-kWyKs-hGnTm-UjfdJhFdmB21sUBTQDyvCgkR4b4ECKbdlFzqU3GXS9SyyPiIAO8qHk1MnHsbdiSCuhIgdV7aLzZp-wARmQVyBRsKVFi6g/s1600/server_key2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj9wxWcIPOrSANx0f_QO_S-vtgXmSMj7cZ_-kWyKs-hGnTm-UjfdJhFdmB21sUBTQDyvCgkR4b4ECKbdlFzqU3GXS9SyyPiIAO8qHk1MnHsbdiSCuhIgdV7aLzZp-wARmQVyBRsKVFi6g/s640/server_key2.png" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
ここで「承認します」ボタンを押せば、RapidSSL から サーバ証明書と中間証明書が送られてくる。これだけで手続き完了。15分くらいしかかかっていない。whois情報さえちゃんとしていればお手軽だということがわかる。<br />
<br />
----<br />
<br />
あとはサーバ証明書と中間証明書をサーバにインストールするだけだ。Apache + mod_ssl なら一般的な手順は以下の通りとなる。<br />
<br />
<a href="https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&actp=CROSSLINK&id=SO6252">https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&actp=CROSSLINK&id=SO6252</a><br />
<br />
要するに、Apache の SSL 設定に以下を設定するだけだ。<br />
<br />
<br />
SSLCertificateFile -> 発行されたサーバ証明書<br />
SSLCertificateKeyFile -> opensslコマンドで一番はじめに作った秘密鍵<br />
SSLCertificateChainFile -> 発行された中間証明書<br />
<br />
<br />
あとは、Debian 特有の注意点がある。デフォルトでインストールされる SSLサイトの設定ファイル /etc/apache2/sites-available/default-ssl だが、これをそのまま使うと 「Invalid method in request \x16\x03\x01」というエラーが出てSSLリクエストを受け付けてくれなかった。これについては多数の事例が報告されていて、バーチャルホストの設定が _default_:443 だとまずいらしい。自分はこの部分をIPアドレスまたはワイルドカードに置き換えるとうまくSSLリクエストを受け付けてくれるようになった。<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDg_Y8DluSw16uPIgBLUoJfO1k8ObEFwMBU_UeoZDJZX4WYvPhgdj5f4NYg5tgUaTotFeTFRPV8kDGj9mGGJONGZcNhIpyJMELsML6GVwuxppCCoj2bzP-Y5x6fWxpUZNFuK9OZq141Mw/s1600/server_key3.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="85" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDg_Y8DluSw16uPIgBLUoJfO1k8ObEFwMBU_UeoZDJZX4WYvPhgdj5f4NYg5tgUaTotFeTFRPV8kDGj9mGGJONGZcNhIpyJMELsML6GVwuxppCCoj2bzP-Y5x6fWxpUZNFuK9OZq141Mw/s400/server_key3.png" width="400" /></a><br />
<br />
<br />
<br />
<br />
<br />
<b>[ Update January 17th 2013 11:09 by mumumu ]</b><br />
<br />
サーバの秘密鍵(server.key)を作成したときにパスフレーズを設定するが、これを解除しておかないとサーバを再起動した時にパスフレーズを聞かれて処理が止まってしまう。パスフレーズを解除するには、以下のコマンドを使う<br />
<br />
openssl rsa -in server.key -out server.key<br />
<br />
複数証明書がある場合は、Apache の <a href="http://httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog</a> 設定を使うのも手かもしれない。mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-43572541807174475762012-08-26T05:06:00.001+09:002012-08-26T05:06:33.118+09:00Blog Template changedちと悪趣味で見にくかった以前のブログテンプレートを、気分転換も兼ねて明るいものに変えてみた。昨日から10連休に入っており、いろいろ考えたり作業したり旅行したりな感じ。<br />
<br />
ただ、手を動かすのはやめないでおこう、と。この更新もその一環である(*´〜`)mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-10862570271115733852012-08-24T18:07:00.002+09:002012-08-24T18:19:30.487+09:00Problem driven enginnering?<br />
「少しでも楽をしたいから自動化したい。自動で信頼出来ることをしたい。そうすれば効率があがるよ」という思考は、「問題点がなければ何もしないでいいじゃん?」という問題ドリブンの考え方と対立するものだ。それは自己満足だ。コストがかかる(そりゃバランスも重要)と言われようと、問題がなければ何もしない、では進歩は望めないし、何より俺たちエンジニアは楽になれない。周囲の文化がなんであれ、『楽をするため』に向上心を持ち続けることは忘れないでいようと思う。<br />
<br />
・・・と考えていくと「楽をしていないことが問題だ」という問題意識があると気付かされる。結局問題ドリブンに戻るわけだな。タハハ(´ー`;)mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-14472433398892346632012-08-18T22:59:00.000+09:002012-08-18T22:59:24.705+09:00meshi-only blog<a href="http://mumumu-meshi.blogspot.jp/">http://mumumu-meshi.blogspot.jp/</a><br />
<br />
思うところがあり、飯専用ブログを作った。<br />
要するに太ったんでダイエットしますってことですよいわせんなよ恥ずかしい!( ;´Д⊂ヽmumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-75663299989029287442012-05-07T01:03:00.000+09:002012-05-07T01:07:25.763+09:00Titanium Module for Voice Recognition on Android<a href="https://github.com/mumumu/Titanium-Android-VoiceRecognition">https://github.com/mumumu/Titanium-Android-VoiceRecognition</a><br />
<br />
お久しぶりです。最近 <a href="http://www.appcelerator.com/platform/titanium-sdk" target="_blank">Titanium Mobile</a> を触っていて、Android へのかゆいところへの手の届かなさにムズムズしている mumumu です。<br />
<br />
Android は 1.5 から <a href="http://developer.android.com/resources/articles/speech-input.html" target="_blank">音声認識の機能にアクセスできるAPI</a>を備えていて、Intent に情報を詰めてビルトインの Activity を起動すればいとも簡単に音声認識の結果が得られる。ならば Titanium でも簡単でしょう。と思って以下のコードを書いた。<br />
<br />
<script src="https://gist.github.com/2584507.js?file=FirstView.js">
</script><br />
上記のコードでも、Android 2.x 系で <a href="http://docs.appcelerator.com/titanium/2.0/index.html#!/api/Titanium.Android.Activity">Ti.Android.currentActivity.startActivityForResult</a> の結果が返ってこないので困った。3.x 系では返ってくるので不思議不思議。どうせ Titanium は <a href="http://developer.android.com/reference/android/content/Intent.html#getStringArrayListExtra(java.lang.String)" rel="nofollow">getStringArrayListExtra</a> による Intent からの結果取得に対応していないので、モジュールはどうせ書かねばならない。<br />
<br />
よって、Titanium の JavaScript から Activity を起動するのではなくて、 Java 側で 「音声認識 -> 結果取得 -> 結果を戻す」 というモジュールを書いた。それが<a href="https://github.com/mumumu/Titanium-Android-VoiceRecognition">上のリンク</a>である。<br />
<br />
これを使えば以下のようなそれっぽいコードで Android 2 系でも 3系でも結果が取得できた。<br />
<br />
<br />
<script src="https://gist.github.com/2623056.js?file=gistfile1.js">
</script><br />
<br />
実装の肝は、 Android ビルトインの Activity を起動する <a href="https://github.com/mumumu/Titanium-Android-VoiceRecognition/blob/master/src/org/mumumu/ti/android/speech/VoiceRecognitionProxy.java">VoiceRecognitionProxy.java</a> である。本当は Activity#startActivityResult で ビルトインのActivityの起動と動作結果取得を同時に行うのが筋であるが、呼び出し元の Activity が Titanium 側の初期化済みアクティビィティなので onActicityResult で結果が取得できない。なので、Titanium 側のアクティビティと呼び出し側のビルトインアクティビィティは Handler を包む Messenge と それを Intent で運ぶ Messenger を使って結ぶやり方を採っている。<br />
<br />
正直迂回コードである。気持ち悪い。Titanium の startActivityForResult がちゃんと動いてくれればこんなモジュールはいらないのだが。。(´ー`; )mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-44423637092514353602012-01-12T09:44:00.000+09:002012-01-12T09:44:13.808+09:00Nexus Prime = Galaxy Nexus<a href="http://www.datacider.com/11749.php">http://www.datacider.com/11749.php</a><br />
<br />
ICS が載った Google の次期(もうcurrentだけど)Android機のリファレンス名が「Nexus Prime」
<br />
それをコンシューマー向けに製品化したのが Samusung の <a href="http://www.nttdocomo.co.jp/product/next/sc04d/" target="_blank">Galaxy Nexus</a>。
<br />
<br />
俺の携帯って Prime なんだぜ、とのたまっているお友達がいたので何かと思ったら上記のよう<br />
にただの Alias 関係だった。
<br />
<br />
#個人的には Prime って数学的な意味以外では厨二っぽいなって思う。mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-25790113376032107172011-12-04T17:57:00.001+09:002011-12-04T18:07:33.086+09:00Windows7 on "VirtualBox on Linux"<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQsmh3IdKJzKLHR9GzIR_80XqX4lsECnPZchhWfUJ3uAcXavBqO-H3Hb9AN2wMQtPMLU2NZRuY9c89zBqXLyjUPx9UvNGGgB1ykseE89pE7Mxbt1P20M4iAFfF-D7JQQQyQffUkU3PzNI/s1600/kde_with_win7_on_virtualbox.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="180" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQsmh3IdKJzKLHR9GzIR_80XqX4lsECnPZchhWfUJ3uAcXavBqO-H3Hb9AN2wMQtPMLU2NZRuY9c89zBqXLyjUPx9UvNGGgB1ykseE89pE7Mxbt1P20M4iAFfF-D7JQQQyQffUkU3PzNI/s320/kde_with_win7_on_virtualbox.png" /></a></div>
<a href="https://www.virtualbox.org/">VirtualBox</a> を暫く前から使っている。<a href="http://www.linux-kvm.org/page/Main_Page">kvm</a> との区別は? という気もするが、デスクトップから仮想マシンを操作したい場合はVirtualBox という感じ。サーバに載せる仮想マシンは専ら kvm である。<br />
<br />
以前は Linux から仮想マシン経由で Windows を動かそうとしたら <a href="http://www.vmware.com/">VMWare</a> 一択しかなくてそれなりにお布施をした記憶がある。よい時代になったものである。<br />
<br />
あ、そういえば フルスクリーンから抜けるのはデフォルトで 右Ctrl + F なので忘れないように > 自分mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0tag:blogger.com,1999:blog-7005405814689884350.post-53495056532634741662011-12-01T09:59:00.001+09:002011-12-01T11:11:29.462+09:00ini file parser for Java<a href="http://ini4j.sourceforge.net/">http://ini4j.sourceforge.net/</a><br />
<br />
Java で <a href="http://en.wikipedia.org/wiki/INI_file">ini ファイル</a> が使われることはあまりないようだ。<br />
<br />
勿論 標準で java.util.Properties というクラスがあり、Key と Value で設定を扱えるだけで十分という話はある。けれども、設定をグループ化するには、設定項目に名前空間を付与する等工夫が必要だ。もっと複雑な構造にしたければXMLで、、という話になるかもしれない。<br />
<br />
ini ファイルは「セクション」があることで設定をグループ化することができる。(<a href="http://framework.zend.com/manual/ja/zend.config.adapters.ini.html" target="_blank">Zend_Config_Ini</a> の如く設定の継承とかあればかなり便利だと思うが)これだけの違いのためにiniファイルのパーサを書くのはちょっと、、と思ったときに ini4j を見つけた。<br />
<br />
基本的に設定ファイルをロードした後は、IniPreferences 経由で自由にセクションと Key, Value を扱える。 <br />
<br />
all_ini_entries = new Ini(new File(fileName));<br />
ini_prefs = new IniPreferences(all_ini_entries); <br />
<br />
最低限の機能を class として書き下すと以下のようになる。単純なパースや書き込み以外にも様々な機能が揃っているので、<a href="http://ini4j.sourceforge.net/tutorial/IniTutorial.java.html">チュートリアル</a>も是非見ると良いと思います。<br />
<br />
<script src="https://gist.github.com/1412702.js?file=ExampleIniConfig.java"></script>mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.com0