ページ

2013年5月10日

オブジェクト指向できていません!

Alain Bachellier cc
定期的に何度も見返すスライドってあんまりないような気がするけど、このスライドだけは何度も見返してしまいます。
確か去年の夏頃に出会ったので、もうすぐ1年が経つんですね。




このスライドでは、真のオブジェクト指向プログラミングを実践するための方法が紹介されています。
例はC++で書かれているけど、JavaやRubyやJavascriptにも考え方はそのまま適用できます。

このスライドで紹介されている、Jeff Bay氏の「必然的にオブジェクト指向になってしまう、Extremeなコーディング規約」は、すぐに実践する価値があると思います。
Extremeとはいっても、それほど難しいことは言っていないので、すぐに取り組めると思います。

ただ自分の場合、この手法がなかなか身に付かず、簡単な
  • #1 1つのメソッドにつきインデントは1つまでにすること
  • #2 else句を使用しないこと
等から始めて、少しずつ実践できるように練習を続けています。

早期リターンを活用しインデントを浅くする手法なんて、言われてみればその通りなんですが、盲点でした。
else句もなるべく使わないようにして、とにかく条件分岐をシンプルにするよう心掛けただけで、自分のコードが明らかに読みやすくなったのは驚きでした。実践してみて、価値があったなと思いました。


  • #3 すべてのプリミティブ型と文字列型をラップすること
というのは、オブジェクト指向プログラミングの基本だと思うので、自分の場合は違和感はありませんでした。
最近友人が、「Javaの嫌なところは、Listにプリミティブ型が入れられないところ」と言っていて、これはオブジェクト指向でやってないから困ることになるんだよなぁって思いました。
個人的に感じるJavaの嫌なところは、リテラルがないことですね。

他にも#4〜#9まで挙げられていたのですが、どれも実例付きでわかりやすいです。

ただ、やはりすぐに全部を取り入れるのは難しいので、何度もこのスライドを繰り返し見て、少しずつ身に付けるようにしています。
特に、103ページ目からの実際に採用した簡単なバージョンは、ハードルが下がっていい感じです。

最近またこのスライドを見返して、やっぱりいいスライドだなぁと感じたので、自分のブログでも紹介させて頂きました。

是非、すべてのプログラマさんに見てほしいスライドです。


スライド中で紹介されていた書籍・資料・リンクまとめ




2013年5月5日

YaTeXとEmacsで快適LaTeX生活を謳歌したい!



Emacsを常用するようになっても、LaTeXだけはTeXShopを使い続けてた。

でも、もういいだろう、と。面倒だったけど、その先により快適な環境があると信じて、構築を開始しました。

んで、YaTeXっていうのがすごくいいというのを聞いていたので、それを使って導入してみることにしました。YaTeXも先月、最新安定版を出したばかりみたいだし、いいタイミングだったかも。

設定とかは、基本的にTeX WikiのOS Xの項目を参考にしました。

バージョン・前提

  • GNU Emacs for Mac OS X 24.2.1
  • YaTeX 1.77
  • TeXShopでのLaTeX環境構築済み

1. YaTeX本体をダウンロード&インストール

YaTeXのサイトからtarファイルをダウンロードし、解凍。

ディレクトリ名がyatex1.77とかになってるから、yatexに変更し、~/.emacs.d/site-lisp/に保存。

2. Emacsの設定

TeX Wikiの説明に従って、.emacs.d/init.elに以下の設定を追記する。


うまくできたら、Emacsからコンパイル (C-c C-t j) のテスト。

3. その他の注意点

コンパイルしたときに、自分の環境ではptex2pdfがないよーって言われたので、探して/usr/texbin/に入れてあげたらうまくコンパイルできました。
ptex2pdfが見つからなかった人は、CTANからダウンロードできます。/usr/texbin/に入れるときは、拡張子のluaは削除してやってくださいな。

あと、当然だけど、Emacsのload-pathに/usr/texbinを追加してやらないと、ptex2pdfが呼び出せないので、気をつけてくださいな。

YaTeXの設定は以上です。

2013年5月3日

Node.jsのclusterでworkerが異常終了したとき自動的にforkして復帰させる方法


Node.jsでclusterモジュールを使って、masterからworkerをいくつか呼び出してアプリを動かすことはよくある。

そのときに、workerが正常終了(worker内でプログラマが意図してkillさせた場合)した場合と、異常終了した場合とで処理を分けたい時がある。

特に、異常終了した場合に自動的にworkerを再起動させる方法をまとめておく。

バージョン

以下の環境にて動作確認済
  • Node.js v0.10.5
  • Amazon Linux AMI 2013.03

やりかた

とりあえずサンプルを載せます。


こんな感じで動く。

exitイベントでコールバックしてきたworkerオブジェクトがsuicideというプロパティを持っているので、そこを参照すると、そのexitイベントが正常終了によって起こったものなのかどうかが分かる。

参考資料


ポートを占有しているプロセスを見つける方法 lsof -i

lsofコマンドにiオプションを付けて調べることができる。

例えば、3001番ポートでWebアプリケーションを立ち上げたいけど、何かがすでに占有していて立ちあげられないから調べたいという場合は、以下のようにすればいい。


この結果から、nodeアプリケーションがすでに3001番ポートを占有していることが分かる。
この場合、プロセス4362はnodeクラスタのworkerなので、masterプロセスである4356の方をkillすればよい。

Gitでコミットメッセージのテンプレートを設定する方法

プロジェクト管理で、コミットメッセージにチケット番号を毎回書くのが面倒とか、そういうときの対策。

1. テンプレートをつくる

適当な場所 (~/.gitmessage.txt) にテンプレートを書いて保存する。

2. .gitconfigにテンプレートの場所を設定する

以下のコマンドで適用される。

以降、git commitしたときにテンプレートが適用されるようになる。

参考資料

Related Posts Plugin for WordPress, Blogger...