シナリオライターY平の「とに書く描く足掻く!」

↓オモコロでライターやってます↓
 オモコロの記事一覧
↓【人気】3泊4日で180キロマラソンした話です。1日3000アクセス記録した人気記事↓
 「愛知県名古屋市 ~ 岐阜県白川郷バカマラソン」
↓小説の一覧は下記です↓
 ブログ投稿小説
 ノベラボ投稿小説一覧

Web APIサーバーをpython+falconで構築する

 Web APIが熱いらしい。Web APIとはhttp://hoge/dataみたいなURLにhttpのGETメソッドをやると、レスポンスでjsonデータを返してくれるようなやつ。TwitterのAPIでタイムラインを取得するようなやつはまさにこれを使っている。RESTなAPIというらしい。言葉はどうでもいい。

 んで、pythonで自分でWeb APIのサーバー立てて動作を確認したいなあと思ってやってみたら、驚くほど簡単にできたので実装メモ。Web APIを実現するにあたり、pythonのfalconというpackageを使った。どうぞpip install falconでインストールしてほしい。

 サーバー側のソースは下記。



ポイントとしては、

api.add_route('/vehicle/12345678', ItemsResource())

でデータを格納するURL(リソース)を決める。

その後、

httpd = simple_server.make_server('127.0.0.1', 8000, api)
httpd.serve_forever()

でそのリソースをhttp://127.0.0.1:8000の上で動作させてやる感じ。
こうするとhttp://127.0.0.1:8000/vehicle/12345678 にGETやらPOSTのメソッドを送ってやるといろいろ処理できる。

このサンプルではGETメソッドでサーバー上の変数itemsの値が取得できるようになっている。

def on_get(self, req, resp):
''' Handles GET requests '''
resp.body = json.dumps(self.items)

の部分でGETメソッドがされた時に、レスポンスのBodyにjsonデータを格納してクライアントに返す。

def on_put(self, req, resp):
print 'put'
body = req.stream.read()
data = json.loads(body)
print data
try :
self.items['Components']['GW'] = data['Components']['GW']
self.items['Components']['ECU1'] = data['Components']['ECU1']

の部分でPUTメソッドが来た時に、リクエストのBody(jsonが入る)を読んでそのjsonでitemsを更新してやる。

クライアント側の処理は下記。ポイントは後述する。



GETメソッドの場合は

h.request('GET', '/vehicle/12345678')

のようにやり、これのresponseをjsonで読み込むことでサーバー上のitemsと云う変数の値を取得できる。


PUTメソッドの場合は逆にサーバー上のitemsと云う変数を更新するために、同じ形式のjsonを

h.request('PUT', '/vehicle/12345678', json.dumps(data))

で第3引数にjsonデータを入れてやる。するとサーバーのon_putに通知が行き、

body = req.stream.read()

でサーバー側はjsonデータを読んで値を更新する。簡単だね。


ソースと使い方は下記に格納してあるのでご参考。

https://github.com/yheihei/python/tree/master/webapi



このエントリーをはてなブックマークに追加

7月30日 7年ぶりにあるチームに勝つ

 2−9で勝ち。

6番 ファースト
3打数 0安打 1四球 1盗塁 1打点
 捕飛
 三振
 四球
 捕飛

備考:1エラー

今シーズン成績
8打数 1安打 1打点 2盗塁 1四死球 0犠飛 打率.125 出塁率.222

 いつもリーグ戦で1位か2位にいる強豪チームに劇的勝利。先発、抑えと完璧に抑え、守備もなんと僕のエラー以外一つもなし。そして最近はいってきた人が人生初のヒットを打ち、それが決勝点になるという最高に気持ちのいい試合。しかもその強豪には少なくとも僕が入部した7年前から一度も勝っておらず、それが人数もギリ、主力メンバーもほとんど欠いた状態で勝ったのだから本当に野球は面白い。

 自分個人としてはバッティングはもうまるでダメ。打てる気がしない。2年ぐらいスランプにはまっている。だが今期初打点も記録。捕飛からのキャッチャーが飛び出していたファーストランナーに送球した間にサードランナーが隙を見てホームインするというトリックプレー。え? これ打点入るよね? まあ入らなくてもいいけど。

 守備は人生で2度目のファーストを守る。1エラーしたものの、その後守備機会満載、9つぐらいのアウトにからみかなり安定していた。サードやショートからの悪送球が3つぐらいあったがうまくさばいて取れたので以外にファースト向いてるのかもしれん。後盛大に突き指やらかして右手人差し指がどす黒く腫れている。心配。多分サウナ行けば治る。サウナで全ての悩みが解決するというヨッピーさん理論。よっしゃ、明日は銭湯のサウナで突き指を癒しつつ、休憩室でMacいじいじオモコロの仕事やる。

このエントリーをはてなブックマークに追加

ピアソン相関係数とk-means法を使って嗜好の似ている人を特定するプログラムをpythonでやりたい

 映画サイトとかでレビューってあるじゃない? あれのユーザーごとのレビューの評価データを集めて、自分と似てる人にオススメの映画紹介して欲しくない? それをpythonでやれたら素敵じゃない? という事でpythonでピアソン相関係数を用いて類似度を計算し、自分と似てる人を特定するというプログラムを作ってみた。

 やることの概要としては以下。

・レビューデータをベクトル化
・レビューデータのベクトルをk-means法でグループ分け(クラスタリング)
・誰と誰が似てるかをグループで明示

 例えば、人間とウサギにアンケートし、好きな食べ物を5段階評価でアンケートしてもらった。アンケートデータは以下。



 人間はハンバーグとか麻婆豆腐とかの好き嫌いを入れているのに対して、アイドルウサギのモキュ様などはペレットやチモシーなどの好みを入れている。人間が見れば、これがウサギだ、これが人間だと判断できるが、プログラムは判別できない。それを判断できるとかっこいい。

 まずはこのデータをベクトル化する。ベクトル化する関数は下記。



 testdataをこの関数に入れてやれば、「vectorData.csv」という形で保存される。エクセルで見ると人の名前とその人の食べ物の嗜好がテーブルになっているのがわかる。こんな感じ。小梅ちゃんがActiveEしか食べないのが心配される。



 このファイルから、以下の関数で名前のリスト(colNames)、食べ物のリスト(rowNames)、食べ物の評価値のリスト(data)を作る。



createVector()を実行した後でreadFile()を実行すれば良い。さっきのcsvファイルを元に各データがreturnされる。こんな感じ。


>>> colNames
['\xe3\x82\xa8\xe3\x83\xb3\xe3\x83\x8f\xe3\x83\xb3\xe3\x82\xb5\xe3\x83\xbc', '\xe3\x83\x9a\xe3\x83\xac\xe3\x83\x83\xe3\x83\x88', '\xe3\x83\x81\xe3\x83\xa2\xe3\x82\xb7\xe3\x83\xbc', '\xe3\x83\x93\xe3\x83\xbc\xe3\x83\xab', '\xe7\xb4\x8d\xe8\xb1\x86', 'ActiveE', '\xe9\xba\xbb\xe5\xa9\x86\xe8\xb1\x86\xe8\x85\x90', '\xe3\x83\x8f\xe3\x83\xb3\xe3\x83\x90\xe3\x83\xbc\xe3\x82\xb0']
>>>
>>>
>>> rowNames
['mocu', 'sota', 'yhei', 'chataro', 'koume', 'tanaka', 'karupati']
>>>
>>>
>>>
>>> data
[[2.0, 3.0, 2.0, 0.0, 0.0, 3.0, 0.0, 0.0], [5.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 4.0, 1.0, 0.0, 3.0, 5.0], [5.0, 4.0, 3.0, 0.0, 0.0, 5.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 5.0, 0.0, 0.0], [0.0, 0.0, 0.0, 1.0, 5.0, 0.0, 5.0, 2.0], [0.0, 0.0, 0.0, 3.0, 1.0, 0.0, 2.0, 3.0]]



例えばdata[0]にモキュ様の食べ物の評価値のリスト([2.0, 3.0, 2.0, 0.0, 0.0, 3.0, 0.0, 0.0])が入る。このdataというリストが入ったリスト(ややこしい)を

>>> kclust, clusters = pearson.kcluster(data)

上記のようにk-means法でクラスタリングする関数、kcluster()に入れるとデフォルト二つのグループに分けてくれる。k-means法を簡単に示した例は下記。k-means法の理論はここが参考になる。k個の点をランダムな位置にとって、各ベクトルがどこに近いかでグループ化する手法である。

関数は下記。kの引数を変えることで何グループに分けるか指定できる。



kclustにグループ分けされたリストが出てくる。下記の感じ。


>>> kclust
[[0, 1, 3, 4], [2, 5, 6]]


1要素がグループを示しており、数字は誰かを示すid。id0はmocuさまを示す。rowNamesを使って、名前を特定できる。


[[0, 1, 3, 4], [2, 5, 6]]
>>> [rowNames[r] for r in kclust[0]]
['mocu', 'sota', 'chataro', 'koume']
>>> [rowNames[r] for r in kclust[1]]
['yhei', 'tanaka', 'karupati']


上記の通り、モキュ様そうた君、うちの茶太郎小梅ちゃんとウサギのグループを示すkclust[0]。
yhei、tanakaさん、karupati(俺のニコニコ動画のHN)さんが人間グループを示すkclust[1]のように、嗜好アンケートからグループ分けができた。今後、ウサギか人間のどちらかにアンケートを取った時に、どちらのグループに似ているかをみることにより、その人がウサギなのか人間なのか推測することができる。データが多ければ多いほど精度は高くなる。こう言う学習して精度が良くなっていく感じが機械学習の楽しいところ。

今回使ったpythonプログラムは下記の通り。一番下にReadMe的なものを書いてるので流用する場合はご参照をば。



このエントリーをはてなブックマークに追加

教えたURLを学習して覚えた知識で喋るようになるbotを作成する

 最近機械学習が熱い。会社の仕事が谷中の谷なので好き勝手自分の特許書いたり興味のあることなりを調べているのだが、ひょんなことから後輩にもらった集合値プログラミングの本を読んでたら感動した。



 amazonのオススメの商品を推薦するアルゴリズムを基本として、分かりやすく機械学習の手法が説明されている。僕のない頭でも実際にプログラミングしてコンピュータに学習させ、推薦の〇〇を出すことができた。予想以上にのめり込み、多分情報系の学部3年生ぐらいの知識は得ることができた。ということで目下、ホームページを見せるとその内容を学習し、それに基づいた思想で喋るTwitter bot作成中である。ざっくり書くと下記のようなロジック。

1.ホームページのURLを教えるとその中身をタグを排除した状態でHTMLで取得
2.取得したHTMLをyahoo apiで単語に分ける
3.単語とその単語が登場した数を記録してベクトル化
4.あらかじめフォローしておいた不特定多数のユーザーのタイムラインの文を一定の数だけ取得
5.取得した文をyahoo apiで単語に分ける
6.twitterユーザーごとに単語とその単語が登場した数を記録してベクトル化
7. 全てのユーザーのベクトル化が終わったら、それをクラスタ分析でクラスタ化
8. 3と一番近いクラスタの中のランダムなユーザーのつぶやきをコピペして呟く

1〜3を繰り返すことで、より呟く単語が似ているユーザーの呟きを選択するようになるので、例えばエロいURLばかり見せればエロいことを言うユーザーの呟きを採用するし、右翼的なURLばかり見せればそういうつぶやきをするようになると。プチAIである。本当は喋る文も自前で生成できればいいのだけれど、それが簡単にできればもっとAI簡単にできているのできっと難しいのであろう。ということでAIの入門編としてこれを2週間で作る。

このエントリーをはてなブックマークに追加

社内ニートと職務経歴書

 完全に仕事がなく、社内ニートになりつつある。こう、一緒に仕事してた先輩が課長などに会議室に呼ばれていろいろ話しているのを見ると、「え? 先輩には仕事があるのに俺にはない?」みたいな不安感に苛まれやばいです。あいつ、仕事もらったのか。。。! みたいなせめぎ合い。まあ多分そんなことは数日のことでいずれ無茶振りが飛んでくるのでそれまでべんきょべんきょでスタンバります。

 んで、日中は特許書いてた。機械学習系の特許でベクトルでいろいろ分析するやつ。レビューはあっさり通ったがこう言う学術系の特許はきちんと書かないと誰もわからないという理由でリジェクトされる場合が多い。そのためベクトルの基礎から例を交えて説明。ちゃんとわかる資料になったつもりだが、さらに上司に承認を得るにはもう少しハードルがある。おそらくベクトルとか25年ぶりとかそういう人たちにベクトルを説明せねばならないのだ。大変である。

 帰宅後は茶太郎の世話やら家事やら。あと転職用に職務経歴書などを書いていたが、なんか英語版もかけって言われててめんどい。日本語書いた時点で集中力が切れた。明日はこれを英語化する。なんか高校の時の英作文の宿題みたいでちょっと楽しいよね。英語好きなんだわ俺。

このエントリーをはてなブックマークに追加

コーディングテストに備える

 転職にいい案件があったので気になっているって前言ったと思うけど、コーディングテストがあるので不安視していた。コーディングテストって何やんのってエージェントに聞いたところ、C++の基礎的なところと伺っておりますとの回答。それは果たしてポインタが使えればいいのか、クラスが作れればいいのか、はたまたQtでUI出せればいいのか、野良ライブラリをググって使いこなせればいいのか。全然レベル感が違う。果たして地味に一番難しいのはポインタの扱いで、そんじょそこらのライブラリをなんとなく使ってはいるが、ポインタとか正直わからないっていう人結構いると思う。俺もその類だ。文句あるか。

 コーディングテストというのがどのレベルか判然としないため、一番苦手な基礎的なところを復習することに。ひとまずポインタといえばリスト構造でしょう。ということでリスト構造をC++で作り、挿入、参照、削除をする機能を実装する。が削除がうまく行かない。うんうん唸って、家に帰って笑ってこらえて見ながらひたすらコードとにらめっこしてああでもないこうでもない。めちゃめちゃ試行錯誤してひとまずできた。なんか関数の再帰呼び出しとかしてるけど。全然単純じゃないけど。これをコーディングテストで出したら失格かな? 簡単なことを複雑にしか書けない。これが俺のレベル。ひとまずポインタ云々はいろいろ復習できたのでエージェントに面談お願いって回答しよ。リスト構造をスクラッチで書く必要ないもの。ライブラリ使うわ。ようはメモリの確保や解放のタイミングがわかって、ライブラリがググって使いこなせればいいんだよハゲが。

このエントリーをはてなブックマークに追加

計画休養の使い方

 6月は働き過ぎた。常にできないプレッシャーに追われていたし、ずっとコーディングコーディングで疲れた。さぞかし残業時間もえらいことになってると思って確認してみたら14時間とか。14時間。あんなに疲れていたのに14時間。過去に月100時間やったことあるけどなんで平気だったのか。というか100時間も何やってたのか。

 というわけで残業時間は大したことなかったが非常に疲れたような気がしていたので今日は特に何もないけれども有給とった。何もなくても有給取れるのがウチの会社の数少ない良いところ。まあいつも会社をディスってはいるが、客観的に見れば、残業代は出る。ボーナスは出る。有給は好きにとって良い。これでいつも何を文句言っているのだろうか。おそらくいくら待遇良くしてもやってることに誇りを持てないと人は文句を言うのだろう。また文句を言った。バチあたり。

 9時ぐらいまで寝坊かまして予約していた歯医者へ。ずっと右下の歯が染みて痛かったので見てもらったところ詰め物が取れて染みていたということ。速攻で治して終わり。虫歯もなかった。次回は歯石とりするらしい。歯石とりするためだけにもう一回行くのもなんとなくアレです。

 帰りがけにスーパーに寄り晩飯の食材あさりなど。午後は夜まで銭湯でゆっくりしたかったので先に晩飯をつくっとく算段。どんな不器用でも美味しくできるシチューをチョイス。もう料理に謎のスパイスを入れたり、妙なオイルでかくし味をつけたり。無駄に高級な食材を使ったり。そういうの男の人ってすぐやるけどそういう段階ではなくなった。なのでジャガイモ、ニンジン、玉ねぎ、ベーコンとシンプルに買い込みドカンと帰宅。エロゲーのサントラをかけながらシチューを作り時刻は2時。これで晩飯を気にせず存分にゆっくりできる。

 もう一度外。修理したクロスバイクで中央区の警察署へ。免許の住所変更を1年以上してなかったので手続き。あー、住所変更しなきゃなー、やばいなー、ってずっと悩んでたんだけれどやってみたら一瞬で終わった。思い悩んでいたのが馬鹿らしい。いや、平日にいちいち警察署行くなんてねえ。面倒じゃない? ねえ。

 そのまま家にとんぼ返り、と思いきや家を通り過ぎて近所の銭湯へ。サウナ水風呂サウナ水風呂のコンボを繰り返しつつ、サウナのテレビで日ハム戦を見る。大谷キュンかっこいい。メンドーサは見ててハラハラする。好プレーが出るたびにサウナのオヤジたちとともに「アーーー!」とか「よっしゃーー!」みたいな歓声をあげながら楽しく観戦。幸せってこういうことかもなー、と炭酸銭に入りながらジンワリと。思う。

このエントリーをはてなブックマークに追加

詐欺の手法を会社で考える

 仕事。晴れて社内ニートになったので自分のやりたいことがやれた。セキュリティグループと言いつつ、受託作業で全くセキュリティ的なことをやれていなかったのでようやくセキュリティグループらしくなれる。部内向けの勉強会資料などを見つつ基礎的なことを勉強する。ハッシュ、MAC、共通鍵暗号方式や、公開鍵暗号方式、ディジタル署名にハイブリット暗号方式、認証局。もろセキュリティスペシャリストでやったやつじゃん。これ本当に使われてるんだと思うとちょっと感動する。

 いろいろ勉強しつつ合間に知識を定着させるために過去問を解いたり。面白い。ただの勉強。こんなんやってて給料もらうのボロい。まあ今は谷に入ってるだけでこれを使っていろいろ無理難題をふっかけられるのだろう。その時のために万全の理論武装をしておこう。

 んで、順調にセキュリティの勉強こなしてたら早くも資料を読み終わったので暇になった。暇ついでにセキュリティの勉強ということでネットを使った詐欺の手法を考えてみる。以前後輩が、ubuntuを使って他人のメールアドレスでメールを送るというようなことをやっていたのを思い出し、俺も試みてみる。ubuntuでpostfixを使うとやれそうな感じ。とりあえず自分のgmailに架空のアドレスからメールを送ることができた。これを例えば僕のメールアドレスで偽装して、妻に「通帳の暗証番号忘れちゃった。番号教えて」などと偽装メールを送ることができれば立派なソーシャルエンジニアリングの完成である。ただそんなことをやったらIP取られた場合に足がつくので、海外のプロキシサーバーを通したりしてみたいなことを考えてたらめっちゃ楽しかったので、俺、やっぱこの仕事向いてるんだと思います。手法まとめてブログに書きたいと思います。

このエントリーをはてなブックマークに追加

2016/7/3 ライブ Merry 「-15- Sheep」

 妻と一緒にインディーズのビジュアル系バンド「Merry」のライブに行ってきた。妻が学生時代からのファンで、家でずっと聴いてるうちにファンではなかった俺も染まってきた形。ファンレベルとしてはにわかだが札幌に来ることが滅多にないバンドなので行ってきた。

 インディーズらしく200人ぐらいしか入らない小さめの場所でライブ。なんかそれっぽいバンギャとかいっぱいいたがMerryは15周年ということで年齢層も結構高めなので落ち着いたバンギャだった。入り口でワンドリンクのジントニックを受け取り飲み飲み開演を待つ。

 ライブ。Nonsense Marketとか「東京」、千代田線デモクラシー、さよなら雨、カーニバル、平日の女とか分かる曲は幾つかあった。どれも家事やってる時にかけまくってた曲なのでライブ中なのに皿洗いを連想してあれだった。あと最初の方ヘドバンしまくるバンギャに面食らい棒立ちしてたら、ガラに指さされて「もり上がれやー!」というジェスチャーをされ、お、おうってことで手を振り回したら、ニコッと笑って「それでいい」みたいな顔をされたので惚れた。あとで妻に聞くと、小さいホールだとよくあるらしいとのこと。俺が女だったら濡れてた。あれはかっこいい。別の生き物のよう。

 ライブ後。ジム行った後のライブだったのでさすがにもう腰がバキバキになってて死んだ。すすきののラーメン空に入り妻と反省会。妻は土日2日間のライブ全部行ったぐらいの熱狂的なファンなのでとても満足そうだった。妊婦なのに。今日はおとなしかったらしいが、1日目は胎動がすごくて産まれるかと思ったとのこと。胎児からしたら「なにこれ!!! 怖い怖い!!」ってなもんだったんだろうが2日目は全然普通だったらしい。慣れたのかな。胎児にしてMerryに慣れる。ヘドバンしまくる女の子になったらやだなあ。あれ、怖いんだよなんか。宗教みたいで。

このエントリーをはてなブックマークに追加

吐く筋トレ

 金曜日は無事全ての作業を終わらせて打ち上げに行った。もう社会人だというのにゴミほど飲んで気づいたら麻布のラーメン屋に一人でいた。すすきので飲んでたはずなのに麻布に。俺んちは元町なので最寄駅でも全然ない。ひとまず塩ラーメンを食べて一息ついた後、泥酔でトチ狂った頭が今からマラソンして家に帰るんだと命令し、走った。深夜1時の麻布を、元町に向かってひたすら東へ。走った。

 家についた後の記憶はほとんどないが、その後土曜日全てを睡眠に費やしたあたりかなりのダメージを受けていたと思われる。気分も乗らず、ひたすらドラゴンボールの強襲サイヤ人のプレイ動画を見ていた。

 んで日曜日。あまりに肉体的にも精神的にもグダッていたため、ひとまずジムに行った。ジムでベンチプレスを上げること3セット。気持ち悪くなって吐いた。ストレッチマットのところで死んでいると、そこで床オナライクに背筋運動を行うマッチョあり。そのマッチョのすっは、すっは、という呼吸がめちゃめちゃにタバコ臭くてまた吐いた。さんざん。でも体を動かしたという事実だけで幾分気は晴れた。ということでこれからすすきのにMerryのライブ、妻と行ってきます。ここは、東京Nonsense Market!! ボケが!

このエントリーをはてなブックマークに追加