move-to

次のBLOGサイトに移りました. こちら側は過去ログとしてひっそりさせておきます.

SW中のあれこれ

開発を続けているつもりの小さなアプリケーションで、 今後の内部実装をどうしようか考えていたところ、 いくつかヒントを見つけたためエントリとして書き残しておきます。 2.4.3 データ主導プログラミング(data-directed-programming)と加法性 http://sicp.…

fluxusに触れてみました

Live coding環境の勉強にfluxusに触れてみました. Racketベースで実装されています. インストール (fluxus)公式サイトのdownloadページにバイナリバージョンがあります. macならdmg, windowsならzipでダウンロードできるので, ローカルに解凍してそのまま利…

小さな非安全JSON生成器

Chicken Schemeで小さなS式->GLSL生成器を作っていて、 本格的な変換器を作らず力技で生成手続きを書いていました。その時、 sprintf (srfi-28 formatのようなもの) と string-join (srfi-13) の組み合わせで、 リストを文字列に変換する再帰コードを書いて…

pandoricマクロ

Pandoricマクロ Let Over Lambdaを読んで、 Pandoricマクロに惹かれました。Pandoricマクロは開かれたクロージャを 生成するためのマクロと解釈しています。lambdaで生成されたクロージャの環境には、 通常外部から値を参照する手立てはありません。書き換え…

Chicken Schemeのトップレベル定義と内部定義の最適化の違い

検証 fibの速度比較の記事を見て、ふと気になりましたので、 お気に入りの処理系Chicken Schemeで下記のテストを行ってみました。 (declare (unsafe) (fixnum-arithmetic)) (define (fib* n) (if (< n 2) n (+ (fib* (- n 1)) (fib* (- n 2))))) (time (begi…

quilのfun modeを読みながらclojureのstate操作を勉強

Functional mode (fun mode) · quil/quil Wiki · GitHubquilのfun mode middlewareを導入すると、 sketchでstateが分かりやすく使えるようになります。wikiページにあるexampleを流し読みしつつ、 いくつかのClojureの書き方を抜粋します。 連想データ構造 ;…

ikeaの丸椅子を組み立て直しながら思ったこと

雑記です。 椅子の組み立て直し 数年前にikeaで購入した丸椅子に久しぶりに座ってみたら、 どうもぐらぐらする・・・と思い、ネジをチェックしてみたところ、 案の定、ネジ止めがゆるくなっていたため、 再びネジ止めをしようとしました。しかし、ゆるくなっ…

leiningen, overtone, and quil

はじめに 最近、Lispの開発が進められていなかったので、 小ネタとして Leiningen/Clojure/Overtone/Quil を触ってみました。Clojureは今まで気になっていたのですが、 実際に処理系をインストールしてみたことがなかったので、 処理系インストール時のメモ…

-compile-syntax

Chicken Schemeでruntimeにマクロを残す Chicken Schemeコンパイラのデフォルト仕様では、 マクロはコンパイル時に展開されるため実行時には残りません。しかし、実行時にloadやevalを呼び出すプログラムを書いた際に、 syntaxをそのまま利用したい場合があ…

愛すべき連想リスト

アクセスユーティリティ alist getter-utility 連想リスト (alist) Lispの連想リストはList構造の自然な拡張で、 keyとvalueの対を要素とするリストです。アクセス関数は car, cdr, if, 比較関数 があれば実現でき、 データのコンストラクトも cons で可能で…

ChickenSchemeでバイナリファイルをロードする

POSIX Chicken SchemeでバイナリIOをする際には、 posix ユーティリティが利用できます。Unit posix - The Chicken Scheme wiki (use posix) (define (load-blob pathname) (let* ((fo (file-open pathname (+ open/binary open/rdonly))) (fs (file-size fo…

記号文字の取り扱い方

Schemeでは多くの記号文字が自由に扱えるため、 シンボルの取り扱い方にしばしば迷ってしまいます。例えば、@&%$!?+-*/^~._ あたりの文字は英数字のように自由に利用できます。 そのため何らかの略記やシンボルの意味づけのために利用することができます。 N…

prefixマクロ

prefix-macroシンプルだけど使いやすいかもしれないマクロです。 同じ手続きを引数だけ変えて複数回呼び出したい時や、 似たような定義が並ぶ時に使うと見やすくなるかもしれないです。 (define gl-enable (foreign-lambda void "glEnable" int)) (prefix gl…

Chicken Schemeのlolevelモジュール

lolevelは、 Chicken Schemeで実装していて、 どうしてもCに近いローレベルなメモリアクセスをしたい時に 利用できるモジュールです。Chicken Schemeはコンパイラ経由であれば、 Cのコードを直接使えるので、利用頻度は少ないと思われますが、 下記のような…

moduleのreexport

前回、Chicken Schemeのモジュールについて記事を書きましたが、 reexportという機能も便利なので紹介したいと思います。 合成モジュール なるべくモジュールは適切な粒度で作っていきたいのですが、 いざモジュールを作り始めると、使う側のimportが大変に…

chicken schemeのモジュールの話

グローバルな名前が多くなってくると、 名前の衝突や汚染を防ぐためにモジュール分けをするようになっていきます。Chicken Schemeではmodule機能があるため、 Nobukoでも利用していくことにしました。 module http://wiki.call-cc.org/man/4/Modules (module…

プロジェクト名変えました

bis83/Nobuko · GitHub旧 Bakery プロジェクトの名前を Nobuko に変えて引き継ぎました。 主に変えたこと レイヤーを3層( app, base, cmd )に分けました cmdは、OS機能を利用するための命令型処理のバインディング層 baseは、より上位のリアクティブプログラ…

blobを扱う

メモリをどう扱うか 普段Chicken Schemeを利用しているので、Cとの連携で困ることは少ないのですが、 一つ問題になることはCデータのメモリ管理になります。基本的にCはデータの寿命を管理しないので、 全てのメモリはプログラマが明示的に管理することにな…

Bakeryのプロジェクトをリファクタする

ゴール BakeryはModdableなサンドボックスゲームである ゲームルールは確定ではないが、現状Rogue亜種になることを想定している ユーザーはゲーム内の組み込みエディタでシナリオを作成してシェアできる エディタはインゲーム中に常に動作させることができる…

プログラマーと山/Queueの答え合わせ

プログラマーが山を登りたくなるのは、 山が土地の局所最適解だからだとしておいてください。道中、出会ったお二人のお爺さんに、 カメラスポットと帰り道を教えて頂きました。 (カメラは 持ってないので撮らなかったですが)帰り道を教えてもらったお爺さん…

LispとQueue

Queue構造 EventStreamを作るにあたってキュー構造は使うので、 SchemeのListでQueueを作ってみます。Consセルの構造では先頭への要素の追加削除は楽なので、 スタック構造はすぐに考え付きます。Queueの場合、リスト末尾への操作が必要になるため、 直接pro…

grimlockの話

legend of grimlock 2 http://www.grimrock.net/最近、ゲーム情報サイトのレビューを見て琴線に触れたため購入しました。 懐かしの3Dダンジョン探索ゲームです。 キャラメイク→冒険が非常に楽しい カスタムダンジョンエディタが付属 Steam Workshopと連動し…

Sparkの話

進捗報告 今週は予定があったため進捗せず ProjectSparkをプレイしています Project Spark 思ったよりサンドボックスゲームしてた 感覚はLBPに近いけれど、アドベンチャーが少なくコミュニティプレイがメイン ツールはコンストラクションツールのようにエデ…

Windowsサポート

進捗報告 windowsでもコンパイルできるように環境構築&色々修正 FRPに興味を持ち始める windowsサポート おおよそマルチプラットフォームなライブラリを使っているので、 さっと移植したかったのですが、環境構築とコンパイルが面倒だったので色々メモを残し…

シェーダーのコンパイル

進捗報告 S式からシェーダーコードを生成する簡単なDSLを用意 シェーダーのコンパイルとプログラムリンクまで整備 design-scheme 入力(shape)に対して出力を計算する箇所をdesignと呼ぶ事にしたので、 そのDSLをdesign-schemeとすることにしました。 現状、…

ライブラリ管理

進捗報告 ビルドに必要なライブラリを管理するスクリプトを組み始め(まずはdownloadのみ) S式からGLSLコードを生成する機能を実装することに ライブラリ管理 ビルドに必要なライブラリを用意するために、 一々手作業で必要なライブラリをダウンロード、ビル…

ゼロ進捗

進捗報告 リアルがガチ忙しくなったので全く作業に着手できず この事実だけを記録しておきます・・・

睡眠時間が長くなってきた・・・

進捗報告 描画APIを整理し始め Cのコード部分を分割して整理する準備 描画システム シェーダー関連と描画コール関連を整備。 入力バッファの生成部分をまだ実装していないため未テストですが。極力、ハードウェアに近い層を隠蔽したかったので、 API設計はふ…

レコードと少しだけ整理

進捗報告 アセットをdata.scmに名前変更、データ構造をレコードに修正 testコード用のサブディレクトリを追加 相変わらず描画システムのAPIに悩み中・・・ テスト 開発していくなかでテストは必要だと思いますので、 テスト用のサブディレクトリを追加しまし…