WireShark – TCP の生のデータを保存する

Follow TCP Stream を使えば生の TCP ストリームデータを取得可能です。
 
例えば、HTTP で画像を取得して、その画像をファイルとして保存したい場合は
次のようにします。
 
1. HTTP/1.1 200 OK などの HTTP レスポンスパケットを選んで右クリック→Follow TCP Stream を選択
2. Follow TCP stream ウィンドウが開いたら、右下の Raw をチェック
3. Save As をボタンをクリック
4. 保存先を指定して保存(保存例: http_gif.dat|rs/http_gif.dat)
5. バイナリエディタを開き、0D 0A 0D 0A 以前(HTTP Header)を削除し、拡張子変更(変更例: 画像)
 
追記:
(2006-07-27)同日の別トピックに書きましたが、Ethereal は複製版が Wireshark として独立し、そちらが更新されています。

画像や PDF, 動画を SWF に変換する

swftools (ports: graphics/swftools)
以下のツールを提供する GPL のコレクションパッケ−ジです。

PDF2SWF – PDF から SWF への変換
SWFCombine – 複数の SWF を 1つの SWF でラップして結合する。
SWFStrings – SWF 中の文字列を読み取る
SWFDump – SWF のさまざまな情報を得る
JPEG2SWF – JPEG 画像から SWF への変換
PNG2SWF – PNG 画像から SWF への変換
GIF2SWF – GIF 画像から SWF への変換
WAV2SWF – WAV 音声から SWF への変換
AVI2SWF – AVI 動画から SWF への変換
Font2SWF – TTF, Type1 フォントファイルから SWF への変換
SWFBBox –
SWFC – SWF コンパイラ(スクリプトから生成)
SWFExtract – SWF 中のムービークリップ、音声、画像などの抽出
 
RFXSWF Library – 素材を含む, SWF 作成用のライブラリ

 
以下は jpeg2swf の利用例です。

# src フォルダの全ての JPEG をフレームレート 3fps の
# SWF ムービーに変換して out.swf として保存する( -z は圧縮オプション)。
jpeg2swf -r 3 -z -o out.swf src/*.jpg

αチャンネルを画像から取り出す

convert drawn.png -channel matte -separate +matte matte.png

これで、drawn.png のαチャンネル(透過度)だけをモノクロで取得した画像を得ることができます。
参考:
http://www.cit.gu.edu.au/~anthony/graphics/imagick6/channels/#matte
情報元:
http://blawat2015.no-ip.com/~mieki256/diary/0623.html

ImageMagick の convert で半透明な PNG を扱う

PNG はRGBとともにα値を保持しているので、半透明色というのも指定することが可能です。

# a.gif の白(#FFFFFF)を半透明(50%=0x80)にし、b.png として保存(入力の形式は任意ですが、出力は png 必須です)。
convert a.gif -fill “#FFFFFF80” -opaque “#FFFFFF00” b.png
# 半透明になったか確認のため背景画像 bg.jpg の上に b.png を重ね、
# c.jpg として保存する(背景、出力の画像形式は任意です)。
convert -compose over bg.jpg b.png c.jpg

参考:
– convert コマンドのオプションについては「指定した色を別の色に置き換える
」を参照。
– PNGについては JEvaHz Messages 1320-1331 を参考にしました。

PNGの透明化は大別して2種類の指定方法があり、色深度などにより厳密には
4種類のフォーマットがあります。
 
1.αチャンネルを用いる場合(Color type = 4 or 6)
  (8bit,16bit grayscale / 24bit,48bit color)
 RGB値もしくはgrayscale値に加え、ピクセル毎にα値(透明度)を保持。
 α値の深度は色深度と同じ。
 
2.tRNS(=transparency) chunkを用いる場合
  a.1,2,4,8bit indexed colorの場合(Color type = 3)
   個々のカラーに対し、8bitの深度の透明度を指定できる。
  b.1,2,4,8,16bit grayscale の場合 (Color type = 0)
   ある一つのgrayscale levelに対し、1bitの深度の透明度を指定できる。
  c.24/48bit colorの場合(Color type = 2)
   ある一つの色に対し、1bitの深度の透明度を指定できる。
 
(中略)
 
また、PNGの仕様によると透明化は必須ではないらしいので、
実装にばらつきがでるのはやむを得ないでしょう。
部分的な対応もOKだそうで…。

PNG Programming Resources

指定した色を別の色に置き換える

 

convert source.gif -fill dest_color -opaque src_color dest.jpg

source.gif の、 src_color という色を dest_color という色に置き換えて dest.jpg として保存します。

例:
convert source.gif -fill “#FF0000” -opaque “#FFFFFF” result.jpg

真っ白で塗られている箇所を、真っ赤に塗りつぶします。
 
用途として、GIF,PNG などの透過対応形式からJPG,BMPなどの透過非対応形式に変換する場合の、透過色の置き換えなどに使えます。
 
参考:
convert -opaque
convert -fill

Eclipse 3.1 から 3.2 にアップグレード

いまさらですが、リリースに気づいたので開発環境を Eclipse3.2 にアップグレードしました。
手順は次の通り。
 
Eclipse 公式サイトのダウンロードページから Eclipse SDK 3.2 をダウンロード(Windows版直リンク)
 
言語パックダウンロードページから NLPack1-eclipse-SDK をダウンロード(Windows版直リンク)。
 
– SDK を展開(eclipse フォルダができます)。
– NLPack1 を展開して SDK の展開先に上書き。
展開した eclipse フォルダを、既存の Eclipse 3.1 に上書き ←とするとだめでした。
– ワークベンチを既存のものに指定して、プラグインも導入。
  updateサイトについては、新規フィーチャーの検索とインストール→サイトのインポートから、3.1 の eclipse/configuration/org.eclipse.update/bookmarks.xml をインポートすることで簡単に移行できます。

簡単に CRLF を LF に変換する(CRLF2LF)

次のように入力することで、sjis.txt の CR+LF を LF だけに変換し、out.txt として保存することができます。

$ cat sjis.txt | perl -pe ‘s/\r$//’ > out.txt

CGI やシェルスクリプトを、Windows などで書いた場合などは末尾に CR が入っていると, 一行目を正しく認識できないために “bad interpreter” と出るので、その対策によく使います。
 
追記:
(2006-08-08) /usr/games/fortune freebsd-tips で、次の方法も紹介されてました。

col -bx < dosfile > newfile

(2007-07-13) ↑の、col は日本語には対応していないようで、SJIS の日本語文字を含んでいると化けてしまいました。

Yahoo API の簡単な利用法 – serialize

http://developer.yahoo.co.jp/
で公開されている API は全て XML でレスポンスが返りますが、
output=php をパラメータに追加すると、PHP の serialize() 形式でシリアル化されたデータが返るという記事を見付けました。
 
注:ライブラリを利用することで、他の言語(C#, perl など)でも PHP serialize は読み込むことが可能なため、用途は PHP に限りません。これに付いてはリンク先の最後を参照してください。
 
Using Serialized PHP with Yahoo! Web Services
 
ここに書かれている、
http://api.search.yahoo.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&query=Madonna&results=1&output=php
にアクセスしてみるとサンプル出力が得られます。
 
以下、上記 API を利用した PHP のサンプルコードです。

<?php
$url = “http://api.search.yahoo.com/ImageSearchService/V1/” .
        “imageSearch?appid=YahooDemo&query=fruit+cake&results=1&output=php”;
ob_start();
readfile($url);
$result =unserialize(ob_get_contents()); // 結果セットを取得
ob_end_clean();
 
// var_dump($result); // どういう内容が格納されているか確認したい場合コメントアウト。
 
 $thumbnail_url = $result[“ResultSet”][“Result”][0][“Thumbnail”][“Url”];
?>
<html>
<head>
  <title>サムネイル</titte>
</head>
<body>
  <?php foreach($result[“ResultSet”][“Result”] as $record){ ?>
     □<?=$record[‘Title’]?>
       (<?=$record[‘FileSize’]?> バイト)<br>
     <p>説明:<?=$record[‘Summary’]?></p>
     <a href=”<?=$record[‘ClickUrl’]?>”><img src=”<?=$record[‘Thumbnail’][‘Url’]?>”></a><br>
     <hr>
  <?php } ?>
</body>
</html>

 
参考:
Yahoo曰く、XMLじゃなくてPHPの変数をそのままシリアライズして返せばいいじゃん