Bye Bye Moore

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

2015-07-01から1ヶ月間の記事一覧

XPathで特定の条件に合致した親を持つ要素を抽出する

XPathでは、特定の条件に合致した親を持つ要素を抽出する事ができます。 たとえば、aタグを持つspanみたいな感じです。 実際のところ List of time zones by country - Wikipedia, the free encyclopediaから、 国名とタイトルの関係だけ取りたいとします。…

Xpathで同名要素のN番目を抽出する

Xpathで同名要素のN番目を抽出する場合…… たとえば、3番目のtdを引っ張る場合 doc.xpath("//table//tr//td[3]") といった感じで、配列風に数値をわたします。 0開始じゃないので注意です。

Postgresには、検証用に世界の国名が記載されたSQLファイルが用意されている

Postgresには、検証用に世界の国名が記載されたSQLファイルが用意されています。 同様のものは、実はMySQLにもあったりします。 また、有志がJSONやXML、YAMLにコンバートできるものを配布しってたりもします。 導入法 pgFoundry: Sample Databases: Project…

世界の現在時刻をNokogiriを使って把握する

仕事柄、海外との取引が多いので先方の時間が知りたくなるケースが多々有ります。 今回は、Ruby製の優秀なパーサーNokogiriと世界の時間を調べるWEBサイトTimeAndDateを併用してアレコレしてみようと思います。とりあえず実験として $ curl http://www.timea…

Array#flattenやHash#flattenでは平坦化の深さを指定する事ができる

Array#flattenやHash#flattenでは平坦化の深さを指定する事ができます。 数値が大きくなるほど、より深いレベルまで平坦化されます。 無指定ならば最大階層までやってくれます。 a = [1,2,[3,[4,5,[6,7,[8,9]]]]] a.flatten #=> [1, 2, 3, 4, 5, 6, 7, 8, 9]…

【読書メモ】伝わるデザインの基本

伝わるデザインの基本 よい資料を作るためのレイアウトのルール作者: 高橋佑磨,片山なつ出版社/メーカー: 技術評論社発売日: 2014/07/03メディア: 大型本この商品を含むブログ (8件) を見る我々エンジニャーにとって、デザインという奴は中々馴染みがない分…

【イベントログ】ゆるふわRuby勉強会Chofu.rbを開催しました

地元調布でゆるふわRuby勉強会Chofu.rbを開催しました。ゆるふわRuby勉強会Chofu.rb(おためし版) (2015/07/25 17:00〜)connpass.com当日は私も含め7名の参加。 会場にしていた建物のプロジェクターが壊れてた等々、gdgd進行でしたが ヘルプに入っていただ…

livescript基礎文法最速マスターという記事を書きました

社内ブログにlivescript基礎文法最速最速マスターという記事を書きました。LiveScript基礎文法最速マスター - MTMシステムズ Tech Blogblog.mtmsystems.jp基礎文法最速マスターのネタが流行ってから5年も経ったんですねぇ(遠い目

Dateクラスでも順繰りの呼び出しが使える

Dateクラスにも、downtoメソッドがあるので カレンダーを出すだのといった用途で活用可能です。 Date.today.downto(Date.today.prev_month) {|i| puts "#{i.month}/#{i.day}"} #7/23 # ... #6/23 参考もと class Date (Ruby 2.2.0)

Date#<<はNヶ月前の日付を返す

標準ライブラリDateにて提供されるDate#メソッドです。 Date.today << 2 #<Date: 2015-05-22 ((2457165j,0s,0n),+0s,2299161j)> ぱっと見、対象が月なのか日なのかわかりませんね。同じ挙動をするメソッドにDate#prev_monthがあります。 どうしても必要なときは、こっちを使うと良いでしょう。 Date.today.prev_</date:>…

Dateライブラリで末日を指定する場合、日付を-1にすればよい

月の末尾を調べたい場合……ActiveSupportを使うのも手ですが、 実は標準添付のDateライブラリで普通に用を為します。 ためしに、2月の末日を調べてみると…… Date.new(2015,2,-1) #=> #<Date: 2015-02-28 ((2457082j,0s,0n),+0s,2299161j)> Date.new(2014,2,-1) #=> #<Date: 2014-02-28 ((2456717j,0s,0n),+0s,2299161j)> Date.new(2013,2,-1) #=> #</date:></date:>

正負を返すメソッドを記述する際の文化圏間の違いについて

ちょっと面白かったのでメモ。Ruby文化圏で正負を返すメソッドでは「?」で終わります。 一方、Lisp文化圏ではpで終わるようですつまり、「ゼロか否か」を判定する処理は Rubyでは 0.zero? #=> true Common LispやEmacs Lispでは (zerop 0) t となるわけです…

Structの拡張版OpenStructは要素の削除や追加ができる

OpenStructは標準添付ライブラリです。 基本はStructですがパラメータの追加や削除が可能です。 また、Structと同様にメソッドを追加する事もできます。 require 'ostruct' ab = OpenStruct.new ab.foo = 25 p ab.foo # => 25 ab.bar = 2 p ab.bar # => 2 p …

【イベントレポ】第30回Creators MeetUp

第30回Creators MeetUp (2015/07/18 15:00〜)cmu.connpass.com 第30回Creators MeetUpに参加してきました。 今回の場所は月島は株式会社メンバーズ様のオフィスです。 会場の雰囲気はこんな感じ。 ……普段、大学のサークル部屋みたいなトコで仕事をしてる身に…

魔術めいた組み込み変数の可読性をあげる標準ライブラリ"English"

標準ライブラリ"English"を使うと、 Perl由来の魔術めいた組み込み変数の可読性をあげる事ができます。 例えば、次の二つは同じ意味です。 $LAST_MATCH_INFO $~ ライブラリを読む必要はありますが、 速度に決定的違いを出す訳でもないので積極的に使ってきま…

Structクラスの値をEnumratorでぶん回したい時はStruct#each_pairを使う

Structクラスの値をEnumratorでぶん回したい時はStruct#each_pairを使うとよいです。 挙動はHashと同じなので気にせず使えます。 Point = Struct.new(:x,:y) a = Point.new(20,22) a.each_pair {|k, v| puts "#{k.inspect} => #{v}"} #>> :x => 20 #>> :y =>…

標準出力に出したzipやgz系の圧縮ファイルをパイプで処理したい場合、funzipが使える

一応、標準出力にもzipやgz系の圧縮ファイルを表示する事はできるのですが…… $ cat sample.txt )r?Usample.txt ??,V??J???t.????T????T??[Qb^?BUZfq??*?????Te???%?9?$??qq2?a?t……まぁ、あたり前のように解読不能です。 これを解答するためunzipに渡しても………

sedで複数行を一行にまとめたい場合、「N」が使えるかも?

文章の整形なんかで何かと便利なsed。 よくありがちなパターンは、予め登録されてたりするので便利に使わせてもらいましょう。 $ cat sample.txt This is my dog, whose name is Frank. This is my fish, whose name is George. This is my goat, whose name…

OS Xのdateコマンドをぶん投げたくなったら、coreutilを入れて上書きしてしまうのも手

mac

皆様よくご存知の通り、OS Xのdateコマンドは独特です $ date 2015年 7月14日 火曜日 23時49分50秒 JST一部オプションも使えないときました。 $ date -d "yesterday" usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt…

三項演算子など使わずともOR演算子使えば済むケースがある

三項演算子など使わずともOR演算子使えば済むケースがあります。あらかじめ変数の実体を持たせておく必要がありますが、 以下のような感じで使えます。 mark = nil (mark || "") #>> "" これを使うと、 フラグが立っていた場合は所定の文字を、そうでない場…

injectやmapのブロックの中が複雑になってきたら、素直にメソッドチェイン式に改めた方がいいかも

たとえば、次のようなコードがあったとします。 result = data.inject([]) {|a,c| ((c.x) > 10) ? a << c.y : a } ブロックの中がグチャグチャしてますね。 こういう時は、素直に result2 = data.select {|e| e.x > 10}.map(&:y) その上、この形式ならlazyを…

Structにはメソッドを持たせる事ができる

Structクラスを継承してはいけない(戒め - Bye Bye Mooreshuzo-kino.hateblo.jp でシレッと書きましたが、Structにはメソッドを与える事ができます。これを使うと、 「そのクラス内でしか使わないけど、色々値の扱いが入り組んで面倒なデータ構造」を調子よ…

Kernel#Arrayという奇妙なメソッドの挙動について

Arrayに引数を取ると配列として返してくれる...けどto_aと挙動が違わない - Bye Bye Mooreshuzo-kino.hateblo.jp の続きです。まず、ArrayはKernelのメソッドでした。 Array.newのエイリアスとか、そういった類のものではありません。 公式では 引数を配列(A…

Fixnum#~で数値の否定を返す

Fixnum#~は数値の否定を返すメソッドです。実際に使うと、こんな感じ ~3 #=> -4 ~-4 #=> 3 これは、 0b111 #=> 7 3 - 0b111 #=> -4 てな感じで読み替える事もできます。 参考もと instance method Fixnum#~ rubinius/time.rb at master · rubinius/rubinius ·…

オートチャージには5万円の上限がある

何かと便利なFeliCaのオートチャージ機能。都心なら移動も含めて財布レスで1日過ごす事も可能です。紀伊国屋とかだと本も買えますし、昼飯も駅ビルでピッとするだけで楽チン。が、そんな調子でなんでもFeliCaで払いまくると上限5万円の枠に引っかかってオー…

【イベントレポ】総務・人事ワールド2015に行ってきました

総務・人事ワールド2015に行ってきました 全体の印象 オフィス支援という事もあってか、 普段行っている技術系展示会とは相当印象が異なりました。 というかですね、興味ないって言ってるのに数ブロック先まで付いてきて、 挙句舌打ちするアレ気なブース…

標準ライブラリ「set」で集合を扱う(その4)

まさか、このネタの続きを書く事になるとは思いませんでした…… Ruby標準添付ライブラリのSetは、集合を扱う際に便利な奴です。これ、実は重複データを取り扱う際に結構有用だったりするそうです。 実際のところ 配列で重複があるデータを取り扱う場合、私で…

数値オブジェクトも凍結されているので破壊的メソッドは適用できない

以前、こんな記事を書きました。<調査中>Integerにinstance_evalによるメソッド追加は不可能?? - Bye Bye Mooreshuzo-kino.hateblo.jpすると、 けんぼー (id:kemboorg)さんから、 instance_evalはオブジェクトの破壊的変更に当たるからではないでしょうか…

<=>メソッドはクラス比較にも使える

Rubinusのコードを見てたら発見したのでメモ。 通常、メソッドは比較に使うメソッドです。 これを異なるクラス間でつかった場合……nilを返します。 1 <=> "a" # >> nil 1 <=> (1..9) # >> nil この特性を生かして class Range include Enumerable #略 def cov…

Ruby標準モジュール"Forwardable"でコアクラスのオレオレ式改造をしてみる

Ruby標準モジュール"Forwardable"をつかうと、 移譲というテクニックが使えるようになります。 これを生かすと元あるコアクラスをオレオレ式に拡張して扱う事ができるわけです。 実際のところ Stringを土台とする String#upcase、String#nextは流用 String#d…