それマグで!

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

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

ruby

ランダムなひらがな文字列を生成する-ruby でひみつの質問

ひみつの質問の回答をジェネレーターで作る (1..10).each do puts (1..20).map{|e| (0x3042+Random.new.rand(0..82)).chr(Encoding::UTF_8)}.join end 実行サンプル ランダムな文字列を生成するのである。 /usr/bin/ruby himitu.rb ふぉゔゃまゅめゅいごなこ…

ruby でGmail(smtp) 経由でメールを送信する。TLS有効化

ruby でメールを送信する ruby からgmail を送信するには、 mail ライブラリだけでも出来るんだけど。 MIMEエンコードされたデータを受け取ってそのまま forward するには、もう少しいい方法がないかなと思って考えていた。 メールリレーの中間に入って、指…

rubyのプロセス起動で、smtpを使わずに、sendmail コマンドでメール送信するとカンタン

ubuntuシステムからメールを送りたい。 メールを送ろうとすると、SMTPをつかって、MIMEでエンコードして SMTP over TLSで接続してとあれこれ手順が必要。 その手順をrubygemでインストールして使い方を調べるのも面倒。 ローカルの postfix にリレーさせる。…

日本語(ローマ字)表記をひらがなにする。

日本語(ローマ字)表記をひらがなにしたい 「shatiku → しゃちく」 にしたい 本日の目的 ローマ字で表現された名前を変換したい。 hatarakusaibou のような名前を ’はたらくさいぼう’のようにひらがな表記に変えたい。 ローマ字を'ひらがな'に変換できれば…

ruby - mecab をインストールするときにエラーが出たのでメモ

mecab - ruby を使いたい 久しぶりにmecab をインストールしようとしたら・・・ bundle add mecab エラーになるんですね。 extconf.rb:12:in ``': No such file or directory - mecab-config mecab は extconf で外部ライブラリ(.h)を参照するので、 mecab…

文字の実体参照と実コードを変換する

文字の実体参照と実コード(文字)を変換する。 sed や nkf でもできる ruby なら出来るんだけど >>> escaped_data = b'\\x50\\x51' >>> escaped_data.decode("unicode_escape") python / nodejsだと、どううやるんだっけ。。。 参考資料 https://stackoverf…

手早くランダムな文字列を作成する

簡単に衝突しないような文字列をつくってファイルを保存するようなことをしたい。 OpenSSLを使えば割と楽 require 'openssl' str = [OpenSSL::Random.random_bytes(12)].pack("m*").delete("\n") puts str ワンライナーで ruby -r openssl -e 'print [OpenSS…

rubyの正規表現とscanでグローバルマッチで後方参照をサボりマッチ箇所を取り出す。

JSとか書いてたら、グローバルマッチをついつい、次のように書いてしまう。 "aa aaa aaaaa".match( /a+/g ) ああ、シンタックスエラー ruby 書くんだったらこう書くっポイ! "aa aaa aaaaa".scan( /a+/ ) #=> ["aa", "aaa", "aaaaa"] ruby でマッチした結果…

SeleniumのWebDriver(chrome)からCookieを取りだしてHTTP::CookieにしたりCurlで再利用する

Selenium のWebDriverからCookieを取り出したら Seleniumで画像をだけを取り出して保存したり、ファイルを取り出すのは不便だよね。 だけど、直接Curlで叩くのもCookieの問題でもっと不便だよね。 そこでSeleniumのCookieをCurlで使える形式やNetscape形式で…

クラス・メソッドをインスタンス内から呼び出す

ruby でクラスに所属するメソッドを呼び出す。 クラスに所属するStaticなメソッドを呼び出したときに、クラス名を直接指定するのは不便だよね。 class A def self.do puts :do end def say A.do # クラス名が・・・ end end a = A.new a.say self で参照する…

クラスの特異メソッドにモジュールのメソッドを取り込む

モジュールのメソッドを、クラスの特異メソッドに取り込む module で定義した、メソッドやローカル変数を、クラスの特異メソッドに取り込む 次のようにすると実現できる。 module S1 def sample puts :sample end end class A class << self include S1 end …

pry のEchoをオフにする

コピペなどでエコーが邪魔なとき _pry_.config.print = proc {} irb の場合は conf.echo = false こうすれば、長いStringのスクロールで死ななくて済む 一時的にオフにして、元に戻すなら _pry_.config._print = _pry_.config.print _pry_.config.print = pr…

Seleniumで印刷(print preview)を経てPDFを保存する方法

Selenium + chromedriverで 印刷プレビューにアクセスするのが面倒くさい Chromeを webdriverでアクセスすると iframe で作られた、印刷プレビューにアクセスするのがとてもめんどくさい。(セキュリティ関連のアレコレの制限をdisableオプションで取っ払え…

rubyのLoggerでログを出力する方法

ruby のロガーについて調べておきました ruby ではログを出すときに Logger が便利です。 require 'logger' logger = Logger.new(STDOUT) 標準出力に出す場合は STDOUT($stdout) 、標準エラー出力に出す場合は STDERR($strerr) を指定する。 ログを出す logg…

ruby で先月の月末を求める

先月の月末を求めるには まず、月初の01日を作ります。 Date.parse(Date.today.strftime('%Y-%m-01')).to_s 今月の1日を作る方法を知ってると後はなんでも応用が効くよね。 次に−1日する (Date.parse(Date.today.strftime('%Y-%m-01'))-1).to_s 簡単でし…

selenium で parital text/ link_text を指定すれば楽ができる!!!!

selenium でリンクの指定が楽になった。 ドキュメントを読んでたら、良いものを見つけた 今までのやり方。 driver.find_element(:xpath, "//a[contains(./text(), 'ログイン')]") driver.find_element(:xpath, "//a[./text()='ログイン']") 今回知ったやり方…

rubyで実行中のユーザー名(id)を取得したい

ruby でスクリプトを実行したのは誰? スクリプトの実行ユーザーを知りたい。root以外で動かされるとパーミッションがあとで面倒なので、root 以外が起動しようとすると拒否したいってことが、わりとあるわけで。 実行ユーザーIDを知るには Process.euid #=>…

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

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

RMagick が入らない: gem install rmagick error:Mac OS X/brew に rmagickをインストールする決定版

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