ansible触ってみた。

先日参加したPyConでも講演されていたansibleというサーバー構築自動かツールを触ってみました。

http://www.slideshare.net/takushimizu/ansible-26200860

以下のサイトを参考にしました。
Ansible Tutorial

その他サーバー構築自動化ツールとして以前chefを使ってみたときと同様に、今回もvagrantを使ってみました。便利。

実際の業務でこのようなツールを使うことはまだないけど、少しずつキャッチアップしていきたいですね。



ファイナライザとIDisposableインタフェース(C#)

ファイナライザとかIDisposableインタフェースを使ったメモリ管理について、

フローチャート書いたら理解が深まったのでメモを残しておきます。
(参考書籍:Effective C#

まずは確認

プログラミングをしていると必ず学ぶメモリ管理。
ちゃんと管理しないとメモリが足りなくなる事があります。

C#のオブジェクトのおおくはGC(ガベージコレクタ)によって管理されていますが、例のごとく管理対象外オブジェクトがあります。
(例えばDB接続オブジェクトだったり)

そんなGCが管理しないオブジェクトは非マネージリソース(アンマネージリソース)って呼ばれてたりします。

そこで非マネージリソースを制御するためにC#では

  1. ファイナライザ
  2. IDisposableインタフェース

という2つの機能を用意しています。C#ではファイナライザをデストラクタとも呼びます。


今回、このファイナライザとIDisposableインタフェースを併せて実装することで良いメモリ管理ができるという話です。(むしろ王道っぽい)

問題


そもそもGCがファイナライザを呼びます。
ファイナライザが呼ばれるタイミングはオブジェクトがガベージとなった後であり
そのタイミングはわかりません。
つまり不要なオブジェクトがより長い期間メモリ上に残ってしまう問題が発生します。


そこで、ファイナライザとIDisposableをうまく使ってプログラマはメモリ解放を解決しましょう、というわけです。

Disposeパターン

本題のDisposeパターンですが、
ファイナライザが先に呼ばれても、Disposeメソッドが先に呼ばれても、
正しくメモリを解放しようという仕組みだと理解しました。

今回簡単なフローチャートを作ってみました。

ファイナライザ(デストラクタ)とDisposeメソッドの両方とも「メモリ解放処理」を呼んでいるところが味噌だと思います。

ファイナライザが呼ばれる前にDispose()が呼ばれる場合


Dispose()が呼ばれる前にファイナライザが呼ばれる場合


メモリ解放処理

具体的なメモリ解放のフローチャートは以下のようになります。

Disposeメソッドから呼ばれたときは、マネージリソースと非マネージリソースが残っているので両方解放するけど、ファイナライザから呼ばれたときは非マネージリソースだけ解放しています。
これはファイナライザが呼ばれるとマネージリソースはGCで自動的に解放されるからだと考えられます。

こんな風にファイナライザとIDisposableインタフェースを使う事で正しくメモリ管理が出来るよ、という事でした。他のJavaPythonRubyなんかはどんなメモリ管理しているのかも気になるので、あとで調べてみよ。(もしくは教えて頂けると嬉しいですw)
普段なかなか見ないメモリですが、少しでも理解を深めてプログラミングに取り組みたいです。

フローチャート作成にはblockdigを使いました。

DjangoとRails

徒然。

RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版

久しぶりにRuby on Railsを触ってみたいと思ってdotinstallで勉強してみました。

Rails講座だけで46動画あるにも関わらず、1動画3分程度なのと以前環境構築を済ませていたのでサクサクと2日で終了。(初めてやる人はもしかしたら環境構築で手間取るかも)

RailsDjangoもそうだけど、仕事では使ったことがなく独学で進めているとどうしても学習効率が悪い。しかし、dotinstallsharewisのような学習サイトが多くリリースされたことで「学ぶ」という事が効率的に行える便利な時代だなと思います。

ところで、DjangoRailsどっちが使いやすいのか

  1. コードの記述量
  2. バリデーション機能
  3. 日本語ドキュメント

を考えたら、くやしいけどRails便利だなーと思った次第です。

Django + Heroku + TwitterBootstrapでランディングページを作る

こんにちは。

簡単に作れるランディングページを作りました。django-landing(GitHub)


リーンスタートアップや顧客開発では『ユーザーの意見を聞きながらサービスを開発する』なんて手法を提唱していますが、ユーザーの意見を聞くための手段としてもちろんWEBも含まれます。

そんなわけで今回、ユーザーとのチャネル構築のためのwebサイトテンプレートを作ってみました。
DjangoとTwitterbootstrapで構築してあって、一応Herokuでも動かせます。リーン手法的な立場から考えても、ムダを省いたサービス開発の一助になれればと思います。

使い方はREADMEを参照してください。django-landing(GitHub)

ドメイン取得やセキュリティ構築は各自で行ってね


Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング

ただの社会人が初めてチームでサービスを作って気づいた3つの事

半年前からut-gymという勉強会に参加して7名チームのチームリーダーとしてサービスを開発しました。
そして、作っているサービスがついにβテストまでこぎつけました。

Henerico(ヘネリコ)は薬の服用支援サービスです。現在テストユーザを募集しています!
http://demo.henerico.com

まだまだ開発中なのですが、薬やサプリメントを飲んでいる方は是非使ってみてください。
感想はこちらまでお気軽に。


このエントリーではただの社会人がいろいろな人を巻き込んでウェブサービスを作りながら、
なんとかリーダーとしてやってきたときに気づいた事を今回は3点挙げたいと思います。
当たり前の事ばかりかもしれませんが、何かの参考になれれば幸いです。

1. 環境って重要!

1つ目は、「優秀な人が集まるところに身を置くことが重要」だということです。
Ut StartUp Gymに集まった人たちはとても優秀な方が多く、Henericoプロジェクトメンバーも優秀な人ばかりです。
そしてUT Startup Gymには作業場所や開発のサポートをしてもらいとても助かりました。
場所提供をしてくださった松尾研究室様、オーマ株式会社様ありがとうございます!
運営の飯塚さん良い人!amachangさん良い人!
http://ut-gym.jp/events/002.html

2. ソーシャルじゃなくてもいい!

2つ目は、「ソーシャルは必須ではない」ということを学びました。

サービスを考え始めたころは『やっぱりfacebooktwitterはマストで、どんどん共有しよう!』と時流の思考をしていました。

しかし、健康などのセンシティブな分野の情報はなかなか共有することが難しいため、ソーシャル性を持たせるかどうかチーム内で議論が集中しました。
結局は原点に立ち返り、最初はあくまで「服用忘れを防止する」のが目的であって、ソーシャル性は必ずしも必須ではないことに気がつきました。

ただし、ユーザーから「twitterfacebookとの連携がほしい」という声が多くあったら対応しようと思っています。

3. メンバーの特性を活かせ!

3つ目は、「個人の『やりたい事』より『能力が活きる事』を割り振ったほうがいい」という事です。

初めのうちは、プログラミングを希望する人にコーディング作業を担当してもらいました。
「やりたい事」をやらせてあげたかったのです。そしてみんなで一緒に作ろうと思い努力しました。

しかし過度に不慣れな作業を振った結果、学習コストが高くなってしまい進捗が進まない事態になりました。

結局、「やりたい事」より「個人の能力が活きる事」にシフトした結果、順調に作業が進むようになりました。(当然ですが)
皆に申し訳ない気持ちを抱いていたある時、メンバーの1人から「やりたい事で貢献できないより、自分が得意な事で貢献できるので精神的に楽だ」という意見がありました。

特に今回のようなスタートアップ系では、先ず出来ることを割り振ってスピードを出し、合い間で「やりたい事」をやるのが良いと感じました。

※最近では徐々に力がついてきたので、「やりたい事」を増やせています。


最後に

以上3点挙げましたが、世の中的にはきっとどれも当たり前のことだと思います。
簡単に言えばリーダーは、環境選び、サービスの特性、適材適所を考えようということです。
しかし、自分が主体的に動いて経験することで、その難しさや重要さがよくわかりました。

そして最後に、テストユーザ募集中です!(大事なことなので2度言いました)
http://demo.henerico.com

テスト中ですがどんどん改良していってますので、楽しみにしていてください!
アンケートサイトで感想もどしどしお待ちしています。

Tracの他にRedmineを入れてみたので、導入手順をとりあえずメモ。

個人的にはRedmineよりTracのUIの方が好き。

RedmineRubyで動いています。
なのでRubyをインストールする必要があるのですが、Ruby1.9系には対応していないので注意が必要です。
他のバージョン情報は以下を参照してください。バージョン大事(英語のwiki通りにやったらうまくいった)
http://www.redmine.org/projects/redmine/wiki/RedmineInstall

導入環境・バージョン

ActiveRuby(http://www.artonx.org/data/asr/)からRuby1.8.7インストーラをダウンロードして、インストールする

環境変数のPathへruby/binのパスを追加して再起動する(私の環境ではC:\Program Files (x86)\ruby-1.8\bin)

管理者権限(Windows7特有?)でコマンドプロンプトを開き実行

gem install rails --version=2.3.11

続いて実行

gem install rack --version=1.1.1

更に実行

gem install -v=0.4.2 i18n

最後に

gem install mysql

下記サイトからlibmysql.dllをダウンロードして、ruby/binの下に配置する
http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll

下記サイトからRedmine(1.2.2)をダウンロードし、解凍したものを適当な場所に配置する(自分はC:\RoR\redmineとした)
http://rubyforge.org/frs/?group_id=1850

redmineで使用するデータベース接続設定を編集するために、C:\RoR\redmine\config\database.yml.exampleをdatabas.ymlにする。同ファイルの、productionセクションにあるdatabase、username、passwordを指定する。(ここで指定したデータベース名、ユーザー名、パスワードは次の作業で作成するデータベースとユーザーとに一致させる必要がある)
MySqlのポートがデフォルト3306以外の場合は「port: nnnn」の項目を追加すること。(MySqlのポートはログイン後「status」コマンドで確認可能)

データベースを作成する(redmineデータベース)

create database redmine character set utf8;

ユーザーを作成し、権限を与える

create user 'redmine'@'localhost' identified by 'password';

権限付与

grant all privileges on redmine.* to 'redmine'@'localhost';

もし文字コードでエラーが発生したなら、MySql文字コードがutf8以外ならmy.iniファイルでデフォルト文字コードをutf8にすることで解決するかもしれない。

カレントディレクトリをredmineフォルダへ移動して

rake generate_session_store

を実行、続いて

rake db:migrate RAILS_ENV="production"
rake load_default_data RAILS_ENV="production"

と実行する。言語を聞かれるので「ja」と入力しEnter

最後にredmineを起動

ruby script/server -e production

あとはApacheが起動した状態で「http://localhost:3000」に接続してRedmineが表示できれば一先ず完了。

推奨されているオプションの設定がまだ残っているが、それはまた今度。

Kinect SDK Beta 1 refresh

川西さんの記事
Kinect for Windows SDK beta 1 refresh のリリース – 川西 裕幸のブログ

特に変わったわけではないようだが、
デモが増えていたので紹介。

Flame On! Mercury Particle Engine and Kinect | Coding4Fun Kinect Projects | Channel 9

音声で処理を変更して、人体に描画しているようです。