2013年8月21日水曜日

読書感想文: Software Design 2013年9月号「sedの詳細と利用法」

Software Design 2013年9月号の第1特集が、「sed/AWK再入門」という非常に魅力的なものだったので、買ってきました。特集の一部として、「sedの詳細と利用法」というsedに特化した内容で一章分割り当てられています。いちsedユーザーとして、とても楽しみでした。別にsed好きだからというわけではありませんが、読んでいてこの章には思うところがふつふつと湧いて来たので、せっかくなので感想など書いてみます。ちょうど読書感想文の季節ですし。感想と言っても、身銭を切って記事を買った人間としての、記事に対する不満がほとんどです。

誰得なの?
いったい誰得の記事なのか全くわかりませんでした。感想はこれに尽きます。要は、入門者向けとしても、sed知ってる人向けとしても、ものすごくビミョーな風に感じました。おそらく記事の方向性としては、入門者向けに、これからsedを覚えてバリバリ使ってこうぜ、というような方針があるのだろうと思います。「s」コマンドに多くの紙幅を割いていることからも、それはわかります。その割にsedの重要な基礎的な部分がすっ飛ばされています。たとえば、sedに指示を出すにあたって最低限知っていなければならない、sedの編集サイクルに関する説明がありません。これは基礎中の基礎です。入力、コマンド処理、出力、それらがどういう段取りで行われるのかの理解がなければ、sedを操れるようにはなれないでしょうし、それどころかmanページすら理解できないと思います。その一方で「b」「t」「:」の制御系コマンドなど、編集サイクルの理解がないと使いこなせないような、一定レベル以上のユーザー向けのコマンドに紙面が割かれています。

他には、sedを使うのに必須の知識となる「-n」オプションの説明があっさりしすぎています。「置換された行だけ表示したい場合は、sedを「-n」オプション付きで起動し、標準出力を抑制します。」とだけ説明があります。記事中でのサンプルにとってはそのとおりなのですが、「-n」オプションは置換された行だけ表示したい場合に使うためにあるオプションではありません。「-n」のちゃんとした説明が無いということは、コマンドラインツールとしてあまりにも重要な入出力に関わるちゃんとした説明が無いということです。「-n」オプションと「p」コマンドは、sedの出力制御の要となる基礎中の基礎ですが、特に「p」コマンド(フラグではなく)の説明はほとんどなく、一体誰にsedの何を伝えたいのか理解に苦しみました。「w」コマンドみたいなリダイレクトでどうにでもなるコマンドに紙面を割くくらいなら、入出力の説明のために割いた方が懸命でしょう。もし、この記事の対象が、「p」みたいな基本的なコマンドはすでに知っている人向けのものだというのであれば、なぜ「s」というもっと基本的なコマンドを長々と説明しているのか疑問です。

ちなみに、入門者向けの内容からはちょっと外れますが、「-n」はsedスクリプトの移植性を高めるためのポイントでもあります。移植性に考慮したシェルスクリプト中でsedを使う場合には、「-n」は極力使用した方が良いのです。実は、sedの自動出力(posixで言うところのデフォルト出力、自動出力はGNUの用語)は、実装によってその出力契機がまちまちです。つまり、自動出力を抑制していない場合は環境によって思わぬ挙動となってしまうことがあるので、それを防ぐために-nを常に指定しておくというのが、sedをシェルスクリプト中で使うときのTipsとしてあります。例えば、IEEE Std 1003.1, 2004 Editionのsed仕様には、こういう記述があります。
The treatment of the p flag to the s command differs between System V and BSD-based systems when the default output is suppressed. In the two examples:

echo a | sed    's/a/A/p'
echo a | sed -n 's/a/A/p'

this volume of IEEE Std 1003.1-2001, BSD, System V documentation, and the SVID indicate that the first example should write two lines with A, whereas the second should write one. Some System V systems write the A only once in both examples because the p flag is ignored if the -n option is not specified.

自動出力の挙動の違いについては、さらにGNU sedを例にとると、
$ echo a | sed N
a
$ echo a | sed --posix N
$
という、わかりやすい違いが確認できます。これについては、GNU sedのマニュアルにも、GNU sedと他の多くの実装とでは、自動出力を抑制していない場合に、挙動が異なるという点が明記されています。
Most versions of sed exit without printing anything when the N command is issued on the last line of a file. GNU sed prints pattern space before exiting unless of course the -n command switch has been specified. This choice is by design.

不可解な挙動に悩まされたくなければ、極力-nを付けるようにするのが懸命なのです。赤子泣いても-n取るなと、昔の人も言いました。「-n」オプションは、移植性の話はともかくとしても、出力制御という意味でsed操作の超重要な部分なので、-nの説明はちゃんとした方が良いと思います。そのためにも、入出力とパターンスペースなど、基本的な編集サイクルの説明が必要になるわけです。

あと、細かいところですが個人的に見過ごせなかったものとして、入門者に誤解を与えるというか、sedの魅力を半減させかねない記述があったので、それも触れておきます。「-e」オプションの説明として、ワンライナーとして使う場合「-e」オプションに続けてスクリプトを記述します、という内容があります。これは完全に正しいのですが、ぶっちゃけ「-e」は要りません。もちろん著者の方もそれはご存知だと思います。ただ、sedの魅力は、コマンド体系がシンプル (たった1文字!) なので、コマンドラインからワンライナーでさくっと書けちゃう、という点があります。それなのに、不要な「-e」を付けてね、なんてタイプ数が増えてワンライナー向けの記述としては面倒くさいだけです。sedのシンプルさが損なわれてしまいます。複数コマンドを別引数として与える場合に「-e」が必要となりますが、記事のサンプルコードもほとんどが「-e」の要らない内容です。もちろん、シェルスクリプト中などで、可読性や安全性のために「-e」を明示するというのは理解できます。

これは余計なお世話かもしれませんが、入門者向けなら、サンプルはできるだけ実際的な例を挙げるともっと良かったんじゃないかなと思いました。ほとんどが「aaabbb」とかなので、これだと使ってみようという気もあまり起きないのではないかなと思いました。

そろそろ疲れてきたのでまとめると、入門者向けの記事としては重要な基礎をすっ飛ばしすぎている、中上級者向けの説明としては、目新しいことが何もない。結果的に、誰向けなのかよくわからなくて、誰も得るところがない、という内容になっています。もちろん、紙幅の都合で、重要なところも止むなく落とした、というのも理解はできます。それでも、比較的どうでもいい「b」とか「:」とかの制御系や、「y」とか (trで十分では?)、「w」とかニッチな機能に紙面を割いているのが解せません。少なくとも私は、この記事から得るものはありませんでした。また、これからsedを操作できるようになりたいと思う入門者の基礎固めにも役立たないと、私は思います。

以上、身銭を切って記事を買った結果として不満ばかりになってしまいましたが、私はsedが好きなので、こういった特集が組まれることはすごく良いことだと思います。

2013年6月22日土曜日

Deckard - GNOME開発版GUI確認ウェブアプリケーション

GNOMEアプリケーションの開発版GUIを確認できる、DeckardというWebアプリケーションがあります。実際に起動できるわけではないので、あくまで確認用のツールですが、翻訳時などの役に立つので紹介も兼ねて使用方法を簡単にまとめてみました。

http://www.gnome.gr.jp/l10n/gnomeja-guide/deckard.html

Deckardは、現状ではGNOMEしかサポートしていませんが、GtkBuilderなどで利用されるUIファイルを使用しているアプリケーションには適用ができるようです。実際にLibreOfficeでもローカライズに利用できないか議論がされています。

Deckardのプロジェクトのページは以下です。ライセンスはGNU Affero GPL v3です。
https://launchpad.net/deckard

2013年6月1日土曜日

GNOME 3.10から「別名で保存」は「名前を付けて保存」に変わります

ファイル保存メニューに「別名で保存」というのがありますが、これは3.10から「名前を付けて保存」に変更される予定です。


変更理由としては、以下などがあります。
  1. 新規作成ファイルなど名前がまだ無い場合に「別名で〜」はおかしい。「名前を付けて〜」の方が実情にあっている。
  2. 同じ名前を付けてもかまわないので、必ずしも別名となるわけではない。
  3. LibreOfficeやFirefox、あるいはWindowsの各種アプリなど、「名前を付けて〜」が採用されているものが多いので用語が揃っていたほうがわかりやすい。
下にeogでのイメージを紹介していますが、基本的にGNOMEアプリすべてが変更対象になります。もし変更漏れや、変更にともなう問題などにお気づきになればお知らせいただければ感謝いたします。

現在(3.8)は「別名で保存」


















3.10の開発版は「名前を付けて保存」

2013年3月15日金曜日

GNOME3.8(Beta)を試してみる

GNOME3.8のBetaバージョンにあたる、GNOME 3.7.90のLiveイメージが公開されています。
新しいGNOMEをいち早く触ってみたいという方、開発や翻訳に参加したいという方、ぜひ試してみてください。













以下のサイトからGNOME-3.7.90.isoをダウンロードしてください。DVDやUSBに書き込んでLiveイメージとして使用できます。あるいはそのまま仮想マシン上でも起動できると思います。
http://ftp.gnome.org/pub/GNOME/misc/testing/


もし不具合を見つけたら


テスト版なので、バグや問題に遭遇することもよくあると思います。むしろそのためのテスト版なので、もし何かおかしなものを見つけたら、ぜひ報告してください。自分がよく使う機能で問題が見つかれば、バグ報告してリリース前に修正すれば、リリース後の本番環境では快適に利用できるようになります。
特に日本語翻訳でおかしなものを見つけた場合はぜひお知らせいただけるとありがたいです。

連絡先

● 日本語翻訳
- 翻訳チームメーリングリスト
- 私個人宛
日本語翻訳については、上記のメーリングリストにご一報ください。
メーリングリストを使いたくない場合は、このポストにコメントをくださっても構いませんし、私のTwitterアカウント(@jmatsuzawa)にご連絡くださっても構いません。


● プログラムのバグ
- GNOME Bugzilla

プログラムのバグについては、GNOME Bugzillaという専用のサイトがあるので、そちらからご一報ください。ただし、アカウントと英語での報告が必須となります。ちょっと敷居が高いという方はやはり私宛に直接お知らせいただければ、私で対応できるものは対応いたします。



日本語化

デフォルトでは英語環境です。まずは日本語表示に切り替えましょう。
gnome-terminalを起動して、以下のコマンドを実行してください。GNOME Shellを起動しなおして日本語デスクトップになります。

--------
LANG=ja_JP.UTF-8 gnome-shell --replace &
--------
コマンドのイメージ











日本語入力

日本語入力をする場合も設定が必要です。デフォルトではUS配列用の設定になっています。

1. トップバー右端のユーザーメニューから[Settings]を選択して、設定パネルを起動します。
2. 「地域と言語」を選択します。
3. 「入力ソース」欄の[+]ボタンを押します。
4. 「日本語」>「日本語」(Anthy)を選択して「追加」ボタンを押します。(「日本語」>「日本語」の入力ソースは、日本語配列の直接入力用です。US配列に慣れていない場合は、これも追加してUS配列用の入力ソース(「英語(US)」)を削除するとよいでしょう。)

入力ソースの追加












入力ソースの切り替え

デフォルトでは、Super(Windows)キー+Spaceで切り替えることができます。
あるいは、トップバーの入力ソースアイコンから切り替えることもできますが、入力切換にマウス操作が必要になるのでたぶん不便でしょう。

入力切り替え













このショートカットは設定で変更することもできます。
1. ユーザーメニューから[Settings]を選択して、設定パネルを起動します。
2. 「キーボード」を選択します。
3. 「ショートカット」タブを開きます
4. 左パネルの「タイピング」を選択します
5. 右パネルの「Switch to next input source」を選択します
6. お好みのキーを入力します。


GNOME Classic

GNOME Classicも試してみます。気になる人は、これを機会に試してみるとよいでしょう。
噂のGNOME Classic













このisoにはGNOME Classicが入っていませんが、リポジトリからパッケージを利用することができます。

1. gnome-terminalから以下のコマンドを入力して、必要なパッケージをインストールします。
sudo yum install gnome-classic-session

2. gnome-terminal、もしくはAlt-F2のコマンド起動から以下のコマンドを入力して、Classicモードに切り替えます。
gnome-shell --mode=classic --replace

GNOME ClassicのUIについては、あえて多くを語りません。。。現時点で私から言えることは、総統閣下のお怒りが鎮まることはなさそうだ、ということだけです。


アクセシビリティアイコンはどこいった?

3.8からはトップバーのアクセシビリティ(ユニバーサルアクセス)アイコンがデフォルトでは表示されなくなりました。実は、GNOME Shell拡張機能の人気ベスト2を誇るのが「Remove Accessibility」というまさにそのものずばりの拡張です。こういった社会情勢を受けての変更になります。

表示方法ですが、何かしらアクセシビリティ機能を有効にすると表示されるようになります。
これは、個人的にはかなり重要な変更点だと考えていますが、余裕があれば別途ちゃんとまとめたいと思います。


もし不具合を見つけたら

ぜひご連絡ください。大事なことなので2回言いました。


それでは、良いGNOMEライフを。

2013年1月6日日曜日

eViacamが日本語をサポート

eViacamに日本語サポートが入りました。日本語サポート版は現時点で開発バージョンでのみ利用できます。

eViacamは、ウェブカメラを使ってマウスポインターを操作できるツールです。マウスなどのポインティングデバイスは使用する必要がありません。カメラでユーザーの顔を自動検出して、上下左右に顔を振るだけで、ポインターの移動、クリック(左・中・右)、ダブルクリック、ドラッグ操作ができます。スクリーンキーボードと併用すれば、手を全く使わずにPC操作ができます。

もしご興味があれば、ぜひ試してみてください。フィードバックも大歓迎です。Windows用の日本語サポート版インストーラーもあります。日本語翻訳チームも存在するので、お気軽にご参加ください。

eViacam:
http://eviacam.sourceforge.net/

Windows用インストーラー:
http://www.crea-si.com/download/eViacam-1.6.1-test-jp.exe

ソース:
http://sourceforge.net/p/eviacam/eviacam/ci/master/tree/

eViacam日本語翻訳チーム:
https://www.transifex.com/projects/p/eviacam/language/ja/

2012年12月30日日曜日

eViacamを翻訳しました

eViacamという、ウェブカムを使ってユーザーの顔の動きに合わせてマウスポインターを操作するアプリケーションがあります。GPLv3+の自由ソフトウェアです。

私がeViacamを知ったのは、2010年11月に、gnome-accessibility-listで流れた1.4リリースアナウンスでした。日本語翻訳されていなかったので、いつか翻訳しようと思いながら数年が経ってしまいました。ようやく今日一次翻訳が上がりました。

というわけで、レビューしてくださる方を大募集中です! とりあえずgithubにパッケージを置いています。翻訳ファイル(po)だけテキストで取得することもできます。インストール方法については公式サイトの情報をご覧ください。開発元へのマージ依頼はこれから進めていきます。

コメントはブログでもtwitterでもメールでも何でも結構です。

# それにしても、intltoolを使ってないものはおなじgettextによるi18nでも正直戸惑いました。




2012年12月26日水曜日

米ホワイトハウス、教育機関での自由ソフトウェアを促進すよう請願が提出される

先日の記事でも紹介したアメリカ合衆国のオンライン請願システム、We the Peopleに、教育機関で使用するソフトウェアを自由ソフトウェアに置き換えていくよう、請願が提出されました (promote the use of free software in our schools. Libre Office, Gimp, GNU Cash and other GPL software which is cost free)。

We the Peopleを通じた請願については、一定期間内に一定数の署名が得られれば、ホワイトハウスは請願に対する回答を行う義務が生じます。これまで同性婚支持の正式表明やSOPA/PIPAに対する回答など社会的に大きな影響を持つ対応が行われてきました。今回の請願については、2013/01/16までに25,000の署名が受理規定数となり、それを満たせばホワイトハウスから何らかの応答が得られることになります。

ただ、今回の請願の内容自体は単なる要望に近いとも言え、自由ソフトウェアを教育現場で普及させる利点などについてはっきりとした説明があるわけではないように感じられました。今後どう展開していくのかわかりませんが、オバマ大統領の対応については期待を持ちつつ見て行きたいと思います。

ちなみに、We the People自体が、ホワイトハウスがGPLv2+で提供している自由ソフトウェアです。ソースはgithubから取得できます。これは他の政府や機関においても、主権者のオープンな政治参加を促すためにWe the Peopleを自由に利用することを考慮しているためです。もちろん他の政府とは日本も想定されています。