プログラマ行進曲第二章

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

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あたりから片付けはじめて、何とか人が寝られる状態に戻せたのは大きかった。いかに埃がたまっていたのかを実感したので、来年はこのマシな状態をキープして過ごせるようにしたい所存。

最後に

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

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

PyCon JP 2015に参加してきたので振り返る #pyconjp

PyCon JP 2015に参加してきました。今年のPyConも盛況に終わり、参加者も600名を超えるまでに増加したとのことです。イベント開催に尽力した運営スタッフをはじめ、関係者の方の努力には頭が下がるばかりです。

例年真面目に参加エントリを書こうと気負いすぎて全てのことを一度に書こうとして、いつも仕上げられずにお蔵入りする羽目になっているため、今回は少し手法を変えて書いてみます。

取りあえず思いついた感想を数点書いて一旦公開、それから時間を見つけて参加したトークの感想や感じたことなどを気の済むまで追記していく、というスタイルでやってみようかと思います。

後で書くつもりのことは"Todo"とか書いておいて目印にするつもり。時間が無くて書けなくなったらしれっと消すと思いますが。

チュートリアル

昨年のPyCon JPが終わったあとのブログ記事やら感想を見ていたら「チュートリアル参加したかった」という後悔が強くなったということがあったので、今年はちゃんと射程を合わせて有給を取ってフルで参加しようと思い、実行。

チュートリアルの全体的な感想

有休使ってお金を払って午前も午後も参加してよかった!と思いました。

というのも、今回のチュートリアルで個人的に狙っていた効果は以下のようなもので、それが達成されたからです。

  1. 自習すると無駄に時間がかかりそうな分野の知識・情報を概観して後で自学自習する効率を高めるようにすること
  2. お金を払って受講することで習ったことを無駄にしないようにある種の強制力を働かせること

今後の活動にいい影響が出るかどうかは今後の私次第なのでなんとも言えませんが、少なくとも「機械学習」と「ベイズ推定」に関しては数時間かけて詰め込んだことと豊富な参考資料をゲットしたことを考えると、後で振り返る際の取っ掛かりが出来たのではないかと思います。

Machine Learning Bootstrapの感想

チュートリアルは1日券を購入したのですが、それは午前にも午後にもちょうど参加してみたいものがあったからです。その一つがこのMachine Learning Bootstrapでした。

前々から機械学習には興味があって、空いた時間で勉強していたんですが、どの資料を読んでコードを書いてもそもそもの理論が難しかったり前提となる知識が多くて「全然分からん!」となっていました。特にPackt Publishingで半額期間の時に買ったこの本を読んでいたときにそう感じました。

Building Machine Learning Systems With Python: Get More from Your Data Through Creating Practical Machine Learning Systems With Python

Building Machine Learning Systems With Python: Get More from Your Data Through Creating Practical Machine Learning Systems With Python

英語とかそういう以前に、読んでいて「確率的勾配降下法って何?読んでも分からん…」と分からなくなることが多く、機械学習の習得を少し諦めていたという流れがあったところに丁度よさげなチュートリアルが出てきてしめしめと思い、参加。

実際の内容を細かく書こうとすると多分また書き切れなくてボツ行き になると思うので軽めに書くとすると、(環境構築が事前に必要とは言え)細かい所に時間を割かずに実際に動くアプリケーション環境が事前に用意されていてそれを動かしながら学習の様子を試すことが出来たので、自分で環境構築とエラーを出し続けるコードと闘いながら本を読み進めるよりかはずっと効率的に学べた気がします。

実際やった内容の自習編がQiitaで公開されているので興味がある人、興味があるけど参加できなかった人は見てみるといいと思います。

qiita.com

エンジニアのためのベイズ推定入門:確率論的プログラミングのすすめの感想

(詳しくは後日書く。ハミルトニアンモンテカルロ法とNo-U-Turn-Samplerという単語だけは持ち帰った)

午後にはこのチュートリアルに参加しました。参加した正直なところをいうと、自分には前提知識が足りなすぎて消化不良を起こした感があります。

ただ参加して無駄だったかというとそうではなく、後で確率論的プログラミングを習得してみたいと思った時に復習できるポイントをいくつも提示されたのでそれだけでも価値があるのと、一応自分なりの理解として以下のことを何となく持ちかえることが出来たのでそれが成果かなと思います。

  • MCMCは絶対に収束する。が、いつ収束するか分からない。
  • ハミルトンモンテカルロ法は汎用的に収束を速くする手法(らしい)
  • ハミルトンモンテカルロ法はパラメータの調整がすごく重要で難しかった
  • そういう中、No-U-Turn Samplerが考案されてそのパラメータ調整が非常に楽になった。
  • そのNo-U-Turn Samplerを使って実装されているものの一つがpymc3

メモ書きからの抜粋なので間違っている可能性大なので、間違っていたら教えてくれると嬉しいです。

PyCon JP 2015

PyCon JP 2015の全体的な感想

(各トークの感想を律儀に最初から書いていたら書き終わらずに旬を逃すので、後で少しずつ書いていくつもり)

個人的に非常に勿体ないことというか、後悔したことは「チュートリアルの日以外寝不足で頭が回らず、聞きたかったトークも集中して聞けないことがあった」ということです。

チュートリアルの日を除いたどの日も(スプリントの日も!)前日は22〜23時という早い時間に床につくようにしていたのに、PyConに参加するのが楽しみだったのか全然寝付けず、そのせいで母語である日本語のトークなのに全然意味が頭の中に入ってこないで理解できないという状態になったところもあり、非常に勿体ないなと思いました。

そんなこともありましたが、一応事前に参加したいトークを決め、前年の反省を踏まえて「聴講しに行くトークは本当に参加したいものだけに絞り、空いた時間で休んだり他の人とコミュニケーション取ったり、スポンサーブースを見て回ったりしよう」ということを実践したおかげで、燃え尽きずに平均的に楽しめたので少しはイベント参加経験値上がったなと思いました。

そのおかげでこういうことも経験できました。

オープンスペースで勃発的に発生した講義に運良く参加して知見を得られるというのもイベントの醍醐味ですね。

Todo: 各トークの感想を少しずつ書く

(全てではないにしろ、聴講したトークの感想とかを後でかくつもり…)

まとめ

来年のPyCon JPも楽しく参加したいですね!

後、一回くらい海外のPyConにも参加してみたいと思いました。ワーキングプアなので行くとしても近場(韓国か台湾)になると思いますが。そこまでお金を貯めて他の娯楽に散在したくなる誘惑を抑えるというハードルが高そうなのでどうなるかは分かりません。

まあ、そんな感じです。

PyCon JP 2015 参加者のブログ記事をできるだけまとめてみました #pyconjp

まとめサイトが嫌いなのにまとめサイトと同じ事をしていてダブルスタンダードを感じる今日この頃です。

やろうと思った理由

スライド資料、動画、Togetter公式サイトがもう既にまとめているのですが、参加者のブログ記事は労力考えると運営スタッフ主導でまとめないだろうなと思ったのと、自分が後で振り返って読みたいからです。

と思っていたら、運営スタッフの方がこんなツイートを。

もしかしたら後で公式サイトでもまとめられるのかも知れませんね。その時は適当にこのサイトのまとめ内容利用してください。

追記(2015/10/15 21:37時点)

とのことなので、本エントリの意義は半分は果たした!

これから見る人は上記の公式サイトまとめで感想ブログをフォローしていくといいと思いますよ。

それとは関係なく、まだ追加してなかった感想ブログの存在に気がついたらコソッと追加すると思いますけど。

(追記終わり)

それでは以下「スピーカー系」「参加者系」「スポンサー関係者系」というくくりで分けてまとめました。順番は適当です。 スピーカー兼スポンサー企業関係者の方など、複数属性の方が何人かいらっしゃいましたが、そこは独断と偏見で特定の一つのカテゴリに分けるようにしています。

あともちろん見落としもあると思います。単なる有志のまとめなのでクオリティに期待しないで!という注意だけ言っておきます。

スピーカー系

トークの登壇者だけでなく、チュートリアルのヘルプに入っていた人も私が知っている範囲内でここのカテゴリに入れてます。

nwpct1.hatenablog.com

d.hatena.ne.jp

shinyorke.hatenablog.com

ihcomega.hatenadiary.com

t2y.hatenablog.jp

f-shin.net

amacbee.hatenablog.com

sinhrks.hatenablog.com

librabuch.jp

shacho.beproud.jp

blog.ymyzk.com

http://mocobeta-backup.tumblr.com/post/131025586072/pyconjp-janome
mocobeta-backup.tumblr.com

memo.laughk.org

参加者系

nnsnodnb.hatenablog.jp

dackdive.hateblo.jp

chezou.hatenablog.com

d.hatena.ne.jp

yoshiki-utakata.hatenablog.com

soy-curd.hatenablog.com

soy-curd.hatenablog.com

rinnegrid.hatenablog.com

http://takuti.me/note/pyconjp-2015/takuti.me

www.tento-net.com

hogespace.hatenablog.jp

xaro.hatenablog.jp

arvelt.hatenablog.com

tanishiking24.hatenablog.com

nakagami.blog.so-net.ne.jp

スポンサー関係者系

aial.shiroyagi.co.jp

projectphone.lekumo.biz

projectphone.lekumo.biz

最後に

気が向いたら&新しく記事を見かけたら追記するかも知れません。