レガシーコード生産ガイド

私に教えられることなら

学習記録

「達人プログラマー」読んだ

気に入らなかったので感想は公開しません。

「SQLアンチパターン」読んだ

全体を通して繰り返し現れるので、常に頭に入れておいたほうが良さそう、と思える設計方針は以下 データをメタデータに混入させない メタデータをデータに混入させない 一対多や多対多の関係を表現するときにサボらない。従属テーブルや交差テーブルを使う …

作業記録

RFR64で末尾呼び出し最適化 サブルーチンスレッディングで作ったRFR64だけど、せっかく最適化をいろいろ試すためにサブルーチンスレッディングを選んだので、そろそろ取り掛かってみることにした。 末尾呼び出し最適化自体についてはここらへんが詳しい http…

Factorでレキシカル変数使用・未使用の比較

レキシカル変数使用でどれぐらいわかりやすく書けるか、フィボナッチ数列で試してみる。 5 fibの結果[ 5 3 2 1 1 ]が積まれるという仕様にする。 まずはスタック操作のみ。レキシカル変数以外のFactorの便利仕様は使っていいものとする。 : (fib-no-var) ( q…

FactorでGUI

Re: Factor: Calculator with GUI がものすごくわかりやすかった上に、Factorの「力」を使ってるカンジがしていい。(最後のcalc-uiが必見!) 十分わかりやすいんだけど、更にミニマムなステップを書いておく。 最初の最初のGUI USING: ui ui.gadgets.label…

MVCがよくわからないのでバインド的なものを作った

Angular.jsとか使ってるしちゃんと勉強しておこう、と思ってMVCの説明みても「つまり……どういうことだってばよ?!」っていつもなる。 何か先に頭の中にイメージができてたほうがいいかな、と思ったので散歩中に簡単なバインド(っていうのかな)の仕組みを…

Common Lispでコンピュテーションをアンダースタンディングする 2

変数、何もしない文、代入文まで。 前回

Common Lispでコンピュテーションをアンダースタンディングする

アンダースタンディング・コンピュテーションを読み始めた。サンプルコードはRubyで書かれているけど、Common Lispの練習をしたいのでCommon Lispで書いてみる。 また、ボトムアップ設計の練習として、簡単なリストを使った構造から始める。 それで対応でき…

CommonLispのバッククォートとカンマの入れ子が多分わかった

Common Lispでのバッククォートの入れ子の謎 - レガシーコード生産ガイド に対して、 Gauche作者のShiroさんから、以下のわかりやすい記事で反応があったことに気づいた。 http://blog.practical-scheme.net/shiro/20150123-nested-backquote 引用させていた…

ParenscriptからReact.jsを触ってみる

初めてReact.jsを触ってみた記録。LISPでJavaScriptを書くのだ、と決意が固まってきたので、いきなりParenscriptで書き始める。

継続できた…?

「後回しにする」とか言っておいて、諦めが悪いのでずっと考えたり実用CommonLisp見てたら次のことに気づいた。 継続今度こそできた、かな。全て継続渡しにして、call/cc時点での継続をc1とすると、「それが呼ばれた時点での継続c2を無視し、c1で引数を評価…

Lisp処理系制作途中

phaendal/a-piece-of-lisp 処理系のコアは段々出来てきてて、builtin.lでマクロを使ってletやcond、delay/forceにtakeなんかを書いてた。めちゃくちゃ楽しい。 テスト駆動で書いてるからストレスあんまり無く進んで楽しかった。 あとはプリミティブ手続きと…

CommonLispのletとlet*とoptional

一応メモしておく (defvar x 2) ;; letを使った場合は、初期値中の変数は外側を参照する (defun y-let () (let ((x 1) (y (+ x 1))) y)) (y-let) ;; => 3 ;; let*の場合はそれより前で定義された同スコープの変数から (defun y-let* () (let* ((x 1) (y (+ x…

続 Common Lispで遊ぶためにexpectを作って遊ぶ

Common Lispで遊ぶ為にテストフレームワークを作って遊ぶ - レガシーコード生産ガイド これの続きを作って、githubにアップしてみた。 phaendal/expect.lisp (load "expect.lisp") (defun last-elm (x) (cond ((null x) nil) ((atom x) x) ((null (cdr x)) (…

演算子順位法で再実装

再帰下降構文解析の練習 - レガシーコード生産ガイドで作った四則演算の計算機を、BNFに依った演算子の定義ではなく、演算子順位法を用いて二項演算子を追加していけるようにした。 making-script-engine/calc.js at 307e233a5f3056914a15d8c77c6619616eb1f8…

PharoでFizzBuzzMachine

Smalltalk Advent Calendar 2014 - Qiita のnewappleshowさんの記事を見ながら作った。まだブラウザとか使いこなせてないから、どんなメソッドをどういう風に使えるのかわからなくてArray周りで苦戦した。あとブロックの中で最後に評価した式がブロックの値…

再帰下降構文解析の練習

githubのアカウントとリポジトリを作ってみた phaendal/making-script-engine phaendal/making-script-engine · GitHub 構文解析器生成器、を作ろうとしたけど、まったくイメージがわかない、というかわかってないことがわかったので、まずは手で再帰下降構…

Real World Haskell、スキップ

5章、JSONのプリティプリントのところを読んでたけど、あまりにも説明の順番が自分には理解しづらい。その場で実装できないものはundefinedにしといて後回しにするんだけど、トップダウン方式なのにトップが明示されていないので、なぜ後回しにするのか、ど…

cabal buildとDevelopment.Placeholdersを使うまで

ある程度すごいHaskell本で学んだので、Real World Haskellは最初からと第5章のJSONの操作からを並行して進めて行っている。 毎回ソース編集して:r連打したり、ghc --makeを実行するのも面倒なので、ソースを編集して保存したら自動実行でビルド&テストした…