チラウラヤーン3号

その辺のプログラマーのチラ裏です。

2016年目標

読書

  • 実践DDD
  • Pythonのパフォーマンス本
  • Python クックブック

技術

  • セロリ
  • トルネード
  • scala
  • scalaz
  • akka

プロダクト

仕事

  • テストを充実させること
  • 仕様をまとめること
  • あるべき姿をぼんやりとでも形にしたい

生活

  • 腰痛を治す
  • ジョギング
  • コアトレ

2015年振り返り

タイムライン的に

  • 1 - 2 月: 職探し
    • 4社受けて、1社打診、そのうちの1社に入れていただく。
    • Forkwell Jobs, Wantedly, Green あたりをよく使った
    • アルバイト採用
    • ついに俺も脱 Github 童貞!
  • 3 - 4 月:
    • とにかくカオスだった
    • 無事、社員にしていただけた
    • バイトさん (YKYさん, MSRさん) たちに本当によくして頂いた
    • KIDさん, AIHRさん、SKMさんにめっちゃお世話になった
    • 業務としての Python 使用が始まって嬉しい (PHP 以外が初めて)
    • セグメント末に会社に大きな動き。社会人で初めての会社ステータス。
  • 5 - 6 月:
    • 遠距離恋愛
    • 社員旅行で沖縄。人生初めての沖縄。スキューバ最高。
    • それまでの業務感覚との違いが起きる。
    • 他のチーム内同僚さんたちに合わせて Sublime Text 3 をメインエディタに据える。軽快。
  • 7 - 8 月:
    • 同棲。部屋を借りる。暮らすのって物要り。
    • DDD 読書会。DDDにちゃんと触れるのは初めて。
    • Scala に興味持つ。DDD と相性が良いので。でも書き始めるところまでは行ってない。
  • 9 - 10 月:
    • 出会いと別れに思いを馳せる。いろいろ教わりたいと思った人々が次のステージへ。
    • 人生初スクラム、カンバン。
    • ついに社員でチームに人が!今までバイトさんか偉い人しかいなかったので、同じ目線で仕事できる同僚は心強い…!
  • 11 - 12 月:
    • Python パッケージングに興味を持つ
    • 腰部脊椎症。人生初の腰痛。歩くのも大変って大変…

その他

  • 勉強会全くと言ってよいほど参加しなかった。お金も時間も精神にも余裕が無かった。
  • フェスも参加しなかった。クラブも。
  • そういう意味では今までの人生の延長とは違ったラインが始まった感がある。
  • 紹介ベースでの就職をやめたことが大きい気がする。自分が知っている人、自分を知っている人が全くいない環境。

技術的に

  • とりあえず Python を常に触る、という感じだった。
  • SQLAlchemy ちょっと覚えた。 (Django 以外の Python ORM 初めて)
  • Redis, MongoDB の使用例を実際に見れて嬉しい。
  • AWS にも初めて触れる。
  • マルチプロセス、マルチスレッドをはじめて触る。新鮮。
  • 分散処理ライブラリとかパッケージングとか、メタ情報だけ得て終わってしまった。適用する機会を作っていきたい。
  • テスト駆動開発を覚えた。
  • ScalaHello World だけ。
  • Docker ちょっと触った。
  • NewRelic とか CircleCI 触れなかった。

なんだろ

  • ワークフロー、レポートライン重要。
  • そのために適切なツール導入するのも大事。

  • 人に恵まれた。もういない人も含めて。本当によくしてもらっている。
  • コミュニティで有名な人が所属している会社、ってなんかひっそりしてるのか、私の身近には機会がないみたい…
  • ドキッ高学歴だらけの水泳大会

振り返り

Keep

  • 皿洗い、部屋の掃除、選択、ゴミ捨てなど、生活維持の軽作業
  • 定期的なレビュー
  • 軽い運動
  • テストコードを書く習慣

Problem

  • 分散処理
  • パターンの引き出し
  • 読書 (技術書も含めて)

Try

  • Problem の他に、
  • 趣味プロジェクトを作って、ゲームやサービスなどを作りたい
  • 勉強会参加を再開したい…
  • 言語としては Scala

で、

EvernoteGoogle カレンダー, Yammer を頑張って洗いなおして振り返った。 とはいえなんか、あんまり覚えてない。

やっぱり、
1週間に1回ぐらいのレビュー → 1ヶ月に1回の中レビュー → 12ヶ月に1回の大レビュー が楽そう…。

来年どうしよう。とりあえずレビューの習慣は身につけたい。

やりきった感がないのは…なんだろ…頑張れなかった。来年はコツコツちゃんとしたい。

やりきった感がないのは新しい環境に馴染ませるのに必死だったからかも知れない。

ただ、弁当を作ったり、家事をしたり、少し運動したり、家計簿つけたりと、生活面をちゃんとしてこれたのは評価したい。

「今日より明日は良い」会社の先輩の言葉。昨日よりも一歩前進する今日へ、という意味。

結局 vim をセットアップしたけど、 Atom も併用していきたい

マルチカーソルがあるので…いや、Vimでもできるんでしょうけど…。

SublimeText3 は flake8 の良い linter があれば… (お前が作れ事案)

Atom に入れているパッケージ

その後

vim使いでこれ使わないのは結構損してる - Qiita

マルチカーソルを実現する vim プラギンあるよ、というお話ですが、そのブコメ

f:id:peketamin:20151230201409p:plain

まー確かに慣れの問題ですかね…。

Scala に手を出し始めた

あたりを見て、

  • Hello World
  • 関数定義
  • ループの仕方
  • パターンマッチングの初歩
  • Maybeモナドの初歩

をやって、

sbtbrew install して、 sample_project ディレクトリ内を sbt で初期化して、

  • compile
  • test
  • run (mainが無いと怒られた)

をやってみた。

まだ、 object とか、小難しい書法は試してない… とりあえず sbt の初期化処理にすんごい時間がかかることは分かった…

エディタの環境を整えていてPythonコーディングはもう Atom か PyCharm でいいやと思った (タイトルオンリー)

リファクタリングツールあれこれ — pyconjp2014 1 documentation

を読んでいて、

  • pip sarch flake8 したら出てくるコーディングスタイル支援ツールの数々
  • 循環的複雑度
  • メンテナビリティインデックス
  • 静的解析 (vulture)

あたりに、現状のプロジェクトへの使用に希望を抱いたが、保守性を向上させることが大事にされなさそうで非常に苦しい。 保守性でロースコア (保守が困難) のコードがいくつか出てきたので、なんとかしたいが…。

ビジネスミッション優先なのはそれはそうだと思うけど、 それが進めるとしても競合の1/2の速度なのであれば、足場を固める時間を稼働の30%でも取るようにすると健全なのではないか、ひいては、健全なチーム、健全なエンジニアリングセクションになるのではないか、そう思うのだが、 試算は試算でしかなく、実績をどこかから引っ張ってくるのが一番なのだろうけど、どこにあるのだろう (詰んだ)

SublimeText3 では SublimeLinter-flake8 が動かないので Atom + linter-flake8 に乗り換えた

Atom.

前に試した時はバージョンアップ時やアンインストール時に ~/.atom が変に残ったりして、使用を中止した。

今回、 Atom に乗り換えるまでは SublimeText3 + Python-flake8-Lint だった。これはよく動いた。 しかし、Python-flake8-Lint の方は、 PyCharm ほど警告が厳しくなく、 例えば、 import 挿入箇所や順序についての警告が出なかった (設定次第?)

で、表題の通り SublimeLinter の方を期待してスイッチを試みたが、動かないことがわかった (SublimeText2なら動くらしい)

なので、軽量モダンエディタとして今まで大変 SublimeText にお世話になってきたのだが、これからは Atom を試していきたいと思う。

Vim の設定は相変わらず、前にマシンを再セットアップした際に vimrc を捨ててから進んでない。 が、そのうち、充実させて github に反映したい心算なり也。

システム標準の python に pip install flake8 したら怒られたので brew reinstall python した

El Capital 以降の System Integrity Protection という仕組みのアレらしいので。

brew install する前は↓だったみたい (本当か?)

$ pip freeze
altgraph==0.10.2
bdist-mpkg==0.5.0
bonjour-py==0.3
macholib==1.5.1
matplotlib==1.3.1
modulegraph==0.10.4
numpy==1.8.0rc1
py2app==0.7.3
pyobjc-core==2.5.1
pyobjc-framework-Accounts==2.5.1
pyobjc-framework-AddressBook==2.5.1
pyobjc-framework-AppleScriptKit==2.5.1
pyobjc-framework-AppleScriptObjC==2.5.1
pyobjc-framework-Automator==2.5.1
pyobjc-framework-CFNetwork==2.5.1
pyobjc-framework-Cocoa==2.5.1
pyobjc-framework-Collaboration==2.5.1
pyobjc-framework-CoreData==2.5.1
pyobjc-framework-CoreLocation==2.5.1
pyobjc-framework-CoreText==2.5.1
pyobjc-framework-DictionaryServices==2.5.1
pyobjc-framework-EventKit==2.5.1
pyobjc-framework-ExceptionHandling==2.5.1
pyobjc-framework-FSEvents==2.5.1
pyobjc-framework-InputMethodKit==2.5.1
pyobjc-framework-InstallerPlugins==2.5.1
pyobjc-framework-InstantMessage==2.5.1
pyobjc-framework-LatentSemanticMapping==2.5.1
pyobjc-framework-LaunchServices==2.5.1
pyobjc-framework-Message==2.5.1
pyobjc-framework-OpenDirectory==2.5.1
pyobjc-framework-PreferencePanes==2.5.1
pyobjc-framework-PubSub==2.5.1
pyobjc-framework-QTKit==2.5.1
pyobjc-framework-Quartz==2.5.1
pyobjc-framework-ScreenSaver==2.5.1
pyobjc-framework-ScriptingBridge==2.5.1
pyobjc-framework-SearchKit==2.5.1
pyobjc-framework-ServiceManagement==2.5.1
pyobjc-framework-Social==2.5.1
pyobjc-framework-SyncServices==2.5.1
pyobjc-framework-SystemConfiguration==2.5.1
pyobjc-framework-WebKit==2.5.1
pyOpenSSL==0.13.1
pyparsing==2.0.1
python-dateutil==1.5
pytz==2013.7
scipy==0.13.0b1
six==1.4.1
wheel==0.26.0
xattr==0.6.4
zope.interface==4.1.1