Ruby

Sierraでruby-buildで1.8.7をビルドする

今更ながらrbenv使ってRuby-1.8.7をインストールすべく、 ruby-buildで1.8.7をインストールしようとしたところ、 次のようなエラーが出ました。 ERROR: This package must be compiled with GCC, but ruby-build couldn't find a suitable `gcc` executable …

容量が小さいファイルを削除するrubyスクリプト

ruby -e 'Dir.glob("*.send").select{|f|FileTest.size(f)<525}.each{|f|File.unlink f}' *.sendで525バイトよりも小さいファイルを一括削除するスクリプト。 Rubyだとサクサク書けるなぁ。

さくらのクラウドに立ち上げたサーバをスクリプトでDNSに登録する

少し前にさくらのクラウドにDNSができました。 これは何がいいかというとAPIがあることです。 早速、さくらのクラウドからサーバとIPアドレスを引っ張ってきて、 クラウドDNSに登録するというスクリプトを組んでみました。 まず、準備 設定からAPIキー行って…

SaklientのドキュメントをDash形式に変換したものをgithubに置いておいた

github.com さくらクラウドのドキュメントもサンプルも少ないので、 ソースコードを直接見ざるを得ないのですが、 いちいち見るのも面倒なので、Dashで見るべく 変換しました。せっかくなのでgithubにあげておきます。 楽ちんです。

改行コード一括変換

Railsプロジェクトをポイっと渡されたら、CRLFだったので、一括変換するメモ。 find * -type f|egrep -v '(.gif|.jpg|.png|.db|.doc|.graffle|.mo)$'|xargs -n 10 nkf -Lu --overwrite .graffleとか.moが入っているのはそういうプロジェクトだったもので。

OSX El Capitanにrbenvで1.8.7-p375を入れる

もういい加減にしたいと思っている1.8.7なのですが、 残っているところがある以上、こちらでも開発環境を用意しなければならないのです。 rbenv install 2.2.3 とかは問題なくインストールできました。しかし、 rbenv install 1.8.7-p375 とやってみたのです…

16進数が文字列になっちゃっているものを配列にしたい

お題 "FF2E0A" => [255, 46, 10] と変換したい 16進数が文字列として入っている。 "FF2E0A".scan(/.{2}/).map{|c|Integer("0x#{c}")} これだとやはり長い。 ["FF2E0A"].pack("H*").bytes これがやはり最強だな。knuさんに教えてもらったけど、考えてもすぐに…

C言語の外部コマンドへの入出力がよくわからない

とりあえず、現状で必要なのはgzip圧縮されたデータを受信して、展開したいだけ。 あっさりzlibライブラリで解決するかと思いきや、 zlibを読んだ感じでは、gzipはファイル化しなけりゃならないっぽい。 ファイル化とか面倒だと思ってgunzip -cに吸い込ませ…

Rubyでサーバを作ってクライアントにデータを配信 vol.6

vol.5のように時間がかかる処理があると待たされてしますので、 それを解決したコードが次のコードです。 require "socket" port = if ARGV[0] then ARGV[0] else 'echo' end gate = TCPServer.open(port) sockets = [gate, STDIN] clients = [] loop do r_s…

Rubyでサーバを作ってクライアントにデータを配信 vol.5

vol.4のプログラムはclientsにひとつずつ配信しています。 一瞬で終わるならいいのですが、ネットワークなんて遅延しまくりなので、 あまりよろしくありません。一度に配信処理をしたいものです。 試しに2秒遅延を入れてみると、こうなります。 require "soc…

Rubyでサーバを作ってクライアントにデータを配信 vol.4

スレッドなどでそれぞれ待ち受けるという手もありますが、 IOの入出力を待つ手段としては一般的ではないようです。 IOの動きを監視して待ち受け、動きがあったら場合分けをして 処理をするのが一般的なようです。 これをReactorパターンといいます。 IO.sele…

Rubyでサーバを作ってクライアントにデータを配信 vol.3

forkはダメです。forkは別プロセスを立ち上げるので、メモリの共有ができません。 なので、同じデータの一斉配信には向いていません。プロセス間通信とか仕組みが面倒です。 ちゃんと動かないプログラムをとりあえず書いてみました。 require "socket" port …

Rubyでサーバを作ってクライアントにデータを配信 vol.2

vol.1 のサーバだと、1対1の通信しかできません。これだとサーバ&クライアント型の プログラムとは言い難いので、サーバ1台に対し、クライアント複数台で作ってみます。 require "socket" port = if ARGV[0] then ARGV[0] else 'echo' end gate = TCPServer…

Rubyでサーバを作ってクライアントにデータを配信 vol.1

これはRubyで作ったソケットサーバに接続してきたクライアントにデータを配信するための勉強上の知見です。 require "socket" port = if ARGV[0] then ARGV[0] else 'echo' end gate = TCPServer.open(port) sock = gate.accept gate.close while msg = STDI…

itamaeいい感じ

itamae-kitchen/itamaegithub.com Chefが面倒でpuppetを使っていた私ですが、 itamaeというのを作ってくれたクックパッド関係の方がいたので使ってみた。 ちょっと使ってみた感じでは、楽ちん。 rootに.ssh/authorized_keysを入れておくだけで、 あとは何も…

俺がRuby会議で社長座談会をやったらぶっちゃけ聞いてみたいこと

社長なんていいことばかりじゃなくて、苦労のほうが100倍あって、そのかわり、 やりがいはメチャメチャあると思います。少なくとも私はやりがいで生きています。 他のRuby社長にぶっちゃけた話を聞いてみたくて、箇条書きにしてみます。 資本金はいくら? こ…

まつもとゆきひろ(Matz)つぶやき日記(Twitterログ)をはじめました

まつもとさんからOKをもらったので アナウンスします。 去年にまつもとさんがMatz日記の更新頻度が低いから、 TwitterのログをMatz日記にしようかなと話していました。 それで、今年のRuby会議でも同じ事を言っていたので、 ログを残したいというのもあって…

第33回 Rails勉強会@東北のお知らせ

日時 2013年7月20日 13:00〜16:30 場所 株式会社ラビックス 参加したい方は、このfacebookページの中にある イベントで参加表明をお願いします。 https://www.facebook.com/events/220591251423114/ といっても、当日の募集になってしまったので、 〆切とか…

String#to_sとHash#to_hashの挙動

% irb irb(main):001:0> class MyString<String;end => nil irb(main):002:0> s=MyString.new("abc") => "abc" irb(main):003:0> s.to_s.class => String String#to_sはStringが返ります。 irb(main):004:0> class MyHash<Hash;end => nil irb(main):005:0> h=MyHash.new() => {} irb(m</hash;end></string;end>…

gemで入れたものを丸ごと全部削除

gem list | cut -d" " -f1 | egrep -v 'test-unit|psych|rdoc|minitest|io-console|json|rake|bigdecimal'|xargs gem uninstall -aIx ruby-buildで入れたやつなのですが、 shared/bundleにgemを入れなおしたかったので、 削除することにしました。 egrep は…

chefとpuppetの電子書籍どっちも買ってみた

どっちもというのはもちろん我らが達人出版会です。 入門Chef Solo 入門Puppet 前回のRails勉強会@東北でChefをやってみたのですが、 感想は、めんどくさい!でした。 こんなんじゃ俺は要らん。と思っていたのですが、 puppetはゆるくて簡単でした。 aptで…

webrickとrackとcgi.rbでベンチマーク

Rubyも2.0になったし、久しぶりに上の3つのライブラリで CGIのパフォーマンスを測ってみた。 ちなみに、2.1devでやってみています。2.0とさほどかわらんだろ。 webrick require 'webrick/cgi' class MyCGI < WEBrick::CGI def do_GET(req, res) res["content…

evalやっぱり遅い

cgi.rb は大分昔に作られたライブラリなので、 実装が古い部分がたくさんあり、 evalが結構多用されています。 不要なevalが多いなと思ってちょっと計測したら、 やっぱりかなり差がありました。 これはインスタンスにインスタンス変数を定義して、 [1, 2, 3…

第32回Rails勉強会@東北のお知らせ

日時 2013年5月25日 13:00〜16:30 場所 株式会社ラビックス 参加したい方は、このfacebookページの中にある イベントで参加表明をお願いします。 https://www.facebook.com/events/539554369416094/ 何やるかは未定です。 個人的には、Authority あたりをや…

CGIで128MBよりもデカイファイルをアップロードするには(定数の変更)

gmailで困ったというメールが来たのでチケット化してみました。 https://bugs.ruby-lang.org/issues/8370 cgi.rbでは、一度にアップロードできるファイルサイズの上限を 定数で決めています。 CGI::MAX_MULTIPART_LENGTH = 128 * 1024 * 1024 件のメールでは…

lib/cgi/util.rb の中身丸ごとmoduleになった

Stringに生やすのは反対が多かったため、 関数として使えることになりました。 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?revision=40571&view=revision require 'cgi/util' include CGI::Util すると、 puts escapeHTML("<>&") &lt;&gt;&amp; となりま…

Stringに生やすのがやめたほうがいい感じなので、エスケープ関数定義にするか

erb大好きな皆さんが使っていると思われるh関数、 実体はCGI::escapeHTMLになっています。 erbでは、include ERB::Util すると、 h関数が使えるようになります。 cgiでも同じように使えたほうがいいと思いまして、 実装してみました。 インデントを付け直し…

(続)String#{escape_html, unescape_html, escape_uri, unescape_uri} をつけたい

Twitterでメソッド名がよくないという 反応だったのでちょっと修正してみました。 --- a/lib/cgi/util.rb +++ b/lib/cgi/util.rb @@ -195,4 +195,29 @@ class CGI end lines.gsub(/^((?:#{Regexp::quote(shift)})*)__(?=<\/?\w)/, '\1') end + + class ::Str…

String#{escape_html, unescape_html, escape, unescape} をつけたい

cgi/util にはいろんな人が使っているだろうメソッドがあって、 CGI::escape_html, CGI::unescape_html, CGI::escape, CGI::unescapeです。 これはStringに関する操作なのですが、 やっぱり関数的なのは好きじゃなくて、長年好きじゃないなと思っていました…

朝活をやります

突然ですが、明日4/19に朝活を開催します。 朝7:45-8:45の時間で各々作業をするという活動です。 9時からラビックス始業なので、こんな時間帯になります。 私はRubyやっていると思いますが、 Ruby以外のことを作業したい人も歓迎です。 ただ、1時間だけの実…