読者です 読者をやめる 読者になる 読者になる

それマグで!

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

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

ruby

rubyのSequelをパパと使うサンプル(select/update/create/delete/unique/constrains)

DB にアクセスするなら Sequel が便利 データベースにアクセスしてデータを扱うには Sequel が便利。ActiveRecordもいいんだけどアレはめんどくさい。 SQLに極めて近い構造で余計なことはなにもなく便利でいい。 インストール gem install sequel DBに接続 D…

RMagick が入らない: gem install rmagick error

RMagick を久しぶりに使おうとしたら・・・ インストール gem install rmagick はい、エラー。extconf.rb ってほんと良く詰まるわ 色々調べたら、Rmagick が imagemagick 7 に非対応だった。 brew unlink imagemagick brew install imagemagick@6 brew link …

ruby の ri でgemのドキュメントが見られない

mac OSX の ri がgems パッケージを見てくれない。 ri はgems ファイルを探してくれないので、ri は使えないものだと思ってた。 takuya@~$ ri Sequel Nothing known about Sequel takuya@~$ OSX バンドルの ri が見てくれないだけだった。 takuya@~$ which r…

ruby ri のドキュメントを一括削除・一括インストール

ri かわいいよ ri ri 便利だよ。gem のインストールが遅いからと ri doc を消すことを推奨するエントリ多いけど ri 便利だよ? ri があるものを全部インストール ri の documentation があるものを全部インストール gem rdoc --all --ri ri のrdoc を全部消…

macのrbenv でインストールにコケたのでメモ

rbenv でruby 2.3.3 を入れようとしたらエラーになった。 takuya@Desktop$ CC=/usr/bin/gcc CONFIGURE_OPTS="--with-readline-dir=/usr/local/opt/readline --with-openssl-dir=/usr/local/opt/openssl" rbenv install 2.3.3 Downloading ruby-2.3.3.tar.bz2…

zipruby でファイルを経由せずに変数内だけでzip ファイルを作る

zip ruby には buffer モードが有る。 zipruby をそのまま使うと、一時ファイルを作って出力先にzip を用意しなくちゃいけないので、tmpfile などと組み合わせる必要がるけど、変数だけでメモリ内部でぱぱっと作れないのか調べた。 ruby-zip-in-memory-sampl…

ruby の URI で日本語を含むURIに対応する。

日本語URIを扱うという戦い ruby のURIで日本語を含む文字列が扱えなくなったので、何とかしないといけないとアレコレ模索した。 >> URI.parse 'http://example.com/あああ' URI::InvalidURIError: URI must be ascii only "http://example.com/\u{3042}\u{3…

rubyの置換でコールバックを使う。

JavaScript の String#replace はコールバックが使えて便利。 置換でコールバックの関数使えると便利なんですよね。 > a.replace(/a/, function(e){ console.log(e); return ''}) a 'bc' > js のこの仕様が結構過ぎで多用しまくっててクセになってた ruby で…

ruby のURI.parse が日本語GET引数や日本語UTF-8のパスに対応しなくなった

対応しなくなったんですよ。マジで。 日本語を含むとエラー >> URI.parse 'http://example.com/あああ' URI::InvalidURIError: URI must be ascii only "http://example.com/\u{3042}\u{3042}\u{3042}" from /Users/takuya/.rbenv/versions/2.2.3/lib/ruby/2…

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 コマンドでファイルを容易く暗号化出来る ファイルを暗号化するには、とてもシンプルにopenssl を使うのが楽ですよね openssl enc を使う openssl はサブコマンド方式なので、次のようになっており openssl サブコマンド オプション ファイルをAESで…

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"…

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で販売日を告知するから、定期的に見て下さいってこ…

オークファンのスクレーパー。

もっとみんなヤフオクやろうよ。ヤフオクって出品者の性格が全面にでてて、面白いです。面倒くさがり屋、こだわり屋・・・etc ヤフオクでこれいくらになるんだろう?と思った時に過去ログから調べてくれるのがオークファン。なんでヤフーはこの機能を提供し…

ruby で content-type判別する

Ruby でファイルタイプの判別をして、HTTPヘッダにContent-Typeを書き出したい時。 mime/types を使う 使い方 require 'mime/types’ これを使う。 使い方は以下のエントリに詳しいので割愛 MIME::Typesは、IANAに登録されているMIME型情報を元に、ファイルの…

hexファイルをバイナリに書き出しする。

pastebin に貼られたHexDumpをファイルに書き戻したかった。BCAS関連の例のあれです。 str = open("./test.txt").read str.gsub(/\n/, "") list = str.split.map{|e| e.hex} f = open("out.rar", 'w') list.each{|e| f.putc e} #バイナリ書き込みは putcを使…

処理が終わったらメールで通知したい。

お題のとおりです。処理が終わったら、Growlやメールで通知したい。ちょっと時間のかかる処理をやっていて、終わったら、メールで通知してほしい。ddとかね。 通知するアイディア パっと、思いつくのはこんな感じで使うこと。でもこれじゃダメなんだ。 $ ./c…

RubyでWEBサイトのスクリーンショットを作ってサムネイル化する。

Rubyプログラムからサイトをサムネイルのように表示するには、Windowsの場合RubyのWin32関連にそのものズバリなモジュールがある。 配布元 以前はRubyforgeにありました。いまは、githubにいどうして、rubygemsになっていました。 以前の配布先 http://rubyf…

Amazonのギフトカードの登録をするスクリプト

友人どうしでギフトカードのやり取りをしたときに、 Amazonのギフトカードを一気に登録する方法がないかどうか考えてみた。楽ちんに登録できたら複数枚登録できて便利。 #!/usr/bin/env ruby require 'openssl' OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::V…

rubyで可変関数的に、オブジェクトのメソッドを文字列で指定して呼び出す。

rubyのクラスメソッドを指定して呼び出す。 >> class Test>> end #=> nil >> class Test >> def hoge >> puts :hoge >> end >> end #=> nil >> t = Test.new #=> #<Test:0x10fdf3288> t.method("hoge").call hoge これで出来るのですね。callはrubyの()省略の副作用なので仕方</test:0x10fdf3288>…

rubyでinは予約語だから注意な

もしかしてinは予約語? for in で使う予約語だそうです。forループそのものを使わないrubyにおいて in がいつまでも予約語である必要があるのかというそんな思いはある。rubyでforループは書かない。eachの発明が偉大すぎた。 IO.pipeを使ってて気づいた >>…

RubyはIO.pipeを使えば、パイプを作ることが出来る

IO.pipeを使えば、パイプを作ることが出来る パイプを作ると楽しい。 o,i = IO.pipe 100.times{ i.puts :test } 100.times{ puts o.gets }これだけ Pipeを使うと何が便利か。スレッドをブロック出来る loop{ p o. gets }で i.puts を待つことが出来る。どう…

Cygwin環境にRVMを用意する。CygwinでもRVMでRuby使い分けたいよね。

Cygwinでもrvm使えると便利かも。と思いました。i7マシンだとビルドの遅さもそんなに気にならないし。 まず必須なところから。 rvmのインストール bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) ex…

Rvmを使ったRubyのインストール管理方法で便利なものをまとめ。

RVMは自分のユーザー環境に、独自のRuby環境を作ることができる。homebrewのように、/usr/localですらない。/home/takuya/.rvmに、バージョンが違うRubyを大量に飼育できるのです。 RVMを使えば、opensslなどの依存モジュールもRVM側だけで管理できる。 つま…

システムのRubyの更新:DebianのAPTでインストールされた物

debian の rubygemsパッケージを更新しようとしている。 あるシステムでは。できる限りAptで管理するべきかもしれないし あるシステムでは、ユーザーごとにRuby環境を作るべきかもしれない でもいろいろ考えるの面倒くさい。とりあえずシステムのrubygems環…