codex

2011年12月15日木曜日

雑記 - HDD・・・その後(その三)

今日、WDのRMA画面を見てみたらステータスが"Shipped"に変わってた。
まだ追跡番号は反映されていないけど送られたのは確かなようだ。



HDD自体も"WD20EARS-00MVWB0"から"WD20EARX-00PASB0"に変更されている模様。
WD20EARXだと転送速度がSATA 3 Gb/sからSATA 6 Gb/sになっているのでいいかも。
まぁそれ以前に壊れないでもらいたいわけだが・・・

未だにいろいろ入れたいものとかたくさんあるので早くきてもらいたいなぁ

2011年12月13日火曜日

androidアプリ - 10 Billion Downloads!(六日、七日目)

やっぱりゲームばかり・・・
重そうなゲームはパス。と、思ったら六日目は買うものなし。
七日目はアンコールで復活した”SoundHound ∞”だけ買ってみた。

SoundHound ∞
曲を鼻歌やスピーカーから出てる音を聴かせて曲を検索できるアプリ。
使ってみたけど外国の曲だけしか検索対象じゃないから
いつ使うか少しなぞw
まぁすごく限られた局面で使うかも知れない・・・
いや、恐らく使わないような気もするw

あーぁ、期待感だけ高まってしまったねぇ。
ツールはアンコールだけになりそうな予感・・・
またADW EXが出てきたり?w

2011年12月12日月曜日

雑記 - HDD・・・その後(その二)

やっと受理された模様。
郵送物が届いたのが12/6で受理されたのが12/10かぁ。
RMAで来ているのが多いのか、または対応がただ遅いだけなのか・・・
普通に「営業日」っていうと会社の休みの日以外だと思うけど
10日で受理して、メールを日曜に送信するってことは日曜日も営業日なのか?w
まぁ宗教上の理由からみると日曜日が必ず休みではないとは思うけどね。



















5~7日だと・・・7日なんだろうな・・・どうせw

androidアプリ - 10 Billion Downloads!(五日目)

まぁ予想していたけど・・・ゲームが多いですね。
ツールが英語キーボード系だと日本語を打つのが普通な場合は
意味ないですね。
とりあえず、二つだけ買ってみました。

Pano
パノラマ写真が撮れるアプリ。
原理的には多数の写真を撮って、その写真を結合する・・・って感じですかね。
試しに部屋でやってみたところ撮り方もテキトーだったからかも知れませんが
直線的な物体(ディスプレイとか)はずれてました。
ちょっとコツがいるみたいですね。
でも、自然風景だと違和感なく出来そうな気がします。

Apparatus
パズルゲーム。
まさしくピタゴラスイッチ的な感じですかね。
まだ1ステージしかやってないですが、これも解き方はたくさんある感じ。

明日もなんかこんな感じなんでしょうねぇ・・・

2011年12月10日土曜日

androidアプリ - 10 Billion Downloads!(四日目、その2)

先ほどSentinel 3: Homeworldのデータインストールをやってみたところ
結構な速さで落ちてきました。
早速、キャンペーンをやってみたところ特に問題もなく動いているので、
やはり、人が集中していたか、サーバが不調だったかのようです。

さて・・・明日は何がセールになるかな~

androidアプリ - 10 Billion Downloads!(四日目)

ツール的なのがほぼ皆無・・・。
ゲームばっかりな印象。
このまま、ゲームばかりになっちゃうのかなぁ。
前からだけどタワーディフェンス系のゲームが多いよねぇ。
ロボ防衛だったかを初めてやった時は新鮮な気がしたけど・・・
さすがに食傷気味。
二本だけ買ってみた。

Sentinel 3: Homeworld
食傷気味といいつつ、タワーディフェンス型ゲーム。
絵が綺麗そうだしいいかな?と思って買ったら・・・
エラーだし!!














恐らくサーバが混んでいたんじゃないか・・・と、思ってるけど、
何度やってもダメ。後日、改めてやってみようか。
なんか、今日購入した分のマーケットからのメールが来ないなぁ。
それほど購入してる人がいるんだろうな。

Spirit HD
これはアクションゲームですね。
自分を指で動かして敵を囲めば倒せるって感じ。
シンプルだけど結構難しい。
と、いうか指先が滑らなくてイライラするw

2011年12月9日金曜日

androidアプリ - 10 Billion Downloads!

3日前から始まったAndroidアプリセール。
10日間日替わりで10本づつ有料アプリが10円になるから注目ですね~
とりあえず、金額的にも全部買っても安いんだけど
使わないアプリはいらないので選択しつつ買ってみました。

■一日目
Great Little War Game
シミュレーションゲームですね。ターン制のオーソドックスなシステム。

Minecraft - Pocket Edition
自分でブロックを使用してゲームを作るものみたいですね。
以前にもHL2のMODでこのようなゲームがありましたね。
まぁ最近話題にもよくあがっているようなので買ってみました。
まだ、起動しかしてないので内容はさっぱりw

Reckless Racing
数種類の車から車種を選んでレースをするゲーム。
コースは悪路が多いので操作が結構難しいですね。
まぁ最初しかやってないからだと思いますが、相手が遅くて楽に勝てます。

SketchBook Mobile
一日目の目玉かな?
SBME(無料版)を使ってましたが、なかなか高性能なドローソフト。
有料版はレイヤーが多く使えるのかな。

Paper Camera - アニメ - 漫画
手書きの鉛筆で描いたように写真が撮れるみたい。
試しに撮ってみたけど・・・イマイチ鉛筆で描いたようには見えなかった・・・
たぶん、カメラの撮り方とか調整しないとダメっぽい。

■二日目
Beautiful Widgets
この日の目玉かな?
ホーム画面をカスタマイズして統一感を出すにはウィジットの見た目も大切ですね。
まぁ・・・まだ使ってないけどw

Flick Golf!
ゴルフゲーム。何気に出来がいいし、面白い。
打ってから、自分で風を起こしたり、バックスピンが自在にかけられるw
タイム制限以内にいくらでも玉は打てる。ピンそばに近いとタイムが+3される。
ホールインワンだとタイム+10.
難しいステージになってくるとおそらくホールインワンが何度も出せないと
タイムオーバーで規定スコアまで届かない。
なかなか、楽しめそう。

Read It Later Pro
一時的にURLを共有するツール。
以前から気にはなってたけど、他にも似たツールを使っているので
とりあえず買ってみた。まだ、ちっとも使ってない・・・。

■三日目
ADWLauncher EX
この日の目玉でしょうね。有名なホームアプリ。
今も無料版のは使ってます。
変更点がアクション関係だったりするので徐々に移行しようかなぁ

Reckless Getaway
レースゲーム。こちらはレース主体というよりスタントアクション重視のような?
ともかく全部できるか点数かでステージのロックが解除される感じ。
GTAでもスタントアクションって苦手だったんだよなぁ・・・

Space Physics
パズルゲーム。玉をゴールまで導くだけ。
しかしながら、ステージ毎の解き方はたくさんありそう。
ゲームをインストールしてからステージのデータをダウンロードしなくては始められない。
まぁ・・・ステージが追加される可能性もあるってことだよね。
ともかくやり始めると面白い。
かなり強引な攻略方法でも半分くらいまでは進めた。
基本操作は玉をダブルタップすると玉は動く。
面白いのは画面に図形や線や円を描くとゲーム内に出現して
ゲーム内にいろいろな影響を与えることが出来ること。
円を描いて線で結ぶと車のように走っていく。
その車に玉を乗せてゴールまで運んだり出来る。
とりあえず、強引なやり方で解いたのを以下に示しますw

車で引っ張って、枠を移動

今度は上の枠を車で押して・・・

上の枠を円の大量発生と車の活躍で立てるとこまできた

あ?なんかいろいろ荒ぶる車のおかげで玉は下敷きに・・・

まだまだ車は元気です。上の枠は左の方へ捨て去ってしまいました

活躍した車と円は端末シェイクで綺麗さっぱり!

枠を車で引っ張ってもらえば、ゴール目前。後は玉をダブルタップすればゴール!

2011年12月7日水曜日

雑記 - HDD・・・その後。

やっとシンガポールのサポートまで届いた模様。













さて、返却までどのくらいかかるのかな?
片道が四日かかったから同じくらいかなぁ。
あー早くこないかな~
今度のは壊れるなよ!

2011年12月2日金曜日

雑記 - ローソンプリント道中記

いろいろWDのHDDについてみてたら「低速病」とか話題になってたんだw
もしかしたら自分のもなってたのかなぁ・・・でも、何十時間コピーにかかるなんて
なってなかったしなぁ。

まぁ、ウチのWD20EARSはいきなりアクセスが不可能になったから
「低速病」というより普通に故障だと思う。
そして見てると、メーカーの交換保証ってのがあるじゃないですか!
Western Digitalの故障したハードディスクをRMA保証で交換 - 個人輸入・海外通販・代行方法のまとめ

ここを参考にさせていただいて、メーカー交換保証をやってみよう~
と、思ったら・・・プリンターがすさまじく古いやつしかない上に
もう何年も使ってない上に、新しくしたパソコンにレガシーコネクターがないよ・・・
どうせ繋がったとしてもインクが固まってそうだし。

ぐぐるとコンビニでメディアから印刷ができるそうな。
ローソンとセブンイレブンでやってる模様。
近くにはセブンイレブンがないから、ローソンでいいや。
JPEGとかPDFまで出力できるし、PDFでいいかな・・・と。
標準の「PDFに保存」「Primo PDF 日本語版」「CubePDF」「PDF reDirect」を試した。
なぜか全てのツールが、送り主、宛先、バーコードを出す用紙の下がちゃんと印刷されない。
仕方がないのでPDFは諦めてJPEGでよしとする。
Chrome ウェブストア - webページショット - Webpage Screenshot

「WEBページショット」はPNGなのでペイントでJPEGに保存しなおしてこれはよかった。
次は「RMA (返却承認)手順指示情報」という4ページある用紙なのだが、
最後に試した「PDF reDirect」もちゃんと出ていた”ようなので”そのままローソン直行。
帰ってきて「さて、署名をするか」と思ったら・・・
1ページ目の一番下にある「署名欄」がないw
よーく、見てみるといろいろ4ページの最初の方も微妙にかけていたり・・・
やり直しですか・・・

ここまではまだサブのネットブックでやっていたので、新しくしたパソコンでやってみよう!と、
「PDFに保存」を試したら、思いのほか綺麗に出力されてた。
(「CubePDF」、「PDF reDirect」は伸ばし棒”ー”とかがまっすぐな横線だったし)

また、ローソンに直行。
(まぁ気付いていたけどファイルサイズが4ページしかないのにPDFが20M超えてたよ)
「プリント開始」のボタンを押してから、10分経っても印刷されない;;;
店員さん呼んで対処してもらうも、端末自体がフリーズ。
再起動もしなくなった模様・・・。俺のセイですか・・・ゴメンナサイ;;;

もう・・・PDFは怖いよ・・・。
もう、「WEBページショット」でPNG→JPEGにしてもっていくよ・・・。
4ページ分で縦長なJPEGができたよ。
今度は別のローソンに行かないと;;;
JPEGだと印刷開始が早い。シャー・・・1ページ目・・・ん?
1ページしか出ないが?
見たら、縦長に縮小された印刷物ができたよw・・・
字が小さくてつぶれてるし、さすがに強引に使うことはできない。

もう、こうなったら縦長JPEGを自力で4ファイルに分けるか・・・
やろうと思ったけどペイントしか新しいパソコンに入ってない。
もうダメもとで「Primo PDF 日本語版」を試す。
あれ?意外にいい出来。
そういえば最初の印刷物でダメだったからすぐ見限っていただけだった。
今度はちゃんと文字がなくなっていたり、切れてたりしていないか確認。
ファイルサイズも1Mちょっとだし、大丈夫だろう・・・たぶん。

ローソン到着・・・やっとまともに印刷ができた!
なんか無駄に疲れた;;

そういえば、ここでは書いてなかったけど、
別の日にパーティションをきっているUSBメモリをローソンで印刷しようと思ったら、
最初のドライブしか見にいかないようだ。
トランセンド JetFlash 620に入れてもっていったら、
セキュリティープログラムの入っている最初のドライブにしか見にいけなかった。

長々と書いたが・・・w まとめると・・・


  • パーティーションを切っているUSBメモリは最初のドライブにデータがないと印刷できない。
  • PDFファイルは無駄に大きいと印刷できない。
  • JPEGファイルは1ファイル1ページに出力される。
  • 出力されたPDFファイルは元データがちゃんと出力されているか確認しよう・・・w


とりあえず、PDFの印刷イメージ作成は「Primo PDF 日本語版」がいいのかなぁ

ちなみにシンガポールまでのEMS(国際スピード郵便)の料金は1520円でした。
HDDを買った時のそのままの梱包財とダンボール箱で送りました。

雑記 - マシン一新

結局、SSD以外にもOSもCPUもマザボもグラボもメモリも変えてしまいました・・・
最初の見積もりよりも若干高くついて8万弱。
前のマシンがcore2DUOだったけど、特に遅いとも感じなかったが・・・
core i5のおかげなのかSSDのおかげなのか、ものすごく早くなった。
まぁ、まだアプリもろくに入れてないしなぁ。
昔、あまりにもの遅さ&グラフィックの酷さで(マシンのせいで)途中で投げてた
GTA4でもやれれば実感沸くんだろうけど。
HDD飛んだし、SSDにゲームは入れたくないしなぁ。
データ用のHDDを調達してから試すかな。

2011年11月28日月曜日

雑記 - HDDが壊れた・・・

土曜の時点でメインマシンの立ち上がりが遅くなり
「なんかおかしいなぁ」と思っていたら・・・昨日にはめちゃくちゃ立ち上がりが遅くなって
まともに動かなくなった。
とりあえず、システムは動作しているようなのだが特定のアイコンが表示されていなかった。
まさか・・・とは思ったがデータ用にゲームとかプログラムの大半を入れていたドライブが
認識されていないようだった。
まだ、一年も経ってないのに・・・しかも2TBの4分の1も使ってないのに・・・
しかも、マイドキュメントのドライブだったのに・・・
「WD20EARS」を価格comのレビューで見ると確かに壊れやすいようで・・・
でも買った当初(去年末かな)はいいレビューしかなかった気がするなぁ。
まぁ、時限爆弾のように時間が経ってから壊れてるんだろうなぁ。

とりあえず、今はHDDが高いから買いたくないし・・・
システムをSSDにして、いま使ってるシステムドライブのHDDをデータに転用するか・・・
でも、OSの再インストールをするならばWindowsXPからWindows7に変えたいし。
いや、ならばCPUも・・・と、なるとマザーボードも変えないといけないし。
CPU、マザーボード、SSD、ビデオカード、Windows7・・・全部変えると7万はいくのかぁぁぁ
まぁ非現実的な妄想はやめてとりあえずSSDだけ変えようかな。

2011年11月24日木曜日

Android環境 - エミュレータ構築

まぁ、以前からandroidのエミュレータは使っていたんだけど・・・
実機とあまりにも入っているアプリが違うので、マーケットとかからインストールできたら
いいかな・・・と軽い気持ちでやってみました。

とりあえず、ぐぐると
Android SDKを使おう・アンドロイドのエミュレータでマーケットなどのアプリを利用するには
ここが、参考になりそうです。

dos窓1でandroidツール起動
android

環境としてはandroid 2.3.3がいいのでAPI Levelは10ですね。
エミュレータは一つだけ起動させます。

dos窓2でshell起動
adb shell

dos窓2でshellコマンド実行
chmod 777 /system/app

exit

dos窓2でマーケットアプリ等を転送と不要ファイル削除
adb push Vending.apk /system/app/

adb push GoogleServicesFramework.apk /system/app/

adb push MarketUpdater.apk /system/app/

adb push Development.apk /system/app/

adb shell rm /system/app/SdkSetup.apk

まぁ・・・一応、systemにはマーケットが入ったが・・・エミュレータを落とすと
systemが最初の状態に戻ってしまいますねぇ・・・毎回やるのメンドクサイよ・・
system.imgには反映されないんですなぁ・・・なんでだよぅ。

まぁまたぐぐると
Android エミュレータの system.img を書き換える。 - kikumotoのメモ帳
ここがそのような感じですな。

ちょっと更新日付が古かったのでツール先のリンクが切れてました・・・
http://jiggawatt.org/badc0de/android/mkfs.yaffs2.arm.tar.gz
これでいいのかな。


mkfs.yaffs2を/system/binにコピー
adb push mkfs.yaffs2.arm /system/bin/mkfs.yaffs2

パーミッション変更
adb shell
chmod 777 /system/bin/mkfs.yaffs2
exit

/systemをsdcardへコピー
adb shell mkfs.yaffs2 /system /sdcard/system.img

sdcardからパソコンへコピー
adb pull /sdcard/system.img system.img

※これすごく時間がかかる・・・90MB程度なのに25分はかかった・・・

C:\Documents and Settings\(ユーザー名)\.android\avd\(エミュレータ名).avd
ここへsystem.imgをコピー。

とりあえずはマーケットは消えずに使えるようになったが・・・
マーケットの検索がおかしいのか、エミュレータだからかわからないけど
全てのアプリが出てこないw
こりゃ・・・apkをどーにかして調達して、インストールした方がいいんじゃないか?w
すごくまた無駄な時間をすごした気もするが・・・

2011年11月22日火曜日

Chromeアプリ - Chrome Remote Desktop BETA

昨日、初めて使ってみたんだけどお手軽でいいね~
Chrome ウェブストア - Chrome Remote Desktop BETA

使い方は操作する側、される側ともにChrome Remote Desktop BETAをインストール。
操作される側からアクセスコードを教えてもらってから
操作する側にアクセスコードを入れるだけ。非常に簡単。

ちょっと相手方の方の回線が遅かった(下り2M、上り256k)ので、
Windowを動かしたりすると引っかかる、ちゃんと意図した場所にいかないってのもあったけど。
それとセッションが10分くらいでたまに切れるのもあったかな・・・
まぁ再度アクセスコードを送ってもらえばまたすぐ使えるのでいいけどね。

前まではskypeだけで説明してもらってたから、相手の説明だけだとサッパリなときがあったけど
プログラムの挙動だとかがこっちにもすぐにわかるのですごく便利だった。
本来ならばWindowsのリモートディスクトップの方がいいんだろうけど、
設定とか面倒そうだしな~
まぁ相手方がパソコンに不慣れな場合はこっちでやったほうが楽だしねぇ。

2011年11月19日土曜日

アプリ - オンラインストレージ(続き)

Sugarsync楽だわ~・・・と、思って他のことをいろいろしていたら
フォルダの同期が勝手に解除されてた・・・。
まぁ、SDカードが認識できない状態になったりしたことも原因なのかもしれないが
そもそもSDカードの不具合なんてSugarsyncの同期をやる前には起きなかったしなぁ
復旧はできたけど”My SugarSync Folders"ってところをいじったりすると
すぐに同期の設定が解除されてしまう・・・メンドクサイw

もう、また別の方法かアプリを探すかな・・・

2011年11月18日金曜日

アプリ - オンラインストレージ

今までDropboxをメインに使ってたけど、あまり使わなかったSugarsyncの方が
テキストベースのソースファイルなどの同期を取るのには便利。
なにより、SDカード内の任意のフォルダへ同期ができるのがいい。
メモアプリはsimplenotepadを使ってるんだけど、自動でauto_exportedフォルダを
Sugarsyncで同期させておけばPCとスマホのメモが同期できる・・・楽だわ~
Dropboxだとわざわざファイラーで手動でコピーしてた・・・

まぁ使い分けるのが一番賢いのかなぁ

2011年11月16日水曜日

Blogger - コード部分の表示を変更

うーん、ブログは今までやったこと無かったからhtmlとかcssとかは厳しい・・・
とりあえず、Bloggerカスタマイズで検索していたらいいところを発見!
Blogger カスタマイズ Tipsまとめ | Will feel Tips

その中にコードを表示するスクリプトが載っていたので、そのまま使わせていただきました。
SyntaxHighlighter

なかなか、簡単だし便利だなぁ

2011年11月12日土曜日

Python - メールの日本語対応化・・・(嬉)

先ほど失敗してエポケーしたはずだったが、しつこくpythonのメール関連のページを
見ていたら参考していたサイトに答えは載っていた・・・w
ウノウラボ by Zynga Japan: Pythonでメールを送信したい人のためのサンプル集

一番下のコメントにある、

msg = MIMEText(body, 'plain', encoding)

msg = MIMEText(body.encode(encoding), 'plain', encoding)
これで文字化けせずにメールが受信できた~(嬉)

とかいいながらウキウキと「馬鹿野郎~」とかつけて送信したらまたエラーw
なんだよ・・・と思って成功した時は「あいうえお、かきくけこ」だったので
「あいうえお、かきくけこ~」でテストしたら再現できた。「~」が犯人か。
いろいろ、調べると・・・むむ・・・エンコードの'ISO-2022-JP'ってシビアなのね。
PythonJISX0213 – アクセンスのおまけ

もう!・・・別に読めればいいんだから'ISO-2022-JP'の必要ないんじゃ・・・?
こりゃ、エンコードは'utf-8'でいいよね?

テストしたら「㌧㌦㍑~」も含めてエラーもなし。
#コードはuploadとかできないのか・・・

DOWNLOAD

sendmailAjp.py

# -*- coding: utf-8 -*-
import os
import glob
import codecs
import unicodedata
import mimetypes
from email import encoders
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.Header import Header

def attach_files(msg, attachements):
  for attachment in attachments:
    attachment = attachment.strip()
    for path in glob.glob(attachment):
      filename = os.path.basename(path)
      if not os.path.isfile(path):
        continue
      # Guess the content type based on the file's extension.  Encoding
      # will be ignored, although we should check for simple things like
      # gzip'd or compressed files.
      ctype, encoding = mimetypes.guess_type(path)
      if ctype is None or encoding is not None:
        # No guess could be made, or the file is encoded (compressed), so
        # use a generic bag-of-bits type.
        ctype = 'application/octet-stream'
      maintype, subtype = ctype.split('/', 1)
      if maintype == 'text':
        fp = open(path)
        # Note: we should handle calculating the charset
        part = MIMEText(fp.read(), _subtype=subtype)
        fp.close()
      elif maintype == 'image':
        fp = open(path, 'rb')
        part = MIMEImage(fp.read(), _subtype=subtype)
        fp.close()
      elif maintype == 'audio':
        fp = open(path, 'rb')
        part = MIMEAudio(fp.read(), _subtype=subtype)
        fp.close()
      else:
        fp = open(path, 'rb')
        part = MIMEBase(maintype, subtype)
        part.set_payload(fp.read())
        fp.close()
        # Encode the payload using Base64
        encoders.encode_base64(part)
      # Set the filename parameter
      part.add_header('Content-Disposition', 'attachment', filename=filename)
      msg.attach(part)

def sendemail(email_name, email_user, email_pswd, mailto, subject, body, attachments, encoding):
  import smtplib

  # DON'T CHANGE THIS!
  # ...unless you're rewriting this script for your own SMTP server!
  smtp_server = 'smtp.gmail.com'
  smtp_port = 587

  # Build an SMTP compatible message
  msg = MIMEMultipart()
  msg['Subject'] = Header(subject, encoding)
  msg['To'] = mailto
  msg['From'] = email_name + " <" + email_user + ">"
  msg.attach(MIMEText(body.encode(encoding), 'plain', encoding))

  attach_files(msg, attachments)

  # Attempt to connect and send the email
  try:
    smtpObj = '' # Declare within this block.
    # Check for SMTP over SSL by port number and connect accordingly
    if( smtp_port == 465):
      smtpObj = smtplib.SMTP_SSL(smtp_server,smtp_port)
    else:
      smtpObj = smtplib.SMTP(smtp_server,smtp_port)
    smtpObj.ehlo()
    # StartTLS if using the default TLS port number
    if(smtp_port == 587):
      smtpObj.starttls()
      smtpObj.ehlo
    # Login, send and close the connection.
    smtpObj.login(email_user, email_pswd)
    smtpObj.sendmail(email_user, mailto, msg.as_string())
    smtpObj.close()
    return 1  # Return 1 to denote success!
  except Exception, err:
    # Print error and return 0 on failure.
    print err
    return 0

import sys
import android

if 'ascii'==sys.getdefaultencoding():
  stdin = sys.stdin
  stdout = sys.stdout
  reload(sys)
  sys.setdefaultencoding('utf-8')
  sys.stdin = stdin
  sys.stdout = stdout

droid = android.Android()

try:
  email_name = droid.getIntent().result[u'extras'][u'%EMAIL_NAME']
except:
  email_name = ''

try:
  email_user = droid.getIntent().result[u'extras'][u'%EMAIL_USER']
except:
  droid.makeToast('EMAIL_USER missing')
  sys.exit(1)

try:
  email_pswd = droid.getIntent().result[u'extras'][u'%EMAIL_PSWD']
except:
  droid.makeToast('EMAIL_PSWD missing')
  sys.exit(1)

try:
  mailto = droid.getIntent().result[u'extras'][u'%EMAIL_TO']
except:
  droid.makeToast('EMAIL_TO missing')
  sys.exit(1)

try:
  subject = droid.getIntent().result[u'extras'][u'%EMAIL_SUBJECT']
except:
  subject = ''

try:
  body = droid.getIntent().result[u'extras'][u'%EMAIL_BODY']
except:
  body = ''

try:
  attachments = droid.getIntent().result[u'extras'][u'%EMAIL_ATTACH']
  attachments = attachments.split(',')
except:
  attachments = ''

try:
  body = droid.getIntent().result[u'extras'][u'%EMAIL_ENCODING']
except:
  encoding = 'utf-8'

# Send email
if (sendemail(email_name, email_user, email_pswd, mailto, subject, body, attachments, encoding)):
  sys.exit(0)
else:
  # Exit with error if email is not sent successfully
  droid.makeToast('email failed')
  sys.exit(1)


Python - メールの日本語対応化・・・(悲)

前回のPythonスクリプトを少し修正すれば日本語対応化ができるかと思っていたら・・・
甘かった。

ここを参考にencodingに'ISO-2022-JP'をつければいけるのかな・・と思ってたが、
SyntaxError: Non-ASCII character ・・・
http://www.python.org/dev/peps/pep-0263/ここを参照しろと出た。

これは単純に一行目に
# -*- coding: utf-8 -*-
をつければいいらしい。

再実行後、
UnicodeEncodeError: 'ascii' codec can't encode characters.. なんたら・・・かんたら
エラーらしい。

» UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 2-8: ordinal not in range(128) | Google App Engine Blog BBTUNE

ここを参考に、
スクリプトでsys.setdefaultencoding('utf-8') をやってみた。
とりあえずはSL4A上ではエラーはでなくてメールも送信されたが、
おもいっきり本文が化けている・・・。

それと同時にddmsでcatlogを見ていたが、SL4Aもエラーを吐いてる・・・。

python恐るべし・・・。
とりあえずsetdefaultencodingを根本的にやるにはroot権限が必要みたいだし
その辺で引っかかってるならどうしようもないなぁ・・・。

pythonでの日本語メール送信はエポケー。
どうしても日本語メールを送信するならばperlを入れた方が良いような気がする・・・

Tasker - 端末紛失時の位置確認

あまり紛失などしないとは思うけど転ばぬ先の杖ってやつですかね。
紛失した時に対処するアプリはいろいろあるけど、せっかくTaskerがあるのでそれで済ませようというのが狙い。それにあまりアプリを常駐とかさせたくないしね。

まずは基本的な仕様としては、
1.特定の電話から不在通知が3回きたら機能を実行する。
2.Gmailで位置情報を送信する。

まぁ、簡単な仕様ですね。
とりあえず2.の機能を行うために、SL4Aを使用します。
下記のリンク先のSL4Aのインストールとpythonのインストールを参考にインストールしてください。
SL4A による Android プログラミング - インストール
SL4A による Android プログラミング - インタプリタの追加

あとはメールを送信するpythonのスクリプトが必要になります。
下記を参考にしました。
Automatically Take and Email Your Photo - Tasker Wiki
pythonスクリプト:sendemailA.py

さて、環境は整ったのであとはTaskerの設定です。
新たなprofileを任意の名前で作成してください。
First ContextはEventを選択、Phoneを選択、Missed Callを選択。
Callerは虫眼鏡みたいなボタンを選択。
A Single Contactで機能を実行させる電話番号を選択してください。

次はTaskの入力です。
New Taskを選択。名前はなくてもOKですね。
左下の「+」を選択。
Variableを選択。Variable Addを選択。
変数名をつけます。規則としては%のあとの文字が大文字だとグローバル変数になります。
小文字だとローカル変数になります。文字数は3文字以上必要になります。
今回の場合はグローバル変数じゃなきゃいけないので1文字目は大文字にしてください。
Wrap Aroundは4にします。ここの数値に到達した場合、変数がClearされますので
4以上ならいくつでもOKでしょう(最後に機能実行後にこの変数をClearするので)。
ここでは便宜上%TelCntとします。

次のTaskは先ほどの変数の判定を行うIF文です。
Taskを選択。Ifを選択。右上の黄色いマークを選択して先ほどの変数を選択してください。
真ん中のグレーのボタンを選択してMaths: Greater Thanを選択。
右の四角欄に2を入力。

次からはpythonスクリプトへ受け渡すパラメータを入力します。
パラメータ名は間違えると受け渡せませんので注意が必要です。
Variableを選択。Variable Setを選択。
Name欄に%EMAIL_USERを入力。To欄にGmailアドレスを入力。


Variableを選択。Variable Setを選択。
Name欄に%EMAIL_PSWDを入力。To欄にGmailアドレスパスワードを入力。




Variableを選択。Variable Setを選択。
Name欄に%EMAIL_TOを入力。To欄に送信先メールアドレスを入力。

Variableを選択。Variable Setを選択。
Name欄に%EMAIL_SUBJECTを入力。To欄に任意のメールタイトルを入力。
(メールが着てわかりやすいものがいいでしょう)


Variableを選択。Variable Setを選択。
Name欄に%EMAIL_BODYを入力。
To欄に本文を入力しますが、私は以下のようにしました。
Battery Level: %BATT
http://maps.google.co.jp/maps?f=d&source=s_d&saddr=%LOCN

1行目のはバッテリーの残量です。
2行目は単純に%LOCNだとNETWORKから算出した座標だけしか出ないので
それだといちいちGoogle Mapに行って座標コピペで表示するのが面倒なので
アドレスに入れてみました。まぁ見れればいいかなぁ・・・と。
ちなみに本文に日本語は使用できません。

次のTaskはpythonスクリプトの実行になります。
Miscを選択。Run Scriptを選択。
Nameの横の虫眼鏡を選択。sendmailA.pyを選択。
Pass Variableの横の黄色マークを選択。
順次、先ほど値を設定した変数を入力していくのですが、
変数毎にカンマ(,)で区切らなければいけません。
%EMAIL_USER,%EMAIL_PSWD,%EMAIL_TO,%EMAIL_SUBJECT,%EMAIL_BODY

次のTaskからはスクリプト実行後の後処理になります。
特にパスワードはClearしておかないとTaskerのVariable Edit画面で見えてしまうので
Clearは必要になります。
また、一番最初に使用した%TelCntも次は4になってからWrap Aroundで
Clearされるので実質4回不在通知を送らなくてはならなくなるので、
これもClearが必要になります。

Variableを選択。Variable Clearを選択。
Nameの横の黄色マークを選択し、%EMAIL_PSWDを選択。

Variableを選択。Variable Clearを選択。
Nameの横の黄色マークを選択し、%EMAIL_BODYを選択。

Variableを選択。Variable Clearを選択。
Nameの横の黄色マークを選択し、%EMAIL_SUBJECTを選択。

Variableを選択。Variable Clearを選択。
Nameの横の黄色マークを選択し、%EMAIL_TOを選択。

Variableを選択。Variable Clearを選択。
Nameの横の黄色マークを選択し、%EMAIL_USERを選択。

Variableを選択。Variable Clearを選択。
Nameの横の黄色マークを選択し、一番最初に書いた%TelCntを選択。

最後に別になくても動きそうですがIfの終わりのTaskを追加します。
Taskを選択。End Ifを選択。

以上で処理の記述は終わりですが、動作チェックは必要ですね。
とりあえず、Task側だけの動作チェックを行いましょう。
右下にある三角のマークを押します。実行されると左に赤いマークがしばらく出ます。
一回目は当然なにも起こりません。
二回目も何も起こらないのを確認。
三回目でSL4Aが立ち上がって(ステータスバーに表示されて2,3秒後には消えます)
メールが送信されていれば成功です。
メールが送信されていなければ
pythonへの受け渡しパラメータ名が間違っていないかどうか、
また、メールアドレスやパスワードが間違っていないか確認してください。
成功していたら最後にパラメータがClearされているかも確認してください。

Taskerの最初の画面まで戻って、右下にある黄色マークを押します。
Global Variable Editorというのが起ち上がって、
ずらずらと先ほど定義した変数名が出ていると思います。
右側になにも表示されていなければClearは成功しています。

一応、電話から3回不在通知をしてメールがくるのを確認してください。

これで終了としてもいいのですが、TaskにGmailアドレスのパスワードを
入力しているのですぐに誰にでも見れてしまいます。
それはちょっとなぁ・・・と思うので、Taskにパスワードをかけます。
Tasker最初の画面からMenuボタンを押して、Preferencesを選択。
UIタブを選択。Lock Codeに任意の数字を入力。

Profileを選択してスパナとドライバーの絵のアイコンを選択。
Propertiesを選択。一番上のLock In UIをチェック。
鍵マークが出たらOKです。
一旦、Taskerを終了させて再度、鍵マーク付のProfileを選択する際に
Enter Lock Codeの入力画面が出てLock解除も確認できればOKです。

お疲れ様でした。

#今度からは簡略化して書こう・・・

2011年11月11日金曜日

Androidアプリ - tasker(雑記)

買ってからようやく一週間。
自宅wi-fiの自動接続・切断を目的にスマホにしてからはAutomateIt、Llama - Location Profilesを使用していたが、もっといろいろできるという話だったので購入。
最初は確かに「なんだコレ?」な部分があったが、ようやく慣れてきた。
とりあえず、wi-fiの自動接続・切断の設定はうまくいっているようだし(昨日、ちょっと挙動がおかしかったが修正して直ったと思う)、まだいろいろ実験したいこともあるし500円出す価値はあるね。
今のところSL4Aでpythonスクリプトとの実験をしているが、スクリプトからtaskerにパラメータが引き継げないということなのでちょっと残念。でも、手軽にいろいろできるようなので試してみるつもり。
まぁ・・・androidもpythonもjavaも今までやったこと無いから勉強しながらやらないとなぁ。

テスト投稿

とりあえず、投稿してみる。