6月18日(日)に秋葉原 dress TOKYOで行われた「Σ-sigma- presents『type A』」に参加してきました。
土日は忙しかったので、まだインストールも出来ていません。
付属の2ndマニュアルに期待していたのですが、これがぜんぜんダメです。Civ3のときは4gamer.netが書いたので、有用なマニュアルになっており、最高難易度クリアを目指す「天帝への道」という上級者に役立つ内容も含まれていました。Civ3をプレイする時間が取れないときでも、マニュアルを読み、Civ雰囲気を味わったりしたものです。
Civ4 2ndマニュアルのダメな点
ついかっとなって入門記事とか書きたくなっていますが、そこまで時間が取れるかな、と冷静になってみたりしています。
勉強用のRubyコードを書いています。(yieldの理解が足りてない感じがするの)
こういうときにirbは便利。構文を間違えつつ、TRY&ERRORするので、エディタでコードを書いて、irb(のコマンドプロンプト)に貼り付けていました。
最初はうまく行っていたんですが、突然。
Display all 314 possibilities? (y or n)
とか出てきて、数十行コマンドリストがダダーっと表示された。びびった。
原因を調べてみたところ、インデントにタブ文字を使用していて、2段階インデントを掘るコードでタブ・タブとなった際に、irbの自動補完機能がコマンド一覧を表示してくれた、というオチ。
いつもはタブでインデントしているんですが、rubyに関してはスペースが無難っぽい。
C言語の関数ポインタの逆みたいなもんすかね。処理構造は定義するけど、具体的な処理は、呼び出し側が定義できる、と。
Rubyリファレンスマニュアルに載っているコードを一通りに入力し、以下のサンプルを作ってみた。
渡された配列の各要素をひとつ飛ばしでループする。
def skipping(arr)
idx = 0
while idx < arr.size
yield(arr[idx])
idx += 2
end
end
skipping([1, 2, 3, 4, 5]) do |num|
p num
end # => 1, 3, 5
今、ブームの素数表示。
def priming(arr)
for num in arr
next if num <= 1
isPrime = true
2.upto(num) { |i| isPrime = false if num % i == 0 && num != i }
if isPrime == true then
yield num
end
end
end
primes = []
priming((1..100).to_a) {|prime| primes << prime}
p primes # => [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
配列に対しての処理には便利そう。「条件を満たす要素だけ抜き出す」「並び替え」など。標準機能となっているわけですが・・・(苦笑) これらのリッチな処理はyieldで実装されている予感。
友達とM:tGというカードゲームについて懐古話をしていた際に、凶悪コンボ「チャネルボール」の失敗確率が気になりました。
一般的な問題に直しますと、A・B・Cそれぞれ20枚ずつ入ったカードの山から7枚カードを引き、AABCが含まれている確率を調べるということになります。
以下、やっつけコード。
def channelBall
deck = []
20.times do
deck << "BlackLotus"
deck << "Fireball"
deck << "Channel"
end
deck.each_index do |i|
j = rand(deck.length)
deck[i], deck[j] = deck[j], deck[i]
end
hand = []
7.times do |i|
hand << deck[i]
end
hand
end
success_cnt = 0
fail_cnt = 0
success_hand = [ "BlackLotus", "BlackLotus", "Channel", "Fireball" ]
10000.times do
hand = channelBall
if (success_hand - hand).empty?
success_cnt += 1
else
fail_cnt += 1
end
end
p "Success Count #{success_cnt}"
p "Fail Count #{fail_cnt}"
失敗確率は15%はぐらいみたいです。意外と多いのねぇ、という印象。
寝る前に確認したら5回目がアップされてまして、新曲がかかるんじゃないかと思われるので、聴かないといけないわけで。あぅあぅ。寝ようと思ったのに(笑)
はてなブックマークを見ていたら
というエントリがあったので、試してみました。
サイトごとの移転なので、mod_rewriteを使用した方法を試してみたのですが、サーバにモジュールがインストールされていないようで、動作せず。
旧サーバのマニュアルを読んだところ、「Redirect permanentを使ってね」とあったので、以下のように設定したところ、うまく行きました。
Redirect permanent / http://blog.studiohff.net/
この方法とmod_rewriteの違いは理解しておらず。動いているようだし、まぁ、いっか、という感じです。
余談なんですけど、旧サイトの1週間分のアクセスログを確認したところ
リダイレクトされたリクエスト件数: 8,977
意外とアクセスされていてびっくり。
買ってきました。特集は
ライブドアにびっくりした。逆境のこの時期だけど、素晴らしい技術を持っている会社には間違いないわけで、こういうポジティブな内容で社名が出てくるのは良いと思う。粉飾決済をした経営陣の罪はちゃんと追及すべきだけど、そのせいで頑張って最先端サービスを作ってきたエンジニアまで罪人扱いされることはないさね。
Rails連載は「Rails1.1のActiveRecord新機能」となってます。これもAWDwR本でActiveRecord基礎しか知らない自分にはうれしい内容です。
社内で新人教育している人が発言していたのですが、あまり使わないよね?
「シングルクオート」のバックバージョンだからなのだろうけど、「ダブルクオート」のバックバージョンが無いから、
「バッククオート」でわかるわけで。
ついでに「クオート」と「クオテーション」「クォテーション」はどちらが多数派なのか気になったので、グーグル先生に聞いてみた。
「クオートvsクオテーション」では意外にも大差での勝利。接戦かと思ったんですが。
「バックシングルクオート」はやっぱり少数派みたいです。冗長だものね。
ちなみに自分はどっちを使っているかなー、と思い出してみたところ、基本は「クオート」ですが、発声する際は「クオテーション」たまに使っている気がします。声に出した際に収まりがいいというか・・・。
皆さんはどっちっすか?
ライヴDVDなんて、前世紀以来だよ!!
今、iPodの「トップレート」で再生すると全体の20%は水樹奈々さんの曲ですので、「元は取れそうだなぁ」と思って買ってみました。最近はすっかりライヴ好きですねっ。
一曲目の「RUSH&DASH!」の歌い出しに合わせて、ドラム&と爆発、もうね、背筋がゾクゾク来たよ。ここで元を取った気がする。自分的にそれくらいツボな曲で、たまらないタイミングでございました。
DVD3枚組(武道館ライブ本編2枚・全国ツアーダイジェスト1枚)というすごいボリューム。これで7000円弱つーんだからすごいよね。
久々にmp3以外でまともな音楽を聴いたんですが、やっぱり圧縮の過程で色んなモノが落ちてるんだなー、と感じましたわ。かなりアヒャれる音質。アヒャヒャヒャヒャヒャ。
んで、ライヴ内容ですが、演出過多じゃなく、ちゃんと歌ってくれているんで、非常に満足。パフォーマンス重視のライヴはキライなので。アーティストは歌って弾いてなんぼですよ。あとはライヴの「生」感が伝わってくる内容なら言うことなし。
「ふつうのHaskellプログラミング」の写経をしていた際にはまりました。
p64からのexpnadコマンドのところなんですが、
c = if c == '\t' then '@' else c
の一文が動いてくれません。(ファイル入力・標準入力ともにNG)
cygwin上でコンパイルしたイメージを使用して、コマンドプロンプトで実行したところ、正常に動作。cygwinの内部文字コードあたりが問題を起こしているのかなぁ・・・。裏は取ってませんケド。
http://pc.watch.impress.co.jp/docs/2006/0627/sony1.htm
こ れ は 安 い 。
ワンセグチューナーなんかも付いちゃって商品力もアップ(1.5時間しか再生できないんじゃ微妙っすけどね)
しかし、通常モデルを店頭で触ってみたわけですが、キーボードが厳しかった。押しにくいだろうとは予想していましたが、予想以上に厳しかった。
つぅことで、おそらく買わないだろうなー、とは思いますが、SONYグッジョブ!!という価格設定だとは思います。あぶく銭が入ったら買っちゃうかもわからん。
http://pc.watch.impress.co.jp/docs/2006/0628/hot434.htm
Windows Vistaの目玉機能→Service Packで提供→キャンセル、と。
この機能には期待していただけに残念です。OS層で統一された検索プラットフォームを作ってくれれば、いろんな使い道が思いつくだけにとても残念です。
早速
gem update rails
しております。会社の回線遅いので、結構かかりそう〜。変更点は何なのかしらん、かしらん。
インストール完了。
そして、リリースノートを読んでみた。セキュリティ対策とちょっとしたバグ修正のみらしい。CRUD対応はバージョン1.2。(1.2はすぐに出る、と書いてあるように思える。しかし、英語は得意ではないので、自信が無い)
リリースノート
http://weblog.rubyonrails.org/2006/6/27/rails-1-1-3-security-fix-and-minor-fixes
http://jp.rubyist.net/magazine/?RubyKaigi2006
おもしろかったー、3時間かけて読みました。
fold_length = 60
main = do cs <- getContents
putStr $ unlines $ concat $ map mysplit $ lines cs
mysplit :: String -> [String]
mysplit cs = mysplit_sub $ splitAt fold_length cs
where
mysplit_sub :: (String,String) -> [String]
mysplit_sub (a,b)
| null b = [a]
| length b > fold_length =
a : (mysplit_sub $ splitAt fold_length b)
| otherwise = [a,b]
作り終えたあと、巻末の回答を確認。・・・うわ、めっさエレガントなコードが。caseの使用が思いつかなかったので、mysplit関数とmysplit_sub関数を作っていますが、caseを使えばひとつにまとめられるわけか。
余談ですけど、第4章の回答を確認したところ、第4章時点では紹介されていない「関数合成」を使った回答例が載っていた。これってどうかなぁ・・・。本を最初から読みつつ、理解度チェックのために課題をやっているわけだから、いくらシンプルなコードになるといえ、回答としてはNGだと思う。自分なりに考えに考えて出した答えがベストにどれだけ近い形に出来たのか、それを確認したいのに・・・。