読者です 読者をやめる 読者になる 読者になる

@uents blog

Code wins arguments.

SICP 読書ノート#33 - 3.3.5 制約の拡散 (pp.168-175)

「§3.3.5 制約の拡散」から。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch3/ch3.3.5.scm 原本のタイトルは "Propagation of Constraints" なので「拡散」というよりかは「伝播」の方が適切かもしれない。 前…

Mac OS X YosemiteにGNU Emacsをインストール

前回の記事でHomebrewを導入 しましたが、その続きでGNU Emacsをインストールします。 Emacsのインストール 検索するとhomebrew版とhomebrew-cask版の両方がヒットしますが、 % brew search emacs emacs #=> homebrew版 Caskroom/cask/emacs #=> homebrew-ca…

Mac OS X YosemiteにHomebrewをインストール

Mac

前回の作業から Yosemiteにアップグレードまで済ませたので、さらにHomebrewをインストールし直した際の作業メモ。 環境 Mac OS X Yosemite 10.10.1 Xcode Command Line Toolsはすでにインストール済み インストールしていなくて、Homebrewをインストールす…

Homebrew/RubyGems/npmのアンインストール

Mac

重い腰を上げてLionからYosemiteに一気にアップグレードしようと思ったけど、 Homebrewあたりも使い始めて3〜4年経過し使っていないパッケージも溜まってきて、 Yosemiteにした途端にHomebrewがまともに動かないとか嫌だし、 brew upgradeに無駄に時間がかか…

SICP 読書ノート#32 - 3.3.4 ディジタル回路のシミュレータ (pp.160-168)

「§3.3.4 ディジタル回路のシミュレータ」から。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch3/ch3.3.4.scm 回路の実装 論理回路の実装 テキストのこの章のコードを写経しないとシミュレーションを走らせるこ…

2015年の抱負

手短に。 SICP読了 アンダースタンディング・コンピューテーション読了 新しいプログラミング言語を1つ以上習得する (たぶんRubyかPython) 英語のプログラミング本を1つ以上読破する 機械学習をかじる 娘のおもちゃをハンドメイドする SICPは3月までに。他…

SICP 読書ノート#31 - 3.3.3 表の表現 (pp.156-160)

「§3.3.3 表の表現」から。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch3/ch3.3.3.scm 問題 3.24 解答は省略。 make-table にテスト関数を引数で渡せるようにし、 assoc-tree 内の equal? の代わりに そのテ…

SICP 読書ノート#30 - 3.3.2 キューの表現 (pp.153-156)

「§3.3.2 キューの表現」から。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch3/ch3.3.2.scm ところで、最近の1カ月半は通勤時間もコードを書くほど忙しかったので、 Schemeを忘れてないか心配だったけど、意…

SICP 読書ノート#29 - 3.3.1 可変リスト構造 (pp.147-153)

「§3.3 可変データのモデル化」から。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch3/ch3.3.1.scm 可変リスト構造 構成子、選択子とは別にオブジェクトを修正する変更子(mutator)を導入する。 例えばpairの場…

プログラミングとは何なのかの感想

はてブで興味深い記事を見つけたのでその感想。ブコメも含めておもしろい。 プログラミングとは何なのか - hitode909の日記 10年プログラマをやってきたけど、最近の僕の中ではプログラミング技術とは、 モデリング力とその処理系の実装スキル、だと思ってい…

SICP 読書ノート#28 - 3.2 評価の環境モデル (pp.138-147)

前回からずいぶん間が空いてしまった。 今回は「§3.2 評価の環境モデル」から。 初出じゃないけど用語がいろいろと出てくる。 環境(environments) フレーム(frames) 束縛(bindings) 大域(global) 外側の環境(enclosing environment) 変数の値(value of a var…

SICP 読書ノート#27 - 3.1 代入と局所状態 (pp.127-137)

いよいよ3章。キーワードは、 モジュール化 オブジェクトによるプログラムの組織化 代入(assignment)と局所状態(local state) 環境モデル(enviroment model) ストリーム(streams)と遅延評価(delayed evaluation) あたりのようです。 代入と局所状態 これまで…

SICP 読書ノート#26 - 第2章 まとめ

最後は端折ってしまいましたが、長い長い2章がようやく終わったので、 自分なりにまとめたいと思います。(1章でもまとめておけばよかったorz) *** ところで、この章で学ぶべきものは何でしょうか? それは「§2.1.3 データとは何か」の以下の一節を理解す…

SICP 読書ノート#25 - 2.5.3 記号代数 (pp.118-125)

すみません、さくっとパスします。おそらくこの章の本質ではないと思うので。 必要ならまた戻ってくると思います。。 ※「SICP読書ノート」の目次はこちら

SICP 読書ノート#24 - 2.5.2 異なる型のデータ統合 (pp.113-118)

「§2.5.2 異なる型のデータ統合」から。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.5.2.scm 異なる型のデータ統合 前回のエントリで汎用演算システムを構築したが、 異なる型同士の計算はできなかった…

SICP 読書ノート#23 - 2.5.1 汎用算術演算 (pp.110-113)

「§2.5 汎用演算システム」から。 この章は2章でこれまで学んだことの応用問題といった感じ。データ主導を使って汎用演算システムを構築して行きます。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.5.1.…

SICP 読書ノート#22 - 2.4.3 データ主導プログラミングと加法性(3) (pp.109-110)

「§2.4.3 データ主導プログラミングと加法性」の続き。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.4.3.3.scm メッセージパッシング §2.1.3 データとは何か で見た、 クロージャの特性を利用したアクセ…

SICP 読書ノート#21 - 2.4.3 データ主導プログラミングと加法性(2) (pp.108-109)

「§2.4.3 データ主導プログラミングと加法性」の続きから。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.4.3.2.scm 問題 2.74 アキナイ有限会社 (Insatiable Enterprises, Inc.) のデータベースを統合す…

SICP 読書ノート#20 - 2.4.3 データ主導プログラミングと加法性(1) (pp.105-108)

「§2.4.3 データ主導プログラミングと加法性」から。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.4.3.1.scm 複素数のデータ主導プログラミング 前回のエントリの複素数データを例に、 データ主導プログ…

SICP 読書ノート#19 - 2.4 抽象データの多重表現 (pp.99-105)

「§2.4 抽象データの多重表現」から。 はじめに §2.4の最後の問題2.76で総括するが、抽象データの汎用演算の構築には3つの戦略がある。 明白な振り分けを持つ汎用演算 (strategies—generic operations with explicit dispatch) データ主導流 (data-directed …

SICP 読書ノート#18 - 2.3.4 Huffman符号化木(2) (pp.94-99)

「§2.3.4 Huffman符号化木」について。 テキストの説明がかなりわかりやすく、楽しく読めました。 問題 2.67 テキストのコードを写経し実行してみる。 (define sample-tree (make-code-tree (make-leaf 'A 4) (make-code-tree (make-leaf 'B 2) (make-code-t…

娘の言い間違いがかわいい

最近2才になった娘。 色々言葉を話せるようになったけど、時折出てくる言い間違いがいちいちかわいいのでメモ。 食べる→ぱれる お魚→おかさな とうもろこし→とうもころし お味噌汁→おみしる アイスクリーム→あすむくり、あいくすむり ただいまー→おかえりー…

SICP 読書ノート#17 - 2.3.4 Huffman符号化木(1) (pp.94-99)

おおよそ理解できてるつもりだけど、問題 2.69が上手く解けない。 (define (generate-huffman-tree pairs) (successive-merge (make-leaf-set pairs))) (define (successive-merge leafs) (if (null? leafs) nil (successive-merge-1 (cdr leafs) (car leafs…

SICP 読書ノート#16 - 2.3.3 集合の表現 (pp.88-94)

「§2.3.3 集合の表現」から。 順序づけられないリストの集合 写経して動かしてみる。intersection-setは内積(積集合)が求まる。 racket@> (element-of-set? 'a '(a b c d)) #t racket@> (adjoin-set 'z '(a b c d)) '(z a b c d) racket@> (intersection-s…

SICP 読書ノート#15 - 2.3 記号データ (pp.83-88)

「§2.3 記号データ」から。原文はSymbolic Data。 クォート これまではデータは全て値だった。クォートするとそのデータをシンボルとしてみなすことができる。 '(a b c)と(list 'a 'b 'c)と(cons 'a (cons 'b (cons 'b nil)))は等価。 eq?とequal?の違い。Ja…

SICP 読書ノート#14 - 2.2.4 図形言語(4) (pp.73-83)

引き続き「§2.2.4 図形言語」。いよいよ終盤。 ペインタの変換と組み合わせ transform-painterというペインタのフレーム変換を行う手続きを定義する。 (define (transform-painter painter origin corner1 corner2) (lambda (frame) (let ((m (frame-coord-m…

SICP 読書ノート#13 - 2.2.4 図形言語(3) (pp.73-83)

引き続き「§2.2.4 図形言語」。 ベクトル (問題 2.46) ベクトルのコンストラクタ、アクセサ、演算手続きを実装する。 (define (make-vect x y) (cons x y)) (define xcor-vect car) (define ycor-vect cdr) (define (add-vect vec1 vec2) (make-vect (+ (xco…

SICP 読書ノート#12 - 2.2.4 図形言語(2) (pp.73-83)

Racket Graphics Legacy Libraryを使う 前回のplanet/sicp.ssではほとんど実装済みであまり勉強にならないので、Graphics Legacy Libraryがおすすめ。 http://docs.racket-lang.org/graphics/index.html http://stackoverflow.com/questions/13592352/compil…

SICP 読書ノート#11 - 2.2.4 図形言語(1) (pp.73-83)

Racket supports The SICP Picuture Languageを使う 色々試行錯誤したが、図形言語を単に試すだけならこれがいちばん簡単だった。 http://planet.racket-lang.org/package-source/soegaard/sicp.plt/2/1/planet-docs/sicp-manual/index.html http://d.hatena…

SICP 読書ノート#10 - SICPのためのプログラミング環境構築

「§2.2.4 図形言語」に入る際にグラフィックスまわりのライブラリが必要になってきたので、 遅ればせながらScheme処理系であるRacketやEmacsの環境構築方法をまとめてみました。 (2015/04/29追記) 内容が古くなってきたので全体的に加筆/修正しました (2015/…

SICP 読書ノート#9 - 2.2.3 公認インターフェースとしての並び - 写像の入れ子 (pp.71-73)

「§2.2.3 公認インターフェースの並び」の「写像の入れ子」から。 写像の入れ子 まずは写経。 enumerate-intervalから復習。 (define (enumerate-interval low high) (if (> low high) nil (cons low (enumerate-interval (+ low 1) high)))) racket@> (enum…

SICP 読書ノート#8 - 2.2.3 公認インターフェースとしての並び (pp.65-70)

「§2.2.3 公認インターフェースの並び」から。 公認インターフェース(conventional interfaces)というのがよくわからないけど、信号処理のフィルタのように手続きを組み合わせてプログラムを構成することを考える模様。 並びの演算 filterやaccumulateの実…

Windows 7/Vistaの起動時のHDDアクセスを軽減する

久々にWindows VistaのPCを起動したら起動直後のHDDランプ点滅が酷かったので、ちょっとググって試したことメモ。 ※(2014/7/8追記) Windows 7もほぼ同じようなのでタイトルを変更しました。 HDDアクセスを調べるには パフォーマンスモニターを使うと実際にど…

SICP 読書ノート#7 - 2.2 階層データ構造と閉包性 (pp.55-65)

「§2.2 階層データ構造と閉包性」から。 閉包性とはclosure propertyというそうだが、このclosureはJavaScripter等で おなじみの「クロージャ」ではなく、部品(モジュール同士)が密結合することなく 部品のプロパティがその中に閉じており独立性が保たれてい…

SICP 読書ノート#6 - 2.1.4 区間算術演算 (pp.52-54)

「§2.1.4 拡張問題:区間算術演算」から。 なんというか、この章はひたすら数学。。。 問題 2.7 (define (make-interval a b) (cons a b)) (define (upper-bound i) (max (car i) (cdr i))) (define (lower-bound i) (min (car i) (cdr i))) 問題 2.8 減算手…

SICP 読書ノート#5 - 2.1 データ抽象入門 (pp.45-52)

「§2.1 データ抽象入門」から データ抽象とは かんたんに言うと、データ構造を階層化して抽象化しましょうってことかな? 公認インターフェース(conventional interface)とかデータ主導プログラミング(data-directed programming)とか聞き慣れない用語が。後…

SICP 読書ノート#4 - 1.3 高階手続きによる抽象 (pp.31-44)

§1.3 「高階手続きによる抽象」から 高階手続きとは 引数に手続きをとり戻値で手続きを返す手続き。これをつかうことで言語の表現力が大幅に広がる。 全部解くパワーはなかったので、数学っぽいものはパスして、高階手続きに関する問題だけをチョイスした。 …

SICP 読書ノート#3 - 1.2 手続きとその生成するプロセス(pp.5-30)

作用的順序と正規的順序 正規的順序 (normal-order evaluation) : 値が必要になるため被演算子を評価しない 作用的順序 (applicative-order evalutation) : 関数の引数に演算子と被演算子を含む場合、先に評価する 問題 1.5 Scheme解釈系が正規的順序が作用…

SICP 読書ノート#2 - 1.1 名前と環境 (pp.1-4)

名前と環境 変数に名前をつける手段(関数とは書いていない)として define がある。原文を引用。 A critical aspect of a programming language is the means it provides for using names to refer to computational objects. We say that the name identi…

SICP 読書ノート#1 - 僕がSICPを読み始めた理由

先週から「計算機プログラムの構造と解釈」という本を読んでいます。超有名な本なので説明は不要かと思いますが:) 計算機プログラムの構造と解釈 - Wikipedia 計算機プログラムの構造と解釈作者: ジェラルド・ジェイサスマン,ジュリーサスマン,ハロルドエイ…

計算機プログラムの構造と解釈(SICP)で計算機科学を学ぼう

計算機プログラムの構造と解釈作者: ジェラルド・ジェイサスマン,ジュリーサスマン,ハロルドエイブルソン,Gerald Jay Sussman,Julie Sussman,Harold Abelson,和田英一出版社/メーカー: ピアソンエデュケーション発売日: 2000/02メディア: 単行本購入: 35人 …

子育てから見た「自由」

いま僕の娘は1才10カ月。ここ数ヶ月で本当によく話すようになった。昨日も通園経路のマンションの脇に咲いているチューリップがいない(すでに枯れてしまっている)のを見て「チューリップいないねー、お散歩かな?」と言ったり、さらに他の家に咲いているチュ…

クロージャによるプロパティの隠蔽

前回から話題を変えて、クロージャとその使いどころの勉強。 オブジェクトのプロパティ 例として、以下のようにオブジェクトリテラルを使ってオブジェクトを生成したとする。 var quo1 = { status: 1, set_status: function(s) { this.status = s; }, get_st…

関数呼び出しとthisの制御

前回で関数と呼び出しパターンとthisの振る舞いの関係を学んだ通り、以下のようにthisがそのオブジェクトを指してほしいのにそうなってはくれないパターンがある。 var Quo = function() { this.status = 1; this.get_this = function() { var helper = func…

関数の呼び出しパターンとthisの振る舞い

前回に引き続きJavaScriptのお勉強。JavaScriptでよく議論になっているっぽいthisだけど、JavaScript: The Good Partsによると関数の呼び出しパターンによって振る舞いが異なるらしい。というわけで試してみる。 パターン1:関数呼び出しパターン thisはグロ…

JavaScriptでHello Worldと関数定義

久しぶりのブログ。仕事でJavaScriptを使うことになったので、サイ本第5版とJavaScript: The Good Partsで勉強し直している。というわけで、最近あまり見ないけど、手始めにHello Worldをやってみた。 3つの関数定義 console.log()だけでは面白くないので、…

Rによるやさしい統計学で統計学を0から勉強する(2日目)

R

前回からずいぶん間が空いたけど2日目です。 第3章 2つの変数の記述統計 前の章は1つの変数(データセット)に着目したけど、この章は2つの変数に着目します。 散布図 x,yというデータセットがあったとすると、 > plot(x,y) で散布図のグラフが出力される。 共…

Rによるやさしい統計学で統計学を0から勉強する(1日目)

R

コンピュータビジョンにしろ音声認識にしろデータマイニングにしろ、多変量データから統計学的なアプローチで何らかの決定を導き出す、というのが近年の大きな技術トレンドの1つだと思います。OpenCVを色々触っているうちに、やっぱそうだよな、と改めて思…

ProcessingでKinect - スケルトンをトラッキングしてジョイント位置を描画する

前回の続き。 スケルトントラッキングを試してみる。 ソースコード ちょっと汚いコードだけど… import processing.core.*; import SimpleOpenNI.*; import java.util.ArrayList; @SuppressWarnings("serial") public class SkeltonTracker extends PApplet {…

ProcessingでKinect - Depth画像とCamera画像から3D空間を再現する

昨日の続き。Depth画像とCamera画像から3D空間を再現できたら面白いんじゃないかと思ってやってみました。というか、simple-openniのサンプルにあったののほぼパクリです…^^; ソースコード import processing.core.*; import SimpleOpenNI.*; @SuppressWarni…