ようやくプロダクションコード書いたエンジニア3年目を振り返っていく🐘
2年目まではなんだったのか...!!!
2016年までのまとめ
文系新卒からのド大手SIerに就職したら、配属は分析ツールの導入案件だった!
人には恵まれたけどプログラミングしたかった新卒1年目~2年目。
残業も多くて勉強時間があんまり取れなかった...。
そして2年目夏、念願叶ってフルスクラッチの開発案件に配属される...しかし大量のExcel設計書と手動UTが待っていたのだ! 3年目はそんな開発案件の単体テストフェーズから始まります。
そして2017年...
プログラミングしてない焦り+キャリアを重ねる同期SE/コンサルへの劣等感に悩まされた1月。
何かやらねばと思ってチャットボット作ったりしてみた。が、特に解消はされなかった。
github.com
今思うとこの時期に必要だったのはモノを作ることじゃなくてひたすらプログラミングの練習だった気もするな...。
引越しでドタバタした2月が過ぎ、3月にクーリエジャポンハッカソンに参加。結果まさかの優勝。なぜならチーム組んだ坂本さんがアプリ全部作ったから。
ここで思う。アプリもやらねばハッカソンに勝てない...!!!
一旦置いて、4月はポプテピピックの通知bot作ったりしてた。あとSpace Apps Challengeに出てIBM社員なのにIBM賞をもらったりした。
github.com
5月、現場が落ち着いて定時で上がれるようになり、プライベートでReact-Native ※1 に着手する。
※1...JavaScriptでiOS/Androidアプリが作成できるフレームワーク。つまり普通のWebページ作れる人ならアプリが作れるようになる。
というのもSPAJAM予選参加することになっちゃったからである。スマホアプリ開発経験者のいないメンバーでよく申し込んだわ...。
これでちょっと自信をつけ、6月にReact-Nativeで自作アプリに挑戦する。7月頃できたのがこれ。 appetize.io シビックテック的なのに憧れて地元感のあるアプリを作ってみた。でも三鷹市に許可取らなきゃな〜とか面倒でリリースはしてないぞ。
8月、Unityで遊びはじめる。
hiroga.hatenablog.com
福島Game Jamとかショッカソンとか参加してみた。ショッカソンでは自分のUnityアプリが足を引っ張ったのが悔やまれる...。
秋ごろから現場での案件が変わり、サンプルのWebアプリをいちから作りはじめる。
ここで簡単なテストコードさえググらなければ書けないことに気がつく...。半年くらいモノつくりに励んできたけど、エンジニアとしての実力っていうか、プログラミングを道具として使うためのスキルが全然伸びてなくて辛さを感じる。
いちからのWebアプリ作成は勉強することがめっちゃあり、9月と10月はプライベートで調べて現場で書いての往復だった。そんなわけでブログ記事も調べ物が多い。楽しい!
11月にはJJUG CCC ※2 に参加した。これがめっちゃ良かった!それまで現場で使うものだったJavaが好きになった。
※2 Javaユーザーの勉強会。
今後もずっとJavaを使うかは分からないけど、使っている言語のカンファレンスは絶対参加したいな〜。
そして12月。お勉強的にはPythonで機械学習の復習をしつつ、練習てきなプログラミングをちょくちょくしている。現場でちょっとしたコード書いたりとか、競プロとか。
Pythonも機械学習もいいけど、ちょっとしたコードをささっと書けるようになりたいな〜。
振り返って
現場でプログラミングをするようになったこと、ちょっとしたことでもコード書く癖がつくようになったのが一番嬉しい!
モノつくりも楽しいけど、ググって必死に作るんじゃなくて、普段のちょっとしたコードの延長線上でモノつくりができるようになりたいな〜と思います。
来年はちょっとしたプログラミングでできることを広げつつ、現場ではもっとお客さん目線でシステム作る経験を積みたいな〜と思いました。おしまい。
2017年に買って人生が良くなったものベスト5
一人暮らし→実家暮らしに逆戻りし、プロジェクトも安定で生活にゆとりができた2017年。
とはいえむやみに買い物したわけではなく、最低限買ったものの中でよかったものをランキング。
5位
ボンタンアメ
信者なので職場のお菓子バッグに常に2箱入れてる(片方は予備)
何気なくお菓子をあげる時、微妙な話題作りに役立ったりして良い。
4位
REYLEO バックパック
通勤用リュック。ビジネスすぎないのが良い。
3位
TaoTronics Bluetoothヘッドホン
それまでiPhone標準のイヤホンを使ってたけど、やっぱBluetoothはいい!イヤホンの紐がそこらに引っかからないように気をつけるのがストレスになってたことに気がついた。
2位
エレコム ワイヤレスマウス
夏にUnityで遊び始めて、3D空間を操作するのにマウスなしでやってられなくなった。
いざ使うと普段のウェブサーフィンやらなんやらにも便利で手放せない!
1位
UNIQLO カシミアクルーネックセーター 長袖 紫
www.uniqlo.com
ほとんどこれを書きたいがために今回のエントリ書いた。この色で廉価なのが店で見つからなくて買ったけど、カシミアめっちゃいい。
10000円近くしたけど一冬ずっと着てるので元は取ったはず!
おしまい。
Javaのマルチスレッド処理を比較!ExecutorServiceとForkJoinPoolで計測した
今度のJJUG ナイトセミナーで人生初LTするのでその準備をしている〜!
現場でマルチスレッド処理を書いたので、その時のフレームワーク選定の話にしようかと。
概要
Javaでマルチスレッド処理をするためには何通りがやり方があるんだけど、自分の仮説ではこう使い分ける!
- トランザクションとか複数裏で走らせたい → ExecutorServiceにRunnableやCallableインスタンスを渡す。
- 再帰的に処理したい → ForkJoinPoolにRecursiveTaskを渡す。
スタックオーバーフローも見た。
stackoverflow.com
でもこれって本当なの?ということで計測した。そしたら新たな疑問が出てきた(後述)
計測
マルチスレッドが必要なので、AWS上にcloud9でvCPU=4の実行環境を用意。
ローカル機だと他にも起動しているアプリが多すぎて計測に向かないかなーと思ったので...
関係ないけどcloud9のjavaのバージョン7だったんですがそれは
計測する処理は次の二つ!
1. フィボナッチ数列の任意の項を求める!nが2よりも大きかったらn-1とn-2の合計として求めることで、再帰的にする。
2. 任意の文字数のファイルを作ってみる!
結果がこちら。めっちゃ適当だって?すまんね。
でもこの計測結果も今ひとつ信じられない。なぜなら...
- 今回はSystem.nanoTime()で測ったけど、ファイル作成はなぜか計測後もなかなかJavaプロセスが終わらなかった→ロジック変だった?
- ファイル作成の速度が文字数に全然依存していないようにみえる?
結論
再帰的な処理についてはForkJoinPoolに対してRecursiveTaskでよくて、それ以外の処理はどっちでも変わらない...?
そんなわけあるのかしら。どっちでも変わらないならExecutorServiceをそのまま使った方がいいのかな?
ともあれおしまい。LTが楽しみ!
ビットコインノードをMacbookで立てた
ビットコインについて人に説明する機会ができたので、せっかくなので手元でノードを立ててみた。
インストール
githubのビットコインのソースコードにosx向けのドキュメントがあるので、それに従えばOK!
なのだけど、僕の場合は autogen.sh コマンドで引っかかってしまった。パスを書き換えてpkgコマンドが成功するようにしたら上手くいったよ!
$ git clone https://github.com/bitcoin/bitcoin $ cd bitcoin $ ./autogen.sh $ ./configure configure: error: PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh. # autotoolで参照しているツールのパスが期待と異っている結果のエラーらしい。 $ find /usr -name "pkg.m4" /usr/local/share/aclocal/pkg.m4 $ ACLOCAL_PATH = /usr/local/share/aclocal/pkg.m4 $ ./autogen.sh $ ./configure $ make
このmakeが1時間近くかかった気がする。
動かす
普通に動かすと取引履歴をダウンロードしてめっちゃ重いらしい(100GBくらいあるトランザクションを数時間かけて落とすのだとか)ので
物理的にネットを切断してダウンロードを阻止します笑
$ bitcoind -testnet # このオプションでテスト環境につながる。
いや確かに動くけど...何がしたかったんだっけ...?
参考
Bitcoinプログラミングの入り口 – blockchain
macos - pkg-config: PKG_PROG_PKG_CONFIG: command not found - Stack Overflow
CourseraのMachine LearningをPythonでやり直す#2
復習した内容+それをどうやってハンド&skleanで実装したかのまとめ
実装したファイル
github.com
参考資料
qiita.com
ロジスティック回帰
目的変数Yを説明変数Xで説明する回帰分析の手法を分類でも使うための手法。
目的変数Yを 0 ≦ Y ≦ 1 の範囲に収めるため、シグモイド関数を用いて計算結果を変換する。
# シグモイド関数 import math def sigmoid(z): return 1/(1+math.e**(-z))
正則化
説明変数をX2, X3...と増やすことで、100%に近い予測ができるがオーバーフィッティングしてしまう。
オーバーフィットとは説明変数が余分な影響力を持ってしまうことだから、θの値が大きくなりすぎないように工夫すればよい。
そのためには、目的関数でコストを算出する際に、θの2乗を足してしまう。
実装
scikit-learnだとものすごくお手軽。
生Pythonに興味ある方はGithub見てください。(正則化サボったけど)
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn import linear_model # import datasets df = pd.read_csv("ex2data1.txt", sep=",", header=None) # 説明変数が0,1列目、目的変数が2列目にあるcsvファイル X = df.values[:,:2] Y = df.values[:,2:] logreg = linear_model.LogisticRegression(C=1) logreg.fit(X,Y) # 本来なら目的関数の定義と最急降下法のための準備が必要 # fitメソッドを呼ぶだけで良い。 # 予測モデルを用いて散布図の背景に色を塗る。 # メッシュを作成して各点ごとに予測を適用すればよい。 x_min, x_max = X[:,0].min(), X[:,0].max() y_min, y_max = X[:,1].min(), X[:,1].max() xx, yy = np.meshgrid(np.arange(x_min,x_max,.02), np.arange(y_min, y_max, .02)) Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.figure(1, figsize=(4,3)) plt.pcolormesh(xx,yy,Z,cmap=plt.cm.Paired) # カラーメッシュ=要するにモザイク画みたいなもの plt.scatter(X[:,0], X[:,1], c=Y.ravel(), edgecolors='k', cmap=plt.cm.Paired) plt.show()
今回はおしまい!次回はいよいよ多クラス分類とニューラルネットワーク!
Tech Deep Dive#0でデータグリッドについてお勉強してきた #oratdd
Oracleさんが主催のTech Deep Diveに参加した。次回は未定とのことで、まずは第0回らしい。
connpass.com
ざっくり内容
Oracle技術者のいとうちひろさんが主にクラウド上のアプリケーションで低遅延なアーキテクチャについてプレゼンしてくれた。
大変わかりやすく、結論としては「データへのアクセスをいかに高速化するか。アプリ上の制約(データ整合性の担保・行ロックとか)があるならデータグリッドをどうぞ。なければ単にKVSでもOK」って感じだったと思う。
実測値がたくさん入ったプレゼンで、アプリケーションエンジニアの僕でも理解しやすかった!
Twitter実況も賑わっており、いろんな人に質問に答えてもらってありがたかった。 twitter.com
データグリッドとは
インメモリーの分散KVSかつ式を受け取って実行することもできるものを指すよう。
これはOracle Coherenceではないけど、データグリッドの内部のことが書いてある!
要するにJavaのでっかいプロセスがマップを保持しつつラムダ式を受け取るのを待ち構えてると思えばいいのかな。
Oracle Coherence以外にもOSSを含めていろんな選択肢があるみたいで、まとめてくださってるスライドもあった!(上と同じエンジニアの方のスライド)
スライドによるとこの辺が競合製品らしい。
- Apache GEODO(ジオード)
- Apache Ignite(イグナイト)
- Oracle Coherence(コヒーレンス)
- hazelcast(ヘーゼルキャスト)
- Infinispan(インフィニスパン)
でもG2 CROWD(ソフトウェア比較サービス)の評価はOracle Coherenceが一番高いね!(というか他のレビュー件数が少ない)
データグリッドのカテゴリがなくて単にKVSで括られているのを見ると、盛んになるのはこれからのジャンルなのかな?
ともあれ勉強になった!ありがとうございました!
FESTA 2017 by Mashup Awards 参加レポート! #MA_2017
12/16(土)にFESTA 2017に参加したよ!今回は設営/Twitterのボランティア🕊 mashupawards.connpass.com
きっかけ
運営のまなみんさん・伴野さんにTwitter実況ボランティア入りませんか?って誘ってもらったのがきっかけ!
それまでFESTAのことは何となくしか知らなかったけど、Twitter実況楽しそう〜と思って参加することに。
イベントの様子
会場設営中… #FESTA_2017 pic.twitter.com/WjlXS45uTk
— さわら@SE (@hiroga_cc) 2017年12月15日
【FESTA】#MA_2017
— MashupAwards@2018はじまってるよ (@mashupaward) 2017年12月16日
Keynote1:塚田 浩二氏(イグ・ノーベル受賞者 はこだて未来大学 准教授)
「生みだす事のこだわり(仮)」
【FESTA】#MA_2017
— MashupAwards@2018はじまってるよ (@mashupaward) 2017年12月16日
Keynote2: 武地 実(GATEBOX CEO)
MA9に出場し優秀賞を獲得。
週末に好きなものを作ってクラウドファウンディングに出すことをして、反響を受けたプロダクトについて事業化して企業。
おうちハック同好会は「史上初!?スマートスピーカーとのトークショー 〜2017年のおうちハックを振り返る〜」をやります。Google Homeとの対話形式でプレゼンします! #MA_2017
— 湯村 翼 (@yumu19) 2017年12月16日
PRO決勝は空飛ぶ箒がめっちゃかっこよかった
【PRO決勝】#MA_2017
— MashupAwards@2018はじまってるよ (@mashupaward) 2017年12月16日
①作品:魔法の世界を"実装"する ext-broom
攻めの姿勢で魔法を実装しようと考えました、ハリーポッターのクニッチを実装しようと思いました。
ただ、空飛ぶほうきで空をとぶのは高所恐怖症でこわい・・・
一般決勝で一番記憶に残ったのは個人的にはこれ
【決勝】#MA_2017
— MashupAwards@2018はじまってるよ (@mashupaward) 2017年12月16日
③作品:Water Melon Sound/ チーム:風邪はスイカ食べれば治る
スイカが成熟しているかしていないかを判定しますhttps://t.co/isEAvhMCAf
プレゼンで発電はじめて爆笑した!
— 湯村 翼 (@yumu19) 2017年12月16日
プレゼン眉毛描いた人、プロダクトも普通にすごかった
【決勝】#MA_2017
— MashupAwards@2018はじまってるよ (@mashupaward) 2017年12月16日
⑩作品:Eyebrojector
化粧をしない人にはわからないかもしれませんが、まゆげってとっても大事!
8割以上の女性が一番印象を飼えられるパーツはまゆげであると思っているにもかかわらずセルフケアでトラブルの経験が・・・
総評
#MA_2017 審査員の言葉。
— たつや (@tatsuya1970) 2017年12月16日
アイデア簡単、作るの難しい。それよりも作り続けることが一番難しい。
グローブはそれ。
【FESTA】#MA_2017
— MashupAwards@2018はじまってるよ (@mashupaward) 2017年12月16日
麻生さん
ここ数年の中で一番カオスな審査だったと思います。「今日で終わりじゃなさそう、これからも応援したい」という観点と、「賞金を開発費に使ってくれそう」という観点で選出しました!が、治療費に・・・?!
来年はまなみんさんがリーダー予定の一般社団法人がMAの運営主体になるそうです
【FESTA】#MA_2017
— MashupAwards@2018はじまってるよ (@mashupaward) 2017年12月16日
MA2018以降は、一般社団法人が立ち上がり、そちらを運営主体として運営委員会を構成しながら、運営する形となると思われます。
運営理事となる予定のまなみんに、ご挨拶の締めを行っていただきます
そして審査員さんのブログ
デザイナー参加しようよ!とMA7出て最優秀賞になった時からずっとセミナーや勉強会で言ってる。でもなかなか増えない。だから松川さんが事務局になったときに嬉しかった。#MA_2017
— やまも (@kotobuki555ing) 2017年12月17日
Mashup Awards 2017の審査を終えて|kugehajime|https://t.co/a3eNfHTUQH
参加して
機械学習とハードウェアのプロトタイピングが普通になってきてる流れは開発現場にも来ると思った。
大手ベンダーは機械学習をサービスとして提供することに勤しんでるけど、(まさにWatsonとか)
それより先に自社のエンジニアに機械学習ライブラリの使い方と統計の基礎を学び直させた方がいいんじゃないかな。
ハードウェア製作をSIerみたいな業態でやってる会社さんには明るくないけど、大手ベンダーがそういう会社を取得してもおかしくない流れだと思う。
個人的にもなんか挑戦したいな〜。また一人暮らし始める予定だから、おうちハックを皮切りにハードウェア作ってみよう。
Twitter実況では反省することが多い...座ってツイートするより、(それはもう一人の方が自分より上手だったので)
もっといい写真を体を動かして撮りに行かねばならなかった。
あとは仕組み的なところで、公式アカウントが複数人ログインに厳しかったのも辛かったな...。
複数人が公式アカウントにログインするより、MA公式ツイッタラーを定めてその人がツイート→公式垢はメイン実況+公式ツイッタラーをRT,という構成がいいかもしれないと思う。作品実況なんかは公式ツイッタラーであることがわかる腕章とかあるとやりやすかった...?
ともあれ最高に楽しかったので来年もなんらかの形(願わくば出場者)で参加したい!おしまい。