2015

抱負というか、やるべきこと。

  • 継続案件は引き続きがんばる
  • 勉強する
  • 友達を大事にする
  • 痩せる
  • サイトリニューアル
  • 3000トークンはArc書く

去年はリハビリだったので、今年はもっと攻めていきたい。

2014年のArcを振り返る

あまりにも書くことがないので、Lisp Advent Calendar 2014への参加は見送りました。

今年の3月、ポール・グレアムがY Combinatorを離れ、Hacker Newsの管理も手放すという衝撃的なニュースが飛び込んできました。

今後は、プログラミング(Arc)とエッセーの執筆に戻るとコメントされていたので、wktkしていたのですが…

  • 2014年も、Arcのバージョンアップはありませんでした!
  • 2014年に、執筆されたエッセーは6編です!

本当にありがとうございました。

エッセーに関しては、ここ3ヶ月間、立て続きにアップされているので、そろそろArcにも進展があることを期待しつつ、来年も静かに見守っていきたいと思います。

2013年のArcを振り返る

この記事は、Lisp Advent Calendar 2013の23日目の記事です。

Arc Language Update 2013

進捗どうですか?

進捗だめです。

2013年のArcは特に異常なしです。ぼくも体調を崩したり、もろもろの理由で、ほとんどArcのコード書いてません。来年はがんばります。

Hacker News

Arcについて書くことがあまりにもないので、HNについてちょっと書きます。

以前は、Arcサーバーが生でリクエストを捌いていたのですが、いつからか、CloudFlareでキャッシュするようになったみたいです。Arcだけじゃ処理しきれなくなったのでしょうか? 少し残念な気もします。

継続つかったWebアプリ+リバースプロキシでキャッシュっていう組み合わせは、少々強引な気もしますが、なるほどなと思うところもあります。これについては、またの機会になにか書くかもしれません。

また、公式のGitHubアカウントがつくられ、バグレポートを受け付けてます。

https://github.com/HackerNews/HN

それに伴ってかはわかりませんが、YCのNick Sivoさんが、HNメンテしてるみたいです。

その彼が、Racketのlang(リーダーマクロ)でのArc実装をつくってます。

https://github.com/kogir/rark

あくまで個人プロジェクトとのことですが、おもしろい試みだと思います。

Paul Graham

プログラマにLispを煽るからの、スタートアップを煽る。などを経て、最近は、徐々に投資家に投資を煽る方向性に進んでるみたいです。まあ、なんか忙しいんでしょうね。

そろそろ、Lispに関するエッセーか、Arcのバージョンアップをお願いしたいところです。

まとめ

Arcどうすんだ、このやろう。

「777」リリースしました

777というiPhoneアプリをリリースしました。

隣り合う数字が書かれたブロックの合計を7にして消していく、いわゆる落ちゲーです。シンプルなのに奥が深く、意外と頭をつかいます。

これは、高校時代、コンピュータ部の友人がつくってたゲームです(たぶん、ベーマガかなにかに掲載されてたやつを実装したんだと思う)。ぼくはコンピュータ部ではなかったんだけど、放課後、部活終わりに遊びに行っては、パソコン奪ってプレイしてた、思い出のゲームのひとつです。

そういえば、人気漫画の「幽☆遊☆白書」にも登場してました。冨樫先生がいい仕事していた時代ですね。懐かしいです。

あと、Linuxでの実装もあるみたいです。

そういう感じで、マイナーゲームの中ではわりと有名だと思いますが、App Storeに類似するゲームがなかったので、つくってみました。

おもしろいので、是非、遊んでみてください。思い出補正でお願いします。

「パズル&パズル」リリースしました

パズル&パズルというiPhoneアプリをリリースしました。

某人気ゲームをインスパイアして、斜め上を狙った結果、正直、意味がよくわからないパズルゲームに仕上がりました。

下画面のタッチパズルを解いて、上画面のスライドパズルを攻略するという、今までにない新感覚パズルゲームです。

人間の脳は、マルチタスクには向いていなくて、一度にふたつのことを同時に行うのは苦手だと言われますが、このパズルはそれを求めます。結局、同時には考えられないので、いかにはやく、脳のコンテキストスイッチを切り替えるか、という問題になります。脳トレではないですが、やり込むことによって、なにか新しい能力が芽生えれば、すばらしいですね。

とはいえ、上画面のパズルはガン無視して、下画面のパズルで、とにかく大量消しを狙っていく戦略でも、意外と得点が伸びていったりします。「頭つかう前に、とりあえず、手を動かせ」というのも、ひとつの答えではあるのだなと思いました。

まじめに頑張ると、かなり頭をつかいます。遊んでみてください。

Land of Lispの翻訳本が発売されるらしい

まさかの、O'Reillyからのエイリアン本。

Land of Lisp

うわさには聞いていたが、ネタにしか見えない。

ぼくのなかでは、Land of LispはMusic Videoのインパクトが強すぎる。とても楽しみだ。ぴゃあ〜のぉ、ぴゃあ〜のぉ… (piano solo)

O'Reillyの本のほとんどは、最後のページに表紙の説明が書かれている。それを読むためだけでもこの本を買う価値があると思う。

表紙の説明無かった。内容も面白いし、翻訳も素晴らしいのに残念でならない。

Arcでランダムな数字の文字列を生成する

たとえば、ユーザーIDなど、ランダムな数字の文字列を生成したいことがある。

Arcならこう書けた。

; 9桁のランダムな数字の文字列を生成する
(string:n-of 9 (rand 9))

今まで、n-ofマクロの使い道がわからなかったのだが、なるほど、便利だ。

さあ、Arcをはじめよう

Lisp Advent Calendar 2012の15日目の記事です。

これから、Arcをはじめるひとのために、処理系まとめ。

オフィシャルなArc

まず、Arcをつかってみたいと思った人は、http://www.arclanguage.org/install を参考にしてインストールすることだろう。そして、つかうのをやめてしまうだろう。

このArcは、Paul Grahamが開発中のArcのスナップショットにすぎない。しばらくアップデートもされていない。機能的にも物足りないかもしれない。

しかし、これがオフィシャルであり、Paul Grahamが実装した唯一のArc処理系だ。つかってみるには十分な価値がある。なにより、この処理系の実装コードを読むことは、とても勉強になるだろう。

ただ一つ注意すべきは、このインストールマニュアルに書いてある、 http://ycombinator.com/arc/arc3.tar はバージョンが古い。最新バージョンは、 http://ycombinator.com/arc/arc3.1.tar だ。これは、Arc Forumでしかアナウンスされていない。すでにスレッドも流れているので、普通の人は気づかないだろう。

気をつけよう。罠だらけだ。

Anarkiリポジトリ

Anarki (AN ARc wiKI) はオフィシャルなArcをもとに、ユーザーがいろんなことをして遊んでいる感じのArcリポジトリだ。

バグフィックスや有益なライブラリなどが追加されていて、実用的である。オフィシャルなArcには、公開されているリポジトリなどない。最新のものがつかいたい場合、Anarkiは選択肢のひとつとなるだろう。

しかし、名前のとおり、wikiスタイルのリポジトリということなので(なにそれ?)、みんなが好き勝手にpushしたりする。フリーダムさがたまらない。当然、たまに壊れていることもあるので注意したい。

最近はガイドラインっぽいものがつくられたり、更新する人も減ってきているため、安定しているかもしれない。

なんとか言語でArcを実装してみました系

ここにまとまっている。

Arc Forumに出入りしている人は、当たり前のように処理系を実装しちゃうひとたちばっかでこわい。

基本的にArcのサブセットだったり、独自の機能を盛り込んでいたり、そもそも、すでに別言語になってたりする。純粋にArcを楽しみたいなら避けるべきかもしれない。

まあ、おもしろいと思うが、ぼくもあまり追いかけてはいないため、これ以上の言及はやめておく。

arc-mg

arc-mgは、ぼくがメンテナンスしているArc処理系だ。処理系を自作したい欲求は日増しに高まるが、あくまで、オフィシャルのArcをベースとしている。AnarkiやArc Forumであがったパッチやライブラリを取り込んだり、独自の拡張、ライブラリの追加などをやっている。

ぼくが必要だと思った機能、ライブラリを優先的に実装しているので、万人には向かないかもしれない。しかし、少なくとも、ぼくがつかっている範囲では、十分実用的だ。

mgはmgikenの略であり、ガンプラでいうところの、マスターグレードだ。スタンダードアイテム的な位置づけを目指したい。パーフェクトグレードはpg(Paul Graham)にしかつくれない。

これから、Arcをはじめる場合は、まずこれを試してみたらいいのではないかと思う。現状、サポートはあまり期待できないが(自分で言うな)、フィードバックは歓迎する。

インストールはGentooなら、overlayを用意しているので、laymanの設定後に、

emerge arc-mg

すればok。Racketもまとめてインストールされるので楽ちん。

自作のライブラリについても、ebuildを用意してある。自分用につくっているということもあり、Gentooでつかうことを前提としている。まあ、Linuxでなら問題なく動くと思う。その場合は、Makefileがあるので、それぞれ、git cloneしてmakeすれば大丈夫だと思う。依存関係などは、がんばって解消してほしい。

まとめ

ざっくりとArc処理系の紹介をしてみた。しかし、別にArcを普及させようとは思っていない。むしろ、Gentooを激しくオススメしておく。

これを機会に、GentooとArcをはじめよう。

Arcでリーダーマクロに挑戦

Lisp Reader Macro Advent Calendar 2012の8日目の記事です。

今日は、みなさんお待ちかねのArc。はたして、Arcでリーダーマクロとは?

はい、そんなのない。少なくとも、Paul Grahamが公開しているオリジナルのArcには、リーダーマクロはまだない。ここで話を終わらせてもいいのだが、とりあえず、Arcのread関数の定義でも見てみることにする。

read関数は、arc.arcで定義されているので、該当部分を抜き出す。

(def readstring1 (s (o eof nil)) (w/instring i s (read i eof)))

(def read ((o x (stdin)) (o eof nil))
  (if (isa x 'string) (readstring1 x eof) (sread x eof)))

えーと、最初に、stringかinput portかの判定をしている。おっと、実際の処理はsread関数みたいだね。

それでは、sread関数の定義を見てみる。ac.scmの該当部分。うーむ、これはSchemeか。ご存知のとおり、ArcはRacketで実装されている。

(xdef sread (lambda (p eof)
               (let ((expr (read p)))
                 (if (eof-object? expr) eof expr))))

xdefはRacketからArcのネームスペースにバインドするためのマクロ。ああ、結局、Racketのread関数に丸投げしてる。Racketのread関数は終端まで行ったらeof-objectが返るので、それをArcのためにラップしているだけだ。ちなみにコメントによると、sreadはscheme readの略のようなので、そのままだね。

以上、Arcのread関数の定義を見てみた。要するにRacketのread関数に丸投げなので、Racketのリードテーブルを変更してやれば、Arcでもリーダーマクロっぽいことがやれそうだ。

というわけで、Racketのリードテーブルのドキュメントを読んでみる。

意味がわからない。Racketも英語も苦手。むしろ、読む気がない。

どうしようもないので、ArcからRacketのリードテーブルを変更するライブラリを公開している人がいるので、それをつかうことにしよう。Arcならわかる。こういうときに、ユーザーの多い言語は便利ですね(遠い目)。ちなみに、このライブラリを少し修正したものを、arc-mgにも取り込んでいる。

準備が整ったので、例としてハッシュテーブルをClojureっぽく{ ... }で書けるようにしてみよう。

(def parse-table-items (port (o acc '(obj)))
  (scheme.skip-whitespace port)
  (if (is peekc.port #\})
      (do readc.port (ar-nil-terminate:rev acc))
      (with (k read.port v read.port)
        (parse-table-items port (join (list v k) acc)))))

(extend-readtable #\{ parse-table-items)
(extend ac-literal (x) (errsafe:isa x 'table) scheme-t)

簡単だね。

arc> {x "foo" y "bar"}
#hash((y . "bar") (x . "foo"))

ばっちり。

普段コードを書いていても、通常のマクロで十分なことが多く、リーダーマクロの最適な使い所に出会うことは少ないかもしれない。でも、自分の道具箱の中に忍ばせておくと、いざというときに表現の幅が広がっていいのではないだろうか。

GentooとRacketとTextual

以前、GentooでRacketの最新版をemergeしようと試みるも、どんなにUSE flagをいじってみてもXに依存してしまい、ビルドが通らない。MASKされている状況なので、バグかなにかだろうと思い、そのうち修正されるのを期待して放置していた。

しかし、修正される気配はないし、やっぱり最新版つかいたいので調べてみた。どうやら、v5.2くらいから、X依存前提みたい。完全にCUI環境だけで動作するやつは、Racket Textualという、別パッケージになっているらしい。

そういうことなら、ebuild書くだけ。無事インストールできた。

https://github.com/mgiken/portage-overlay/tree/master/dev-scheme/racket-textual

正直、ArcのためにRacketをインストールしているだけなので、最近の動向とか、さっぱりわからない。面白そうな変更とかいろいろ加えられてるみたいだけど。

YAPC::Asia Tokyo 2012に行ってきた

一応、hachioji.pmメンバーなので、2日間ずっとLT-THON会場にいた。最終日の撤収作業を少し手伝っただけなので申し訳ない。事前準備とか大変だったと思う。とてもすばらしいイベントだった。本編はまったく聴講してないので、みんなのレポートや動画をまったりと。

普段あまり外に出ないので、人の多さに疲れた。アイコンしか知らないような、ハッカーと呼ばれる人たちを見てきた。みんなイケメン。ぼくが憧れてるのは、80年代のMITハッカーなので、ちょっと物足りない気もした(ルックス的に)。

というわけで、LT-THONしてきた。

カスタムタグで高速開発 from mgiken

技評さんのレポートにピックアップされたみたいでうれしい。準備不足だったし、疲労もピークでグダグダだったと思うが、伝えたいことは伝わったみたいでホッとした。

しかし、Arcというそれなりに破壊力の強いコンテンツを持ちながら、生かしきれてないなと反省。反響を求めるなら、もっとネタに走るべきなのかもしれない。あまりに、クソまじめにArcやり過ぎてるせいか、ネタに走るという発想がなかった。自虐ネタなら大量にあるのに。ちなみに、Arc-users.jpの編集者の応募は未だにゼロです。

このイベントを通じて、楽しむことの大切さを実感した。そういえば、某言語コミュニティとか、いまいち方向性がわからない。普及させるとかいう前に、まずは、自分たちが楽しむことを優先すればいいと思った。これから百年かけて、Arcのコミュニティを育てていきたい。

Arc-users.jp復活

YAPCの準備中、ふと、*-users.jpブームのきっかけは、YAPCだったなーなんて思い出した。2008年か。2008年といえば、Arcの最初のバージョンがリリースされた年でもある。なんだか感慨深いものがある。ずっと、Arcやってるんだもんな。

そんな思い出に浸りながら、重い腰を上げた。とりあえず、wikiっぽいなにかをでっちあげた。箱だけ用意しただけで、まったくのノープランだ。編集してくれる人を募集中なので、Arc-users.jpを見てください。

ちなみに、4年間で、Sinatraでつくろうかと思う規模のアプリなら、Arcで書きたいと思えるレベルには育ててきた。人知れずだが、Arcは前進しているのだ。ぼくは歩みを止めない。

しかし、ブームが去った後ってのはヒドいものだ。サーバ落ちてたり、ドメイン失効してたり、スパムサイトみたいになってたり。ruby-users.jpとか、python-users.jpとか、それはヒドいものだ。

同志達よ、放置しながらも、ドメインだけは死守してきた、我らが勝利だ!

YAPC::Asia Tokyo 2012 LT-THONに参加します

YAPC初参加だが、LT-THONという楽しそうなサブイベントが企画されているらしい。以前から、ちょくちょく遊びに行っていた、Hachioji.pm主催ということで応募した。とりあえず、当選したみたいなので、ArcネタでLTやります。29日午後2の回です。詳しくはタイムテーブルを確認してください。

会場で、こんなこと叫んでるとヌッコロされそうだが、正直、そんなにPerlに興味がない。だから、本編よりLT-THONのほうが面白そうだと思ってしまうから怖い。

当日は、LT-THONの会場でうだうだしてると思うので、気が向いたら声かけてください。というか、本編のタイムテーブルとかノーチェックなので、これは聞いとけみたいなトークがあれば、誘ってください。

『リーダブルコード』を読んだ

『リーダブルコード』を読んだ。評判通りいい本だった。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

ぼくは、普段からできるだけ読みやすいコードを書くように心がけているつもりだ。しかし、無意識に俺色なコードを書く癖がある。だから、定期的にこういう本を読むとハッとさせられる。いい刺激をもらった。

ところで、明日の自分は他人だとか、自分の書いたコードも1日経てば忘れてしまうなんて、よく言われているが、ぼくはそういう経験が少ない。他人のコードを読むことに慣れすぎているからかもしれない。昔書いたコードを読んでいると、「なんだ、このクソコードは! 誰が書いたんだ! 俺かー!」なんて憤慨することも多い。しかし、忘れていても見たら、だいたいすぐに思い出せる。未来の自分が憤慨しないで済むためにも、読みやすいコードを書くことは大切だ。

あと、当たり前すぎるからなのか、あまりはっきりと語られることが少ないような気がする、ひとつの原則がある。

「理解できないコードは書かない」

ぼくは昔からこの原則を心がけている。この原則さえ守っていれば、そんなに酷いコードにはならないんじゃないかと思う。

この本には、読みやすくて美しいコードを書くためのテクニックがつまっている。しかし、自分が理解できないコードでは意味がない。もちろん、カタチから真似をするのも有益だ。それに加えて、ちゃんとプログラミングスキルも伸ばしていきたい。

Atom Feedを吐きますよ

blogっぽいものを、つくってはこわし、つくってはこわしを繰り返しているので、何度目のデジャヴかわからないけど、Atom Feedに対応しました。

http://mgiken.com/blog/feed

あと、おもしろそうなので、Zenback設置してみた。どうなんだろ、これ。

tmuxでvim serverっぽいことをやってみる

簡単に言うと、こういうことがやりたい。

singleton.vim 作った - 永遠に未完成

以前から、いろいろ試行錯誤してみたものの、結果的に、これ無理だろってあきらめかけていた。–enable-gui=noと–without-xのvimでは残念ながらclientserverが有効にならないのである。

素直にXセットアップしろって話かもしれないが、そもそも、ssh越しの環境でvim serverつかえるのだろうか? もし、簡単につかえるのであれば、誰か教えてください。

そんな日々を悶々と過ごしていたのだが、今日、なんとなくvim-slimeのソース読んでたら、なんだかtmux使ってごにょごにょ面白いことやってるわけ。そこで、ピコーンと閃いた。はい、tmuxで今開いてるwindowの最初のpaneにvimを固定するスクリプトできた。

https://github.com/ryuji/vis/blob/master/vis

ぼくはvimのタブ機能はつかっていないので、バッファを開くようにしてるけど、タブで開くオプションとかもあればいいのかもしれない。tmux経由でなんでもコマンド流せそうなので、今はファイルを開くことしかやってないが、いろいろほかにも応用できそうな気がする。

あと、tmuxの1セッションにつきvimをひとつにするっていう実装でもよかったのだが、windowが違ったら、そこは別世界だという認識でつかっている。おそらく、思想の問題。でもまだ、tmuxをあまりつかいこなせてるとは言えないので、今後変更するかもしれない。

激しく車輪の再発明っぽいが、なかなかいい感じなので、しばらく試してみる。

合同会社松村技研を設立しました

これまで、フリーランスとして活動してきましたが、2012年4月17日に合同会社を設立しました。

しばらくは、フリーランス時代からの仕事を引き続き行いますが、ゆるやかに、自社製品・サービスにも力を入れていきます。

これから多くの困難が待ち受けているかと思いますが、今なら空だって飛べそうな気がします。

May the Arc be with you!