Kyoto.なんか #3 は明日です!発表者リストも更新

先日ご紹介したKyoto.なんか#3 は明日 8/19(土)に開催です!

kyoto-nanka.connpass.com

イカす発表者のみなさまにも集まって頂きました。

  • moznion さん 続・そして物語は何度目かのアプリ内通知再実装を迎える
  • daaaaaai さん ビジネスプロセスリエンジニアリングの現場
  • t_kyt さん 5分でわかるHTTPキャッシュ
  • sugyan さん 機械学習によるアイドル顔識別について もしくはプログラミングに関する何か (仮)
  • jp_pancake さん Dangerを使ってPRを自動的にチェックする
  • y_uuki さん Redisの負荷対策の話(仮)
  • shokai さん HerokuでSocket.IOをやっていく話
  • side_tana さん Goとエラーと私
  • papix さん 2017年データベースマイグレーションの旅 〜Perl編〜 (仮)
  • pastak さん 夏休みの自由研究 〜React VR編〜
  • ichirin さん MySQL freeze の巻

めちゃくちゃおもしろそうな発表が目白押しですね!まだ若干名参加枠があるのでどうぞご参加下さい

Kyoto.なんか #3 を開催することになりました

みなさん暑いですね。京都はとても暑いです。暑い京都をもりあげるKyoto.なんかというイベントの第三回を開催することになりました。

Kyoto.なんかは、Kyoto.rbやKyoto.jsのような言語ごとの勉強会ではなく Kyoto.* 、つまりプログラミングや技術に関する発表ならなんでもOKの技術勉強会です。

かつての様子はこちら。

そんなKyoto.なんか#は来たる8/19(土)、京都はてなオフィスで開催いたします。現在、発表者を募集中です。ぜひ発表にチャレンジしてみてください。

kyoto-nanka.connpass.com

Rによるやさしい統計学を読んだ

統計勉強してる っていう記事で、途中まで読んでた"Rによるやさしい統計学"を読み終えた。

Rによるやさしい統計学

Rによるやさしい統計学

この本は心理学関連領域の研究者の著者たちが学生向けに、統計ツールのRの使い方を教えてくれるという内容。第I部では基本的なRの使い方と統計学の考え方について、第II部では、実際のデータ処理をする上で必要になる考え方や手法について具体的に紹介してくれる。

数学的理論を学ぶことに主眼をおいた本ではないので、難しい証明は省かれているものの、統計の考え方の直感的な解説がとてもわかりやすい。自分は理論よりの大学の教科書から統計の勉強をはじめたのだけど、この本の解説に触れることで理解があやふやな部分がしっかり理解できたように思う。逆にあまり理論的な手法の根拠などの説明はないので、別の本を参照するのが良さそう。

統計分析を行う課題がたくさん載っているので、実際に手を動かして、統計分析の間隔を掴んでみるのにもこの本は良いと思う。データの入力を手でちまちまやらないといけないので、そこはちょっと面倒。

また、この本の冒頭にあるように、研究のデータを分析する文系の学生を読者として想定している。そのため、取り上げられているテーマは、ある程度そちらに寄っているところはある。特に第II部にはそういったイメージを持った。基礎的な考え方は変わらないはずなので、適宜頭のなかで自分が解決したい問題に対応させて読んでいくと良い。

Rの使い方については、エンジニアであれば読めば簡単に理解できると思う。Rの機能については利用するものを最低限紹介してくれているという感じなので、R言語自体をじっくり学ぶのには向いていない。自分のやろうとしていることがRのどのツールに対応しているかといったことはよく分かる。

全体的には、具体例をふんだんに使って、わかりやすく概念を伝えてくれるし、手を動かして学ぶこともできて、評価が高いのもうなずけた。理論を学べるほんと合わせて読むのが良いと思う。

確率統計の勉強

仕事やらなんやらで、データの様子をみる場面はよくあるものの、データの調べ方や分析の方法を知らなくてなにかと困るので、なんとかしたい... という気持ちの高まりがあって、連休のちょっと前から確率統計の勉強をはじめた。

確率統計は大学の講義で一通りやったはずだけど、たいして活用できないまま数年がすぎてほぼ忘れてしまった。そういう調子なので、今となっては、適当な数の標本を用意してきて、標本比率を求めてみるけど、この値は母比率にどれくらい近いものなの? と言われても、まったく何も言うことはできないのであった。

ひとまず基本的な内容をザクッと学べそうな、まずは、やさしく学べる統計学を読んでみた。

やさしく学べる統計学

やさしく学べる統計学

以前、微分積分の勉強してた ときもこのシリーズにお世話になった。やさしく学べるというタイトルどおり、難しいところには深入りしすぎない構成なので脱落せずに最後まで読める。例題や練習問題が充実していて、具体的な推定や検定をやってみることができる。

確率統計全般にいえそうだけど、連続的な確率分布の解析は主に微分積分でがんばる感じなので、入門本を読むにも軽く微分積分を復習しておくといいかもしれない(部分積分の公式暗記してない)。

やさしく学べる統計学の次は、キーポイント確率統計を読んでみた。

キーポイント確率統計 (理工系数学のキーポイント 6)

キーポイント確率統計 (理工系数学のキーポイント 6)

自分が大学の確率統計の講義を受けてたときの教科書がこの本で、家にもともとあった。改めてページを開いてみたところ結構おもしろく読めた。

前述の、やさしく学べる統計学に比べると数学的な説明がもう少し丁寧で、難しいけど納得して読み進めることができる。拡散方程式と正規分布の関係についての話題など、発展的な話題が合間に語られるのもおもしろい。もともと確率統計のイメージがある人は、はじめにこの本を読んでも良さそう。

ここまでで、ざっくりとは基礎を学んだので、実際のデータを処理できるようにRを使った本にも手を出してみた。この本はまだ半分くらいしか読んでない。

Rによるやさしい統計学

Rによるやさしい統計学

この本では、数学的な証明や法則の紹介は限定的になっているが、Rのスクリプトを使って中心極限定理が成り立つことを見せてくれたり、いろんな標本分布のグラフを見せながら説明してくれたりするので、これまで勉強したことを具体的なデータで確認できてためになってる。

ひとまず、今はここまで勉強したものの、実際のデータを使って何かするにはもうちょっと知識と練習が必要そう。もうちょっとがんばろう。

おまけ

そういう調子なので、今となっては、適当な数の標本を用意してきて、標本比率を求めてみるけど、この値は母比率にどれくらい近いものなの? と言われても、まったく何も言うことはできないのであった。

これ実際に気になってたのだけど、母比率の区間推定という問題でRを使うと関数一つ呼ぶだけでできる..(どういう理屈でこういう計算ができるかはキーポイント確率統計に書いてある)。

例えば、自分にとどくメールのスパム率が知りたいとする。大量にあるメールのうち、200通のメールをサンプルとして取り出して調べたら70通はスパムメールだったというときに、自分にとどくメール全体のスパム率はどれくらいだと考えられるかという問題を考えると以下のようにすると結果が得られる。

> binom.test(70,200)

	Exact binomial test

data:  70 and 200
number of successes = 70, number of trials = 200, p-value = 2.653e-05
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
 0.2840707 0.4204506
sample estimates:
probability of success
                  0.35

binom.testは二項分布に基づく検定をしたりする関数(だと思う)。ついでにいろんな便利情報も出力される。今は検定はしたいわけではないのでp値とかは無視して、95 percent confidence intervalのとこだけをみると、だいたい0.23 ~ 0.42 くらいになっている。これは、スパムメールの割合は95%の確率で23% ~ 42%の範囲に入りますねという意味。0.18の範囲で揺らぎがあるので、もう少し揺らぎを少なくしたければ、標本数を増やせば良い、となる(標本数10倍にして標本比率を変えないようにすると、揺らぎの範囲は0.04くらいになる)。

Effective Python 読んだ

Python入門週間の続きでEffective Pythonをサラリと読んだ。

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

自分がおもしろいと思ったのは、入門 Python3にはあまり載っていない込み入ったPythonの機能の紹介ので、特に "4章 メタクラスと属性" では、Pythonのオブジェクトシステムの凝った使い方を知ることができて良かった。自分のコードでメタクラスを積極的に使うのは嫌な予感がするので、あまりないかなと思うものの、ライブラリコードを読むときなどには役立ちそう。

他にも、"6章 組み込みモジュール" では、デコレータやコンテキストオブジェクトの定義の仕方やコンテキスト、日付周りのイディオムや、"7章 協働作業(コラボレーション)"では循環参照の問題についてなど、実際のコードを書くときに役立ちそうな話題が総ざらいにできる内容で自分としては満足できた。

一方、サンプルコードが微妙に理解しづらくて、丁寧に読み込まないとよくわからない部分がちょいちょいあったように感じた(もちろん、自分の理解力の問題もあるとは思うものの)。あと、コードの設計の仕方に疑問を感じるところも少しあって("項目 34:クラスの存在をメタクラスで登録する", " 項目 50:モジュールの構成にパッケージを用い、安定な APIを提供する", 例外が好きそうなところ)、本の内容をそのまま鵜呑みにせずに、やり方の一つとして覚えておくのが良さそうかと思った。

総じては、Pythonのよくあるイディオムがコンパクトにまとまっていて良かったと思う。Python流のやり方が少しづつわかるようになってきた。この本の内容が実際のPythonコードではどれくらい採用されているのかは、特に知らないという状態なので、もう少し世の中のPythonのコードを読んだり、オフィシャルのドキュメントを眺めたりすると良さそうだった。

ゼルダの伝説 時のオカリナ3Dをクリアした

Nintendo Switch でリリースされる、ゼルダの伝説 ブレスオブザワイルドが楽しみすぎる今日このごろなのだけど、よく考えたらゼルダシリーズを一切プレイしたことなかった*1ので、時のオカリナをプレイすることにした(のが2週間くらい前)。3DSでのリメイク版を購入した。

64版はたぶん友達がプレイしているのを見たことがあるはずだけど、うろ覚えの記憶しかない。友達がオカリナの楽譜をだいたい覚えていて、すげーなって思ってたような。大乱闘スマッシュブラザーズはやっているので、主要キャラクターはだいたいわかるものの、物語的な背景は知らないという感じでスタート。

謎解きがむずいって聞いていたので、とりあえず初見でチャレンジして、はまりまくったら攻略サイトは見て良いというルールにした。クリアしてみて振り返ると、ダンジョンの攻略のために攻略サイトに頼ったのは2,3回くらいで、丁寧に取り組めばなんとかなるなという感じ。ダンジョン以外のサブクエストや隠しアイテムの入手には攻略サイトに頼りまくった。自由度高すぎて、気づけないみたいなパターンが多かったような(コッコジャンプでこの位置にとどくのまじか..とか)。試行錯誤しまくってるとブレスオブザワイルドが発売されそうなのであきらめた。

演出はそんなに多くはないし、めちゃくちゃグラフィックが綺麗ということもないんだけど、落ち着いた世界観と心にしみるストーリーでたいへん良かった。音楽が良かったのか。スマブラをやっていたことにより、ストーリー上の重要な事実を知らされていたために、途中できづいてあーーってなったりしたのだけど、やむなしである。

ゼルダ作品の時系列の上、重要作品らしい時のオカリナのストーリーを知ることができたし、基本的なゼルダのコンテキストを学ぶことはできたので、だいたい目的は達成できて良かった。意外と2週間くらいでストーリークリアはできたけど、やりこみ要素はいろいろ残っているので、もうちょっと楽しめそう。Nintendo Switchが発売される3/3までには少し時間があるので、トワイライトプリンセスかスカイウォードソードあたりをプレイしても良いかと思ったけど、時間を無限に消化しそうなので諦めたい..。

ゼルダの伝説 ブレス オブ ザ ワイルド

ゼルダの伝説 ブレス オブ ザ ワイルド

*1:よくよく思い出すとリンクのボウガントレーニングだけ持っていた

レガシーソフトウェア改善ガイドを読んだ

めっちゃ似た名前の"レガシコード改善ガイド"とは別の本。レガシーコード改善ガイドは結構前の本だけど、このレガシーソフトウェア改善ガイドは去年刊行されたばかりだ。hitodeくんと会話してて気運が高まったので読んだ。

レガシーソフトウェア改善ガイド (Object Oriented Selection)

レガシーソフトウェア改善ガイド (Object Oriented Selection)

この本は、レガシーソフトウェアがメインのテーマにしているけれど、古びてどうにもならなくないソフトウェアプロジェクトへの対処のみにフォーカスしているのではなく、普段から開発しているコードをどうやって継続して進化させられるかといった内容が主で、どんなソフトウェアエンジニアにも勧められそう。

この本の章の構成をみると、大きくはリファクタリングに関する章と、プロジェクトのワークフローと基盤整理に関する章に分けられる。

リファクタリングに関する章では、プロジェクトのコードの状態が悪くなった時に対処する作戦として、リファクタリング/リアークテクティング/ビッグリライトの3つを紹介しながら、何を基準にどの作戦を採用すればよいかを教えてくれる。

リアーキテクティングのゴールの一つとして、マイクロサービスのような流行のアーキテクチャについても言及があるが、実際的なメリットとデメリットがまとめられていて(デメリットのほうがリストが長い)、技術的なおしゃれさに引きずられない、バランスの良い解説が読める。

技術的なテクニックだけでなく、リファクタリングを"開発者のための開発"のみに陥らせずに、プロジェクトの成功に結びついた活動にするためのポイントも、逐一丁寧に言及されているのも落ち着きがある。例えば、リファクタリング自体を目的にせずに、機能Xを実現するために必要なタスクとしてリファクタリングをとらえることで、チームにも説明可能になるし、リファクタリングのスコープをまちがえずに済むといったことが紹介されている。しかたないので、自分のメインの仕事のじゃまにならない範囲で手をつけてみるみたいな作戦も載っていて生々しい。

"もし価値のないソフトウェアを作ってしまったら、コードがどうだろうと誰も気にしない" のようなフレーズがちょいちょい現れて心に刺さる。

プロジェクトのワークフローと基盤整理に関する章については、手元の開発環境やテスト環境、プロダクション環境構築の自動化についてかなり具体的な手順が載っているので、これからやりたいけどイメージがついていない人には良さそうな内容だった。

最近の本だからか、銀行の決済システムとかではなく、Web開発者になじみのありそうなECのWebサイトが例として取り上げられていたり、登場する技術セット比較的なじみのあるものだったりで、読みやすかった。作者の開発のスタイルや、置かれているチームの状況が自分と結構似ているというのもあったかもしれない(お前は俺かみたいなエピソードが何個もあった)。

まったく新しい内容はそんなにはないけれども、継続開発可能なコードベースや開発体制を目指しているときに、漠然と気をつけていることがコンパクトにまとまっていて良い本だと思う。第一章のはじめのあたりの文章が結構ささるので気になる人は立ち読みしてみても良さそう。