Bye Bye Moore

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

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

odやhexdumpで内容をバイナリダンプしてみる

バイナリダンプは指定したファイル・標準出力の結果を16進数として吐き出すものです。 メモリの状態やバイナリファイルのヘッダを確認するときに重宝します。 組込み業界で仕事をしていた頃よく使いました(遠い目 odコマンド まずはodコマンドから。 タイプ…

cutと似たコマンドcolrmは不要な部分のみ消し去る

$ colrm {削除をはじめる番号} {削除を終える番号}といった形でつかいます。cutでやると $ for i in {1..9}; do printf $i; done | cut -b 1 -b 5-9 156789となるところ、colrmだと $ for i in {1..9}; do printf $i; done | colrm 2 4 156789となります。残…

link_to_ifという便利な子について

<%= link_to_if(user_signed_in?, "編集", edit_hoge_path(@fund), class: 'btn') %> とやれば、deviceでサインインしている場合*1リンクを表示、 なければただの文字列を表示します。非ログイン時に何も表示したくない場合は空のブロックを渡します。 <%= l…

sendメソッドでオブジェクトの付属メソッドを実行できる

Objectクラスに付属しているsendメソッドは、引数に文字列かシンボルを与えてやると同名のメソッドを引っ張り出してくれる凄い子です。 %w(pop push slice).send(:to_s) #=> "[\"pop\", \"push\", \"slice\"]" 引数つきで実行する事も当然可能です。 %w(pop …

link_toのアレコレ

link_toとやる場合、よくある記法だと <%= link_to "新規作成", :controller => "pages", :action => "new" %> ですが、railsは賢い子なので <%= link_to "新規作成", new_page_path %> とやってあげると、pageコントローラーのnewメソッドを呼び出してくれ…

keep_ifで配列を掃除する

keep_ifメソッドはブロック内の条件に一致した内容を抽出してくれるメソッドです。 似たものに一致した内容を削除するdelete_ifがあります。 使い方 > (1..100).to_a.keep_if {|a| a % 9 == 0} => [9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99] > ('a'..'z')…

rawでerb系でタグを含んだ文字列をHTMLとして出力させる

rawでerb系でタグを含んだ文字列をHTMLとして出力させるたとえば以前紹介したdiffyのようにhtml形式で出力するものも余計な細工をせずそのまま出力できます。 ## controller @diff = Diffy::Diff.new("alpha\nbeta","alpha\ngamma").to_s(:html_simple) ## s…

bannerコマンドやfigletコマンドでアスキーアートを生成する

bannerというコマンドを使うと、 昔懐かしな電光掲示板風のAsciiアートを標準出力に表示できます。 $ banner -w 40 "as you like" ### ####### ## ######### #### ## ## # ## # ## # ## # ## ############### ############## # #### ## #### ###### ## #####…

Diffy : RubyでStringクラスのdiffを扱うGem

diffyはRubyのStringクラスのdiffを扱うGemです。出力パターンも相当に頑張ってます。 文字 >> puts Diffy::Diff.new("alpha\nbeta","alpha\ngumma").to_s alpha -beta \ No newline at end of file +gumma \ No newline at end of file シンプルなhtml出力 …

Gitで特定ファイルの変更履歴をみる

Git

"git log -p"は変更履歴つきで編集ログを見せてくれるコマンドです。 これに具体的なファイル名を指定してあげれば、特定ファイルのみの変更履歴を確認することができます。 $ git log -p app/view/hoge/show.html.erbとやれば commit xxxxxxxxxxxxxxxxxxxxx…

paper_trailで扱うカラムを限定したい場合

Modelの差分を残してくれる便利なgem、paper_trailですがデフォルトだと何でも保存対象にしてしまいます。 特定のカラムだけ保存したい場合は:onlyオプション付きで呼び出します。 has_paper_trail :only => [:name] カラムの内容に動的に対応したい場合はPr…

mroongaで論理積・論理和の検索条件を扱う(Boolean mode編)

mroongaで論理積・論理和の検索条件を扱う - Bye Bye Mooreではmroonga_commandを使う方法を採用しました。 今回はMySQLの全文検索方式に倣ってBoolean modeによる論理積を実装してみます。当該modelの末尾あたりに scope :search_with, ->(name) { where(%Q…

rails cをリロードする

rails cを使うと、わざわざブラウザを使わなくともメソッドの挙動lを検証をする事ができます。 ただ、実行中にmodelを弄っても反映してくれません。弄った結果をすぐ反映したい場合は >> reload! とやればよいです。 これで毎度毎度rails cとやらずとも同じ…

mroongaで前方検索と後方検索

5/20追記:mroonga_command以外のバージョンも作りました mroongaで論理積・論理和の検索条件を扱う(Boolean mode編) - Bye Bye Moore 前回に引き続きmroongaの検索条件について。 前方一致(??) 本来なら、その言葉から始まる言葉に一致するのですが... …

mroongaで論理積・論理和の検索条件を扱う(mroonga_command編)

mroongaで論理を扱う場合、mroonga_commandでラッピングしてしまうのが手っ取りバ早そうです。 ...もっとスマートな方法をご存知の方はお気軽にトマホークを御投擲下さい(震え声 AND(論理積)検索 両方一致のAND検索 mysql> select mroonga_command("select …

Google Driveでファイルタイプを指定して探す

基本的にGmailと同じくto:やfrom:、before:なんかがつかえます。 それに加えて、ファイルタイプの指定も可能です type: ドキュメントの種類で検索します。 指定できる種類は、 document spreadsheet presentation drawing image video image_or_video pdf te…

テキストデータの行数や文字数をカウントしたい場合はwcコマンドを使う

wcは"word, line, character, and byte count"との説明通り、文字数や行数を数えるコマンドです。 原則オプションと組み合わせて使います。 -m The number of characters in each input file is written to the standard output. If the current locale does…

git管理下のディレクトリにあるRubyスクリプトの総行数を調べる

まず、git ls-filesというコマンドを使うとファイル名一覧を出す事が出来ます。 $ git ls-files .gitignore .magnum.yml .rspec Gemfile README.rdoc Rakefile app/assets/images/.keep app/assets/javascripts/application.js app/assets/javascripts/boots…

rake db:resetではschema.rbから復旧が行われる

今迄無批判に $ rake db:migrate:reset $ rake db:resetとしていました。 これでDBを弄りつつseedを配置していた訳ですが... Engineをmroongaに設定したところ、今迄の手法が通じませんでした。 というのも、db:resetは 削除=>作成=>schema.rbから復旧と…

ActiveRecordのmigration時にSQLのエンジンを選択する

たとえば、検索エンジンにmroongaを追加したい場合は 既存のdb/migrationの当該ファイルにoptions: "ENGINE = mroonga"を追加します class CreateProfessors < ActiveRecord::Migration def change create_table :professors ,options: "ENGINE = mroonga" d…

Rubyでディレクトリ検索したいなら標準添付のFindライブラリを使った方が幸せになれるかもしれない。

FindライブラリはRubyに標準装備されている検索用コマンドです。 `find ...`とかやらなくとも良いのです。 その上、標準添付なのでプラットフォームの差分を吸収してくれるのが良いです。記法はfind(1)に則るので、フツーに使えます。 $ ruby -rfind -e 'Fin…

brew editはどこを見ているのか知る

mac

brew editはRubyで記述されたインストール手法を編集することが出来るコマンドです。 単に確認したいだけであればbrew catという奴もあります。また、 $ brew log #{アプリ名}とやれば、Gitで管理されたアプリの編集ログを見ることもできます。 log [git-log…

一枚のネットワークカードで複数のIPアドレスを扱う方法

Linux環境下のネットワークカードでは仮想的に複数のアドレスを運用(エイリアス方式)する事ができます。 極力NICは分けておいたほうが良いのですが、「仮アドレスの試験」や「新環境への移行期間」では有効に使う事ができます。 具体的な手法 今回は アド…

「Can't initialize function 'mroonga_command'」と出たらエンジンがちゃんとmroongaになっていない

二日連続でgroongaの失敗記事です( mysql> select mroonga_command("tokenize TokenMecab 'alpha'"); とやって ERROR1123(HY000) failed to open database: syscall error Can't initialize function 'mroonga_command' 等々が出たら、エンジンを正常にmroo…

「[tokenize] unknown tokenizer: <TokenMecab>」と出たら素直にgroongaのビルドからやり直しませう

groonga導入済の環境で、mroongaをmecab付きで導入しようとしたところ、ダメっぽい感じでした。 $ groonga > register normalizers/mysql [[-3,1399468383.43181,0.00655889511108398,"cannot find plugin file: </usr/local/Cellar/groonga/4.0.1/lib/groonga/plugins/normalizers/mysql.so>",[["grn_plugin_register","plugin.c",507]]…

cutコマンドを使って羅列型のテキストデータを簡単に切り出す

前回の例と同様、サンプルデータsampledata.logを用意します。 data [alpha] data [beta] data [gamma] data [delta] deta [epsilon] 切り出す dでカラムを切り出す記号を選び、-f NUMで何番目を抽出するか決めます $ cut -d '[' -f2 sampledata.log | cut -…

trコマンドで不要文字を抹殺したり小文字を大文字に置換したり。

YAMLデータをBashスクリプトのみでパースする - Bye Bye Mooreなどで扱ったtrコマンドについて理解が深まったのでメモ。仮に、sampledata.logとして以下のようなテキストデータがあったとします。 $ cat sampledata.log data [alpha] data [beta] data [gamm…

gem listのオプションを使う

導入済みなgemの名前だけ欲しい場合ってありますよね。 awkやrubyのワンライナーで片付けるのも手ですが、 gem listのオプションを使えば余計な手間はかかりません。 $ gem list --no-versionsとすると *** LOCAL GEMS *** actionmailer actionpack actionvi…

既存のrailsプロジェクトにgroongaを追加する

既存のrailsプロジェクトにgroongaを追加する方法です。 今回はprofessorsというモデルのnameカラムに対して全文検索をかけるシステムを想定しています。 gem 'rroonga' と追記し $ bundle installして導入します。 コンパイルが入るので若干時間が掛かりま…

正規表現のマッチ情報はlast_matchメソッドを使うようにする

正規表現のパターン一致を引っ張り出す時、どうしてますか? 私は$1を使う軟弱ものです。 /(as).*(you).*(like)/.match('as you like') #=> #<MatchData "as you like" 1:"as" 2:"you" 3:"like"> > $1 #=> "as" > $2 #=> "you" > $3 #=> "like" > $4 #=> nil 毎度お馴染みコーディング規則からすると、 上のよ</matchdata>…