ページ

2013年12月12日

新規開発するときに整えたい開発体制


新規じゃなくてもいいけど、こうだったらいいなという願望。
  • バージョン管理を徹底する
  • masterブランチはいつでもリリース可能に
  • バッチはJenkinsに集約
  • テスト駆動開発(単にテストを書くということではなく、テストが開発を駆動していること)
  • 感覚ではなく事実を信じる(計測する)
  • 全てのビュー改修・文言修正にはA/Bテストを
  • 短期的な利益を捨てても長期的な利益を取りにいく
  • 管理ツールも使いやすく(運用コストを減らし、運用ミスの発生確率を下げる)

2013年12月8日

アジャイルサムライベースキャンプに参加して

Agile Samurai Base Campっていうイベントに参加してきました。

http://www.agilesamuraibasecamp.org/

角谷氏の基調講演から始まって、インセプションデッキとテスト駆動開発の2グループに分かれてセッションが行われました。

講演者の一人である和田卓人氏は、以前ペアプロをしてもらったこともあり、もう一度お話を聞きたかったので、今回のイベントに参加しました。というわけで自分自身はテスト駆動開発のセッションに参加しました。

和田さんのお話

冒頭は、まず目標を考え、それを示すテストを書き、red --> green --> refactoringのサイクルを回しましょう(黄金の回転)という、いつものお話から始まりました。

印象に残ったのは
  • 「複数を相手にしない。一人ずつ対処する。」(五輪書)
  • いきなり全てのテストを書いてRedだらけにしない
  • TODOリストから一つのタスクを引っ張ってきて、テストを書く
    • 一つずつテストをひっぱってきて、黄金の回転ですばやく倒す
という話でした。この話をする前に、大きなタスクは小さく分解して、「一つずつ少しずつ段を小さく」というお話をされていたけど、具体的に言われると、やりがちなので注意しようと思いました。

テストを書くのは不安を取り除くためというのは、ペアプロをしてくださったときに何度も言われていたけど、今回も強調していっていたのでやはり重要なのだなあと再確認できました。実際にテストを書いて進めてたときは、気持ちが楽だったし。

また、あるリリース済みの機能の仕様変更が来た場合、テストコードの変更が大量に発生してしまう場合はどうしたらいいですか?という質問をしました。

当たり前のことだけど、仕様変更が大きければテストコードの変更が多くなるのは当然のことで、その変更をできるだけ少なくするためにはテストフレームワークをカスタマイズする等して対応すると良いとのことでした。

ただ、テストフレームワークのカスタマイズって、どのレイヤーの話だ?もうちょっと掘り下げて質問すれば良かったけど、自分の技量ではまだ理解できないと思ったのでやめといた。

テスト駆動開発の事例の話

ここで印象に残ったのは、レガシーコードのTDDの話。これは、自分の環境にも近いものがあり、参考になりました。

また、TDDしてるプロジェクトのソースコードレビューの観点を質問したが、テストコードをよく見るとのことでした。
  • テストが小さな粒度に分解されているか
  • 一つのテストケースで複数のアサーションが入っていないか
テストコード以外の部分は、普通のレビューと同じらしいです。

まとめ

朝9:30からのイベントだったので、結構疲れた。

多くの講演者の方々が、一人でも始められるとおっしゃっていたので、がんばってみようと思う。和田さんにも久しぶりにお会いできて、やる気でました。

明日からまた塹壕に帰ります。がんばるぞー!

2013年11月12日

Mac OS X 10.8の初期セットアップ覚え書き

バージョン

  • Mac OS X 10.8.5

システム設定

  • Spotlightのキーボードショートカットを [⌘+Space] に変更
    • システム環境設定 --> キーボード --> キーボードショートカット --> Spotlight
  • スリープ開始5秒後にパスワードを要求
    • システム環境設定 --> セキュリティとプライバシー --> 一般

基本的にインストールするもの

  • FIrefox
  • Google Chrome
  • Thunderbird
  • Skype
  • Evernote (App Store)
  • XtraFinder

開発用にインストールするもの

  • XCode (App Store)
  • iTerm2
  • CotEditor
  • Emacs for Mac OS X
  • Eclipse
  • Git
  • MySQL

フォント

2013年9月20日

ディスクの空き領域を0で埋めるスクリプト

0が1024*1024文字書き込まれたファイルを延々と生成し続ける。

ファイル名の形式はYYYY-MM-DD.hhmmss.xxxxxxのようになる。
最後の6桁はマイクロ秒が入る。

例)2013-09-20.143441.222938

Fileは、ディスクがいっぱいになると例外 Errno:ENOSPC を投げる。
これを捕捉して、disc_fullディレクトリを空にすれば、再びディスクを0で埋めることができる。

これを何度か繰り返せば、ディスクに残るデータを完全に消去することができる。
(フリーソフトを探してダウンロードするのが面倒だったので、自分でスクリプトを書いた)

以下、スクリプト

2013年9月2日

Rails 3のActiveRecordで、saveしようとするとundefined method `eq' for nil:NilClassのエラーが出る問題の対処

これは、idカラムの存在しないテーブルなど、Primary Keyを設定していない場合に起きる問題となっている。

参考: http://stackoverflow.com/questions/3124290/undefined-method-eq-for-nilnilclass-with-rails-3-and-ruby-enterprise-on-ubunt

従って、以下のようにmodelでPrimary Keyを指定してやればよい。
RailsではPrimary Keyが存在しないと問題が起きることが多いので、基本的にはPrimary Keyを設定したidカラムを付けておくことを強く推奨する。

2013年6月7日

しゅんたっく 24歳 夏














しゅんたっく 24歳 夏

己の知識とスキルに限界を感じ悩みに悩み抜いた結果
彼がたどり着いたさきは
感謝であった

自分自身を育ててくれたシステム開発への限りなく大きな恩
自分なりに少しでも返そうと思い立ったのが
一日一万行 感謝のプログラミング!!

気を整え 拝み 祈り 構えて タイプ
一連の動作を一回こなすのに当初は5〜6秒
一万行書き終えるまでに初日は18時間以上を費やした

書き終えれば倒れる様に寝る
起きてはまた書くを繰り返す日々

2年が過ぎた頃 異変に気付く
一万行書き終えても 日が暮れていない
齢30を越えて 完全に羽化する
感謝のプログラミング 1時間を切る!!
かわりに 祈る時間が増えた

SOHOを出た時 しゅんたっくのテキストエディタは
描画を置き去りにした

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したときにテンプレートが適用されるようになる。

参考資料

2013年4月21日

2013新卒のWeb系エンジニアが実際に読んでいるプログラミング入門書籍まとめ

See-ming Lee 李思明 SML cc
個人的にリストをつくっていたので、ついでに公開しておこうと思います。

エンジニア・プログラマとしての心構え的な本も並べようか迷ったけど、人の好みで大きく分かれるので止めときます。技術者として必要そうな「入門書」をリストアップしておこうと思います。

デザイナーの人はこちらもどうぞ
これからWebデザインの勉強を始めるのに役立つ書籍・資料まとめ 2012年度前期版

1. 最初に読む本

平成25年度 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室 (情報処理技術者試験)

 
この本は、IPAの基本情報技術者試験の解説書。この本を通して、Webサービス開発やソフトウェア開発、システム開発をする上で基本となる知識をざっと把握しておくと良い感じ。試験自体は簡単なので、資格がほしい人は挑戦してみるといいかも。

2. プログラミング入門書籍 (Java)

Java言語プログラミングレッスン 第3版(上)
Java言語プログラミングレッスン 第3版(下)

 
開発言語がJavaな人用。他の言語でやりこんでいるものがあれば、上巻はさっさと終わらせて、下巻を読むといいかも。プログラミングテクニックみたいなのはあんまり書かれてなくて、基本的なこと(制御構造とかクラスとか)が初心者目線で分かりやすく書かれてる。言語仕様の細かいことが知りたい人は、この本に文句を言う暇があればJavadocを読みましょう。

3. プログラミング入門書籍 (ruby)

たのしいRuby 第3版

 
開発言語がrubyな人用。たのしくプログラミングできる本。これも基本的なことが分かりやすく解説されてる。PHP, rubyといったLL (軽量プログラミング言語) はJavaと違う部分がかなりあって、使い方のコツがあるから、LLをやったことない場合はしっかり読んでおくといいかも。

4. プログラミング入門書籍 (Javascript)

パーフェクトJavaScript (PERFECT SERIES 4)

 
Java, PHPないしrubyなどでプログラミングの勉強をしてから読む本。Javascript+jQueryで軽くAjaxするだけなら、オンラインドキュメントを読めばできると思う。ただ、もう一歩先にいくなら、JSそのものの勉強をして、その特殊性 (プロトタイプベース、クロージャ、非同期等) を理解しておく必要がある。この本は、すごく丁寧かつ実践的に解説されているので、ぜひ手に取ってほしい。

5. SQL入門書籍

改訂新版 反復学習ソフト付き SQL書き方ドリル (WEB+DB PRESS plusシリーズ)

 
SQLはリレーショナルデータベース管理システム (RDBMS) を操作するのに使われるDSLで、要はデータベースを使う人は必ず勉強しなきゃいけないってことですね。つまりWeb系の人は避けて通れない訳です。この本は簡単で分かりやすいのでおすすめですう。

6. インターネット・ネットワーク入門書籍

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

 
TCP/IPのすべての本。これだけあればいい。ネットワーク周りは、実際に自分でサーバーを運用してみた方が勉強になることが多いかも。

7. フレームワーク入門書籍

SpringによるWebアプリケーションスーパーサンプル 第2版
Ruby on Rails 3 アプリケーションプログラミング
はじめてのNode.js -サーバーサイドJavaScriptでWebアプリを開発する-

 
Webアプリケーションフレームワークの入門書。Javaな人はSpringの本、rubyな人にはRailsの本を読むことになるんだろうけど、おすすめするならこの辺りかなあ。Railsの本はソフトバンククリエイティブからも出てるけど (Rails3レシピブック) 、こっちはリファレンス的に使うのがいい。Nodeのこの本は実は俺は読んだことないんだけど、周辺の13新卒が読んでたので挙げてみた。雰囲気は良さげ。

8. UI/UXも分かるエンジニアになりたい人が読む本

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

 
この本は、良い。すごく良い。デザインとか真面目に勉強したことなかったけど、この本を一通り読んでみて、「デザインは、その理由を説明できなきゃいけない」という言葉の意味が分かった。とりあえず立ち読みだけでもしてみてください。

9. 頭一つ抜けたエンジニアになりたい人が読む本

アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学 (世界標準MIT教科書)
増補改訂版Java言語で学ぶデザインパターン入門

 
プログラミングの入門書を一通り読んで、フレームワークとかも使ってみてからやるといいかも。いわゆる計算機科学を勉強してた人には馴染みの(苦しめられたに違いない)アルゴリズムとデータ構造、そしてデザインパターンの書籍です。

アルゴリズムとデータ構造に関する本は最近増えてきたけど、アルゴリズムイントロダクションは良書。この緑の本は第1巻で、第2巻もある。もっとやりたかったら挑戦してみるといいかも。俺は途中で飽きて挫折した。

デザインパターンは、ソフトウェア開発をする中で、繰り返し現れるようなよく使われるパターンを抽象化してまとめたもの。英語でいうところの構文集みたいなもの。たぶんそう。こちらも同様に下巻があるので、もっとやりたかったら挑戦してみるといいかも。さらに先へ行きたい人は、GoFっていう難しい本もあるけど、最初からこれをやると火傷するから止めといた方がいい。俺は指一本失いかけた。

ちなみに「アルゴリズムとデータ構造」はよく組みにして使われる単語で、両者は切っても切れない関係にある。

おわりに

この中で1冊だけ薦めるとしたら、インタフェースデザインの心理学かなぁ。使い心地のいいサービス、人にやさしいサービスが世の中にもっと増えるといいな、そういう視点をもった技術者がもっと増えるといいなって思います。そして、自分もそうありたいなと思います。

PerlやPHPはWeb公開の解説が充実してるから、入門書は必要ないんじゃないかなと思って載せてない。もうちょっと詳しく知りたいorしっかり勉強し直したいなってなってきたら、Perlの場合はラクダ本を、PHPの場合はパーフェクトPHPをおすすめします。

以上。まとめ終わり。

2013年2月27日

UbuntuにMongoDBをインストールする手順

MongoDBのドキュメントを読めばいいんだけど、自分用に日本語でメモしておく。


最新安定版のパッケージは
  • mongodb-10gen
からインストールする。2013年2月27日現在にインストールしたところ、2.2.3がインストールされた。



1. パッケージ管理システム (APT) の設定


UbuntuはMongoDBのリポジトリへのアドレスを知らないので、それを設定ファイルに書いてやる。

まず、リポジトリの公開鍵を手に入れる。以下のコマンドをコンソールで実行する。
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

続いて、/etc/apt/sources.list.d/10gen.listをエディタで開き(存在しないはずなので新規作成)、以下1行を書き込んで保存。
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen

次のコマンドを実行して、リポジトリを更新する。
sudo apt-get update

次のコマンドを実行して、MongoDBをインストールする。
sudo apt-get install mongodb-10gen

2. 設定ファイル

設定ファイルは /etc/mongodb.conf に、コントロールスクリプトは /etc/init.d/mongodb に置かれている。

3. MongoDBの実行

以下のコマンドを実行して、MongoDBのプロセスを開始する。
sudo service mongodb start

以下のコマンドを実行して、MongoDBのプロセスを停止する。
sudo service mongodb stop

以下のコマンドを実行して、MongoDBのプロセスを再起動する。
sudo service mongodb restart

2013年1月8日

nvmを使ってUbuntuにNode.jsとnpmをインストール

Nodeのバージョン管理システムであるnvmを使って、UbuntuにNodeとnpmをインストールする。


.bashrcに '. ~/.nvm/nvm.sh' を追加しておくと便利。

nvm lsでインストールしたバージョンの一覧が表示される。
nvm useでバージョンの切り替えができる。
'nvm use 0.8' のように使う。
Related Posts Plugin for WordPress, Blogger...