preload
5月 08

前回までの「ケータイサイトでFlashLiteコンテンツを動的生成する」エントリで紹介してきた swfmill を使った FlashLite コンテンツの動的処理に関連して、SWF に含まれる画像やテキストを操作するための簡単なクラス集を作ってみました。

swfmill_ruby – github

swfmill と同じ GPL2(the GNU GENERAL PUBLIC LICENSE Version 2) にてライセンスいたします。

swfmill_ruby は、Swfmill を ruby から起動するための簡単なクラス(SwfmillUtil::Swfmill)と、これを使って Swf を操作するためのクラス(SwfmillUtil::Swf)から構成されます。使用には、ruby の標準的な開発環境に加えて、以下のものを用意する必要があります。

その他、使用手順など、詳細は公開ファイル中の README を参照してください。

Swf の操作機能は、現時点では、もっともよく利用する:

  • 画像の入れ替え
  • テキストの入れ替え

に絞って実装しています。これを使用することで、以下のサンプルコードのように、Swf#images で Swf 中の画像データを objectID => Magick::Image のハッシュ、Swf#texts でテキストデータを objectID => String のハッシュにてアクセスする事ができます。

require '../lib/swfmill_util'
require 'pp'

# initialize
swf = SwfmillUtil::Swf.new(File.open("sample.swf").read)

# check included images (object_id => Magick::Image)
pp swf.images #=> {"6"=> JPEG 176x208 176x208+0+0 DirectClass 8-bit 10kb, "3"=>  30x30 DirectClass 16-bit}
pp swf.texts #=> {"2"=>"343201202343201204343201206343201210343201212ABCr"}

# write included images
#swf.images.each do |i,image|
#  image.write("#{i}.#{image.format ? "jpg" : "gif"}")
#end

# replace included images
swf.images['3'] = Magick::Image.from_blob(File.open("flymelongirl.gif").read).first
swf.images['6'] = Magick::Image.from_blob(File.open("bg.jpg").read).first
swf.texts['2'] = "かきくけこXYZ"

# write swf replaced images
swf.write("foo.swf")

後半で書いている通り、画像やテキストの書き換えは、ハッシュの値を置き換えてやる事で実現できます。Swf#write によりファイル出力できますし、Swf#regenerate で再生成後の swf をそのまま得る事もできます。

内部的には、Magick::Image <=> DefineBitsJPEG2/DefineBitsLossless2 の変換をおこなっています。とくに DefineBitsLossless2 の変換処理は、ちょっと面倒ですし、あまり ruby での実装を見かけないので、何らか使いどころがあればお使いください。ImageMagick / RMagick を併用するので多少重たいかもですけど。

なお、FlashLite 1.1 を対象に、よく使うあたりを中心に実装していますので、DefineBitsJPEG3 や DefineBitsLossless2 での format=5, DefineBitsLossless, DefineText などはひとまず除外しています。必要に応じて、適当に修正してみてくださいませ。

今更ながら、大胆な名付けをしてしまった気がするので、いろいろいじってみてもらえると嬉しいです!

Tagged with:
4月 13
WifiSignalChecker

WifiSignalChecker

Android Market への初めてのリリースです。とは言っても、わかるひとには一瞬でつくれるような素人作品なのですが。。大したものではありませんので、ご笑覧いただきたく。

WifiSignalChecker は Android を搭載したデバイスでの Wifi (802.11無線LAN)電波強度をモニタするための電波測定ツールです。現在接続中のアクセスポイントから受信しているシグナルレベルをリアルタイムに表示します。

WifiSignalChecker は Android Market でフリーソフトウェアとして配布しています。Applications > Tools の下にあります。社内無線 LAN 環境のちょっとした電波調査や、PC で公衆無線 LAN を使用する際の座席選定などに、お気軽にご利用ください。

なお、日本国内での利用においては、端末の利用が制限/規制対象となっている場合があります。電波法を確認いただき、ご利用は自己責任にてお願いいたします。


こうしている間にも、レビューが付いたりコメントが付いたりで、嬉しいですね。ヘボアプリなので、いろいろ厳しい意見も来そうですが、ぼちぼち糧にしていければとおもいます。

ほんとはいろいろお遊び機能を盛り込む予定だったのですが、ちょっと忙しくなってきてしまったので、単一機能にて先にリリースすることにしました。今後更新することができれば、こちらのブログでも更新情報を流していく予定ですので、よろしくお願いします。

Tagged with:
12月 27

先日 GitHub というのを初めて使ってみて、テキトーな小物をちょいちょい晒していくにも都合が良さそうだということがわかったので、今回、標記のプログラムも晒してみる事にしました。使用許諾条件は、基本的には the MIT License に基づきますが、「(迷惑メール送信に用いるなど)悪用・乱用を禁止する」という条件を付加したいと思います(っていうほど作り込んでないので、まあ、あんまし意味のない付加条件だと思いますが)。



MbSmtp – GitHub



MbSmtp は、Net::SMTP の拡張クラスで、日本の携帯向けにできるだけ効率よくメールを送る事を目的とした SMTP クライアントです。



MbSmtp は以下の機能を提供しています。

  • SMTP セッションあたりの送信通数が設定値以下になるよう、セッションを自動分割制御します
  • キャリアからの通信ブロックが発生した際、 設定時間待機した後、
    設定回数、失敗したメールのみ再送リトライします
  • メール送信処理中にエラーとなるアドレスが含まれていた場合、同一セッションで未送信のアドレスリストからエラーアドレスを除去します
  • セッション終了時、 送信リポートの構造体を返します
    • リクエストメッセージ数, 送信完了メッセージ数, エラーメールアドレスなど

各種設定値は lib/mb_smtp.rb 内で指定されていますが、必ずしも適正値ではありません。適宜設定を変更してご利用ください。



以下、簡単な使用例です。基本的には Net::SMTP と同じように使えますが、キャリアメールサーバは :docomo, :au, :softbank などといったシンボル指定で open できます。また、以下のようにセッション内である程度まとまった数を送信したとしても、1 セッションでの送信通数が設定値を超えないよう、勝手にセッション分割してくれます。その他、キャリアのメールサーバからの応答に応じて、エラーアドレスの振り分けや送信成功数のカウント、キャリアブロックに対する待機などをおこない、最後に MbSmtp::Result 形式でのレポートを生成する、といった動きをするようになっています。

@mail = TMail::Mail.new # MbMail::DMail とかでもOK
## @mail を適当に組み立てる
@result = MbSmtp.start(:docomo) do |smtp|
50.times do
smtp.send_mail @mail.encoded, @mail['from'].to_s, @mail['to'].to_s
end
end
puts @result # => MbSmtp::Result による送信結果レポート

この他の使い方や、動きの詳細については spec/mb_smtp/*.rb にある spec ファイルや lib/mb_smtp.rb 本体をご覧ください。



ちなみに MbSmtp は、元々は、個人的にメール配信時のキャリアのメールサーバの振る舞いを調べてみようとごにょごにょやっていたときの副産物です。実サービスでの利用実績はありませんし、これにより高速に携帯メール配信ができるという保証も検証結果も一切ありません。もちろん、これを使用した事で、キャリアブロックされまくってマトモにメールが送れなくなった、とかになっても、僕の方で責任はとれませんです。あくまでご参考まで、ということで。。

Tagged with:
12月 25

git とか GitHub とかいうのを使った事がなかったので、このたび初めて使ってみました。というわけで、標記の Rails プラグインを the MIT License にて公開します。


MbMail – GitHub


MbMail は、Rails で日本の携帯向けサービスをつくる際、 メール扱い周りで発生するちょっとした面倒を回避するための小物寄せ集めプラグインです。rails-2.0.2, tmail-1.1.0 環境下での動作を確認しています。また、rails プラグイン形式で配布していますが、MbMail::DMail は rails 環境に関係なく使えます。


MbMail は以下の機能を提供しています。

  • MbMail::DMail
    • キャリア間HTMLメール(デコメール, デコレーションメール, デコレメール)の相互変換
  • MbMail::MbMailer
    • ActionMailer の拡張
      • 標準で使用する charset (エンコーディング)を ISO-2022-JP に変更
      • 文字コード変換器に NKF を使用するように変更 (機種依存文字の送信を可能に)
      • 日本語ヘッダを作成するためのメソッド base64 を追加 (Mailer 内で日本語Subjectや日本語Fromを簡単に記述)
      • RFC違反のドットが連続するアドレスが扱えるよう、TMail::Parser を置き換え

たとえば、以下のように au デコレーションメール形式のファイルがある場合、これを load し to_docomo_format とすれば、docomo のデコメールフォーマットが得られます。

au = MbMail::DMail.load("au_decoration_mail.eml")
docomo = au.to_docomo_format
puts docomo.encoded # => docomo デコメールフォーマット文字列

その他、使用方法サンプルは、git リポジトリの中の spec ファイルたちをご参考ください。


パッケージに含まれるクラスのうち、MbMail::MbMailer は以前、こちらのエントリでも取り上げた「ドット連続アドレス問題」などに対応するものです。ただし、MbMailer を使用する事により TMail::Parser を書き換えてしまいますので、ご注意ください(MbMailer を使用するに当たって、ActionMailer の使い勝手を残しつつ TMail の一部だけ書き換える、ウマい方法が思いつかず。。誰か助けて)。


MbMail::DMail も MbMail::MbMailer も個人的な利用実績がありますので、基本的な部分はそこそこ使えると思います。が、プラグイン形式に切り出したのはこれが初めてですので、何かと不都合があるかもしれません。(絵文字の変換辺りで微妙にオカシイところがあるかも。)あと、git の使い方がよく分かってないうちは、何かと不慣れなことをしでかすかもしれません。諸々ご理解の上、ご利用いただければ幸いです。


なお、再掲を含みますが、上記のプラグイン提供に当たりお世話になった方々をご紹介しておきます。勉強させていただきました。ありがとうございました。

  • 携帯メールを扱うに当たっての base64 メソッドの実装や NKF 利用のアイデアとして、以下のサイト様を参考にさせていただきました
  • DMail の絵文字相互変換に Jpmobile の絵文字変換テーブルを使用させていただいています
  • ActionMailer の拡張時に TMail の幾つかのクラスを書き換え利用させていただいています
  • サンプルで使用している GIF 画像に 素材屋イチゴアポロ の素材を利用させていただいています

ついでに、以前こちらで紹介した「ケータイサイトで機種情報を取得する Rails プラグイン mbterm_db」も GitHub に引っ越しました。ついでに更新しようと思ったけど、更新の仕方を忘れたので、そのうちメンテします。


MbtermDb – GitHub


それでは皆様、よいクリスマス&よいお年をお迎えくださいませ。

Tagged with:
2月 25

実は前から公開してたんだけど、最近の機種情報を追加ついで、あと Rails のプラグインを書く勘を取り戻しついでに、ちょっと手を入れたので、改めて紹介しときます。

mbterm_db は Ruby on Rails でケータイサイトをつくる際に、ブラウザのバージョンや画面サイズを取得する Rails プラグインです。

このプラグインは、以前モバイル勉強会で紹介した機種情報 DB の出力の一形式です。機種情報 DB には、基本的に僕が必要なものしか入れてないのですが、最近は FlashLite に傾倒気味なので、そのうち FlashLite のバージョンくらいは入れるかもしれません。

こんなデータベースを持たずとも、ドコモ以外は HTTP リクエストヘッダにそこそこの情報が含まれているのですが、リクエストヘッダの情報は微妙に足りなかったり(一行の文字数とか)、SSL したら取れない事があったりと(SoftBankでたまにある)、結構ハマりがちです。まあ、あったらあったで越したことはないかな、ということで、ご入用の方、どうぞお持ちください。

インストール方法は以下の通り。詳しくは trac の方をご覧ください。jpmobile とか Mobile_on_Rails などのプラグインと併用するのも便利だと思います(使わせていただいてます。感謝! ;-)

$ script/plugin install http://jpmbdb.googlecode.com/svn/trunk/mbterm_db

Continue reading »

Tagged with: