pythonアプリケーションの多言語化 Printrunの場合
お知り合いのエンジニアさんからpythonアプリの日本語化方法について尋ねられたので調べて見ました。
日本語化するのはこちら。
Printrun
ちなみにwinで動かしたいので、vmwareで準備しました。
既に多言語化に対応したアプリなので、設定がうまく出来ればすぐできそう。
環境構築
まずはreadmeの言う通りに環境を構築する。
- http://python.org/ftp/python/2.7.2/python-2.7.2.msi
- http://pypi.python.org/packages/any/p/pyserial/pyserial-2.5.win32.exe
- http://downloads.sourceforge.net/wxpython/wxPython2.8-win32-unicode-2.8.12.0-py27.exe
- http://launchpad.net/pyreadline/1.7/1.7/+download/pyreadline-1.7.win32.exe
忠実にインストール。
日本語化ファイルの準備
Printrunをzipでダウンロードして、とりあえずC:\直下に展開。
README.i18nではpygettextしてjaディレクトリ作ったりとかする様に書いてるけど、めんどいので locale/de をコピーして locale/ja を作成。de.poもjp.poに名前を変える。
起動
後は実行するだけ。言語指定はsetで。
set LANG=ja pronterface.py
macで動かす
pythonの環境が整っていれば、その上で動くPrintrunは同じものが使える。
win
set LANG=ja pronterface.py
LANG=ja python pronterface.py
win と mac のスクリプト
win
start.bat
set LANG=ja pronterface.py
mac
start.app
applescriptエディターで新規ファイルを作ってアプリケーションで保存。
--- 現在のディレクトリを取得 tell application "Finder" to set current_dir to parent of (path to me) --- POSIX形式でディレクトリを取得 /User/みたいな set current_dir to POSIX path of (current_dir as Unicode text) --- do shell script でディレクトリを移動して実行 do shell script "cd '" & current_dir & "'; LANG=ja ./pronterface.py"
Androidのbrowser "Dolphin"の中の人達と会ってきた
3rd partyのbrowserとして上位のDL数を誇り、最近spy wareとして叩かれてたDolphinのCEO達とのmeetupが非公開で開催されたので会って来ました。
Dolphin Browser | Smart Phone, Clever Browsing
dolphin browserのあらまし
まずは動画の紹介
Androidが出た当初、プリインストールのブラウザの使いにくさ、3rd partyのbrowserの少なさから、使いやすいsmartphone browserに可能性を感じて起業。
日本はアメリカに次いで2番目にユーザー数が多い。
- 18ヶ国語(ボランティアベース)
- 1300万DL(内iPhone300万)
- 9億PV
日本語対応
最近日本語に対応した。
日本は携帯普及率が高い。リテラシーもとても高い。
日本はまだビジネスパートナーが少ないので今探してる。
日本向addonの計画中。
Q&A
スパイウェアどうよ
謝罪。(すいませんでした。)個人情報の漏洩はありません。安心して使えるように取り組んでいる。
騒動以降、リリースの度にテスト会社(ちょっとうろ覚え)にチェックを行い、万全を期している。
競合
他のbrowserアプリより、普通のアプリそのものが競合。いかにブラウザーを使ってもらうか。
マネタイズ
今はユーザー数を増やすことに専念。
将来的にはプリインストール状態のブックマークを載せる権利の販売などを計画。
翻訳はどうやっている?
ボランティアによる翻訳
開発は中国、デザインやマーケティングはサンフランシスコで行なっている。
addon
APIを公開する予定がある。
感想
以前dolphin使ってて、spyware騒動で速攻アンインストールした僕ですが、再インストールしました。
記事読んだり話を聞く限り、spywareに悪意は無かったみたいですね。騒動が起きた時の対応もしっかりしてたし、これからどんどん伸びていきそうです。
中国の起業だし、福岡に呼べたらいいなぁ。
写真はMoBoTapの3人とAndroidのド肝のtagaさんと鹿。
xmlのボタン切り替えselectorでstate_pressedが効かないと思ったらitemの順番に意味があった
タッチしたときに画像が切り替わるボタンを作るのでxmlをselectorで作りました。
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/nav_gallery"></item> <item android:state_pressed="true" android:drawable="@drawable/nav_gallery_hover"></item> </selector>
なぜかタッチしても切り替わらない・・・。(´・ω・`)
android:drawableを一番下に指定しないとだめみたい。
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/nav_gallery_hover"></item> <item android:drawable="@drawable/nav_gallery"></item> </selector>
切り替わりました(`・ω・´)シャキーン
C2DMについて調べてみた
申請はアプリのパッケージ単位です。登録はGoogle Accountが必要です。
全体構成図
メッセージの送信
- AppServerから送信を支持します。
- C2DMServerではキューイングなどをしてくれています。
- AndroidにMessageが届くので、BroadcastReciverで受信します。
- データを受け取って処理します。
サンプル
Google Pluginでテンプレートが作れます。
Google Plugin for Eclipse の使用 - Google App Engine - Google Code
startup weekend fukuoka に参加して思ったことと、次に参加する皆さんへ
しかだよ。
福岡開催は初となるstartup weekend fukuoka に参加してきました。とても実りある3日間でした。
Event | Startup Weekend
いいこともわるいことも、色々と思ったことまとめます。
学んだこと
たくさん失敗できた
たくさん失敗した。
時間が足りなくなった。プレゼン準備が不十分だった。チーム内のビジョンが揺らいだりもした。マネジメントもプレゼンもスケジュール管理も失敗だらけ。
スケジュール管理をミスったのでプレゼン準備の時間が足りなくなり、プレゼンも大変ぐだぐだになってしまった。チームで作った素晴らしいアイデア・デモもうまく表現できなかった。イベント中最大の失敗でした(´・ω・`)
でも、失敗したからこそ僕達のチームはとても多くの事を学んだ。僕たちは失敗できた。そして僕たちは成長できた。
チーム
- 一人では不可能
それぞれの専門性を活かしたチームで一つのサービスを作るのはすごく楽しい。すごく早い。まるでジェットコースターみたい。とてもわくわくしてスリリングで感動する。
僕達のチームはデザイナー二人、プログラマー二人、マーケッター一人という素晴らしいバランス構成だった。みんな若くて平均年齢28歳。始めて会ったのに友達の様に親しみ、話はサクサク進んでいった。(自分をプログラマーに換算している所に落とし穴があった。)
- リーダー役は実作業はできないと思ったほうがいい。
はい。これ大事です。リーダーは実作業できないと思ってください。プレゼン準備とかで意外と時間がありません。意外と時間がありません。はい、二回言いました。吹出してくる問題に対応するので手一杯です。
プレゼンの重要性
- 3日間頑張った成果は最終日のプレゼンで評価される。
逆に言えば、最終日のプレゼンのために3日間デザインしたり、コーディングしたり、マーケティングすると考えたほうが良い。全ては最終プレゼンで表現する。そのための準備は2日目からとりかかっても早過ぎることはない。
リーダーは最終日のプレゼンに向けて作業するべき。最終日の5分間プレゼンがこのイベントの最終アウトプットだから。最高の製品を作っていても、それを紹介するプレゼンがぐだぐだなら、それはぐだぐだな製品にしか見えない。実装と同時にプレゼン準備を進めよう。
話したいことの問題提議、解決策、具体策を即座にまとめるコツ
最初に1分間ピッチって言う自分の考えているアイデアを話す機会があります。まじ短いですよね。でも1分間でまとまらない複雑な物はそれがすでになにか間違っているのです。短い時間でうまく話すには以下みたいな感じにすればうまく出来ると思います。
- みなさんにもこんな事で困ったことありませんか?(問題提議)
- 我々はその悩みを解決すべく◯◯を開発しました。(解決策)
- これをこうやって使えば皆さんの悩みは無くなります。(具体策)
認識違い
参加者と主催者側で明らかなゴールの認識違いがあった。
- 参加者側は製品をローンチすることを目的としていた。
- 主催者側はビジネスプランまでまとめてプレゼンして欲しかった。
これは正直、主催者側はwebに情報を書いておくべきだとと思う。startup weekend については、よく
「あれってなにするイベントなの?」
と何度も色んな人に聞かれたし、僕もうまく返事できなかったし、参加してみたらちょっと違った。
認識違いがあったゆえに、2日目で多くのチームが方向転換を余儀なくされた。それは良い意味の方向転換だったけど、始めから分かってる方がよかった事だと思う。
なんか違うと思ったこと
ローンチするのが目的かと思いきや、プレゼンするのが目的だった。デモが出来てないチームはプレゼンする機会すら得られないかと思いきや、デモなんて無くてもよかったようだ。実装ほぼ0,イメージ図だけでプレゼンしているチームもあった。
でも、それはどうだろう。それはstartup weekendなのか?デモがないプレゼンも幾つかあったけど、それただのアイデアプレゼン大会じゃないだろうか。
no talk. all action.って謳ってるけど、良く議論してアイデアを纏めているチームのほうが評価はよかったりもする。いつの間にかall takl. no action.になってしまっていないだろうか。
正直、思ってたのとちょっと違った。もっとシビアかと思った。デモ重視かと思った。
そうじゃなかった。
それが良いことなのか、悪いことなのかはわからない。どうするのがベストなのかはわからない。
僕の意見は、夢のようなアイデアより動くデモを高く評価したほうがいいということだ。所詮アイデアはただのアイデアで、100個集まっても1つの動く製品には敵わないのだ。
まとめ
ぐちってますが、ここ最近の勉強会・イベント・セミナーの中でもっとも素晴らしいイベントでした。イベントが終わって数日間はstartup weekendの事で脳みそが支配されます。仕事を寝坊する人続出です。それぐらい"刺激的"な3日間でした。
きっと失敗します。思ったように進みません。例え優勝できなくても、ここで得るものはとてもたくさんあります。皆さんも是非参加してみてください。
ノシ
インストールされているアプリの一覧を取得するなど
しかだよ。
AppCircleという、Androidのアプリを楽しむ探すアプリを作ってます。
そのなかの仕組みで、端末にダウンロードしてインストールしたアプリの一覧を取得したくなりました。
@t_eggさんの助言をもらい、以下な実装になりました。
...略... //パッケージマネージャを利用して、アプリケーションの一覧を取得する。 //IntentにCATEGORY_LAUNCHERを指定しているので、厳密にはランチャーに表示されるアプリの一覧です。 PackageManager pm = getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); List<ApplicationInfo> apps = pm.getInstalledApplications(0); Log.i(TAG, "ApplicationInfo count:"+apps.size()); /* * アプリケーションの一覧の中身に応じて色々処理する。 */ for(ApplicationInfo info : apps){ //アプリケーションにSYSTEMフラグが立っていたら(0000 0001)それはプリインストールされたアプリである。 if((info.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) continue; ...略...
ApplicationInfo.flagsに状態がビットでいっぱい詰まってるので、これを取り出すのがミソですね。