日付の配列の中から直近の日付を選択する

日付の配列がある時に pry(main)> dates = (1..10).map{|i| Date.new(2015,i) } => [Thu, 01 Jan 2015, Sun, 01 Feb 2015, Sun, 01 Mar 2015, Wed, 01 Apr 2015, Fri, 01 May 2015, Mon, 01 Jun 2015, Wed, 01 Jul 2015, Sat, 01 Aug 2015, Tue, 01 Sep 2015, Thu, 01 Oct 2015] 現在の日付よりも新しく、かつ一番近い日付を選択したい時の処理 pry(main)> Date.today => Fri, 13 Feb 2015 pry(main)> dates.find{|date| date > Date.today} => Sun, 01 Mar 2015 findメソッドはやっぱり便利! ...

2015-02-13 · 鉄

既にインデックスをつけているカラムにUnique制限をつける

Railsで既にindexをつけているカラムにunique制限をもうけるには、ユニーク制限だけを付加することができないので一旦インデックス自体を削除してから新規に unique な index を追加します。 def change remove_index :editabilities, [:user_id, :list_id] add_index :editabilities, [:user_id, :list_id], unique: true end 参考 [ruby on rails – How to add unique constraint to already existing index by migration – Stack Overflow][1]

2015-02-02 · 鉄

ActiveSupport::Inflectorで定義した頭字語が`has_many`を解釈してくれない時の解決法

Rubyの命名規則としてクラス名は通常はCamelCaseで記述しますが、HTTPなどの頭字語(Acronym)はそのまますべて大文字で記述します。 Railsで頭字語のクラス名を使うときはモデル等を生成する前に設定で以下の記述を行っておくと自動的に認識してくれます。 config/initializers/inflections.rb ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.acronym 'GNU' end ただhas_manyでこのクラスを持とうとすると以下のエラーになってしまいます。 LoadError: Unable to autoload constant Gnu, expected /Users/ironsand/dev/myproject/app/models/gnu.rb to define it 対策 クラス名を明示的に指定するとOKです。 has_many :gnus, class_name => "GNU"

2015-02-02 · 鉄

ラズベリーパイへVNCでリモートデスクトップ接続する

[初めてのラズベリーパイ 【購入から SSH 接続まで】 | 答えを知りたい][1] にて SSH 接続ができるようになりましたので今回は VNC を使ってリモートデスクトップ接続をする方法を解説します。 Raspberry 側でする設定 まずはssh pi@192.168.xxx.xxxで接続します。そして必要なパッケージをインストール。 pi@raspberrypi ~ $ sudo apt-get -y install tightvncserver 次にサービスを起動します。VNC に接続するときのパスワードを要求されますので何にするか決めます。 また閲覧専用のためのパスワードを設定するかどうか聞かれますのでnで無しにしておきます。別に閲覧専用のパスワードを用意しても構いませんがそんな使い方をラズベリーパイですることはないでしょう。 pi@raspberrypi ~ $ tightvncserver You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n サーバーが立ち上がったら VNC 用の Window を一つ用意します。 $ vncserver :0 -geometry 1024x768 -depth 24 これでラズベリーパイ側の設定は完了です。 PC 側からの設定 PC 側に VNC のクライアントをインストールします。Mac の場合は特に何もインストールする必要はありません。 ...

2015-01-17 · 鉄

初めてのラズベリーパイ 【購入からSSH接続まで】

ラズベリーパイがよくわからないからとりあえず触ってみる会 | Doorkeeper を思いつきで呼びかけてみたら意外と人が集まったので、イベント前日の今日に急いで最低限の初期設定をしているテツです。こんにちは。 私と同じように『ラズベリーパイって面白そうだけど何か全然わかんない。』という人に少しでも役に立てばを思い記事を書いています。 ...

2015-01-17 · 鉄

NokogiriとSelenium-WebDriverのxpathの違い

Selenium-WebDriverとNokogiriで同じファイルを開いても違うxpathを書かないといけないとダメで少しハマったのでメモ。 違いの原因 同じHTMLを解析してもSelenium-WebDriverでChromeやFirefoxで開いた時は任意の要素であるtbodyが挿入されるために違いが発生します。 実際の例 例えば <table> <tr> <td></td> </tr> </table> とある時に Nokogiri の場合 require 'nokogiri' doc = Nokogiri::HTML(File.read("test.html")) doc.xpath("//table/tr") Selenium WebDriver の場合 require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome driver.get("file:///C:/Users/ironsand/test.html") driver.find_element(:xpath, "//table/tbody/tr") 基本的な対策 大体の場合は//table//trとどちらにも対応できるように書いたらいいわけですが、汚いHTMLを解析するときに //tr/td/font[contains(text(), 'Keyword')]/../../following-sibling::tr[3]/td な感じで正確なタグの数が必要になることがあるのでそういう時に気をつけましょう。 参考 [ruby – How to get element that have same parent and n th different position by xpath – Stack Overflow][1]

2014-05-04 · 鉄

screenを使ってssh経由のコマンドを便利に

sshでログインして処理の重たいコマンドを実行した後にセッションが途切れてしまうとそのコマンドをもう一度fbなどでフォアグラウンドに持ってこようと思っても残念ながらできません。違うシェルのインスタンスから立ち上げたらプロセスは別のインスタンスのシェルには持ってこれないかららしいです。 Screenの使い方 まず初めからコマンドをscreenを使って立ち上げておきましょう。 $ screen ruby it_takes_very_long.rb そして、一旦sshの接続を切って繋ぎ直します。 $ screen -listをするとこんな感じで表示されるので There is a screen on: 31744.pts-0.Sakura (Detached) 1 Socket in /var/run/screen/S-ironsand. $ screen -r 31744.pts-0.Sakuraでスクリーンに繋ぎ直せば画面への出力をもう一度見ることが出来ます。 参考 [Linux Screen Tutorial – YouTube][1]

2014-04-30 · 鉄

Berkshelf::LockfileParserError への対処

knife solo cook foo とするとBerkshelf::LockfileParserErrorってエラーが出てビビる。 対策 rm Berkshelf.lock で ロックファイルをを消したら治った。.gitignoreに加えてたほうが良いのかな? Gemfile.lockと同じく加えるかどうかに賛否両論ありそう。

2014-04-30 · 鉄

irbで`require “foobar”`するのがめんどくさいので楽にする

例えば nokogiri でちゃんとデータの取得ができてるか確認するために irbを使うために $ irb してから require "nokogiri"と 自分はいつもしてたんですが、めんどくさい。 解決策 $ irb -r nokogiriな感じでライブラリが読み込めます。ステキ!

2014-04-30 · 鉄

Capistrano3でさくらVPSにdeploy

確実に忘れる上にドキュメントが全然見つからないCapistrano 3を VPS に Deploy する方法のメモ。 作業しながら書いてるのでホントに出来るかは書いてる本人もわかりません。 基本的には Railscast の[“Deploying to a VPS”][1]の設定とCapistrano 3の組み合わせです。 環境 Windows 7 Capistrano 3.1.0 rails 4.1.0 ruby 2.0.0p195 (2013-05-14) [i386-mingw32] Postgresql さくらの VPS (一番安いの) git リポジトリ VPS 上に git repository を作成しておいてそこにプロジェクトを push しときます。 場所は var/git-repos/#{site}.git。 Gemfile # Use unicorn as the app server gem 'unicorn', group: :production # Use Capistrano for deployment gem 'capistrano', '~> 3.1' gem 'capistrano-rails', '~> 1.1' gem 'capistrano-rbenv', '~> 2.0' Nginx Nginxの設定ファイルをconfig/nginx.confに作成。※#{site}は適当に置き換える。 ...

2014-04-29 · 鉄