2011-01-01から1年間の記事一覧

ピタゴラス数 その2

前回のphは、(3,4,5),(4,3,5),(6,8,10)のように、単に順番を入れ替えただけのやつや、互いに素でないのが混ざっていて楽しくないので、x factors :: Int -> [Int] factors x = [n | n <- [1..x], x `mod` n == 0] min2 :: [Int] -> Int min2 [x] = x min2 (x…

ピタゴラス数

プログラミングHaskellの第5章演習問題より。印象的だったので…問題 大きさnまでの正の整数を要素とするピタゴラス数を列挙する関数phを書こうすこし親切な問題の説明 1.まず、大きさnまでの正の整数3個の組み合わせを生成してみよう 2.その組み合わせのうち…

map()

map()って何なのかよくわからなかったのですが、いろいろ勉強した所、なんとなく判った気になったのでメモ。 lst = ['hoge', 'fuga', 'piyo'] def foo(spam): print spam # lst にある文字列を、順番に画面に出力する(1)I for x in lst: foo(x) # (2)(1)と同…

pythonで継承を使ってみる

前回の続きです。Partition.mount()がゴチャゴチャなのは、nilfs2用のコードと、普通のファイルシステム用のコードが一緒になってるからなので、これを分割することにしました。それで、Partitionクラスを継承するNilfs2Partitionクラスを作ることにしたので…

オプション解析器 optparseを使ってみた

前回の続きでーす。今回は、オプション解析器、 optparseを使ってみました。使いかたは簡単です。まずは、OptionParserのインスタンスを作成します from optparse import OptionParser op = OptionParser() 次に、解析するオプションを追加します。 op.add_o…

バックアップをとろう(その6)

前回の続きです。Partitionクラスのmount, umountを実装します。 class Partition(): def mount(self): """ マウントする """ # devnodeが解らなければ、マウントしようがない if not self._attr['devnode']: # fixme 例外を送出した方が良いかも return # …

コンテキストマネージャーを使う

前回の続きです。コンテキストマネージャーを使うと、さらに記述がすっきりするようなので、早速試してみました。まずは、Partitionクラスをコンテキストマネージャーにします。クラスをコンテキストマネージャーにするには、特殊関数__enter__と__exit__を…

バックアップをとろう(その5)

前回の続きです。まずは、do_backup()の実装から。 def do_backup(partition, dest_mtpt): """ 関数 doBckup: rsyncを利用してバックアップコピーをとります パラメータ partition コピー元となるパーティションの名前(文字列) ex 'boot' dest_mtpt コピー…

pythonとperlを両方ちょこっと使ってみて思ったこと

まったくのシロウトがちょこっとモジュールとか書いてみて思った感想ですよ。一言で言うと、とりあえず動くプログラムを短期間で書きたければ、pythonが無難だということです。 perl 良い点 ワンライナーで使うと強力。同人CDを音源からエンコしたファイルが…

バックアップをとろう(その4)

http://d.hatena.ne.jp/dwarfjay/20110610/1307704454の改造ネタ続きです。外部コマンドを呼ぶ時に、あらかじめ引数リストを定義しておいて、 predefined_command=['ls','-l'] call(predefined_command) としていたのですが、main関数を分割することしたので…

作ったモジュールを使ってみる

早速、モジュールを使ってみる。まずは、http://d.hatena.ne.jp/dwarfjay/20110612/1307889365から。えーと、pythonで。rmss.py #!/usr/bin/python # -*- encoding: utf-8 -*- import sys import re from subprocess import Popen,PIPE,call from os import …

/etc/fstabの情報を管理するモジュールを作る

/etc/fstabの情報を管理するモジュールを作ってみることにしました。perlでのモジュールの作り方は知らないので、まずpythonで。とりあえず、必要なインターフェイスは、パーティション名 → デバイスノード パーティション名 → マウントポイント パーティシ…

バックアップをとろう(その3)

バックアップをとろうシリーズの続きです。今使っているPCには、/dev/eltro(raid10)と/dev/raid5(raid5)の二つの論理ボリューム があります。これまでは、eltroの方をメインで、raid5の方はバックアップとして使っていました。しかし、ベンチマークを取るとr…

ショックだ…

ミニマルperlを読んだところ、http://d.hatena.ne.jp/dwarfjay/20110610/1307670622のスクリプトは極めて冗長だということが判った。これでどーだ。 #!/usr/bin/perl -w use strict; foreach (@ARGV) { my $device = "/dev/eltro/$_"; my @result = `lscp -s…

Linuxのレイドをブートパーティションとして利用する

リナックスで、raidなパーティションを/bootで利用するには、2つの方法がある。 1. grub legacy を捨てて、grub2を使う 2. grub legacy を使い続ける代りに、raidのメタデータをv0.9にする metadata 0.90では、raid-devicesの数や、パーティションの容量(2T…

バックアップをとろう(その2)

ちょっと長いけど、ここまでで出来上がったソース backup.py #!/usr/bin/python # -*- coding:utf-8 -*- import sys from subprocess import call,Popen,PIPE import os def main(): """ 文字列変数 partition バックアップ対象となる論理ボリューム名や 物…

もうちょっとperlっぽく書きなおし

http://d.hatena.ne.jp/dwarfjay/20110602/1307021854のスクリプトをちょっと修正。 #!/usr/bin/perl use strict; use warnings; foreach (@ARGV) { my $device = "/dev/eltro/$_"; my @result = `/usr/bin/lscp -ss $device`; foreach (@result) { my @sp =…

pythonで環境変数を取得したり、ディレクトリを作成したりする

http://d.hatena.ne.jp/dwarfjay/20110603/1307103419の改造ネタの続きです。このスクリプトは、crontabの中で、 @hourly /root/backup.py home @daily /root/backup.py boot gentoo として動かしていたのですが、'backup.py'のプロセスを二つ同時に動かした…

pythonで自分自身の実行ユーザーIDを取得する

http://d.hatena.ne.jp/dwarfjay/20110603/1307103419の改造ネタの続きです。 自分を実行しているユーザーのidを調べるのは、実は非常に簡単で、os.getuid() を呼べばいいだけのようです。早速、昨日書いたコードを直します。 from os import getuid """ boo…

pythonのリストを使って富豪的プログラミング!

バックアップをとろう(その1) - La coda de la corsaの改造ネタの続きです。今回は、スクリプトをルートで起動するのと通常ユーザーで起動する時とで動作を変えたいと思います。具体的には、 ルートで実行する時は現状でOK ノンルートで実行する時は、rsyn…

pythonのリストはすごい

バックアップをとろう(その1) - La coda de la corsaのシェルスクリプトをもうちょっと高機能にしようということで、pythonを使って書きかえています。今回は、for文とリストについて。例のスクリプトは、バックアップを取るボリュームをソースで決めうち…

pythonで外部コマンドを実行する

os.system("文字列")は古いコードで推奨されないらしい。代りにsubprocess.Popenを使うのがよいそうだ。さらに、subprocess.Popenには、subprocess.callというラッパー関数があるので、これを使えばさらにコードが簡単になる。単に外部コマンドを実行する場…

vimを使って、pythonソースを編集する時便利な小技

vimを使って、pythonのソースを編集している時に、便利だなと感じた使い方アレコレ。 インデントを操作する 編集モードで、'>'で一段字下げする。' 行末の改行 pythonでは、インデントする直前の行は':\n'で終っていないといけないみたいなのだが、ごちゃご…

バックアップをとろう(その1)

これまでは、バックアップをとるのに、いちいち手作業でマウントしてコピーするのを繰りかえしてきたのだが、さすがに面倒くさくなってきたので、自動でバックアップするコトにした。まず仕様としては、1.コピー元 /dev/eltroというボリュームグループに、そ…

溜ったスナップショットを削除する(python)

シェルスクリプトで書くのが一番簡単だった、というオチ #!/usr/bin/python from subprocess import Popen, PIPE import sys def main(): ---- for i in range(1, len(sys.argv)): >-------TARGET_DEVICE = "/dev/mapper/" + sys.argv[i] cmd=["/usr/bin/lsc…

溜ったスナップショットを削除する(perl)

perl版 #!/usr/bin/perl use strict; use warnings; foreach (@ARGV) { my $device = "/dev/mapper/$_"; my @result = `/usr/bin/lscp -ss $device`; foreach (@result) { my @sp = split; if (@sp[0] =~ /[0-9]+/) { print "/usr/bin/chcp cp $device ",@sp…

溜ったスナップショットを削除する

これまでのマトメ/をraid0にする ↓ HDDが死ぬこともあるかもしれないからバックアップをしっかりしよう ↓ LVMのスナップショットがイマイチ使いにくいから、nilfsを使うよ! ↓ nilfsのスナップショットが溜ってきた ←イマココというわけで、 #! /bin/sh for …

/をraid0にしたら、とても快適になった

騙されたと思って、/をraid0にしたら、とてつもなく快適になりました。hdd2台使ってる人にはオススメです。linuxの場合は、特別なハードウェアを用意しなくても、気軽にraidを試せるのはポイント高いです。参考にしたのは、http://en.gentoo-wiki.com/wiki/R…

日本語manの文字化け

/etc/man.confで JNROFF nkf -e | /usr/bin/groff -DeucJP -mandoc -T utf8 としてやればok

興味があったので、cpとtarとrsyncで、どれが一番速いのか比べてみた。

/usr/portageを、/mnt/backupに丸ごとコピーしてタイムを計測した。 結果は、以下の通りcp: ( cp -av /usr/portage /mnt/backup; ) 3.93s user 22.52s system 14% cpu 3:06.63 totaltar: ( tar cpf - -C /usr/portage . | tar xvpf - -C /mnt/backup; ) 2.29…