Fallout3 に出てくるゲイリーの元ネタ?

住人が全員ゲイリーという名前のクローン人間ばかりになっている核シェルターが Fallout 3 に登場する。

先日、本を読んでいたら、このゲイリーの元ネタっぽいものを見つけた。本のタイトルは「平均思考は捨てなさい」(原題:THE END OF AVERAGE)だ。

子供たちを組織化して教育を施し、工場での仕事を「完璧に」こなす労働者に仕立て上げるため、テイラー主義者は科学的管理法の中心的な教義に従って教育制度全体の構造の見直しに取り組んだ。すなわち、平均を使ってあらゆるものを標準化したのだ。例えば、全米の学校が「ゲイリー・プラン」を採用する。これはインディアナ州工業都市ゲイリーに由来するもので、(以下略)

Googleブックス立ち読みページより問題部分を太字にして引用。)

なんとなく、この社会思想には覚えがあるなと思っていたら、Falloutの世界観にそっくりじゃん。しかもゲイリー・プランって。

すぐに英語版ウィキペディアで詳細を調べてみたのだが、そうしたら William Wirt (ウィリアム・ワート?)なる教育家が出てきた。

f:id:itasuke:20171129191714p:plain:w300 *1

「ゲイリー!ゲイリーなのか?」

なんか、この人、ゲイリーに似てない? 目の下の皺とか、髪型とか、眉毛の角度とかが一致してるように見えるんだけど。

画一的な労働者に画一的な作業をさせて最高の生産性を実現しようというテーラー主義の夢は、ひょっとしたらひょっとして、Falloutの世界でクローン技術と出会い、そして無残にも失敗した、ということになっているのかもしれない。

以上が小生の推測なんだけど、確証を求めて色々思い当たる所を英語で検索してみたのだが、この件について言及しているところは1つもなかった。というわけで真相はよくわからん。

追記

そういえば古典的SF小説「すばらしい新世界」にも受精卵の分割によるクローンや、それによる社会階層の話が出てくる。Falloutのテーマでもあるレトロフューチャーってやつは、こういう世界観の元で作られたのかもしれないね。洋ゲーのシナリオはたまにこういう発見があるから面白い。

*1:画像はウィキメディア・コモンズとGoogle画像検索より引用してトリミング+レベル調整

コンソールスクリプトが別ウィンドウで実行される

OSを再インスコして気づいたけど、PythonみたいなスクリプトファイルをPowerShellから直接実行しようとすると別ウィンドウに表示されるのな。

f:id:itasuke:20171127144630p:plain

一方で py hello.py とか python hello.py とかやると、ちゃんとコンソールウィンドウを引き継いでくれる。

f:id:itasuke:20171127144219p:plain

この動作は普通なのかなと思って、ちょっとググってみるが、どうやらそうっぽい。

PATHEXT に .py を追加しておくと、従来のコマンドプロンプトと同じ動作になる。

f:id:itasuke:20171127144216p:plain

毎回コンソールを立ち上げるたびに手動で PATHEXT を変更するのは面倒なので、大元の環境変数を変更しておくとよい。

f:id:itasuke:20171127145632p:plain

PATHEXTの意味

PATHEXT の本来の目的は、拡張子の指定を省略することにある。.exe をつけなくても py.exe や ipconfig.exe が起動するのはそういう理由による。

PATHEXT に .py が追加されると、このように拡張子を省略してもファイルが実行されるようになる。

f:id:itasuke:20171127144209p:plain

コマンドラインからEvernoteのバックアップをとる

Windows版のEvernoteクライアントにはENScriptというコマンドラインユーティリティが付属してくる。これを使うとノートのバックアップが簡単にとれる。

# デフォルトならENScriptはここに入っているはず
cd ${env:ProgramFiles(x86)}\Evernote
# ヘルプの表示
.\ENScript.exe /?

f:id:itasuke:20171123222148p:plain

見ての通り色々な機能があるけど、バックアップに使うのは exportNotes という(サブ)コマンド。こいつを使うとenex形式でファイルを出力できる。

# 全部保存するなら "any:" 指定
.\ENScript.exe exportNotes /q 'any:' /f $env:temp\full.enex
# 3日以内に更新されたノートだけでいいなら "updated:day-3" を指定
.\ENScript.exe exportNotes /q 'updated:day-3' /f $env:temp\within3days.enex

f:id:itasuke:20171123222144p:plain

こうして書き出したenexファイルからノートを復元するには、「ファイル→インポート→Evernote エクスポートファイル」からできる。

f:id:itasuke:20171123222141p:plain

参考

PowerShellでエイリアスの逆引き

あるコマンドレットにどんなエイリアスが設定されているのか見たいことってあるわな。

例えば、Get-ChildItem にどんなエイリアスが設定されているのか調べるにはこうする。

Get-Alias -Definition Get-ChildItem

f:id:itasuke:20171121125402p:plain

端的に言うと Get-Alias に -Definition を付けるとエイリアスを、付けないとエイリアス名を調べるということです。

f:id:itasuke:20171121125400p:plain

ちなみに、デフォルトで一番多くエイリアスを持っていたのは Remove-Item でした。

Get-Alias | Group-Object -Property Definition  | Sort-Object -Property Count | Select-Object -Last 10

f:id:itasuke:20171121130024p:plain

urllib.requestを使って日本語ドメインを含むURLを取得しようとするとエラーになる

# Python 3.6.1
import urllib.request
res = urllib.request.urlopen('http://日本語.jp/about/')
# UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-2: ordinal not in range(256)

urllibの手足である http.clientsocket は既に国際化ドメインに対応してます。

しかし、urllib が punycode で符号化せずに Host ヘッダーをくっつけているので、エラーになっている模様。

回避策① 手動でHostヘッダーを設定する

import urllib.request

req = urllib.request.Request('http://日本語.jp/about/')
req.add_header('Host', req.host.encode('idna'))  # これ!
res = urllib.request.urlopen(req)

# あとは通常どおり
print(res.status, res.reason)
content = res.read()
print(repr(content[:1000]))

回避策② 他のライブラリを使う

たまに使われているのを見かけるrequests、こちらは国際化ドメインに対応してました。

しかし、標準ライブラリに入っていないので別途インストールが必要です。依存ライブラリが多いのでWindowsでもpipを使ってインストールした方がいいでしょう。コマンドラインから python -m pip install requests みたにやると一発で入ります。

import requests
res = requests.get('http://日本語.jp/about/')
print(res.status_code, res.reason)
print(repr(res.content[:1000]))

punycodeとidnaエンコーディングの違い

文字列をpunycode化するには、こうしますが、

print('abc日本語def'.encode('punycode').decode('ascii'))
# abcdef-rl2mm8fl32k

ドメインの場合は各階層ごとにpunyる必要があるので、idnaを使います。

print('あいう.abc.日本語.jp'.encode('idna').decode('ascii'))
# xn--l8jeg.abc.xn--wgv71a119e.jp

以上です。

参考

encodings.idna — アプリケーションにおける国際化ドメイン名 (IDNA)
idnaコーデックの説明。使うべき場所やドメインの正規化について軽く触れている。
Requests: HTTP for Humans
requestsの使い方。ドキュメントが充実している。やや古いけど日本語の翻訳もある。