それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ruby

ruby の暗黙的文字列変換 toString 的なものをするには

ruby って to_s が自動的に呼ばれない。 たとえば、Hashと文字列を結合しようとした時 h = { name:'takuya' } str = 'this obj is ' + h puts str Hash を String にする方法がないからエラー takuya@~/Desktop$ ruby test.rb test.rb:5:in `+': no implicit…

binding.pry で止まるのを止める。ループを一気に抜けて強制終了!

binding.pry 便利すぎて書きまくったら地獄だった。 pry で binding.pry を使いまくるのですが、binding.pryをループ中で使うと大変なことになる。 loop { binding.pry } 抜けられない・・・ each/mapなどの loop 中でpry すると抜けらないのですが、これを…

PDFをページ数指定で高速に読み込む。

PDF 読み込み遅んだよ! PDFってなんでこんなに無駄にページ数多いの。ってなりなす。PDFをMagickで読み込んだら遅いのなんのって。 require 'Rmagick' name = 'out.pdf' im = Magick::Image.read(name) # めっちゃ遅い im.esize #=> 300 PDFが枚数多いとも…

SlideShareを自動ブラウジングしてJPGからPDFを取出す。

以前作ったSlideShareの保存スクリプトを改良した Prawn使ってたので、どうしてもA4サイズになっちゃって困ってたので、JPEGをそのままPDFにすることにした #!/usr/bin/env ruby # require 'rmagick' require 'mechanize' require 'open-uri' require 'pry' …

ruby imageMacick RMagick で 画像からPDFを作る

rmagick で PDFを作るのがちょっと手間だったのでメモ ruby の imagemagick 実装である rmagick が有ります。 RMagick を使えば、magick 関連が使えるbindings で重宝する。 無論、Rubyからmagickを使うには、convert/mogrifyのシェル呼び出しで済むのだ。 …

prinft %s は文字列の長さが指定できる!

知らなかった。%s は%s しか使えないんだと思ってました。 縦幅が綺麗に揃った文字列を出力するにはどうすればいいか、ずっと気になっててruby はruby で各種関数、php はphp で各種関数を使ってたけど、良く考えたら printf で出来ることに気付いた Dir.glo…

ruby で URL をパースしてGET引数をHashに展開する。(日本語URI対応)

GET引数をハッシュに変えたい 実は、頻繁にやるんだけど、毎回適当に行っていて、これといった方法を決めてなかったので、ちゃんと方法を決めることにする。 require 'uri' module URI class << self alias :_parse :parse def parse a, original=false retu…

File.rename でハマった。

File.rename はデバイスを超えてrename 出来ない。 File.rename を何気なく使っていました。 require 'fileutils' するのが面倒くさいという、それだけの理由で。 そして今日は見事にドハマリした。cron でエラーが出ているので追いかけてみたら。なんとrena…

Mac の文字化けする日本語の文字(濁点)を一括して文字コード変換する

Mac OSXの濁点・半濁点問題。 濁点をどう扱うか問題。Mac OSXの HFS がUTF-8で保存するんだけど、濁点と文字を別に保存する。 ぜっけい→ せ゛っけい とくべつれっしゃ→とくへ゛つれっしゃ のように保存する。正しいとか悪いとか別にどうでもいいんだ。コレは…

rubyのspawnで 起動したプロセスを、終了待ちしたり、強制終了したり、親プロセスと一緒に殺す

ruby から外部コマンドを起動する spawn ruby で外部コマンドを呼び出すときに spawn を使って管理してみた。 spawn の特徴とか。 だいぶ昔に導入されたこの機能については、次のスライドが良いみたい。https://staff.aist.go.jp/tanaka-akira/pub/spawn-200…

Kernel.exec の第2引数を使った、コマンド実行のサンプル

exec の引数について 1つだけなら、問題ない。 Kernel.exec("ls") 2つになると・・・ Kernel.exec("ls -lt ") ただし、これはシェル経由の呼び出し。 3つになると・・・ Kernel.exec("ls -lt /") これもシェル経由の呼び出し シェル経由ってのは、sh に引…

watir をぱぱっと使うための、使い方まとめ。

できればMechanizeで動かしたいけど、Watirでブラウザのオートパイロットが楽だしねぇ。 なんでWatirなの? Q:Watir骨董品じゃん?Capybara-webkitで良いんじゃない? A1: Capybara 機能多すぎてスクレーピングには初期学習コストが高そう。 A2: Capybara は…

Selenium の基本的な使い方のサンプル集

ruby からSelenium をぱぱっと使う つかいかたは、とっても簡単。 require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome driver.close() 要素辿る系はちょっとコマンドタイプ量がおおくなり手順が多いので、Rubyなら watir を使うほうが…

bundlerを使い始めた時に詰まったので調べた。

bundle 最初に知ること bundler で出来ることを最初に知ることが必要 bunder はプロジェクトで使ってるgem を一覧するためのもの。 bundler は 必要なgem をインストールしてくれる bundler は、自作ライブラリのgem化が出来る bundler は、プロジェクトに必…

ruby で[] のブラケットが入った文字列を扱うととてもめんどくさい。

面倒くさいんですよ。 ファイル名に [] ブラケットが混ざるととても扱いが面倒くさい。 以下の様なファイル構造があるとする。 takuya@~/Desktop$ tree '[資料]授業資料' [資料]授業資料 └── a └── b たとえば、globする場合 >> Dir.glob '[資料]授業資料/*'…

ruby で mysql と sequel でぱぱっとアクセス

active record めんどくさいし めんどうだし、遅いんですよ。SQLわかってれば、ActiveRecordってメッド生やすの面倒だし、オブジェクト作ったり手続きが面倒だったんで。 ruby で mysql2 を使ったアクセス BestGem でダウンロード数を比較したらhttp://bestg…

openssl の暗号化と同等のrubyでの処理

openssl で暗号化すると便利なんだけど 暗号化をおこなったデータをそのままプログラムを経由して読みたいよね。やっぱり。 openssl で暗号化 → ruby で復号化 openssl enc -e -aes-256-cbc -salt -in test.json -out enc.json -pass password:my_pass これ…

OpenSSLで簡単にファイルを暗号化・復号化する(コマンド一発)

openssl コマンドでファイルを暗号化します。 ファイルを暗号化してパスワードをつけたい場合、一番お手軽なのはWindowsのExcelのパスワードですが、 一般のファイルで、ファイルにパスワードをつけたい場合は、opensslをコマンドから使うのが手軽です。 ope…

ruby 文字列(配列)を指定数で分割する

文字列を指定数で分割するには? 文字列を配列と考える。 文字列を正規表現でマッチする。 の2パターンがアプローチできる。 文字列を配列と考える場合 "914119904bf39f27a487d9240d3aab9b68732fc7".chars.each_slice(2).map(&:join).join(":") #=>"91:41:19…

Xpathまとめコマンドとその使用例・チートシートでカンタンに実験する

はじめに。 xpath 便利です。 Xpathの書式を学ぶにはトライ・アンド・エラーが1番です。Xpathをもっと使うのためには、手軽なツールが必要です。 手軽なツールはlibxmlについてくるxmlintです。xmllint についてはココに書きました→xmlを扱う xmllint コマ…

strftime の日付時刻の%フォーマット短縮形サンプル。

ruby の Time.now や Date.tody をフォーマットして整形するのもよく使うものってショートカットが用意されてるんじゃないのと思ってたら、date -I のようなショートカットが使えることがわかったのでメモ よく使うショートカット Time.now.strftime("%F %T"…

コマンドでtabやスペースを置換する方法

TABを置換してCSVを作りたいとしよう。TAB置換には何を使いますか? sed/awk/tr/perl/ruby 色々と考えられる。 一番楽なのは tr tr '\t' ',' tr コマンドで文字を置換するのが多分楽 takuya@atom:~$ sudo atq | tr '\t' ',' 806,Wed Aug 6 19:47:00 2014 a w…

require されるgem パッケージのフルパス(場所)を取得する

require した時のパッケージが実体どこにあるか知りたい時があります。 たとえば、ライブラリの本体パスを知ることでmanual やサンプルにアクセすることが可能だからです。 Gemのファイルの場所を調べよう。 取得方法 Gem::Specification.find_by_path( "gem…

ついついソースコードにパスワード書いちゃうのでPitを使う

Pitというキーバリューストアがあります。プログラムから使う。 保存先は ~/.pit ~/.pit にYMLファイルを保存してプロファイルを作ることが出来る 保存方法 保存は irb からパパっと。 require 'pit' Pit.set("http://www.yahoo.co.jp", { "username"=> "tak…

Emunrable#each に関数・メソッド・Procを渡す。

irb でチマチマ考えながら作ってると、each/mapなどのブロックの内部を修正したりが面倒になってくるので、簡単にやりたかった。 通常の Enumerable#each eachはブロック渡すように習います。 ["a","b","c"].each{|e| puts e} Procも渡せます。 もちろんProc…

Array#select(&:each_object_method)の簡略記法

配列に入った要素のメソッド順番に実行してselectの良い方法をyuku_tに教えてもらった。 &:method でオブジェクトのメソッドを指定できる ["a","b","c"].map(&:to_sym) #=> [:a, :b, :c] これは次のコードと同じ。 ["a","b","c"].map{|e| e.to_sym } 仕組み…

nokogiriでHTML/XMLの属性値の書き換え。

NokogiriでHTMLの属性は Element#attr(name) で取れる doc.search("img").first.attr("src") #=> /top.jpgと属性値の取得ができる。jquery っぽく node.attr(name,value)としたらエラーになる。 書き換えはElement#[name]= を使う。 doc.search("img").first…

rbenv 本体 のアップグレード

ruby と gem upgrade やっててふと思った、rbenv そのものアップグレードってどうやるんだろう OSX 版の場合 brew update brew upgrade rbenv ruby-buildこれだけ。楽ちんですね。brew からrbenv使うのが覚えること少なくて楽です。 または git から取ってき…

Mechanize でCookieの追加と削除

MechanizeでCookieを弄るときに必要になる。Cookieの制御 クッキーの追加 mech = Mechanize.new uri = URI.parse("http://www.example.com") cookie = Mechanize::Cookie.new('my_name', uri.host, {:value=>"takuya",:domain=>uri.host, :path=>"/"}) mech.…

WEBページの更新チェッカー

明日はいよいよ、iphone 5の発売日です。みなさん予約できましたか?私はヨドバシカメラで予約しました ヨドバシカメラはWEBで予約状況を通知しますって ヨドバシカメラは個別に電話くれないんですよ。WEBで販売日を告知するから、定期的に見て下さいってこ…