それマグで!

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

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

ruby

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

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

もっとみんなヤフオクやろうよ。ヤフオクって出品者の性格が全面にでてて、面白いです。面倒くさがり屋、こだわり屋・・・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>…