Ruby Weekly is a weekly newsletter covering the latest Ruby and Rails news. As an outspoken and opinionated guy, David Heinemeier Hansson (a.k.a. DHH), creator of Rails, is no stranger to a little bit of controversy. He frequently sets off interesting debates on Twitter from his @dhh account. The latest is, perhaps, the most involved yet and has been rattling on for a couple of hours today. So wha
プログラミングの存在価値は処理の自動化です。任意の集合に対して処理を繰り返しその結果を返す、それがプログラムです。つまり集合に対して処理を繰り返す能力が、プログラムの価値を決定付けるのです1。 「手続き型言語」ではループが処理の繰り返しを実現するための重要な手法の一つです。しかしループは、一時変数を用意してプログラマがループの進行を管理しなければならない、という欠点があります。そしてその管理ミスがバグとなります。 「関数型言語」では再帰が処理の繰り返しを実現するための重要な手法の一つです。再帰では再帰の進行はその構造に基づいて自動的になされるので、プログラマがそれを管理する必要はありません。しかしその一方で、処理が多段階に渡る立体的なものとなるので、その動作の理解が平面的なループ処理に比べて難しいという欠点があります。習得には慣れが必要です。 Rubyは、手続き型言語と関数型言語の両方の側
次のような名前のリストがあって langs = ["ruby", "python", "lisp", "haskell"] 名前の先頭を大文字にするとしたら 君ならどうする? そう普通Enumerable#mapを使って 次のようにするよね langs = ["ruby", "python", "lisp", "haskell"] langs.map { |lang| lang.capitalize } # => ["Ruby", "Python", "Lisp", "Haskell"] Enumerable#mapってほんと死ぬほど便利だよ 僕はRubyの魅力の80%は mapが占めてるんじゃないかって たまに感じることがあるよ.. :) でもただ先の例で 大文字にするだけなのにブロックって ちょっと大げさすぎると思わない? もちろんそうなんだよ そう思うRubyistが沢山いたから m
String と StringBuffer の文字列連結速度のテスト - すえひろがりっっっっ!と同様小ネタ。 社会人になって1年たちますが、仕事で「素人かよ!」って思うコードをよく見かけます。 そのトップ10に入るのが「Javaで+= で文字列を連結していてパフォーマンスがすこぶる悪い」コードです。 これをやってた人は、いまだに += で文字列を連結しているコードをよこしてきます。 どうにかならないもんだろうか。 ところで、Ruby でも String の連結は重いのだよね?とふと思ったので += と << で結合した場合の速度を測定してみました。 楽しいRubyによると Ruby でも += で結合するとインスタンスを生成するらしい。 ということは += と << では性能に差が出るはず。 せっかくRubyなのでGruffを試してみます。 バージョン Mac OS X 10.6.3 C
メールサーバー, Milter, 開発はっきり言って誰得感の強い記事だが書く。最近仕事でちょっとメールサーバー構築をやっているんだが、そこで Milter を使った付加価値の付いたメールサーバーを構築しているので、Milter についてあれこれ書いてみようと思う。何せ Milter ぐぐっても情報が少なすぎるし、社内でも近場で経験者見つからんし…。kou さんからいただいたコメントを反映しました。大変感謝です。 Milter とは何か?Mail Filter の略で、Sendmail(Postfix) でメールをフィルタリングできる外部プラグイン。普通は迷惑メール対策や、メールのドメイン保証(DKIM とかその手の) で使われるのが主な使い方。大体そういうのは、パッケージングされた情報がある程度はある。また日本では、Milter Manager という、Ruby で動く複数の Milter
SPDYを知るSPDYという実験的なプロトコルがありまして、 SPDY - The Chromium Projects HTTP2.0はSPDYをベースに作られるかも、みたいな話も風の噂で聞いたりするのでじゃあどんなもんかなあと仕様を読んで見ました。 SPDY Protocol - Draft 2 - The Chromium Projects SPDY Protocol - Draft 3 - The Chromium Projects SPDYv2とSPDYv3というのがあって、基本的にはSPDYv3の方を読んどけばいいのかなあとは思います。 ただSPDYv2もすでにいろんなところで使われていますので、仕様書の「7.Incompatibilities with SPDY draft #2」の部分もチェックしておきましょう。 HTTP Layering over SPDYSPDYというの
こんな風にモックを使ってテストすればいいのかな.変な点があったら指摘して下さると嬉しいです. 目標 Twitterとは通信せずにTwitterクラスを使うコードのテストを行う(Twitterクラス関連のコードは適当にパスさせる) sample_tweet.rb SampleTweetのコンストラクタでTwitter::Baseクラスのインスタンス@twitterを作る SampleTweet#hogeメソッドで@twitter.updateを呼び出し"hoge"という文字列をTwitterにpostする #!/usr/bin/env ruby require 'rubygems' require 'twitter' class SampleTweet def initialize(consumer_token_key, consumer_secret, access_token_key,
Garbage Collection Advent Calendarの8日目(!!)の記事です。 gc.cの最初のほうのコミットを見るとCOPYRIGHTがあって、SIOD:Scheme In One Defunという処理系を参考にまつもとさんはCRubyのGCを実装されたみたいなんですね。 /gc.c - ruby-trunk - Ruby Issue Tracking System この当時はスッキリしたソースコードですね。 SIOD - Wikipedia, the free encyclopedia SIOD: Scheme in One Defun SIODは公式サイトなどを読むと1988年にリリースされ、最後のリリースが2007年、と。 30年も続いてんのかあ。 で、wikipediaには以下のように書かれていますね。Scheme In One Defun (or Scheme
■ [ruby] gistを使って小さなgemを公開する方法 http://jeffkreeftmeijer.com/2011/microgems-five-minute-rubygems/ 「bundlerがあれば、rubygems.orgにアップロードしなくても公開gitリポジトリさえあればgemとしてインストールできる」 「gistにはgitコマンドでファイルをチェックアウトする機能がある」 1.2.より、gistを使えばrubygems.orgにアップロードしなくてもgemを公開できる という話。 サンプルはこちら:https://gist.github.com/1232884 Gemfileに以下のように書けば、bundle installでこのgemがインストールされる。 gem 'bang', :git => 'git://gist.github.com/1232884.gi
■ [ruby][event] Ruby勉強会@関西-16「30分でわかるcallccの使い方」 先週末のRuby勉強会@関西で、Rubyにおけるcallccの使い方について発表させていただきました。 スライド: pdf ppt 継続の説明については「なんでも継続」がよく参照されるんだけど、 ちょっと説明がボトムアップすぎると思うので(僕も最初に読んだときは全然分からなかった)、「callccで何ができるか」という応用面から攻める 構成にしてみました。 最初は「継続かわいいよ継続」「それをすてるなんてとんでもない」と思ってたんだけど、 いろいろ調べてるうちになんでcallccが嫌われるのかが理解できてしまった。callccはかわいいけど、非常に手のかかる奴らしい。 しかも、面白い利用例はいっぱいあるけど実用的な例があんまりないんだよね^^;。 callccが無くなるとRubyの「かっこよさ
[edit] 以下にあげるものは、Array#pack、String#unpack、String#unpack1 のテンプレート文字の一覧です。テンプレート文字は後に「長さ」を表す数字を続けることができます。「長さ」の代わりに*とすることで「残り全て」を表すこともできます。 長さの意味はテンプレート文字により異なりますが大抵、 "iiii" のように連続するテンプレート文字は "i4" と書き換えることができます。 テンプレート文字列中の空白類は無視されます。また、# から改行あるいはテンプレート文字列の最後まではコメントとみなされ無視されます。 整数のテンプレート文字のシステム依存性 各テンプレート文字の説明の中で、 short や long はシステムによらずそれぞれ 2, 4バイトサイズの数値(32ビットマシンで一般的なshort, longのサイズ)を意味しています。s, S, l
RubyでバイナリデータをBase64エンコードする場合、 require 'base64'をしてからBase64.encode64(binary)をするか、 以下のようにpackのmテンプレートを使うことができます。 ruby>> [binary].pack('m') #=> Base64 encoded string <<-- しかし、アップロードしたファイル用のテンポラリなファイル名 などに使用する場合、Base64でエンコードした文字列は ファイル名に使えない(可能性が高い)文字を含んでいるため、 そのような場合にはbase64url形式でエンコードします。 base64url って何? base64url とは、base64 を基に RFC4648 で規定された変換方式で、url とファイル名に使用しても安全になるように設計されています。変更点は、base64 では + と /
Rails sessionのシリアライズにJSONが使われない理由: なぜMarshal? JSON/YAMLの罠 2011-07-18 04:35 Railsのsession情報をJSONやYAMLでシリアライズすると不都合に出遭います。不都合の理由とその解消方法、sessionのシリアライズにJSONやYAMLではなくMarshalが使用される理由について書きます。 Railsと、node.jsのようなRuby以外で書かれた系の双方でsessionを共有する場合に重要です。 RailsのsessionはMarshalでシリアライズするのが一般的 現在、Railsのsession情報をシリアライズして任意のデータストアに永続化する場合、encode64(Marshal.dump(session_data))のようにMarshalしてさらにBase64を使ってバイナリの文字列にしてから永
A colleague of mine has built a quite sophisticated mechanism that allows for components to automatically reload if necessary in case a user interaction requires it. In order to do that though, it needs to store a significant amount of information for each reloadable component in a page. This information contains the different parameters needed to reload each component. This context information is
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く