Life is very short

2014-08-31

Travis-CIに Perl 5.20を追加するときの注意

| 21:42

追記 リポジトリには, 5.20と書いた場合, 5.20として扱うという

対応が入っているようです. ただ 5.30が仮にリリースされると

ハマる修正なので, 引用符で囲むのが確実です.





必ずダブルクォートでくくりましょう.

そうしないと Perl 5.2と認識されます.


そんな古いバージョンはサポートされていないので,

テストがこけます.


正しい例

perl:
  - "5.18"
  - "5.20"

間違った例

perl:
  - 5.18
  - 5.20

行番号を表示する

| 17:19

https://github.com/peco/peco/issues/180


pecoに行番号を表示する機能を追加してくれないか, という

提案があって, なくても実現できます, ってことで書き込んだら

それでいいということになりました.


行番号を表示したい場合は nlコマンドを使ってください.


% ps aux | nl -ba | peco | perl -wlne 'm{^\s+\d+\s(.*+)} and print $1'

nlコマンドの '-ba'オプションは空行にも行番号をつけるというオプション

です(デフォルトだと空行には番号をつけない).


最後の Perl one linerは行番号を取っ払うためのものです.


イメージ

f:id:syohex:20140831171101g:image


おわりに

Unix的に道具を組み合わせて解決するというのはやっぱり素晴らしい.

昨今の環境には Unix的に解決しづらい, するべきでないものもあるかと

思いますが, pecoには Unix的な考え方がよく合います.

デスクトップ Linuxユーザにおすすめのアプリケーション

| 16:17

ほとんどいないだろうけど, デスクトップ Linuxユーザにおすすめ

アプリケーションの紹介.


shutter

http://shutter-project.org/


f:id:syohex:20140831155503p:image



スクリーンショット作成及び画像加工ツール. Macでいうところの Skitch.

珍しいというと良くないかもしれないですが, Perlで作成されている

デスクトップアプリケーションです.


スクリーンショット作成は各種デスクトップ環境に付属しているので

あれですが, 画像加工の部分がすごく便利です. 上記のように矢印を

入れたり, 文字を挿入したいときに特におすすめです.


Dia

https://wiki.gnome.org/Apps/Dia/


https://wiki.gnome.org/Apps/Dia/Screenshots?action=AttachFile&do=get&target=dia-0.97-integrated-ui.png


UML, フローチャート等を作成できるツール. Windowsでいうところの Visio.

たまに Office(Microsoft Office, LibreOffice)で頑張ってこのような図を

描いている人がいるけど, 断然 Diaの方が楽.


私はコード・リーディングを行うとき, 初めは紙にフローを大雑把に描いて

あとで清書するときに Diaを使ったりもしています.


byzanz

https://launchpad.net/ubuntu/+source/byzanz


Gif作成ツール. 軽量な Gifを作成できます. 動画で撮ったものを Gifに

変換した場合よりもかなりサイズが小さいので気に入っています.

コマンドラインツールで, Gifを作成するときは座標を指定する必要が

あり面倒なのですが, 拙作の byzanz-windowというツールを使うと,

指定した Windowのみを撮影できます. 公式に byzanz-window.pyというのを

配布しているんですが, Python3では動かなかったので Goで書き換えました.



おわりに

他におすすめソフトがあったらぜひ教えてください.

peco v0.2.6がリリースされました

| 15:37

https://github.com/peco/peco/releases/tag/v0.2.6


主な変更点


致命的な問題ではないですが, '--prompt'オプションを使っている人,

使いたい人はアップデートしてください.

2014-08-30

coffee-modeの REPL関連コマンドの改善

| 14:24

REPLに複数行送られない問題を修正しました.

あんまりやることはないかもしれませんが, 対話的に作業しやすく

なったかと思います.


リポジトリ

https://github.com/defunkt/coffee-mode


イメージ

f:id:syohex:20140830142031g:image


おわりに

問題がありましたら, github issuesまでお願いします.

私は職業柄一切 CoffeeScriptを書かないので, 要望とか

問題とかありましたらぜひお願いします.

MELPAに登録前に確認すべきこと

| 13:03

melpaのパッケージのフォーマット(仮) - by shigemk2


以前にも軽く書いたのですが, もう少し丁寧に.


概要

  • パッケージのフォーマット
  • コードの書き方
  • その他

パッケージフォーマットに準拠する


どんなパッケージでも登録できるわけではなく, パッケージの規約に

従わないといけません. 上記の URLは必ず見てください. 英語が大量に

書かれているので読解は困難かもしれないですが, サンプルコードの

ように書くことは忘れないでください. 以下に必須事項を示します.


パッケージの規約についてはいちいち調べるのが面倒なので,

snippetを登録しておくことをおすすめします(私のはこんな感じです)


1行目はファイル名と概要を書く(区切りは --- ハイフン 3つ)

1行目はファイル名と概要です. 必ず書いてください. list-packagesや

package-list-packagesコマンドで表示される部分なのでなるべくわかり

やすく書いてください. あと区切り文字はハイフン 3つで, 2つとか 1つ

ではないので注意してください.


バッファローカル変数 lexical-bidingの設定

バッファローカル変数は下記のように任意の位置書けるのですが,

lexical-bindingの設定だけは特別で必ず一行目に書く必要があります.

;; Local Variables:
;; coding: utf-8
;; indent-tabs-mode: nil
;; End:

具体的には以下のような感じです.

;;; helm-gtags.el --- GNU GLOBAL helm interface  -*- lexical-binding: t; -*-

その他バッファローカル変数の設定はファイルの最後にまとめて書くと

よいでしょう.


必要なメタ情報を書く

とりあえず Author, Version, (依存があれば)Package-Requiresを書いてください.

その他 URL, Keywordsなども必要に応じてつければいいでしょう.


コメントの前は ;;; Commentary:

パッケージ関する具体的なコメントは Commentaryセクションに書きましょう

最近は githubの README.md等あるので, あまり長々とここに書いている

人はいませんが, パッケージインストール時に見ることができるので,

どういうパッケージか, どういうことができるかぐらいあった方がいい

かと思います.


私は書かないことも多いので絶対書けとは言えませんが,

何か書きたいことがあればここに書いてください.


コード部の前は ;;; Code:

コードは Codeセクションに書きます.


ファイルの末尾は ';;; ファイル名 ends here'

具体的には以下のような感じです.

;;; helm-perldoc.el ends here

バッファローカル変数はこの前ぐらいに書いておけばよいでしょう.


コードの書き方

名前空間は一つしかない

Emacs Lispは名前空間が一つしかありません. そのため用意な名前を

つけると簡単に他のパッケージを破壊することができます.


名前空間が一つしかないので, 必然的に長い名前をつけることになるの

ですが, 通常はパッケージ名をプレフィックスとしてつけます.

package-variablenameのような感じで, coffee-end-of-blockのように

なります. パッケージ名がそもそも長すぎる場合は, 単語の先頭の

文字を取ったり, 略語を使ったりするとよいでしょう.


しかし長い名前をつけたから衝突が回避できるわけでもないので,

作成しようとしている同名のパッケージがないかは調べておくと

よいでしょう.


変数, 関数の単語区切り

基本はハイフンがいいです. 一時期 ':'とか '/'が流行って

私もそのようにつけたものがありましたが, 基本的にはハイフンが

よいです. このときハイフンが 2つだと privateという慣習が

あるので, 可能な限り従う方がよいでしょう.


具体的

helm-gtags-find-tag ;; public function
helm-gtags--source-select-tag ;; private function

最低Emacs24.1では動くようにする

Debianとかまだ Emacs23がデフォルトの環境もあるので Emacs23を

切り捨てるというのは場合により良くないと思うのですが, 24.1で

動くぐらいのものをつくっておけば, 現状多くの人は困らないと

思います. 新しい機能がないと動かないというのであれば別ですが,

そうでないなら積極的に最新の機能, 関数を使うのは避けた方が

いいと思います.


よくある例としては setq-localや defvar-localです.

これらは Emacs 24.3で導入されたものですが, これだけのために

最低バージョンを上げるというのはよくないと思います.

fboundpでチェックしてなければ defmacroするという手もあり

ますが, それなら使わない方がよいと思います.


cl-libは積極的に使う

cl.elにはクソみたいな規約があるので, 積極的に cl-libを使って

ください. 正直なんで cl-をつけるだけで今まで問題とされていた

ことが解決されるんかいと思うんですが, 使うだけで許されるので

積極的に使ってください. eval-after-loadでラップする必要も

特に無いです.


必ず一度バイトコンパイルする

バイトコンパイルでは, 未定義変数の使用等の指摘が行われるので

必ず実施してください. あとバイトコンパイルをするときは,

実際有効にするかどうかに関わらず, lexical-bindingを有効に

することをおすすめします. 未使用変数の指摘も行ってくれるように

なりますので, 無駄な変数を知る上で役立ちます.




その他

gitで管理している場合はタグを打つ

melpa-stableというものがあります.

これは安定版パッケージをインストールするための ELPAリポジトリです.

melpa-stableにおける安定版というのはタグのことで, 最新のタグの

バージョンがインストールされます.


なので, 安定してきたと思ったらタグを打ってください.

どの程度の頻度で打つかはまちまちですが, 機能の追加, バグフィックが

行われ, 安定もしているというタイミングで打つのがとりあえずよいかと

思います.


レビューしてもらう

私でも emacs-jpの issuesでもいいので MELPAに登録したいんだけど,

これで大丈夫なのかと心配があるようでしたら遠慮なくお知らせください.

MELPAの管理人の purcellさんや milkypostmanさんはかなり親切なので,

指摘してくれたり, pull requestを送ってくれますが, なるべく

負担をかけない方がいいと思いますので, 何かあれば @までお願いします.