「カオスノート」
今月(9月)上旬に出た吾妻ひでおの新作。本人がインタビューで言っているとおり、「不条理日記」からマニアックネタやパロディを抜いて、ナンセンスでシュールな感じを残したような作品になっている。こうやって見てみると、とり・みきの1コマごとにナンセンスギャグを続けるパターンに似てるなと思ったけど、いやそりゃこっちが源流だわ。ところどころ散文詩のよう(作者談)になる箇所も。
オビで高橋留美子が「居心地の良い、ソフトカオスの世界」と、吉田戦車が「『何もかもめんどくさい病』がむくりと頭をもたげた状態の時に沁みた」と書いてるけど、本当にそんな感じ。ただしこういうのが好きな人に限るけど。
Rubyでシェル風多段パイプDSL
bashのShellShock脆弱性の件は、設計レベルの脆弱性であり、非常に残念に思います。
さて、bash側の問題とは別の問題として、CGIでなぜシェルを呼び出す関数(文字列引数のsystem()系)を呼ぶのだろうと思っていたら、多段パイプを使うためだとか。
というわけで、シェルを呼ばない多段パイプをRuby(>=2.1)のDSLで表現してみます。実用的なものではなくて、あくまでネタなのでご注意を。なお、肝心の多段パイプ本体の実装は、コメントにも書いたように「Rubyでシェルもどきを作る - @tmtms のメモ」の丸コピーです。
追記2014.11.1:Open3.pipeline知らなかった。こんな感じ。
Emacsでマッチ箇所が重なる置換
わかる方、教えてください。
Emacs では、確認つき置換にquery-replace(M-%)を使います。
たとえば、「xとxの間にあるスペースを削除する」ために“x x”を“xx”に置換したいとします。このとき、現在のバッファのテキストが以下の内容だとします。
x x x x
期待する結果は、バッファのテキストが次のようになることです。
xxxx
これに対して、“M-% x x RET xx RET !”とすると、バッファのテキストは以下のようになります。
xx xx
これは、最初に“x x”にマッチした直後、ポイント(カーソル位置)がマッチ範囲の後に移動するからです。“x x x”とあるとき、最初に先頭の“x x”にマッチすると、ポイントが2つめのスペース(の前)に移動する、つまりそのスペースは“x x”にマッチしない(パターンの頭の“x”がない)、というわけです。
もしEmacsの正規表現に先読み(lookahead)があれば、“C-M-% x \(?=x\) RET xx RET !”みたいにしていけるんですが。
思いつく回避方法のその1は、置換を2回実行すること。面倒ですが。
思いつく回避方法のその2は、先読み相当の処理をEmacs Lispで書くこと。たとえば、こんな感じのEmacs Lispのコマンドを作ればできます。とはいえ、汎用的にするのは面倒そうです。
(defun foo () (interactive) (let ((replace-search-function (lambda (str &optional bound noerror count) (let (r) (while (and (setq r (search-forward str bound noerror count)) (/= (following-char) ?x) )) r )))) (perform-replace "x " "x" t nil nil) ))
なんかうまい手はないでしょうか、識者の方。
ちなみに、最終的にやりたいことは、和欧間スペースの確認つき削除を1コマンドでやることです。今のところ、上のEmacs Lispみたいなことをやってますが。
「日経Linux」2014年10月号
通読メモ。
この号の目玉は、別冊付録の「Red Hat Enterprise Linux 7が超わかる本」だろう。Webで連載された「Red Hat Enterprise Linux 7がやってきた[概要編] - Red Hat Enterprise Linux 7がやってきた:ITpro」が元になっていて、RHEL 7の変更点についてレッドハット社のスーパーエンジニアたちが分野ごとに分担して解説していて、参考になる。
特集1が、恒例の「Linuxだからできること100」。方面別のツールを1/2ページごとに紹介している。Ubuntu 14.04でUSB/IPが使えるとは知らなかった、試してみよう。
特集2が、「ラズパイで面白工作」。Part 1が水分センサーとRaspberry PiをTWE-Lite DIPで無線接続するネタ。Part 2が、新しいCompute Moduleの実機レポート。
それ系では巻頭レポートで、Raspberry Pi B+の消費電力を自作のUSB電力系で測る記事も。そこを自作かあ。
あと「Raspbery Piでプログラミングで楽しもう」連載が、I/Oを操作するWeb APIインターフェイスをRubyで作る話。
特集3は、「Mintで始めるLinux」。Linux Mintを題材にした、Linux入門記事。
短期連載で、「Firefox OSスマホ『Flame』100%活用法」が登場。今回は、概要と全体的な操作。
まつもとゆきひろ氏のプログラミング言語連載が、Rubyをベースにソフトタイピングを導入した言語「Duck」の設計。呼び出しているメソッドの集合を型とし、変数への代入と照合して型チェックをすることで、型宣言なし・型チェック・ダックタイピングを共存させるようだ。ちょうどRubyKaigiの基調講演でも題材になったとか。
中井悦司氏のDocker連載が、いよいよDockerをインストールして、docker runとかdoker commitとかdocker attachとかdocker saveとか。
systemd連載が最終回。今回は設定ファイルに記述される内容。
「Linuxカーネルの仕組み」連載が、cgrupによるリソース制御。libcgruopのツールを使ってCPUやメモリを制限する話と、systemdによるcgroup制御。
「Ubuntuでやってみよう Linux超入門」連載が、Unity Tweak ToolやPPAにある壁紙による画面カスタマイズ。
LPIC連載が時刻合わせ。稼働中のサーバーでntpdateやめろとか、dataの日付指定の罠とか、ntpd構築とか。systemdとfirewalldのネタも。
ほか、青田直大氏のカーネルハッカー連載が、前回のext2をうけてext3での改良点について。中古PC+Linuxディストロ+OSS連載が、CentOS 7でGlusterFSを動かす話。巻頭レポートで、KNOPPIX 7.4、CoreOS正式リリース、Intel Galileo Gen 2。オススメソフト連載が、PXEブートでPCをイメージバックアップするFOG。美女Linux連載が、ユーザーの追加と削除。コミュニティ訪問連載が、OSC京都ローカルスタッフ。
忘れちゃいけない、「#!シス管系女子 Season 2」が、dfでディスクの空き容量を調べて、[(test)コマンドで閾値と比較する話。
「1から100の整数ただし5つの異なる方法」 by bash
「forやめろ」というプレゼンで、「1から100の整数を出力してください ただし5つの異なる方法を用いて」という話があったので、bashのシェルスクリプトで試してみました。
まあ、気ばらしです。環境はLinuxです。
コマンド一発系
実際のところ、seqで一発なんですが(MacやBSDではjot)。実際の場面で、表示するだけならこれ一択。
#!/bin/bash seq 100
シーケンス式({x..y}の式)で連番を作れますが、echoするとスペース区切りになるので、trで改行区切りに。
#!/bn/bash echo {1..100} | tr ' ' '\n'
printfコマンドは引数が残っている限りパターンを繰り返すので、それを使って1コマンドで処理。
#!/bn/bash printf '%d\n' {1..100}
100行の空行をnlでナンバリングするという手もあります。
#!/bin/bash yes '' | head -n 100 | nl -ba -nln
ループ系
元のプレゼンでいうforに近いやつ。
#!/bn/bash for (( i = 1; i <= 100; i++ )); do echo $i done
シーケンス式とforの組み合わせ。ほかの言語でいうforeachとかeachとかに近いかな。
#!/bn/bash for i in {1..100}; do echo $i done
最初のforと同じようなことをwhileで書いてみます。
#!/bn/bash i=0 while (( i <= 100 )); do echo $((i++)) done
これを数値演算を使わないでやると、こんな感じで。
#!/bn/bash s=x while [ ${#s} -le 100 ]; do echo ${#s} s=x$s done
再帰系
ループは再帰で表現できますね。
#!/bn/bash f () { echo $1 (( $1 < 100 )) && f $(($1 + 1)) } f 1
シェル関数を使わず、自分自身を再帰的に呼び出してみます。
#!/bn/bash i=${1:-1} echo $i (( i < 100 )) && exec $BASH $0 $((i + 1))
その他
dcによる方法。
#!/bin/bash dc -e '[p1+d100!<a]sa1lax'
sedからexprを呼んで次の数を作っていく方法。
#!/bin/bash echo 1 | sed ':a H s/.*/expr & + 1/e /101/!ba g'
無限ループを走らせて、コマンド実行をトリガーに、カウントと表示をする方法。
#!/bin/bash i=1 trap 'echo $((i++)); (( i > 100 )) && exit' DEBUG while :; do :; done
/etcの下にあるファイルから数字を拾ってくる方法。
#!/bin/bash {grep -ohsrI '[1-9]' /etc; grep -ohsrI '[1-9][0-9]' /etc;} | sort -nu echo 100
カウンター変数を使わないでループする方法。100秒かかります。
#!/bin/bash while [ $SECONDS -ne 100 ]; do sleep 1 echo $SECONDS done
「Blow up!」全2巻
永見緋太郎シリーズのことを考えてたら、ふと、ジャズ漫画「Blow Up!」のことを連想した。「あれってずっと絶版状態なんだよなぁ」と思いながら検索したら、電子書籍版が出てた。さっそく買って読み返す。
大学を中退してプロのミュージシャンを目指すサックスプレイヤーの主人公が、下積み生活の中から上を目指す物語。バブル時代の片隅で貧乏して、練習できないとかキャバレーの仕事で危ない目にあったりするけど、主人公は基本的に一途でひねてない若者で、さわやかな青春物になっている。
その一方で、音楽で食っていく厳しさや挫折の部分は、主に周囲の人々を通して描かれている。スタジオミュージシャンとして腕がよく人望もあるけど自分のバンドになると何かが足りないベテラン。神様と呼ばれる世界的なミュージシャンがプレッシャーで自信を失いながらそれを毎回はねのけて名演奏を聴かせる姿。天才的な演奏を聴かせながら女でしくじるライバル。サラリーマンとミュージシャンをかけ持ちしてどちらの道を取るか迷う仲間。実家の仕事を継いだ、主人公の兄も、そうした要素の一つか。
そうしたエピソードは、いま思うと若い頃読んだときにはいまひとつピンと来てなかったけど、おっさんになって読み返すとその重要さに気付く。作者の描写や視点も、主人公とぶつかったり道が違ったりする人物、たとえば大物ミュージシャンの息子やら、ミュージシャンに挫折した芸能マネージャーなどにも優しい。
あと、演奏シーンを細かく描かず、1コマの絵で表現していて、うまいなあと思う。このへんは、小説や映画、アニメなどと違った、漫画ならではの見せ方だ。
「アカマイ―知られざるインターネットの巨人」
KADOKAWA
売り上げランキング: 8,174
「geekなページ」の“あきみち”(geekpage)さんが、一般向けの新書っぽい感じで、Akamaiについてその基礎となるインターネット技術とあわせて解説している本。一般向けといっても、そこは技術的な解説がしっかりしていて、ルーティングやDNS、TCP、海底ケーブルなどのしくみを説明しながら、それをふまえてAkamai自身を説明している。最近、CloudFlareのブログでちょっと話題にのぼった、トランジットとピアリングとかもね。
もちろんAkamaiのいろいろなサービスについても解説されている。単純なCDNサービスがコモディティ化して収益性が低く、SuperRouteなどのWebパフォーマンス系事業が大きくなっている、といったビジネス面も含めて。AkamaiとGoogle、Equinixが同じ年に設立された、というトリビアも。
そうしたAkamaiの変化からインターネット全体の変化についても考察しているのも特徴だ。ハイパージャイアンツとか、インターネットの中立性とか。全体のノリとか視点は、「インターネットのカタチ」と同じ路線。非エンジニア以外に、「アカマイ? ああ、CDNね」という非ネットワーク屋なエンジニアにも参考になるのではなかろうか。
というわけで、出張の移動中にさくっと読んだ。