Bye Bye Moore

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

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

初期状態でネストしたHashを生成する場合のTips

nested_hash = Hash.new { |hash, key| hash[key] = Hash.new(&hash.default_proc) } とした上で hash = nested_hash[:x][:y][:z] = 123 とやると.... p nested_hash #=> {:x=>{:y=>{:z=>123}}} となって、ネストしたモノがちゃんとでてきます... ていうかHa…

Google SpreadSheetの表示形式オプションをつかって各国表記に対応する

昨日の記事でも扱ったように、 桁区切りは各国がローカルルールで動いているため見積書や発注書のフォーマットを作っても結構手がかかったりします。 Google SpreadSheetならば、その辺りをよろしくやる「表示形式オプション」というのがあります。公式ヘル…

数値の刻み方にも国際ルールがある

数値の桁区切りも国際度量会議なるもので定められています。 123 456.0 あるいは 123 456,0 が正しいのだそうです。と、一応決まってはいるものの...実際には各国各々の方式を使っています。 運用地図 Wikipediaから画像を引用すると、こんな感じになります…

git-stashの内容を確認する

Git

素のgit-stash-showならば git stash show spec/hoge.feature | 3 ++- spec/fuga.feature | 12 ++---------- spec/steps/page_steps.rb | 4 ++-- 3 files changed, 6 insertions(+), 13 deletions(-)と差分を見る事ができます。 pオプションをつけると $ git…

Kernel#warnメソッドでエラー出力

Kernel#warnは標準エラー出力(STDERR)に出力してくれるメソッドです。 Kernelのメソッドなので、putsと同じ感覚で使えます。 $ cat test.rb warn "error test" puts "stdio test" とした場合、 $ ruby test.rb > echo error test $ ruby truby test.rb 2> ec…

touchはご丁寧にも大文字小文字を一緒くたにして下さる

touchはご丁寧にも大文字小文字を一緒くたにして下さいます。 つまり... $ touch MKdata.rbとやれば、mkdata.rbを選んでくれます。ところが、横着して mkdata.rbとMKDATA.rbをtouchコマンドで作ろうとすると... $ touch mkdata.rb $ ls mkdata.rb $ touch MK…

findのregexオプションやiregexオプションで一寸入り組んだファイルを検索する

findには、正規表現を使って検索できるregexオプションがあります。 $ ls mkdata* mkdata.rb mkdata_fund.rb mkdata_funds_relation.rb mkdata_partner.rb mkdata_proffessor.rbこんなディレクトリがあったとしてregexをやると範囲を絞り込んで検索もできま…

Dateクラスもstepが使える

Dateクラスもstepで飛ばし飛ばし実行可能です。 ゴールにはDateクラスを渡してあげます。 Date.new(2014,1,1).step(Date.new(2014,1,5),1){|i| p i.jisx0301} #>> "H26.01.01" #>> ... #>> "H26.01.05" というわけで...いつぞやの記事から何度か扱っているN…

Object#sendで既存クラスにメソッドを追加したりエイリアスをはったりする

Object#send自体は、メソッドを呼び出す用法で以前使いました。 今回は既存クラスに既存のクラスに追加のメソッドを定義する方法を扱います。 具体的にはModule#define_methodをObject#sendします。 こんな感じです String.send(:define_method, :answer) { …

正オブジェクトの否定の否定はTrue

数値や文字列、selfといった正オブジェクトの否定の否定はTrueなのです! ...私も最初スクリプトを読んだ時は何事かと思いましたが... pryで挙動を見ると意味を理解していただけるかと... self #=> main !self #=> false !!self #=> true _人人人人人人人_…

MySQLをデータベースを指定して起動する

sql

毎回毎回起動してからロードしなくとも $ mysql -u root -p -D dbnameとすれば、DBを指定して起動できます。

(Jekyll | liquid )のテンプレートでforは回す範囲を指定できる

JekyllはGithub pagesで使えるブログ配信フレームワークです。 Jekyllはliquidを使って、コンテンツを生成します。 丁度erbやslimみたいなものです。さて、このliquidのforは何やらJavaScriptっぽいですが変なオプションを渡す事もできます。 たとえば、limt…

クラスの優先度の話

クラスは手前*1のものが優先されます。 というわけで...Stringメソッドを拡張して class Object def to_param to_s end end class TrueClass def to_param 42 end end class String def to_param self.upcase end end class NeoString < String def to_param…

配列から一定ルールを持った文字列を作りたい場合一寸便利な事

ゴチャゴチャ入り組んだ文字列の生成って面倒ですよね。 ここでRubyは既存クラスに対して楽にメソッドを定義できるという特性を利用すると スマートに書く事ができます*1 class String def to_param self.upcase end end ##...以下、使いそうなクラスについ…

Railsもコーディング規約を守っていないので程々が丁度良いのかもしれない(小並感

ワザマエを向上させるにはタツジンのコードを読むのが一番。 巷ではそう言われていますし、僕も同意見です。話はかわりまして...世の中にはコーディング規則というものがございます。 保守性の高いコードを書くためのお約束事を記載したものです。 例えば次…

active_support提供のin?メソッドとpresence_inメソッドが地味に使える

active_support提供のin?メソッドとpresence_inメソッドは地味に使える子です。まず、in?メソッドについて。 これはObjectを拡張し、渡したモノの中に自身(self)が入っていないか確認してくれます。 require 'active_support/core_ext' 1.in?(1..100) #=> tr…

mergeでhashをくっつける

Hashにはmergeというメソッドがあります。 コイツをつかえば、二つのhashを一本に統合することができます。 {hoge: 1, piyo: 2}.merge!({fuga: 3}) #=> {:hoge=>1, :piyo=>2, :fuga=>3} 同名keyがあった場合、上書きします。 この点に気をつけないと意図しな…

assert_valid_keysでhashが正常なものか確認する

assert_valid_keysはactive_support3.0以降に搭載されている hashの確認機能です。 def to_sentence(options = {}) options.assert_valid_keys(:words_connector, :two_words_connector, :last_word_connector, :locale) ... end てな感じで、オプションとし…

active_supportの配列も便利だった

文字の配列を渡すと...英文式に列記してくれます。 %w(a b c).to_sentence #=> "a, b, and c" 記法を指定する事で %w(a b c).to_sentence(words_connector: ' or ', last_word_connector: ' or at least ') #=> "a or b or at least c" %w(a b c).to_sentenc…

active_supportで数値の変換でも楽をする

active_supportのto_sも非常に使い手のある パーセンテージ 100.to_s(:percentage, precision: 2) #=> "100.00%" 100.to_s(:percentage, precision: 0) #=> "100%" 金額 100_000_000.to_s(:currency) #=> "$100,000,000.00" 通貨単位はnumber_to_currencyと…

( detect | find )は最初から順番に条件を見る

detectまたはfindは配列から一致する要素を捜索するメソッドです。検索はtrueになったところで打ち切ってくれます。 (1..9).to_a.detect{|i| p i == 5} #>> false #>> false #>> false #>> false #>> true #=> 5 使い方を工夫すると、こんな事もできます ## …

Rubyで次の月や月末の曜日を調べたいときはactive_supportにお願いしてみよう

Railsなどで良く見かけるActiveSupportさんは実はスゴイ子です。 これをつかうと、日付まわりで相当楽ができます。 require 'active_support/core_ext/date' してあげれば導入可能です 月末・月初まわり 2014年8月初日の曜日を調べるのもこの通り。 Dat…

Rangeもstepで飛ばし飛ばし実行できる

RangeもNumericのようにstepで飛ばし飛ばし実行できます。 eachで回してブロック内部でif判定しなくても良いんです。 最大値は範囲で指定しているので不要です。 (:a..:z).step(2){|i| p i} #>> :a #>> :c #>> ... #>> :u #>> :w #>> :y ひっくり返したい場…

railsで特定の[ファイル|行]だけspecを走らせる

railsでspecをやる場合 $ rake specがありますが...これ、全部実行してくれるので一寸不便です。 一個だけファイルをテストしたい場合はSPEC変数に設定したげます。 $ rake spec SPEC=spec/controllers/hoges_controller_spec.rb更に、特定ファイルの特定の…

each_char.each_with_indexなんて泥臭い事をせずとも...with_indexがあるんじゃよ

先日、ピザをつっつきながら談笑していたところ...こんなやりとりが@shuzo_kino 色々調べたのですが .each_with_indexなら.with_indexを使うほうが適切な感じがあるのですが如何に http://t.co/xe4NAiu1vi http://t.co/JmZir6DCGy— けんぼー@留年コンサルタ…

明治6年元日より前はJISX0301規格の保証対象外

明治6年元日をもって、西洋式の暦に移行しました。 その関係から...それ以前はJIS X0301の適用対象外です。 RubyのDateでも、この通り。 require 'date' Date.new(1873,1,1).jisx0301 => "M06.01.01" (Date.new(1873,1,1) - 1).jisx0301 => "1872-12-31" 記…

Dateライブラリを読み込むとできる便利な事

よくある形式 Date.new(2014,8,6).iso8601 #=> "2014-08-06" Date.new(2014,8,6).jisx0301 #=> "H26.08.06" 鬼門である年号の入れ替わりも... Date.new(1989,1,7).jisx0301 => "S64.01.07" > Date.new(1989,1,8).jisx0301 => "H01.01.08" この通りです。 そ…

GOPATHがないとか言われたら

GOPATHを設定していない場合、ライブラリの導入時にエラーがでます この場合 $ ls -dF ~/とやってhomeを確認した上で export GOPATH='/Users/shuzo/src'とでもやっておけば大丈夫です。 URLは驚いた事に何でもよいらしく $ go help gopath The Go path is us…

Comparebleを使って自前クラスにsortの挙動を実装する

今回はComparebleを使って自前クラスにsortの挙動を実装します。 正確には、sort内で判定に使われる""メソッドの挙動を定義する事で実現します。 class Book include Comparable attr_accessor :name, :genre def initialize(name, genre=nil) @name = name …

メソッドにハッシュを渡してオプションっぽく使う

メソッドにハッシュを渡してオプションっぽく使う事ができます。 def functionA(num, option = {}) puts "hoge!" if option.key? :hoge puts "fuga!!" if option.key? :fuga puts num end 結果は functionA(8, hoge: 'as', fuga: 'nya') # hoge! # fuga!! # …