Ruby

Watirを使う際にChromeDriverを自動的にインストールさせるrubygem webdrivers

自動化したいよね ChromeDriver は Chrome のバージョンと合わせておく必要があり、合わないとエラーが出ます。しかし Chrome はしょっちゅう更新されていきますし、しかもタイミングによっては(なぜか)ChromeDriver のほうが先に更新されてしまって結果と…

Rubyで末尾に=が付くメソッドは「属性参照」と呼ぶらしい(英語だとAssignment Methods)

ruby で =()がついたメソッドを理解する - Qiita のコメントを書いたときに Ruby のリファレンスマニュアルを見直していました。Ruby 的にはどうやら「属性参照」と呼ぶらしいです(仮称のようにも感じますが)。ちなみに英語マニュアルだと Assignment Meth…

gogakuondemand.rbをv1804_1に更新

すみません、今回はデバッグのための更新です。NHKのせいではありません…。 それから、基礎英語0のストリーミングサイトが他の番組と若干異なっております。そのため、もしかすると5月に再度更新するかもしれません。 と書いておりましたが、5月に変わったら…

gogakuondemand.rbをv1804に更新

NHK大好きな[twitter:@riocampos]です。 毎度おなじみ gogakuondemand.rb を更新しました。 今回は年度変更に伴う番組変更への対応を行いました。具体的には 短期集中!3か月英会話 削除 基礎英語0 追加 遠山顕の英会話楽習 追加 以上の3番組への対応です。…

WatirでHeadless Chromeを使うまでのメモ

サーバ的環境から JavaScript が必要なブラウザアクセスする場合はいままでずっと PhantomJS を使ってきたわけですが、残念ながら PhantomJS は2017年6月ごろで開発を終了したそうです*1。 ということで遅まきながら Headless Chrome を使ってみることにしま…

NHKラジオニュースサイトの音声ファイルのありか

最近 Amazon Echo Dot を入手して遊んでいる @riocampos です。 Amazon Echoでニュースを聞く Echo Dot へ向かって「Alexa、ニュース」と言うと NHK ラジオニュースの最新ニュースを流し、そのあとに天気予報を喋ってくれます。便利です。 さて、そのニュー…

Web上の画像を付けてツイート(1つ・複数)Twitter gemバージョン6.2.0以降の場合

Twitter gem バージョン6.2.0は去る2017年の11/8リリースなのですが、昨日までこの変更に気付いてませんでした(ずっと6.1.0以前を使ってたのさ…)。 さて、以前の記事(Web上の画像を付けてツイート(1つ・複数) - 別館 子子子子子子(ねこのここねこ))…

gogakuondemand.rbをv1704_3に更新

NHK大好きな[twitter:@riocampos]です。 毎度おなじみ gogakuondemand.rb を更新しました。 今回の更新は「短期集中!3か月英会話」のストリーミングURL変更への対応です。 このコメントを頂いたので更新しました。 □ tamatama 2017/10/30 11:37 短期集中3…

gogakuondemand.rbをv1704_2に更新

NHK大好きな[twitter:@riocampos]です。 毎度おなじみ gogakuondemand.rb を更新しました。 今回の更新は「短期集中!3か月英会話」のストリーミングURL変更への対応です。 このコメントを頂いたので更新しました。 □ tama 2017/07/17 13:33 短期集中3か月…

らじる★らじる聴き逃しサービスをダウンロードするための手始め:JSONファイルのありか

おことわり ここに記載した情報は、私的利用に限定した使用に限ります*1。著作権侵害は禁じます。 さて本編 今日の10時から、らじる★らじる聴き逃しサービス*2が充実しました。 聴き逃し番組を探す | NHKラジオ らじる★らじる いままでもラジオ第2の番組を中…

gogakuondemand.rbをv1704に更新

NHK大好きな[twitter:@riocampos]です。 gogakuondemand.rb を久しぶりに更新しました。バージョン名は今回から年度と月名にしました。 今回の更新はNHK語学講座の変更に伴う対応です。 追加講座 ボキャブライダー(注意:v1704_1にて対応) 高校生からはじ…

RMagickメモ

なんとなく書くことにしました。 画像は8x8 bit の画像ファイル z.png(32倍に拡大してます)↓ を使います。 読み込み > require 'RMagick' > img_z = Magick::ImageList.new('z.png') > # または img_z = Magick::Image.read('z.png') ImageとImageListの違…

Threadの同時実行数を指定するには

Queue を使えば簡単です。また SizedQueue でもできます。 シンプルに 標準添付ライブラリのQueueを使えばこれらの処理がサクッと実装できちゃいます。 require 'thread' locks = Queue.new 2.times { locks.push :lock } Array.new(10) do |i| Thread.new d…

ラジ録2で録った「らじる★らじる」flvファイルをまとめてmp3に変換する その2

ラジ録2で録った「らじる★らじる」flvファイルをまとめてmp3に変換する - 別館 子子子子子子(ねこのここねこ) というのを3年ほど前に書きましたが、そのまま放置していました。 ふと、サーバに入っているflvファイルをまとめて変換してしまおう、と思い立…

元ファイルの変更日/追加日を別ファイルにコピー

某ソフトでNHKラジオを録音しているのだけど、一時期だけ設定ミスをして番組後も5時間ほど録音してしまったことが。ということで15分(+30秒)に切る Ruby スクリプトを書いてみた。 そのときに、切り取った後のファイルの変更日/追加日を元のファイルと同じ…

Anemone gemでのクロールメモ

Web サイトをクロールしたいことが出てきたので、 Anemone で行うのが基本なのだろうと思い、少し調べていました。 するとRubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例作者: 佐々木拓郎,るびきち出版社/メーカー: SBクリエイティブ発売日…

Arrayを返すEnumerableモジュールのメソッドはeach_with_objectで書ける(while系を除く)

ということに気付いたのでメモ*1。 これを頭に入れておくと「ああ、これ select に似てるのに、返値にレシーバから以外の要素を入れたいから select じゃ書けない…>_each_with_object で書けば良いんだ」とササっと書ける(のではないかなと思った)。 ちな…

Pathnameクラスでファイル情報を得るには

Pathname#stat メソッドを使います。 File::Stat クラスを返します。 > file = Pathname.new('test.mp4') => #<Pathname:test.mp4> > file.stat => #</pathname:test.mp4>

IO.popenメソッドで標準エラー出力を取得するには

結論:IO.popenで標準エラー出力を取得するオプション ぐだぐだ長いので、求めているものを先に示しておきます。 IO.popen(command, :err => [:child, :out]) IO.popen(command, :err => [:child, :out]) { |pipe| … } 前置き まず先日書いた記事の引用を(…

Herokuのappを二つ使って交互起動で常時運用(Rack版)

この記事は2016/5/31までの内容です。 Herokuのappを二つ使って交互起動で常時運用(Sinatra版) - 別館 子子子子子子(ねこのここねこ) では Sinatra で交互起動させましたが、大したこともしてないので Sinatra を動かすほどでもない気がしてきました。と…

Herokuのappを二つ使って交互起動で常時運用(Sinatra版)

この記事は2016/5/31までの内容です。 Twitter bot の運用に heroku を使っている [twitter:@riocampos] です。Web app はあまり使っていません。 Heroku free dynoがとうとう24x7じゃなくなったorz - Qiita でも記載しましたが、 Free dyno だと18時間起動/…

Sinatra内でloopなど定期作業を行うには

単純に Thread.start でスレッドを分けるんですけどね。重要なのはいつものイディオムだと問題が生じる、ということ。 ひとまず結論を先に示します。 クラシックスタイル require 'sinatra' Thread.start do loop do puts Time.now sleep 3 end end get '/up…

urlが存在するか確認するメソッド

元は!url.nil? && !url.empty?だけだったメソッドに、応答コードが200かどうかの部分を追加。 require 'net/http' def url_exist?(url) code = ->(url) { uri = URI.parse(url) Net::HTTP.start(uri.host, uri.port) { |http| http.get(uri.path) }.code } !…

PhantomJSとSelenium/Watirを使っているherokuでgit push heroku masterするとConnection refusedエラーが出てウザイ

こんな感じのエラーが出てログを圧迫する Cycling のときや push のときに Connection refused - connect(2) for "127.0.0.1" port 8910 (Errno::ECONNREFUSED) というエラーが出ます(なおポート番号は違う場合もあります)。 Nov 29 22:29:40 app-test her…

Watirでクリック後の更新を待つ

Watir-Webdriverでリンクなどをクリックした後に、更新されるのを sleep して待っていたのですが、ちゃんと更新を確認出来るメソッドがありました(当然ですよね ブロック内が真/偽になるまで待機する、というメソッドです。 (なお PhantomJS で ReactJS の…

外部処理に同期するための上限回数あり繰り返しメソッド

タイトル通りですね。処理を外部処理にしておけば同期が可能になります。処理を実行し、その結果を判断する、というブロックをメソッドに渡します。まず pre_sleep 秒だけスリープして遅延し、ブロックが false を返すと return(return if execution.call …

Web上の画像を付けてツイート(1つ・複数)

Twitter gemバージョン6.2.0以降の記事は次のリンクに書きました。 Web上の画像を付けてツイート(1つ・複数)Twitter gemバージョン6.2.0以降の場合 - 別館 子子子子子子(ねこのここねこ) 以下の記事はTwitter gemバージョン6.1.0までの内容です。 画像…

Twitterのツイートにおけるt.coの文字数を取得

t.coの換算が10/19ぐらいから23になってしまって困っている [twitter:@riocampos] です。 こういうときにも困らないようにするには、 Twitter API に入っている数値を取得して定数に入れるのが良いです。 client = Twitter::REST::Client.new(KEY_SECRET_HAS…

nationalgeographic.comの記事を画像付きで印刷したい

小顔のヒト属新種ホモ・ナレディを発見、南ア | ナショナルジオグラフィック日本版サイト という記事の大元記事がこちら。 This Face Changes the Human Story. But How? しかし、残念ながら、印刷しようとすると文章だけになってしまう。 CSS を見ると@medi…

「まつもと直伝 プログラミングのオキテ」からデザインパターン関連部分のリンク

結局はDRY原則もOCPも「原則」に過ぎず,状況に応じて適切に選択しなければならないということなのでしょう。再利用する予定がない,あるいは将来機能拡張する予定がないコードにむりやりデザイン・パターンを適用するのは望ましくないでしょう。デザイン・…