Tuesday, December 30, 2014

Emacs でワードをキャメルケース、スネークケース、スパイナルケースに変換するマイナーモード

とある案件対策用のマイナーモード。

当方も年に一回使うか使わないかのため、誰得感満載ですが。

https://github.com/chiyano/extra-letter-cases.el/blob/master/extra-letter-cases.el

camelize, snakify, spinalize 関数を定義し、 それらをラップして camelize-word, snakify-word, spinalize-word といったインタラクティブな関数を提供します。

当方 el-get を愛用しているため以下 el-get による導入方法です。

init.el に以下を記述して eval または Emacs 再起動など。

(setq el-get-sources
      '((:name extra-letter-cases
               :type git
               :url "https://github.com/chiyano/extra-letter-cases.el.git"
               :after (add-hook 'prog-mode-hook 'extra-letter-cases-minor-mode))))

あとは M-x el-get-install extra-letter-cases で導入できます。 詳しくは el-get のほうを参照いただきたく。

上の設定では prog-mode-hook でフックしているため、 なんらかのソースコードファイルを開くと extra-letter-cases-minor-mode が有効になります。 画面下部のインジケータに excases と表示されるはず。

キーバインドはそれぞれ

  • M-p - camelize-word :カーソル位置の文字列をキャメルケースに置き換え
  • M-[ - snakify-word :スネークケースに置き換え
  • M-{ - spinalize-word :スパイナルケースに

これらを M-uM-lM-c などと連携で使用します。

しかし、せっかく調べた word-at-point や Syntax Table は使わずじまい。

そしてやはり誰得感満載。

Saturday, December 27, 2014

Emacs Syntax Table の変更

丁度 M-uM-lM-c みたく、単語をキャメルケース、スネークケース、スパイナルケースに変換したい案件あり。

まずは単語の抜き出にトライ。

単語の抜き出しは word-at-point を活用できそう。だけど _ とか - が含まれてこない。 それらを単語として解釈してもらうにはどう設定すればいいか。

そこで EmacsWiki: Emacs Syntax Table を斜め読み。

結論、諸々解るも、基底(?)のシンタックステーブルを変更する手法だと術が見つからないため断念。

だけど modify-syntax-entry でカレントバッファのシンタックステーブルを変更できるため、 代わりにこれを prog-mode-hooktext-mode-hook に追加して事なきを得ましたと。

init.el に以下。

(defun my-syntax-table ()
  (modify-syntax-entry ?- "w")
  (modify-syntax-entry ?_ "w"))
(add-hook 'prog-mode-hook 'my-syntax-table)
(add-hook 'text-mode-hook 'my-syntax-table)

新しい挙動に慣れないせいか使いにくくなった気がしなくもないですけど。

以降、 EmacsWiki: Emacs Syntax Table の読みメモ。

Emacs Syntax Table

シンタックステーブルは、ワードごとの前後カーソル移動などに使用される。

シンタックスはバッファごとに異なり、メジャーモードでコントロールされる。

シンタックステーブルは standard syntax table を継承する。

Working with Syntax table

C-h s (describe-syntax) でカレントバッファのシンタックステーブルを参照できる。

シンタックステーブルには、各キャラクタやキャラクタレンジと、シンタックスクラスとの対応がリストされる。

シンタックスクラスは以下のシンボルで識別される。

-   whitespace character        /   character quote character
w   word constituent            $   paired delimiter
_   symbol constituent          '   expression prefix
.   punctuation character       <   comment starter
(   open delimiter character    >   comment ender
)   close delimiter character   !   generic comment delimiter
"   string quote character      |   generic string delimiter
\   escape character            @   inherit from `standard-syntax-table'

カレントシンタックステーブルにおける + のシンタックスを参照するには以下。

(char-to-string (char-syntax ?+))

How to define a new syntax table

シンタックステーブルは make-char-table で定義する。

新しいシンタックステーブルは、通常、基本的なシンタックステーブルを継承し、置き換えることで定義する。

スタンダードシンタックステーブルから設定していくには以下。

(setq my-table (make-syntax-table))

text-mode シンタックステーブルからだと以下。

(setq my-table (make-syntax-table text-mode-syntax-table))

Hacking the syntax table

キャラクタのシンタックスは modify-syntax-entry で変更する。

クォータキャラクタにエクスプレッションプレフィックスクラスをセットする例。(Lisp モードでのデフォルト)

(modify-syntax-entry ?' "'")

ブラケット [] にワードクラスをセットし、デリミタとしての解釈を除去する例。

(modify-syntax-entry ?[ "w")
(modify-syntax-entry ?] "w")

などなど、他にも述べられているが本件ではスルー。

カレントシンタックステーブルを変更し、新しいシンタックステーブルを定義するには以下。 (と記載があるけど、この場合 make-syntax-table は standard-syntax-table を戻すのでは)

(defvar my-wacky-syntax-table
     (let ((table (make-syntax-table)))
       (modify-syntax-entry ?[ "w" table)
       (modify-syntax-entry ?] "w" table)
       table))

text-mode のデフォルトテーブルとして my-wacky-syntax-table を指定できる。

(add-hook 'text-mode-hook (lambda ()
            (set-syntax-table my-wacky-syntax-table)))

Thursday, July 31, 2014

Blender Python Console にてオブジェクトに頂点・辺追・面を追加

2014/7/30 開催の Okinawa.rb に参加。

本来 Ruby の集いであるにも関わらず、この日は構わず Blender 方面へ突入。主に Python Console において Bpy な方面へ。

結果、オブジェクト(以降の説明では Plane)に対し、頂点、辺、面をそれぞれ追加する手法を理解したため、以下のとおりメモ。

準備

まず、本件について準備しつつ Python Console を開くまでの手順。 Blender は、現 2.71 の on OS X な版を使用。

デフォルトの Cube は使用しないため削除。(X キーをタイプ)

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2014-07-31+22.52.36.png

オブジェクト(Plane)を配置するため、 3D View の表示形式を Top Persp に切り替え。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2014-07-31+22.54.54.png

3D View にマウスカーソルをのせ、スペースキーをタイプ。 表示されたメニューから Add Plane を選択。 なお、以下な矢印の付け根部分をドラッグすることで画面分割が可能。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2014-07-31_22_56_01.png

Editor Type のメニューから Python Console を選択。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2014-07-31+22.56.37.png

これで Python Console が開きます。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2014-07-31+22.56.42.png

頂点の追加

Python Console に以下を入力し、 3D View にマウスカーソルを移動させタブキーをタイプして Edit Mode に切り替えると

d = bpy.data.objects['Plane'].data
d.vertices.add(1)
d.vertices[4].co.x = 3

以下のアカマルな位置に頂点が追加されている。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2014-07-31_21_56_57.png

ちなみに、 bpy.data.objects['Plane'].data の戻りは bpy.data.meshes['Plane'] であり Blender 2.71.0 5c2d7f7 - API documentation では bpy.types.Mesh に示される。 vertices については bpy.types.MeshVertex

辺の追加

3D View にマウスカーソルを移動させ、タブキーをタイプして Object Mode に切り替えた後、 Python Console にて以下な入力。

d.edges.add(2)
d.edges[4].vertices = [3, 4]
d.edges[5].vertices = [1, 4]

Edit Mode に切り替えると辺が 2 つ追加されている。なお、頂点のインデックスについては、どうやら図中番号のように Blender では管理される模様。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2014-07-31_22_27_56.png

面の追加

Object Mode に切り替え、 Python Console にて以下な入力。

d.loops.add(3)
d.loops[4].vertex_index = 1
d.loops[5].vertex_index = 4
d.loops[6].vertex_index = 3

d.polygons.add(1)
d.polygons[1].loop_start = 4
d.polygons[1].loop_total = 3

d.loops のデフォルトを確認すると vertex_index にそれぞれ 0, 1, 3, 2 が設定されている。これに追加し 0, 1, 3, 2, 1, 4, 3 とする。 また d.polygons にひとつ追加し、 d.loops の要素中、 4 番目から 3 つ目までを追加面として設定している。

Edit Mode に切り替た後、確認すると以下なとおり。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2014-07-31+22.48.37.png

これらの手法で、プログラム的モデリングについていろいろ妄想中。

あと、 いい加減、そろそろ Unity 方面をおさえないとな件。

Sunday, July 27, 2014

座間味遠征 2014

2014/7/26 一路座間味へ。

スローガンは酒・海・肉・星。

座間味遠征は毎年実施しておりますが、昨年は台風によって行けず、今年ようやく実現したのでした。

今回は @mgwsuzuki 殿、 @tompng 殿、 @k_nishijima 殿と奥様、あとはジャック殿、サラ殿と自分を含めた、総勢5名と2匹による遠征。

到着(座間味港)の図。

DSC_1541.JPG

毎年恒例、七号棟の図。

DSC_1546.JPG

阿真ビーチの図。

DSC_1549.JPG

阿真ビーチのドロップオフの図。

P7260080.JPG

@k_nishijima 殿の図。

P7260074.JPG

@mgwsuzuki 殿ダイブの図。

P7260076.JPG

@tompng 殿ダイブの図。

P7260075.JPG

日没の図。

DSC_1564.JPG

チシ展望台エントリしようとするも、風向きにより断念の図。

DSC_1569.JPG

古座間味ビーチの図。

DSC_1572.JPG

古座間味ビーチ海中の図。

P7270103.JPG

古座間味ビーチは浜辺にビーチパラソルが設置されているものの、実際は輻射熱でかなり無理。これに対し、ビーチから少し陸にあがることで改善することを確認。後述のサンシェードが役に立つ模様。ちなみにビーチパラソルひとつ¥1,000。

DSC_1571.JPG

以降は、次回へ向けたメモを徒然なるままにメモ。

  • バディのフルネームと年齢をおさえておくべし
    • フェリーざまみ乗船手続きと、阿真コテージチェックイン時向け
    • フェリーざまみ乗船手続き時、用紙に記載する電話番号は代表者のみで良い模様
    • 空席状況確認は 座間味村公式webサイト
  • 阿真コテージ殿からのレンタル物は以下
  • ビールが足りない件
    • アルコール組4名に対し、ロング缶箱×2で足りず、ショート缶箱×2を加えて丁度良い
  • ユニソン殿から購入した食材が最高の件
    • あの旨さは秘伝のタレにあり
    • 味付け十分のためタレ系不要だけど、塩コショウ的調味料は用意すべし
    • 油はいずれにも添付しておらず、用意すべし(なくても以外とどうにかなった)
    • 以下なパンフは変わるおそれありのため、毎年ユニソン殿から調達しなおすべし
    DSC_1495.JPG
  • サンシェードテントなるものを用意推奨

ちなみに、座間味航路の途中にある阿嘉港の絵柄が変化していたため BEFORE/AFTER を以下に。

DSC_0281.jpg
DSC_1539.JPG

個人的には前の絵柄のが好み。

各位お疲れ様でした。

Friday, July 11, 2014

ハッカーズチャンプルー2014 前夜祭

仕事は早めにお開きにして、 ハッカーズチャンプルー2014 前夜祭 に参加へ。

なにやら司会役を仰せつかっていた模様。それにつけても、だいぶ早く着いたのでひとり作戦会議へ。

並びはデフォルトで以下な模様。 この並びなら @shumach217 殿が先頭のため、当方が先に司会するとして。 @enkw_ 殿までで一旦切って、小休止を挟むがよさげ。残りは @shumach217 殿にバトンタッチする作戦で。

  • @shumach217 殿
  • @urabusa 殿
  • @nanophate 殿
  • @Yutaka_Kinjyo 殿
  • @cota2n 殿
  • @enkw_ 殿
  • ★ここで休憩か。あとは @shumach217 殿にお任せしたいところ。
  • @asumaslv 殿
  • @cloneko 殿
  • @murabito_cx 殿
  • @michinori 殿
  • @masamasa_massa 殿

ええと。実際は @shumach217 殿が、最初に発表しつつそのまま司会の流れに。

会のご様子。

DSC_1486.JPG

あとは司会とかしつつメモ。

  • @shumach217 iOSデバイスの実機テストの自動化 - Swift -
    • RubyとSwiftのコラボで、カオスが香ばしい。スライドの字が小さくて、遠方からだと見難かったのか。
  • @urabusa セキュリティ・キャンプ2014に応募(落選)した話
    • LTははじめてにつき、マサカリなげないでとのこと。 セキュリティキャンプはセキキャンと略すと。 なにやら、「ておくれの称号」なるものがあるらしい(笑)
  • @nanophate トランスコーダーが教えてくれたこと・・・
    • 台風ソンでもくもくしてたとのこと。 西島殿のイベントはいつもゆるゆるに期待しつつ、今回あんま準備してなかったとのこと。 ムービーがかなり格好良しでした。
  • @Yutaka_Kinjyo 会社に GitHub 導入した話
    • 通称 GitHub おじさん。発表が超早でこなれておりました。まさにライトニングトーク!
  • @cota2n zabbix様がみてる
    • 運用監視な話。 ラズパイとarduinoでセンサを構成し、zabbixで監視な模様。 温度センサは秋月100円。 ラズパイあまってたらいただきたいとのこと(笑)
  • @enkw_ ownCloud on AWS
    • ownCloud のアーキテクチャが ownCloud 死んだら終わりで(笑) デモがうまくいってなかったのが少し心残り。 難しいです、LTでのデモ。
  • @asumaslv Fluentd+Elasticsearch+Kibanaの普通の話
    • マサカリ歓迎。 伊藤殿のサインは既にいただいた模様。 ログはみんなみたくない。 Fluentd なログをキバナでログ解析。
  • @cloneko AWSでサーバー構築「クラス」の学習環境を作ってみた
    • 読み方はクローン・コではなく、クロネコの模様。 某チューニンガソンなるイベントにて全国7位。 「EC2インスタンの作ったり壊したり」を授業コンテンツとして学生殿らに提供している話。 採点をserverspecで実施との話がツボでした。 AWS利用代金は、現状自腹とな(泣)
  • @murabito_cx 攻める情シス
    • チューニンガソンのイベントで1位。 情シス=社内の雑多なことやる、な話。 情シスはツール地獄。 防戦一方のため、攻める情シスなるものを目指している模様。 立体機動装置ばりの精神力が必要とのこと。 まずExcel脱却。kintouneを導入の話。 kintoune 開発ライセンスでの検索をお試しあれとのこと。
  • @michinori ローカルブログサイトの過去と未来
    • 趣味はパズドラ(笑) てぃーだブログ、会員数10万! および広告展開と、データセンターの話。
  • @masamasa_massa GameJam というイベントを通して
    • IGDEという団体の話。 国際NPO法人のゲーム開発の集団な模様。 ゲーム作りをきっかけに、学生に羽ばたいてほしいとの思いで立ち上げ。 GameJam 8/2,3(Sat,Sun) 琉球大学 工1-321(参加無料)な模様。

司会ここまで。 @asumaslv 殿と、気になる Kibana 談義。 Fluentd+Elasticsearch+Kibana は、やはり、人の動向のようなものを捕まえるといった趣向が楽しい様。 当方らも導入してみたものの、少量のエラーログ解析程度には効果薄。

しかし、司会する前に発表する流れに順守したく、当方も急遽その場で作成したネタをねじ込むも、 酔いすぎてグダグダとなり申し訳ない。 司会の方もグダり気味で。(泣) とはいえ、無事でないものの一応こなせた模様。

関係各位、お疲れ様でした。

ちなみに、明日の本編はお仕事で参加できないのが確定。(泣)

Tuesday, May 27, 2014

Emacs Lispファイルのヘッダコメントを自動挿入

.el なファイルの先頭にあるライセンスとかが書かれているアレをどうにか自動挿入したい。

そもそものアレの名前もわからない。 Library Headers - GNU Emacs Lisp Reference Manual によればヘッダコメントなるものらしい。

ヘッダコメントを自動挿入してくれるツールを探すと以下な記事あり。

EmacsWiki: Automatic File Headers

どうやら Auto Insert Mode なるものがある模様。

EmacsWiki: Auto Insert Mode

以下なマニュアルに、より噛み砕いた説明あり。

Autoinserting - Features for Automatic Typing

Auto Insert Mode お試し

適当に foo.el ファイルを開き M-x auto-insert すると以下な流れに。なお当方の Emacs は GNU Emacs 24.3.1 。

  1. Short description を訊かれる

    一行程度で書くものらしい。お試しで "Support for FOO" と入力してみる。 詳しくは Library Headers - GNU Emacs Lisp Reference Manual にあり。

  2. Keyword を訊かれる

    パッケージを M-x finder-by-keyword で探すときに使われるキーワードとのこと。 適当に "local" と入力しエンター。 詳しくは Library Headers - GNU Emacs Lisp Reference Manual にあり。

    なおプロンプトが表示されているときに C-h をタイプすると利用可能と思われるキーワードが表示される。 いつか使うかもしれないので簡単にメモ。

    • abbrev: 略記のハンドリング、タイピングショートカット、マクロ
    • bib: 参考文献一覧の機構
    • c: Cに関するプログラミング言語
    • calendar: カレンダとかタイムマネジメントなツール
    • comm: 通信、ネットワーク、リモートファイルアクセス
    • convenience: より速い編集に便利なもの
    • data: テキストでないデータの編集
    • docs: Emacs 文献の便宜
    • emulations: 他エディタのエミュレーション
    • extensions: Emacs Lisp言語の拡張
    • faces: テキストのフォントとカラー
    • files: ファイルの編集と操作
    • frames: Emacsのフレームとウィンドウシステム
    • games: ゲーム、ジョーク、娯楽
    • hardware: システムハードウェアとのインタフェース
    • help: オンラインヘルプシステム
    • hypermedia: テキストや他メディアタイプとの結びつけ
    • i18n: 国際化とキャラクタセットのサポート
    • internal: Emacs内部向けコード、ビルドプロセス、デフォルト
    • languages: 言語編集向けの専用モード
    • lisp: Emacs Lisp含むLispのサポート
    • local: あなたのサイトでのローカルコード
    • maint: Emacs 開発ツールおよび支援
    • mail: メールの閲読と投稿
    • matching: 検索、マッチング、並べ替え
    • mouse: マウスサポート
    • multimedia: 画像と音楽
    • news: USENET ネットニュースの閲読と投稿
    • outlines: 階層的なアウトラインとメモ取り
    • processes: プロセス、サブシェル、コンパイル
    • terminals: テキストターミナル(tty)
    • tex: TeX ドキュメントフォーマッタ
    • tools: プログラミングツール
    • unix: UNIX の機能とのインタフェースとエミュレータ
    • vc: バージョン管理
    • wp: 文書処理

以上により以下なヘッダコメントが foo.el ファイルに挿入される。

;;; foo.el --- Support for FOO

;; Copyright (C) 2014  Chiyanop

;; Author: chiyanop <chiyanop@local>
;; Keywords: local

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.

;;; Commentary:

;;

;;; Code:



(provide 'foo)
;;; foo.el ends here

おしい。 Author の設定どうやるんだろ。あと This file is not part of GNU Emacs. なメッセージも一緒に入ってほしいところ。

Auto Insert Mode のカスタマイズ

結論は以下の設定。これを ~/.emacs.d/init.el とかに書いておくと所望するコメントが挿入されました。

(setq user-full-name "Your name")
(setq user-mail-address "Your email address")
(eval-after-load 'autoinsert
  '(setq auto-insert-alist
         (put-alist
          '("\\.el\\'" . "Emacs Lisp header")
          '("Short description: "
            ";;; " (file-name-nondirectory (buffer-file-name)) " --- " str "

;; Copyright (C) " (format-time-string "%Y") "  "
            (getenv "ORGANIZATION") | (progn user-full-name) "

;; Author: " (user-full-name)
            '(if (search-backward "&" (line-beginning-position) t)
                 (replace-match (capitalize (user-login-name)) t t))
            '(end-of-line 1) " <" (progn user-mail-address) ">
;; Keywords: "
            '(require 'finder)
            '(setq v1 (mapcar (lambda (x) (list (symbol-name (car x))))
                              finder-known-keywords)
                   v2 (mapconcat (lambda (x) (format "%12s:  %s" (car x) (cdr x)))
                                 finder-known-keywords
                                 "\n"))
            ((let ((minibuffer-help-form v2))
               (completing-read "Keyword, C-h: " v1 nil t))
             str ", ") & -2 "

\;; This file is not part of GNU Emacs.

\;; This program is free software; you can redistribute it and/or modify
\;; it under the terms of the GNU General Public License as published by
\;; the Free Software Foundation, either version 3 of the License, or
\;; (at your option) any later version.

\;; This program is distributed in the hope that it will be useful,
\;; but WITHOUT ANY WARRANTY; without even the implied warranty of
\;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
\;; GNU General Public License for more details.

\;; You should have received a copy of the GNU General Public License
\;; along with this program.  If not, see <http://www.gnu.org/licenses/>.

\;;; Commentary:

\;; " _ "

\;;; Code:



\(provide '"
       (file-name-base)
       ")
\;;; " (file-name-nondirectory (buffer-file-name)) " ends here\n")
          auto-insert-alist)))

以降、設定に至るまでの云々。まずヘッダコメントの雛形はどのように定義されてるのか。

どうやら auto-insert-alist 変数に雛形が保持されているらしく M-x describe-variable して変数の説明を確認することに。

曰く auto-insert-alist は (CONDITION . ACTION) または ((CONDITION . DESCRIPTION) . ACTION) な要素からなるリストで、 CONDITION はファイル名にマッチする正規表現かメジャーモードのお名前、 DESCRIPTION はプロンプトか何かに使われる文字、 ACTION は挿入の骨組みになる部分、とある。

auto-insert-alist の初期値は autoinsert.el に定義されていて内容は以下。 ACTION がどの辺りに該当するのかわかりにくい。

    (("\\.el\\'" . "Emacs Lisp header")
     "Short description: "
     ";;; " (file-name-nondirectory (buffer-file-name)) " --- " str "

;; Copyright (C) " (format-time-string "%Y") "  "
 (getenv "ORGANIZATION") | (progn user-full-name) "

;; Author: " (user-full-name)
'(if (search-backward "&" (line-beginning-position) t)
     (replace-match (capitalize (user-login-name)) t t))
'(end-of-line 1) " <" (progn user-mail-address) ">
;; Keywords: "
 '(require 'finder)
 ;;'(setq v1 (apply 'vector (mapcar 'car finder-known-keywords)))
 '(setq v1 (mapcar (lambda (x) (list (symbol-name (car x))))
                   finder-known-keywords)
        v2 (mapconcat (lambda (x) (format "%12s:  %s" (car x) (cdr x)))
           finder-known-keywords
           "\n"))
 ((let ((minibuffer-help-form v2))
    (completing-read "Keyword, C-h: " v1 nil t))
    str ", ") & -2 "

\;; This program is free software; you can redistribute it and/or modify
\;; it under the terms of the GNU General Public License as published by
\;; the Free Software Foundation, either version 3 of the License, or
\;; (at your option) any later version.

\;; This program is distributed in the hope that it will be useful,
\;; but WITHOUT ANY WARRANTY; without even the implied warranty of
\;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
\;; GNU General Public License for more details.

\;; You should have received a copy of the GNU General Public License
\;; along with this program.  If not, see <http://www.gnu.org/licenses/>.

\;;; Commentary:

\;; " _ "

\;;; Code:



\(provide '"
       (file-name-base)
       ")
\;;; " (file-name-nondirectory (buffer-file-name)) " ends here\n")

Autoinserting - Features for Automatic Typing によれば "Short description: " とそれ以降が ACTION にあたるらしい。 記法は Skeleton Language - Features for Automatic Typing によるもの。

さらに Skeleton Language - Features for Automatic Typing によれば "Short description: " はプロンプトに表示される文字で、それより後に続く要素が挿入されていく模様。

要は変数 user-full-name と user-mail-address を設定すればよさそう。 あと This program is… の前の行に This file is not part of GNU Emacs. を挿入してあげればよさげ。

かくかくしかじかで先に説明した設定に至りましたと。

これにて Emacs Lisp なパッケージを量産できるようになるのか。

Monday, May 26, 2014

gFab 2014/5/25

gFab okinawa に参加。本日から自分もモノづくりに参戦。 @mgwsuzuki 殿の以下なエントリを参考に。

カッティングする際はマシン内部の底に適当な紙をひく、 画像を焼きこむときはブツ側にマスキングテープをまく、 などなど参考になる技が多数展開。

以下、 MDF 板 2.5mm から切り出したブツ。

DSC_1431.JPG

いただいたネオジウム磁石とワッシャーを即興で仕込み、

DSC_1433.JPG

いちおうの完成形。

DSC_1432.JPG

蓋に結構重みがあることに気づいたので磁石なくてもいいかも。

MDF 板から煮汁が溶け出して切断面がそこはかとなくベトベト。 これ回避のため紙ひいたりテープ貼ったりするのですか、なるほど。

あとはものを挟み込むナニかを内側に取り付ければだが、 とりあえず百均を散歩して調達するとして。

さらに挟み込むナニを 3D プリンタで作れると面白みが増す予感。 今後の宿題ですな。

Saturday, May 24, 2014

DevOps Okinawa #4

DevOps Okinawa #4 参加してきました。進め方の書が以下。

http://okinawadevops.github.io/

すごい広島 さんの方式をさらに本格活用していく流れに。

PR のマージについても 2 名以上のメンバーによる Looks Good To Me をもってマージするルール。 LGTM ってのはコメントに :+1: とかするだけでいいみたい。 LGTM.in/g なんてのもあるらしい。

しかし取り急ぎ使いたい Gemfile が PR にあったので LGTM なルール無視しつつマージするとこれは出来ちゃった。 GitHub 的には :+1: のカウントには頓着無いようですな。 しかし設定とかすればできるだろうか。うーん、スルー。

すごい広島 さんの方式だと、開催にあわせて ひとつのマークダウンファイルをみんなで編集しているっぽい。 DevOps Okinawa #4 な方式は各個人でページを追加していく方式なようで、そこは違うみたい。

当方、だいぶ etherpad なるツールのお世話になっているので、 共同とゆえばどちらかというと GitHub よりそちらに流れたい勢ですが、 静的にしとくことはゆくゆく財産になりますゆえ、 どうか間をとりもってくれるツールを妄想する次第。

みんな思いのまま課題に取り組めた乙なもくもくでございました。

そのあとの飯会で ansible やら RHG やら SICP やら カーネル/VM やらデバイスファイルから向こう側へいく話やら、まーてんこ盛り。

SICP は英語で読むのがいいのかあ。

Saturday, May 17, 2014

JAWS-UG沖縄Docker祭り

参加してきました JAWS-UG沖縄 AWSハンズオン/もくもく勉強会 2014年5月

AWS なグループと、 Docker なグループに分かれるとのことで、自分は Docker なグループへ。

DSC_1420.JPG

こちらは AWS なグループ。

DSC_1421.JPG

ほとんどネットにある情報だけど、 他の人が Docker を使っている様子はまだ見たことがなかったのでひとまず収穫あり。

よくあるように Docker 使っていくうちにサーバがゴミ溜め化する現象ってのはなんとも防ぎようがない模様。 いまのところそういうモノだししょうがないかなあ。 ゴミ溜めも嫌いじゃないし。

つまるとこプロセスとリソースの分けのツールであるらしい。 仮想マシンと用途が似ているけど比較して云々するものじゃなさそうだし、 どちらが優れているか議論は遠慮するとして。

デプロイで楽できるかもしれない件。 今のところ自動構築ツールで充当できているし、うーん。 デプロイの標準手法としてさらに確立されるまで待ちますか。 つうかそもそも案件ベースではそんなサーバ台数いらないのでジレンマ感・・・

今後の展望については収穫ゼロかなあ。 まだまだ下位な機能でしかない模様。 リソース最適化な方面よりデプロイの方面が明るいのではないかと個人的に思うけど、 先に進むには上位のツールか何かがいくつか必要な気がする。どういったものだろう。

なお、後半の中継セッションは手持ちのプログラムの修復に勤しんでしまいました。 申し訳ない。 いきなり壊れるんだもの。

ひとまず妄想が掻き立てられました。

Sunday, May 11, 2014

gFab 2014/5/11

gFab okinawa にいってきました。

http://gfab-okinawa.github.io/

そろそろ当方も何か作ってみたく、ブックカバーなものを妄想しつつレーザーカッターの手ほどきを受けるなどしておりました。

DSC_1398.JPG

今回実験的に作ってもらったもの。ブックカバーの背の部分。

DSC_1407.JPG

自重でカバーが閉じるようにするにはまだ弾力が強い。 横幅をもう少し確保してあげるとよさげかもしれない。

設計は Inkscape でいける模様。

DSC_1378.JPG

ページ設定を最初にしてあげるのがコツっぽい。デフォルトの単位とカスタムサイズの単位はしっかり mm にしてあげると。

今回のブツのデータもいただきました。

https://gist.github.com/chiyano/fafbb117d0f42e810c4b

RasPi に V6

以下なブログ教えてもらいましたので、まずはこれを取っ掛かりにするとして、

http://mgwsuzuki.github.io/

しかしまず以下な JTAG ツールと USB シリアルなブツを入手する必要が、

DSC_1410.JPG

いやそのまえに Raspberry Pi を。まだまだ先は長い。

elisp関数を一時的に別な名前へ置き換える

Emacs Lisp の関数名を一時的に別な名前へ置き換えたい件で、 何使えばいいのかもよくわからないのでマニュアルを斜め読みした話。

ネットを漁ったところ defalias なるものがどうもよさげ、ということで以下なマニュアルを読む。

12.4 Defining Functions

結論。どうもそういった用途には defalias でなく fset を使うものらしい。サンプルは次回ポストするとして。

以下、メモ。ついでに defun についてもマジメに再確認。

defun name args [ doc ] [ declare ] [ interactive ] body

関数の定義は defun マクロでなされる。シンボル名を関数として定義する。

defun のフォームに見慣れない declare なるものが。 これは関数を obsolete として扱うなど特別な効果がある模様。 詳しくは 12.12 The declare Form 参照ってことで今回はスルー。

既存の関数の再定義に注意とある。関数の再定義は意図して行われることもあるため許されているらしい。

defalias name definition &optional doc

すでにある関数シンボル definition をシンボル name で定義するとある。 doc があれば name のドキュメントに使われるけど、なければ definition のものが使われると。

defalias の使いどころは、ソースコードの中に明示的に名前があらわれるようなところ。 defalias は、どのファイルに関数が定義されてるか記録するから。 defun も記録する。 この記録は unload-feature 関数でのアンロードに使われる模様。

この記録ってのが不要なら fset でいい模様。

あと car みたいなプリミティブな関数のシンボルの再定義はリスキーとある。

どうなるか一度試してみますか。

Wednesday, May 7, 2014

Okinawa.rb#117

117 回目の Okinawa.rb に参加させていただきました。

さっそく、なにやら @tompng さんのネタが展開されだした様子。

Minecraft のサーバを Sinatra でラップして Web API から呼べるようにしたとのこと。

訊いたところ、 Minecraft なるものはサーバサイドと画面サイドとに分かれた作りになっていて、 それぞれを実行することで Minecraft の世界が表示されるらしい。

https://minecraft.net/

サーバ側は標準入力を受けるようで、 これにコマンドを食わせると Minecraft の世界をある程度自由に弄れるとのこと。

このサーバサイドの標準入力を Sinatra でラップしたとのこと。なるほどー

https://gist.github.com/tompng/734b9562c8f3a10ad639

Minecraft のサーバサイドはフリーにダウンロードできて、クライアントサイドは商用であるとのこと。 買いたくなりました(笑)。

そういえば以下なブツは初めて実物を見させてもらいましたが、なかなかに固くて丈夫。 色々なブツに組み立てられそうな予感。

今回も楽しませていただきました。

Sunday, April 27, 2014

Cloud on the BEACH2014

2014/4/26 JAWS-UG 沖縄支部主催による Cloud on the BEACH2014 いってきました。

滑り込みセーフでのエントリとなりましたが、今年も参加させていただき恐悦至極。

勉強会の部(経験者向けトラック)

あまり AWS なるものを使ってないにも関わらず、 空きが多いという理由で何となく経験者向けトラックの方に行ってみる。

http://jaws-ug-okinawa.doorkeeper.jp/events/9973

結果、どうにかついていくのがやっとでしたが・・(汗)

流れは最初にお題が出され、それについてチーム別でRFPを作成するとういもの。 今回のお題は、上司からスライドシェアのようなプレゼン資料アップローダーについて依頼されるといった体。

グーとパーでチーム分けしたので、以下グーチームの発表のご様子

以下パーチームのご様子

お題にあった全文検索には CloudSearch による対応がひとつ考えられると。 ファイルアップローダーの実装にはDoS攻撃向けに対策する必要ありだが、 一旦S3にアップしてしまう手法だと幸せになれうるなど参考になる話をいただきました。

個人的にはレギュレーション縛りありで 実装の部 なるものを妄想するのですが、 それを実現する低価格な枠があれば・・・んー、ないよなあ・・

実現にはやはり強力なスポンサー殿のお力が必要なのでしょうかとも思う所存。

ビーチパーティーの部

梅雨に入りかけている時期にも関わらずよく晴れました。

情報筋によると、県内某居酒屋で主催者な方々による晴天祈願が行われたらしくその成果によるものの様。

今年も毎年恒例の焼肉奉行殿が腕を振るっておりました。

毎年着実に継続している当イベント、主催くださっている中の方々のパワーには本当に恐れ入ります。

お疲れ様でした。

Tuesday, April 22, 2014

DevOps Okinawa #3

DevOps Okinawa #3 に参加してきました。

https://github.com/OkinawaDevOps/DevOpsOkinawa-3

もくもくネタはとくに決めてなかったので、とりあえずPacker で VirtualBox 向けのイメージを作成することにトライしてみることに。

会の進行

そもそも、会の進行についてもまだよくわかっていないので、最初に README.md をよく読む。

やることを Issue 登録して進行していく方式。これは "すごい広島" 方式、というものの模様。

Packer をインストール

手始めな Issue を登録し、早速、以下な記事を参考に Packer をインストール。

http://www.packer.io/intro/getting-started/setup.html

当方 Mac のため Brewfile に以下な記述があることを確認し、

# Add Repository...
tap homebrew/binary
# Packages...
install packer

以下でインストール。

brew bundle

GETTING STARTED みながら Packer を使う

とは言えまだ Packer の使い方もよくわからないので GETTING STARTED に従ってやってみる。

http://www.packer.io/intro/getting-started/build-image.html

GETTING STARTED では Redis がプリインストールされた Amazon EC2 AMI を作成する模様。

イメージのビルドに t1.micro インスタンスを使うので AWS アカウントが必要。

Packer がビルドするために使う設定ファイルは、テンプレートと呼ばれる模様。テンプレートは以下(example.json)

{
    "variables": {
        "aws_access_key": "",
        "aws_secret_key": ""
    },
    "builders": [{
        "type": "amazon-ebs",
        "access_key": "{{user `aws_access_key`}}",
        "secret_key": "{{user `aws_secret_key`}}",
        "region": "us-east-1",
        "source_ami": "ami-de0d9eb7",
        "instance_type": "t1.micro",
        "ssh_username": "ubuntu",
        "ami_name": "packer-example {{timestamp}}"
    }]
}

aws_access_key と aws_secret_key はテンプレートの中に書かず、ユーザ変数で渡すべしとのこと。

テンプレートの builders セクションはビルダーの設定で、この場合 amazon-ebs というビルダーが使用される模様。 amazon-ebs はソース AMI から EBS-backed AMI をビルドしてプロビジョニングを行い、新しい AMI にリパッケージングするとある。

目標は VirtualBox のイメージを作成することだけど、 VirtualBox 用のビルダーはきっとあって、 それを導入すればあとはテンプレートを作成すればいいのではないかと予想。多分。

packer validate でテンプレートの内容をチェック。

packer validate example.json

以下のとおり良好。

Template validated successfully.

packer build でイメージのビルド。 aws_access_key と aws_secret_key は伏せますです。

packer build -var 'aws_access_key=xxxxxxxxxxxxxxxxxxxx' \
  -var 'aws_secret_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  example.json

実行し終えると以下なメッセージが末尾に、

==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:

us-east-1: ami-eb998182

EC2 Dashboard で US East に切り替え、 AMI(ami-eb998182) の登録を確認。早速 Launch してみる。

SSH ログインは以下、

ssh ec2-54-237-228-42.compute-1.amazonaws.com -lubuntu \
  -i ~/.keypairs/use-packer-NVirginia_us-east-1.pem

問題なくログインできる。

EC2 Dashboard をみると、作成した覚えのないインスタンスがすでにターミネートされている。 名前は Packer Builder 。 これは Packer がイメージのビルドのためソース AMI からインスタンス起動した痕跡かと。

ソース AMI からコピーして新しいイメージを作ることができましたということで、ひとまず成果あり。

次の機会に、以下なエントリを参考に何かをプリインストールしたイメージの作成にトライしてみます。

http://www.packer.io/intro/getting-started/provision.html