2009-01-01から1年間の記事一覧

Rubyで写真にタイトルを付けてFlickrにアップしよう!

毎回食事の写真を撮ってタイトル付きでFlickrにアップしている タイトルは「Lunch Sep 29 2009」のように 食事の種別と日付にしている 毎食となると月に100以上も写真をアップすることになるので このタイトル付けは結構しんどい 何の目的もなく食事の写真を…

RubyのProcオブジェクトはキューティーハニーだ!

RubyのブロックとそのオブジェクトであるProcオブジェクトは とても魅惑的だ 優しそうでいてなかなか複雑だ 外からは浅そうに見えて 中に入ると底が見えてこない 単純に見えて使い方は実に多様だ あるときはイテレータであり またあるときはコールバック関数…

Rubyのブロック(クロージャ)はローカル変数をインスタンス変数に変えるマジックだ!

ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。Rubyのブロック(クロージャ)はローカル変数をインスタンス変数に変えるマジックだ! : melborne.github.com - Ruby ク…

100円ショップでiPod touchスタンドを見つける秘訣

iPod touchは革命的コンピュータである それが何故革命的なのかと言うと ポケットに入れて携帯できるからではない それがベットの上で寝ながら使えるからである 寝ながらブログを読む 寝ながらゲームをする 寝ながらビデオを観る 怠け者たちの夢が今叶う 縦1…

Ruby.Sinatra.Git.Heroku #=> "Happy Web Development!" (後編)

mycal.rbに戻ってもう少し機能を増やします 日表示のための以下のコードを追加します get '/:year/:mon/:day' do |*ymd| @year, @mon, @day = ymd.map { |x| x.to_i } @dcal = cal(@year, @mon) @message = 'Webカレンダー完成予定日' erb :day end __END__ …

Ruby.Sinatra.Git.Heroku #=> "Happy Web Development!"

Ruby 10年前にRubyといえば7月の誕生石のことか 5.5ポイント活字のことでした でも今はGoogleを30頁めくっても 妻に誕生石をプレゼントすることはできません 宝石店のSEO対策は 日本人の作った言語セットの前では無力なのです この点PerlのLarryさんは巧妙に…

Ruby+Shoesでスキャニメーションを作ろう!(その2)

(追記:2010/7/10) Rubyだけで画像を生成する方法を用意しました Rubyでスキャニメーションを作ろう! - hp12c 「ギャロップ!! (しかけえほん)」に触発されて ScanAnimationというサイトを作りました サイトでは馬が走る絵とカンガルーが跳ねる写真と 文字…

Ruby+Shoesでスキャニメーションを作ろう!

本屋にいったら「ギャロップ!! (しかけえほん)」という 絵本がありました 表紙に窓があって中に馬の絵が描かれています ページを開いていくとその馬が突然走り出しました よく見るとページの開閉に連動して スリット入りのマスクが絵に対して動いて 動画を形…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(最終回)

さてこれらの演算子を使って 何かしたいですね... いいのを思いつきました ある小説を元にしたオブジェクトから 基本単語からなるオブジェクトを差し引けば その小説にユニークな単語が抽出できるかもしれません Version27 class WordDictionary def select(…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その16)

さてGUIで出力も魅力的なものになりました もうやり残すことはなさそうです 当初単なる制御構造であったスクリプトが WordDictionaryという立派なクラスになりました これで将来このクラスを拡張したり このクラスをベースにしたアプリケーションを作れます …

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その15)

っと その前に... アウトプットのしょぼさに 今さらながら気が付いてしまいました wdic = WordDictionary.new(ARGF) p wdic.top_by_frequency(20) #> [["the", 16077], ["of", 9823], ["and", 7482], ["to", 7098], ["in", 4456], ["a", 3841], ["that", 316…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その14)

Version20 ここまで来たらもう一歩 小説データは元々ネットにあるんですから いちいちファイルにダウンロードしないで 直接ネットから取れたらうれしいです open-uriライブラリというのを使うと httpに簡単にアクセスできるようになります require "open-uri…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その13)

Version17 次にVersion07で示したような 最長ワードトップ30を出力するメソッド top_by_lengthも定義しましょう class WordDictionary def top_by_length(nth, &blk) list = take_by_key(nth, lambda { |key| -key.length }, &blk) list.map { |word, freq| …

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その12)

でも待ってください そこまで汎用性がある汎用性があるって言うのなら... クラスにでもしたらどうですか? それならArrayクラスにも迷惑は掛かりませんし なるほどいい考えかもしれません ではテキストファイルを受け取ると 英単語頻度辞書を生成するWordDic…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その11)

さてもう改良点はないでしょうか スクリプト全体をもう一度みてみましょう module Enumerable def take_by(nth) sort_by { |elem| yield elem }.take(nth) end end class Hash def top_by_value(nth, &blk) take_by_value(nth, opt(false), &blk) end def bo…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その10)

なかなかいいですね さてこれでもう完成でしょうか... いいえ! 問題が発生しました! 先のコードはDRY原則に反します!! DRY原則 「DON'T REPEAT YOURSELF!」*1 達人プログラマは言いました 「お前は二人も要らないよ!」 あるいは 「愚鈍なる君の二度手間…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その9)

更に欲が出てきました このtake_byというメソッドを 配列でも使いたくなりました 実は先のsort_byというメソッドはHashクラスにも Arrayクラスにも定義されていません それが定義されているのはEnumerableというモジュールです モジュールというのはクラスの…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その8)

先のスクリプトにわたしは何の不満もありません でもリファクタリングはクセになります 3行目のsortのブロックが 気になる人には気になります p DICTIONARY.sort { |a, b| b[1] <=> a[1] }[0...30] Version04 少し直しましょう WORDS = ARGF.read.downcase.s…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その7)

10行程度のスクリプトで目的を達成できました 前置きばかりが長かったこの連載も これで終えられます でも... わたしはどうも気に入りません 先のコードは分かりにくいというか Rubyっぽくないというか... もう一度スクリプトを見てみます dic = Hash.new(0)…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その6)

さてこれまでに得た知識を基礎として 目的のRubyスクリプトを作ります 最初にベースとなるコードを提示して これを少しずつ改良していきながらRubyを学びます まずは手元にRubyで処理できる 英文小説のテキストファイルを用意します 以下のサイトがよさそう…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その5)

Rubyはユーザフレンドリです Rubyにおいてオブジェクト指向はその基本的設計思想です Ruby設計者まつもとゆきひろさん(愛称Matz)は その思想を頑なに守りながら 一方でプログラマーの負担を最小化するために ユーザインタフェースをよりフレンドリなものにし…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その4)

クラスはオブジェクトの母であってクラスの子であるオブジェクトです こういう表現は「クレタ人は嘘つきである」と言った クレタ人のセリフに聞こえるでしょう*1 でもわたしはクレタ人ではありません Rubyワールドにおいてこの表題は事実なのです 先に「オブ…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その3)

Rubyのブロックは仮装オブジェクトです 次にRubyのブロックを説明します 手続き型言語同様 Rubyもifやwhileなどの制御構造をサポートしており メソッド定義式の中でこれらを使うことができます*1 def hello(name) if name.length > 10 name.squeeze! else na…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その2)

これから説明するのは次の4つの項目です Rubyはオブジェクト指向です Rubyのブロックは仮装オブジェクトです クラスはオブジェクトの母であってクラスの子であるオブジェクトです Rubyはユーザフレンドリです 1. Rubyはオブジェクト指向です 依然として現在…

Rubyチュートリアル 〜英文小説の最頻出ワードを見つけよう!(その1)

ー2020年ー インターネットにおけるワード枯渇問題が深刻化している この10年で紙ベースのドキュメントから ビットドキュメントへの移行が急速に進行し 現在では新刊書籍の90%は書店に置かれることなく ネット上の大規模ストレージに直接格納されるようにな…

Rubyでスペル修正プログラムを書こう!

青木靖さんの訳「スペル修正プログラムはどう書くか」を通して Peter Norvigさんの「How to Write a Spelling Corrector」を知った 僅か21行のPythonコードで スペル修正プログラムが書かれている Pythonのコードを初めて見たけど 解説が丁寧にされているこ…

再帰は再帰なんかじゃない!末尾再帰こそが真の再帰なんだ!

ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 再帰は再帰なんかじゃない!末尾再帰こそが真の再帰なんだ! : melborne.github.com - 「計算機プログラムの構造と解…

我らにラテンの血を!!

任天堂Wii-みんなで投票チャンネルより

現行著作権法の問題はその非対称性にある

権利は常に義務と対である 誰かの権利は誰かの義務を生む 著作権や特許権は所有権と同様に私権である これらの権利は一市民の権利である 一市民の権利は公権すなわち国家の権利とは異なる 著作権は国家が国民に規範を求める性質のものではなく その権利に関…

文化と変化と情報化

情報は社会を変える中核的要素である 情報の量や質が変わると社会が変わる 技術の進歩は情報の流通を加速させる より正確には技術の進歩とは情報流通の進歩とほぼ同義である つまり技術の進歩が続く限り社会の変化は続く 技術の進歩が是であるか非であるかに…