プログラマ行進曲第二章

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

2016年2月まとめ

はじめに

新年になって少しは新しく切り替えられたかなと思った矢先、早速2月まとめが3月に入ってしまって大変よろしくないと思いつつ、書いています。

takuan-osho.hatenablog.com

前回でも書いたように、週報まとめをしているので、昨年とは違ってまとめを書き始めてからの作業時間は少なくなって精神的には楽になっているはず。

やったこと

後なんかやっていたような気がするけど、日報に残ってないのでこれくらいで。

所感

1月は調子よく進んでいて気持ちがよかったけれど、いいことなのか悪いことなのか、2月は昨年のいつもの調子になっていて、それほど調子がいいというわけではなかったので、定期的に自身の行動を振り返ってレビューすることは大切なんだろう

これから

運動や週報・日報は習慣化できたので、バランスを取ってこれからは整理系のタスクの割合も増やしていった方がいいのかなという気持ちになりました。

映画『オデッセイ』を見に行った

タイトル通りですが、映画『オデッセイ』を見に行きました。


映画『オデッセイ 』予告編

原作は『火星の人』(原題: The Martian)ですね。

火星の人〔新版〕(上) (ハヤカワ文庫SF)

火星の人〔新版〕(上) (ハヤカワ文庫SF)

火星の人〔新版〕(下) (ハヤカワ文庫SF)

火星の人〔新版〕(下) (ハヤカワ文庫SF)

感想エントリとか書き慣れてないので小学生並みの感想しか書けないのが悲しいところですが、面白かったのでオススメです。

そもそもこの作品を知ったきっかけはエンジニア向けpodcastRebuild.fmで原作が紹介されていたことでした。

rebuild.fm

だいたい10:18辺りから原作『火星の人』の話が始まるので、気になる人は聞いてみてから映画を見に行くかどうか決めるといいかも。ただ、途中でインターステラーのネタバレがあるので注意。

その後何回かrebuild.fm内で言及されていて、映画が公開されてから色んな人が言及しているのをネットで見たので気になってみたところ、やはり面白かったので収穫でした。

ただ、原作既読者によると原作はもっと面白い(というか描写がある)らしいので、原作を読んでみようかなという気になってます。

映画内でも冗長になるのを防ぐためか、ダイジェストみたいにすっ飛ばしているところが2箇所ほどあって、多分そういうところも原作は描写してるんだろうなと思うと楽しみですね。

原作を積ん読リストに追加しておきたい気分にさせられました。

2016年1月まとめ

はじめに

前年は10月から月報をまとめられなかったので、少し対策をするようにしました。

takuan-osho.hatenablog.com

といっても、やっていることは前回の記事で書いたように、週報を書くようにしたということだけです。これで月のまとめに今までやったことを思い出すという作業を大幅カットできるかと思ってます。

takuan-osho.hatenablog.com

やったこと

  • ブログの定期的なアウトプット

    • 去年に比べれば2〜3倍以上と圧倒的なアウトプット量。
    • これからは技術的なエントリの割合を増やしていきたいと思っている。
  • 新しい習慣

    • 運動(スポーツジムへの登録と利用)
    • 週報
      • 始めてから続いていてかなりいい調子。
      • 分量を書きすぎるのを避けるようにしているのがポイントかも?
  • Sphinxへの大きな意味でのコントリビュート

    • ブログに書いていないけれど、Pyladies Tokyo Meetup のSphinx回でチューターとしてヘルプに入ったりした。
    • epub3ビルダーに関しては継続中。現在は指摘を貰っている箇所の修正にまだ手がつけられていない…
  • 新年会とか飲み会系

    • 84pyの新年会に今年も参加した。同年代でやる飲み会はいいもんですね。
      • データサイエンティストの裏側的な話とか色々面白い話が聞けたのもよかった。
    • 空手方面ではお世話になっていた先輩が田舎に帰るということで送別会にも参加。
      • 自分が空手を始めてからずっとお世話になっていたので少し寂しい。
  • 新年の抱負で挙げたことの実践

    • 『プログラミングの基礎』は着実に進めている。
    • 『安全なWebアプリケーションの作り方』の再読は少し停滞中。すこしよろしくない。
  • CSS

    • CSSは仕事で要求されていることもあって最近特に勉強している最中。IEのサポートポリシーも変わったのでflexboxとかガリガリ使いたいので各方面の説得をしようと考えているところ。
    • BEMとかそういう手法で守らないと容易に破綻するCSSという言語はクソだなという思いを最近強めているところです。

所感

2015年の振り返り記事でも書いたけど、去年末に大掃除をした影響で随分と生活がスムーズになり、2016年は1月から調子よくスタートを切れて気分がいい状態。

takuan-osho.hatenablog.com

やったことにも書いたように新しいことを始めたり、今まで手をつけられなかったことに手をつけられるようになったので、この調子を続けていけるようにしたい。

これから

今度は既存の習慣の見直しを視野に入れて日々の生活の改善をしていきたいところ。

技術方面では、コードを書きつつ、技術的なアウトプットを増やしたいという気持ち。

あと、運動を習慣化して健康体と柔軟な身体による一段上の空手を手に入れたいですね。

新しい習慣を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に掲載されている記事のようで、さっさとチェックしておけばよかったと後悔。