天才クールスレンダー美少女になりたい

チラシの表(なぜなら私はチラシの表にも印刷の上からメモを書くため)

朝鮮中央通信Web版大解剖、或いは初めてRubyのgemを作った話

諸君 私は北朝鮮が好きだ
諸君 私は北朝鮮が好きだ
諸君 私は北朝鮮が大好きだ

とある少佐のスピーチより

人生で初めてRubyのgemを作りました。

github.com

北朝鮮公式のニュースサイトである朝鮮中央通信APIクライアントです。gem install kcnaとかでインストールできます。
人生初のgemがこんなアレな代物ってことに思う所が無いわけではありませんが、楽しかったから良し。

経緯

全国推定3億人の北朝鮮趣味者のみなさん、こんにちは。私は今日も首領様を讃える音楽を聴いております。北朝鮮の音楽はいいぞ。

さて、日本人なら1度くらいは誰しも北朝鮮の仰々しい日本語を真似したことがあるでしょう。「定期考査をこの学校から永遠に一掃することを誓う」とか。共産趣味者はみんな「同志スターリン」とか「万国のプロレタリアート団結せよ」とか言ってますが、それの北朝鮮版です。
しかし、私はプログラマです。自分で北朝鮮の語録を使うだけでは物足りません。もし北朝鮮の日本語のデータベースがあれば、使い古された人工無脳の要領でそれっぽい日本語を生成できるだろう。そんなことを考えた私は、北朝鮮の日本語データベースに着手しました。

まず、初めに朝鮮中央テレビの字幕を採取することを考えました。リプライに使える朝鮮中央通信画像botとかで流れてくるアレです。しかし、調べていくうちに残念なことがわかりました。あの画像群はどうやらとあるYouTubeチャンネルの中の人が付けたもののようです。

www.youtube.com

このチャンネルの動画以外に、あのような字幕付きの動画が一切見当たらなかったので、間違いなさそうです。別にこのチャンネルの字幕を文字起こししても良かったのですが、これは北朝鮮公式の字幕ではないので、目的と照らし合わせればちょっと残念です。

北朝鮮の公式の機関が書いた日本語を探すと、ありました。朝鮮中央通信Web版です。

朝鮮中央通信と検索すると、http://kcna.co.jpが出てくると思いますが、そちらではありません。http://kcna.kpです。.kpドメインのサイトは初めて見ました。あとアクセスは自己責任で。普通に閲覧するだけなら特に問題は起きないと思うけど、マルウェアが置いてあったりはします。

gigazine.net

というわけで、このサイトをスクレイピングなりなんなりしてデータを取ってこようと決意したわけです。

朝鮮中央通信大解剖

さて、このサイトの使い方を調べてみましょう。もちろん開発者ツールのネットワークタブを監視しながら。

まず、トップページから適当な記事のリンク(実はリンクじゃない。後述)を踏むと、こんな画面になります。

f:id:fabonya:20170710211242p:plain

次のリストに移る青い矢印をクリックすればXHRでデータを取ってきて遷移してくれます。つまり、APIの仕様がまるわかりです。右上の謎リボンみたいなのは記事絞り込みツールです。絞り込んだ状態で矢印をクリックすると、APIのパラメータの仕様がよくわかります。

とにかく、いろんなページを渡り歩き、いろんなボタンを押しながらネットワークアクセスを監視しました。そうすればどのURLにどんなデータを送りつけるとどんなレスポンスが帰ってくるかがだいたいわかりました。

さて、このサイト、いろいろツッコミどころが満載です。主体(チュチェ)プログラミングの成果でしょうか。拡張子がkcmsfなのもちょっと変ですけど、それだけじゃありません。

まず、中途半端にJSを使っているせいで記事のパーマリンクがないという事態に。まぁTwitterでシェアなんて概念はあっちにないだろうから仕方ないのかも。

となれば、当然JSからXHRでアクセスするためのAPIみたいなのが存在するが、GETにすべきところも全てPOST。APIだけでなく、ページ遷移も全てPOST。ハイパーリンクなんてものはない。リンクに見えるものも、実はクリックするとJSが発動してPOSTで遷移するようになってます。いやマジでなんでや。北朝鮮特有の事情による要請なんだろうか。

ところで、POSTにおけるリダイレクトはいろいろ仕様と実装が混沌としていますが、307だと大抵のブラウザでもPOSTで再送信という挙動を示しますし、仕様にもそう明記されています。だからといって、しばらく通信してないと初回は307 Temporary Redirectが飛んでくる仕様は如何なものか。しかも飛ばされた先は同じURLですよ。もう一度POSTで同じところへ送れってことなんでしょうね。これもチュチェ工学による要請なんだろう。(諦め)

さて、スクレイピングするまでもなくAPIを叩けば記事のデータが手に入ります。しかし、XHRで取ってきたHTMLの断片をinnerHTMLで突っ込む実装なので、

<nobr><strong><font style='font-size:18pt;'>金正恩</font></strong></nobr>党委員長
みたいな文字列が平気で紛れ込んでます。セキュリティも何もあったもんじゃねぇな。さすが北朝鮮
というわけで、そこらへんを適当に変換してやるとプレーンテキストが得られます。

gemの実装

まず、set-cookieをちゃんと扱えるHTTPクライアントが必要です。今回はhttpclientを使いました。

github.com

XMLのパースには標準のREXMLを使いました。これくらいのことでNokogiri導入して消耗する必要はないからね。(気になる人は「nokogiri インストール」で検索してみよう。インストールに四苦八苦する先人の姿が見えます)

他に難しいことは特にありません。コードを適当に書けばそれっぽいのができます。

最後に

なんでもチュチェチュチェ言ってれば許されると思うなよ、北朝鮮同志(エンジニア)諸君!

「科学の発見」感想

電弱統一理論ノーベル物理学賞を受賞したスティーヴン・ワインバーグ教授が書いた科学史の本。古代ギリシャからニュートンまでの科学の歩みが書かれていて面白い。

科学の発見

科学の発見

過去を現在の基準で裁定する「不遜な歴史書」とは言っているが、個人的にはそんなに問題だとは思わなかった。確かにホイッグ史観はよろしくないとは思うが、ニュートンの方がアリストテレスより世界を理解していたというのは明らかだろうし。そもそも、この本の目的は過去の偉人たちの間違いを取り上げて彼らを糾弾することではなく、現代の科学の方法論を発見するのがいかに難しかったかを過去と比較して明らかにすることであろう。

また、後ろに付いてくるテクニカルノートが素晴らしい。様々な説や発見の数学的・科学的背景について現代の視点から述べたもので、内容が非常に充実している。

ただ、本の前袖(表紙カバーの内側に折れてる部分)に「化学、生物学などは二等の科学だ」とあるのは非常にダメだと思う。本文のどこを読んでも、こんなことは主張されていない。この言葉を追加した出版社の人間はタコ殴りされても許されるのではないか。

太陽系の解明

この本の山場はいくつかあるが、その1つは太陽系が解明されるまでの一連の流れだろう。

古来から、惑うように運行する惑星の動きは難題だった。

プトレマイオス以前、宇宙の構造を説明する理論としてアリストテレスの同心天球説が存在したが、これは観測と合わない点が多かった。そこで、プトレマイオスは周転円と離心円、エカントという概念を導入した。また、モデルにパラメータを導入し、パラメータの値を観測結果に合わせて決めることで観測結果と概ね一致させることに成功した。このあたりの理屈は理解していないので詳細は省くが、この部分のテクニカルノートは相当詳しくて勉強になる。モデルのパラメータという概念は非常に現代的で、プトレマイオスはすごいと思う。

相当複雑なプトレマイオスの理論は、それでもなお観測結果に合わなかった。これは別に天動説の欠陥というわけではなく、地動説を主張したコペルニクスも同様の問題に悩んだらしい。コペルニクスは太陽を中心とすることでプトレマイオス説の不自然な仮定(ファインチューニング)を排除することには成功したが、観測結果とのズレの問題は解消されなかった。天体の軌道が円である、という前提自体が間違っていたから致し方ない。

いずれにせよ、筆者はプトレマイオスを高く評価している。別に間違っているかは論点ではなく、その研究姿勢が科学的だからだろう。

ティコ・ブラーエは「すべての惑星は太陽の周りを回っているが、その太陽は地球の周りを回っている」という説を唱えた。これは地動説を地球中心で見たのと多分変わらないと思う。彼は精密な観測記録を残した。この時代望遠鏡はなかったから、全て肉眼でということになる。恐ろしや。

ケプラーはティコ・ブラーエの観測データを元に天体の軌道が楕円であると考え、ケプラーの法則を打ち立てた。彼のモデルは非常に単純明快であった。エカントだの離心円だのを導入せずに済むからだ。また、観測データともよく合った。そりゃ正しいんだから当然なんだけど。

ガリレオは望遠鏡による観測で、地動説が有利となる証拠を提示した。最終的にニュートンが運動の法則と万有引力の法則を確立し、その結果天動説は葬られた。たくさんの人々の研究の積み重ねが科学なのだから、これは真に科学の勝利といえるだろう。(唐突)

まとめ

いい本でした。

Twitterの丸いUIを元に戻すFirefox拡張機能作った

先日、TwitterのUIが変わったのは記憶に新しいところです。Twitterはアップデートのたびに不満が噴出しまくるのが常ですが、今回の変更に関してはそんなにクソだとは思っていません。文字が太すぎる部分があるのは微妙だと思いますが、そのうち慣れると思います。というかUIどうこうする前に検索で名前にキーワードが含まれているユーザーのツイート全部引っかかるクソ仕様どうにかしろks

しかし、唯一受け入れられないのは、丸いアイコンです。これだけは、ちょっと受け入れられません。というわけで、拡張機能作りました。狐使いなのでFirefox版のみです。

addons.mozilla.org

Chromeとかの人はStylishとか使ってstyle.cssの内容をぶち込んでください。

github.com

やってることは簡単で、単にborder-radiusを以前の値に戻しているだけです。ツイートボックス周りはborder-radius以外にも多少調整していますが。今はA/Bテスト中なのか、body要素のedge-designクラスを外すと以前のデザインに戻るようになっているため、以前の値を調べるのは簡単でした。

ちなみに、このスタイルシートはTweetDeckにも適用できます。拡張機能をインストールすると自動的にTweetDeckにも適用される仕組みです。Chromeとかの人は手動でやってね。

ステラのまほう プログラミングネタまとめ(5巻まで)

最近、Twitterステラのまほうを布教されたので買ってみたのですが、最高でした。文章を書くのは結構疲れるので、感想は気が乗ったら書きます。ちなみに、キャラの中では村上椎奈が一番好きです。ネガティブなところとか最高です。

さて、ステラのまほうプログラマ向けの素晴らしいマンガです。プログラミング以外にも絵や音楽、小説などをやったことがある人ならより楽しめます。そうでない人でも楽しめますが。
作者のくろば・U先生は絵が描けてプログラミングもできるすごい人で、作品にもプログラミングの知識や小ネタが散らばっています。そんな小ネタを解説したり、プログラマ目線の感想を垂れ流したりするのがこの記事の目的です。
画像は付いていませんので、どんなシーンなのか気になった方は原作を買いましょう。この記事を読んでる人なら後悔はしないでしょう。

以下、一応ネタバレ注意。

続きを読む

Mathtodon始めてみた(typoじゃないよ!)

Twitter見ていたらMathtodonというMastodonインスタンスの情報が流れてきた。その名の通り数学とかをやっている人向けのインスタンスで、LaTeXの記法が利用できるのが特徴。MathJaxを使って実装しているらしい。TwitterのFFのうち数人が垢を作っていたので、衝動的に登録してしまった。

mathtod.online

結論から言うと、非常に後悔している。楽しすぎて溜まっている仕事が終わらない。せめて忙しい時期が終わるまで始めるべきでなかった。

まず、そもそもSNSとしての形式はTwitterといっしょ。ツイ廃がハマらないわけがない。

次に、集まってる人の興味の対象が一致していること。数学や自然科学などに興味がある人ばっかりが集まってくる。いる人も様々で、大学生や院生、博士号を取った研究者もいる。多分高校の教師とかもいる。始まってすぐの頃はLaTeXの記法が使えるのが物珍しいのか、適当な数式をトゥートする人々が多かったけど、数日が経つと自分の専門のことや最近学んでいる分野についてトゥート(Mastodonにおけるツイート)する人が増えてきた。数学について語ってる人が多いので、数学が苦手な私にはあまり理解できないけど、知的好奇心がくすぐられるのは間違いない。あと、たまにLaTeXの知見が飛んでくる。

最後に、やはりLaTeXの記法が使えるのが大きい。500文字まで入力できる、というのが楽しさに拍車をかけている。500文字もあれば長かったり複雑だったりする式も表現できてしまう。中には、LaTeXでAAを作ってしまう人もいて驚いた。それに、数式を使ってリアルタイムでやりとりできるというのは素晴らしい。数式の表現力しゅごい。

とにかく、Mathtodonは楽しい。Mastodon自体が楽しいかはわからないけど、興味が似た人が集まってるインスタンスは似たような楽しさがあるんじゃないかと思う。文化祭終わるまでは控えないと……

「重力アルケミック」感想

横浜駅SFの人の第二作「重力アルケミック」を読んだ。買ってからもうすぐ2ヶ月、ちょっとずつ感想を書いてたけど遅々として進まなかった。普段Twitterで脈絡のない短文を連ねることに慣れてしまうと、人はこうも文章を書けなくなるものなのかと思った。文章力のリハビリにブログはちょうどよさそうなので、これからも継続して更新していきたい。

重力アルケミック (星海社FICTIONS)

重力アルケミック (星海社FICTIONS)

あらすじ

重力を司る「重素」の過剰採掘により膨張を続け、ついに10倍もの大きさになった地球。会津若松市に生まれ育った湯川航は、遠くに行きたい一心で上京し大塚大学理工学部に入学した。非生産的な日常を送る湯川だったが、バイト先の古本屋で見つけた本をきっかけに、重素を用いない「飛行機」を作ろうと思い立つ。

全体の感想

科学、工学、ものづくりの楽しさを教えてくれる有益SF。ずっとワクワク感が止まらなかった。

理系大学生の4年間の大学生活を描いたもの。地球が膨張を続けているという終末ものにもできそうな舞台設定だけど、この本は主人公の回想の形式で平凡な大学生活が語られている。確かにSFだけど、特に前半の主役は重素とかの技術ではなくあくまで湯川の日常。だから「滅びゆく地球、そして立ち向かう主人公」みたいな話はない。とはいえ、後半部分、飛行機を作ろうと思い立ってから実際に飛ぶまでの1年間は劇的な山場がなく地味なものの、胸熱展開で良かった。流体シミュレータの使い方や流体力学を学び、揚力を最大限得られるような機体を設計し、部品を研究室の備品で作成し、組み立てて、飛ばす。そうやって一歩一歩目標に向かって確実に進んでいくあたりが特に。エンディングも希望溢れる終わり方で非常に良い。

一般的に青春というと中高生、とくに高校生のイメージがあるけれど、この作品は良い青春小説だと思う。湯川みたいに目標に向かって一歩ずつ進んでいく、そんな大学生活、そして青春を送ってみたいと思った。

世界観

地球が膨張しているという設定上、この世界とはだいぶ違う点がある。重素という便利なものを使えば確実に物を浮かせられるので、揚力で飛ぶ飛行機は存在しない。そりゃそうだ。他にも膨張した世界ならではの風景や問題がいろいろ描写されていて面白い。
この世界の物理法則についてはあまり触れられていないのでよくわからないけど、おそらく真面目に考えると面白い考察ができるだろう。僕はやらないけど。

キャラクター

一言で言うと、すごく好み。

まず主人公の湯川が理系大学生で、この時点で最高。あとヒロインの宮原さんが「このままでは人生のピークが国際数学オリンピック日本代表で終わってしまう」なんてことをのたまってるので最高。僕も一度くらいは「このままでは人生のピークが国際化学オリンピック日本代表で終わってしまう」とか言ってみたい。あと宮原さんに数学教えてもらいたい。

文章

地の文の言葉遣いが自分のと似ていて親近感を持った。

頻繁に挟まれるギャグが面白い。大爆笑できるわけじゃないけど、クスッと笑える。ウィットっていうのかな。ただ、中には歴史や科学の知識が前提になってるものもあるので、人によっては面白くない(わからない)かも。例えば、こんな感じに。

まず登場するのは「化学の父」と呼ばれる18世紀フランスのラボアジェ。(中略)空気から酸素を分離し、岩石から重素を分離し、火から燃素を分離し、それまで元素だと思われていたものが複雑な化合物・混合物であることをどんどん解き明かしていき、最終的にギロチンによって首と胴が分離された。フランス革命万歳。民主主義万歳。

(38ページより抜粋)
ラボアジェフランス革命ギロチンにかけられて死んだのは有名な話。ラグランジュが「彼の頭を切り落とすのは一瞬だが、彼を超える頭脳が生まれるのに100年はかかるだろう」と嘆いたのも有名な話。

総評

最高。柞刈湯葉さん、本当にありがとうございました。