2012年12月26日

Photoshop や Illustrator で QR コードを生成

この前QRコードに関する記事を書いてから程なくして、全くの別件として「Illustrator で簡単にQRコードを生成できるようにする方法ないかなー」という話題を Google+ で見かけた。

ちょっと改造すれば動くようになるかなーと思って実際に作ってみたのが以下のツール。
jsx で書いたので自動的に Windows / Mac 両対応になりました。

Clip to Evernote

2012年12月5日

docomo, au, Softbank のEメール送信用のQRコード

QRコードってEメール送信用とか用途によって特定のフォーマットが存在するらしい。
更に調べてみると docomo, au, Softbank の3キャリア全部同じ形式では通らないらしいこともわかった。
もうひとつ調べてみると JavaScript でQRコードが簡単に生成できる素敵なライブラリがあったので、
ツールを作ってみた
Clip to Evernote

2012年12月1日

Android 4.2.1 からの MVNO データ専用SIM

※現在ではこのページの方法より Xposed Installer + docomo MVNO Sim Patcher による手法がよりオススメです。

Android 4.2.1 から、オフィシャルで修正が入ったため定数を改ざんする必要がなくなりました。
今後はもっと簡単で安全に MVNO のデータ専用 SIM が使えるようになりました。

ただしこの修正は config_voice_capable が false の時だけ適用されるため、通常 true になっていると思われる普通の Android スマートフォンでは有効になりません。
Nexus7 の 3G 対応版などでは上手く動きそうな予感がします。

スマートフォン環境でも使えるようにするには、結局 root 権限が要求される操作が必要になります。
簡単で安全にはなりましたがゆるふわではないです。

以下、Galaxy Nexus に JOP40D を入れて試した時の記録です。
他のメーカーの端末でも 4.2.1 以降なら流用できる可能性があると思います。

1. /system/vendor/overlay/framework/framework-res.apk を作る
必要になるファイルは用意しておきました
実際に使うのはこの zip の中にある framework-res.apk のみです。
フォルダの中に入っているファイルを使えば aapt で全く同じ apk が生成できるはずです。

2. adb で apk を転送する
「別に adb じゃなくても適当なファイラー使えばいいんだろ」って思ってやったら途中で必要になると思いますので、adb 使ったほうがいいと思います。
adb root
adb remount
adb shell mkdir -p /system/vendor/overlay/framework
adb shell chmod 755 /system/vendor/overlay /system/vendor/overlay/framework
adb push framework-res.apk /system/vendor/overlay/framework/
adb shell chmod 644 /system/vendor/overlay/framework/framework-res.apk
adb reboot
adb reboot によって端末が再起動します。

3. ロック画面になるまで待つ
再起動してロック画面まで待ちます。
この時ロック画面を解除して端末を操作しても /data/resource-cache/vendor@overlay@framework@framework-res.apk@idmap のパーミッションが 600 になっていて読み取り失敗し、色々なアプリがクラッシュしまくります。
なので、端末からの操作は一旦諦めてそのまま adb で以下のコマンドを入力して、該当ファイルを読める状態にします。
adb shell chmod 644 /data/resource-cache/vendor@overlay@framework@framework-res.apk@idmap
adb reboot
以上で面倒な操作は終わりです。
この再起動後は普通に端末が操作できると思います。

非常に簡単でしたね。
なんか足りない手順あったら教えて下さい。

4. バンド選択とか諸々
今やその端末は電話的なものではなくなったので、「電話」アプリはなくなりました。
「*#*#4636#*#*」も入力する画面がなくなったので、こういう感じのアプリを使いましょう。
設定画面自体にはアクセスできます(端末が対応しているなら)。

5. 戻す時
/system/vendor/overlay/framework/framework-res.apk
/data/resource-cache/vendor@overlay@framework@framework-res.apk@idmap
この2つを消して再起動すれば元に戻ります。

----

電話アプリが使えなくなるので Android 標準の SIP 通話とかはアクセスできなくなるかも知れませんが、CSipSimple を起動するとダイアル用の画面とかは自前で用意してくれているようなので、もしかしたらその辺利用すれば普通に使えるのかも知れません(試してない)。

あんまり Android に詳しいわけではないので config_voice_capable を変更することによる影響範囲とかはよくわかっていませんが、何か困ることがあったら追って報告します。

osa さんにご協力頂いて、この辺まで色々スムーズに調査できました。
ありがとうございます。

2013-01-08 追記 ----

電話機能を潰したくない場合の話

※以下の方法は Android 4.3 以降では実装箇所が変わっているので注意。
 Xposed モジュールが導入簡単でオススメ。

config_voice_capable が false の時だけ適用されるという動作を逆に変更して、true の時だけ動くようにしてしまうのが多分一番簡単に電話機能を残し処理もあまり変えずに変更できる方法じゃないかと思ってます。
実際に試してはいないものの、多分こんな感じで GsmServiceStateTracker.smali の中で
.line 702
.local v13, voice_capable:Z
if-nez v13, :cond_86

.line 702
.local v13, voice_capable:Z
if-eqz v13, :cond_86
のように(lineの値はROMによって違うでしょうが voice_capable:Z がいい目印になるはず)、if-nez を if-eqz に差し替えれば挙動が逆になって config_voice_capable が true の時にだけ適用されるようになるんじゃないかと思ってます。
Clip to Evernote

2012年10月3日

NME で WebP 画像を使えるようにしてみた

NME でゲームを作った時、画像リソースを全て png 形式で持たせていたが、個人的にやりたいと思っていた WebP 画像対応をしてみたのでその辺の話を少し書こうと思う。
Clip to Evernote

Nexus7 を買った

ある日の朝、目がさめてネットを見てみると Nexus 7 の話題で盛り上がっていたので少し追ってみると、どうも国内での販売が開始されたという。

今では立派な家族の一員です。

7インチタブレットというのは電子書籍に最適なサイズで、部屋でゴロゴロ転がりながら何か読むのに丁度よかったし、実際 Nexus7 についてくる 2000 円分のクーポン券はほぼ全て電子書籍の購入に費やしてしまった。

いいものを買ったような気がする。
Clip to Evernote

2012年9月24日

Haxe + NME でクロスプラットフォームなゲームを作った

Flash / Adobe AIR / Android / iOS で動くゲームを作った
クロスプラットフォームで動くゲームを作ったので、その辺の話をちょっと書く。
Clip to Evernote

2012年9月12日

Cubase のオートメーションはデバイスのバッファサイズに依存する

「teo」という Windows 用の仮想 ASIO ドライバを作った話。
Clip to Evernote

2012年5月30日

tumblr のデータと共にココロシンカ製作過程を振り返る


ココロシンカが完成してから少し経ったので、tumblr と共に冷静に当時を振り返ろうと思う。
作業が進むごとにファイルをアップロードしてたので振り返っても個人的には少し面白い。
Clip to Evernote

2012年5月29日

Instagram が楽しい

最近はもうずっと写真を撮ったら Instagram に共有している。
Clip to Evernote

2012年5月28日

ウルトラワイドコンバーター VCL-ECU1

NEX-5ND を買って以来カメラを持って出かけることが多くなったのだが、付属していた SEL16F28(E 16mm F2.8) はもうひとつ付属していた SEL1855(E18-55mm F3.5-5.6 OSS) と比べるとどうも使用頻度が低い。
Clip to Evernote

2012年3月7日

みんな大好きGo言語の Windows 用バイナリRC版

Go言語は最近 Go 1 というメジャーリリースに向かって開発が進んでいるようなのですが、RC版の Windows 用バイナリがリリースされていたので試してきましたよ。皆もレッツGo!
Clip to Evernote

2012年1月19日

Android + データ専用 SIM で「緊急通報のみ」を消す

こういうの。

※既にバッチファイル内で自動化処理も入ってます。

データ通信専用 SIM では実際には試してないけど恐らく緊急通報できないのだろうから「緊急通報のみ」も消してしまっていいのではないか、ということで消し方に関する話。
Clip to Evernote

2012年1月10日

「Android + データ専用 SIM での動作修正パッチ」動作報告リスト

Information for Non-Japanese speakers by SBS

Android + データ専用 SIM での動作修正パッチ」を使用した場合や、バッチファイルと同じような作業を手作業で行った場合、または非 deodex 環境に対して手作業で適用した場合に改善があった端末のリストです。
Clip to Evernote

Android + データ専用 SIM での動作修正パッチ

Information for Non-Japanese speakers by SBS

※Android 4.0.3 以降の端末の場合は現在ではこのページの内容よりも Xposed Installer + docomo MVNO Sim Patcher による手法のほうが副作用が少なく安全でオススメです。Xposed モジュールの手法で上手く動かなかった場合や、Android 4.0.3 未満の端末の場合のみ、このページの手法を試すことをオススメします。

これは主に docomo の MVNO でのデータ専用 SIM で発生する「セルスタンバイが大量にバッテリーを消費する問題」や「アンテナが表示されない問題」を回避するためのパッチです。
前回 b-mobile のデータ専用 SIM での動作を改善してみたものが、どうやら他の環境でも動く気配がしているのでバッチファイルにまとめました。
Clip to Evernote

2012年1月7日

GALAXY NEXUS GT-I9250 を買った

俺は初 Android が Honeycomb タブレットで、いわゆるところのスマートフォン的なものを持っていなかったので、試しに GT-I9250 を買ってみた。結局 Android 2.x のハードを持つことは一度もなかった。
先に b-mobile の話を書いてしまったので日記としては順番が逆っぽくなった。

初めてのことだらけなので、右も左もわからぬまま色々触っている。
今回は root を取らずに使うのは厳しそうなのでそのへんを含めて勉強する。

とりあえずイメージのバックアップのために bootloader を unlock して、ClockworkMod Recovery で試しに初期イメージをバックアップしてみた。
手順がすごく簡単だし、ちょっとした変更をするときでも積極的にバックアップしていくとよさそうだ。

簡単に上手くいったので続いて日本語フォントを突っ込むために同じく ClockworkMod Recovery で /system をマウントし、/system/fonts に MMCedar を突っ込み、/system/etc/fallback_fonts.xml を編集して DroidSansFallback.ttf の直前に定義を加えた。
最初はマルベリを入れて定義も一番上に追加したのだが、英数字までマルベリになるのは見た目的にイマイチな感じだったので色々試して今のやり方に落ち着いた。
日本語フォントもうまく出たので改めてこの状態のイメージをバックアップした。

次に、b-mobile のデータ専用 SIM を使う予定だったので、いろいろ調べて対策した。
自力で framework.odex を再構築するのはどうも上手くいかない気配がするので、最初から全て deodexed な CFW で作業するように方針を変更したら簡単にうまく行った
やっとこれでスタートラインに立てたような気がする。
Clip to Evernote

2012年1月6日

Android + b-mobile データ専用 SIM で電界強度を表示する

ここの内容を Galaxy Nexus に限定せずに大半を自動化するバッチファイルを作りました(2012/01/10)が、Android 4.0.3 以降の場合は今はもっとマシな方法があります(2013/04/04)。

docomo の MVNO のデータ専用 SIM で変な挙動を起こす話はそこそこ有名だと思う。
Android だと電界強度が出ずに電波なしに見えるとか、セルスタンバイが異常にバッテリーを食うとか。
よく回避策として電界強度はウィジェットとかアプリで、セルスタンバイに対しては機内モードで対応する話を見かけるのだが、そうではなくて根本的に問題を解決する方法がないか調べた。
わかりやすい解決策は出てこなかったものの、原因らしきものは見えてきたのでそれに対して応急処置をする形で対応させてみた。

Clip to Evernote

2012年1月5日

Eye-Fi でアップロード先に FTPS サーバを指定できる

たそがれねこ
普段 Eye-Fi からは ASUS Eee Pad Transformer TF101 へ画像を送っていて、画像を溜め込んでいる。
端末自体が 32GB あることもあってすぐにはパンクしないものの、ずっと Android に突っ込みっぱなしも微妙なので取りあえずどっかに退避させたかった。

まあ Picasa とかでもいいんだけど、Eye-Fi からアップロードすると 2048px には縮小できないし、どうやら FTP / FTPS サーバへのアップロードにも対応しているようなので Python で FTPS サーバを作ってみた。

pyftpdlib を使ってます。
#!/usr/bin/python
# -*- utf8 -*-

PORT       = 990
USERNAME   = 'yourname'
PASSWORD   = 'password'
BASE_PATH  = '/path/to/ftp/root'
SSL_KEY    = '/path/to/keyfile.key'
SSL_CERT   = '/path/to/certfile.crt'
PASV_PORTS = range(65500, 65535)

import os, datetime, shutil
from subprocess import Popen, PIPE
from pyftpdlib import ftpserver
from pyftpdlib.contrib.handlers import TLS_FTPHandler

class MyTLS_FTPHandler(TLS_FTPHandler):
  def on_file_received(self, file):
    date = None
    p = Popen(["dcraw", "-i", "-v", file], stdout=PIPE)
    for line in p.stdout:
      if line[:10] == "Timestamp:":
        date = datetime.datetime.strptime(line[11:].rstrip(), "%a %b %d %H:%M:%S %Y")
    if date:
      dest_path = BASE_PATH + "/" + date.strftime("%Y-%m-%d")
      if not os.path.exists(dest_path):
        os.makedirs(dest_path)
      filename = os.path.basename(file)
      if filename[len(filename)-9:] == ".JPG.jpeg":
        filename = filename[0:len(filename)-5]
      shutil.move(file, dest_path + "/" + filename)

def main():
  authorizer = ftpserver.DummyAuthorizer()
  authorizer.add_user(USERNAME, PASSWORD, BASE_PATH, perm='elradfmw')
  ftp_handler = MyTLS_FTPHandler
  ftp_handler.keyfile = SSL_KEY
  ftp_handler.certfile = SSL_CERT
  ftp_handler.passive_ports = PASV_PORTS
  ftp_handler.authorizer = authorizer
  ftpd = ftpserver.FTPServer(('', PORT), ftp_handler)
  ftpd.serve_forever()

if __name__ == '__main__':
  main()
普通にファイルをアップロードしたいだけであれば MyTLS_FTPHandler のところ全部必要なくてほとんどサンプルのままでいい感じになるはず。PASV_PORTS に指定した範囲のポートで PASV モードが動くので最低限ここのポートの範囲と PORT に指定したポートだけ空いていれば上手く動く。

自分が使うにあたって「撮影日でフォルダ分けしたい」というのがあったので、dcraw を使ってタイムスタンプを取得した上で JPEG ファイルと RAW ファイル(自分の場合は ARW 形式)を日付フォルダ内に突っ込むようにしてある。

で、作ってみたものの Eye-Fi の Android アプリからアップロードさせると何故かすげー遅い
だから結局 Eye-Fi からはアップロードさせずに AndFTP からアップロードさせるようにして使ってる。
AndFTP からアップロードした場合は全然遅くないので Eye-Fi のアプリがなんか変だと思う。

今は普通に FTPS サーバで受け取ってるだけだけど、ここから好きなサイズに縮小して Picasa に投げたりも当然できるのでちょっと変なことでも簡単にできそうでいい感じ。
Clip to Evernote

俺の正月

12月30日、年末年始に食べるものを買いに行く店を下調べした。
12月31日、年末年始に食べるものを買ったりするために出かけた。
1月1日、有野課長をひたすら見続けた。フォーゼとかの映画見た。地震きた。
1月2日、ゴロゴロしてた。
1月3日、ゴロゴロしてた。
1月4日、ゴロゴロしてた。
Clip to Evernote