トップ 最新 追記

日々の破片

Subscribe with livedoor Reader
著作一覧

2018-04-11

_ 今日のバグ

あまりにもあほうなバグのために1~2時間ほど悩む。

最初、次のようなコードを書いていた。

class X
  def htov(a) #本当はjoinでは済まない程度に複雑
    s = "**begin**\n"
    a.each {|e| s << "#{e}\n" }
    s << "**end**\n"
  end
end

最初のと最後のマークを定数にしたほうが良いことに気づく(他のオブジェクトも利用するからだ)。

で、直す。

class X
  BEGIN_MARK = "**begin**\n"
  END_MARK = "**end**\n"
  def htov(a)
    s = BEGIN_MARK
    a.each {|e| s << "#{e}\n" }
    s << END_MARK
  end
end

で、1回動かして問題ないことを確認したわけだが、あとから動かしていると異常なデータが作られまくる。

4文字追加して修正。

追記:Stringを定数として扱いたければ積極的に例外にさせるためにfreezeしたものに定数名をつけるのが良いだろう。BEGIN_MARK = '**begin**¥n'.freeze


2018-04-12

_ ケビン・ミトニックの超監視社会で身をまもる方法を読了

なんとなくおもしろそうなので買って読んだ。

ら、想像よりも遥かにおもしろかった。

そりゃそうだと納得するのは、ケビン・ミトニックはハッカーはハッカーでもコンピュータハッカーというよりは、ソーシャルエンジニアリングのハッカーだった。この男は口車という車に乗って、世界中を飛び回る。まさに立て板に水のようにぺらぺらぺらぺらおもしろ話が出てくる出てくる(本人が執筆しているのではなく、ケビン・ミトニックの放談をロバート・バモシという人がまとめた本のようだ)。

パターンは決まっていて、大体以下のような組み立てになっている。

label:a

というわけで~すれば安全かというとそうではない。

~年、~のことだ。~という男が~から~した。彼は~することを忘れていたというわけだ。

すぐさまFBIが~へ急行したのは言うまでもない。

一体何がまずかったのか?

~には~という仕組みがあるため、~から居場所がわかってしまうのだ。

では、どうすれば良いか?

実は~には~というアクセス手段がある。

~年のことだが、わたしが~へ行ったときはこの方法を使った。

つまり最初に~してから~したというわけだ。

もちろん、なんの問題もない。

さて教訓だが、~のときに自分を秘匿するには~だけではだめだということだ。~の場合には~と~が欠かせない。

goto label:a

ためになるかどうかはともかく、おもしろい。

伝説のハッカーが教える超監視社会で身をまもる方法(ケビン・ミトニック/ロバート・バモシ/高取芳彦)

なお、内容紹介には

その中でミトニックが与えるヒントは、無法地帯とも言えるサイバー空間でプライバシーを守るための究極のサバイバルマニュアルとなっています。

と書いてあるが、相当違う。NSAやFBIやCIAが跋扈する無法地帯とも言える現実社会で自分自身のプライバシーを守りながらサバイバルする方法だ。

というわけで、ケビン・ミトニックのヒーローはスノーデンのようだ(スノーデンがリークするために行ったあれこれを相当細かく説明している)。というか、スノーデンが取った方法は公開されているからだろう。

なぜか読んでいる最中、なぜかビッグデータ・コネクトを思い出したりした。

ビッグデータ・コネクト (文春文庫)(藤井太洋)

これも、社会という無法地帯に跋扈する警察やらマスコミやらからプライバシーを守りながらサバイバルする話(でも)あった。


2018-04-14

_ セミラーミデ

子供と東劇にメトライブビューイングのセミラーミデ。

まず指揮者のマウリッツィオ・ベリーニが指揮棒を小刻みに振りながら、左腕で大きな流れを示す、どえらくわかりやすい指揮なのに目を見張る。序曲はロッシーニの序曲だ。つまり悪くない。

ロッシーニ:序曲集(ヨーロッパ室内管弦楽団/クラウディオ・アバド/ロッシーニ)

(アバードももちろん悪いはずがない)

全然内容を知らないのでオペラブッファかオペラセリアなのかもわからず観始めるわけだが、冒頭、諸国の皇子たちの到着です、となり、なんかトゥーランドットみたいなオペラか? と思うと、まったく違う。

古代バビロニアを舞台としていて、みんなでバール神を称えている。なんかウェルズのタイムマシーンの神みたいだけど、人食いなんだろうか? とか考えてみているが、あとになって考えるとあれはモロコ神だった。

インドの皇子がテノールで歌う。カマレナという人で佳い声。なんだが、いかにもテノールの役(ヴァグナーが完璧にルールを変えるまでは、テノールはタミーノとか音楽教師とか、色物でしかないのだが、これもそれっぽい)なので、ブッファかな? とか思いながら観続ける。

悪役登場し、セミラーミデが女王で、王様が死んだから(悪役が暗殺したことが暗に示される)新たな王を選ぶ必要があるという舞台設定が徐々にわかってくる。

若い軍人アルサーチェ登場。ズボン役だ。

人死にがからんでいるのだから、オペラセリアなのかなぁ。

ライオンキングのマンドリルの役回り(あとで文字通りとわかる)の高僧オローエ(いかにも高僧っぽい名前だ)が良い声で歌うのだが、やはり高僧ということはこいつが諸悪の根源か? と観ている(ドンカルロスにしても、アイーダにしても、魔笛にしても、高僧が出てくれば悪役というのがオペラだからだ)。

唐突に王様の幽霊が出て来て、お前が王様だと、若い軍人アルサーチェが指名される。そして通り過ぎていく。

みんなが混乱する。したがって、嵐がきて、ヘラジカヘラジカヘラジカッタラチャンチャカチャンと、いつものロッシーニ音楽が流れて、なんだこれ? となる。

幕間に、高僧が自伝を出版したことを宣伝。12歳のときは刑務所にいた。でも今はオペラ歌手をやっているんだ。みんなも希望をもって努力しよう。

2幕になって衝撃の事実がばんばんわかってくる。

死んだから次の王様を選ぶから諸国から皇子を呼んだというが、死んだのは15年前と、えらく悠長な話とわかる。

さらにボーマルシェもダポンテもはだしで逃げ出す衝撃的な事実の連続攻撃が起きる。でたらめ極まりない。

高僧は実は悪役ではなく、牛若丸に対する高野山の高僧の役回りということが明かされる。

そして真犯人と、若い軍人アルサーチェの出自が明らかになる。

暗闇の中でアルサーチェと悪役の殺し合いが起きる。手ごたえあり! なのだが、舞台の上は明るいからこれまた無茶苦茶だ。

女王セミラーミデの思い付きで結婚が決まって大喜びしていたインドの皇子の大喜びがぬか喜びに変わってしまい、哀切極まりない名曲を素晴らしい声で歌う。物語としては屁の突っ張りにもならない皇子だが、歌はばんばん飛び出してくるんだな。

みんなの頭が混乱して、ヘラジカヘラジカヘラジカッタラチャンチャカチャンとロッシーニ節でまとめる。

なんだかなぁ……

おもしろさは抜群だし、歌のサーカスみたいなおもしろさも抜群だし、ヘラジカヘラジカだし、嵐もあるが、おれがベートーヴェンなら、きみはブッファが良いねぇと言うところだ。

というわけで、ロッシーニをロッシーニとして存分に楽しめた。

それにしても、シェークスピアは偉大極まりない。ハムレット(1600年頃)のハムを台本作家に食わせたいところだった。セミラーミデは1823年の作品だから200年たって、大傑作の悲劇がロッシーニになったのだな。(なんと原作はヴォルテールなのか)


2018-04-17

_ ヘッドレスChromeでPDF

HTMLからPDFを生成する必要があって、以下の方法を考えた。

Edgeに該当URIを叩かせて、プリンタドライバにMS純正のPDF出力を設定しておいてJavaScriptでprintを呼び出す。

で、これが確実に動くのはわかっているのだが、実行環境がGNU/Linuxなのでどうにもならない。

Firefoxはapt-getで入れられるのでメンテナンスが楽そうだが、PDFに出力する簡単な方法が考え付かない。

しょうがないので、ヘッドレスChrome(頭があって手足がないが正解な気がするが本人がヘッドレスを名乗っているのだからまあ良いのだろう)を使うことにした。

Chromeはapt-getはできないが、debが用意されているから我慢する(のだが、今、あらためてみると、どうやってdebをダウンロードしたのかまったくわからない。どうあってもWindows版をダウンロードさせようとするのだが、キャンセルしまくると小さな文字のリンクがあって、Linuxを選択すると、またダイアログが出てくる……。しかし1週間くらい前にはまともなページにたどり着けて、そのURIをcurlしたんだよなぁ)。

説明を読もうとすると、なぜか頼みもしないのに日本語のページ(ヘッドレス Chrome ことはじめ)に飛ばされて、かつ情報が古い(Windowsでは待てとなっているが、Windowsでも--headlessで動作するので古い。書いてあるChromeは59についてだが、Windows版は65になっているし)が、まあ、このページからリンクされているところはそれっぽいから問題なかろう。

・このメモを書くためにあらためて「ヘッドレス Chrome ことはじめ」のページを眺めていたら、一番最後にドロップダウンリストで言語を選択できるようになっていて、US Englishにしたら、Windowsは60からのサポートとバージョン番号付きで書いてあった。なら65で動いて当然だ。というか、なんで先頭で言語を選択できるようにしていないのだろうか(または常に同期を取らないのだろうか)。なんか本当に面倒くさいベンダーだなぁ。

で、PDFの出力方法として chrome --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/ というのが出ているのだが、これが全然だめだ。

コンテンツに重なって頼みもしないヘッダとフッタが出力される。どうしろと。

で、調べるとStack Overflowにやはり同じ問題で困った人たちが質問しているが、有効な解答が、マージンなしにして出力すればヘッダとフッタが下になって隠されるというやつで、なんだそれ。コンテンツとして印刷用のマージンを入れることになるわけだが、それだとWebとPDFでスタイルを変えなければならないし、しかも、PDF出力時のメディアタイプがわからないから話にならない(@media PDFかな? とか思ったがall、print、screen、speech以外に何が使えるか調べるのもあほらしくてやらなかった)。

が、DevTool(Chromeのデバッガインターフェイス)を眺めたら、Page#printToPDFというメソッドがあって、そのパラメータに、displayHeaderFooterというまさにおれが欲しいものがあるではないか。

この場合、Chromeを起動しておいて外部からWebSocketで操作することになる。WebSocketの口はhttpで/jsonから取得する、おお、こういうインターフェイスは大好きだ。こういうところは素晴らしい。

で、起動方法はリモートデバッグオプションを指定して、chrome --headless --disable-gpu --remote-debug-port=9222とすれば良いらしい(というか、これで動いた)。ポートの9222はデフォルトらしいので変えたければ別の値を指定すれば良いのだろうけど、いずれにしてもクライアントが最初にHTTPでアクセスするからウェルノウンにしておく必要はある。あと、disable-gpuは無くても動くようだが、バグを突くといやだから(バグ回避用の設定っぽい)指定する。これをnohupしておいて別口のクライアントからアクセスすることになる。

ぱっと見、DevToolを操作するためのnode用のライブラリがあるようだが、そんなもの使いたくないので、自分でopen-uriを使ってポート9222の/jsonを叩いてPageのURIを取ってWebSocketを使ってと書き始めたが、ふと、こんな程度の処理なら誰か作っているのではと気づいた。で、さらに探すと(しかしドキュメント性が低いのでやたらと時間が食われるのには閉口した)、chrome_remoteというGemがあることがわかったので、それを利用することした。

えらく簡単だ。

require 'chrome_remote'
require 'base64'
 
class PdfWriter
  def initialize()
    @chrome = ChromeRemote.client
    @chrome.send_cmd 'Network.enable'  # Navigateに必要
    @chrome.send_cmd 'Page.enable'     # Pageオブジェクトの操作に必要
    @chrome.send_cmd 'Runtime.enable'  # JavaScript実行に必要
  end
 
  def to_pdf(uri)
    @chrome.send_cmd 'Page.navigate', url:uri
    @chrome.wait_for 'Page.loadEventFired'
    # ロード後に数秒実行に必要なJavaScriptが動くとしたらここで待機するか、またはイベントをチェックする必要がある。
==begin
    JavaScriptの呼出しには、Runtime.evaluateを使う
    ret = @chrome.send_cmd 'Runtime.evaluate', expression: "document.getElementById("foobar').baz()"
==end
    ret = @chrome.send_cmd 'Page.printToPDF', 
                           dispalyHEaderFooter:false,  # これがやりたかったことだ
                           printBackground: false,
                           paperHeight: 11.7, paperWidth: 8.3 # A4: 11.7inch * 8.3inch
    ret['data']  # JSONが返されてdataプロパティにBase64エンコードされたPDFが格納されている
  end
 
  def to_pdf_file(file, uri)
    data = to_pdf(uri)
    File.open(file, 'wb') do |fout|
      fout.write(Base64.decode64(data))
    end
  end
end

実際は同じChromeのインスタンスを使いまわしたいので、Mutex使って排他制御したり他にもいろいろするが、単発ならこれでOK。


2018-04-22

_ 新国立劇場のアイーダ

3回目か4回目か忘れたけど、アイーダ。

今回は、

・序曲の繊細さに驚いた。こんな曲だったっけ? と新鮮な気分で聞きほれる。おそらくパオロカリニャーニの指揮が抜群なのだと思う。

・やたら小柄なアイーダだなと思っていたら歌い始めてびっくり。すばらしい声量なのに突き刺すようなきれいな響き。新国立劇場では多分なにも考えずに黒塗りのアイーダを使うからよくわからなかったが、幕間にプログラムをみたら、イムセギョンという韓国の歌手だった。それにしても、体と声は関係ないというのはわかっていても(19世紀には肥満が必要というようなお相撲さんのような考えがあったみたいだが、少なくともマリアカラス以来そういうのが間違いだというのはわかりきっている)それにしても素晴らしい。ラダメスが完全にかすんでしまった。

・アムネリスのエカテリーナセメンチュクも良い。

・アモナズロは上江隼人という人だが、これも良くて、どうもエチオピア人はいずれも素晴らしい。

・ランフィスは妻屋秀和だが、この人、うまいのだが、最後に低く終わらせるところがどうも苦しい感じがする(最近、そういう印象はなかったのだが、たまたま曲調が合っていただけなのかな)

・3幕の序曲も良い。

・というか、この曲、こんなに美しい曲だったか?

・川辺の音楽からのアイーダのアリアで、オテロの柳の子守歌にあまりに似ているような気がした。あまりベルディを聞いていて(ロッシーニと違って)お得意のフレーズ、お得意の楽想みたいなものを感じたことはなかったのだが(嘘だな。ズンチャチャチャッチャズンチャがある)、ここはオテロみたいだな。

・休憩が3回入ったが、この間隔は良いと思う。今回異様に混んでいた(完売だったそうだ)ので、トイレの数から休憩を3回入れる必要があったのかも。

とにかく、指揮とアイーダが素晴らしかったので大満足した。


2018-04-27

_ シミュラクラ読了

おもしろかった。

なんかタイトルが1語なので、つまらないディックだと思い込んでいたが、ザップガンなんかと同じく、おもしろいディックだった。

レコード会社のプロデューサ、録音技師、プロデューサの妻のネアンデルタール人の歌の録音の話と、巨大シミュラクラ製造会社に勤める弟、零細シミュラクラ製造会社に勤める兄、行動力があって弟から兄へ乗り換える奥さんの家族劇、音楽家コンビの自分探しの旅の話(嘘だな)、たった1人で火星移住を推進して国家と闘うアウトロービジネスマン、マンションに住む権利に汲々としているが決して悪い人ではない今の言葉でいうところのリベラル派の先生、大統領夫人と秘書官、国家の乗っ取りを企てている巨大シミュラクラ製造会社の経営陣、同じくその仲間の製薬会社、製薬会社の陰謀により失職しかけた精神分析医、念動力でピアノを弾く天才音楽家、秘密警察長官とその子分、謎の宗教活動家と信徒といったグループが個別に動きながらときどき交錯して内乱になって良かったね、という物語。全然、おちがついていないので失敗作じゃないか? とも思う。回収すること考えずにばんばん設定と人物を膨らませて面倒になったのかも知れないというか、人気が取れずに打ち切られたような感じでもある(もし雑誌連載だったら)。

ただ、ディックのおもしろい作品の共通の、社会の底辺にいる落伍者が、社会の頂点にいる人とその地位を巡る陰謀に巻き込まれて大活躍する、というパターン(まあ、小説に娯楽を求める人が好きそうな設定だ)のバリエーションにはなっているので、読んでいる間は楽しめた。

シミュラクラ〔新訳版〕 (ハヤカワ文庫SF)(フィリップ K ディック/山田 和子)


2018-04-29

_ チャペック兄弟と子供の世界

日曜の午前中なので松濤美術館。

チャペックといえばカレルの山椒魚戦争をSF全集で読んだくらいで(もちろんロボットの造語者ということは知っている)あまり知らないので、子供の世界というのと、兄貴のヨゼフについてまったくわからないので観に行った。

ら、知っていた。

長い長いお医者さんの話の人だったのか。

地下から始まって2階で完結する比較的小さい規模の展覧会だが、最高だった。

まず、ヨゼフの腕前が素晴らしい。

面倒だから意識の流れ。

ふと今気づいたが、ヨゼフとカレルって、よもやチェコ語でヨシュアとカインじゃないだろうな?(そういう親はいないとは思うが、というか順番も逆だからあり得ないか)

最初に普通に近い絵があり、いきなり構成主義者の画が出てくる。

と思ったら、展示説明のパネルを読むとキュビスムと書いてある。

あ、今はじめて、キュビスムと構成主義がパリ-プラハ-モスクワのラインでつながった。

最高におもしろいじゃん。

ヨゼフはどんどんシンプルな線描に近づく(が、その裏ですさまじい習作を作りまくっていることが鉛筆スケッチで展示される。どれも切手サイズ程度のメモみたいな感じだが、いずれもとても良い。おもしろそうだなぁ)。

到達点は一筆書きによる身体の周りにぽわぽわさせた一群の子供の画だ。

10年代の暗がりの子供たち、20年代の幸福そうな子供たち。

すげぇ。

パネルを読むと、やたらと子供の心を失わないがどうたらと能書きが垂れられているので、ふと、心は子供、技法は大人と、コナン君みたいなことを考える。

ぼさぼさ髪の少年。

子供が生まれて、子供のために動物園の画を描く。

太った兄貴とがりがりの弟の魔術師の子供たちの冒険物語。どうも太った兄貴がヨゼフなのではないか。写真があった。それで当たりっぽい。

兄弟で絵本を作りまくる。他の画家との共作(アンソロジーみたいなものか?)もあるが、洗練さと構成の見事さで頭抜けている。

それぞれ別途に作品を作ったりもする。長い長いお医者さん(しかし、全然覚えていない)の中の郵便屋さんの長い旅路と最後に女の子に窓の外から手紙を渡すところ。通りすがりが2人、こちらを見ている。第3者の視点こそが映画だというのはニコラスレイだったっけ?

プラハのアパルトマン(ネコしか飼えない)から引っ越した先で犬を飼う。

写真に凝って写真を撮りまくる。

構図が抜群で、100年近く前の写真とは思えない。

それにしてもビクターのニッパー君にそっくりだ。当時やたらと流行した犬とパネルに書いてあるから、きっとニッパー君もこの時期に蓄音機からの彼の主人の声に耳を傾けたのかも。というか、ニッパー君は陶器のツルツルの印象が強かったが、実はテリアのしゅわしゅわ犬だったのか。

愛用の写真機。写真が気に入って写真集まで出版することになる。

絵本の出版屋さんとの良好な関係は、出版屋さんの娘の肖像画となる。

犬と猫の生活がとても良い。犬や猫が主人公の作品と、犬や猫はペットで人間が主役のような作品。いろいろ。

子供をテーマにした切手。しかし政府が中止したため実現しなかった。

カレルの風刺は社会を打ち、ヨゼフの画は明るい世界を希求する。

ナチスがカレルを捕まえる直前、肺炎で死ぬ。

ヨゼフはベルゼンに送られる。

生還者の名簿にヨゼフの名前はなかったので、収容所で死んだと推測される。いつのことかはわからない。

1階の売店でいろいろ買う。

岩波少年文庫の犬と猫があったら(未読だし)買おうと思ったがない。

代わりに大判の彩色版のがあった。

中を見ると見慣れぬアルファベで書かれていて、チェコ語は読めないな、と思って戻そうと思ったら、頭の中に「あの子たちに謝ったほうがいいいよと犬が言った」という言葉が流れ込んできた。

あれ? おれ読めるぞと不思議になってあらためて見たら、フランス語だった。

ぱっと見、特徴的できれいなフォントなのだが、gがちょっと見慣れないことと、最近読むことが無いアクセンテギュやアクセンシルコンフレクスが出てきているので見知らぬ言葉(この場合はチェコ語)だと思い込んだのだった。ところが言葉を拾って読んでしまったらしい。モ、モ。

おもしろいなぁ。

あらためて表紙を見たら普通に犬と猫の物語と書いてあった。

フォント含めて美しいので買った。

Histoires de chien et de chat : Sur la façon dont ils vivaient ensemble et sur bien d'autres choses encore


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|

ジェズイットを見習え