fc2ブログ

本を読む

読書やコンピュータなどに関するメモ

Rubyで_if関数

 いまさらですが。

$ cat if.rb
#!/usr/bin/env ruby

def _if(c)
  e = ''
  if c
    yield
    def e.else; end
    def e.elsif c; self end
  else
    def e.else; yield end
    def e.elsif c, &b; _if c, &b end
  end
  e
end

x = ARGV[0].to_i

_if(x.zero?) {
  puts 'Zero!'
}.elsif(x == 1) {
  puts 'One!'
}.elsif(x == 2) {
  puts 'Two!'
}.else {
  puts "#{x}!"
}
$ ruby if.rb 0
Zero!
$ ruby if.rb 1
One!
$ ruby if.rb 2
Two!
$ ruby if.rb 3
3!

 以上、if相当を関数で定義しました。同様のことを考えた方も多いと思いますが、まぁ、ダジャレみたいなものです。

「Software Design」2012年4月号

 毎年恒例、春の新人向け特集号。今回は、第1特集が「すぐにできて捗るUNIXユーザ管理テクニック」としてサーバーエンジニア入門、第2特集が「スイッチングハブの教科書」としてネットワークエンジニア入門となっている。しかも、サーバー編がこの時期に異動や新人で必要な“ユーザー管理”に、ネットワーク編が“スイッチの仕組み”にネタを絞って、詳しく解説しているので面白い。ちなみに、サーバー編は著者がレッドハット、ネットワーク編は著者がシスコで、それぞれの分野でデファクトスタンダード的な自社製品をモデルにして解説しているのが具体性を上げていて参考になるのだけど、もちろん応用するときはそれを前提に。

 新連載「Linuxカーネル観光ガイド」(青田直大氏)が登場。Linuxカーネルの最新動向を紹介するコーナーで、今回は2011年に追加された(2.6.37~3.1)機能から、fanotifyを中心にいくつかを紹介。

 そのぶん「極めるObjective-C」「勉強会&イベント探訪記」が最終回。「極めるObjective-C」はiCloud対応について。「勉強会&イベント探訪記」は、OSC2011 Fukuokaとアフター・キャンプ・ミーティングのレポート。

 「使えば納得Linux Mintの魅力」は、Linux Mint自身というより、最近のLinuxデスクトップ動向とその中でのLinux Mintの位置づけを解説。最近のLinux(Pear OS含む)やWindows、PC-BSDのデスクトップ画面を並べている見開きが壮観だ。ちなみに、Linux Mint 12はデフォルトではGNOME Shell+MGSE(拡張機能)に、Fedora 16は実デスクトップマシンで起動するとデフォルトでGNOME Shellになる。

 連載インタビュー「Software Designer」は、何回か「Matzの本棚」という企画を組むということで、今回は「JavaからRubyへ」の著者のBruce Tate。

 Hack for Japan連載は、震災1年を機に、この1年間の歩みをふり返る企画。

 そのほか、Emacs連載がDiredとその周辺のTips。Ubuntu連載がLibreOffice 3.5.0の新機能。「システムで必要なことはすべてUNIXから学んだ」がinitとその後継ソフト。OpenFlow連載がTremaによるL3マルチキャストの制御。シェルスクリプト連載がHTMLやSVGの生成。iPhone連載がアプリの画面デザイン。Android連載が、前号でもやったプラグイン(マッシュルーム)について今度は受けるアプリ側の解説。mixi連載がAndroidアプリ開発でのCIやコードレビューを組み込んだワークフロー化。ダイエット連載が有酸素運動重視のトレーニングについて。

「Ubuntu Magazine」vol.07

Ubuntu Magazine Japan vol.07 (アスキームック)

アスキー・メディアワークス (2012-03-09)
売り上げランキング: 386

 毎度おなじみUbuntu専門誌。この号は全面サーバーspecial。

 サーバーといっても、いままで同様、入門者に向けてていねいに作っているなと思う。入門記事が「Ubuntu ServerそもそもQ&A」「Ubuntu Serer完璧セットアップ術」「SSHで自室をサーバールームに」「MicroServerとSambaで作るオリジナルNAS」「LAMPで作るウェブアプリ環境」など。あと連載だけど「使いながら覚えるコマンドライン再入門」も入門者向け。

 一方、サーバー経験のあるパーソナルユーザーには、執筆陣の自宅環境を紹介する「ベテランユーザーのサーバー生活拝見」が興味深い。仮想マシンを活用してるなぁ。

 そのへんの経験者には、「ARMを遊びたおす」「Ubuntu Sererバックアップのキホン」「これで完璧!! Ubuntuで印刷」などもある。「激安VPSで24時間快適サーバー生活」は、いくつかの国内の格安VPSの比較と、Twitterボットの紹介。あと、ロードテストでgfarmfsを使ってるのを見てびっくり。個人的に、いまでいうクラウド的なプラットフォームに興味を持ったきっかけだったり。

 そうそう、みんな大好き学園Ubuntuラブコメ「うぶんちゅ」の今回は、「お嬢様は老執事がお好き!?」。

OSC 2012 Tokyoに行ってきた

 オープンソース関連のイベント「Opensource Conference 2012 Tokyo/Spring」に参加してきました。雨なのに、けっこう人が集まっていましたね。

 現地からGoogle+に上げた写真とその説明を。選択基準は“見た目”です。

 HPのブースでは、Fusion-io社がPCIeフラッシュストレージの新製品「ioDrive2」を展示してました。同社チーフサイエンティストのWoz(Steve Wozniak)の自伝も。

ioDrive2 ioDrive2

 オープンソースUTMのEndian Firewallの展示。左が従来製品、右がCPUをARMにしてストレージをSDカードにした新モデル。

Endian Firewall

 日本GNOMEユーザー会のブースで、GNOME 3の機能であるbroadwayのデモ。ビルド時に有効になっていれば、普通のGTK+アプリのレンダリングを環境変数一発でWebに切りかえる(操作にはWebSocketが必要)。

GNOME 3 broadway

 Ejectコマンドユーザー会は、Webで指示すると光学ドライブがイジェクトして鉄道模型のスイッチを(物理的に)オンオフするというデモで、ウケてました。

Eject command users group Eject command users group

 Kinectで人にあわせてキャラが踊る展示。

Kinect

 Linux-HAブースw。

Liux-HA Liux-HA

「日経Linux」2012年4月号

 特集1「Linux超マスター100ステップ」の執筆に参加しましたので、ご報告と宣伝。初学者向けに100ネタを1/2ページずつ紹介する記事で、私は「中級ゾーン」「上級ゾーン」の計40ネタを担当しました。各1/2ページなので詳しいことはひたすら省いてますが、初学者の方が各項目についてさらに学習するきっかけになればと思います。

 自分のことはさておき、特集2は、“スリム型AtomファンレスベアボーンにSabayon Linuxを入れてWebサーバーに”“HDDが4つ入るキューブ型ベアボーンにCentOSを入れてRAIDなファイルサーバーに”“Core i7マシン+Ubuntu+VMware Playerで、Windows 7 64bit版をぶん回す”という3つの趣向。

 おっと思ったのが、冒頭のReportコーナーに載ってたWalyandの近況。ライブCDもあるというし、試してみようかな。

 インパクトがあったのが特別企画「美声で歌うLinux(前編)」。初○ミ○みたいなタイプの歌声合成ソフト「UTAU」をWine上で動かして、実際に歌わせる入門を解説していた。

 新連載「いまこそ知りたい! CPU再入門」は、ARM7をモデルに、CPUの動作を解説している。今回は、CPUの構成要素は、フェッチやデコードなどのサイクル、パイプライン、SIMDなど。

 enakai00氏のLinuxサーバー連載は、Railsでscaffoldで作ったサンプルアプリを動かすところ。もちろんこの連載なので、起動・終了スクリプトや簡易監視スクリプト、logrotateのあたりに力点が置かれている。エピソードの、forkとexecの間に監視ツールが誤認識した話は、へー。

 超小型Linuxマシン連載は、PandaBoard/BeagleBoardを無線APにする話と、タブレットから操作するときに使いやすいVNCクライアントの選択ポイント。

 Matz氏連載は例外処理なんだけど、RubyのほかにIconやEiffelの例外処理の解説もあり、その2つのRubyへの影響の話もあった。

 ほか、アジア連載がバイドゥに入ったAdamrockerさんと矢野りんさんの話。Windowsからの移行連載が、UbuntuのUnityやキーボード設定。旧型PC連載が、ThinkPad 570でTiny Core Linuxを動かす話。Android向けWebアプリ連載が、WebSocketとNodeのSocket.IOによる描画内容の共有。マンガ「シス管系女子」がbashの履歴の使い方。カーネル機能紹介コーナーがリニューアルして、今回はAoE(ATA over Ethernet)。

2つの文字の並びを機械的に比較する

 16進数の並びなど、ある程度ランダムな文字が並んでいるものを目視比較することがあります。しかし、目視だと大変だし見落しやすい。

 私はUnix系OSで、uniqにコピペで食わせて比較してます。太字部分が入力です。

同じ場合:

$ uniq
01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef
01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef
01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef
^D

違う場合:

$ uniq
01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef
01:23:45:67:89:ab:cd:ef:0l:23:45:67:89:ab:cd:ef
01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef
01:23:45:67:89:ab:cd:ef:0l:23:45:67:89:ab:cd:ef
^D

GNU grep 2.11では-rのときにファイル名を省略できる

 GNU grep 2.11がリリースされてました。

** New features

  If no file operand is given, and a command-line -r or equivalent
  option is given, grep now searches the working directory.  Formerly
  grep ignored the -r and searched standard input nonrecursively.
  An -r found in GREP_OPTIONS does not have this new effect.

 -rオプションを付けてファイル(ディレクトリ)名を指定しない場合は、カレントディレクトリがデフォルトになるそうです。“ .”という2文字の入力が節約できますね。

 試してみます。

$ grep --version
grep (GNU grep) 2.11
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
$ grep -r hash_table
lib/hash.c:struct hash_table
lib/hash.c:hash_table_ok (const Hash_table *table)
lib/hash.h:struct hash_table;
lib/hash.h:typedef struct hash_table Hash_table;
lib/hash.h:bool hash_table_ok (const Hash_table *) _GL_ATTRIBUTE_PURE;
gnulib-tests/localename.c:static struct hash_node * volatile struniq_hash_table[HASH_TABLE_SIZE]
gnulib-tests/localename.c:/* This lock protects the struniq_hash_table against multiple simultaneous
gnulib-tests/localename.c:  for (p = struniq_hash_table[slot]; p != NULL; p = p->next)
gnulib-tests/localename.c:  for (p = struniq_hash_table[slot]; p != NULL; p = p->next)
gnulib-tests/localename.c:  new_node->next = struniq_hash_table[slot];
gnulib-tests/localename.c:  struniq_hash_table[slot] = new_node;
gnulib-tests/test-hash.c:          ASSERT (hash_table_ok (ht));

 以上、単なる「やってみました」エントリーでした。

EmacsでTotemの再生をコントロールする

 たまにテープ起こしの作業をすることがあります。私はそういうときに、Totemで.3gpファイルを再生しながらEmacsでひたすら入力していきます。が、面倒なのは、一時停止するたびにEmacsとTotemとでフォーカスを切りかえなくちゃならないことです。停止が遅れて、少し巻き戻さなくちゃならなかったりすることもしばしば。

 なので、EmacsからTotemの一時停止と再開をするためのEmacs Lispを書きました。ついでに、欲しかった“2秒戻り”“5秒戻り”も。

 見てのとおり、D-Busのメソッドを呼び出してるだけの、超簡単なコードです。が、これで想像以上に快適になりました。まぁ、EmacsとTotemでテープ起こしする人が世の中でどれだけいるかというと、“俺得”ツールかなと。

 …ちなみに、TotemでD-Bus Serviceプラグインを有効にする必要があるとか、そのときのBus Nameはorg.gnome.Totemじゃなくてorg.mpris.Totemとか、そのへんの単純なところで1時間ぐらい悩んでロスしました。

参考資料

Linuxデスクトップで自動マウントを検出する

 最近のGNOMEなどのLinuxデスクトップでは、USBドライブやCD/DVD-ROMなどをudisksで自動マウントしています。

 udisksで発生するイベントは、udisks --monitorでudisksdに接続すると、リアルタイムでモニターできます。

$ udisks --monitor
Monitoring activity from the disks daemon. Press Ctrl+C to cancel.
added:     /org/freedesktop/UDisks/devices/sdb
added:     /org/freedesktop/UDisks/devices/sdb1
job-changed: /org/freedesktop/UDisks/devices/sdb1
changed:     /org/freedesktop/UDisks/devices/sdb1
job-changed: /org/freedesktop/UDisks/devices/sdb1

 この出力を行単位でチェックすれば、例えば、自動マウントされたら何かするといった処理ができます。

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly