phantomjs でzipファイルをダウンロードしたかったけど、ダウンロードオプションはまだ本体には取り込まれてないようなのでheadlessなChromeかFirefoxをVPSに入れて幸せな自動化処理生活を送ろうと思ったら全然うまく行きませんでした。
俺の苦労を返せ!
やったこと めんどくさいので説明は最低限で。
FirefoxとChrome、それにSelenium Webdriverで使うためのChromeDriverをインストール
apt-get install git unzip xvfb echo 'deb http://ppa.launchpad.net/mozillateam/firefox-next/ubuntu precise main' >> /etc/apt/sources.list echo 'deb-src http://ppa.launchpad.net/mozillateam/firefox-next/ubuntu precise main' >> /etc/apt/sources.list apt-get install firefox wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list apt-get install google-chrome-stable wget http://chromedriver.storage.googleapis.com/2.9/chromedriver_linux64.zip unzip chromedriver_linux64.zip mv chromdriver /usr/local/bin この時点で
Xvfb :1 & export DISPLAY=:1 firefox すればFirefoxが立ち上がるはずだけどエラーが出てうまくいかない。
色々と検索してみるけど結局エラーを除去する方法は見つからず。
Rubyとか こちらはRubyを入れてselenium-webdriverを入れるまでのよくある感じのインストールメモ。DigitalOcean上のUbuntuにrootでログインしてそのままやってます。
apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6 libreadline6-dev zlib1g zlib1g-dev git clone https://github.
rubyは文字列の配列を作るときに["foo", "bar"] と書くのがめんどくさいからという理由で %w(foo bar) みたいな感じで書けちゃいます。
同じような感じでsymbolもかけないかと思って探してたらruby 2.0.0から%iが使えるようになったので
%i(foo bar) で [:foo, :bar] が書けちゃいます。ステキ!
参考 [ruby – Is there way to create a symbol's array like string with %w? – Stack Overflow][1]
Digital OceanではOSを気軽にDropletで作成して、気軽にポイポイ捨てれるのが売りですが、そのせいで sshで新しく繋ぎ直したホストに繋ごうとすると
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Please contact your system administrator. Add correct host key in /home/ironsand/.ssh/known_hosts to get rid of this message.
「wgetかcurlで既にファイルが存在してたら上書きしないし、該当のディレクトリがなかったら自動的に生成するにはどうすればいいのかな?」という疑問をStack Overflowで検索!
ディレクトリが存在しない時に自動的に作成する [linux – wget -O for non-existing save path? – Stack Overflow][1]
回答意訳
curlならできるよ! curlの方が強力なツールだからね!
既にファイルが存在した時に上書きしない [curl – Don't download or overwrite file if exists – Stack Overflow][2]
回答意訳
wgetならできるよ! wgetの方が強力なツールだからね!
今ここに新たな「きのこたけのこ紛争」が巻き起ころうとしている!!
ホームディレクトリに直接ファイルを置くんじゃなくて、
必要なファイルをDropboxに置いといて同期して使おうと思ったので
mklink ~/.nyaos p:\Dropbox\rc\.nyaos
としたら
この操作を実行するのに十分な特権がありません。
と怒られた。
なぜ権限が必要か? 「さっき自分で作ったファイルを自分のホームフォルダに移動させるのになんで権限が必要なんです!?」と不思議に思って調べてみたら、シンボリックリンクの作成に必要なSeCreateSymbolicLinkPrivilegeが通常はユーザーが持っていないかららしい。
何故そんな謎な仕様になってるかは全くわからない。
日本語圏で検索しても「とりあえず管理者権限にしとけ」的な情報しか出てこなかったのでここに書いておきます。
参考 [filesystems – Using windows mklink for linking 2 files – Stack Overflow][1]
[windows 7 – Got not sufficient privileges message in CMD when logged on as administrator – Super User][2]
さっきのエラーで rbenv: version `2.0.0' is not installed
というのが出たんだけど、こういうバックスラッシュを文字の初めに持ってきて最後はシングルクォートで閉めるタイプの書き方が英語の書き方なのかそれともプログラミング周りの慣習なのかわからなかったので調べてみた。
英語自体の風習ではない 英語圏には引用符の始まりに ‘ を使って ‘Quoted words’ を使うことがあるけど、それを表現したかった人が似た形のバッククォートを使ったという経緯があるとか何とか。ちなみにLATEXの文化から来てるっぽい。
つまり英語自体の表記文化じゃないないならMarkdown記法使う時に邪魔なので無くしてほしいなあ。
参考 [punctuation – Any reference on the usage of a backtick and single quotation mark like
this'? – English Language & Usage Stack Exchange][1]
[Grammar Girl : Single Quotation Marks Versus Double Quotation Marks :: Quick and Dirty Tips ™][2]
[HTML特殊文字のシングルクォートとアポストロフィの扱い:なんとなしの日記][3]
[‘][4]
“Everyday Rails Testing with RSpec”を購入して読んでると
サンプルプロジェクトが紹介されてたのでgit cloneでダウンロードしてきて bundle install をすると
rbenv: version '2.0.0' is not installed
と出ちゃって困る。しかも ruby -v と確認しようと思ったら再び
rbenv: version '2.0.0' is not installed
??????
「まさか rbenv が壊れた!?」と思って調べてたら、どうやらカレントディレクトリに.ruby-versionがあるとそのバージョンのRubyを参照しようとするために起きるらしい。
対策 自分の場合は2.0.0.p247が入っているので該当のディレクトリでrbenv localすると.ruby-versionの中身が書き換えられて上手く動くようになりました。
Version自体が異なる場合は上手く動かないと困るので該当のバージョンの ruby をrbenv install 2.x.xでインストールしましょう。
net/smtp ライブラリを使うよりも gem mail を使えば簡単にメールが送れるらしいので調べてみた。
方法 まず mail gem が必要なので $ gem install mail でインストールする。
んで、下のように書けばOK!
require 'mail' mail = Mail.new do from 'me@ironsand.net' to 'recipient@exmaple.com' subject 'Here is the image you wanted' body 'Body' end mail.delivery_method :sendmail mail.deliver 注意点 Macでは動かなかったので、VPS上のCentOS 6.4で試してます。
25版ポートを開けるのを忘れずに。
参考 [email – Ruby Mail gem: Connection refused – connect(2) (Errno::ECONNREFUSED) – Stack Overflow][1]
何回か調べたけど未だに覚えられてないのでもう一度調べ直しました。
確か前回調べたときは英語読むのがめんどくさいから日本語の情報を見て納得したんですが、今回はめんどくさがらずに英語圏で検索したらいつも通りStackOverflowにて大変わかりやすい答えが見つかりました。ありがたや〜。 (人´∀`)
datatime と timestamp の違い datatime が 1000年から9999年までを表現して timestamp は unix timestampのフロントエンドに過ぎないので 1970年から2038年までしか扱えない。
扱う範囲が違うのでdatatimeが8バイトtimestampが4バイト使う。
Rails における扱い。 これが一番重要な気がするけど、Railsではどちらを指定してもデータベースにはDATATIME型で保存される。
何故かこのことについて述べてるサイトがあんまりなかったのでこの記事を書いておきました。
参考 [In Ruby on Rails, what's the difference between DateTime, Timestamp, Time and Date? – Stack Overflow][1]
rubyで def foo(arg1, arg2, arg3) な関数があった時に values = [1, 2, 3] という値を渡そうとして
foo values とすると TypeError: no implicit conversion of Array into Integer というエラーになります。
解決策 この配列をいうなれば”展開”して渡したいわけですが、やり方がわからなかったので調べました。
foo *values のようにまるでC言語みたいな渡し方をすればOK.
参考 [caiustheory.com/sending-array-elements-as-individual-arguments-in-ruby][1]