大きい画像ファイルを印刷したい(PosteRazor)

仕事で、とんでもなく大きい(というより横に長い)PNGファイルがあって
なんとかプリンターで綺麗に印刷出来ないかと調べた。

PosteRazor

大きいポスターを作るために考えられたようだがピッタリ。

縦(or横)幅にあわせて分割してくれたり、ページ間であえて重なるようにしてくれたりと完璧!

しかもubuntuならパッケージもあった。

win版MAC版もあるようです。

perl難読化 Acme::EyeDrops

とある案件で、perlの難読化する必要があったので調べたら以下のモジュールに行き着いた。

Acme::EyeDrops

perlスクリプトを記号のみに変換してくれるのだが、変換時に指定したアスキーアートにしてくれる。

ubuntuだとlibacme-eyedrops-perlというパッケージで一発インストール。その他はcpanとかで簡単にインストール出来ると思う。

変換前のperlを用意(hoge.pl)

 

これを変換するために、以下のperlを準備(eyedrops.pl)

 

 

eyedrops.plを実行して第一引数に、変換したいperlファイルを指定する。

※ラクダが一番好きですが、横幅が足りないので味気ないボトルにしました。

一番最初の1 shapes completed.を除く部分がperlスクリプトになる。そいつを実行すると変換前と同じ動作をします。

また、今回の案件では、requireを多用していたのだが、その部分は別途追加してあげないと上手く動作しませんでした。

また、アスキーアートの形は、# のみで形どったファイルを用意してあげれば、簡単に定義出来ます。

うーん。面白い。

たぶんShapeで指定できるのは、このくらいあります。

a
acme
adrianh
alien
alpaca
autrijus
baghdad
beer
bighorn
bleach
bottle
bottle2
bottle3
bra
buffy
buffy2
buffy3
buffy4
camel
camel2
camel3
campm
candle
china1
coffee
cricket
damian
dan
debian
dipsy
eugene
eye
flag_canada
gelly
golfer
halloween
heart
hipowls
japh
jon
jon_oxer
kangaroo
kansai_pm
kermit
koaladile
larry
larry2
llama
london
map_australia
map_italy
map_japan
map_uk
map_world1
map_world2
map_world3
merlyn
mongers
moose
moosecamel
mosquito
music
naw
opera
panda
parrot
pgolf
pony
pony2
pugs
pugs2
riding
rose
santa
santa2
saturn
schwern
schwern2
simon
smiley
smiley2
smiley3
snow
spider
spoon
tonick
tpr
uml
undies
window
writing_perl
yanick
yanick2
yanick3
yanick4

サーバの管理ボードをリセットする ipmitool mc reset cold

最近のサーバだと大体付いているipmi

統一規格のため、メーカが違っても同じように使えるし、linuxでも問題ないのでかなり重宝している。

リモートから電源を上げられたり、OS不要でボードの状態を確認出来たりと、今までお手上げ状態だった状況からもなんとか復旧出来たりする。

ただ、たまにipmiの管理ボード自体がおかしくなってるときがある。(特に管理WEBへのhttpsでコケる気がする)

そんなときは、管理ボード自体を再起動できる。しかもOS側は動作したままで!

上記実施後、5分くらいで管理ボードの再起動が終わります。IBM、NEC、FUJITSU筐体で試してはいるが、どのメーカもOS側には何ら問題はなかったので他メーカでも問題無いと思う。

また、上記コマンドですが、debian系ならそのままの名前ipmitoolでインストール出来ると思う。

centosでは、OpenIPMI-toolsでいけると思う。追加のリポジトリ(remiとかrpmforgeとか)が必要かも。

django1.5にアップデート時のurl

自分の開発環境のubuntuを13.04にアップデートしたら、
pythonのvirtualenv環境が変になった。

virtualenv環境を新しくして、pipでdjangoをインストールしたところ
1.4から1.5に上がってしまい若干の修正が必要だった。

こんなエラーが表示される。

調べたところ、template内の、{% url foo.bar %}が問題らしい。

ここを

 

 

 

とクオートで囲んであげれば、現象回避できる。

自分の場合は、さほど数が多く無いので手動で行ったが、
多い場合は、スクリプトで対処が必要かと。

http://stackoverflow.com/questions/13590699/migrate-url-tags-to-django-1-5

テンプレートの、拡張子がhtmlならこんな感じでしょうか。(未検証)

(一応sed時に*.BKでバックアップも残して)

vimのNERDTreeで特定のファイルを表示しない方法

なんてことはない、.vimrcにNERDTreeIgnoreを指定するだけ。

pycファイルを表示しない場合は、

複数指定したい場合は、カンマで区切る

etckeeperでLinuxサーバのコンフィグバージョン管理

長年悩んでいたが、linuxサーバのコンフィグ(/etc以下)のバージョン管理について良さげなのを見つけた。

その名もetckeeper

gitやbzrなどのバージョン管理と連携してくれる見たいで、おそらく要望通り。

動作としては、/etc/内にリポジトリを作り、一日一回更新してくれる模様。yum実行後にも更新してくれるらしい。

CentOS6でのインストールはepelが追加されていればyumで一発

 

 

 

インストール後、初期化して上げます。

 

 

 

とりあえず最初のcommitをします。

 

 

あとは、定期的に自動でcommitされるはずです。
基本gitなんで、ステータスとかログは、gitコマンドで見れます。

まだインストールしただけなんで、感想とかは無いです。

scpのETAって何?

scpしていると右下に、ETAと時間らしきものが表示される。

どうやら(Estimated Time of Arrival)の略らしい。

翻訳サイトで確認すると、(到着予定時刻)らしい。

まー予想通り。

fallocateで素早く仮想化ディスクを用意する

今まで、仮想環境のディスクファイルなんかで使う大きめのファイルといえばddでzero fillをしていたが、

実際にディスクにzeroを書き込むので遅くて困っていた。

1Gファイルを作るとき

最近だとfallocateの方が良いっぽい。

同じく1Gファイルを作るとき

sparse fileじゃなくてちゃんと確保してくれている模様。

ext4からの機能らしい。

bashのeオプションを一時的に無視する

シェルスクリプトを書いていると、エラー処理を書くのが面倒で、とりあえずbashをeオプションで起動しておけばいいや程度に思っていたりします。シェルスクリプト中のどこかでエラーが出ればスクリプト自体を終了してくれるので何かと便利なんですが、途中無視できる程度のエラー処理で止まって困ることもあるので、そこを何とか無視する方法を調べました。まーmanに書いてあったんでちょっと読めば気付くんでしょうが自分は結構時間かかりました。

-e      単純なコマンド (前述の シェルの文法セクションを参照) が 0 でないステータスで終了した場合、即座に終了します。ただし 失敗したコマンドが until または while ループの一部である、 if 文の一部である、 && または ││ リストの一部である、コマンドの返り値が !  で反転されている、のいずれかの場合にはシェルは終了しません。

上の条件に当てはめてしまえばいいだけです。

サンプルとして、以下のようなスクリプト。

 

最初のfalseでは、止まらず次のfalseで止まって、最後のechoは処理されないはずです。

メモリをメッチャ使ってみる

前回cpuに負荷をかけてload averageをメッチャ上げてみたが、今度は、メモリをひたすら消費するとどうなるか見てみます。

今回もwatchdogタイマーの動作具合を見るのが目的です。

まず、以下のようなコードを書いて

 

 

 

コンパイルして、

 

 

 

実行します。

 

 

メモリをジワリジワリと消費して行って、そのうち強制終了されると思います。

その間、経過を見るため他のコンソールでtopします。

 

 

 

RESの値が搭載メモリ近くになると、強制終了すると思います。このRESの値が実際に確保する値です。malloc時に

もっと多めに取れば、早く確保出来ると思ったのですが、あまり値が大きいと仮想メモリ(VIRT)ばかり増えて、

実メモリ(RES)が少ししか増えなかったので、小さめにしていっぱい回します。

RESが搭載メモリ近くになると、コンソールの反応とかも悪くなりますが、しばらくすると対象プロセス(mem_full)が

強制終了されます。この強制終了は、有名なoom-killerさんが行なってくれます。

syslogを見ればそんなメッセージがあると思います。

ただ、必ず予想していたプロセス(mem_full)とは限らず、他の正常プロセスも落とされる可能性があります。

ここまでやってメモリを食い尽くすプロセスがいても、きっとoom-killerさんが良きに計らってくれるので

watchdogタイマーで落ちることは無さそうです。

せっかくなので、今度は、メモリ食い尽くしプログラムを同時多発的に実行してみます。

 

 

 

とりあえず100個実行します。topで見るとわんさかプロセスがいます。

コンソールのレスポンスも激遅になり、topの表示も更新されなくなるが

地味にoom-killerさんも動いており、watchdogのリセットが実行される形跡はありません。

watchdogデバイスに定期的に書き込んでいるのは、CentOSにあったその名もwatchdogな

パッケージでインストールしたデーモンなんですが、こいつが何とか頑張っているようです。

この状況だとコマンドも打てないので、強制的に電源を落とすしかありませんでした。

watchdogの意味なし。

一応CentOSのwatchdogでは、load averageにしきい値を設定出来そうなので

それで対処するのもありかと思います(未検証)。

ただしきい値の設定は頭の痛いところです。因みにこのテスト実施時は160くらいいってました。

また、デーモンタイプのwatchdogでは性能が良すぎるのかとも思います。都度コマンドを実行して

デバイスに書き込むタイプの簡易的なものなら、おそらくコマンドの実行が出来ずwatchdogからリセットがかかる可能性が高い気がします。

うーん。watchdogに期待しすぎなのかもしれません。