CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

PerlMagickで複数の画像を1枚にまとめる

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

PerlMagickで複数の画像を1枚にまとめた。

ImageMagickのmontageコマンドでもできて、それは前に書いた。
ImageMagickで撮った月食を1枚にまとめる CodingFirst

PerlMagick は、cpanでなく apt-get で入手した。

$ sudo apt-get install perlmagick

で、作ったコードは下記。
引数に 4つの画像ファイルを指定すると、2x2に結合した out.jpg が出力される。
ちょっといい加減なコードなので、ファイル数に応じて 2x2 を変更したり、 フィルタかけたり、文字描いたり..改造して使うといいでしょう。

#!/usr/local/bin/perl
use strict;
use warnings;
use Image::Magick;
print <<USAGE if $#ARGV==-1;
Usage: montage.pl file..`
USAGE
my $img = new Image::Magick;
$img->Read(@ARGV);
my $mon=$img->Montage(geometry=>'160',tile=>'2x2');
$mon->Write(filename=>'out.jpg');

gistにも貼った。
https://gist.github.com/2621784

実際に作った出力例。

$ perl montage.pl a.jpg b.jpg c.jpg d.jpg

out.jpg:
out_20120506.jpg

最近、コージーコーナーの濃厚レアチーズケーキにはまってる。うまい。。


電池式ひげ剃り+エネループがすごい便利かも

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

ひげ剃り(シェーバ)を新調したんだけど、
電池式ひげ剃り+エネループにしたらすごい快適になった。


Panasonic スーパーレザー シルバー調 ES3832P-SPanasonic スーパーレザー シルバー調 ES3832P-S
(2009/02/10)
パナソニック

商品詳細を見る

うざったいACアダプタとコードが無くなった。
本体につけとくとブラブラするし、外して片付けるのもめんどくさいし、
とにかく邪魔だったんで、すごく楽になったし、嬉しい。

いざ充電が切れてしまった場合、電池式の方が楽。
最近の充電式は電源コードつないでも、ある程度充電しないと使えない。
しかし、電池は交換したらおしまい。
しかも充電池にすれば充電池と同じで繰り返し使える。

交換する充電池をたくさん持ってた。
電池って、時計、ゲーム機、リモコン、外出時の携帯充電へといまだにあちこちで使ってる。
それら全部に充電池を使ってるので、なんだかんだ
多めに予備の電池を持ってるので、今回新たに買う必要が無かった。

旅先で電池が切れたら...
カバンの中でスイッチ入っちゃって、旅先で使えなかった事が何度かある。
充電式は忘れたら使えないけど、電池式なら乾電池を買えばいい。
友達から借りてもいいし。

性能も問題ない。
そもそもヒゲが濃い方じゃないから悩んだことないけど、
普通にしっかり剃れるし、掃除も特に変わらない。

そして、安い。
結構、安いのが多いので気軽に試せるのと、
外出用とか、職場においてるともよく聞く。


と、電池式を考えてみると、
あれもこれもと充電池をたくさん使ってる事にも気づいた。
地味に革新的に便利になった事なんだなと思う。


SANYO NEW eneloop 単3形8本 HR-3UTGB-8SANYO NEW eneloop 単3形8本 HR-3UTGB-8
(2011/11/14)
三洋電機

商品詳細を見る

いつも買うのは8本単位。
震災時、かなり在庫無しだったので、ちょっと欲しくなったら、
8本単位にしてる。


SANYO 「eneloop pro」単3形4本付き急速充電器セット N-TGR01WSSANYO 「eneloop pro」単3形4本付き急速充電器セット N-TGR01WS
(2011/09/21)
三洋電機

商品詳細を見る

proって高容量タイプもあるのか!


(HR-3UTGB8D)+(YU511370) | 【ディズニーセット】 サンヨー eneloop エネループ 充電池 単3形8本 ディズニーキャラクターモデル+ミッキーシルエットイヤホン ホワイト SANYO(HR-3UTGB8D)+(YU511370) | 【ディズニーセット】 サンヨー eneloop エネループ 充電池 単3形8本 ディズニーキャラクターモデル+ミッキーシルエットイヤホン ホワイト SANYO
()
不明

商品詳細を見る

限定のミッキーのがある!


SANYO NEW eneloop  簡易バッテリーチェッカーエネルーピー付き 充電式ニッケル水素電池 (単3形2個) HR-3UTGA-2LPSANYO NEW eneloop 簡易バッテリーチェッカーエネルーピー付き 充電式ニッケル水素電池 (単3形2個) HR-3UTGA-2LP
(2009/11/14)
三洋電機

商品詳細を見る

便利だし、カワイイとウケるかも...と手にとって、
家族に馬鹿にされ、
ごく稀に必要だったときに、合って良かったじゃん!...的なチェッカ


C言語でmd5

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

C言語でmd5を計算する。

MD5は、ファイルの指紋(フィンガープリント)としてよく使われてる。
用語的にはMD5チェックサムの方が一般的かも。

MD5 - Wikipedia

あやまって一致する事はまず無いので、
ダウンロードしたデータの正当性とか、Jenkinsのようにビルドの追跡とか、
要するに、テストの期待値を圧縮する手段としてよく利用される。

MD5は linux だと簡単に下のように計算できる。

$ openssl dgst -md5 fox.jpg 
MD5(fox.jpg)= c7880ecd95d8dcf0efe82f465aa41e3f

$ md5sum fox.jpg 
c7880ecd95d8dcf0efe82f465aa41e3f  fox.jpg

C言語でも使いたい事がある。
簡単に使いたいので openssl を利用する。まず、環境入手。

$ sudo apt-get install libssl-dev

MD5を計算する Cコードは以下。

$ tcc "-lssl" -run md5sum-1.c fox.jpg 
c7880ecd95d8dcf0efe82f465aa41e3f	fox.jpg
$ tcc "-lssl" -run md5sum-2.c fox.jpg 
c7880ecd95d8dcf0efe82f465aa41e3f	fox.jpg

2番目の方、後で文字列を追加する(ループする)には、
どうすればいいかよくわからんかった。まぁマジックナンバーが必要だし、 1番目のケースしか使わなけりゃいいか。

参考)
チェックサム - Wikipedia
巡回冗長検査 - Wikipedia(CRC)
MD5 - Wikipedia

Cソースを見ながら学ぶなら、やっぱアルゴリズム辞典。


C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)
(1991/03)
奥村 晴彦

商品詳細を見る

[C]クイックソートをする

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

C言語でクイックソート。
標準でqsortがあるけど、筋トレ的に書いてみよう。

その前に、アルゴリズムを復習しよう。
クイックソート - Wikipedia
C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

一言で言うと、配列を中間値で大小に分割して再起するソートか。
実装方法に悩むけど、思いつきで書いてみた。
gist に書いたコードを以下に。

中間値は一番左の要素にして、左のバケツを決めていく方法にした。
これはこれでいいけど、奥村先生本の手法をみたら愕然。こんなコードになる頭が欲しい!

では、
コンペアとスワップを基準に前に書いたソートも含めて性能比較。

$ git clone git://gist.github.com/1476722.git sort-eg
Cloning into sort-eg...
remote: Counting objects: 26, done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 26 (delta 15), reused 5 (delta 3)
Receiving objects: 100% (26/26), done.
Resolving deltas: 100% (15/15), done.
$ cd sort-eg
$ for i in *.c ; do tcc -run $i ; done
         bblsort: cmp=4950.0, swp=2472.6, xor=197DFD2F
        bblsort2: cmp=4768.0, swp=2472.6, xor=197DFD2F
           qsort: cmp= 541.8, swp=??????, xor=197DFD2F
          qsort2: cmp= 890.6, swp= 158.9, xor=197DFD2F
          qsort3: cmp= 944.1, swp= 155.1, xor=197DFD2F
         selsort: cmp=4950.0, swp=  94.8, xor=197DFD2F

安定的では無いとはいうけど、バブルソートや選択ソートに比べりゃ、やっぱり早いな。
cのqsortはかなり早そうだけど、実装がイントロソートとかなのだろう。

クイックソートは、アルゴリズムが単純で早いけど、再起を使うのが難点かな。
C言語だとスタックまで気を使う事も多いし。
もちろん、実装次第の話でもあって、例えば奥村先生本に再起を使わないコードがある。
ご利用は計画的にってとこか。

いい勉強になった。


C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)
(1991/03)
奥村 晴彦

商品詳細を見る

C言語で正規表現 - PCRE編

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

C言語で正規表現、第2弾。PCREを使ってみた。

PCREは perl5コンパチな正規表現ライブラリ。
前エントリのコメントで教えていただいたんで早速。

PCRE - Perl Compatible Regular Expressions

libpcre.a はすでに入ってたので、apt-getで libpcre3-dev だけ入れた。
以下、gistに貼ったpcreを使ったサンプルコード。

動作例。svn infoの Revision: の番号を取得するサンプルです。

$LANG=c svn info http://svn.apache.org/repos/asf/subversion/trunk > info.txt
$ cat info.txt |./pcre-eg.c 
1243564$

あっけないほど簡単で、使いやすい。便利だ。
これなら LL系に弱い人にも使いこなせる気がする。

例えば、svnのリビジョン番号のファイルを作成したいとき、

touch r`LANG=c svn info|grep '^Revision:'|cut -d ' ' -f 2`.log
とか、
touch r`LANG=c svn info|perl -ne 'print $1 if(/^Revision: (\d+)/)'`.log

とかワンライナーで書くけど、
grepってなんすか?な人は意外に多いし、
perlは読めないんで!と断られたりもするけど、
みんな大好きc言語だよ!なら受け入れられそう。

touch r`LANG=c svn info|../pcre.c`.log

と、こんな感じかな。


詳説 正規表現 第3版詳説 正規表現 第3版
(2008/04/26)
Jeffrey E.F. Friedl

商品詳細を見る

 | HOME |  »

Search

Recent Entries

Recent Amazon

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile