Let's write β

プログラミング中にできたことか、思ったこととか

CL向けのCSSセレクターベースのテンプレートエンジン Caramelを作った(作っている)

ClojureのEnliveというテンプレートエンジンはClojureのWeb開発界では有名だとおもいます。 そのEnliveのAPIが綺麗でCommon Lispでも同じようなテンプレートエンジンがあったらなぁ とおもってました。 そこで調べてみるとcss-selectorsというcssセレクタを…

大津の閾値判別法

大津の閾値判別法 (ql:quickload :iterate) (ql:quickload :lispbuilder-sdl) (ql:quickload :lispbuilder-sdl-gfx) (use-package :iterate) (defclass <data> () ((max :initform (error "max must specified") :reader data-max :initarg :max) (min :initform (</data>…

ClojureからPixivアクセス

PixivってなんでAPI公開しないんですかね...う〜ん とおもいながらAPIをちょっと叩いてみました。 (ns pixivy.core (:gen-class) (:require [clj-http.client :as client]) (:require [net.cgrand.enlive-html :as en])) (def pixiv-api-base "http://touch.…

スピログラフ

スピログラフという正式名称があるのを知ったのは高校の時だが 綺麗な文様が書ける定規という存在はごくごく子供の頃に知っていた。 あの綺麗な文様を自分のプログラムで出力できたらさぞたのしかろう (ql:quickload :lispbuilder-sdl) (ql:quickload :lispb…

Bezier曲線

TwitterでBezier曲線のつぶやきを見たので (defstruct point x y) (defun point (x y) (make-point :x x :y y)) (defmethod point-diff ((p1 point) (p2 point)) (sqrt (+ (expt (- (point-x p1) (point-x p2)) 2) (expt (- (point-y p1) (point-y p2)) 2)))…

迷路解答もLispで

cl-mazeという名前でgithubに置くことにした、前の迷路を構築するプロジェクトをいくつかアップデートしました。 部屋をroomというstructで管理する事にした Dijkstra法をもちいて解答を計算するようにした 以下は、そのメソッドと表示される結果 (defmethod…

ローマ字からひらがなへの変換

ローマ字入力の文字をひらがなの文字に変換してみました。 まだ異常入力への対応やら小文字への変換やら濁音拗音促音などの対応とかはしてませんけど 基礎的な変換はできてます。 (defparameter *boin-table* '(("a" . "あ") ("i" . "い") ("u" . "う") ("e"…

迷路生成をLispでPart2

LispbuilderSDLを利用しての可視化をしました、 あと、アルゴリズムの実装にミスがあったのでそちらも修正してちゃんとした迷路ができるようになりました。 (ql:quickload :lispbuilder-sdl) (ql:quickload :lispbuilder-sdl-gfx) ;;迷路のデータ構造 (defcl…

迷路生成をLispで

迷路を生成したいとおもい、Lispで簡単なクラスタリング法で生成してみました。 ;;迷路のデータ構造 (defclass <maze> () ((width :initarg :w :accessor w) (height :initarg :h :accessor h) (rooms :initarg :rooms :accessor rooms))) ;;部屋の情報を管理する</maze>…

Syracuseアルゴリズムを可視化したい。

Syracuseアルゴリズム(3x+1問題とも)の可視化というのは色々な方法でおこなわれていてNumoebaなどがそうでしょう。(Numoebaの可視化したもののリンクがどこかにあったはずなのですが、失念してしまいました。どなたかご存知の方がいらっしゃったらコメント…

Floydのアルゴリズム

Dijkstraも書いたのですが、そちらはコードの量が多いので割愛。 FloydのアルゴリズムをCで実装 /* * map.h */ #ifndef _MAP_H_ #define _MAP_H_ #include <limits.h> #ifndef INF #define INF (INT_MAX / 2) #endif struct map { int size; int **data; }; struct map</limits.h>…

グラフデータ構造をCで

グラフのデータ構造をCで...面倒.. #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <stdbool.h> struct edge { int into; int weight; }; struct node { bool visitedp; int distance; struct graph *g; //Index in graph int id; struct edge **edges; }; struct edge* mk_ed</stdbool.h></stdarg.h></stdlib.h></stdio.h>…

ねじれヒープを利用した優先度付きキューをCで

グラフ上でダイクストラをするのをJavaで書くとすでに優先度付きキューが提供されているので多少楽はできるのですが、Cで書きたい場面もあるのです。 そこで、Cでも優先度付きキューをつかいたいです。優先度付きキューのインターフェイスを提供するなら 実…

チューリングマシンのエミュレート(2) 定義の厳密化

停止性を保証する必要はないという事で最終状態はacceptになるかどうかだけで良いという 事でerror状態を削減したり、メモリーというのはそもそも無いという事でメモリーを削除したり make-machine時に利用可能な記号列を渡す事で先に定義がただしいかチェッ…

チューリングマシンのシミュレート

昨日帰省から帰ってきていましたが飛行機の中で特にする事がなく、コンパイラの本を読んですこしつかれたのでコードを書く事にしました。そこでチューリングマシンでもつくってみたらおもしろいだろうなぁとおもい 書いてみたいのが以下です。 ;; ;; Infinit…

地面が雪によって平滑化されていく様子のシミュレーションがしたい

雪原を見ていると、地面の凹凸の大まかな部分が残されているものの表面は非常に平滑化されています。そんな感じの物が作れればなぁとおもいちょっとコードを書いています。 (ql:quickload :lispbuilder-sdl) (ql:quickload :lispbuilder-sdl-gfx) (defun bro…

実行時間の計測レポート

(defmacro report-to-file (filename repeat &body form) (let ((report-out (gensym)) (idx (gensym))) `(with-open-file (,report-out ,filename :direction :output) (let ((*trace-output* ,report-out)) (loop for ,idx from 1 upto ,repeat do (format…

ファイルを画像ファイル(BMP)にしたり戻したり

普通のファイルを画像にしたり、その画像からファイルに戻したりしたら面白いだろうなぁ と思っていたので、今BMPにするものを書いてみました。 #include <stdio.h> #include <stdlib.h> #include <math.h> #include "bmp.h" main(int argc, char** argv) { FILE *fp; fpos_t sz; int v,</math.h></stdlib.h></stdio.h>…

SmalltalkでdoesNotUnderstand:をつかってローマ数字の変換

おとといあたりに' Last Resort'というワードを聞き僕がまずおもいうかんだのは、 どこかのプレゼンで目にした「method-missing is last resort」というフレーズでした、 そして次に連想されたのは以前メタプログラミングRubyで読んだRubyのmethod-missingを…

ソートアルゴリズムの可視化をしました。

ソートのアルゴリズムを可視化するというプログラムを紹介され、自分たちでもつくってみてね といわれたので,さっそくSmalltalkで作成してみました。クラスを大別して、ソートのログをOrderedCollectionで渡すとImageをつくる機能をもつ SortVisualizerと、O…

シェルをつくりたい。

シェルの作り方の基礎は大昔にやりましたが、でも今コードに落せるかといわれると ちょっと微妙です。そこで、ゆっくり復習しようとおもってます。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <dirent.h> #include <unistd.h> char* getPath(); char* searchFile(char *,</unistd.h></dirent.h></stdbool.h></string.h></stdlib.h></stdio.h>…

ランダムドットをつかった立体視画像作成

今日は休み時間に暇だったので、立体視の画像を作成するアルゴリズムを実装し 指定した文字列が見える、指定したサイズの画像を生成する関数を作成しました。 (ql:quickload :vecto) (ql:quickload :flexi-streams) (ql:quickload :opticl) (defun create-ra…

Lispでの順列生成をそのままJavaへ

Javaで総称型を利用して一般的なリストにたいする順列生成をLispから直訳で移植してみました。 import java.util.ArrayList; public class Perm { private static <E> ArrayList<ArrayList<E>> listPerm(ArrayList<E> items) { if(items.size() == 0) { ArrayList<ArrayList<E>> resArry = ne</arraylist<e></e></arraylist<e></e>…

暇潰しのミニゲームは自作しよう

暇潰しの時にしたいミニゲームがあっても、手元にある事は稀です。 そんなときは、ちょっとしたミニゲームなら自作して遊んでしまうのが一番です。 自分がプレイするのでインターフェイスに凝る必要もないので、簡単です。 糸通し (ql:quickload :lispbuilde…

Common Lispでエミュレーター

授業でとある仮想マシンをVerilogHDLで設計しているのですが、ほとんど設計の基本が決定してきて 機能も構造もまとまってきたので、自分がどれだけマシンを理解しているかの確認のためにそのマシンのエミュレーターをLispで書きなおすという作業をしていまし…

GCの可視化をしようとしている。

GCでのメモリの様子などを可視化するとおもしろいかもなぁとおもい とりあえず一時間ほどで書いてみました。Mark&Sweepをしています。(かなり初歩的な部分しかしていませんが) (defclass <lobject> () ((mark :initform nil :initarg :mark :accessor mark) (next :</lobject>…

変数のスコープのコンパイル

#include <stdio.h> main() { volatile int x = 0, y = 1, z = 2; printf("0. x = %d, y = %d, z = %d\n", x, y, z); { volatile y = 2, z = 3; printf("1. x = %d, y = %d, z = %d\n", x, y, z); { volatile z = 4; printf("2. x = %d, y = %d, z = %d\n", x, y, z);</stdio.h>…

Arduinoが届いた。

int val = 0; #define LED 13 void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); } void loop() { val = analogRead(0); if (val > 750) { digitalWrite(LED, LOW); } else { digitalWrite(LED, HIGH); } delay(100); } arduinoが届きました。Ardui…

バイナリサーチ

(defun kv (key val) (cons key val)) (defun make-table (&rest kv-pairs) (make-array (length kv-pairs) :initial-contents kv-pairs)) (defun aridx1 (array idx) (aref array (1- idx))) (defun bin-search (key table) (let ((lo 1) (hi (length table…

二分探索木

(defun kv (key val) (cons key val)) (defun tree (val left right) (list val left right)) (defun tree->val (tree) (car tree)) (defun tree->left (tree) (cadr tree)) (defun tree->right (tree) (caddr tree)) (defun leafp (tree) (and (null (tree-…

一次元セルオートマトンギャラリー

(ql:quickload :lispbuilder-sdl) (ql:quickload :lispbuilder-sdl-gfx) (defclass <world> () ((cells :initform () :initarg :cells :accessor cells) (rules :initform () :initarg :rules :accessor rules))) (defun make-world (len) (make-instance '<world> :cells </world></world>…

XTESTでマウスカーソルを動かしてみた。

XTESTではマウスカーソルを動かす事もできるので マウスカーソルを正多角形の頂点の形にうごかすというのをやってみました。 #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <math.h> #include <X11/Xlib.h> #include <X11/extensions/XTest.h> #define PI 3.141592 void usage(); void finish(int sig); double</x11/extensions/xtest.h></x11/xlib.h></math.h></signal.h></stdlib.h></stdio.h>…

XTESTを利用してオートクリッカー

Synergyのソースコードを久々に読みなおして各OSでクリック動作など各動作を疑似再現する 方法を確認しなおしていたのでちょっと練習にとオートクリッカーをつくってみました。 #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <X11/Xlib.h> #include <X11/extensions/XTest.h> void usage(); </x11/extensions/xtest.h></x11/xlib.h></unistd.h></signal.h></stdlib.h></stdio.h>…

円形グラフプロット

角度と値を元にした円形のグラフを書く必要がある場面があったので、 とりあえずの出力結果を確認するためにlispbuilder-sdlをつかって書いてみました。 (ql:quickload :lispbuilder-sdl) (ql:quickload :lispbuilder-sdl-gfx) (defun read-plot-data (file-…

GCCのコンパイル力を知った

GCCでswitchを使ってると、明確に確定値の場合はswitchが自動的に必要最小限の 演算に展開さていることを知った。 まずは子のCのコード #include <stdio.h> main() { switch('a') { case 'a': printf("hoge"); case 'b': printf("fuge"); } } みてのとおりswitch整数</stdio.h>…

SBCLのdisassembleの結果を比較する

SBCLでdisassembleを用いてアセンブラ(?)を出力した時に番地などの詳細情報がでてきて diffをとって比較するのが困難なので、ちょっと必要な部分だけを抽出してくれるawkスクリプトを書いてみました。 { if(NF >= 5 && $3 ~ /.*:/) { print $3,$5,$6,$7 }…

液晶ディスプレイのノイズを利用して作曲ができるかもしれない

今気がついて、正確には把握していないのですが、液晶ディスプレイを表示している時にその表示内容によって異る周波数のノイズがスピーカラーから本当に微量ですが出力されている事に気がつきました。 この音と表示色の関係を把握したら、この音を増幅してデ…

Cの引き数のスタックへのつまれる順を利用して訳がわからない事を

スタックに積まれる時は後ろの引き数から順番に評価するという事で #include <stdio.h> void showargs(int x, int y) { printf("X: %d, Y: %d\n", x, y); } int main() { int x = 0; showargs((printf("case1 x: %d\n", x), x = 1, x), x); x = 0; showargs((printf("</stdio.h>…

OpenCVで顔のパーツの位置の取得

とりあえず雑にやってみました。 #include <opencv/cv.h> #include <opencv/highgui.h> void detectObj(const char *cascade_name, IplImage *img, IplImage *gImg, CvMemStorage *storage, int maxcount) { CvHaarClassifierCascade *cascade = 0; CvSeq *seq; int i; static CvScalar colo</opencv/highgui.h></opencv/cv.h>…

Catrobat(Catroid)で遊びたい

先日Nexus7をGoogle for Entrepreneur Weekで賞をいただきNexus 7をチームに一台いただきました。 そのNexus 7はどうせならということでチームの共有財産にしているのですが、それを触らせてもらっていたらあまりにも楽しかったので、自分で買ってしまいまし…

Haskellでラムダ式をパース

import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec.Char import Control.Monad data LambdaExpr = Var Char | Lambda LambdaExpr LambdaExpr | Apply LambdaExpr LambdaExpr deriving (Show) identifier :: GenParser Char st Lam…

Haskellで論理式をパースして遊ぶ

昨日の昼ごろなんとなくパーザを書きたくなり、ちょうど論理式のパーザなんかが短時間で書くには適切なものだろうと思いまして書いてみました。Parsecのハイパワーな機能をつかってしまうことも考えたのですが、どうせならなんとなく自分で構造をくみ上げて…

画面が...うつらない.. Debian Wheezy..

昨晩帰宅してからaptitude updateしたところ、更新が大量にきていたので、とりあえず更新したところディスプレイのドライバかなにかと相性がわるかったらしくて画面が表示されなくなってしまいました。...追記... ドライバーをfglxからatiにしたところ無事表…

Rubyで一次元オートマトン part 2 (画像生成)

Cairoライブラリを利用して画像を出力できるようにしてみました。 もうすこし抽象化したいですが.. require 'cairo' class World def initialize(size) @map = Array.new(size, 0) @rule = Hash.new end def show @map.each do |cell| if cell == 0 print " …

Rubyで一次元オートマトン

とりあえずルールとかみながらつくってみました。 次は生成関数から生成できるようにしたいとおもいます。 class World def initialize(size) @map = Array.new(size, 0) @rule = Hash.new end def show @map.each do |cell| if cell == 0 print " " else pr…

Source-Code-Pro導入してみました。

[速報] ソースコードを表示するためのフォント「Source Code Pro」をアドビがオープンソースで無料公開 - Publickey なにやらSource Code ProというフォントがAdobeから公開されたとのことで、話題になっていたので 早速導入してみました。 まずは、自分…

Debian Wheezyに移行しました。

今時間があったのでGnome-Shellをつかうために、Debian wheezyに移行しました。 途中ですこしパッケージの更新がうまくいかずてこずったりしましたが、無事に移行できました。 ドライバーの方も一度アンインストールし、ATIから最新版をダウンロードしてイン…

はてなBlog ベータに移行してみました。

ダイアリーからブログへの移行が簡単になったとの事なので、移行してみました。 自動リダイレクトとかあるので、移行も簡単でした。はてなはスーパーpreがつかえるので、LispのSyntax Highlightが 楽にできるのが良いので、愛用させてもらってます。

CLでmetaclassでdispatchするdefmethodはできない?

素朴な疑問なのですが、CommonLispでdefmethodするにあたって、meta-classレベルでdispatchできるのでしょうか? http://coding.derkeiler.com/Archive/Lisp/comp.lang.lisp/2007-06/msg01042.html ここを見るかぎり、できないとの回答でした。 しかし、Post…

ダメだった..

できると、おもっていた.できなかった。 (defpartial main-layout (&rest contents) (:html (:head (:link :href "/static/css/bootstrap.css" :rel "stylesheet" :type "text/css") (:script :src "/static/js/bootstrap.min.js")) (:body contents))) CL-A…

僕が働いているAzit.incでは一緒に働けるエンジニアを募集しています!
採用情報 — 株式会社アジット|Azit Inc.