2011-11-05

ラムダ計算

dev

ふぁいたん が布教してきたのでインタプリタ書いた.

らむだかわいいです.何でもいいので引数を渡すとreadlineで入力待ちになります.

なんでかは知らんけどローカル変数にLambdaオブジェクト作りまくったりとかで遊んでいます. 是非コード読解してみてください!!

参考資料

あわせて読みたい

Published at 2011-11-05 22:20:26 +0900 | Permalink
2011-10-13

FizzBuzz seems be deprecated... How about FibBuzz? #fibbuzz

dev

日本語版

@lchin: "FizzBuzz、4年前に飽きたわー"って誰かまだ言っていないか?あくまで省力化のための足切りとしてのものだけど、出まわりすぎた時点でかなり効果が低下しているはずだ。まぁ、採用基準よりも「不採用基準」として使うだろう

(Are there any person still saying "FizzBuzz, I've lost interest in that 4 years ago..."? We use FizzBuzz for cutoff of a test of employment, but FizzBuzz's effect is getting low because it's too popular. If I needs to use it, I'll use FizzBuzz as "Not Adopting standard", not "Adopting standard.")

http://twitter.com/#!/lchin/status/124138347819053058

I've seen this tweet, and agreed. Because I remembered a FizzBuzz code, so I thought it's deprecated. I thought about a game that is more more complicated than FizzBuzz but still it can write easily.

FizzBuzz... Fizz... Fib... FibBuzz... ... FibBuzz!

Fib is used often for a method name that get Fibonacci number. Fib is Fibonacci.

The following is a rule of FibBuzz:

FibBuzz

FibBuzz: Enumerate fibonacci numbers starting from 1, but replace multiples of 3 with "Fizz" and multiples of 5 with "Buzz" and multiples of both with "FizzBuzz"

Using as a real question, you have to set a limitation, like "100 fibonacci numbers."

Golf

I've created a problem on golf.shinh.org

http://golf.shinh.org/p.rb?FibBuzz

See Also: http://en.wikipedia.org/wiki/Code_golf

FibBuzz sample code (Ruby)

puts (1..100).inject([1,1]){|s| s<<s[-1]+s[-2] }.map{|i| i%15==0 ? "FizzBuzz" : i%3==0 ? "Fizz" : i%5==0 ? "Buzz" : i }

BuzzFib

First I declared FibBuzz as shown below:

BuzzFib: Enumerate the natural numbers. but replace the fibonacci numbers with "Fib" and multiples of 5 with "Buzz" and the fibonacci numbers which divisible by 5 with "BuzzFib"

As same as above, if you use this as a real question, you have to set a limitation like this: "Enumerate the natural numbers from 1 to 100."

But I decided this is not FibBuzz because of reasons shown later. I declared this as BuzzFib.

BuzzFib sample code (Ruby)

puts (1..100).inject([[1,1],[]]){|(s,r),n|[s<<s[-1]+s[-2],r<<((_="#{s.include?(n)?:Fib:""}#{n%5==0?:Buzz:""}").empty?? n:_)]}[-1]

Golf

I've also created a BuzzFib problem on golf.shinh.org.

http://golf.shinh.org/p.rb?BuzzFib

Why I declared as BuzzFib?

I've thought about fibonacci numbers + FizzBuzz because it seems interesting. and I thought a BuzzFib. (It was a FibBuzz then. now It's BuzzFib)

But it's complex and... see the result shown here:

["Fib", "Fib", "Fib", 4, "FibBuzz", 6, 7, "Fib", 9, "Buzz", 11, 12, "Fib", 14, "Buzz", 16, 17, 18, 19, "Buzz", "Fib", 22, 23, 24, "Buzz", 26, 27, 28, 29, "Buzz", 31, 32, 33, "Fib", "Buzz", 36, 37, 38, 39, "Buzz", 41, 42, 43, 44, "Buzz", 46, 47, 48, 49, "Buzz", 51, 52, 53, 54, "FibBuzz", 56, 57, 58, 59, "Buzz", 61, 62, 63, 64, "Buzz", 66, 67, 68, 69, "Buzz", 71, 72, 73, 74, "Buzz", 76, 77, 78, 79, "Buzz", 81, 82, 83, 84, "Buzz", 86, 87, 88, "Fib", "Buzz", 91, 92, 93, 94, "Buzz", 96, 97, 98, 99, "Buzz"] Like this.

You know, no many "Fib"s.

Because fib(12) > 100 is true. it means fibonacci number gets higher number in short times.

I thought this is not beautiful result, and BuzzFib seems complex problem, so I declared this rule as BuzzFib and I declared FibBuzz as another rule.

Published at 2011-10-13 02:08:09 +0900 | Permalink
2011-10-12

FizzBuzz は時代遅れらしいので FibBuzz はどうでしょう #fibbuzz

dev

English version of this entry

@lchin: "FizzBuzz、4年前に飽きたわー"って誰かまだ言っていないか?あくまで省力化のための足切りとしてのものだけど、出まわりすぎた時点でかなり効果が低下しているはずだ。まぁ、採用基準よりも「不採用基準」として使うだろう

http://twitter.com/#!/lchin/status/124138347819053058

こういう話が上がっていたので,FizzBuzz より複雑で,でも簡単にかけるものは何か考えた.確かにFizzBuzzはわたしも__コードを暗記してるようなものだし__,そろそろ時代遅れなのではないかと思った.

FizzBuzz... Fizz... Fib... FibBuzz... ということで FibBuzz という言葉が思いついた.

Fib はフィボナッチ数列を求めるメソッドなどでよく使われる名前というか略称.Fibonacci の頭文字になる.つまり,ルールはこうだ

FibBuzz

FibBuzz: フィボナッチ数を1番目から順番に列挙していく.ただし,3で割り切れるならFizz, 5で割り切れるならBuzz, 3と5両方で割り切れる場合はFizzBuzzを出力する事.3と5どちらも割り切れない場合はそのまま出力して良い.

(実際に問題にするときは100まで等と制限をつけましょう)

ゴルフ

shinhさんのゴルフ場 に問題を作成しました.

http://golf.shinh.org/p.rb?FibBuzz

ゴルフはコードをなるべく短くするスポーツです.詳細はぐぐってください.

FibBuzz 実装例 (Ruby)

100 までの FibBuzz.

puts (1..100).inject([1,1]){|s| s<<s[-1]+s[-2] }.map{|i| i%15==0 ? "FizzBuzz" : i%3==0 ? "Fizz" : i%5==0 ? "Buzz" : i }

BuzzFib

初期の FibBuzz のルールはこうだった:

BuzzFib: 1から数を列挙していく.それがフィボナッチ数ならFib, 5で割り切れるならBuzz, その両方ならBuzzFib, その両方でもない場合はその数を出力してください

同じように100まで等と制限をかけましょう.実際は.

これは後述する理由で FibBuzz とは別にした.

BuzzFib の実装例 (Ruby)

100 までの BuzzFib.

puts (1..100).inject([[1,1],[]]){|(s,r),n|[s<<s[-1]+s[-2],r<<((_="#{s.include?(n)?:Fib:""}#{n%5==0?:Buzz:""}").empty?? n:_)]}[-1]

ゴルフ

BuzzFib のゴルフ問題も作成した.

http://golf.shinh.org/p.rb?BuzzFib

経緯

フィボナッチ数 + FizzBuzz は楽しそうだなーとルールを考え, 最初,上記のBuzzFibのルールを考えてFibBuzzを定義したのだけど…

このルールだとちょっと複雑というかそれ以前に結果が

["Fib", "Fib", "Fib", 4, "FibBuzz", 6, 7, "Fib", 9, "Buzz", 11, 12, "Fib", 14, "Buzz", 16, 17, 18, 19, "Buzz", "Fib", 22, 23, 24, "Buzz", 26, 27, 28, 29, "Buzz", 31, 32, 33, "Fib", "Buzz", 36, 37, 38, 39, "Buzz", 41, 42, 43, 44, "Buzz", 46, 47, 48, 49, "Buzz", 51, 52, 53, 54, "FibBuzz", 56, 57, 58, 59, "Buzz", 61, 62, 63, 64, "Buzz", 66, 67, 68, 69, "Buzz", 71, 72, 73, 74, "Buzz", 76, 77, 78, 79, "Buzz", 81, 82, 83, 84, "Buzz", 86, 87, 88, "Fib", "Buzz", 91, 92, 93, 94, "Buzz", 96, 97, 98, 99, "Buzz"] こんな感じ.

見て分かる通り,Fib が少なすぎる.

理由は fib(12) の段階で fib(12) > 100 を満たしてしまう.つまりフィボナッチ数列のほうが変化が大きいため Fib が少なくなってしまう.

これじゃ見栄え悪いし,しかもちょっと複雑すぎるなぁと思って,冒頭のルールを最終的に自分の中で fibbuzz として,このルールは buzzfib とすることにした.

よければ自分の好きな言語で fibbuzz, buzzfib をといてみてください.

Published at 2011-10-12 16:58:52 +0900 | Permalink
2011-09-12

Google Developer Day 2011 Tokyo: DevQuiz やった

dev

やってみた.コード部分はgistへのリンクになっていますので,コードを見たくない人も安心の記事 になっております.

... Continue Reading...
Published at 2011-09-12 03:42:25 +0900 | Permalink
2011-07-20

RubyKaigi2011 2nd & 3rd day report #rubykaigi #rubykaigi2011

dev

P7180642

最後のRubyKaigiが終了しましたね!

おつかれさまでした

... Continue Reading...
Published at 2011-07-20 01:18:11 +0900 | Permalink
2011-06-26

A Patch from…

dev

http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?revision=32235&view=revision

Rubyのリビジョン32235で,ついにこのような記述が登場.

A patch from Yukihiro Matsumoto  <matz AT ruby-lang.org>.

どうしてこうなった.

該当のチケットを見てみると,matzが

確認ありがとうございます。assocの後ろにもカンマを許す方向で
パッチをコミットしようと思います。

と言ったまま2週間放置されていてカッとなって別の人によってコミットされた次第ぽい.

Published at 2011-06-26 10:18:30 +0900 | Permalink
2011-05-19

Twitter APIのパーミッションレベルが変わるそうです

dev

Twitter の OAuth のパーミッションレベルが新しくなり,標準ではダイレクトメッセージにアクセスできなくなるようです.

また,xAuth などで認証している「サードパーティ」アプリケーションは新パーミッションレベルでも ダイレクトメッセージにアクセスできなくなるみたいです.

この改良は待ち望んでいたものの,xAuthでアクセスできなくなるのは痛いですね.

http://groups.google.com/group/twitter-api-announce/browse_thread/thread/e954fc0f8b5aa6ec?pli=1

からの翻訳です.

また,移行期間の変更について http://groups.google.com/group/twitter-development-talk/msg/dbe591c0088a4b18 で書かれている内容を反映しています.

そして以下の内容については保証しません.最新の情報はtwitter-api-announce,twitter-api-talkなどを見てください.

やあ.

わたしたちは最近,OAuth の認証画面でアプリケーションに渡される権限を わかりやすくする変更を加えました.Twitter ユーザー・デベロッパーから の貴重なフィードバックが私たちの変更を助け,どこをはっきりさせたほう がいいかを教えてくれました.

ユーザーとデベロッパー双方から,さらに細かいパーミッションレベルを 設定したいという要望が特に多かったです.

このフィードバックへの返答として,わたしたちは新たなパーミッション レベルを作成しました.それは "Read, Write & Direct Messages" です. このパーミッションレベルは Read, Write に加えダイレクトメッセージを Read, Delete することを許可します. そしてこのパーミッションを施行するとき,既存の "Read & Write" の パーミッションのアプリケーションはダイレクトメッセージをRead, Delete することができなくなります.

そしてまた,わたしたちはこのパーミッションを適用するのは OAuth のみに 絞りました.xAuth はこのパーミッションを適用することができず,OAuthの /authorize を用いた Web でのフローのみで適用されます.

これは,xAuth を使っていてダイレクトメッセージにアクセスする必要性があ る場合は OAuth と Web ページを利用して認証する必要があるということを 意味します.

この改善についてアプリケーションはにはどのような変更すれば良いのか?

もしダイレクトメッセージにアクセスする必要がない場合: あなたはアプリケーションに何も変更を加える必要はありません. この新パーミッションレベルが施行されるとき,あなたのアプリケーション に登録されている read もしくは read/write レベルのアクセストークンは ダイレクトメッセージにアクセスすることができなくなります.

もしダイレクトメッセージにアクセスする必要がある場合: あなたはまず, https://dev.twitter.com/apps からあなたのアプリケーシ ョンのパーミッションレベルを変更する必要があります. そしてそのパーミッションは既に存在しているトークンについては反映され ないので,ユーザーに再度認証してもらう必要があります.

わたしたちはこの変更に時間が必要なことを理解しています.そこで,2011/6/14までを移行期間とします.移行期間中は,まだ Read/Write レベルのトークンはこの変更の影響を受けませんが,移行期間が 終わってからはダイレクトメッセージにアクセス・削除することができなくなります.

影響を受ける API と リクエスト

REST APIに置いて,Read と Read/Write アプリケーションは以下のAPIを利用 することができなくなります:

  • /1/direct_messages.{format}
  • /1/direct_messages/sent.{format}
  • /1/direct_messages/show.{format}
  • /1/direct_messages/destroy.{format}

ストリーミングAPIについては, User Streams と Site Streams はユーザーが ダイレクトメッセージへのアクセスを認可した場合のみ,ダイレクトメッセージを 受信するようになります.

また, "Sign-in with Twitter" か xAuth を使っているアプリケーションは Read か Read/Write のトークンのみを得ることができるようになります.

つまりこれは,Webページを利用して OAuth 認証をするアプリケーションのみが ダイレクトメッセージに対してアクセスできるトークンを受け取ることができる という事です.その他のxAuthを含む認証手段は Read/Write レベルのトークン のみを受信するようになります.

このパーミッションが適用されたとき何が起こるのか?

わたしたちがこの新パーミッションレベルを適用したとき,全ての Read と Read/Write レベルのサードパーティアプリケーション向けのアクセストークン はユーザーのダイレクトメッセージを読めなくなります.あらゆるダイレクト メッセージの読み込みリクエストに対して HTTP 403 エラーを返すようになり ます.

たとえば,次のURL: https://api.twitter.com/1/direct_messages/sent.json に対して GET リクエストをすると HTTP 403 Forbidden ステータスコードと 以下のレスポンスボディーが返ってきます:

{"errors":[{"code":93,"message":"This application is not allowed to access or delete your direct messages"}]}

キーポイント

  • もしユーザーのダイレクトメッセージにアクセスする必要がある場合,あなたは アプリケーションのパーミッションレベルを変更,またユーザーに再認証してもらい 新しいトークンを得る必要があります.
  • ダイレクトメッセージにアクセス出来るのは OAuth /authorize web フローのみで す.たとえば,xAuth を利用して認証した場合ダイレクトメッセージへのアクセスは 許可されません.
  • わたしたちがこの新パーミッションレベルを施行したとき,既存の全ての Read/ Write と Read パーミッションレベルのトークンはダイレクトメッセージにアクセス ,削除することができなくなります.
  • ただし,Read/Write については施行後も引き続きダイレクトメッセージの送信は 許可されます.

わたしたちはまもなく新しい情報を developer resources permission model ページ に掲載します:

https://dev.twitter.com/pages/application-permission-model

また,私たちは今回の件について twitter blog にエントリーしました:

http://blog.twitter.com/2011/05/mission-permission.html

Best, @themattharris

Published at 2011-05-19 01:43:29 +0900 | Permalink
2011-05-08

日記

dev

blogに書くほどまでじゃないような感じのものはこっちに書くことにした

Probably Diary

yakiudon もリリース。

Published at 2011-05-08 00:29:18 +0900 | Permalink
2011-03-14

unite.vimとunite-teidenで東京電力の計画停電情報を検索しよう

dev

さっきもデカい地震がありましたが元気です。生きてます。

しかし昨日の夜に計画停電が決まってしまい、おそらく今日の午後にはオフラインになって死んでしまうのではないかと困惑しております。

そういうことで町名などを入力すると@fizsoft氏提供のCSVデータを検索して表示する uniteプラグインを作ってみました。

必要なもの

  • unite.vim
  • cURL (OSXなら標準で入っている)
  • あたらしめのvim

unite-teidenのインストール

https://gist.github.com/868618

~/.vim/autoload/unite/sources ディレクトリに入れてVim再起動

使い方

:Unite teidenのあとiで町名の一部を入力すると...!

デモ

http://www.youtube.com/watch?v=KNMCN3_SBec

Published at 2011-03-14 01:27:43 +0900 | Permalink
2011-03-05

Using post-receive hook in git

dev

What's git hook?

Git call a shell script when some actions occur.

post-receive hook will be called when receive git push (in remote server).

man githooks

post-receive
   This hook is invoked by git-receive-pack on the remote repository, which happens when a git push is done on a local repository. It executes on the remote repository
   once after all the refs have been updated.

How it's used

  • Post to IRC
  • Send Mail
  • Kick UnitTest
  • Kick WebHook
  • etc...

Example

http://pasra.tk/ is working by some members, so I created hook to do the following things:

Codes

sayirc is

post-receive hook usage

Arguments specified by STDIN with format <old rev> <new rev> <ref>.

First set old rev and new rev to ENV using Ruby.

Then get log by git log $OLD..$NEW, and pass to sayirc.

Finally git pull at www public directory.

Published at 2011-03-05 08:31:23 +0900 | Permalink
2011-02-21

I become ruby commiter

dev

eb87f08d82d018e07cd7747ccb6559b7.png [ruby-dev:43227] Re: [Ruby 1.9-Feature#4415][Open] Rubyのtest-allを並列化するパッチが完成しました

I'm very surprising.... What's happen?

matz said,

コミット権も差し上げましょう。希望するアカウント名、PGP署名 したssh2公開鍵を cvs-admin に送ってください。

I give an account for you. Please send account name that one wants to create and your ssh2 public key (PGP signed) to cvs-admin.

久々の最年少更新か。

Now you're the youngest ruby commiter.

... Wow, I become ruby commiter.

And I mailed SSH key now.

I was very very, very surprised to attain a one of goals in this year, because 2011 pasted just 2 months...!

I continue to devote oneself.

Thanks.

Published at 2011-02-21 14:02:53 +0900 | Permalink
2011-02-21

Rubyのコミッタになりました

dev

eb87f08d82d018e07cd7747ccb6559b7.png [ruby-dev:43227] Re: [Ruby 1.9-Feature#4415][Open] Rubyのtest-allを並列化するパッチが完成しました

な… 何を言っているのかわからないと思うが、あ…ありのまま今起こった事を話すぜ!

rubyのコミッタになっていた...!

コミット権も差し上げましょう。希望するアカウント名、PGP署名 したssh2公開鍵を cvs-admin / ruby-lang.org に送ってください。

久々の最年少更新か。

!?

ということでまぁ、とりあえず今さっきcvs-adminにメール送信をdoneしました。

まだ年明けて2ヶ月なのに今年の目標の1つを達成してしまって__大変__、__大変__、ほんとうに、焦っています。

あ、この機能について2月26日(土)のとちぎRuby会議03 (非公式試験ustあるよ! URL未定)で喋る予定です。

これからも精進していきたいと思います。

そして各位、ありがとうございます!

Published at 2011-02-21 13:51:47 +0900 | Permalink