#!/usr/bin/env ruby
module PARS_CONF
def get_conf(conf_file)
if File::ftype(conf_file) == "file"
return Array[*open(conf_file).read.split(/(\n|\r)/).map{|f|
f.split(/\r/)
}.flatten]
end
end
def ldif_conf(conf_file)
if File::ftype(conf_file) == "file"
return get_conf(conf_file).select{|b|
b =~ /(^uid\:[[:blank:]]|^mail\:[[:blank:]])/
}.each{|x|
x.gsub!(/(^uid\:[[:blank:]]|^mail\:[[:blank:]])/,"")
}
end
end
def running_conf(conf_file)
if File::ftype(conf_file) == "file"
return get_conf(conf_file).select{|b|
b =~ /(^user[[:blank:]]|^[[:blank:]]*description[[:blank:]].*@.*)/}.each{|x|
x.gsub!(/(^user[[:blank:]]|^[[:blank:]]*description[[:blank:]])/,"")
}
end
end
def aliases_get(conf_file)
if File::ftype(conf_file) == "file"
return Array[*open(conf_file).read.split(/((^\s*)(:|,)(\s*)$)/).map{|f|
f.gsub!(/(^\#.*$\n)|(\\$\n)|([[:blank:]]*)/,"") ;f.split(/\n/)}.flatten]
end
end
protected :get_conf
protected :ldif_conf
protected :running_conf
protected :aliases_get
def get_ac(conf_file)
if File::ftype(conf_file) == "file"
case File::extname(conf_file)
when /(ldif|LDIF|ldap|LDAP)/
return ldif_conf(conf_file).sort
when /(cli|CLI)/
return running_conf(conf_file).sort
when /ali/
return aliases_get(conf_file).sort
else
return get_conf(conf_file).sort
end
end
end
end
class COMP_AC
include PARS_CONF
def initialize(file1, file2)
@A1 = get_ac(file1)
@A2 = get_ac(file2)
end
def show_comp()
printf("%s only,\t%s only\n" ,ARGV[0],ARGV[1])
a = [(@A1 - @A2).sort, (@A2 - @A1).sort]
if a[0].length > a[1].length
count = a[0].length
a[1].fill(a[1].length ,count) { nil }
elsif a[0].length < a[1].length
count = a[1].length
a[0].fill(a[0].length , count) { nil }
else
count = a[0].length
end
i = 0
while i < count
printf("\"%s\",\"%s\"\n",a[0][i],a[1][i])
i += 1
end
end
end
if ARGV[0].nil? or ARGV[1].nil? then
print < out.csv
EOS
elsif ARGV.size > 0 then
COMP_AC.new(ARGV[0], ARGV[1]).show_comp
end
Showing posts with label ruby. Show all posts
Showing posts with label ruby. Show all posts
3/10/2011
memo
2/08/2011
ruby楽しいよ
個人の感想です
むか~し開発の仕事をしていて
C/C++やらJavaやらPerlを使っていたのだけれど
正直、好きじゃなかった
趣味でやってる分には楽しかったんだけど
途中で作るのが面倒になる
「ああもうシェルスクリプトでいいや」
充分にテストされてコンパクトで早いcoreutilsやら
枯れた実装かつノウハウ(悪いものも含めて)が充分にあるawkやらsedやら
bashやらzshの固有拡張機能があれば、いちいちPerlやら何やら持ち出すのが
バカバカしい。
(もちろんスクリプトで作りにくい、または現実的には困難なものもあるけど)
仕事じゃなくなってから、仰々しいものを作ったりしなくなったのも
「シェルスクリプトでいいや」を助長させてたと思う
なんで、シェルスクリプトでいいかというと
使い慣れたツールとの連携が可能、かつ楽
なによりも手軽に試せる。デバッグは面倒だけどテストは楽。
殆どのLinuxならzsh以外ならデフォルトで入ってるから
Linux間では可搬性も高い(違ったとしてもパスくらいだし)。
で、Rubyの勉強として過去作ったスクリプトの移植を試みてるんだけど
楽しいね。ほんと、純粋に楽しい。
awkやsed、grepレベルの文字列操作なら特に何も意識しなくても普通にできるし
「ちょっとやってみようかな」と思ったらすぐ試せる。シェルスクリプトばりに手軽。
PerlもJavaも構文が嫌いだった。Perlは後付臭いOOも嫌い。
あくまで”嫌い”なだけです。機能や性能や思想的な価値がRubyより劣るとか言ってるわけではありません。
ただ、私はPerlやJavaは大嫌いです。くそったれだと思います(個人の感想です)。
「ちょっとした小間使い的なツール作成」だと絶対に使いたくない。
(規模によってはJavaがいいかな、と思うこともある。ただしPerlはイヤだ)
RubyのALGOLみたいな構文はアレな気はしてたんだけど、書いてみてナルホドという感じ
こうじゃないといけなかったんだなぁと。
OOネイティブな感じもすばらしい。
思想的なものには一切興味はないんだけど
(例えばRubyのどこそこはどう美しい、それはなぜか とか)
規模問わず、お手軽にはじめられるのはいい。
とりあえずRubyで実装して、思考を整理したり実装する機能を選別したり検証してから
ほかの言語に移植(要件とか運用で使う言語変わるし)とかしてもいいかなと思えるくらい、良い。
むか~し開発の仕事をしていて
C/C++やらJavaやらPerlを使っていたのだけれど
正直、好きじゃなかった
趣味でやってる分には楽しかったんだけど
途中で作るのが面倒になる
「ああもうシェルスクリプトでいいや」
充分にテストされてコンパクトで早いcoreutilsやら
枯れた実装かつノウハウ(悪いものも含めて)が充分にあるawkやらsedやら
bashやらzshの固有拡張機能があれば、いちいちPerlやら何やら持ち出すのが
バカバカしい。
(もちろんスクリプトで作りにくい、または現実的には困難なものもあるけど)
仕事じゃなくなってから、仰々しいものを作ったりしなくなったのも
「シェルスクリプトでいいや」を助長させてたと思う
なんで、シェルスクリプトでいいかというと
使い慣れたツールとの連携が可能、かつ楽
なによりも手軽に試せる。デバッグは面倒だけどテストは楽。
殆どのLinuxならzsh以外ならデフォルトで入ってるから
Linux間では可搬性も高い(違ったとしてもパスくらいだし)。
で、Rubyの勉強として過去作ったスクリプトの移植を試みてるんだけど
楽しいね。ほんと、純粋に楽しい。
awkやsed、grepレベルの文字列操作なら特に何も意識しなくても普通にできるし
「ちょっとやってみようかな」と思ったらすぐ試せる。シェルスクリプトばりに手軽。
PerlもJavaも構文が嫌いだった。Perlは後付臭いOOも嫌い。
あくまで”嫌い”なだけです。機能や性能や思想的な価値がRubyより劣るとか言ってるわけではありません。
ただ、私はPerlやJavaは大嫌いです。くそったれだと思います(個人の感想です)。
「ちょっとした小間使い的なツール作成」だと絶対に使いたくない。
(規模によってはJavaがいいかな、と思うこともある。ただしPerlはイヤだ)
RubyのALGOLみたいな構文はアレな気はしてたんだけど、書いてみてナルホドという感じ
こうじゃないといけなかったんだなぁと。
OOネイティブな感じもすばらしい。
思想的なものには一切興味はないんだけど
(例えばRubyのどこそこはどう美しい、それはなぜか とか)
規模問わず、お手軽にはじめられるのはいい。
とりあえずRubyで実装して、思考を整理したり実装する機能を選別したり検証してから
ほかの言語に移植(要件とか運用で使う言語変わるし)とかしてもいいかなと思えるくらい、良い。
2/07/2011
勉強メモ
引き続きRuby中
メモを残す
メモを残す
#!/usr/bin/env ruby
require 'date'
def parse_dir(conf)
snap = Hash::new
# hoge.tap{|h| hoge.each_pair{|src, dst| h[src] = "a"} }
conf.each_pair {|src, dst|
_src = src.sub(/$\//,"").split(/\s*\/\s*/)
if _src.size == 0
snap[src] = "#{dst}/rootfs_#{Time.now.strftime("%Y%m%d").to_s}"
else
snap[src] = "#{dst}/#{_src[_src.size - 1].strip}_#{Time.now.strftime("%Y%m%d").to_s}"
end
}
return snap
end
def get_conf(conf_file)
conf = Hash[*open(conf_file).read.split(/\n/).map{|f| f.split}.flatten]
return conf
end
class Snapshot
def initialize(conf = "/etc/snap.conf")
@snap = parse_dir(get_conf(conf))
end
def do_snap
@snap.each_pair {|src, dst|
system("btrfs","sub","snap",src,dst)
}
end
end
if ARGV[0] == nil
snap = Snapshot.new
else
if File::ftype(ARGV[0]) == "file"
snap = Snapshot.new(ARGV[0])
else
p "no such file"
end
end
if snap != nil
snap.do_snap
end
rubyの勉強
やろう やろう と思いながら
結局3年くらい勉強しないままにしてたruby
せっかく参考書まで買ったのに一度も目を通してない
というわけで、仕事の空き時間に練習してみた
(参考書がないのでGoogle先生のお世話になりました)
構文からの勉強だから非常に時間がかかった(働け)
先日のbtrfsのスナップショット用スクリプトのruby移植+α版
ハッシュが使えるお陰で設定ファイルがシンプルになりました。
/path/src /path/dst の形式で1行ずつ書いてくだけ。
以前の階層に関連する制約がなくなりました。
データ構造をもう少し考えて
1つのでdstにつき、複数のsrcという形式で記述できるように
したほうがよかったかなと思ってます(今後の課題)
#!/usr/bin/env ruby
require 'date'
def parse_dir(conf)
snap = Hash::new
conf.each_pair {|src, dst|
_src = src.sub(/$\//,"").split(/\s*\/\s*/)
if _src.size == 0
snap[src] = "#{dst}/rootfs_#{Time.now.strftime("%Y%m%d").to_s}"
else
snap[src] = "#{dst}/#{_src[_src.size - 1].strip}_#{Time.now.strftime("%Y%m%d").to_s}"
end
}
return snap
end
def get_conf(conf_file)
conf = Hash::new
open(conf_file) {|file|
while i = file.gets
_line = i.split
conf[_line[0]] = _line[1]
end
}
return conf
end
class Snapshot
def initialize(conf = "/etc/snap.conf")
@snap = parse_dir(get_conf(conf))
end
def do_snap
@snap.each_pair {|src, dst|
system("btrfs","sub","snap",src,dst)
}
end
end
if ARGV[0] == nil
snap = Snapshot.new
else
if File::ftype(ARGV[0]) == "file"
snap = Snapshot.new(ARGV[0])
else
p "no such file"
end
end
if snap != nil
snap.do_snap
end
Subscribe to:
Posts (Atom)
WSKY Bluetooth 5.0 トランスミッター レシーバー買いました
安くレシーバーモードでapt-x HDが使えるものというと非常に限られますが そのなかで高音質と評判のよかったものをということで購入しました。 音質は安いなりですね、apt-x HDで接続されている状態でも元がなんであれ痩せた音になります。 SBSにしか対応していない...
-
特に確認もせず買って来たもののドライバもないし 刺しただけではきちんと動かない 一応動作させることはできたが・・・ チップはRTL8811AUらしいのだが、そのチップ名でドライバを探しても正常に動くものは見つからない とりあえず認識して通信ができたドライバはこちら ...
-
安くレシーバーモードでapt-x HDが使えるものというと非常に限られますが そのなかで高音質と評判のよかったものをということで購入しました。 音質は安いなりですね、apt-x HDで接続されている状態でも元がなんであれ痩せた音になります。 SBSにしか対応していない...
-
発狂しそうだった件 以下を参考に実施 http://www.xpenology.nl/hp-n40ln54l-bios-modificatie-2013-10-01/ http://homeservershow.com/forums/index.php?/topic/4...