ブログ移行しました

新ブログ → http://tink.elliptium.net

記事を移行するも面倒なので, このブログは止めずに置いておきます.

RSS を購読されてる方は改めてこちら (feed://tink.elliptium.net/rss.html) の URL で RSS 登録を行ってください.

Go 言語仕様の読書メモ

Go 言語をやってみようと思い立ち http://golang.org/ref/spec を読む.

# が行頭に来ているのは, 筆者自身のコメント

Introduction

汎用言語だとか GC あるとか仕様がコンパクトで (おそらく静的な) 解析しやすいよ, とか書いてある.

Notation

文法仕様の記述は EBNF だそうだ.

Source code representation

  • 文字コードは UTF-8 決め打ち
  • 大文字小文字は区別する
  • NUL 文字 (U+0000) は単に無視される

文字とか数字の定義

Lexical elements

Comments

コメントは java と同じ

Tokens

言語の構成物 (token) は, 識別子, キーワード, 演算子とデリミタ, リテラル

空白文字 (半角スペース, 水平タブ, CR, LF) は無視される

# 全角空白は空白文字とはされていないのか

改行やファイルの末尾には (次で定義する) セミコロンが挿入される

# Scala のようにセミコロンは省略可能, ということか

Semicolons

; が自動で挿入される条件

  1. 識別子
  2. 整数, 浮動小数点数, 虚数, ルーン, 文字列
  3. キーワード (break, continue, fallthrough, return)
  4. ++, --, ), ], }

の後

逆に )} まではセミコロンの挿入が回避される

# Scala と同じく () の中と {} の中の改行では挿入されないということか?

Identifiers

文字もしくは _ で始まり, 文字, _, 数字が続く

Keywords

break        default      func         interface    select
case         defer        go           map          struct
chan         else         goto         package      switch
const        fallthrough  if           range        type
continue     for          import       return       var

識別子には使えない

Operators and Delimiters

+    &     +=    &=     &&    ==    !=    (    )
-    |     -=    |=     ||    <     <=    [    ]
*    ^     *=    ^=     <-    >     >=    {    }
/    <<    /=    <<=    ++    =     :=    ,    ;
%    >>    %=    >>=    --    !     ...   .    :
     &^          &^=

Integer literals

0 始まりは 8 進数 0x 始まり, 0X 始まりは 16 進数

# Java と一緒

Floating-point literals

1.1 とか 13.4e-3 とか

Imaginary literals

複素数の虚数部分のみ

数値 (整数, 浮動小数点数) の後に i を付ける

Rune literals

色々な「文字」の表現 文字そのものとかコードポイントによる指定とか

' で囲われる

# rune って言葉は中二病っぽい

String literals

「文字」

" で囲われると, \ を使って特殊文字が入れられる ` で囲われると, 改行をそのまま書ける

Constants

(書きかけ)

Python で書く代数 - pyarith よ, 私は帰ってきた

1年ぶりの pyarith の記事です. 実は Python で書く代数 を書いてから, 追加した実装があるのでそれについて書きます.

書いてあること

  • pyarith のおさらい
  • 環について
  • 環の公理とテストケースの対応

おさらい

pyarith とは Python でどこまで代数的対象が表現できるかの実験ライブラリです. Python コードは読めるけど代数学のことは知らない人に, 代数的概念を説明することを目的としています. 今のところライブラリとしての実用性は目指していません. おそらくパフォーマンスも出ません.

前々回の記事 で「群」の解説をし, 前回の記事 で群であることを確かめるテストについて解説しました. このテストでは pytest というライブラリを使用し, パラメータ化されたテストを行いました.

この記事を書いたおかげで pytest に興味を持ってくれた人もいたようで, ちょっと嬉しいです.

前回扱ったのは「群」という概念でしたが, 今回は「環」を取り上げます.

群はある規則を満たす集合でした. 環は, 群にさらに満たすべき規則を追加した集合です.

群と環にどんな差分があるかは環を実装した Ring クラスの実装を見てみましょう. https://bitbucket.org/cocoatomo/pyarith/src/dfbb010c50390e5dece00b92558a5c3461199507/tests/test_ring.py ここから分かるのは「環は群に無い __mul__ というメソッドを持つ」ということです.

この Ring クラスと __mul__ というメソッドに課せられた制限はテストケースで表すのでした.

テストケースとその意味
test_mul_welldefined_right 右からの乗算が well-defined であること
test_mul_welldefined_left 左からの乗算が well-defined であること
test_ONE (乗法に関する) 単位元の存在
test_mul_ONE 単位元の性質
test_mul_associative_law 乗法の結合律

乗法は可換とは限らない演算なので, 可換性に関するテストはありません.

また加算と乗算が両方登場する性質を表すテストケースとして以下のものがあります.

テストケースとその意味 (2)
test_distributing_law 分配法則

小学生の頃に分配法則という言葉が出てきましたが, 当時はここまで重要な性質だとは思いませんでした.

環の公理一覧については http://ja.wikipedia.org/wiki/%E7%92%B0_(%E6%95%B0%E5%AD%A6) を参照してください.

『王様達のヴァイキング』ネタリスト

1巻

P.17 ssh による接続失敗のログ

参考サイト

P.19 是枝の場所

"35.710008,139.797957" っぽいけど, 実際の地図とは少し違う ビデオ屋も無さげ

P.30 ビデオのタイトル

バイキングばっかり

P.31 USB のメーカー

元ネタは BUFFALO だろう

P.34 ログイン画面

Ubuntu 12

P.39 坂井の名刺

「〒150-0042」は「東京都 渋谷区 宇田川町」の郵便番号 渋谷のすぐ北のゾーン

P.44 是枝のTシャツ

ここでようやく文字が読めた → "BE YOUR SELF" 診断メーカーっぽい絵柄の元ネタは分からず

P.52 是枝の ThinkPad

256, 黄金比, フィボナッチ数列, コードスニペットがある

黄金比はフィボナッチ数列と強い関係を持つ

コードスニペットには何故か "sqrt(1024.000000) = 32.000000" と表示するプログラムが書かれている. インデントが変なのが気になる.

他の数字についてはまだ分かってない.

P.62 ホワイトボード

GFS の解説図

P.64 ホワイトボード

ページランク

P.101 本

数論入門―証明を理解しながら学べる

他の本は分からなかった

P.102 本

『頭で体操』→『頭の体操』??

P.109 Twitter

アカウントは実在する

坂井は Twitter for iPhone を使ってるようだ

P.128 売り上げ

300円/セット

仕入れは1000セット, 売値にして 30 万円 (仕入れ過ぎ……)

P.185 コンソール

nmap の man

右側に ls -l の結果みたいなのが見える

P.218 IRC

P.218 ペンローズタイル

P.219 カエサル暗号

オリジナルは3文字ずれだったような

wine を Mountain Lion にインストール

手順

$ brew install wine
Error: wine dependency jpeg not installed with:
  --universal

意味が良く分からないのでググった.

http://apple.stackexchange.com/questions/68426/installing-wine-with-homebrew

ふむふむ, jpeg のビルドの方法がマズかったのね. では再度.

$ brew rm jpeg
Uninstalling /usr/local/Cellar/jpeg/8d...

$ brew install jpeg --universal
$ brew install wine
Error: wine dependency jasper not installed with:
  --universal

うっ, また別のライブラリが.

$ brew rm jasper
Uninstalling /usr/local/Cellar/jasper/1.900.1...

$ brew install jasper --universal
$ brew install wine
Error: wine dependency libpng not installed with:
  --universal

$ brew rm libpng
Uninstalling /usr/local/Cellar/libpng/1.5.14...

$ brew install libpng --universal
$ brew install wine
Error: wine dependency libtiff not installed with:
  --universal

$ brew rm libtiff
Uninstalling /usr/local/Cellar/libtiff/4.0.3...
$ brew install libtiff --universal
$ brew install wine
...
Warning: Clang currently miscompiles some parts of Wine. If you have gcc, you
can get a more stable build with:
  brew install wine --use-gcc
...
checking for -lfreetype... not found
configure: error: FreeType 32-bit development files not found. Fonts will not be built.
Use the --without-freetype option if you really want this.

まだまだかかる. Warning が出た gcc のとこはとりあえず無視. 必要なら gcc47 を homebrew で入れてなんとかする.

$ brew install wine --without-freetype

同じエラーで落ちる. なぜだ. 一縷の望みを掛けて freetype を入れ直す.

$ brew rm freetype
Uninstalling /usr/local/Cellar/freetype/2.4.11...
$ brew install freetype --universal
$ brew install wine --without-freetype

ここまでやって, ようやく無事にインストールできた. 長かった.

余談

そもそもは http://gogui.sourceforge.net/doc/programs.html にある「彩」を Mountain ...

Sencha Touch パーフェクトガイドをいただきました

とあるつながりから『Sencha Touch パーフェクトガイド』(大谷弘喜, 稲垣龍一, 川野忍, 土江拓郎, 森本恭平, 高岡大介/共著, 株式会社アスキー・メディアワークス) をいただきました. かなり遅くなってしまいましたが, その恩返しとして感想など書いてみようと思います.

全体の内容

目次を眺めてみると, 次のような 3 部構成になっていることが分かります.

  • 第1部
    • Sencha Touch というフレームワークの位置付け
    • 基本的な道具や概念の説明
  • 第2部
    • Sencha Touch の基礎
  • 第3部
    • 実際にアプリを作る課程を説明
    • 本物の動くコードが載っている

パラパラめくってみると, 全体を通してソースコードがかなりの量載っていることが目に付きます.

ソースコードをどれくらい載せるのか? というのは, 技術書ではよく悩むところです. 載せ過ぎると煩雑になりがちですし, かと言って細かいところを省略してしまうと, そのせいで読者が実装しても上手く動かない危険性が出てきます.

この本では「ソースコードを全て載せる」という方針を採用したようですが, 実際の動作画面の画像や, Google Chrome の開発者コンソールの出力例を載せることで, 読んでいても煩雑と感じたり飽きてくるようなことはありません. ここは著者の方々が気を遣って, 工夫されたのだろうなぁ (そして, 編集者さんの発破掛けがあったのだろうなぁ) と想像しています.

少し話は変わりますが, 実は Sencha Touch には公式のかなり手厚いドキュメントがあります. → http://docs.sencha.com/touch/2.2.0/ このページには, API ドキュメント, 開発およびテストの方法論, 動画による解説, サンプル集があります. このドキュメント自体も Sencha Ext JS (Sencha Touch の非モバイル版) で作ってあります. API ドキュメントは Javadoc のようにソースコードコメントから生成されており, 見た範囲では全ての class, config, property, method, event, CSS 変数に解説が付いています.

これだけ聞くと「この本を読まなくてもいいんじゃないの?」と思うかもしれませんが, そうとはならない理由があります. ドキュメントは確かに豊富なのですが, 全体として散発的な感があり, 内容が豊富過ぎてかえってどれを読んでいいのか迷ったりします. そこをこの本では, 取捨選択し, 1つの流れに整理してあります. ComponentQuery が特にそうなのですが, 必要であれば説明のための例も付け足されています. また Web サーバの準備の仕方や Sass の解説など周辺の情報についても載っています. こういうところにこの本の価値があるのだと思います.

第1部

ここを一通り読んで, 指示の通りに作業すると, なんとアプリが1つ作れてしまいます. この部で開発の準備からアプリ作成の流れが分かるようになっています. sencha コマンド (Play framework の play コマンドのようなやつ) の使い方から, nginx のインストール方法, ブラウザの開発者コンソールの活用の仕方, 実際のアプリのソースコードとその解説まで載っています. 環境構築のところは Homebrew で nginx 入れててちょっと驚きましたが, 本を通しての解説である以上, 環境は揃えておきたいのだと思います.

この部を読んでいてふと気付いたのは, 書いてすぐに動かせる画面が出るのはやっぱり楽しいのだろうな, ということです. Sencha Touch が最低限の設定でそこそこ動くようになっているのがすごいところです. もちろん見栄えも悪くないです.

余談ですが「2.1.5 テキストエディタ」のところで, どんなエディタがオススメされているのか気になりましたが, 特にオススメのものは提示されていませんでした. アリエルさんの社員の方が多いので, きっとこの短い小節に落ち着くまでに血みどろの宗教戦争があったのでしょう(憶測) 社員ごとの使用エディタが載ってる社員紹介のページを探そうとしましたが, 今は見れないみたいで残念です.

第2部

ここを読むと Sencha Touch の基本を一通り理解できます. Sencha Touch のことを知っている人でもリファレンスとして見返すときに便利だと思います.

個々の内容について書いても本書の劣化版の文章にしかならないと思うので, 図やキャプチャが多く読み易い, とだけ書いておきます. それと Sencha Touch の config で設定する方式のおかげで, 余計なコードが無いのも読み易いです. そこは Sencha Touch (および Ext JS) のすごいところだと思います.

第3部

この部では実践的な内容として, アプリを1つ作ります. コンポーネントの作り方, Dropbox にデータを保存, 読み出しする proxy の作成などの内容が載っています. ここまで作れれば, 他の proxy の作成もできると思います.

誤植

気付いたものを書いておきます. (報告用のサイトがあればそっちに書こうと思います.)

P.27 2行目 s/Goole Chrome/Google Chrome/

最後に

Sencha Touch (に限らず Sencha Ext JS も) は JavaScript とは別の世界を作っていて, 独特の作法でアプリケーションを実装します. その作法を概観し実践につなげるには, この本はとても役立つと思います. 後から読み返すのにも良い本ですよ.

『「異様に難しいドラクエの謎解き」をモデル検査器で解く』代わりに数学で解く

前置き

タイトルは本歌取りもいい加減にしろ, という長さですが. こんなつぶやきをしたので, 予告どおり記事を書きます.

酒井さんの続きの記事 → http://msakai.jp/d/?date=20130402#p01

解説

まず方針としては酒井さんと同じく連立方程式を解きます. 酒井さんはモデル検査を用いて解いていますが, 私は数学で解きます. 一応, 数学を学んできた身としては, 数学で解けるものは数学で解きたいものです. (酒井さんも同じようなお考えなのかもしれません) 数学を使って厳密に解いてしまえば, この解が最適解かどうか考えるのも楽になります. 手法による違いを楽しんでいただけたら, と思います.

まず最初に立式する連立方程式は同じです.

$$ \begin{aligned} x_1 + x_2 + x_3 + a_1 &\equiv b_1\ (\bmod 4) \\ x_2 + x_3 + x_4 + a_2 &\equiv b_2\ (\bmod 4) \\ x_1 + x_3 + x_4 + a_3 &\equiv b_3\ (\bmod 4) \\ x_1 + x_2 + x_4 + a_4 &\equiv b_4\ (\bmod 4) \end{aligned} $$

4 次元の縦ベクトル \(\mathbf{a}\) は 4 つの銅像の初期状態, \(\mathbf{b}\) は終了状態を表します. 各要素は内側を向いている状態を 0 として, 右回りに 90 度回るごとに 1 増えるとします.

与えられた \(\mathbf{a}\) に対し \(\mathbf{b} \equiv 0\) の条件で \(\mathbf{x}\) について解くのですが, ここでおもむろに行列を持ち出します.

$$ \begin{aligned} \begin{pmatrix} 1 & 1 & 1 & 0 \\ 0 & 1 & 1 & 1 \\ 1 & 0 & 1 & 1 \\ 1 & 1 & 0 & 1 \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \end{pmatrix} + \begin{pmatrix} a_1 \\ a_2 \\ a_3 \\ a_4 \end{pmatrix} \equiv \begin{pmatrix} 0 \\ 0 \\ 0 \\ 0 \end{pmatrix} \end{aligned} $$

こうして

$$ \begin{aligned} \begin{pmatrix} 1 & 1 & 1 & 0 \\ 0 & 1 & 1 & 1 \\ 1 & 0 & 1 & 1 \\ 1 & 1 & 0 & 1 \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \end{pmatrix} \equiv \begin{pmatrix} - a_1 \\ - a_2 \\ - a_3 \\ - a_4 \end{pmatrix} \end{aligned} $$

こうして

$$ \begin{aligned} \begin{pmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \end{pmatrix} \equiv \begin{pmatrix} 1 & 2 & 1 & 1 \\ 1 & 1 & 2 & 1 \\ 1 & 1 & 1 & 2 \\ 2 & 1 & 1 & 1 \end{pmatrix} \begin{pmatrix} a_1 \\ a_2 \\ a_3 \\ a_4 \end{pmatrix} \end{aligned ...

Emacs 24.3.1 で ddskk 14.3 が使えなくなった

GNU Emacs では日本語入力に ddskk を使うのが常識ですが, Emacs のバージョンを 24.3.1 に上げたところ使えなくなってしまいました. C-x C-j としても skk-mode が有効になってくれません.

メッセージを見ると face-equal: Invalid face: modeline というエラーが出ています. ググってみると http://mail.ring.gr.jp/skk/201210/msg00000.html という話があり, modeline という face は mode-line という名前に変わったようです.

ここ を参考に最新の ddskk を入れます.

http://d.hatena.ne.jp/tomoya/20100905/1283681474 では APEL を先にインストールしていますが, 上記ページに「APEL に依存しなくなった」とあり, その作業は不要です.

$ cd /tmp
$ wget http://openlab.ring.gr.jp/skk/maintrunk/ddskk-15.1.tar.gz
$ tar xvf ddskk-15.1.tar.gz
$ cd ddskk-15.1
$ emacs SKK-CFG
... (↓末尾に追加)
(setq SKK_DATADIR "~/.emacs.d/etc/skk")
(setq SKK_INFODIR "~/.emacs.d/info")
(setq SKK_LISPDIR "~/.emacs.d/elisp/skk")
(setq SKK_SET_JISYO t)

$ make what-where
インストールされるディレクトリを確認

$ make install EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs

これでインストール完了です. Makefile の中には丁寧な説明が (もちろん日本語で) 書いてあるので確認すると良いです.

これで無事 ddskk が動くようになりました.

Have a nice Emacs day.

LaTeX in reST test

Emacs 24.3.1 に ProofGeneral 4.2

じぇねらるたんのステッカーをいただけることになったので, ProofGeneral をインストールしてみた記録.

ついでに Emacs も最新の 24.3.1 にしてみた.

ProofGeneral についてはこちら. → http://proofgeneral.inf.ed.ac.uk/download

Emacs 24.3.1 はここからビルド済みのものをダウンロード. → http://emacsformacosx.com

$ make clean
$ make compile EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs

これですんなりインストールが済むかと思いきや, バイトコンパイルでエラーが出た.

In toplevel form:
generic/pg-response.el:104:23:Error: `special-display-regexps' is an obsolete variable (as of 24.3); use `display-buffer-alist' instead.
make[1]: *** [generic/pg-response.elc] Error 1
make: *** [compile] Error 2

エラーの場所は分かったので, 以下のように書き換えて無事コンパイル完了.

--- before/pg-response.el    2012-09-25 18:44:18.000000000 +0900
+++ after/pg-response.el     2013-03-14 22:57:29.000000000 +0900
@@ -101,9 +101,9 @@
              pg-response-special-display-regexp
              proof-multiframe-parameters)))
     (if proof-multiple-frames-enable
-    (add-to-list 'special-display-regexps spdres)
-      (setq special-display-regexps
-        (delete spdres special-display-regexps))))
+    (add-to-list 'display-buffer-alist spdres)
+      (setq display-buffer-alist
+        (delete spdres display-buffer-alist))))
   (proof-layout-windows))

 (defun proof-three-window-enable ()

さてこれからはドキュメントを読みつつ使い方に慣れていく. → (PDF) http://proofgeneral.inf.ed.ac.uk/releases/ProofGeneral/doc/ProofGeneral.pdf

Licenses