2013-12-19(木) | -- (permalink)

代入の効用について説明するだけにしては、Ex 3.5. はちょっとやり過ぎな気もするが、なかなか興味深い内容ではある。

Monte Carlo integration is a method of estimating definite integrals by means of Monte Carlo simulation. Consider computing the area of a region of space described by a predicate P(x, y) that is true for points (x, y) in the region and false ...


2013-12-12(木) | -- (permalink)

第2回potatotipsに参加し、発表してきた。

主にAVFoundationを利用した、iOSでの動画編集の話をした。使用したスライドは以下のものである。

Video Editing in iOS from Yusei Nishiyama

噂通りのハイレベルさで、1人持ち時間5分という短さながらも、濃い内容の発表ばかりであった。
特に珍しい意見でもないと思うが、

これらが揃うと、「良い発表」だったなと感じる。
とはいえ、普通は1つ満たすだけでも難しい。

それぞれのトレードオフもあるので、全部揃えるとなると、これは並大抵のことではない。

まだまだ、先は長い。


2013-12-08(日) | -- (permalink)

後半はGeneric Procedure関する解説。

オブジェクト指向の言語で開発を行っていると、「そもそも型とは」というようなことを考える機会がほとんどない。言語のプリミティブな機能を利用して、型の仕組みを実装してみるのはなかなか貴重な経験だ。

ここでは、Generic Procedureを実現するための戦略が3つ紹介される。

message-passingは非常にオブジェクト指向的だ。直交座標系で複素数を表現する ...


2013-12-01(日) | -- (permalink)

環境構築に手間をかけたくない質なので、最初はDrRacketを利用してSchemeのコードを書いていた。

Gaucheでメタプログラミング

しかし、上記のサイトなどから、Emacsでも「別ウインドウで評価しながら、ソースを書けること」が分った。
その結果、結局Emacs+Gaucheの環境に落ち着いた。

しばらくはこれで満足していたし、新しい言語であれば、全て手で打つことも、理解を早めるという点では無駄ではないだろう。

しかし、SICPの分量・難易度を考えると、あまりゆっくりコーディングしている暇はない。さすがに、最低限の自動補完が欲しくなった。

ところが、「scheme emacs 補完」とかで検索すると、結構面倒臭そうな方法が多い。

結局、emacsのパッケージ管理システムを使ってauto-completeをインストールする方法が一番楽そうだ、という結論に達した。

その方法を備忘録も兼ねて記載しておく。ちなみにEmacsのバージョンは24.2だ。

まず、パッケージ管理システムを利用したことのない人はリポジトリを設定しよう。

;;;;;;;;;;;;;;;;;;;;Package;;;;;;;;;;;;;;;;;;;;
(require 'package)
(add-to-list 'package-archives
     '("marmalade" . "http://marmalade-repo.org/packages/")
     '("melpa ...

2013-11-25(月) | -- (permalink)

1章が割りとすんなり終わったものだから、少し油断していた。2章からは分量も問題数も随分多くなりなかなか終わりそうにない。大体2章の60%ぐらいが終わったから、備忘録も兼ねてこの辺りで感想をまとめておこう。

ところで、Edsgar Dijkstraの言葉にこのようなものがある

Being abstract is something profoundly different from being vague… The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.(「Best Programming Quotations」より)

抽象的であることと曖昧であることは全く違う。 抽象化の目的は、曖昧にすることではない。 抽象化は、新たなセマンティックレベルを創出し ...


2013-11-13(水) | -- (permalink)

Unityを触ったり、簡単なシェーダー書いたりしてるうちに描画処理への関心が高まってきた。ゲームとかグラフィックスの分野は、一定以上のものを作るために比較的コアな知識がいる一方で、結果がキャッチーで分かりやすい。ゲームにはあまり興味がない私だが、ゲームエンジンブームである。先日、「Playgroundハッカソン」に参加してからというもの、ますます興味が湧いてきている。

そんなわけで、「Game Engines」がテーマの第7回テックヒルズに行ってきた。

以下が公開されているスライドへのリンクだ(一部、公開が確認できていないものもある)。

  1. 「Unity2DとnewGUIについて」安藤 圭吾さん(ユニティ・テクノロジーズ・ジャパン)
  2. 「Aiming開発ゲームの裏側」牧野 克俊さん(Aiming)
  3. 「cocos2d-xおよび開発ツールについて」清水 友晶さん(TKS2)
  4. 「 enchant.jsの野望 9分コーディングライブ」 清水 亮さん(ユビキタスエンターテインメント)
  5. 「イントロダクション」 &「Playgroundの描画仕組み」「マルチPF対応ゲームエンジン内のAndroid対応」ロマン・ピコアさん(KLab) ・中澤 慧さん(KLab)
  6. 「次世代ゲームエンジンの比較 ...

2013-11-06(水) | -- (permalink)

私は感性が完全に都会的だと思う。

かなり傲慢な物言いに聞こえるかもしれないが、優劣ではなく、あくまで気質について述べているのである。それに、これからの文章を読めば、私が「都会的」なことを誇っていないということがよく分かるだろう。

都会には人が多い。 人が多いと、価値観が多様になる。 価値観が多様的になると、特定の価値観の優位性を認めなくなる。 特定の価値観の優位性を認めない人は、「正しさ」を諦める。

この感性は、AORやシティ・ポップという言葉に代表される都会的な音楽の特徴と一致する。AORの特徴は何かというと、本質的にはジャズの影響を強く受けた複雑なハーモニーである(当然、ドラムスをジェフ・ポーカロにするとより効果的であるのは言うまでもない)。『After The Love is Gone』や『Nothin' You Can Do About It』などがAORの代表曲とされるのは、それらが今までのポップスではありえない、技巧的で複雑なハーモニーワークを駆使しているからに他ならない。

3和音のメジャー/マイナーの世界は二項対立の世界だ。そこには明確な明暗の境がある。しかし、モダンジャズ、そしてその影響下にあるAORは基本的に4和音以上の世界である。4和音のメジャー/マイナーは主音を変えれば明暗が裏返る。Imaj7にはIIImがあるし、IIIm7にはVがある ...


2013-10-27(日) | -- (permalink)

(前編はこちら)

1章から学べたことを列挙する。

・Schemeに慣れた。

if、cond、define、let、lambdaなどを用いてプログラミングできるようになった。例の「カッコ」にもだいぶ慣れてきた。

・linear recursionとiterationの違いが分かるようになった。

今以上に不慣れな時のコードではあるが、以下のようにrecursionとiterationで再帰が書けるようになった。後者のほうが遥かに効率が良い。

;recursion
(define (f n)
  (cond ((< n 3) n)
        (else (+ (f (- n 1))
                 (* 2 (f (- n 2)))
                 (* 3 (f (- n 3)))))))

;iteration
(define (f-iter product product-1 product-2 counter max-count)
  (cond ((> counter ...

2013-10-27(日) | -- (permalink)

先日の投稿「代替不可能なプログラマとは。」にある通り、SICPを読み始め、先日第1章「Building Abstractions with Procedures」を読み終えた。実際には先日の投稿より少し前から読み始めていて、1章読み終えるのに3週間ほどかかったことになる。(さらに言うと、3ヶ月ほど前に、ビデオ講義を3時間分ほど鑑賞した。この時は、テキストが存在することを知らなかったのと、当たり前だが偉大なるハル・アベルソン氏とジェラルド・ジェイ・サスマン氏の早口の英語が聞き取れるはずもなく、あえなく挫折した。)

学習環境は以下。

・テキストは原著で。

テキストは原著がオンラインで閲覧できるので、原著で読むことにした。日本語訳に対する酷評を聞き過ぎたせいで、理解できなかった場合に翻訳のせいにしてしまいそうだからだ。それと、語学能力の訓練にもなればと思っている。英語だけをやっている時間がないので、英語とプログラミングを一緒に効率良く学びたい。

・開発環境にはDrRacketを使用。

コマンドラインとかEmacsとかも試してみたが、結局一番楽そうなものに落ち着いた。

SICPを読んだ結果できるようになること、得られる知識というのははっきりしていなくて、ただただ今よりプログラミングを深く理解できるに違いないという予感だけがモチベーションになっている。SICPに関して「Why Structure and Interpretation of Computer Programs matters」という記事を見つけた ...


2013-10-23(水) | -- (permalink)

果たしてプログラマという職業はクリエイティブな職業だろうか。

そもそも、クリエイティブとはどういうことだろうか。以前の投稿にもあるように、私は「センス」なるものは一切信用していない。クリエイティブとて同じことで、検証不可能な「センス」によって計られるべきではない。おそらく、クリエイティブとは「代替不可能な価値をもたらす、実証可能な能力そのもの」だ。私なりのクリエイティブを定義したところで、改めて問うてみる。

果たしてプログラマという職業はクリエイティブな職業だろうか。

残念ながらほとんどの場合はそうではない。世の中にある大半のコードは代替可能な能力によって生産されている。ほぼ全ての実現したいことに関する情報は、インターネットのどこかに存在する。私が日々の仕事で行っていることも、もちろんそうだ。また、これは非常に大事なことだが、目新しいことができるかどうかでプログラマの能力を計るべきでもない。誰もやりたがらないことを確実に行うプログラマの価値は非常に高い。一般的なプロダクトの完成に寄与する割合で言えば、目新しさは1割ぐらいで、残りの9割は能力的には誰でも出来る作業だろう。だから、デヴィッド・カトラーは優秀なのである。

カトラーは、プログラマーがいつも新しいコードだけを書きたがり、ミスは忘れたいと考えているとみると、うるさく小言を言った。(G・パスカル・ザカリー著『闘うプログラマ』より)

こうした理由から、代替可能な作業の精度を挙げて、その精度が代替不可能になることを目指すという手段で代替不可能になることも考えられる。だが、頭では分かっていても ...


« Page 2 / 4 »