Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

2014-06-01から1ヶ月間の記事一覧

columnコマンドで段組みのテキストデータを綺麗に成型する

columnは...段組みのテキストデータを綺麗に成型してくれるコマンドです $ cat sample.txt hoga huga piyo 12 3 45 6 7 8 9 a bc てな無茶苦茶なモノがあったとしても $ cat sample.txt | column -s " " -t hoga huga piyo 12 3 45 6 7 8 9 a bcとあっという…

instance_execでブロックに引数を渡して実行できる

instance_execはinstance_evalと似てますがちょっと違う子です。 > "hoge".instance_eval{ self[0] } => "h" > "hoge".instance_exec{ self[0] } => "h" と、これだとinstance_evalと何が違うの? という感じですが...この子は引数を持つ事ができます > "hoge…

trコマンドの落ち穂拾い

以前書いたtrコマンドで不要文字を抹殺したり小文字を大文字に置換したり。 - Bye Bye Mooreの続きです 複数行の改行を一個だけに絞る $ printf "hoge\nhuga\n\npiyo\n" hoge huga piyo複数の改行が入るとアレですよね。 sedで置換するのも良いですが、 ここ…

base64で色んな形式のデータをエンコードする

Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。 Wikipedia日本語版より UNIXライク環境ならば、デフォルトでコマンドが入っ…

カンマ区切りの文字列を配列に切り分けて処理する

カンマ区切りで複数行あるテキストファイル...たとえばcsvみたいなものを切り分ける方法です rubyのsplitみたいな感じで配列に切り分ける方法です $ head sample.txt hoge,huga,piyo foo,bar,bazz 1,2,3read -aをwhileでぶん回して配列にツッコみます。 ...U…

sortのオプションを使えば自然な形で整列してくれる。

以下のような文字列があったとします。 $ seq -10 10 | sed -e s/^4/hoge/ -e s/^-8/fuga/ -10 -9 fuga -7 -6 -5 -4 -3 -2 -1 0 1 2 3 hoge 5 6 7 8 9 10デフォルトのsortだと、 $ seq -10 10 | sed -e s/^4/hoge/ -e s/^-8/fuga/ -1 -10 -2 -3 -4 -5 -6 -7 …

繰り返し処理中では極力nextを使う

nextは繰り返し処理を次に送るメソッドです。 コーディング規則によれば、これを使うと、深いネスト化を避ける事ができます。 # 悪い例 Array(1..10).each do |item| if item.odd? puts item end end # => 2 # => 6 # => 10 # => 14 # => 18 # 良い例 Array(…

lambda式やprocは[]でも呼び出せる

lambdaはcall以外にも[]で呼び出す事ができます printout = ->(x) { ("*" * 10) << x.to_s << ("*" * 10)} #=> #<Proc:0x007fb58d03ef18@(irb):34 (lambda)> printout['a'] #=> "**********a**********" これはprocも同様です p = proc {|x| puts x} #=> #<Proc:0x007fb58c86c538@(irb):47> p['a'] #=> a ためしにリファレンスを読んで</proc:0x007fb58c86c538@(irb):47></proc:0x007fb58d03ef18@(irb):34>…

lambdaを使って共通部分の多いものを生成する

以前書いた、railsのinputを生成するヘルパーメソッドです。 def choose_action(key, flag) str = case key when :name "text_field :fund, key".instance_eval { |e| flag ? e << ", value: nil" : e } when :begin_date, :end_date "date_field :fund, key…

Go getのためには、各種バージョン管理ツールが必要

とあるパッケージを入れようとした所、エラーがでました。 $ go get github.com/kr/godep go: missing Mercurial command. See http://golang.org/s/gogetcmd package github.com/kr/godep imports code.google.com/p/go.tools/go/vcs: exec: "hg": executab…

Enumtatorを一個だけ回すときはnext

enum = (1..7).each_cons(6) #=> #<Enumerator: 1..7:each_cons(6)> > enum.next #=> [1, 2, 3, 4, 5, 6] > enum.next #=> [2, 3, 4, 5, 6, 7] 末尾に達すると、エラーを吐きます。 > enum.next #=>StopIteration: iteration reached an end これはenumratableメソッドであるeachとcycleの特</enumerator:>…

Arrayに引数を取ると配列として返してくれる...けどto_aと挙動が違わない

Railsのコードを読んでいたら見つけたのでメモ。 Arrayをわざわざnewしなくとも、連番のデータは実は楽に作る事が出来る、というお話です。 ary = [1,2,3] Array(ary) #=> [1,2,3] Array("str".split("")) #=> ["s", "t", "r"] Array({a: 1, b:2}) => [[:a, …

evalで動的にメソッドを追加する(その3)__Railsのformをevalで追加する

evalは文字列をスクリプトとして解釈して実行するKernel所属のメソッドです。 これを活用すると、似たメソッドを延々と生成する愚を犯さずに済みます。 更に、文字列を生成して評価する形式であるため、変更に対しても柔軟です。 実際の所 helperに def choo…

evalで動的にメソッドを追加する(その2)

今回はインスタンスに紐付けるinstance_evalを扱います。 例 # -*- coding: utf-8 -*- class EvalTest attr_accessor :val_a, :val_b def initialize @val_a = 10 @val_b = "test" end private def private_method ' hello from private_method' end end 使…

evalで動的にメソッドを追加する(その1)

evalを使うと、式を実行することができます。 > eval "1 + 1" #=> 2 この程度だとあまり旨みがありませんが... なんと、これを使うことで動的にメソッドを定義することもできます %w(hoge huga).each do |val| eval <<-EOM def method_#{val} %q( From the #…

inspectメソッドはオブジェクトを可視化できる文字列として返す

inspectメソッドはオブジェクトを人間が読める形にした文字列として返します。 Ruby2.0系から、to_sに代わりirbの出力で用いられています。 > 0x11.inspect #=> "17" ぱっと見to_sのようです。 が、これは全ての基礎となっているObjectクラスに実装されたメ…

連番の値やランダム値を出力したい場合はjotコマンドが便利

seqのように連続数を $ jot 10 1 10 1 2 3 4 5 6 7 8 9 10ランダム値の場合は「r」オプションを。 $ jot -r 10 1 10 4 2 2 8 3 8 10 5 3 3 $ jot -r 10 1 10 8 9 2 5 7 2 2 2 3 2連続する16進数を表示するのも楽々。 $ jot -w 0x%x 10 20 0x14 0x15 0x16 0x1…

bashにおける配列データの取り扱い

readコマンドで標準入力から変数を代入する - Bye Bye Mooreで配列で突っ込む方法を紹介しました。この突っ込んだデータをアレコレする方法がわかったのでメモします。 $ read -a Words <<< 'as you like'とやった場合 全てのデータを表示させるには $ echo …

Stringクラスの文字毎にeach_with_indexやcollectを扱う

2014/8/7追記: Enumeratorクラスのwith_indexメソッドの方が美しいです。each_char.each_with_indexなんて泥臭い事をせずとも...with_indexがあるんじゃよ - Bye Bye Moore > str = ('a'..'z').to_a.join => "abcdefghijklmnopqrstuvwxyz" という文字列があ…

どうしても観賞魚の面倒をみる事が出来なくなったら...ショップに引き取ってもらうという手も

止むを得ず、観賞魚(熱帯魚、金魚、錦鯉etc...)の飼育を諦めなければならないケースもありますよね。 たとえば、海外への引っ越し、破産等々による経済環境の激変、あるいはオーナーさんの逝去等々。 こういった場合、業界団体である日本観賞魚振興事業協…

sedで不要な行を削除する

sedは文字列置換以外にも、不要な行を削除するのにも使えます。 $ seq 1 10 | sed -e "1 ,3d"4 5 6 7 8 9 10headとtailでも似た事ができますが、コッチの方が楽なケースもありそうですね。 参考もと man sed

readコマンドで標準入力から変数を代入する

readは標準入力から変数を代入するコマンドです。 $ read Hoge <<< 'as' $ echo ${Hoge} asそもそもは標準入力と連動して動くものです。 以下のようなbashスクリプトを組み #!/bin/bash ## hoge.sh # single 'read' statement can set multiple variables. e…

ヒアストリングで出力コマンドを使わずともstdinに文字列を渡す事ができる

単にコマンドへ文字列を渡したいだけのケースって結構多いですよね。 bash系では、そういった要望にお答えする手法「ヒアストリング」が用意されています。 これを使えば毎回毎回echoやprintfをつかって文字列を生成する必要がなくなるわけです。 $ tr a-z A…

sedの行頭・末尾一致を単体使うと定型文にコメントを入れる処理を楽にできる

ドキュメント中のコメントに $$ hoge $$ $$ huga $$なんて出力をしたい場合、 今迄は一行毎に $ echo ' $$ hoge $$' $ echo ' $$ huga $$'とやるか、ヒアドキュメントで $ cat << 'EOS' > $$ hoge $$ > $$ huga $$ > EOSなんてやってました。 毎回毎回、定型…

mkdirしてすぐ移動したい場合はcd $_とやると楽

mkdirしたら、すぐ移動したいのが人情というものです。 ぱっと思いつく泥臭い方法は mkdir=>C-rで履歴辿り=>mkdirを消してcd といった感じでしょうか。 ここでbashの組込み変数を使うと若干楽にできます。 今回使う「$_」には、最新のパラメータが格納されて…

group_byで配列を条件毎のハッシュに変換する

chunkは意味合い単位で区切ってEnumratorして返してくれるメソッドでした。 今回紹介するgroup_byは条件毎に振り分けてハッシュで返してくれるメソッドです。まずは基本のtrue/false (1..10).map.group_by{|i| i > 2} #=> {false=>[1, 2], true=>[3, 4, 5, 6…

chunkメソッドで配列を意味合い単位で切り分ける

参考もと様の記事を眺めていたところ、chunkというメソッドを発見。 チャンクという位ですから、意味合いレベルのカタマリを作ってくれるものと考えられます。 試しに公式を見に行ったところ 要素を前から順にブロックで評価し、その結果によって 要素をチャ…

「Go Web 编程」でGo言語のWebアプリを学ぼう

「Go Web 编程」はGo言語でWebアプリケーション(Web 编程)を開発する書籍です。全文・画像共にCC BY-SA 3.0 License(いわゆるクリエイティブコモンズ)で公開されています。 書籍版もは2013年5月末に大陸中国で出版されたようす。 有志(?)による日本…

Redigo:GO言語上でredisを試す。

ライブラリを導入し $ go get github.com/garyburd/redigo/redis$ #{おこのみのエディタ} hello-go-redis.goとやって、以下のコードを入力します。 package main import "fmt" import "github.com/garyburd/redigo/redis" func main() { //INIT OMIT c, err …

超高速なKey-Value型DB「Redis」をOS X上で遊んでみた。

Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. RedisはいわゆるNonSQLの類で早いとの噂。 データをインメ…