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月号
技術評論社 (2012-03-17)
毎年恒例、春の新人向け特集号。今回は、第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
アスキー・メディアワークス (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)の自伝も。
オープンソースUTMのEndian Firewallの展示。左が従来製品、右がCPUをARMにしてストレージをSDカードにした新モデル。
日本GNOMEユーザー会のブースで、GNOME 3の機能であるbroadwayのデモ。ビルド時に有効になっていれば、普通のGTK+アプリのレンダリングを環境変数一発でWebに切りかえる(操作にはWebSocketが必要)。
Ejectコマンドユーザー会は、Webで指示すると光学ドライブがイジェクトして鉄道模型のスイッチを(物理的に)オンオフするというデモで、ウケてました。
Kinectで人にあわせてキャラが踊る展示。
Linux-HAブースw。
「日経Linux」2012年4月号
日経BP社 (2012-03-08)
特集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
この出力を行単位でチェックすれば、例えば、自動マウントされたら何かするといった処理ができます。