私が歌川です

@utgwkk が書いている

今年買ってよかったもの

お題その2「今年、買ってよかった物」

大判本も入って値段も手頃なのでよかった。

USBポートが5つあって、同時にいっぱい充電できて最高。友達が泊まりにきたときに重宝した。

冬に備えて買った。しっかり手の保温をしてくれるので便利。

特別お題「2016年を買い物で振り返ろう」 sponsored by 三菱東京UFJ-VISAデビット

Python の unittest で標準出力に表示される内容のテストをする

tl;dr

  • 出力する文字列を生成する関数を作り、そのテストを書くべきだと私は思う
  • sys.stdout をキャプチャすれば表示内容のテストが書ける
  • test.support.capture_stdout()コンテクストマネージャを使うべき
  • そもそも unittest でやるべきではない

はじめに

いろいろな環境があります。ほとんど標準ライブラリしか使えないとか、莫大な量の print があるとか、いろいろあります。 我々はそういった環境においてもやっていくことになります。したがって、やっていきましょう。

暗黙のうちに Python 3.5 以降を前提としています。

sys.stdout をキャプチャする

コード

import sys
from io import StringIO

io = StringIO()

# 標準出力を io に結びつける
sys.stdout = io

print('hoge')

# 標準出力を元に戻す
sys.stdout = sys.__stdout__

print('captured: {}'.format(io.getvalue())) # captured: hoge\n

解説

ご存知の通り、UNIX 世界において標準出力はファイルです。そして、Python においてもそうです。 さらに、Python にはファイルを模倣したようなオブジェクトが用意されています。それが io.StringIO です。 これを sys.stdout に放り込めば、標準出力を変数にリダイレクトするといったことができます。

import sys
from io import StringIO

io = StringIO()
sys.stdout = io

さてあとは普段通りに print するだけです。そうすると、io に、出力されるはずだった文字列が蓄積されていきます。

print('this')
print('is')
print('test')

満足しましたか? それでは io に蓄積されたものを見ていきましょう。おっと sys.stdout を元の標準出力に戻すことを忘れずに。

sys.stdout = sys.__stdout__
print('captured: {}'.format(io.getvalue()))

sys.__stdout__ には、プログラム起動時の標準出力を示すオブジェクトが格納されています。 こうして、我々は標準出力に表示される内容をキャプチャする方法を知りました。

標準出力に表示される内容のテストを書く

コード

import sys


def method_one():
    print('called method_one()')


def method_two():
    print('called method_two()')
    print('not captured', file=sys.stderr)
import sys
import unittest
import hoge
from io import StringIO


class HogeTest(unittest.TestCase):
    def setUp(self):
        self.captor = StringIO()
        sys.stdout = self.captor

    def tearDown(self):
        sys.stdout = sys.__stdout__

    def test_method_one(self):
        hoge.method_one()
        self.assertEqual(self.captor.getvalue(), 'called method_one()\n')

    def test_method_two(self):
        hoge.method_two()
        self.assertEqual(self.captor.getvalue(), 'called method_two()\n')

if __name__ == '__main__':
    unittest.main()

解説

さて、キャプチャされた文字列を取得する方法まで分かれば、あとは unittest の流儀に沿って書いていけばよいです。 改行コードのことだけ忘れないように!

まとめ

もっとテストの書きやすい設計にしてくれ

局所最適を狙うこと

www.adventar.org

こんにちは。今月は仕送りが例月より-2万円されているので、覚悟を持ちながら暮らしております。人間はいつか必ず覚悟しなければならない時が来ます。

さて、人が生きるからには、交渉があります。両親、親族、交友、学校、職場、社会、……。我々は嫌でも交渉の連続のうちに身を置かなければなりません。我々の目標とすることはやはり大域最適解でありますが、常にそうしていけるとも限りません。そこに事情があります……。

私はつい最近までは、たいていの場合においては局所最適解を狙うような振舞いをしておりました。それは負担が軽く、また失うものも比較的少なかったため、もう少し言えば現状維持にかなり近かったためです。そして今でもそうしているつもりなのですが、果たして本当にそうできているのかにはいささか疑問があります。またそのような姿勢でないという指摘も受けるようになったと感じています。打算的に動くという感覚を忘れつつあるような気がしており、社会に絶対に飲まれないという決意を再び固めるよりほかにありません。

生きることは、近似解を求めることの連続です。近似を繰り返すことによって、我々はいつしか大域最適解に辿り着くことを夢見ています。そこに人がいる限りは難しそうであるという現状に目を背けつつ……。

これは 局所最適解 Advent Calendar 2016 - Adventar の記事です。

あわせて読みたい

utgwkk.hateblo.jp

こふ語の変化(souiukannjide)

はじめに

この記事は「こふ語 / ブチミリ Advent Calendar 2016」12/5の記事です。

www.adventar.org

前回の担当は、あっきぃさんでした。

akkiesoft.hatenablog.jp

記事自体をこふ語で書くことを考えましたが、けんこふさんがやってくれていると思うので割愛します。

こふ語とは

こふ語とは、アッシュヒョークを持つ京都で産声を上げた言語です。日本語にかなり似た性格を持っているため、日本語の方言とも考えられています。表立った特徴としては、

  • 半角カタカナ
  • 句読点を用いない文
  • 文節区切り*1の「っ」
  • アンッ!アンッ!アンッ!アンッ!

先行研究

こふ語話者の数に対して、こふ語に関する研究文献は、まだ数が多いとは言えません。

karubabu.hateblo.jp

この記事には、こふ語初心者がこふ語を使って意思疎通をしたいときに何をするとよいか、またこふ語の綴りに関する問題などが記述されています。

手前味噌ですが、私は昨年のこの時期に、京都で生まれたこふ語と北海道(ゆきすごいところ)で生まれたかるなべ語を関連付けた記事を執筆しました。

utgwkk.hateblo.jp

こふ語の変化

私がこふ語の変化——というよりは、こふ語における新文法といったほうが適切だろうか——に気づいたのは、10月末のことでした。

また、次の例にはさらに高度なこふ語の新文法が用いられています。

おわりに

宇宙に飛び去ってしまったとされている「こふ語研」、かるなべ語との融合、——謎は深まるばかりのこふ語の情勢、我々がこの先生きのこるにはどうすればよいか——

次回はかるはげくん (id:karubabu) の「こふろいどさんをフォローして月旅行を当てよう! - karubabuの日記」です。

*1:必ずしもそうとは限らないが、そのようにすると意思疎通がしやすいと筆者は考えています。

めぐねえにはなれない僕らだから

はじめに

これは がっこうぐらし! Advent Calendar 2016 12/4日分の記事です。

www.adventar.org

昨日の記事は、@homoma1d さんの http://blog.homomaid.com/post/153989440187/%E6%9C%80%E8%BF%91%E4%B8%88%E6%A7%8D%E7%94%B1%E7%B4%80%E3%81%8C でした。

ごあいさつ

こんにちは、id:utgwkk です。そして、こちらは最近の活動報告です。

gyazo.com

SlackBOT はボタン1つで応答を追加できるので便利ですね。

私が「がっこうぐらし!」のことを知ったのは、アニメ化されてからでした。

utgwkk.hateblo.jp

いきさつなどは多分↑の記事に書いてあるので、こちらもあわせて読むとよさそうです。

オリナスに行った

写真の角度が悪いですが、がっこうぐらし! に関係する建物です。そして、こちらの記事は答えです。

https://ure.pia.co.jp/articles/-/63850ure.pia.co.jp

10/21-23に、ISUCON6 本戦のために東京に行ったのですが、その際に、そういえばオリナスでコラボやってるなーということを把握していたので、サクッと足を伸ばしてみました*1

こちらはポスターです。

オリナス内のタワレコで、原作マンガのコマが貼られていたり*2、コラボグッズが販売されていたりしたので、後のことも考えずに*3ガンガン購入して、タペストリーをカバンからはみ出したままにして、そのまま京都に帰りました。

他には、由紀ちゃんの校内放送があり、こういった場所でこういった放送を聞くのは初めてだったので、ひとり感動していました。タペストリーは部屋に飾っています。

めぐねえという存在

めぐねえという存在に触れていきます。

めぐねえは、佐倉慈先生であり、学園生活部の顧問をしています。いつも由紀ちゃんの隣にいました。めぐねえは、生徒の目線に立って話をします。「めぐねえじゃなくて佐倉先生でしょ」と言います。それでも、生徒のことを第一に考えて行動しようと思っていました。少なくとも私には、だいたいはそのように見えました。しかし一つ挙げるとすれば、そしてこれが物語の核心でもあるのですが、巡々丘学院高校の本質を生徒たちに伝えることができなかった、という点があります。人間的な甘さ、割り切れなさと言われれば、否定はできないです。

めぐねえは、一番大事なところで躊躇しました。ある意味絶望に陥ったのではなく、事態を楽観しようとして、その甘さが出てしまいました。そしてとうとう学園生活部のみんなに「緊急避難マニュアル」のことを自分から伝えることができずに、「かれら」になってしまいました。「かれら」になってしまっためぐねえは、それでも最後まで生徒のことを考えていたのでしょう、普通の人は近寄らない地下2階に行き、そこで完全に成り果てました*4*5

由紀ちゃんとめぐねえ

由紀ちゃんは、めぐねえが成り果てたことを受け入れようとはしませんでした。めぐねえがいるということが、そのまま自分の存在意義につながっており、みーくんにめぐねえの存在への疑念を突き付けられたときは、それを受け入れられていませんでした。けれども学園生活部の危機に対しては、人一倍敏感でした。胡桃が「かれら」に噛まれて命の危機に瀕しているらしいことを感じ取った由紀ちゃんは、それまでとは違った方法で部のみんなを元気付けようとしました。最後の砦であるめぐねえが何とかしてくれる、そう思いながら部の存続のために今自分ができることをしよう、という彼女なりの考えがあったのだと思います。

アニメ最終話で、「かれら」が徘徊するエリアをかい潜る決断をした、その横にもめぐねえがあり、めぐねえに導かれ、太郎丸にも助けられ、由紀ちゃんは自分の果たすべきことを無事に果たすことができました。初めての、一人だけでの「かれら」との対峙には、多大な恐怖があったことだと思われます。それでも最後まで、学園生活部のみんなのため、そしてめぐねえのためを考え、挫けずにやりきった、丈槍由紀のたくましさのようなものがあります。

由紀ちゃんの多大なる現実逃避には、受け入れられないめぐねえという実在の消滅もその原因の一つとしてありましょう、けれども結局彼女はめぐねえによって、そしてめぐねえのために行動している、私はそういった見方をしております。由紀ちゃんは、わがままを突き通すようなことはしませんでした。学園生活部で楽しく活動することだけを考えていました。

学園生活部とめぐねえ

めぐねえは、学園生活部の顧問です。そして、成り果てた後も、学園生活部の顧問であることに変わりはありませんでした。胡桃がなぜ成り果ててしまっためぐねえを倒すことができずに、噛まれるしかなかったのか? 彼女はどうしても自分の手でめぐねえを殺めることができませんでした。シャベルという武器を使うことは、同時に胡桃のトラウマに触れることになります。そんなトラウマの元で、見ず知らずの「かれら」であるならまだしも、知った顔を殺めなければならないとなれば、一体どうなるか。彼女にとっても、めぐねえは大好きな先生であり、学園生活部の顧問であり、「かれら」ではなかったのです。幸いにもみーくんだけが部員の中で彼女のことを知らなかったので、そしてそのために、胡桃を助けることに成功しました。

めぐねえという存在は、あまりにも大きかったのです。最後までめぐねえは死ぬことはなく、部員それぞれの心の中に生きていました。ただ由紀ちゃんのそれが尋常でないように見えるだけのことで、みなめぐねえに少なからず依存していました。

おわりに

gyazo.com

明日は paradigm_9 (id:CHY72) さんの担当で、「みーくんは起床のプロ - (/^^)/⌒●~*$ a(){ a|a& };a」です。楽しみですね。

*1:22日に本戦があったので、かれらパーティーには行けませんでした……。

*2:写真撮影厳禁でした。

*3:3000円以上購入でポスターが付いてくるとかだった気がする。

*4:皮肉にも、その行動が胡桃を傷つける原因になってしまうのですが……。

*5:これが悪手であったとは思いません。いずれにせよ、学園生活部はどこかで、「かれら」になってしまっためぐねえと対峙し、そしてちゃんとした別れをしなければならなかったでしょうから。

『巨大数(岩波科学ライブラリー)』を読んだ

巨大数 (岩波科学ライブラリー)

巨大数 (岩波科学ライブラリー)

巨大数を扱った珍しい(初の?)書籍。 つい最近*1出版された本で、昔からよく知られている大きな数から、ふぃっしゅ数や BEAF のような最近のアマチュア巨大数の動きまで言及していて、新しさがある*2

巨大数のおよその大きさはいろいろ聞いたことがあったけれど、その成り立ちとか、どういう数学的問題の解として登場してきたのか、などがまとめられていた。ヒドラヘラクレスの戦いの話は初耳で、まだちゃんと追えてないけど面白そう。

難解な数式はとくに出てこなかったので、数学の読み物入門編としてもよさそう?

*1:2016/09/06 第1版発行

*2:あとがきに述べられている程度ではあったが。

#nowplaying をリアルタイムに配信したい

KMCM(1)

はじめに

これは KMCアドベントカレンダー2016 1日目の記事です。

kmc.hatenablog.jp

www.adventar.org

こんにちは

KMC2回生で副広報*1id:utgwkk です。KMC では utgw という ID で活動しています。

さて、アドベントカレンダー1日目ということなので、ゆるーく進行していきましょう。

*1:この役職も、もうじき「元」が付くようになります。

続きを読む