2016/05/11

行抜き出しの速度

某所で話題になったのでテキストファイルの行抜き出し速度を検証してみた。
検証用のデータは若干サイズ的に不足があるのだが、 以下のシェル芸で 24M のランダムなテキストデータを作成した。

$ for i in `seq 50000`; do printf "%05d:%s\n" $i `LC_CTYPE=C tr -c -d 'a-zA-Z0-9' < /dev/urandom | dd bs=501 count=1 2> /dev/null`; done > base
$ ls -l base
total 49616
-rw-r--r--  1 mitz  staff  25400000  5 11 12:15 base
    
作業は全て iMac 上で実施した。
$ uname -a
Darwin coredump.local 12.6.0 Darwin Kernel Version 12.6.0: Wed Mar 18 16:23:48 PDT 2015; root:xnu-2050.48.19~1/RELEASE_X86_64 x86_64
    

検証は以下の手段による行の抜き出しの100回繰り返しを10回実行した時の平均た時間を計測した。

  • tail(1) と head(1) の組み合わせ (入力ファイルを tail(1) の引数として直接指定)
  • tail(1) と head(1) の組み合わせ (入力ファイルを cat(1) を利用してパイプ経由で tail(1) に通知)
  • head(1) と tail(1) の組み合わせ (入力ファイルを head(1) の引数として直接指定)
  • head(1) と tail(1) の組み合わせ (入力ファイルを cat(1) を利用してパイプ経由で head(1) に通知)
  • sed 単体 (入力ファイルを sed(1) の引数として直接指定)
  • sed 単体 (入力ファイルを cat(1) を利用してパイプ経由で sed(1) に通知)
  • awk 単体 (入力ファイルを awk(1) の引数として直接指定)
  • awk 単体 (入力ファイルを cat(1) を利用してパイプ経由で awk(1) に通知)
  • sed 単体で検出後即時終了 (入力ファイルを sed(1) の引数として直接指定)
  • sed 単体で検出後即時終了 (入力ファイルを cat(1) を利用してパイプ経由で sed(1) に通知)
  • awk 単体で検出後即時終了 (入力ファイルを awk(1) の引数として直接指定)
  • awk 単体で検出後即時終了 (入力ファイルを cat(1) を利用してパイプ経由で awk(1) に通知)

結果は以下の通り。 自分の予想に反して head(1) と tail(1) の組み合わせが一番早くて驚き。
OS X の標準コマンドなので GNU 拡張された head(1) や tail(1) ではない筈なので、 そもそもオリジナルの head(1) の実装が良いのだろうか。

追記

twitter 及び当ブログのコメントで指摘を頂いたので sed(1) と awk(1) で 行を検出した場合は終了する場合の時間も計測してみました。
head(1) と tail(1) をパイプで繋いだ場合も、 2番目のコマンドで1行出力すると SIGPIPE が発生して 1番目のコマンドも終了しているのだろうか?

tail -n 4036 base | head -1
real0m0.843s
user0m0.542s
sys0m0.406s
cat base | tail -n 4036 | head -1
real0m16.681s
user0m16.071s
sys0m1.900s
head -n 4036 base | tail -1
real0m1.495s
user0m1.571s
sys0m0.351s
cat base | head -n 4036 | tail -1
real0m1.534s
user0m1.667s
sys0m0.512s
sed -n '4036p' base
real0m3.183s
user0m2.262s
sys0m0.835s
cat base | sed -n '4036p'
real0m2.485s
user0m2.240s
sys0m1.253s
awk '{ if(NR==4036) print $0 }' base
real0m19.430s
user0m18.357s
sys0m0.893s
cat base | awk '{ if(NR==4036) print $0 }'
real0m18.911s
user0m18.513s
sys0m1.369s
sed -n '4036{p;q;}' base
real0m0.467s
user0m0.270s
sys0m0.182s
cat base | sed -n '4036{p;q;}'
real0m0.456s
user0m0.347s
sys0m0.353s
awk '{ if(NR==4036){ print $0; exit;} }' base
real0m1.852s
user0m1.581s
sys0m0.199s
cat base | awk '{ if(NR==4036){ print $0; exit;} }'
real0m1.775s
user0m1.676s
sys0m0.355s

2016/04/06

文字列の読み方を表示する

自動生成したパスワードなどランダムな文字列をメイルなどで他人に伝える場合、 フォントによっては判別しずらい文字がある。
それらの判別しづらい文字を正確に伝えるために、 数字とアルファベットの読みを表示する簡単なプログラム。
標準入力から読み込んだ英数字の読みを表示し英数字以外は無視する。

  1#!/bin/sh
  2
  3awk 'BEGIN{
  4        p["0"] = "ぜろ";
  5        p["1"] = "いち";
  6        p["2"] = "に";
  7        p["3"] = "さん";
  8        p["4"] = "よん";
  9        p["5"] = "ご";
 10        p["6"] = "ろく";
 11        p["7"] = "しち";
 12        p["8"] = "はち";
 13        p["9"] = "きゅう";
 14        p["a"] = "エー";
 15        p["b"] = "ビー";
 16        p["c"] = "シー";
 17        p["d"] = "ディー";
 18        p["e"] = "イー";
 19        p["f"] = "エフ";
 20        p["g"] = "ジー";
 21        p["h"] = "エイチ";
 22        p["i"] = "アイ";
 23        p["j"] = "ジェイ";
 24        p["k"] = "ケー";
 25        p["l"] = "エル";
 26        p["m"] = "エム";
 27        p["n"] = "エヌ";
 28        p["o"] = "オー";
 29        p["p"] = "ピー";
 30        p["q"] = "キュー";
 31        p["r"] = "アール";
 32        p["s"] = "エス";
 33        p["t"] = "ティー";
 34        p["u"] = "ユー";
 35        p["v"] = "ブイ";
 36        p["w"] = "ダブリュー";
 37        p["x"] = "エックス";
 38        p["y"] = "ワイ";
 39        p["z"] = "ゼット";
 40    }
 41    {
 42        n = split(tolower($0), words, "");
 43        for(i=1; i<=n; i++){
 44            v = v g p[words[i]];
 45            g = " "
 46        }
 47        printf "%s (%s)\n", $0, v;
 48    }'
    

nkf (1) や kakashi (1) などで出来ないかとちょっとだけ探ったが、 出来ない様だったので適当にでっち上げた。
他にもっと良いものがあれば是非教えて下さい。

読みの部分を「アルファ」「ブラボー」「チャーリー」等とすれば フォネティックコードにも変換できる。

2016/03/09

Coleman 200A Lantern

こちらは1960年代に作製されたビンテージコールマンの赤いランタン。
いわゆるバースデーランタンという事で自分の産まれた年に生産されたものを探して入手したもの。
本当は月まで合わせたかったのだが、とある資料によると産まれた月には生産されていなかった様なので、 とりあえず産まれた年に生産されたランタンで妥協している。
こちらもアメリカのオークションサイト eBay で入手したのだが年代品の割に状態が良くて普段使いも可能 (というか入手してからは普段からキャンプに持参して普通に使い倒している)。
現在は多少なりとも虫よけの効果を期待してオプション品のアンバー色のグローブを装着している (効果の程は…??)。

色はバーガンディではなく明るめの赤でベンチレータは高いタイプ、本体のロゴステッカーは枠のないタイプとなっているのだが、 この手の細かな部分は前のオーナーが変更している場合もあるのでオリジナルではない可能性もある。
コレクターではないし、製造年月は底面に刻印されているのでタンクが交換されていない限りは間違っていないと思われる。
本体とは別に入手した同年代の「ガルウィングケース」に格納してキャンプに携行している。

細かい部分は色々と改良されているが基本的な構造は現行のランタンとほぼ同じなので当時から完成度の高さが伺える。
ただし現行品とは異なりメインの燃料バルブ以外にチップクリーナーと呼ばれる小型のバルブが付いていて、 点火や消火の時はこのチップクリーナも操作する必要がある。
特に点火時の操作が若干複雑で、着火方法やタイミングを間違えると グローブの内部が炎の包まれる「火だるま」状態となるので慣れるまでは点火するときは注意が必要だろう。

Image: RIMG0836.JPG

ビンテージランタン
Image: RIMG0838.JPG

チップクリーナ
Image: RIMG0058.JPG

アンバーのグローブを装着
Image: RIMG0060.JPG

ガルウィングケース

交換部品

マントル 21A102J (21A型が利用可能)
ジェネレータ 200A5891
燃料バルブ 200-6571
ポンプ 242J5201 → 3000000455(220A6201)
グローブ R690B051 (#550)
チェックバルブ 200-6381 (118mm)

200A の点火方法

点火
  1. 燃料を入れる
  2. チップクリーナーを数回転させてレバーを上向きの状態で止める
  3. ポンピングする
  4. メインのバルブを 1/4 回転くらい開ける
  5. チップクリーナを徐々に下向きに回転させ燃料が噴出される音が聞こえたら再び閉じる
  6. メインのバルブも閉めて追加ポンピングをしながら30秒程度放置する
  7. メインのバルブを 1/4 回転くらい開ける
  8. マントル付近に火を近づける
  9. チップクリーナを 1/4 回転までの範囲で徐々に開き点火した所で止める
  10. ジェネレータが温まるまでチップクリーナやバルブを微調整する
  11. 必要に応じて追加ポンピング
  12. ジェネレータが温まると燃焼音が「シュゴー」に変化するのでチップクリーナを全開にする
  13. チップクリーナーで明るさの調整を行う
消火
  1. メインのバルブを閉じる
  2. 消火できたらチップクリーナを閉める
点火する場合は最初にチップクリーナを回転させる時に燃料が噴出する位置を大体把握しておき、 実際に着火する時その位置付近でタイミングよく着火する様にすれば「火だるま」状態を回避できる。

Image: 200-6571.jpg

チップクリーナのある燃料バルブ
Image: wrench.jpg

純正ではないがチェックバルブの交換に威力を発揮するレンチ
このレンチはコネクティングロッドでチェックバルブを固定する事でねじ山をなめる事なく 固着したチェックバルブも外せる様に設計されていて大変便利。

2016/03/08

Coleman Feather Lantern

このランタンはコールマンのランタンの中でも最も小さい種類だと思う。
1マントルのコンパクトなタイプなので補助的な明かりとして料理スペースなどの照明などに重宝している。
コールマンの純正ではフロストタイプのグローブは発売されていないのだが、 CAMPINGAZ の Straight globe M (80x80mm) が殆どピッタリのサイズなので流用している。
フロストタイプのグローブだと食事の時に食卓の照明としても眩しすぎずに最適な明るさになる。 コンパクトでテーブルの上に設置してもそれほど邪魔にならないのも良い。

就寝時はバルブを絞り目にして常夜灯替わりにテントの前に置いておく様な使い方もできる。

Image: IMG_3245.JPG

1マントルのシンプルな構造
Image: IMG_3249.JPG

285 ランタンと並べるとサイズの違いがわかる
Image: RIMG0049.JPG

CAMPINGAZ のフロストグローブ装着

ポンプキャップは新型の樹脂製。
ポンプカップは新型のネオプレーンタイプ。

交換部品

マントル 20-102J (20型が利用可能)
ジェネレータ 222A2991 → 226-2991
ポンプ 400E5211
グローブ R136-048J (#2)
チェックバルブ 200-6381 (118mm)

2016/03/07

Coleman 285A Dual Fuel Lantern

こちらはコールマンの代名詞とも言えるランタン (コールマンのマークもランタンだしね)。
2マントルタイプなのでとても明るくテントサイトを照らしてくれるので、 主にサイトのメインの明かりとして大活躍している。

このランタンもジェネレータ交換なしでホワイトガソリン以外に無鉛ガソリンも利用できるタイプ。 とは言ってもやはりジェネレータ詰まり等発生するそうなので無鉛ガソリンはあくまで緊急避難的使い方になると思う。

ランタンはマントルと呼ばれる部分を発光させているのだが、マントルは布製の袋の様になっていて、 使用する前にあらかじめ燃やしておく必要がある (これを「カラ焼き」と呼ぶらしい)。 カラ焼きされたマントルは言ってみれば灰の様な物なので非常に脆くなっている。 ちょっとした衝撃でも崩れてしまうので扱いは要注意。 キャンプの時はマントルだけは必ず予備を持って行った方が良いと思う。

バルブを全開にすると新聞も読める程に明るくなるが、その状態でも7時間程度は燃料がもつので2泊程度のキャンプなら燃料の補給は不要で便利。 明るすぎて他のサイトに迷惑をかけない様に注意する必要があるので、最近はコールマン純正のリフレクター (日本未発売品 2000008533) を利用している。

Image: IMG_3246.JPG

明るさの調整も簡単
Image: IMG_3247.JPG

2マントルタイプ
Image: RIMG0048.JPG

リフレクターを装着

ポンプキャップは新型の樹脂製。
ポンプカップは標準は新型のネオプレーンタイプなのだが、純正の革製ポンプカップに変更する事でポンピングの感触が随分と改善される。

交換部品

マントル 21A102J (21A型が利用可能)
ジェネレータ 285-5891
ポンプ 242J5201 → 3000000455(220A6201)
グローブ R690B048J (#4)
R288-046J (フロステッドタイプ)
R285-043J (フロステッドタイプ スペシャルバージョン)
チェックバルブ 200-6381 (118mm)

2016/03/05

Primus Omni Lite Ti

今回はコールマンではなく Primus 社の Omni Lite シリーズのチタンモデル Omni Lite Ti。
この製品は付属のジェットを交換する事でホワイトガソリン、無鉛ガソリン、ケロシン (灯油)、軽油をはじめとして OD 缶のガスまで利用できてしまう。 一般的に入手可能な燃料であれば何でも使えるので緊急時にはとても頼りになるストーブだ。
しかも本体はチタン製で折りたたみ可能なので、丈夫でかつ軽量コンパクトなストーブとなっていて普段から車に搭載して携行しても良い。

燃料側に燃料用バルブ、本体側に火力調整用のバルブがあるので火力調整も簡単に可能で炊飯も楽にできる (やはり美味しいご飯が炊けるのは大切)。
ガスで利用する場合は OD 缶をコネクタに接続して燃料側のバルブを開くだけですぐ着火するので、その後は本体側のバルブで火力調整を行う。
液体の燃料を利用する場合はコールマンと違って余熱が必要になるが、 それほど面倒ではないので「一種の儀式」と割り切って手間を愉しむのも良いと思う。
ただし燃焼音は非常に大きく轟音と言っても過言ではないレベルなので夜遅い時間のキャンプ場では使用をためらってしまう。

ジェットは

  1. ガス用
  2. ホワイトガソリン用
  3. ケロシン用
と3種類付属しているが、今の所ガスとホワイトガソリンではジェットを交換せずに利用できている。

Image: RIMG0829.JPG

液体燃料用のタンクを接続
Image: RIMG0831.JPG

チタン製の本体
Image: RIMG0832.JPG

OD 缶を接続

液体燃料での使用方法

点火
  1. タンクに燃料を入れてホースと連結する
  2. 20回程度ポンピングする
  3. タンクの ON の文字を上にして水平にする
  4. 燃料側のバルブを全開にする
  5. 本体側のバルブを半回転ほど回して数秒待ちバーナー下部のカップに燃料を補給する
  6. 点火する
  7. 40秒程度燃焼させると炎が弱くなるので本体側のバルブを開く
  8. 青い炎で燃焼すれば OK
  9. 赤や黄色い炎の場合は余熱が不足しているので本体側のバルブを閉じで余熱を続ける
消火
  1. タンクの OFF の文字を上にして水平にする
  2. 1分程度で自動で消火する
  3. 燃料側のバルブを全閉にする
  4. 本体側のバルブも全閉にする

2016/03/04

Coleman 533 Dual Fuel Stove

508 と基本的な構造は同じだけど燃料としてホワイトガソリンと無鉛ガソリンが利用できるタイプ。
何故か日本国内では正規品として販売されていないので平行輸入品を購入した。
ジェネレータの交換なしでホワイトガソリンと無鉛ガソリンが利用できるらしいが、 無鉛ガソリンを使うとジェネレータが詰まったりするので使用は推奨されておらずあくまでも緊急時用らしい。
実際に無鉛ガソリンで燃焼させた事がないのでいつか燃焼させてみたい。

最近の製品だから当然1レバーなので火力調整はすこしだけ難しい (できない事はないけど)。
以前は 508 と2台でキャンプに行っていたが 400A を入手して以来出番がなく家で待機している (ディーゼル車に乗り換えた事で無鉛ガソリンが手元になくなってしまった事も出番が減った理由の一つ)。 たまには使おうとは思うのだが2レバーの便利さを知ってしまうと1レバーの出番は少ない。

Image: RIMG0802.JPG

Dual Fuel モデルは本体がシルバー
Image: RIMG0804.JPG

2011年07月製造
Image: RIMG0811.JPG

純正のスクリーンを装着

キャンプ場などアウトドアでストーブを利用する場合は基本的にスクリーンを装着して利用している。
コールマン純正のスクリーンはスポーツスター系の 508 や 533 だけではなく 400A にも対応しているので1個持っていると便利。

ポンプキャップは新型の樹脂製。
ポンプカップも新型のネオプレーンタイプ。
コールマンの純正ポンプはアルミと樹脂のキャップがどちらも付属しているので 508 や 400A と同じものが利用できる。
1レバーなのでバルブはクリーナーフックのあるタイプとなっている。

交換部品

ジェネレータ 533-5891
ポンプ 242J5201 → 3000000455(220A6201)
バルブ 508A5571
チェックバルブ 200-6381 (118mm)

2016/03/03

Coleman PEAK1 400A Stove 2 Lever

バーナー部分は 508 と共通でタンク部分がより小型化されたのがこちらの 400A ストーブ。
小型のタンクに加えて折りたたみタイプの脚が採用されていてスポーツスターよりも随分とコンパクトで携行性に優れている。
一時期は車のトランクに常時携帯していて適切な場所があればパーコレータで珈琲を淹れて飲んだりしていた。
この 400A はアメリカのオークションサイト eBay で落札したのだが、鍋にも利用できる (使いたくないけどね) アルミケース、 鍋として使う時のためのアルミ製ハンドルなどが付属していた。
前述の通りタンク以外の部品は2レバーの 508 と殆ど共通なのでメンテも楽だし、 使い勝手や火力は 508 と同じなのでこちらも普段からとても重宝している。
現行機種のフェザーストーブと殆ど同じデザインなのだが、有鉛ガソリンには対応しておらず、 折りたたみの脚に穴が開いていないなど細かな差がある。
こちらも2レバータイプなので火力調整が容易にできるのが嬉しい。
508 と比較するとコンパクトな分だけ燃焼時間が若干短いがキャンプでは 508 と並べて併用しているのであまり気にならない。

Image: RIMG0792.JPG

コンパクトな本体
Image: RIMG0793.JPG

付属のアルミケースとハンドル
Image: RIMG0038.JPG

1988年8月製造

ポンプキャップは旧式のアルミ製。
ポンプカップはこちらも純正の革製ポンプカップに変更している。

交換部品

ジェネレータ 400-5891 → 508-5891
ポンプ 400E5211
バルブ 400-5571 → 400B5571
チェックバルブ 400-6381 (96mm)

バーナー周りの交換部品は 508 と共通な部品も多いのでメンテナンス性は非常に高いが、 チェックバルブとポンプはタンクが小型のために 508 に比べて短いタイプとなる。

Image: 508-5891.jpg

508 / 400A で共用の2レバー式ジェネレータ

Image: 508-5571.jpg

フック無しで真鍮製フードチューブのバルブは偶然入手したので大切に保管している。

Image: 200-6381.jpg

ゴム製の O リングを装着したチェックバルブ

2016/03/02

Coleman 508 Stove 2 Lever

最近当ブログの更新が滞っていたのでキャンプ道具の自慢紹介など…

コールマンと言えばまず思い浮かぶのがシングルストーブの 508。
その 508 の中でもこれは火力調整の可能な2レバータイプなので非常に重宝している。

このタイプのシングルバーナーはスポーツスターII (508A) として今でも新品が製造販売されているが、 現行のタイプは燃料開閉用のレバーだけなので特に弱火の火力調整が困難で炊飯時などに結構困る。 ところが旧式の2レバータイプは火力調整専用のレバーがあるので強火からとろ火まで調整が非常に容易である。
コールマンの代名詞とも言えるポンピングのおかげで余熱が不要だし火力調整も思いのままなので、 今の所シングルバーナーのストーブでは最高の1台だと思う。

Image: RIMG0823.JPG

ラベルデザインも旧式
Image: RIMG0824.JPG

燃料調整用レバー
Image: RIMG0825.JPG

1987年12月製造

ポンプキャップは旧式のアルミ製。
ポンプカップは標準は新型のネオプレーンタイプなのだが、純正の革製ポンプカップに変更する事でポンピングの感触が随分と改善される。
2レバータイプはクリーナーがジェネレータにつくのでバルブにはフックを掛けるためのエキセントリックロックがないらしい。 フック無しのバルブ (508-5571) は廃盤で入手できないが1レバータイプのバルブも流用可能らしい。

交換部品

ジェネレータ 400-5891 → 508-5891
ポンプ 242J5201 → 3000000455(220A6201)
バルブ 508-5571 (フック無し) → 508A5571
チェックバルブ 200-6381 (118mm)

2レバーの操作方法

点火
  1. 燃料を入れる
  2. ポンピングする
  3. 黒い火力調整レバーを LIGHT/HI の位置にセットする
  4. 赤い燃料レバーを ON と OFF の中間 (下向き) 位置にセットする
  5. 点火する
  6. 着火したらポンピングを追加し十分な圧力を保持する
  7. 青い炎になり火力が安定したら赤い燃料レバー ON の位置にセットする
  8. 黒い燃料調節レバーで火力を調整する
消火
  1. 黒い火力調整レバーを LIGHT / HI の位置にセットする
  2. 赤い燃料レバーを ON と OFF の中間 (下向き) 位置にセットする
  3. そのまま30秒程度燃焼させる
  4. 赤い燃料レバーを OFF の位置にセットして消火するまで待つ
  5. 完全に消化して数分後に黒い火力調整レバーを CLEAN の位置にセットする

2015/10/30

Happy birthday for my dearest.


Dear Princess, may you have a great and happy life ahead. We are always with you. I wish you a very Happy Birthday. Enjoy.


Copyright © Mitzyuki IMAIZUMI 2008,2009. All rights reserved.