プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

新しい習慣を2つほど始めた

年末年始の大掃除の効果が効いていて、新年迎えてから割といい調子でここまで過ごせたので、やろうかなと思い始めたことを2つほど始めてみた。

新しく始めたこと

スポーツジムに登録して通う

いきなり挫折率高そうなやつですが、家族から譲り受けた無料体験チケットを2枚使ってどんな調子か感じてから決めたので、続けて行けそうというある程度の賞賛はある。今日登録してきた。

ダイエットしたいというのもあるけど、それよりも現状やっている空手の動きの質を高めるために体力作りと柔軟性のアップを目的にしている。

スポーツジムにした理由は以下の通り。

  • 最寄り駅の近くにあって通いやすい。
  • 1月の先着で数ヶ月分無料になるキャンペーンにまんまと釣られた。
  • 福利厚生使えば月々のかかるお金が普通より大分安くなった。
  • 家族が該当スポーツジムに以前登録していてどんな感じか事前に聞けた。

後付け要素もあるけど1つ目はこんな感じ。

週報を書く

「週報って何?」って人は以下の記事を読めばいいかも。

bellflower.dodgson.org

やろうと決めたのは上の記事を読んでからだけど、やろうと思ったきっかけは上の記事ではなく、rebuid.fmの以下のエピソードを聞いたからだ。

rebuild.fm

2015年は月ごとにまとめとしてブログ記事に書いていたが、毎回月末になってまとめるのが大変で、結局10月以降は実施できなかったので、その反省もこめて、週報を軽く書きためて月単位でブログ記事にしようかと思っている。

で、週報はDay Oneとか使って自分用メモとしてやっていくつもり。

これはスポーツジムよりも気をつけないと習慣づけ出来ないタイプのものなのでリマインダー駆使してどうにかしておきたいところ。

新しく始めるために削ったこと

1日は24時間しかないという現実があるので、新しく習慣始めるなら既存の習慣を見直さないとカオスになるというのが今までの人生経験上明かなので、そこについて軽く書く。learnとunlearnは表裏一体。

といっても、今意識してやっているのは以下の行動を止める・少なくすることだ。

  1. ダラダラしたネットサーフィン
  2. ダラダラしたアニメ視聴

ネットサーフィンもアニメ見るのも止めたわけじゃないが、楽しくもないのに明らかに惰性で続けていてよくない視聴行動している時間が長いのが寝不足とか生活リズムの崩れを誘発していたので、その分だけを削るという意味だ。

「人はパンのみに生きるにあらず」なので、隙間時間とか気分転換など、ちゃんと楽しめて有意義な時にアニメ見るようにしたり、ネットするようにしている。

というか完全にそういう行動を断つと発狂するのでそういうことはしない。あくまで惰性で続けてしまっている所だけを削るように気をつけている。

思ったこと

今の私にとってはlearnよりunlearnが重要なんだろうなと感じるので、次は既存の習慣の見直しとかをする必要がある気がしている。

やりたいと思っていることを書き出してみる

2016年の抱負の記事で書いたことと被るけど、最近勉強していても色々なことに目移りして一つのことをやりきることが出来ていないように感じるのと、今自分がやりたいことの種類がどれくらいあるのかちゃんと把握してなかったので書き出してみようと思ったので書いてみる。

takuan-osho.hatenablog.com

基礎固め系

アルゴリズムやプログラミングの基礎作り

以下の本を読むだけでなく、中のコードをちゃんと書いて手を動かして理解してアウトプットすることを含んで取り組んでみる。

プログラミングの基礎 (Computer Science Library)

プログラミングの基礎 (Computer Science Library)

これは最近取り組んでいるが、とてもいい本なので終わったら感想エントリ書きたい気持ちでいる。

オンラインジャッジではじめるC/C++プログラミング入門

オンラインジャッジではじめるC/C++プログラミング入門

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

これらは私のアルゴリズム周りの弱さを補強する目的で。特に『プログラマの考え方〜』はいい本なので今年半ばまでに最後までやりきって身につけたいと思ってる。

セキュリティ周り

一度最後までやったことはあるが、すっかり頭の中から抜けているので復習する必要がある。

コードを書く系

技術的な分野

今後のことを考えて以下のことを練習していきたい

  • ES2015を前提にしたJavaScriptを書く
    • ツールの使い方を覚えるというより、Web標準や仕様にのっとった知識に基づくモダンなJSを書けるようにする、ということ
    • fetch APIとかPromiseとかよく知らないので、そういう所を埋めていく。
  • 今時のCSSの書き方を学ぶ
    • IEのサポートポリシーが変わった現在、たとえばfloatレイアウトではなくてflexboxを活用していくなど、モダンかつ標準に則ったCSSを書けるように出来たらいいなと思っている。
    • どちらかというとCSSは設計力の方が問われると思うので、その辺りも埋めていきたい。
  • Node.js
    • Node.js自体やエコシステムの理解を深めるのも大切だけど、それよりかはコールバックによる非同期プログラミングのやり方とかイベント駆動のプログラムのやり方を学んでいきたいという意味で書いている。
  • iOSプログラミングとSwift
    • これは単純にアプリを作って「これ、自分で作りました」とアピールできるものが欲しいという意味。

あとPythonとかGoとか書こうと思えば色々あるけど、現状の仕事とか今後のことを考えたらJavaScriptCSS力高めた方がいい気がしているので、この2つを優先した方がいい気がしている。

読書系

基礎固め系よりかは優先順位下げるけど、実力をつけていくために読んで身につけておきたいものだったり、純粋に興味があるから読みたいもの。

サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考

サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考

EPUB 3 Best Practices

EPUB 3 Best Practices

基礎からわかるTCP/IP ネットワークコンピューティング入門 第3版

基礎からわかるTCP/IP ネットワークコンピューティング入門 第3版

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

検索エンジン自作入門 ~手を動かしながら見渡す検索の舞台裏

検索エンジン自作入門 ~手を動かしながら見渡す検索の舞台裏

Code Reading―オープンソースから学ぶソフトウェア開発技法

Code Reading―オープンソースから学ぶソフトウェア開発技法

余力があればやる系

機械学習

データサイエンティスト養成読本 機械学習入門編 (Software Design plus)

データサイエンティスト養成読本 機械学習入門編 (Software Design plus)

取りあえず今手持ちのものでパッと思いついたものをリストアップしたので、コレヲ軸にして今月は勉強していこうと思った。最初の方に挙げたものは実際着手しているので

JavaScriptのthisがよく分からなかったので色々調べた結果、MDNが一番頼りになった

前回の記事で書いたとおり、最近JavaScriptを仕事で使う機会が増えてきたので、ES2015の学習も含めてJavaScriptの学習をしている。

takuan-osho.hatenablog.com

もともとJavaScript力低いのでJSを使う上で知っておかないといけないことを色々知らないわけだけど、その中でも輪をかけて理解できていないものの一つにJavaScriptthisがある。

JSの経験が少ない他言語経験者がよくはまると言われている(と私は思っている)JSのthisの使い方について、私も当然の如くちゃんと理解しておらず、色んな記事を読んでみたけど、「なんでこういうことになるの?覚えきれない」という感想しか出てこなかった。

そんなわけで分からないなあという思いをしていた時、「そういえばMDNでthisの説明をちゃんと読んだことなかったな」と思い、MDNでの説明を見てみることに。

developer.mozilla.org

色々他の記事を読んで自分で手を動かしたりしてそれでもよく分からないというステップを踏んだ後に読んだからということもあるとは思うけれど、MDNの説明が一番「何故?」ということに答えてくれたので、今の私にちょうどよかった。

ちゃんと公式(かそれに準拠する)ドキュメントを読んでから取り組まないと時間を余計に消費してしまうなと思った一日でした。

Electron勉強してとても参考になった記事

最近業務の一環でJavaScriptを色々いじる機会があり、このご時世JSいじるならES2015やらなくてはと思って最近ちょこちょこ書いていたりする流れを受けて、Electronにも最近手を出している。

私みたいなJS初心者かつGUIアプリの経験も少ない人がElectronアプリ作成しようと思った時に一番最初にはまると思われるのが、「公式ドキュメントチュートリアルやった後、何すれば良いのか分からない」という状態だ。

2016年1月9日現在、Electronの公式ドキュメントはステップバイステップで教えてくれるというよりかは「必要な情報はリファレンスみたいにしてまとめてるから、そこから必要な情報を自分で拾い上げて自分の作りたいもの作れば?」という雰囲気漂わせている(と個人的には感じる)。

そのため、「real worldなアプリってどう作れば良いの?メインプロセスとレンダラプロセスが違うのは分かったけど、実際作る時にはどう違いを意識してやればいいの? ipcMain, ipcRenderer, remoteモジュールって何なの?」という状態になってしばらく訳が分からないまま時間が過ぎてしまった。

そこでたまたま次の記事を見つけて自分で手を動かしてやってみたら、上記に書いた疑問が大体解消して、Electronアプリの作り方が分かってきたので、私みたいに困っている人は読んでみたらいいと思う。

medium.com

上の記事をやると以下のことが分かるようになるので、チュートリアルの次にやるとちょうど良いと思う。

  • 複数画面の構築の仕方
    • ipcMain, ipcRendererモジュールを使ったメッセージング
    • remoteモジュールを使ったトレイメニューの構築
  • パッケージングの仕方
    • electron-packagerの基本的な使い方

その他グローバルショートカットの設定の仕方など、色々学べる。

ただ次のような難点もあるので学習する時には注意した方が良いかも。

  • 記事で使われているElectronのAPIはv0.35.0より前の古いAPIの書き方で書かれている
  • ES2015で書かれていない

後者は本質的な難点ではないが、気になる人は気になるかも。私は気になった。

ただ、難点を補って余りあるくらい分かりやすいのでオススメ。

後で知ったけど、Awesome Electronに掲載されている記事のようで、さっさとチェックしておけばよかったと後悔。

2016年の抱負

はじめに

今年の抱負というかやり遂げたいことを書き出してみる。

  1. githubのアクティビティ率を高める
  2. アウトプットの量を増やす
  3. 一つプロダクトをリリースする
  4. SphinxにContributeする
  5. 後色々アレなど

それぞれ軽くコメントつけます。

githubのアクティビティ率を高める

要するにgithubのactivity欄に草生やしていきたいってことです。

何でそう思ったかというと、草生やすくらいに活動していないと何もやっていないと思われているらしく、悔しい思いをすることが多くなったからです。

とはいえ、意味の無いコミットばかりしてもしょうがないので、少し考えながらやっていきたいですね。

現状の草の様子です。

f:id:kutakutatriangle:20160105230518p:plain

アウトプットの量を増やす

具体的には以下のようなことを考えています。

技術書を読んで読みっぱなしにせずアウトプットする

今まで技術書を読んでいるのは止めていないのですが、読んだだけでアウトプットしていないせいか、知識が定着していなかったり自分の成果に繋がっていないように感じたことがやろうと思った理由の一つです。

読んでアウトプットしようと思っている書籍は今のところ以下の通りです。一度読んだのもありますが、少しずつ読み返したりしています。

プログラミングの基礎 (Computer Science Library)

プログラミングの基礎 (Computer Science Library)

オンラインジャッジではじめるC/C++プログラミング入門

オンラインジャッジではじめるC/C++プログラミング入門

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

選んだテーマとしては以下の3つを重点的にしたいと思っています。

  1. 基礎的なプログラミング能力を担保するためのアルゴリズムの習得・理解
  2. セキュリティの知識と実践
  3. コンピュータサイエンスの基礎的な知識

ブログ記事をある程度定期的に書く

技術書などで得た知識をブログ記事としてまとめられればいいなと思っています。

あと、今年は技術ネタだけじゃなくて、もっと雑多なネタも含めてブログを書きたいと思ったので、それも出来ればいいなと思います。

一つプロダクトをリリースする

これ何回も書いていますが、何かしら「これ、私が作りました!」といえるようなものをリリースしたいので。

多分スマホアプリになる見込みです。多分。

SphinxにContributeする

Sphinx本体へのPull Requestに限らず、コミュニティ活動とかにも少し貢献していきたいです。気持ちとしては!

後色々アレなど

色々出来ていないし、目途も立っていないけれど、前からやりたかったことに手を出してみるつもりです。

達成できて何らかの形で報告できればいいなあと思っています。

まとめ

全て出来るとは思っていないです。

Consulがよく分からなかったので色々調べて勉強する時に訳だった資料をまとめてみた

最近のDevOpsだとかInfrastructure as Codeとかの流れを汲んだ開発スタイルに少しでも触れていたらHashicorp社製ツールには何らかの形でお世話になっている人が多いと思います。私もその一人ですが、Hashicorp製のツールの中で「これ、よく分からん」というものがあって、それがConsulとSerfでした。

www.serfdom.io

consul.io

というわけで、去年の年末から年始にかけてConsulいじってみて、「なるほど、全自動オーケストレーションとかに使えるツールなのか(そこまで設定するのが大変そうだけど)」という感触を掴めるくらいには理解できてきました。

で、以下はConsulを勉強する時にとても役に立った資料です。

fstn.hateblo.jp

一番最初の「やわらかConsul」はConsulでどういうことが出来るのかを実際にConsulクラスタを組んで体験できるのでオススメです。ただ、バージョンが変わったりしていてビルド時にバージョン番号を一部変更する必要があったりするので、docker-composeの使い方が分かってないとそこで詰まるかも知れません。

2つ目のエントリもやわらかConsulと似たようなものですが、dockerを利用してConsulクラスタを組んで新しめの機能を体験できるようになるのでこれもオススメです。この中で使われているgliderlabsのconsulのDockerfileを読むと軽量なAlpine LinuxのDockerイメージが有効活用されてるなってことも分かって勉強になると思います。

最後はHashicorp製ツールのことを調べていたら絶対にいくつかの資料が出てくる前佛さんのサイトですが、参考役やslideshareの資料含めて、「Consulとは何か?」「Serfとは何か?」ということが分かるので、こちらも読んでみると非常にためになります。 前佛さんはHashicorp社製ツールについて最近本を出しているので、気になる方はそちらも購入してみると良いでしょう。 (私はもう既に買いました)

DevOpsを支える HashiCorpツール大全 (Think IT Books)

DevOpsを支える HashiCorpツール大全 (Think IT Books)

2015年の振り返り

はじめに

10, 11, 12月のまとめができないで年の瀬を迎えることになったわけですが、NHK紅白をBGMにしながら今年の振り返りでもしてみます。

「2014年の振り返りとかやってないだろ」とか思っていたら、以外にも今年2月に行っていたので貼っておきます。

takuan-osho.hatenablog.com

成果確認

上記まとめで書いていた「今後やっていきたいこと」がどれくらい出来たか、成果確認してみる。

何かプロダクトっぽいものを一つ出す

これは未だ出来てない。SwiftiOSアプリ開発の勉強やWebアプリ作成の勉強は続けているのでそろそろどうにかしたいですね。

SphinxのEpub3ビルダー、さっさとPRして取り込んでもらうようにする

これは現在進行形ですが、pull request自体は送っていて、特に問題なければ次のバージョン1.4に取り込まれそうな雰囲気ありますね。

github.com

とはいえ、クオリティ高くないのでどうにかしたいところ。

epub関係のライブラリ作り

作り始めたが、最近になって手を付けはじめた & 全然実装できてないので、これは来年以降の目標の一つになるかと。

github.com

RubyHaskellを少しは書けるようにする

Rubyは仕事で使ったので素人くさいスクリプトくらいなら書けるようになったと思う。

Haskellに関しては全然学習に手を付けられなかった。

低レベル・低レイヤーの技術や知識を深める

最近これらの本使って学習してる。基礎力無いのが丸わかりで死んでますね。

オンラインジャッジではじめるC/C++プログラミング入門

オンラインジャッジではじめるC/C++プログラミング入門

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングの基礎 (Computer Science Library)

プログラミングの基礎 (Computer Science Library)

写経したりして学習してる成果はgithubに上げて草生やす肥やしにしてます。

github.com github.com github.com

自然言語処理とか機械学習だとか勉強したい

これに関してはほぼ出来てない。

機械学習に関してはPyCon JP 2015のチュートリアルを利用して、自然言語処理に関してはNLTK Bookで学習していこうかなと思っている。

機械学習チュートリアルで学んだことに関しては以下の記事で少し触れている。

takuan-osho.hatenablog.com

今年やったこと

iOSアプリ開発 & Swift

月まとめを見返していたら結構な頻度でこのことについて書いてあったので、割と時間割いていたんだと思う。 三歩進んで二歩下がるくらいの進行具合だったが、やっと勘所が掴めてきたけれど、結局「作りたいアプリがあるか」「あるならどれくらい具体的な形を思い描けているか」「それを実現するためのCocoa Frameworkの機能をどれくらい使いこなせるか」ということが重要(特に最後)だと分かったので、実際にアプリ作れるようになるのはどれくらい先になるか不明だったりする。

だいたい作りたいと思うもの、既に世の中にあるって問題があるので。

Sphinxとかepub関連の作業

成果確認にも書いたけど、これは一応進捗あった作業だ。来年はSphinx-users.jpの副会長もやることになったので、もう少し意欲的に取り組めればいいなと思っています。

サーバー側の技術で新しめのこと

雑多にやっているので上手くカテゴリ分け出来ないけど、以下のようなことをやってたりしてた。

  • ツールとしてのDocker周りの理解を深める
    • Docker Machineなども含めて、ネットワーク周りの理解をちょこちょこ深めた
  • OpenStack
    • 『OpenStackクラウドインテグレーション』って本を読みながら勉強してみた。まだ途中。以下を見れば途中までの成果が分かる。

  • Consul
    • これはつい最近だけど、HashicorpのツールでSerfとこれだけよく使い方が分からずにネットの資料を漁りながら調べてみた。
    • 色々触ってみたところ、凄く有用なツールだと言うことが分かったので、もう少し色々触って理解深めたい。
    • どういう事を学んだかは後日ブログに軽くまとめたい。

他にも色々やった気がするけど、大晦日終わりそうなのでこれくらいにする。

技術系以外でやったこと

技術系含めて行ったことの中で最大のことは「自分の部屋を掃除して整理した」事だと思う。

恥ずかしくて写真とか撮ってないから掲載も出来ないので他の人に伝えられないが、まさにカオスな汚部屋になっていたのを12/29あたりから片付けはじめて、何とか人が寝られる状態に戻せたのは大きかった。いかに埃がたまっていたのかを実感したので、来年はこのマシな状態をキープして過ごせるようにしたい所存。

最後に

来年の抱負は年が明けてからまとめたい。

今年も色々な人にお世話になったと思うので、来年もよろしくお願いしますとお伝えしたいですね。