The paradigm shift

saboyutaka’s diary なんかかく(ブログn回目)

ISUCON出場に向けてコーチ?的なことやります

f:id:saboyutaka:20170414094425p:plain

最近

仲の良い沖縄の大学生の樹理と 将義にWebエンジニアリングを教えこんでISUCON本戦に出場させるプロジェクトをはじめた🏃

きっかけ

2人がエンジニアになりたいけど、就活どうやればいいかわからないという感じだったのでおそらく東京でエンジニアになる最短経路としてISUCON本戦出場すれば超凄腕エンジニアが集まる場所にいけて、その実績が就活になるんじゃないかなーというのがきっかけ😎

ISUCON

isucon.net

ISUCON、たぶん今年も秋に開催されるはず。社会人枠は超ハイパーエンジニアばかりが集って恐れ多いんだけど、学生枠はまだそこまで難しくなさそうなのでかけだしエンジニアの2人を半年間ISUCONに必要な技術に特化して教えて対策すれば予選突破は行けそうだとふんでる。

あとは二人の頑張り次第。

自分のためにもかなりなりそう

教えると言っても自分もわかってないところたくさんある(特にISUCONに重要なnginxとかミドルウェアの設定周り)ので教えながら自分が学べるというおれ得なやつでもある😇

あと自分も仲間見つけて挑戦できるといいなぁ、社会人枠で突破するのめちゃくちゃ難しそうだけどやらないよりは良さそうなので..

2人やISUCON出場興味ある方は連絡ください🤘

2人のブログ

matsuda-juri.hatenablog.com

masa-world.hateblo.jp

Macリストア日記 2017/04

半年ぶりにMacクリーンインストールしてリストアした。せっかくのいいタイミングなので振り返りしてみようかなと思ってメモ書き程度のリストア日記。

前回のリストア

2016年9月24日 Sierra を導入するために

前回のリストアから今回までやったこと

Ruby

  • お仕事でRuby on Railsでのプロジェクト4つに携わった
  • 沖縄市主催で行われたプログラミング講座第2期(10~12月)の講師の一人として参加してRuby on Rails を題材に教えた
    • Newbieな方たちに2ヶ月間教えたけど初っ端からRailsは重すぎた印象… 仕上がった作品はとても素晴らしかった、けどWebの基礎よりもフレームワークドメイン知識が必要すぎてSinatraくらいからスタートが良かった気がする
  • PyCall試した

ふりかえり

去年は子供が生まれて1年目だったのもあって9月にあったRubykaigiに行けず、10月~3月は講座で講師をやってたのでOkinawa.rbにもほとんど参加できなかったのでRubyとの時間が少なかった。 加えてOSSにも何も貢献してない。もうちょっとRubyがんばりたい。

Python

  • Machine Learning Koza に参加した
  • Pydata Okinawa
    • #18, #19, #20, #21, #22, #23に参加
    • 途中参加ながらオーガナイザーの1人に
  • プログラミング講座第3期、3期はPythonを教える。2期の反省もあり薄いWAFということでBottleを使って講義を行った。Webの基礎に近いところを重点的に教えれたので良かった。参加者の中に教えた範囲を超えてめっちゃコード書いてシステムを作ってる方が居てすごいびっくりしたのととても嬉しかった。
  • 競馬予測をRでやっている方がいたので、その情報を基にPythonで書き直したりしてみた。学習はできたけど、未来予測する仕組みが作れてないので時間を見つけて続きやりたい。

ふりかえり

機械学習をキャッチアップするためにようやくPythonを使い始めた。普段Ruby書いてるとPython書くときにほとんど迷うことなくコードかけるので言語のスイッチングコストはとても低く感じてすぐ使えた。 あとJupyter notebookあるPythonずるい。学習にも便利だし機械学習で試行錯誤するのにも良くて、学びやすい環境がある言語っていいなと感じた。 機械学習は半年間だいぶ情報を浴びることでようやく自分の脳の機械学習に対する情報分類器が出来上がってきて情報ややりたい事を取捨選択できるようになった感じ。なんかやりたい事があったら試してみるくらいのスタートラインには立てた気がする。 Python機械学習のために使うツールという感じで言語への関心はあまり湧いてこないのが不思議。

Go

  • 受託させて頂いた会社の1つで「Go書いてみない?」と言われたので挑戦してみた。機会を与えてもらえて本当に感謝。

ふりかえり

1ヶ月間書いてみて、最初はめちゃくちゃ躓いてコードかけるどころではなかったけど2週間くらいして慣れてくるとGoの面白さにハマってた。 普段Rubyで使う考え方とまた違って楽しい。言語の特性を利用して適材適所で使えていけそうな感じが良い。 今後Goを自分のツールの一つとして使えるように学んでいきたい。

Microsft周辺のやつ

  • C#, Xamarin
    • チュートリアルやってみた。けどそもそもネイティブわかってないとXamarinどころではないのがわかった。それだけでも収穫。C#Javaぽくて昔を少し思い出して楽しかった。JavaC#、普段使いはちょっとどうかなという気持ちだけど言語としてはやはり良いなという気持ち。
  • Azure
    • Azure machine learning studio
      • イベントで紹介されてたので試しに使ってみた。GUIでポチポチすると機械学習できるの面白い
    • Azure VM
      • 機械学習やWeb AppのサーバーとしてVM立ててみたり。UIなかなか良い。

振り返り

Xamarin、どうですかね、来ますかね。個人的にはReactNative(JS)かなぁという気持ち。 AzureはUI良くて使いやすそう、ただAWSでいいかなぁとか。でも最近のMicrosoftはカッコイイ感じなので、どんどんいいものを作ってってほしいし、使ってみたい気もする。

新しく使ったツール

  • ⌘英かな
    • SierraでのKarabinerの代替。こちらの方が後者より薄い感じなので気に入ってる。
  • 1Password
    • Dashlaneからの乗り換え。なんでいままで劣化1PassのDashlane使ってたんや…というくらい1Passwordべんり
  • Visual Studio Code
    • 講座でWin, Mac環境の方が混在する中で使ってみたらだいぶ良かった。あまりPCに慣れてない人がVScodeの上でTerminal, Git, Editorが使えるのは良かった。Powershellがちょっと不安定なのでもうちょい。Atomに比べて。あと少しして完成度高くなったらAtomから乗り換えワンチャンある。
  • Airmail 3
  • Dropbox paper
    • Markdownで共有メモ残したいときにpaper便利。ただなんでDropboxのフォルダにリンクとかできないんや。Google Driveでリンクできるのはキモいと感じるけど、Dropbox paperはそれできてほしい。Web UIの問題かな、リンクがほしいのは。メモは大量に残したいので管理し易い形にしてほしい。Webでリンクたどるとステップが多いのでステップ減らしたい。

使わなくなったツール

  • Dashlane
    • 1Password一択で
  • Evernote
    • かつてめちゃくちゃ好きだったサービス。数年たってなにも進化せず、他のツールの環境が整ってきたのでサヨナラした。悲しいけど、栄枯盛衰。

Brewfile

https://gist.github.com/saboyutaka/89d7a3631f4a5134b27b4981f4ffe5c0/revisions#diff-c7214f6b3e175bb89ac4600efdf6c64a

全体の振り返り

仕事と子育てと講師とギークハウスで結構忙しい半年だったけど、その中でも新しい言語に2つと機械学習に挑戦できたのは良かったかなと。その分Rubyへのコミット、OSSへの関心、勉強会などの参加は減ってしまった。特に半年間沖縄から出てない。 次の半年間は沖縄から出てイベントに参加したい。機械学習とGoの学習は続ける。Rubyは何かOSSにコミット・PR投げたい。

最後に

いつまでEl Capitanに居座ってるんですか! Sierra, production ready ですよ!(クリーンインストールしましょ委員会)

#半年に一回はクリーンインストール

Ruby + PyCallで機械学習をやってみた at Pydata Okinawa #23

機械学習といえばPythonがいますごい盛り上がりを見せていますが、Rubyでも最近 @mrknさんがPyCallというgemを作っていて、2月23日に行われたRuby Business Users Conference 2017で発表されたみたいです。

sssslide.com

ということで

Ruby + PyCallで機械学習をやってみる

以前、Python 3.5, scikit-learn, pandasでKaggleのTitanicを使って機械学習チュートリアルを行ったのでここのコードをRuby化してみる。

saboyutaka.hatenablog.com

基となるPythonのコード

  • Kaggleのデータ(train.csv, test.csv)をローカルのdataディレクトリに配置
  • pandasでデータを加工
  • scikit-learn RandomForestでmodelを作成
  • 学習
  • 評価

をやってます

gist.github.com

これをRuby化する

gist.github.com

比較してもらうと分かるんですが、ほとんどPythonのコードに近い状態でかけます。

違うところ

  • pyfrom, pyimport でPythonのlibraryをimportする
  • PythonのClassのmethodを呼ぶときには.methodで呼び出す
    • lambdaで実行してる?
  • PythonのDictionaryを使うためにPyCall::Dictを使用している
  • methodへの引数はRubyの書き方に置き換える

ぐらいでした。

やってみて

  • Rubyから簡単にPython呼び出せるの便利!!numpyとか普通に使えてすごい
  • オブジェクトがPyCall::Objectにラップされるのでmethodとか調べるのはむずかしい?

用途としてはPython, Jupyter Notebookでごにょごにょしてモデルを作成して、成果物としてのmodelをscikit-learnのシリアライズで永続化、それをRuby, PyCallから呼び出して実行すると言う感じでしょうか。Railsのコードなんかからmodelへの呼び出しなんかはすごい簡単にできそうです。evalでもできそうだけど失敗したときとか困るし、PyCallに置き換えると良さそう。

まだPyCallの開発は始まったばかりのようなのでこれからどんどん良くなっていきそうですが、すでに今の段階でも十分良さが伝わってくるので期待したいです!何か開発手伝えることがあればやりたいですねー :)

Pydata Okinawa

今回はPydata Okinawa #23 のLT大会ということでPyCallについて 発表してきました。

pydataokinawa.connpass.com

機械学習に興味がある方で沖縄に居る方/来れる方はぜひお越しくださいー :)