According to GoF and their great book “Design Patterns: Elements of Reusable Object-Oriented Software”, builder pattern: „Separate the construction of a complex object from its representation so that the same construction process can create different representations.” and it’s a part of an object creational design patterns. Builder pattern is useful when the algorithm how to build an object is som
今日のアート mograg garageで行われたKYOTAROさんという方が描かれた絵です。 手帳にも描いてもらいました。ありがとうございます!! 概要 タイトルが釣りっぽくなって申しわけない(だったらやらなきゃいいじゃん……)。 普段は練習にRubyを利用しており、あるコードを規則に従ってステップを作成するプログラムを作っていたところ、とてもではないが、メンテすることが不可能になってしまった。なので、Lispの方言の一つであるところのRacketを使ったところ、サクサクと実装できるようになった。なぜこの違いが生まれてしまったのか、できるだけプログラミング言語の特性に依存せずに、この違いを語ろうと思う。 はじめに つい最近、知人と出あったところ、『プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)』が話題にのぼった。このテキストはオンラインによる問題集が付属しており、知人に
One of the things that made me fall in love with Ruby and Rails is the fact that if you're thinking to yourself "there's got to be an easier way to do this", there probably is. The Ruby community does a great job of fulfilling the lazyness virtue. If something seems hard to do, chances are some pioneering Rubyist has already done it and open sourced it. Between RubyGems, GitHub and StackOverflow,
Levenshtein距離とJaro-Winker距離両方とも、二つの単語、文章の間の違い(距離)を調べる方法です。 Levenshtein Distanceレーベンシュタイン距離 - Wikipedia 1文字削った文字列の末尾にどのような文字を追加すれば一致するか見ることで、1文字削った文字列との距離から1文字加えた文字列との距離を求めることができる。 数値(距離)が低ければ低いほど、似ている文字列となる Jaro-Winkler DistanceJaro–Winkler distance - Wikipedia, the free encyclopedia ジャロ・ウィンクラー距離も同じく文字列間の距離を調べるが、こちらはミスタイプをより検知することが出来る。ミスタイプはミスワードとは違い、最初の数文字は正しいことが多いという研究結果から、こちらの方法ではPrefix bonusとし
_ メタプログラミングRuby 第2版 オライリーからメタプログラミングRuby 第2版をいただいた。どうもありがとうございます。 本書の初版はアスキーから出ていたが、ドワンゴへの移動やらなにやらの前の微妙な時期に第2版が出たのでオライリーに翻訳権が移動したらしい。出版社は変わったが、訳者は同じく角さん(というかkdmsnr)。 ざっと見たが、初版とえらく雰囲気が異なる。 章立てはほぼ同じなのだが、初版の特徴だった、「あなた」とビル(先輩というかメンターというか)が、課題に出会い、メタプログラミングでうまく処理するというユースケースドリブンな筋立てというか、仕事ハッキングライフスケッチみたいな雰囲気は薄まっているように思う。どうも物理的に行間が詰まっているせいで、読み物っぽさが薄まったように感じるみたいだ。 その分、よりプログラミングの本らしくなっている(行間が詰まった分だけ本の厚みも減っ
プログラムは、なるべく何もしなくても良い感じに動いてくれるのが理想的だけど、実際には何らかのかたちでユーザの設定を必要とすることがある。 Rails を使うときは config/application.rb でタイムゾーンを指定したり、DB へ接続するための情報を config/database.yml に指定する。 Bundler の挙動を変えたければ bundle config で設定を変更する。 Gem をインストールするときに毎回指定したいオプションがあれば、~/.gemrc に追記する。 もし自分の関わるプロダクトに「設定」のAPIが必要になったとき、何を判断の基準にして設計すればいいだろう。 ちょっと近所を見渡すだけでも、「設定」のやり方には色々ありそうだ。 設定という視点から、Rubyist にとって身近なプロダクトたちを資料として眺めてみた。 (NOTE: ちょっと悩みなが
Code Smells Smells are indicators of where your code might be hard to read, maintain or evolve, rather than things that are specifically wrong. Naturally this means that Reek is looking towards your code's future (and that can make its reports seem somewhat subjective, of course). Reek currently includes checks for the following smells: Attribute (disabled by default) Class Variable Control Couple
突然ですが告知です。今までこの日記とかで公開してきた奇妙なプログラムを集めて、本を書くことになりました。今日はエイプリルフールではありません。 コンセプトは、「実務に役立たないプログラミング本」です。誰得?という声が聞こえてきそうですが、手段としてのプログラミングしか知らない人に、一味違うプログラミングの楽しさを知ってもらうきっかけになればいいなとか考えてます。 という建前ですが、内容は完全にアレです。新作を含む30本以上のプログラム紹介と、その開発技法の解説をとうとうと語っています。本当に誰得な本ですが、Qlobe とか Merry Quine-mas とか Quine リレーとか ASCII Fluid とか小文字だけ Ruby プログラムとか放射線耐性 Quine とかについて、ネタバレを知りたい人 (誰?) や自分でも書いてみたい人 (誰?) は必読です。 あと、どんな風にネタを考
I read Thomas Reynolds’ My Weird Ruby a week or two ago, and I loved it. I’d never heard of the Contracts gem, but after reading the post and the well-written docs, I couldn’t wait to try it out. I’d been doing some functional programming as part of our ongoing programming challenge series, and saw an opportunity to use Contracts to rewrite my Ruby solution to the One-Time Pad problem. Check out m
デバッグ中の発見 とあるマルチスレッドプログラムをPythonで書いていた際に遭遇した誤使用です。C/C++等の言語を使った場合には起こらない仕様なので、知っておくと役立つ時がくるはずです。これはPythonだけでなく、Rubyでも同様のことが起こるので、Rubyistさんも是非気をつけていただければと思います。 @ahaha_traderさんのご指摘により、C/C++でも同様のことが発生することを教えていただきました・・・。不勉強をお詫び申し上げます。 このブログを見ているような方々だとバグが生じる実際のコードと、結果をまずお見せしたほうが良いと思うので、サンプル用に作ったコードがこちらです。 バグが生じるソースコード import Queue import threading class MultiThreadIncrement(object): def __init__(self,
Back in 2012 I wrote an article about closure design patterns. I used Groovy as a programming language but now I have decided to use Ruby (the programming language that I mainly have been using for two years). This article was featured on issue #231 of Ruby Weekly newsletter. I want to keep the same examples, so I have created a helper method to make assertions. def assert(expression) raise "Asser
MapReduceの勉強と練習をかねてRubyでそれらしいことを書いてみます。 間違ったことをしてるかもしれないので、詳しい人がツッコミを入れてくれると嬉しいです。 ruby 1.8.7で動作を確認しています。 テーマ Apacheのログっぽいデータを分析して、それぞれのファイルへのアクセス数を算出します。 入力データはこんな感じ。 # Apacheのログっぽいデータの集合 input_data = [ '[04/01 00:00:00] "GET index.html HTTP/1.1" 200', '[04/01 00:00:00] "GET index.html HTTP/1.1" 200', '[04/01 00:00:00] "GET reduce.html HTTP/1.1" 200', '[04/01 00:00:00] "GET reduce.html HTTP/1.1"
今日,BeautifulCodeを読み始めたんだけど,1章目から正規表現エンジンを実装していたりして,かなり刺激的な内容だった.残りの章を読み進めていくのが楽しみ. ビューティフルコード (THEORY/IN/PRACTICE) 作者: Brian Kernighan,Jon Bentley,まつもとゆきひろ,Andy Oram,Greg Wilson,久野禎子,久野靖出版社/メーカー: オライリージャパン発売日: 2008/04/23メディア: 大型本購入: 30人 クリック: 617回この商品を含むブログ (191件) を見る この1章には,C言語で書かれた正規表現エンジンのコードが記載されている.この正規表現エンジンは,正規表現のうち . ^ $ *が使えるようなやつで,もともと,プログラミング書法に載っていたやつらしい.教育のために非常に簡潔できれいに書かれていて読みやすい. そこ
Arne is a developer, public speaker, programming coach and open-source contributor. With a passion for both human and programming languages, he has spent the last decade teaching and exploring the finer points of Ruby, LISP, Haskell, Mandarin Chinese, and others. When not hopping conferences or Pacific islands, he can be found at his home base in Berlin, brewing fine teas while pondering the futur
By, Grzegorz Witek They're everywhere. They're on the leaf that falls from the tree straight on your head. They're on the building you pass everyday morning. They're on the socks you wear today and in the code you write. Patterns. Design patterns are defined as general, reused solutions to recurring design problems. The term, coming from architecture, appeared in software development 20 years ago
正直この手の技術解説記事を書くのはあまり得意ではないので避けていたところがありますが、 自分以外の人にも深く理解してもらいツッコミを入れてもらえる環境にしておくことがリスクヘッジになるのではないかと考えたために書くことにしました。 ちなみに、このルーターはgithubのmasterブランチには既に取り込まれています。 また、ここでの新しいルーターとは、pendragonを指すことにします。 なぜ新しいルーターなのか そもそもの発端はこのイシューで、http_routerをドロップして新しいルーターを開発しようという動きは私が開発に参加するより以前からあったようです。 大まかな理由は以前書いた「Padrino Frameworkの最新事情と今後について」にある通りですが、補足としていくつか説明します。 http_routerの仕組み http_routerは一つのルートを追加する毎に、100
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く