Posts published by: holrock

ZIL

なんとなくZ-Machine周りについて調べていたので、ZILについてメモしておきます。

ZIL(Zork Implementation Language)はZorkなどで知られるZ-Machineで動作するInteractive Fiction(IF)を記述するための言語です。

まず、Z-Machine関係の用語を説明します。

IF

IFはいわゆるテキストアドベンチャーゲームです。 テキストをコマンドとして入力して進行していくゲームで、 zorkを 見るとどんなものかはすぐわかります。

Z-Machine

Z-MachineはIFのための仮想マシンです。 Infocom社によって作られました。

多様なプラットフォームへの移植性を確保するため、Zork1などはZ-Machine上で動くようになっていました。

Z-MachineはZILをコンパイルして出力されるZ-codeと呼ばれるを命令を解釈して実行します。

Z-Machineの仕様は The Z-Machine Standards Document にまとまっていますが、フラグなどの扱いについて一部、ztoolsとの相違が見られました。

ZIL

ここから本題です。

ZILの情報はZIL Manualなどにあります。

この後に出てくるソースコードは、ZIL Manualからの引用になります。

BASIC

オリジナルのZorkは MIT Design Language(MDL)で書かれていたとあり、ZILにもその影響が強く見られます …

nginxでimage filter

前回、画像プロキシを使って外部画像を読み込むようにしました。

画像サイズが大きいものもあり、PageSpeed Insightsに怒られることがあります。 今回は画像をキャッシュしつつリサイズします。

参考

すべて同一サーバーで運用しています。

tlsimg.cattoy.info

画像フロントサーバー

httpsで待ち受けるサーバーです。ここが入り口になります。

キャッシュもここでします。

proxy_cache_keyに使用する$arg_w, $arg_h, arg_qがリサイズパラメータになります。 それぞれ幅、高さ、jpeg qualityです。

バックエンドがomacなので、$document_uriにhmacのキーを含んでいるため、サイズ指定以外は$document_uri があればユニークになります。

  server {
    server_name tlsimg.cattoy.info;
    location / {
      proxy_pass http://localhost:8889;
      proxy_cache TLSIMG;
      proxy_cache_key "$host$document_uri$is_args&$arg_w&$arg_h&$arg_q";
      proxy_cache_lock on;
      proxy_cache_valid …

AllegroGraph その3

前回全然lispじゃなかった。

今回はACLから繋いでみます。

準備

Allegro CL 10.0 Free Express Editionのインストール

  • Macの場合X11とかGTKとか必要とありますが、slimeから使うならなくてもいけます

mlispをつくる

  • AllegroGraph clientはalispでは動かないのでmlispを作ります
  • faqにあるので、いちどalispを起動してから次にコードを実行します
(progn
  (build-lisp-image "sys:mlisp.dxl" :case-mode :case-sensitive-lower
          :include-ide nil :restart-app-function nil)
    (when (probe-file "sys:mlisp") (delete-file "sys:mlisp"))
      (sys:copy-file "sys:alisp" "sys:mlisp"))
  • mlispができたらslimeの設定を通します
(setq inferior-lisp-program "/Applications/AllegroCLexpress.app/Contents/Resources …

AllegroGraph その2

AllegroGraphが動くようになったので、データ作って投入します。

データはcattoyから作ります。

こんなかんじ にRDF出力コードを仕込んだので、

g = RDF::Graph.new.tap {|g| Cat.all.each {|c| g << c.to_rdf }}
File.open('/tmp/cat.ttl', 'w') {|f| f << g.to_ttl }

でファイルに吐き出します。 なかみはこんなかんじです。

@prefix schema: <http://schema.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://www.cattoy.info/histories …

AllegroGraph その1

AllegroGraphを動かしてみます。

  • http://franz.com/agraph/downloads/からAllegroGraph Virtual Machineをダウンロード
  • 展開してVirtualboxから読み込む
  • Virtualboxで仮想マシンを新規作成
    • type linux
    • version ubuntu 64bit
    • ディスク作成時にすでにあるディスクを使用するからAllegroGraph 6.0 Virtual Machine.vmdkを選択
    • ネットワークのポートフォワーディングでホストポート10034(なんでもいい)からゲストポート10035へフォワーディング設定する
  • VMを起動
  • franz/allegrographでログイン
  • デスクトップにあるStart AGを起動する
  • ホストマシンからブラウザでlocalhost:10034へアクセスする
  • AllegroGraph WebViewへアクセスできたら、User anonymousのところからtest/xyzzyでログイン
  • Quick-Startにしたがって
  • Create new repositoryにkennedyと入力しcreate
  • http://localhost:10034/repositories/kennedyを開く
  • from a server-side …

macOS 10.12.1にあげたらlibcryptoが見つからない

macOSをSierraにあげました。

その後xcode8.1のインストールをして、omacのビルドをするとlibcryptoが見つからずエラーになりました。

% ocaml setup.ml -build 
Finished, 0 targets (0 cached) in 00:00:00.
+ /Users/hoge/.opam/4.03.0/bin/ocamlfind ocamlopt -g -linkpkg -package cohttp -package cohttp.lwt -package conduit -package cryptokit -package lwt -package str src/omac.cmx src/main.cmx -o src/main …

cattoyに画像proxyを入れました

cattoy.infoでは外部画像を結構な数表示しています。 外部画像にはhttpでしかアクセスできないものもあり、せっかくwww.cattoy.infoが https接続でも警告が出てしまいます。

ちょうど、次の記事 Camoで実現するセキュアな画像プロキシサーバ を見かけたので

camoクローンをocamlで作ってみました。 https://github.com/holrock/omac

まだおもちゃみたいなものですが、一応本番で動いています。

構成は https -> nginx(cacheもここで) -> http -> omac -> [画像server]

今のままだとomacが落ちてもnginx側のキャッシュが有効で気がつかないことがあるようなので、 そのうちなんとかしないと。

ほかにもデーモン化やログ管理なんかもやらないといけないのですが、なんとなく動いてしまうと満足してしまいますね。

conduit with homebrew openssl

現象

cohttpでhttpsからClient.getすると (Failure "No SSL or TLS support compiled into Conduit") とエラーになった

対策

CPPFLAGS="-I$HOME/homebrew/opt/openssl/include" opam install ssl

原因

homebrewでopensslを入れており、homebrewのpathを/usr/localから$HOME/homebrewに変えていたため、 opamでsslをビルドできなかった。

chainerで分類(できてない)

cattoyでおもちゃの分類を自動でやりたくてchainerを試しました。 cattoyに登録されている画像を集めてきて手作業で分類、学習をやってみましたが、 やはり分類が面倒なのと、素材不足で全然だめでした。

やったことをメモしておきます。

  • pip install chainer pillow
  • 画像の数が多い猫じゃらし、爪とぎ、その他で分類してみる。images/nekojarashi images/tsumetogi images/otherとフォルダごとに分類
  • http://ksksksks2.hatenadiary.jp/entry/20160327/1459061931 を参考にリサイズとトレーニングデータに分ける
line = path + " " + label + "\n"

の所がlabelのままだとcompute_mean.pyでエラーになるので

line = path + " " + str(i) + "\n"

に変更する。

  • python chainer/examples/imagenet/compute_mean.py --root . train_list.txt
  • python chainer …

lmfsを見る

lsmfとはMTIのLispマシンのファイルシステムです。 unlambda.comからCADRのイメージとソースが落とせるので中身を見てみます。

ダンプしてみる

  • http://unlambda.com/index.php?n=Main.Cadr からファイルを落とす

    • CADR emulator tar file
    • system 78.48 source file partition
  • usim.tar.gzを展開してlmfs.cをコンパイルする

    • コンパイルエラーと実行時のオーバランを修正
--- a/lmfs.c    2006-07-11 07:01:32.000000000 +0900
+++ b/lmfs.c    2016-09-18 22:24:12.000000000 +0900
@@ -127,6 +127,7 …