2012-08-26

Fcopy 〜 Emacs 勉強会ライトニングトークの発表資料 #Agile渋谷

2012-08-24 (金)、clmemo@aka: Emacs 勉強会に参加した。勉強会において、予告通り LT を行なったので、発表資料を公開する。

あとがき

用意はちゃんとしていったつもりだったけど、いざプレゼンを始めようとしたらマウスの動きが変になったり、プレゼン・ボタンを押してもプレゼンが始まらなかったり、と予期せぬトラブルに見舞われた。次の LT ではリベンジしたい。

関連記事

Emacs 勉強会に参加した

2012-08-24 (金)、Emacs 勉強会に参加した。

概略

20 分のプレゼンが三つ。10 分のプレゼンが一つ。5 分の LT が約 10。

以下、プレゼンのメモと LT で気になったものだけ紹介をする。

なごみ系の話

講演者は「Emacs 実践入門」の作者・大竹智也さん。内容は「Emacs 実践入門」を書くことになった経緯とその周辺の話。

Emacs実践入門 ~思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

大谷さんが Emacs を使い始めたのは 2007-11-22。当時に Emacs のバージョンは 22。2008 年の一年間にブログ (日々、とんは語る。) に Emacs の記事を書き続けたとのこと。これが Mozilla Gumi の方の目に留まり、2009 年 9 月に技術評論社からコンタクトな頂く。2010 年 3 月に執筆決定。12 月には書籍化の話が動き出す。

こぼれ話として、技術評論社には「いなお記法」なる独自のマークアップ言語があることを教えてもらった。大谷さんは (既に存在した) inao-mode に手を入れて、使い易くしたとのこと。この拡張性の高さが Emacs の良さだと語っていた。

Emacs 24 の新機能の話をした後、「Emacs 人口拡大のために」という話題へ。若者に Emacs に触って欲しいと言っていた。まあ、Emacs 好きとしては Emacs 布教は (無理強いにならない程度で) 進めて行きたいところ。

Emacsのバッファの内部実装について

講演者は Software Design で「Emacs トラノマキ」を連載している井上誠一郎さん。

Emacs のバッファの内部実装について語った。バッファの代表的アルゴリズムには、リンクトリスト、ロープ(ツリー) などがあるが、Emacs はギャップ・バッファを使っている。井上さん曰く

意外に単純な発想で、Emacs の実積を知らなかったら、そんな局所最適化は意味があるのかと問いたくなる

以降、三つのファイルの中身を追って行った。

  • buffer.h
  • buffer.c
  • insdel.c

スライドの文字が読めなくて、分からなかったので説明は割合。井上さんは資料を公開している。忘れなければ、読んでみよ。

Subline Text 2

Emacs 勉強会なのに Sublime Text という全く別のエディターの話を 20 分もプレゼンしおった。

Emacs は (vi と並んで) クセのあるエディターなので、プログラマー初心者が入り込めない嫌いもある。そこで、クセの少ないエディターを紹介するのはアリと言えばアリと考えるが... これ有料なのよね。

Emacs と org-mode と私

Emacs 歴 13 年の @takaxp さんが、org-mode について 10 分間語る。org-mode は outline-mode の進化形であり、タスク管理やリンクの埋め込みやら各種ファイル出力 (HTML はもちろん PDF も OK) ができる。機能が多すぎて使いこなせてないので、機能の一端を知ることができて良かった。

LT - simplenote.el

Simplenote はプレーン・テキストを記述するだけのウェブ・サービス。iPhone/iPad 用のアプリも提供されている。Android アプリはまだなのかな?

simplenote.el はこの simplenote サービスを Emacs から使う elisp。

同種のサービスに Evernote がある。一つ問題点を挙げると、Evernote はリッチテキストでテキストを保存している。そのため、ソースコードを保存するとインデントが崩れる。simplenote だと、そういう心配がない。これはなかなか面白い目の付け所だと思った。

LT - Emacs から git をゆるくはじめる

magit
インストール面倒
egg
magit から分岐。Emacs 24 に標準装備。出来ることは少ない。
git-dwim.el
ブランチ操作とマージのみ

LT - Introduce to el-get

Emacs のパッケージ・ツールらしい。便利そうなのだけど、次がぼくの LT の順番だったのでメモは取れなかった。

あとがき

LT 含めて Emacs と全く関係のない話が 1/3 を占めていた。ちょっと不思議な勉強会だった。内容もディープなものから、軽いものまで。振幅が大き過ぎて、軽く目を回した。うん。楽しかったけどね。

2012-08-25

livedoor clip 2012-10-10 にサービス終了

はてなブックマークと肩を並べる国産ソーシャル・ブックマーク・サービス livedoor clip が 2012-10-10 (水) 12 時をもってサービスを終了する。

livedoor clip は 2006 年 6 月から始まった。

当時の livedoor は凄かった。2006-01-16 のライブドア・ショックを受けて今後の livedoor はどうなるのかと IT 関係者は心配した。しかし、そんな心配を払拭するかの様に livedoor Reader が現れた。4 月末のことだった。登録フィード数 1 万以上を前提に作られたこのフィード・リーダーは使い勝手も良い上に、大量のフィードを扱えることで人気になった。そんな新生 livedoor が放った第二弾のサービスが livedoor clip だった。

国産ソーシャル・ブックマークでははてなブックマークが一人勝ちだった中、livedoor clip は突如として対抗馬にのし上がった。livedoor Reader との連携ではずみも付いた。

けれど、気がついたらぼくは livedoor clip を使わなくなっていた。何故だろうね。思い返すと、当時はウェブ・サービスの乱立期だった。同様のサービスが複数あったら、全てのサービスのアカウントを取得する。どこかのサービスが新機能を発表する。それを一早く使う。そうしていると、他のサービスが同じ機能を取り入れる。そうして、サービスが成熟していった。そして、ぼくは疲れてしまったんだと思う。いくつものサービスを使うことに疲れて、一つのサービスに絞る様になった。ぼくは livedoor clip を選ばず、はてなブックマークを選んだ。はてなブックマークが優れていたというよりも、livedoor clip の利用率が低かったのが理由だった。何故、livedoor clip の利用率が下がっていたのか? 自分でも良く分からない。どちらかというと、livedoor clip 自身に原因はなくって、母体である livedoor (現 NHN) が新サービスを作らなくなったのに不安を覚えたのかもしれない。少くとも、はてなはまだ「動き」のある会社だった。その差が二つのブックマークの差になったのかもしれない。

2012-08-23

Emacs 勉強会 (6/24) で LT をします

明日、Emacs 勉強会で Lightning Talk をする。

Emacs 勉強会と言っても、かたくるしいものではなく、敷居の低い交流会のようなものだと期待している。というか、そのつもりで LT を応募したので... そうでないと困る。

ぼくが話すお題は、fcopy.el という自作のマイナー・モード。自己紹介と実演で 5 分使い切っちゃうんじゃないかな〜と思ってる。

まだ、ほんの少し席も空いているようなので、興味のある方は参加表明してみてはいかが?

Fcopy.el ver.6.0 リリース

Emacs のコピー用アドオン fcopy.el のバージョン 6.0 を github に置いた。

fcopy は Funny Copy (奇妙なコピー) モードという意味で、ぼくの最初の Emacs Lisp となる。昔、infoseek のホームページで配布していたのだけど、サービスがクローズされてしまった。以来、ダウンロードできない状況が続いていたけれども、github にようやく置くことができた。

以降、infoseek 時代のホームページをコピペする (全文、書き直すのは大変なので...)。文体も、昔のままなのは手を抜いただけ。。。

Funny Copy Mode

一般のコピーは、先に対象を選び、次に貼り付け場所を指定します。 Funny Copy は Funny Copy モードに入った場所を貼り付け場所とみなし、 コピーする対象だけを探します。

同じような事を書いてたなと思い当たる事があります。 上を見ると、はたして、その文章がある。二度手間は嫌なので、コピーしたい。 テキストを選び、元の位置に戻り、貼り付け、と。でも、待って下さい。 文章を書いていた途中なわけだから、貼り付け場所は、今ポイントのある位置に決まってます。 貼り付け場所が最初から分かっているのなら、「戻る」操作はまどろっこしいと思いませんか。

まとめてみましょう。普通コピーは

  1. 移動する。
  2. 範囲をリージョンで囲む。
  3. コピー用のコマンドを実行する。
  4. 貼り付け場所にもどる。
  5. ペースト用のコマンドを実行する。

という流れになります。 しかし、貼り付け場所が今ポイントのある場所なら、4. と 5. を省略出来ます。 そういう事をやって、ついでに移動・コピー用のコマンドも用意しちゃえ。 ってのが Funny Copy です。

Install

  1. Emacs の load-path の通っている所に fcopy.el を置きます。
  2. .emacs ファイルに次の設定を書きます。
    (autoload 'fcopy-mode "fcopy" "copy lines or region without editing but modify." t)
    (global-set-key "\C-ck" 'fcopy-mode)
         

Using Funny Copy

Moving

まず、Funny Copy モードに入ります (C-c k or M-x fcopy-mode)。 Funny Copy モードに入った場所が、コピーしたテキストの貼り付け場所になります。 ここを「貼り付け位置」と呼ぶ事にします。

Funny Copy モードでは、文字の入力は出来ません。 代わりに 1 ストロークの移動用のコマンドを用意しました。 View モードと同じようなものだと考えて下さい。

例えば f と打つと、一単語先へと移動します。 b と打てば、一単語後ろへと戻ります。 普段の Emacs の移動用コマンドから、Ctrl を抜いたものとお考え下さい。 もちろん一文字先へ動くのには C-f が使えます。 同様に n で次の行に移り、p で前の行に動きます。 それから [space][backspace] で画面を前後にスクロール出来ます。

インクリメンタル・サーチを使えば、目的の場所により早くたどり着けます。 サーチは通常の C-s の他に s に割り当ててあります。 必要なテキストは以前の文書にある方が多いですから、 C-r もしくは r の方が需要は高いかもしれません。

Funny Copy に入ったはいいが、 やっばりコピーの必要は無かったと思い直す事もあるでしょう。 移動の最中に間違いを見つけてしまって、 すぐに修正したい時もあるかと思います。 Funny Copy には二種類の退避方法があります。状況に合わせてお使い下さい。

C-g
Funny Copy モードを抜けて、「貼り付け位置」まで戻ります。
q
Funny Copy モードをその場で抜けます。カーソルは移動しません。

Funny Copy モード内で ? と打つか、 C-h m とすると、簡単な説明が出ます。

Copy

コピーするテキストは見付かりましたか? 見付かったら、Funny Copy のコピー・コマンドを実行します。 コピーを実行するとカーソルは「貼り付け場所」に戻り、 対象のテキストが挿入され、Funny Copy モードを抜けます。 ペースト (貼り付け) 用コマンドはありません。

基本的なコピー・コマンドを紹介します。

.
マークを打って、リージョンを指定。
k
kill-line と同じ様に、カーソルから行末までをコピーします。
RET
あらかじめリージョンで囲むと、リージョンをコピーします。 範囲を指定しなければ、行全体をコピーします。 数引数を取ると、行頭・行末の余計な空白を取り除いてコピーします。
M-RET
短形領域 (rectangle) をコピーします。あらかじめ範囲指定が必要です。
w
単語 (Word) のコピーをします。数引数を取って複数の単語を指定する事も出来ます。 日本語では、単語の区切りが Emacs まかせになるので、怖いコマンドです。
c
文字 (Character) をコピーします。数引数を取って複数の文字を指定する事も出来ます。
C or Shift-Space
空白で区切られたブロックをコピーします。 例えば One-to-One (一対一) という単語は、Emacs は三つの単語として認識しますが、 Funny Copy は一つのブロックとして認識します。
(
対になった文字列 (ex. (..), {..}, [..], <..>) に挟まれたテキストをコピーします。 あらかじめ、括弧の中に移動しておく必要があります。 ( で、括弧ごとコピーします。 ) で、括弧の中身だけをコピーします。
'
対にならない文字 (ex. '..', "..", $..$) で囲まれたテキストをコピーします。 あらかじめ、括弧の中に移動しておく必要があります。 デフォールトではクォートを含んでコピーします。 数引数を取ると、含みません。 同様のコマンドで、 " も用意しました。
;
コメントをコピーします。囲むタイプのコメント (ex. /*...*/, <!--...-->) ならその中身を、そうでないなら、コメント文字から行末までをコピーします。
C-d
削除フラッグをトグルします (モード行に :d のマークが入ります)。 削除フラッグが立っていると、Funny Copy はコピーの対象を削除します。 世間一般でいう所のカットです。

Using Funny Modify

Overview

ほとんど同じテキストが欲しいのだけど、少しだけ修正を加える必要がある。 こんな時はコピーした後で、修正を加えなければなりません。 この修正が面倒だと、コピーするのと最初から全部書いてしまうのとどちらが楽か分からなくなります。 ジレンマです。Funny Copy とて例外ではありません。

例えば次のような場合です。

u(x) = u(x-1) + 8*u(x-2)*u(x-3)  --:1
u(y) = u(y-1) + 8*u(y-2)*u(y-3)  --:2
    

ラベル 2 を作る為に ラベル 1 をコピーしたいのですが、 式中の xy に変える必要があります。

Funny Modify はこんな時に、修正を加える手助けをしてくれます。 Funny Modify はコピーするテキストを貼り付ける前に、 テキストを別バッファに一旦移します。 その中で修正を加えた後、テキストをあらためて貼り付けるのです。

Modify

Funny Copy でコピー・コマンドを実行する前に m を打ちます。 モード行に :m のマークが入ります。 修正モードに入る準備はこれだけです。

コピー・コマンドを実行すると、自動的に修正用のバッファに入ります。 これを modify バッファ と呼びます。 修正を加えたら、C-c C-c とタイプして下さい。 修正されたテキストが「貼り付け場所」に挿入されます。

途中で modify バッファを抜けたくなったら、 C-c C-q をタイプして下さい。

modify バッファでは、Funny Copy モードと同様、文字を挿入する事は出来ません。 これは、「テキストの修正は全て置換で行う」という指針に立っているからです。 ed ライクな考え方です。この置換中心のモードを edit mode と呼びます。

基本的なコピー・コマンドを紹介します。

r
置換 (Replace) コマンドのメニューを出します。
RET
リージョンが存在すれば、そのテキストを置換し、無ければ query-replace を呼び出します。
M-RET
正規表現を使った問い合わせ型の置換 (query-replace-regexp) です。 数引数を付けると replace-regexp を呼び出します。
; (semi-colon)
問い合わせ型の置換 (query-replace) です。
: (colon)
正規表現を使った問い合わせ型の置換 (query-replace-regexp) です。
+
文字列の一括置換 (replace-string) です。
. (period)
数字だけの置換です。
i
文字を挿入します。挿入する文字はミニ・バッファから聞いてきます。

edit mode の他に、 Funny Modify は overwrite mode も用意しています。 こちらに移るには、o と打って下さい。 edit mode に戻るには C-cC-e です。

Masayuki Ataka / 安宅 正之
e-mail: masayuki.ataka@gmail.com

2012-08-02

Blogger bX-ej4x1p エラーの解決

Blogger で xB-ej4x1p エラーの続き。

このエラーは Google Chrome 最新版に起因するエラーだったらしい。Chrome バージョン 22.0.1221.0 dev-m で解決していることが確認された。この問題は Chromium の BTS に登録された。チケット番号は 139540。修正点に興味がある方は、BTS を参照のこと。

制約条件の理論とリーン・シンキング

大学時代にエリヤフ・ゴールドラットの「ザ・ゴール」を読んだ。生産管理に関する内容で、制約条件の理論 (aka. 制約理論, TOC) を物語風にまとめた本だった。キモは生産工程における「ボトル・ネックのみに注力すること」。結果、リードタイムを短くし、在庫を最小限にすることができる。

会社に入ってから、トヨタ式生産方式というのを聞くようになった。日本のトヨタが産んだ生産方式で、短いリードタイム、最小の在庫を持つ考え方という。制約理論と似ているが、どうやら制約理論とは違っているらしい。トヨタ式の生産方式は元々ボトム・アップで出来上がった生産方式であり、それをトップ・ダウンから企業に適用できる様に考えたのがジェームズ・ウォーマックとダニエル・ジョーンズのリーン生産方式となる。詳しくは「リーン・シンキング」にまとまっている。

そういうわけで、両者を読んで一応自分が理解したことをまとめてみる。

ザ・ゴールとリーン・シンキング

ザ・ゴール ― 企業の究極の目的とは何か
ザ・ゴール ― 企業の究極の目的とは何か ザ・ゴール 2 ― 思考プロセス
ザ・ゴール 2 ― 思考プロセス リーン・シンキング 改訂増補版
リーン・シンキング 改訂増補版

ザ・ゴールは制約理論の創始者自身によって書かれた本で、一つの架空の工場を例に制約理論を適用したエピソードで構成されている。

リーン・シンキングは同著者の前著「リーン生産方式が、世界の自動車産業をこう変える。―最強の日本車メーカーを欧米が追い越す日」(未読) からリーン・シンキングの肝を紹介した上で、小さな企業から大きな企業に対してリーン生産方式を実践したエピソードをもってリーン・シンキングの理解を深めようとしている。

物語的な面白さではザ・ゴールの方に軍配を上げたい。リーン・シンキングは、ドラッカーがやった様に実企業とのタイアップでリーン生産方式による企業内の摩擦・変化・成功を描くドキュメント性の高さが光る。また、ザ・ゴールは「問題」の焦点に絞っているため (ポイントが明確になる長所の反面)、焦点以外のステップに対して記述が少ない。リーン・シンキングは実企業を例にしているため、他社への働きかけの重要性についても言及が多い。そういう意味で書籍「リーン・シンキング」の方が実践的であると言えそうだけれども、それは本の書き方の問題であって、「制約理論」と「リーン・シンキング」の優劣の差ではない。できることなら、両方の本を読むことが望ましい。

象徴的なエピソード

制約理論もリーン・シンキングも複数のメソッドから成り立っている。共通点は、大量生産方式に比べてリードタイムを短くすることと、在庫を減らすこと。他にも共通点を多く見つけることが出来ることと思う。

両者の違いは「遊んでいる生産者」に関する考え方に現れると思う。制約理論では「遊んでいる生産者のいない工場はダメ」と言う。リーン (無駄を省く) 生産では「遊んでいる生産者がいてはダメ」と言う。

お互いの象徴的なエピソードを紹介してみる。

制約理論

遠足のエピソードを挙げている。手元に本がないので、ここからはぼくの記憶で書く。

クラスで遠足に出かけることになりました。先生は、生徒が自由なペースで進むことを許しました。クラスの中で一番足が遅かったのは D 君です。あまり、先頭と差が開きすぎると先生の目が届かなくなるので、D 君が遅れ気味の時は先頭を止めて休憩に入りました。D 君はなるべく先頭に遅れまいとするので、オーバー・ペースになり休憩時間も周りと比べて短かめで大変です。先生も休憩中に先に行き過ぎた子供がいないかチェックに大変です。結局、全員が目的地に着くのは予定より遅れました。

そこで、今度は D 君をペースメーカーにすることにしました。ルールは一つ。「D 君を追い抜いてはならない」です。他の子供は先生の目のつく範囲で、余った時間を使い遊んだりしています。D 君は自分のペースで歩いて休憩が取れるので、先刻よりも早く目的地に達することができました。周りのクラスメイトは D 君より速く歩けるので、D 君の到着とほぼ同時に目的地に達しました。

これを生産の話にすると、D 君が生産におけるボトルネックになっている。他の生産がどんなに早く進んでも、不可避な生産 (D 君) が遅れていては、製品は完成しない。過剰な生産も行なってしまう。そこで、ボトルネックにだけ目を付けて生産を行なう。ボトルネックで生産が遅れている時は、過剰生産は行なわず、生産者は遊んでいて良い。

ボトルネック部分の生産効率を上げることが出来れば、ボトルネックはボトルネックでなくなる。その代わり二番目に遅かった生産工程が新しいボトルネックになる。生産計画は、新しいボトルネックを基点に作り直される。

ザ・ゴールでは、ボトルネックは人間の生産ラインではなく (それは人手を増やせば改善できる)、処理時間の長い機械と言っている。

リーン・シンキング

ポルシャ社で行なわれた JIT ゲームを紹介する。長文なので、一部ぼくが文章に手を入れた。

A さんから E さんまでの 5 人がいて、折り紙をおる。A さんは B さんと C さんに折り紙を供給する。B さんは小さな箱を作る。C さんは大きな箱を作る。B さん、C さんは作った箱を D さんに渡す。D さんは大きな箱に小さな箱を入れる。完成した箱は E さんに渡される。ゲームの参加者は自分のペースで働く。この工程で一番作業量が多いのは D さん。D さんの前に箱が高く積まれる。

更にルールを難しくする。三色の折り紙を用意する。顧客のオーダーにより、作る箱の色を変える。顧客がオーダーを変えるごとに、欲しがらない色の箱を横によけておく必要が発生する。

そこで、プルシステムの採用を勧める。下流工程の人から要求 (pull された) 時だけ、一度に五個の箱だけを作る。すると、生産がよりスムーズになった。ロットサイズを減らして、最後は箱の滞留が全くない滑らかな流れになる。この方式になら、顧客が色を毎回ランダムに変えても混乱は起こらない。

ボトルネックは D さん。プルシステムを導入する前に、改善方法を訊かれたポルシャの人達は D さんの工程に人を増やす回答を出す。しかし、その方法では折り紙が三色になった場合に (やはり前と同じ様に) 余剰在庫が D さんの工程の前に溜まってしまう。

ボトルネックにプルシステムを導入し、ボトルネック前の余剰在庫を減らすことは制約理論と似ている。けれど、そのプルシステムを全ての工程で取り入れている点に違いがある様に思う。また、この例では記述されていないけれども、余剰となった人員 (= 遊んでいる人員) は改善部門に回して、更なる改善に力を入れる。としている点でも無駄がない。

まとめ

ボトルネックを基点に生産計画を立てる制約理論。ボトルネックを含めて、プルシステムで生産をスムーズに行なうリーン・シンキング。という印象を受けた。どちらの生産方式においても、ボトルネックがキモになっており、改善することが推奨されている。

ケースによって制約理論とプルシステムのどちらも有効な場合があるかもしれないし、片方が優れている場合もあるかもしれない。大量生産で在庫が余っている場合には、少くとも片方。できれば両方の方式を勉強しておくと良いと思った。

最後に「リーン・シンキング」で印象的な言葉があったので、それを引用して結びとする。

長期的視野、技術的な名人芸、そして成功しようという情熱的な意志、これらの三要素があることが企業のリーンへの転換に必須条件である。