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]
最後の数字だけ違う文字列をグループ分けしたかったんですが、自分で書いてみるとこんな面倒くさい感じになって (´・ω・`)ショボーン
a1 = %w(foo1 foo2 foo3 bar1 bar3 buz2) a2 = a1.map{|v| v.sub(/[0-9]$/,"")}.uniq tmp = Array.new(a2.size) a2.each_with_index do |v2, i| a1.each do |v1| if v1.sub(/[0-9]$/, "") == v2 tmp[i].nil? ? tmp[i] = [v1] : tmp[i].push(v1) end end end p tmp # => [["foo1", "foo2", "foo3"], ["bar1", "bar3"], ["buz2"]] なので、調べてみたら非常に簡単な方法が見つかりました。
a1 = %w(foo1 foo2 foo3 bar1 bar3 buz2) p a1.group_by{|x| x[/[a-zA-Z]+/] }.values Rubyすげぇ!
参考 [arrays – Group strings with similar pattern in Ruby – Stack Overflow][1]