2017-01-31

GDBがC++コード注入をサポート

C++ Support Added To GCC's libcc1, Benefiting GDB - Phoronix

C++ support in libcc1: A comprehensive update – RHD Blog

最新のGCC 7では、GDBがC++のコード注入をサポートするようになった。

GDBは、デバッグ中のプログラムにC言語のコードをその場でコンパイルしてコード注入して実行する機能を持っている。これにC++が対応した。

この機能はlibcc1.soを通じてGDBとGCCが強調動作することによって実現されている機能だ。

CとC++は似ている言語ではあるが、名前空間など名前検索のルールが異なるので、シンボル名を探すにもGDBにC++の名前検索を実装しなければならない。また、テンプレートにも特別な対応が必要だ。

ドワンゴ広告

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

2017-01-30

xkcdで最近面白かった話

xkcd: Wifi

縦軸:来客がWiFiに接続できる確率

横軸:来客の技術力

グラフ中の表記、左から:

技術力低い:WiFi設定が見つけられない

技術力普通:使える

技術力高い:「ファームウェア」に原因がある

titleテキスト:右端を超えると正しく使える。ただし、その理由には「ファームウェア」が関係している"

筆者も今使っているラップトップの一台のWiFiの調子がUbuntuで悪くて苦労している。

xkcd: 職場チャット

2004年:うちの部署はIRCでやり取りしている

2010年:うちの部署はほぼSkypeを使っているが、一部の同僚はまだIRCを使っている。

2017年:ほぼ全員がSlackに移行した。しかし3人だけIRCをやめるのを拒否してIRCゲートウェイ経由で接続している。

2051年:宇宙シンギュラリティによりすべての知的意識は統合された。ただし一人だけIRCクライアント経由で参加している奴がいる。
「俺は自分の好きなようにやりたいんだ。わかるだろ?」
やれやれ

titleテキスト: 2078年:奴はようやくscreenとirssiからtmuxとweechatに移行しやがった。

たしかにこの2017年では職場内のチャットはSlackが独占した感がある。

もっと訳そうと思ったが飽きたのでこの辺で。

2017-01-24

GCCの実験的なfilesystemを使う方法

C++17には<filesystem>が追加される。GCCは実験的な実装として<experimental/filesystem>を実装している。

これを使えば、例えば以下のようにディレクトリを列挙できる。

#include <experimental/filesystem>

namespace fs = std::experimental::filesystem ;

int main()
{
    fs::directory_iterator iter("/usr/bin"), end ;
    std::copy( iter, end, std::ostream_iterator<fs::path>(std::cout, "\n") ) ;
}

GCCのfilesystemは、実験的な実装であるので、ヘッダーファイルが<experimental/filesystem>であることに加え、デフォルトではライブラリがリンクされない。

GCCのfilesystemを使うにはライブラリとして、libstdc++fs.aとリンクしなければならない。これは、gccに-lstdc++fsオプションを渡すとよい。また、libstdc++fsにshared library版はないので、安全のためにコマンドラインオプションの最後に書くべきだ。


g++ -std=c++1z その他のオプション... -lstdc++fs

libstdc++fsについては、極めてわかりにくい場所に申し訳程度にドキュメントがある。

Linking

ドワンゴ広告

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

2017-01-22

最も日本人を多く殺す職について考察した結果、反医療主義という結論に至った

概要:この記事は最も多くの日本人を殺す職業について考察したうえで、最終的に意外だが確実に多くの日本人を殺している職業を特定したので書いた。結論を書くと反医療主義なのだが、考察の過程をたどっていこう。

今週の土日は何も予定がなく、かつ面白い本もPCゲームも見当たらないため、非常に暇である。そこで、最近執筆が滞っているブログのリハビリを兼ねて、何の意味もない文章を書いてみようと思う。お題はこれだ。

人を殺せる職につきたい

間接的に多くの日本人を殺せる職につきたい

絶望的に人望がないので政治家や起業家は難しい

スキルはITエンジニアの経験のみ

このクソみたいな人生の鬱憤を晴らすためだけに間接的に日本人を大量にぶち殺したい

どうすればいいのだろうか

なるほど、まず考察する内容を整理しよう。

  • この匿名ダイアリーの筆者を仮に増田とする
  • 増田は人を殺せる職につきたい
  • 人とは日本人である
  • 政治家と起業家以外の職である
  • 殺す人数は多くしたい

まず、「殺す」の意味を考えてみる。お題の文章を解釈すると、増田が自ら刃物や銃といった武器を使って人を殺す必要はない。間接的な殺人でよいのだという。すると増田は他人に殺人を命令する立場でもよいし、増田の意思決定の結果人が死ぬという状況でもよい。

死刑執行人はそれほど人を殺していない。日本で年間に行われる死刑執行の数は極めて少ない。大抵の年は0かひと桁であり、まれにふた桁の執行数があってニュースになるぐらいだ。

人を殺す機会のある職業と言われて警察、自衛隊、海上保安官を思い浮かべる読者もいるかもしれないが、これらの職業はあまり人を殺していない。自衛隊は国内の治安維持に出動した実績はまだなく、せいぜい訓練中に自衛隊員同士で殺しあったとか、事故の結果人を殺したことはあるとしても、あまりにも殺人数が少なすぎる。警察とて、治安維持に出動して暴徒と殴りあったり、犯人と交戦するような警官はほんのわずかであり、大多数の警官は窓口で非暴力的な一般市民と応対したりデスクワークをしたりしている。あとは「間接的」という言葉をどこまで拡大解釈するかの話でしかない。殺人をした警官を管理する立場にあるものは間接的に殺人をしたといえるだろうか。日本人を殺した警官の給与計算に関わっていた会計部署の警官も間接的に人を殺したと言えるのだろうか。すると、警察庁長官は警官による殺人の全件に関与したといえるのだろうか。この論法が行き着く先は内閣総理大臣が最も多くの殺人をしているということだ。いや、国家の象徴であり内閣に承認を与える天皇は内閣総理大臣を含む国内のすべての殺人を間接的に行っていると考えることはできるだろうか。しかし、現状では天皇は国民の総意と内閣の決定に従わなければならず自分の意志を表明することができない。それに、増田はおそらく天皇の職を得ることはできない。

間接的という言葉はいくらでも拡大解釈できる。

例えば、ラーメンは栄養のバランスが悪く、脂肪と塩分が過剰であり、健康に悪い。健康を損ねると人は死ぬ。すると、ラーメンの店主は殺人に貢献したことになるのだろうか。問題が塩にあるとすれば、塩の製造や販売を行う職業は殺人に関わっているのだろうか。

間接的をここまで拡大解釈していいとすると、結局日本人が最も摂取しているビールの販売元はどこか、タバコ農家は誰かということになってしまう。本来麻薬であり違法となるべき健康を害するたばこを製造、販売しているJTは極めて多数の日本人の殺害に貢献している。するとJTの多数の労働者を管理する人事部に職を得るべきだろうか。

しかし一般に、空腹の人間にラーメンをおごったり、アルコール分解能力がありビールを飲みたがっている車両を運転する予定のない人間に一杯のビールをおごったり、健康を損ないたがっている喫煙バカにタバコを一本差し出したりすることは殺人とみなされていない。

間接的な殺人を考えると、健康保険の範囲内の治療を定める職は、その意思決定によって大勢の日本人の生死を左右するだろう。政治家も間接的な影響力が大きい。しかし、これらの職は増田がつきにくい職業である。それに、これらの職業はできるだけ殺人を減らす目的があるので、判断を誤って殺人数が増えたとしても、全体的には殺人を減らす方向に貢献してしまう。

避妊具は妊娠を防ぐことによって本来生まれるべきであった人間を生まれさせないため、殺人とみなせるのではないか。すると増田は日本で最も売れている避妊具製造メーカーに勤務すべきである。しかしそのような間接的な可能性の殺人を考えるのであれば、避妊具が存在しないことによる間接的な殺人数も考えなければならない。

もし避妊具が存在しなければ、多くの望まれない子が生まれ、貧困で劣悪な環境で育てられることになる。避妊具の存在によって、そのような子供が成長して、人を殺す可能性が消されるので、避妊具は殺人件数の減少に貢献している。避妊具による未来に存在したはずの可能性の殺人を考えるのであれば、未来に存在したはずの殺人減少を差し引かなければならない。

事実、アメリカでは中絶が合法化されてからしばらくして、殺人件数が大幅に下がっている。

多くの職は、日本人の死亡に貢献している以上に、日本人の死亡を防ぐことにも貢献してしまっているのだ。

例えば、餅は毎年100人ほどの日本人を救急搬送しているが、餅を食べることは飢え死にを防ぐので日本人を生かしている。それに、窒息死の原因は餅ではなくおかゆのほうが多い。というのも、窒息死する日本人の多くは咀嚼力の著しく低下した人間であり、咀嚼力の低下した人間は日常的にお粥を食べているからだ。

そういう意味で、車も日本人を殺していない。交通事故では年間4000人ぐらいの日本人が死んでいるが、もし車がない場合、日本の物流は止まり、現在の人口を支えることができず、より多くの日本人が死ぬ。したがって、車の製造や販売の職業についた場合、殺した日本人の数より助けた日本人の数が大幅に上回ってしまう。

では非合法な職はどうか。この際、収入さえ発生していれば職業と認めてもいいだろう。例えば暴力団はどうか。残念ながら暴力団はあまり人を殺していない。というのも、日本における暴力団構成員が殺人、殺人未遂の容疑で検挙された件数は一年間にせいぜい200から300件程度なのだ。容疑者ですら3桁しかない。もちろん、検挙されていない殺人もあるだろうが、この程度の数では話にならない。コンビニ店員として酒と煙草と避妊具を売っていたほうがまだいくらか日本人の殺人に貢献できる。

とはいえ、日本全体の一年の統計上の殺人件数が1000件程度であることを考えると、暴力団による殺人は割合が高い。警察が認知する殺人件数に間接的に関わることを目的とするのであれば、やはり暴力団には所属しているべきだろう。しかし、警察に逮捕されて、勾留、懲役、禁錮の扱いを受けてしまうと、その最中はさすがに殺人に間接的にでもあれ関与したとはみなせないだろう。

警察に逮捕されずに暴力団との関係を続けて間接的に殺人に関与するには、増田は暴力団に脅されてやむを得ず金品をゆすり取られ続けるとか、暴力団の関与する高利貸しから金を借りて利子を支払うなどすればいいのではないか。こうすれば、増田は被害者であるので警察に逮捕されることはない。増田の提供した金銭は暴力団の利益となり、間接的に殺人にも使われる。しかし、これは職業ではない。しかもこのような状況は極めてクソであり人生の鬱憤を晴らすどころかますます鬱憤をためるだけだろう。

ここまで、具体的な統計を出さずに筆者の頭の中だけで考えていた。そのようなデータに基づかない考察を離れて、具体的な死因を見ていこう。

厚生労働省:死因順位(第5位まで)別にみた年齢階級・性別死亡数・死亡率(人口10万対)・構成割合

日本では、1年間に120万人ほどの日本人が死んでいる。死因の上位に来る理由を生じさせる原因となる職業につけば、最も効率よく日本人が殺せるだろう。

まず、0歳から4歳までの死因の第一位は、「先天奇形、変形、及び染色体異常」である。第二位以降もほとんどが病気によるものだ。

その後、10代の頃は病気が多い。

20代から30台になると自殺が死因のトップになる。

その後の死因のトップは癌だ。

なるほど、このことから、日本人の死亡に最も貢献できる職業が判明した。

反医療主義者である。

書籍や新聞やテレビやインターネットといった大衆に届く情報媒体を使い、反医療主義を煽って金を儲ける職業につけばよい。

乳幼児の死亡率を上昇させるためにワクチン摂取に反対する。がん死亡率を高めるために科学に基づかない、臨床試験で効果も認められていない代替医療を推奨する。

ホメオパシー、カイロプラクティック、菜食主義、反ワクチン、宗教、占い、何らかの植物やキノコを摂取すると癌が治るとの主張、タバコ、アルコール、これらの反医療主義を煽る本を書いて、テレビに出てさも効果があるかのように吹聴する職業。このような職業は実際に存在している上に、うまくやれば稼ぎもよい。

しかも、現代日本では、これらの行為を行うほとんどの職業は犯罪者とみなされていない。最悪の場合で薬事法違反程度の軽い罪だ。というのも、癌の治療を拒否するのは拒否した本人の責任であるし、抗癌剤の重い副作用について解説するのは違法ではないからだ。あとは薬事法に触れないように気をつければよいだけだ。増田は日本人さえ多く殺すことができれば、逮捕されたり懲役を受けることにはむとんちゃくかもしれないが、懲役を受けるとそれだけ反医療主義を煽ることができなくなる。

考察を始めた当初は、とてもくだらない記事になることを危惧したが、どうやらなかなか啓蒙的な結論に達することができた。この記事の教訓としては、反医療主義は危険だということだ。

2017-01-21

HoloLensを体験したが10年早かった

MicrosoftのHoloLensが日本でも入手可能になったようだ。さっそく入手した人が身近にいたので体験させてもらったが、結論をいうと、10年早かった。

HoloLensは、一見するとバカバカしいまでに巨大で無骨なサングラスだ。そのレンズに投影することにより、あたかも空間上に物体があるかのように錯覚させることができる。空間上のある場所にウインドウや3Dモデルを設置すると、その場所に固定される。HoloLens装着者は空間に固定された表示物を好きな距離、好きな角度から見ているように錯覚する。

HoloLensがどのように空間を把握しているかというと、主に赤外線による深度センサーを用いて回りの深度を把握しているようだ。それにしても装着者の動きに追随する性能がすばらしく、ズレを一切感じさせない。

HoloLens風のコンピューターの性能が上がれば、通常のコンピューターの補助的に使うのはありではないかと思う。つまり、椅子に座って通常のコンピューターを操作している中で、HoloLensも装着して、周囲に作業中に参照するひつようのあるドキュメントを貼り付けておく。回りを見回すとドキュメントを読むことができる。これの何がいいかというと、物理的なディスプレイがいらないということだ。物理的なディスプレイは物理的な空間を専有する。しかもコンピューターにはディスプレイの枚数分、物理的な出力ポートが必要だ。HoloLens風のディスプレイであれば、これがいらない。

ホロレンズの操作はハンドジェスチャーで行う。しかし、ジェスチャーを正しく認識させるのはなかなか大変だった。それに、VRでさんざん学んだことだが、人間はよほど鍛えていない限り、腕を心臓より高く上げたままの姿勢を長時間続けることはできない生き物である。これは大変に深刻な問題で、筆者は数十年後、VRが普及して普通のコンピューターのディスプレイがVRになった未来の採用面接では、エリートの求職者は体育大体操部出身のマッチョで、面接ではその鍛え上げられた肉体美を披露しつつ、「はい、私はこのようによく体を鍛えているのでVR作業を3時間連続でこなすことができますフンヌー」などと自己アピールをしているのではないかと予想している。

結論から言うと、ハンドジェスチャーは面倒で疲れる。Bluetoothが付いているそうなので、キーボードやマウスを接続することはできるのではないか。将来的には、HTC Viveのように物理的な入力装置を使う方向に進むのではないか。

HoloLensの残念な点としては視野が極めて小さいということだ。目の前に腕を伸ばして両手で長方形を作った程度の視野しかない。しかも、頭に固定したHoloLensがずれるとその視野の長方形が移動してしまう。

HoloLensを体験していると、かつてOculus RiftのDK1を体験した時のことを思い出す。荒削りではあるが未来を感じさせる先進的な技術だ。Oculus Rift DK1は、この2017年の標準では、もはや犬も食わないほどのガラクタに成り下がってしまった。かつ、Oculus VR社の方針は邪悪かつ排他的であり、HTC Viveに性能面でも劣っている負け犬と成り下がってしまった。

もうひとつ思い出すのは、Microsoftは一時期タブレットに注力していたということだ。まだ実用的なタブレットが夢物語の時代に、極めて無骨な弁当箱のような厚さのタブレットを開発していた。結果として、Microsoftはタブレットでは負けたが、HoloLensでも同じことになるのではないかと思う。初期の技術研究には多大な資金を継ぎ込むも、結局競合他社にあっさり負けてしまう、そんな未来が見える。

結局、HoloLensは荒削りな開発評価機という印象を受けた。10年後に期待したい。

2017-01-17

GCCのSVN trunkをビルドする方法

GCC 7がC++17のコア言語機能を完全に実装したので、ようやく参考書のサンプルコードが検証できるようになった。

C++ Standards Support in GCC - GNU Project - Free Software Foundation (FSF)

しかし、GCC 7はまだリリースされていない。少し試すだけならばwandboxが使えるが、本格的に使うにはローカルにほしい。

[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

そこで、GCCを自前でビルドすることにした。ビルドは以下の手順に従う。

Installing GCC - GNU Project - Free Software Foundation (FSF)

GCCのコンパイルに必要なソフトウェア

Prerequisites for GCC - GNU Project - Free Software Foundation (FSF)

GCCのコンパイル環境を整えるには、有名なGNU/Linuxディストリビューションを使うのが最も手っ取り早い。筆者はUbuntuを使っている。

GCCはC++98で書かれているためにC++98コンパイラーが必要になる。ある程度最近の安定版バージョンのGCCを使うのが最も手っ取り早い方法だ。

POSIX互換シェルが必要だ。これにはGNU bashを使えばよい。

awkが必要だ。GNU awkの最近のバージョンを使っておけば問題ない。

GNU binutilsが場合によっては必要だ。とはいえ、GNU binutilsが入っていない環境でGCCを使いたいとは思わないだろう。

gzip, bzip2, GNU make, GNU tar, Perlが必要だ。

GCCはオプショナルではあるが、デフォルトで4つのライブラリを使う。GNU GMP、MPFR, MPC, islだ。DebianとUbuntuでは以下のようにして入手できる。

apt-get install libgmp-dev libmpfr-dev libmpc-dev libisl-dev 

この4つのライブラリは、主要なGNU/Linuxディストロならば十分に最近のバージョンがパッケージ化されているだろうが、GCCのソースコードには./contrib/download_prerequisitesというスクリプトがある。これを実行すると、4つのライブラリのソースコードをダウンロードしてGCCのビルド時にビルドして使うようにもできる。

flexが必要だ。GCCのリリース版のソースコードには、.lファイルからflexで生成したファイルは含まれているのだが、SVN trunkには含まれていない。configureスクリプトはflexが存在しないことを警告してくれないのでハマる。

GCCのソースコードのダウンロード

Downloading GCC - GNU Project - Free Software Foundation (FSF)

GCCのソースコードは様々な方法でダウンロードできる。最新のSVN trunkのソースコードを入手するにはSubversionを使うのが最も手っ取り早い。

svn checkout svn://gcc.gnu.org/svn/gcc/trunk gcc-trunk

一度チェックアウトしたソースコードから最新版への差分をダウンロードするには、svn updateを使う。

他にも、gitミラーやtarで固められたスナップショットもある。

Configure

Installing GCC: Configuration - GNU Project - Free Software Foundation (FSF)

GCCのビルドは、configureスクリプトを実行してMakefileを生成してmakeするという古典的な方法で行われる。configureスクリプトの実行は、GCCのソースディレクトリとは別の場所で行うことが強く推奨されている。そこでそのようにする。


svn checkout svn://gcc.gnu.org/svn/gcc/trunk gcc-trunk
mkdir gcc-build
cd gcc-build
../gcc-trunk/configure オプション

configureスクリプトには、いくつかのオプションを渡す。

今回、GCCをビルドする目的はC++17のコア言語機能を試すことだ。したがって、言語はCとC++しか必要がない。GCCはCとC++の他にも、Ada, Fortran, go, 醜悪なobjective-C, 太古の忌まわしきObjective-C++に加えて、LTOとJITも言語としてサポートしている。

言語をCとC++に限定するには、

--enable-languages=c,c++

をオプションに指定する。

この2017年では、ほとんどの読者はx86-64アーキテクチャのコンピューター上で自由なOSを実行しているはずだ。x86-64アーキテクチャは複数のビルドターゲットがある。GCCでは、32bitコードをm32、64bitードをm64、アドレスは32bitだがその他は64bitなコードをmx32としている。今回の目的はC++17のコア言語を試すことなので、複数ターゲットのコードを吐くことにしか興味がない。なので、multilibを無効にする。

--disable-multilib

GCCのビルドは、他のよくあるソフトウェアと違い、ややこしい。というのも、GCCはかつてCで、今はC++で書かれているからだ。システムのC++コンパイラーでGCCをビルドしたとして、システムのC++コンパイラーが壊れている場合、ビルドしたGCCも壊れてしまう。この問題を発見するため、GCCのビルドは3-stage bootstrapと呼ばれる方法で行われる。

  1. システムのコンパイラーでstage-1 GCCをビルドする
  2. stage-1 GCCでstage-2 GCCをビルドする
  3. stage-2 GCCでstage-3 GCCをビルドする
  4. stage-2とstage-3を比較して挙動に差がないことを確認する
  5. stage-3コンパイラーでランタイムライブラリをビルドする

今回はC++17コンパイラーを手っ取り早く試す目的なので、3-stage bootstrapは無効化する

--disable-bootstrap

結果として、configureスクリプトは以下のように実行する

configure --enable-languages=c,c++ --disable-bootstrap --disable-multilib

GCCのビルド

Installing GCC: Building - GNU Project - Free Software Foundation (FSF)

configureが成功したならば、configureを実行したディレクトリにMakefileが生成されているので、あとはmakeするだけでよい。

最適化を有効にして並列コンパイルもできる。

make BOOT_CFLAGS='-O' -j4

GCCのインストール

Installing GCC: Final installation - GNU Project - Free Software Foundation (FSF)

無事にビルドが終わればインストールできる。

make install

デフォルトではインストール先が/usr/local/下になっているので権限が必要だ。

筆者の体験では、flexをインストールしていない状態でconfigureが通り、makeに失敗した後、flexをインストールした後も途中からのmakeは失敗した。

ドワンゴ広告

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

2017-01-13

GCCがC++17のコア言語機能を実装完了

Hacker Newsで話題になっていて知ったのだが、GCCがいつのまにか、C++17の現ドラフトの全コア言語機能を実装している。

C++ Standards Support in GCC - GNU Project - Free Software Foundation (FSF)

とうとう、なかなか実装されなかったクラステンプレートのコンストラクターからの実引数推定も試すことが出来た。

#include <iterator>


template < typename T >
    struct X
    {
        X( T t ) { }
        template < typename Iterator >
        X( Iterator first, Iterator last ) { }
    } ;
// deduction guide
template < typename Iterator >
    X( Iterator, Iterator ) -> X< typename std::iterator_traits<Iterator>::value_type > ;


int main()
{
    // X<int>
    X x1(0) ;
    
    int a[] = {1,2,3} ;
    // X<int>
    X x2(std::begin(a), std::end(a))  ;
}

これが動く。感動だ。

ドワンゴ広告

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

2

2017-01-10

ボルダリングを初めて2年がたった

ボルダリングを初めて2年がたった。最初は7級すら苦労していたのだが、今は全く苦労せずに登れるようになった。現在のグレードは4級で、1ヶ月以上取り組み続けて簡単な3級が落とせる程度だ。

ボルダリングを初めてから体重が増えた。これは筋肉が増えたこともあるが、脂肪も明らかに増えている。運動により食事量が増えたためだろうか。ボルダリングを始める前は60kgであった体重が、いまは73kgほどになっている。体が重いと登りにくい。減量のため、食事量を意識的に減らし、通勤を電車から徒歩に切り替え、自宅から会社までの5kmほど歩くようにしている。5km歩くと50分ほどかかる。しかし電車で行くにしても自宅は駅から遠く、かつ乗り換えが発生するので結局40分かかる。通勤時間が10分しか変わらないのであれば、歩いてもよいということになる。一週間ほど徒歩通勤を続けたところ、体がなれたので特に疲れることはなくなった。一ヶ月ほど続けているが、痩せない。

ボルダリングでは特別な靴を使う。しかし未だに納得のいく製品に出合っていない。これまでは主にスポルティバの靴を履いてきたが、スポルティバの靴は3ヶ月ぐらいで潰れてしまう。スポルティバの中では、Geniusが一番気に入った製品だった。Geniusは9ヶ月履くことができた。今はFive TenのQuantumを履いている。この靴はFive Tenには珍しく、幅広の足でも履くことができる。3ヶ月ほど使ったが、つま先のソールが大分削れてきた。あと3ヶ月は持たないだろうと思う。Five TenのQuantumは相当に気に入ったので、次の靴もこれにするかもしれない。

ところで、クライミングジムでは、たまに白髪交じりの齢六十はとうに越していようと思われる翁が極めて動的な動きをしてグレードの高い課題を登っている。それをみて、なるほど、ボルダリングというのは歳をとっても問題なくできるスポーツなのだなと老後も頼もしく考えていると、ある人から、「果たしてそうだろうか。あの歳でなおあれだけ動ける強者のみ生き残っているだけではないだろうか」と生存者バイアスの可能性を指摘された。確かにそうだ。

2017-01-05

GoogleがGoによるPython実装、Grumpyを発表

Googleが既存の社内のPythonコードをGoで実行するためのPython実装を公開している。

Google Open Source Blog: Grumpy: Go running Python!

google/grumpy: Grumpy is a Python to Go source code transcompiler and runtime.

Googleの発表によれば、YouTubeのフロントエンドサーバーとYouTube APIはほとんどPythonで書かれているという。現在、YouTubeのフロントエンドはCPython 2.7で実行されているが、CPythonの制約により効率化には限界があるのだという。

GrumpyはPython 2.7のコードをGoのコードに変換するツールgrumpcの実装だ。grumpcはPythonで実装されていて、astモジュールでPythonをパースして、Goコードを吐く。Python 2.7系なのは、Google社内の既存のコードを実行するためだ。また、execやevalのようなインタープリター実装ならではの極めて動的な一部の機能は実装されていない。

Pythonの標準ライブラリのほとんどは、Pythonによって実装されているため、そのままGoコードに変換されてそのまま動く。

GrumpyにはGlobal Interpreter Lockが存在しない。リファレンスカウントのかわりにGoのGCにオブジェクトの生存管理を任せている。この設計のため、C extension moduleは使えない。この設計により、GrumpyはCPython実装よりスケールすると主張している。

Grumpyはインタープリターではない。Grumpyによって生成されたGoのコードは通常通りGoによってコンパイルされる。これにより開発やデプロイの柔軟性は下がるが、ネイティブコードへのコンパイルと静的解析により、より効率のよいコードを吐くことができるようになる。また、Grumpyで実行されるPythonコードは、Goのモジュールをimportして使うことができる。

興味深いツールだ。

2017-01-03

ディストピア小説のネタとして使える実話

事実は小説より奇なりとはよく言ったもので、ディストピア小説を超える実話が世の中に溢れている。

Automated book-culling software drives librarians to create fake patrons to "check out" endangered titles / Boing Boing

East Lake Country図書館のシステムは、貸出記録から人気のない本を破棄するようになっている。この図書館の司書は、フェイクの利用者情報を登録して、司書がお気に入りの破棄されてほしくない本を守るために、多数の貸出記録を捏造した。

Healthcare workers prioritize helping people over information security (disaster ensues) / Boing Boing

ある病院の医療システムのセキュリティは、一定期間の入力がないとパスワードの入力を要求する仕組みになっている。このために、看護師の医療システムの利用時間の大半は、パスワードを入力することに費やされている。刻一刻と病状が悪化する患者の情報を即座に入手しなければ患者の生死に関わる状況では、パスワードの入力にかかる時間は致命的である。そのため、ある病院では、新米の看護師を医療システムのキーボードを一定期間ごとに押し下げる係に割り当てている。

このような話をネタにしたディストピア小説が読みたいものだ。例えば監視社会で観測データから社会に不要な人間が自立型の機械によって自動的に破棄されていくディストピア世界において、人類の大半が破棄された荒廃とした世界で、生存のために観測データの捏造を続ける人類。

あるいは、電力や食料の生産が完全に自動化された世界において、生産量の調整のためにひたすら入力を一定間隔で叩き続ける不毛な仕事。

そういえば、年末にPixivのアカウントに対して大規模な他所から流出したIDとパスワードの組み合わせによるログイン試行が行われ、結果として何が行われたかというと児童ポルノ画像のアップロードだったという。これは、児童ポルノというのは法律で所有が違法なことにより、画像を投稿できるWebサイトに対する最も手っ取り早い嫌がらせの手段であるのだという。この事件から、児童ポルノを武器として利用するディストピアネタを思いついた。

例えば、児童ポルノは存在が違法であり、児童ポルノを記録するストレージも違法である。そこですべてのコンピューター機器はRFC 3751ストレージは児童ポルノを検出すると自動的に自己破壊し、また児童ポルノを検出して破壊する自律型ロボットがそこらじゅうを徘徊している。大規模な児童ポルノをばらまくマルウェアの影響によりコンピューターの大半がOmniscience Protocolにより文鎮化した世界で人類が生き残りをかけて児童ポルノを武器にロボットと戦う。児童ポルノが武器になる理由としては、児童ポルノだと判定されるものををロボットに観測させるとロボットはOmniscience Protocolを発動して自己破壊を行うからだ。