Monthly Archives: 4月 2010

PNGファイルをパースするRubyスクリプト

1
Filed under Ruby
Tagged as , ,

ちょっとPNGの中身(ヘッダー情報とか画像以外の情報も)を見てみたくなったので、Rubyでスクリプトを書いてみました。

PNGファイルをパースする

以下のコードのポイントは「バイナリファイルの開き方」「バイナリファイルの走査」「PNGフォーマットに基づいたチャンク読み込み処理」「String#unpackによるバイナリデータの変換」です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
########################################
# testPNG.rb
# 2010/04/29
########################################
 
# 指定PNGファイルの情報を処理します.
def checkPNGInfo( filename, logfile )
  png = File.open( filename, "rb" )	# バイナリモード読み込み用モード.
  if png != nil then
    # PNGファイルシグネチャ .. 8byte固定(89 50 4E 47 0D 0A 1A 0A).
    png.read( 8 )
    # IHDRチャンク イメージヘッダ .. 25byte固定.
    png.read( 25 )
    # チャンク毎に読み進める.
    loop do
      if png.eof?
        logfile.print "DONE!\n"
        break;
      end
      # read Length (4byte)
      length = png.read( 4 ).unpack('N') # "big endian unsigned 32bit"で1文字読み込み.
      length = length[0].to_i
      logfile.print "length["+length.to_s+"]\n"
      # read Type (4byte)
      type = png.read( 4 )
      logfile.print "type  ["+type+"]\n"
      # read contents
      data = png.read( length )
      # read CRC (4byte)
      crc = png.read( 4 )
      logfile.print "\n"
    end
  end
end
 
#------------------------------------------------------------#
# main
#------------------------------------------------------------#
f = File.open("log.txt", "w") # ログ出力ファイル.
if ARGV[0] == nil
  print "usage: ruby testPNG.rb <filename.png>"
else
  checkPNGInfo( ARGV[0], f )
end

String#unpack

バイナリデータから数値への変換オプションにはいろいろな指定があるのですが、一番重要なのは、次の4つだと思います。

  • n: big endian unsigned 16bit
  • N: big endian unsigned 32bit
  • v: little endian unsigned 16bit
  • V: little endian unsigned 32bit

上記コードでは、21行目で unpack(‘N’) と読み込んでいます。

参考サイト

参考にしたのは下記のサイトです。ありがとうございました!


[AD]

↓失敗から学ぶ。その1.

システムはなぜダウンするのか 知っておきたいシステム障害、信頼性の基礎知識

著者/訳者:大和田 尚孝

出版社:日経BP社( 2009-01-15 )

定価:¥ 2,520

Amazon価格:¥ 2,520

単行本(ソフトカバー) ( 312 ページ )

ISBN-10 : 482228381X

ISBN-13 : 9784822283810


↓失敗から学ぶ。その2.

動かないコンピューター ― 情報システムに見る失敗の研究

著者/訳者:日経コンピュータ

出版社:日経BP社( 2002-12-06 )

定価:¥ 1,575

単行本 ( 208 ページ )

ISBN-10 : 4822207846

ISBN-13 : 9784822207847


ファイルの行数をカウントするRubyスクリプト

0
Filed under Ruby
Tagged as ,

ちょっと書いたコードの断片をメモしておきます。
Rubyってしばらく書き続けていると便利なんですが、あまり書かないとライブラリの使い方とかそういうところで詰まるので。

ファイルの行数をカウントする

以前書いたファイルの行数を調べるコードを、ちょっと修正したモノを載せます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
########################################
# countLines.rb
#
# usage:
#   %ruby countLines.rb <filename>
########################################
 
#------------------------------#
# functions
#------------------------------#
 
# 指定ファイルの行数を返します.
def getNumLine( filename )
  File.open( filename ) { |file|
    nil while file.gets # ファイル末尾まで移動.
    return file.lineno  # 現在の行番号を出力.
  }
  return -1	# error.
end
 
#------------------------------#
# main
#------------------------------#
filename = ARGV[0]
if filename == nil
  print "usage: ruby countLines.rb <filename>"
else
  print "--> "+getNumLine(filename).to_s +  " lines in <"+filename+">"
end

ポイントは、引数の使い方と、ファイルの現在の行番号を出力するFile#linenoの使い方、の2点です。


[AD]

↓持っているRuby書籍の中で一番良いと思うのがこれ。

プログラミングRuby 第2版 言語編

著者/訳者:Dave Thomas Chad Fowler Andy Hunt

出版社:オーム社( 2006-08-26 )

定価:¥ 3,990

Amazon価格:¥ 3,990

大型本 ( 434 ページ )

ISBN-10 : 4274066428

ISBN-13 : 9784274066429


↓第1章が「テストでコードを駆動する」となっていたり良書の予感!

Rubyベストプラクティス -プロフェッショナルによるコードとテクニック

著者/訳者:Gregory Brown

出版社:オライリージャパン( 2010-03-26 )

定価:¥ 3,360

Amazon価格:¥ 3,360

大型本 ( 364 ページ )

ISBN-10 : 4873114454

ISBN-13 : 9784873114453


iPhoneに留守電をいれてくれた人を知る方法

0
Filed under iPhone, iPhoneアプリ
Tagged as ,

これは無いわ!と勘違いした話

iPhoneを使い始めてもうすぐ1年になります。
割とあれこれ楽しんで使っていて、もう慣れてきたので通常使用ではiPhoneオンリーです。
ですが、先日友人との待ち合わせ時に気づいたのですが、「いくらなんでもこれは無いわ!」と思った仕組みがありました。

誰からの留守電か分からない!

その仕組みとは「iPhoneでは、留守電通知が誰からのモノか分からない」ということです。
iPhone ユーザーに留守電が入った場合、SMSで通知が来ます
それはSMSで送られてきたメッセージがそのまま表示されるだけなので、iPhoneのアドレス帳と照合されず、ただ電話番号のみが表示されます

留守電が誰から来たか分かないのか!!
でもよく考えたら、そもそもSMSアプリはiPhone用に作っているわけだから、受信後にそのメッセージを解析し、電話番号があればそれと関連させた情報を表示することも出来るはず
SMSを受信するアプリはサードパーティの開発者では出来ない(多分)のだから、Apple/Softbank側でそれぐらい実装して欲しいです!

しかし、勘違いしていました!!

と、熱くなってしまい、出来ないと思い込んでいたのですが、実は、出来るのですね!というのが今回のエントリの本文。
留守電が入っているというSMSメッセージを、SMSアプリで開くと次のような画面になっています。

この画面でも誰から来たのか分からないのですが、各メッセージの右側にある(>)記号に気づけば良かったのです!
この記号をタップすると、その電話が誰から来たのか、を知ることが出来ます。
完全に見落としていました!!!
でも、これ、分からないよ~~~。

電話番号で検索で きない!

関連してどうしても解せない仕様もあります。
それは、「連絡先」アプリの検索機能やiPhoneの検索機能で、連絡先に登録している電話番号で連絡先を検索できないことです。
例え ば、”090″と入力しても一件もヒットしません!

ちょっとこれは酷い仕様だ!

と、先日会った友人(iPhoneユーザー)にその話をすると、
「iPhoneに、電話機能を期待しちゃいけないよ」と言われました。
うーん、それでいいのか、Apple?


[AD]

↓カードを一緒に持ち歩けるiPhoneケース。Suica等と一緒に!

Case-Mate iPhone3G/3GS 専用 カードホルダー付ハードケース ID Case マット・ブラック IPH3GID-BLK

Case-Mate iPhone3G/3GS 専用 カードホルダー付ハードケース ID Case マット・ブラック IPH3GID-BLK

定価:¥ 3,280

Amazon価格:¥ 2,980

カテゴリ:Wireless Phone Accessory

発売日:2010-07-15


↓この本を読むとblogの内容もより読みやすくなるかなー、と妄想。

デキる人は「言い回し」が凄い (角川oneテーマ21)

著者/訳者:日本語力向上会議

出版社:角川学芸出版( 2010-02-10 )

定価:¥ 740

Amazon価格:¥ 740

新書 ( 181 ページ )

ISBN-10 : 4047102253

ISBN-13 : 9784047102255


Flash Optimizer試用

0
Filed under AS3, Flash
Tagged as ,

Flash Optimizer

Flash Optimizerというのを見つけた。swfのサイズを最適化してくれるものらしい。
無料の試用版があったのでダウンロードして使ってみました。

が!試しに読みこませたswfがフィルターを使っていたので、これを外していいか?というダイアログが表示された。

ダメダメ!そんなのダメですよ!と、「いいえ」を押すと、そのswfファイルの最適化は行われない。。
フィルタの設定には手を付けないでよ、という設定も、ちょっと見てみたところ出来ないようだ。
がっかりしつつアンインストールしました。
フィルタ無視して最適化する設定がどこかにあったのかなー。知っている人いたら教えてください。

やっぱり自力で。。

やっぱりいろいろな本を読みつつ、自分で何とかするしかないですかね。

Flash Hacks

Flash Hacks ―プロが教えるテクニック&ツール100選

著者/訳者:Sham Bhangal

出版社:オライリージャパン( 2005-07-11 )

定価:¥ 3,780

Amazon価格:¥ 3,780

単行本(ソフトカバー) ( 516 ページ )

ISBN-10 : 4873112354

ISBN-13 : 9784873112350


2005年発売だからAS3に関する情報は無いですが、コードに関わらないFlashのグラフィックスなどの最適化についてはいろいろ載ってそうで、ちょっと目を通しておきたいかな。

9章 パフォーマンスと最適化
65. Flashファイルの肥大化への対処
66. 複雑なサイトのための帯域幅のテスト
67. 低品質な設定のカモフラージュ
68. パフォーマンスを向上させるグラフィックの最適化

詳説 ActionScript 3.0

詳説 ActionScript 3.0

著者/訳者:Colin Moock

出版社:オライリージャパン( 2008-11-22 )

定価:¥ 6,090

Amazon価格:¥ 6,090

大型本 ( 1044 ページ )

ISBN-10 : 4873113873

ISBN-13 : 9784873113876


あとは、こちらの本でActionScript3周りをしっかり固めておけばいいかな。
ガベージコレクションやE4Xについても章が割かれているから結構良さそう。

14章 ガベージコレクション
15章 ダイナミックなActionScript
16章 スコープ
17章 名前空間
18章 XMLとE4X