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

私に教えられることなら

ブラウザ上で完結する動的Lisp環境を作っている

Den

最近やってることで書いた、ブラウザ上で完結する動的Lisp環境の制作記録。 とりあえずできた。 方言の名前はDenLisp。 作ってるうちに名前空間の量が大変なことになったので、先に気合入れてIDEを整備した。便利になった。 今のところ 自作Lisp方言(Clojure…

最近やってること

近況です。 yahoさんがきた 前々から会って話してみたかったyahoさん(id:lhcpr)が遠路はるばるお越しくださった……! で、様々に言葉を交わし、とても刺激になった。 あまりに刺激を受け、主にナシーム・ニコラス・タレブの著書などの影響で変わりつつあった…

最近やってること

近況です。 プログラミングについて 今まで体験した中で、お気に入りは Smalltalkでの、デバッガ・インスペクタを用いたオブジェクトを直に触って環境を変えていくスタイル Clojureでの、immutableでextensibleなマップやシーケンス等に関数を適用していくス…

VMとGCとClosure Conversion(途中まで)

やったことの記録・感想です。 モチベーション Squeak SmalltalkのVMは、Smalltalkのサブセット「Slang」で書かれていて、Cに変換されて生成されます。 Slangはかなり機能が制限されてはいますが、サブセットなのでSqueak Smalltalk上で直接動かすことができ…

「小さなチーム 大きな仕事」を読んだ

前々からある作りたい仕事があったんだけど、自信が持ててなかった。しかしこの本から「どう流されずにやっていくか」という態度を学べてとても良かった。同時に「イノベーションのジレンマ」も読んだけど、そっちは半分参考になって、半分はサイズ感が合わ…

Elmの練習に簡単なインスペクタ付きSECDマシンLisp処理系を作った

Elm

(追記) 触れるようにしました github.com タイトル長くなりそうなので簡単に書きましたが、ツリー状に値を見れる簡易インスペクタを持ったLisp処理系を書くことで 静的型付き純粋関数型言語である程度複雑なデータ構造を扱うロジックを書く練習 Elmアーキテ…

duolingoを39日続けてやめた

週末勉強する人は続かない―データから見えた外国語学習に成功する人の3つの特徴を読んで、じゃあ毎日少しずつ続けてみようかと、記事中で宣伝されているduolingoを試してみた。 1日10分を目標としたかなり緩い条件で続けた。結果として、全く苦もなく続けら…

Linux Mintで何らかのアプレットを消したらいろいろごっそり消えてしまったとき

多分「System Tray」アプレットを消してしまっている。 パネルを右クリック→パネルにアプレットを追加 からSystem Trayを追加しましょう。

「Clean Code」読んだ

だいぶん継承・カプセル化・多態性の狭義のOOPに寄っているという印象だった。ほとんど読み飛ばした。 質の悪いコメントは無いほうがマシ、質の悪いテストは無いのと同レベル、という考えは頭に入れておきたい。 クラスを細かく分割する際の考え方については…

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

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

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

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

2016年の振り返りと2017年の抱負

あけましておめでとうございます。 2016 2016年の振り返りですが、一番心に残った事は神山町に行ってきた事です。長らく生き方に悩んでいましたが、id:ympbyc君に会って話したことで感銘を受けて、いい意味で吹っ切れた気がします。2016年も、神山以前と以後…

Elmで相互再帰している型のモジュール化

Elm

個人的にElmやOCamlで好きなのが、型別にモジュールを作るという整理の仕方。 次のようにFoo型のためだけの関数をまとめておいて module Foo exposing (..) type alias Foo = { foo : Int } init : Foo init = { foo = 0 } add : Int -> Foo -> Foo add n x …

2017年からSmalltalkに(再)挑戦したい人へ

この記事はSmalltalk Advent Calendar 201614日目の記事です。 ある程度プログラミング経験がある人を対象にしています。特に、一度触ってみたがよくわからなかった、という人向けです。 環境構築 まず最初は、Squeak Smalltalkの、有志によって日本語化され…

Squeak5.1 / fcitx / Linux Mint で日本語インライン入力

over the spot方式ですが、できました。 Windowsで使う場合は別の記事参照。 手順 日本語TTFフォント導入 まずなんらかのフォントを入れておきます。 手順はSqueak5.0で好きなTrueTypeフォントを使い、日本語を表示する - レガシーコード生産ガイドの通りで…

Elm設計メモ

Elm

最近、どうにか中規模以上のアプリケーションをElmで組めないかと四苦八苦しています。ちょっとイケそうなアーキテクチャを思いついたのでその簡単なメモです。上手く行っても行かなくてもある程度書いたらまとめたいと思います。 モチベーション ある領域の…

ClojureでのImmutable Data Structureについてメモ

ClojureのHashMapとVectorのアルゴリズムについて調べていました。 HashMapの方はHAMTというものがベースになっているようです。 HAMTなんとなくわかった、仮想の巨大な配列を作れるから、ハッシュ値にバラつきがあれば終端のテーブルをコピーしてまわる必要…

SchemeでOCaml風if/let

といっても大層な話ではありません。 Early Returnがしたい JavaScript(ES6)書いてる時なんかによく使うのがEarly Returnです。 function foo (bar) { if (barをチェック) { return だめだよ; } let x = baz(bar); if (xをチェック) { return だめだよ; } le…

近況

振り返りのために残しておきます Schemeで型推論 Scheme(Gauche)で型推論を書いてみる - レガシーコード生産ガイド OCamlでSECDマシン(VM・S式のパースまで) github.com 速攻MinCamlコンパイラ概説の最適化までをS式でやってみたいな、と思い準備しました。 …

「良い設計」の判断基準

プログラミングについて、最近考えていることです。 コードが良い設計かどうかが問題になるのは、人間が手を入れる時のはずです。例えばコンパイラが出力したバイトコードが人間にとって容易に拡張可能かどうかを気にする場面は殆ど無いでしょう。 良い設計…

Elmでループ(末尾再帰・末尾呼び出し最適化について)

Elmで、List.mapなどを使わずに自分でループ的な処理を書きたい場合についてです。 関数型言語の手法に慣れてない人向け結論 「末尾再帰」が使えるので調べてみてください。 慣れている人向け結論 0.17現在、末尾再帰は最適化されるようです。末尾呼び出し最…

静的型付き関数型言語ElmでWebアプリ(SPA)を作ってみた

Elm

以下の記事を見てElmがかなり気になりました。 elm-conf 2016に行ってきたメモ - ジンジャー研究室 再利用可能なコンポーネントはアンチパターン - ジンジャー研究室 Evan Czaplicki「脱FRP。またはThe Elm ArchitectureからSignalを消した件」 - 以下斜め読…

デザインパターンと学び方

Smalltalkについて調べている最中に見つけて、ウォード・カニンガムやHyperCardの話が載っているということで気になっていた「パターン、Wiki、XP」を読みました。 パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)作者: 江渡浩一郎出…

Scheme(Gauche)で型推論を書いてみる

Hindley-Milnerの型推論アルゴリズムと、型クラスの実装に興味があるのですが、どこから手をつけていいのかさっぱりわかりません。とりあえず簡単に読めるコード無いかな、と探したところJavaScriptでのHM型推論実装を見つけました。 Type Inference in Java…

Smalltalk処理系開発日記6 バイトコード追加

前回でバイトコードがいくつか動作したので、どんどん追加していきました。 github.com しかしバイトコードのテストがやや面倒です。 とりあえずループからバイトコード用の分岐を切り出し、一つの命令ずつ処理できるようにしました。しかし、それでも テン…

Smalltalk処理系開発日記5 バイトコード動作

ついに前回に書いた目標の3+4、それから5 factorialのバイトコードが動作しました。 github.com 主にGCのバグと戦ったり、深夜に書いた自分のコードと格闘したりしていました……。配列のn番地のアドレスが知りたいのに、n番地のデータを取っているコードを書…

Smalltalk処理系開発日記 4

github.com 前回でSymbolのidHashをアドレス由来のものにすると書きましたが、それだと文字列からSymbolを検索するのに利点が無いことに気づきました。そこで生成時に名前の文字列からハッシュを求め、それをセットして使うことにしました。インスタンス変数…

Smalltalk処理系開発日記 3

前回 ある程度進捗したら振り返りのために書こうと思っているのですが、久々のVM制作が面白くてついのめり込んでしまい結構進みました。自動テストが簡単に書ける段階はやっぱり楽しい。 github.com 実装したもの メッセージングに必要なオブジェクトについ…

Smalltalk処理系開発日記 2

前回の最後に書いた通り、CopyGCを実装しました。 github.com いつも通りCheneyのアルゴリズムです。 参考 - GC/standard/Copying - GCアルゴリズム詳細解説 - MiniLispのガベージコレクションを解説する - Qiita 流石に何回も書いてたら慣れてきたので、記…

Smalltalk処理系製作日記

次はどの処理系作ろうかな— phaendal (@phaendal) 2016年8月29日 投票ありがとうございました!次はSmalltalk処理系に挑戦します!開発にあたってギター・ドラム・ベース急募。当方ボーカル。完全プロ志向、初心者お断り。— phaendal (@phaendal) 2016年8月3…

「プログラマのためのDocker教科書」読みました

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化作者: 阿佐志保,山田祥寛出版社/メーカー: 翔泳社発売日: 2015/11/20メディア: 大型本この商品を含むブログ (2件) を見る インフラや運用がよくわかってないプログラマのた…

巧遅より拙速

先日の日記で紹介したエッセンシャル思考ですが、そこで紹介されている考え方を重視するようになってから、かなり日々の作業に張りが出てきました。 優先事項をいくつも抱えるのでは無く、まずは時間をとって一番大事な目標・価値観を見定めて、それ以外は全…

20時間、1つの目的のために練習してみる

様々なことを日々学び、大きな目的に邁進したいと思っているんですが、何を学ぶか・どの目的を選ぶかで麻痺してしまい腰が重くなる一方でした。どうにかしたいと思い続けていたんですが、ようやく打開できそうな考えを見つけ、実践することもできました。 き…

Scheme/SmalltalkユーザーがRuby入門してみる

ある作りたいものがあるのですが、まずは今ある中で良いとされているモノや設計思想を知っておこうと考えました。そのためには最低でも1,2ヶ月ぐらい腹をくくってそれに取り組む必要があると思います。 というわけで趣味と実益を兼ねて、しばらくRuby on Rai…

「標準FORTH」を読みました

やたらと古本価格が高かったり、中身が濃いという噂で一部のマニアに知られている標準FORTHをようやく読みました。 標準 FORTH作者: 井上外志雄出版社/メーカー: 共立出版発売日: 1985/07メディア: 単行本この商品を含むブログ (1件) を見る 1章で軽い紹介、…

SWI-Prologでメタプログラミング(述語の作成)

Prologでのメタプログラミングのやり方が少しわかったのでメモしておきます。 Prolog-KABA入門という本の、リストを使ったデータベース例を元に進めていきます。 version1 リストを使った、順不同・長さ可変のデータベースについて考えます。それぞれのデー…

PrologでTodo・日付の比較と加減算・シンタックス考察

ややロジックが面倒な事務処理を書くことになりました。静的型付きな関数型言語などを検討したのですが、どうも問題の性質からPrologが最適な気がします。しかしPrologの経験がほとんど無いので、検討も兼ねてしばらく練習をしたいと思います。 図書館でいく…

「はじめて学ぶオートマトンと言語理論」読んだ

神山町に行ったとき状態遷移の話になり、オートマトンの基礎は知っておきたいと思ったので一番薄くてわかりやすそうなこの本を読んでみました。 はじめて学ぶオートマトンと言語理論作者: 藤原暁宏出版社/メーカー: 森北出版発売日: 2015/07/30メディア: 単…

最近読んだ本の感想

日本語の作文技術 【新版】日本語の作文技術 (朝日文庫)作者: 本多勝一出版社/メーカー: 朝日新聞出版発売日: 2015/12/07メディア: 文庫この商品を含むブログ (2件) を見る 紹介されている技術は多くはありませんが、その分本当に大事だと思われるものが丁寧…

SchemeでNFA→DFA変換を書いた

(7/17追記 タイトルその他ほとんど間違えてDFA→NFA変換と書いていました NFA→DFA変換ですね) 最近、前々から気になっていたオートマトンについて「はじめて学ぶオートマトンと言語理論」という本で学習しています。読んでいるうちに実際にオートマトンとNFA→…

語り合うために神山町に行ってきました

前々からやまぴこ(id:ympbyc)くんの話を読んで気になっていた徳島県の神山町が良さそうだ、一度行きたいなとTwitterで呟いていたところ、本人から直々にお誘いがあったので行ってきました。 7/2日(土)の夜に誘われて、7/4(月)から4日間行ってきました。唐突…

Lisp-1でlambdaを使ったlet, let*, 関数内関数定義の実装メモ

SchemeみたいなレキシカルスコープのLisp-1処理系を作るときの話です。 lambda(Lexical Closure)とset!を実装できれば、マクロ又は処理系に変形させることでlet, named-let, let*, 関数内関数定義を実装することができます。 let let式は、lambdaの即適用に…

何故1つのプログラミング言語に集中できないのか

個人的な話です。 いくつか強烈に面白いなと思っているプログラミング言語があって、どれも興味を惹かれるのであっちを使ったりこっちを調べたり、と引っ張られています。 他にもいろんなツールを試したり、プログラミング以外にも音楽を作ったり絵を描いた…

5月の振り返りと近況

ですます調にしたりしなかったりしてるこのブログですが、してない記事を読み返してて「無愛想だなこの人……」と感じたのでまたですます調にしてみます。 音楽 ドラムとベースのパターンを打ち込みたくなったので久々に曲作りました。愉快な雰囲気。 soundclo…

SqueakのVMConstructor探検メモ

Squeakみたいに、Smalltalk VMをサブセット(Slang)で書いて楽しみたいという野望があるんですが、最近の(Cog)VMの生成周りはどういう設計なのかさっぱりわかりません。 SqueakのSlangがVMシミュレーションに便利なのはわかるんだけど、いかにCのボイラー…

3imp 4.6メモ

前回に続き4.6まで読み終わったのでメモです。 4.6 TAILCALL 末尾呼び出しの最適化を行います。 文章だけだとちょっと分かり辛かったのがShiftするタイミングでした。 例えば次のコードがあるとして (lambda [a b] (f a 123)) (f a 123)を評価する直前のスタ…

3imp 4.4-4.5メモ

3imp 4.1-4.4メモ - レガシーコード生産ガイドでDisplayClosureまで流し読みして、なんとなくわかったので4章を最初から実装していました。 コード置き場 毎日20〜30分ずつやってたら1ヶ月近く経っちゃった。まあいいや。 3impに関する日本語の記事はそこそ…

Squeak5.0/Pharo4であるクラスの全メソッドのソースをクリップボードに

ブログ等に貼るために、Smalltalkのクラスのメソッド定義を手軽にコピーしたい。 クラスの定義はFileOutでファイルに書き出せるけど、いちいちファイルからコピーするのも面倒だし、あまりブログ等で眺めるのには適してない表示になる。 コピペも面倒だし、S…

Pharo4/Moose5でGlamourを使ってGUIを構築するメモ

Squeak SmalltalkでToolBuilderを使ってGUIを構築するメモ - レガシーコード生産ガイドに続き、今回はMoose5(Pharo4)でGlamourを使い、Dictionaryの内容を表示するGUIを作ってみる。 Pharo4にGlamourを入れれば多分使えると思うけど、Moose5が全部入りで楽な…

Pharo4/Moose5にChromeなどからペーストする

Linuxだと Pharo4/Moose5内部でコピー → 外部へペースト はできるけど、 外部でコピー → 内部へペーストは、Chromeなどできないアプリケーションがある。(Win/Macについては知らない) で、解決策を見つけた。--textenc UTF-8オプションをVMに渡す。 [Pharo-u…