- cd to
- Aptana Studio
- CleanArchiver
- Cyberduck
- DropLHa
- DropUnLHa
- Evernote
- Firefox3
- Firebug
- Firecookie
- FireMobileSimulator
- FireQuery
- Greasemonkey
- Hatena Bookmark
- User Agent Switcher
- Vimperator
- Vimperator-ja
- Web Developer
- 中止ボタンがバッテン髪飾りに見えて困る
- Firefox4
- Gimp
- Gitbox
- GitX
- Google Chrome
- iLife
- Keynote (iWork '08)
- Numbers
- Pages (iWork '08)
- ATOK 2009
- KeePassX
- Kindle for Mac
- MacPorts
- MacVim Kaoriya
- NetBeans
- Opera
- QuickSilver
- Reeder
- Skype
- VMware Fusion
- YoruFukurou
- Xcode 4
- KeyRemap4MacBook
- Growl
- StartupSound.prefPane
- Flip4Mac
はてな義援金受付から寄付登録しました
昨日の地震はすごかったですね。さすがに机の下に潜りました。。。
電車がとまってしまったので徒歩とタクシーでの帰宅になりました
家では電子レンジが落っこちたくらいで、iMacや液晶テレビが倒れることはありませんでした。電子レンジも落ち方がよかったのかガラスが割れたりすることもなく。
さて、さまざまな機関・企業で義援金の受付がはじまっていますが、日本赤十字社のWebサイトは断続的にページが表示できないような状態になっています。はてなでも義援金の受付を行っている、ということなので、ポイントの購入を含めて寄付をしました。いつも利用している・信頼しているサービスから寄付できるというのはとてもいいことですね。
いい機会なのでニュージーランド地震と宮崎鳥インフルエンザにも寄付。ポイントで払うと はてな ポイント支払・受取履歴から参照できます。
Redmine 1.1.1 インストール
sudo aptitude install ruby1.8 rubygems1.8 sudo gem install rack -v=1.0.1 sudo aptitude install rake sudo gem install -v=0.4.2 i18n sudo aptitude install libmysqlclient-dev sudo gem install mysql sudo gem install passenger sudo aptitude install libcurl4-openssl-dev apache2-prefork-dev libapr1-dev libaprutil1-dev sudo passenger-install-apache2-module
jQuery.proxy()の存在意義
ポインタのみのエントリです。
4.2 コールバックパターンを4.2.2 コールバックとスコープまで読むと
jQuery.proxy() の存在意義がわかると思います。
JavaScriptパターン ―優れたアプリケーションのための作法
- 作者: Stoyan Stefanov,豊福剛
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/02/16
- メディア: 大型本
- 購入: 22人 クリック: 907回
- この商品を含むブログ (77件) を見る
JavaScript パターン 4.10 カリー化
4.10.1 関数の適用
「関数の呼び出し」を「関数の適用」という正確な説明に訂正している
関数を呼び出すサンプル …(1)
sayHi('world');
関数を適用するサンプル ...(2)
sayHi.apply(null, ["world"]);
2つのコードでやっていることは同じで、「関数の呼び出し」は「関数の適用」のシンタックスシュガーに過ぎない、
と説明する。
また、sayHi関数が、alienオブジェクトのメソッドだった場合、それぞれ
alien.sayHi('world'); alien.sayHi.apply(alien, ['world']);
となる。メソッドの適用時は、関数内部でthisに束縛されるオブジェクトを指定しなければならない。
関数の種類 (JavaScriptパターン 4.1.1 用語の整理)
名前付き関数式 (named function expression)
var add = function add(a, b) { return a + b; };
console.log(add.name); // => "add"
関数式 (無名関数) (function expression, a.k.a anonymous function)
var add = function (a, b) { return a + b; };
console.log(add.name); // => "" (Firefox, WebKit), => undefined (IE)
関数宣言 (function declarations)
function add(a, b) { return a + b; }
console.log(add.name); // => "add"
JavaScriptパターン ―優れたアプリケーションのための作法
- 作者: Stoyan Stefanov,豊福剛
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/02/16
- メディア: 大型本
- 購入: 22人 クリック: 907回
- この商品を含むブログ (77件) を見る
楽天の入社問題
何さんが実際に作問したなかで、自分でも気に入っている問題はこうだ。「ここに100段の階段があります。一歩で1段か2段か3段進むとして、100段登り切るパターンは何通りありますか。この問題を解くプログラムをできるだけ短い行数で書きなさい」――。さて皆さんはこの問題を解けるだろうか。
解いてみた(自分で解きたい人のために空白をあけてます)
#!/usr/bin/env python class F: def f(self, num): if num < 1: return 0 res = self.f(num - 3) + self.f(num - 2) + self.f(num - 1) if num < 4: res += 1 return res if __name__ == '__main__': f = F() print f.f(100)
ただし、これを普通のPCで計算するといつまでも結果が帰ってこないので、f.f(n) の値をキャッシュする
#!/usr/bin/env python class F: def __init__(self): self.cache = {} def f(self, num): if self.cache.has_key(num): return self.cache[num] if num < 1: return 0 res = self.f(num - 3) + self.f(num - 2) + self.f(num - 1) if num < 4: res += 1 self.cache[num] = res return res if __name__ == '__main__': f = F() print f.f(100)
答え:180396380815100901214157639 通り
解説
…を試みる
n段の時の組み合わせを求める関数F(n)を考える(nは自然数)
100段上るときの最期の1歩のパターンは1段、2段、3段があるので、
F(100) = F(99) + F(98) + F(97) となる
一般化すると F(n) = F(n - 1) + F(n - 2) + F(n - 3)
ただしこれは4以上のとき。
なぜ4以上かというと、1 <= n <= 3 のとき、1歩で到達することをカウントしてないし、
nに0以下の数字が入ることが考えられてない。
ので、n <= 0 のとき F(n) = 0 とすれば
1 <= n <= 3 のときは F(n - 1) + F(n - 2) + F(n - 3) + 1
まとめると、
F(n) = 0 (n <= 0のとき)
F(n) = F(n - 1) + F(n - 2) + F(n - 3) + 1 (1 <= n <= 3のとき)
F(n) = F(n - 1) + F(n - 2) + F(n - 3) (n >= 4のとき)
…って感じかなぁ