<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Groove Labo</title>
	<atom:link href="http://labo.opengroove.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://labo.opengroove.com/blog</link>
	<description>株式会社オープングルーヴの開発者のブログ</description>
	<lastBuildDate>Wed, 30 Jun 2010 03:59:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CakePHP で連結テーブルのモデルは先に宣言すること</title>
		<link>http://labo.opengroove.com/blog/2010/06/30/cakephp-%e3%81%a7%e9%80%a3%e7%b5%90%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e3%81%af%e5%85%88%e3%81%ab%e5%ae%a3%e8%a8%80%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8/</link>
		<comments>http://labo.opengroove.com/blog/2010/06/30/cakephp-%e3%81%a7%e9%80%a3%e7%b5%90%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e3%81%af%e5%85%88%e3%81%ab%e5%ae%a3%e8%a8%80%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 03:58:36 +0000</pubDate>
		<dc:creator>sugimoto</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=621</guid>
		<description><![CDATA[
sugimoto です。最近、CakePHPを使ってます。



しばらくRails を使っていたこともあり、わかりやすい所もある反面、衝撃的に違うところがあったりして試行錯誤な毎日です。



先日、連結テーブルに「並び順」カラムを持たせて、hasManyAndBelongsToなリレーションの順番をつけようとしたところ、うまく動きませんでした。



プロジェクトとユーザーを以下のようなテーブルで関連つけていました



projects
users
projects_users



このとき、「各プロジェクトの参加者ごとに並び順を設定したい」という要望があり、 projects_users に position カラムを持たせて並び順を設定することにしました。



positionカラムの更新をするために ProjectsUser という中途半端なmodel クラスを作ったところ、問題発生。



projects_controller のuses 句で ProjectsUser を設定しているにもかかわらず、ProjectsUser の関数が呼べず、controller内での $this->ProjectsUser の実体がなぜか AppModel となっていました。



AppController など、ソースを確認したところ、controller のイニシャライズ時、以下のようなロジックでした。



  Projectモデルのインスタンス を作成
  Projectモデルで設定されているリレーションに該当するモデルのインスタンスを作成(Userなど)
  リレーションテーブルを扱うのインスタンス ProjectsUserを作成
  その際、デフォルト実装である AppModel のインスタンスとして作成
  上記作成したインスタンスはすべてキャッシュ
  ProjectsUserを作成するが、すでにキャッシュされているためそれを使用



つまり、上記処理がcontroller の uses句内で宣言された順に処理されているため、ProjectsUserをロードするとき、先に処理したProjectモデルのリレーションとして作成されたProjectsUserが優先されていたわけです。


今日の格言


リレーショナルテーブルのモデルを作ったら、uses 句内では必ず先に宣言すること。


ソフトウェアエンジニアのためのバグトラッキングシステム : Ciklone



ソフトウェアエンジニアのためのバグトラッキングシステム
]]></description>
			<content:encoded><![CDATA[<p>
sugimoto です。最近、CakePHPを使ってます。
</p>

<p>
しばらくRails を使っていたこともあり、わかりやすい所もある反面、衝撃的に違うところがあったりして試行錯誤な毎日です。
</p>

<p>
先日、連結テーブルに「並び順」カラムを持たせて、hasManyAndBelongsToなリレーションの順番をつけようとしたところ、うまく動きませんでした。
</p>

<p></p>
プロジェクトとユーザーを以下のようなテーブルで関連つけていました


<pre>
projects
users
projects_users
</pre>

<p>
このとき、「各プロジェクトの参加者ごとに並び順を設定したい」という要望があり、 projects_users に position カラムを持たせて並び順を設定することにしました。
</p>

<p>
positionカラムの更新をするために ProjectsUser という中途半端なmodel クラスを作ったところ、問題発生。
</p>

<p>
projects_controller のuses 句で ProjectsUser を設定しているにもかかわらず、ProjectsUser の関数が呼べず、controller内での $this->ProjectsUser の実体がなぜか AppModel となっていました。
</p>

<p>
AppController など、ソースを確認したところ、controller のイニシャライズ時、以下のようなロジックでした。
</p>

<ol>
  <li>Projectモデルのインスタンス を作成</li>
  <li>Projectモデルで設定されているリレーションに該当するモデルのインスタンスを作成(Userなど)</li>
  <li>リレーションテーブルを扱うのインスタンス ProjectsUserを作成</li>
  <li>その際、デフォルト実装である AppModel のインスタンスとして作成</li>
  <li>上記作成したインスタンスはすべてキャッシュ</li>
  <li>ProjectsUserを作成するが、すでにキャッシュされているためそれを使用</li>
</ol>

<p>
つまり、上記処理がcontroller の uses句内で宣言された順に処理されているため、ProjectsUserをロードするとき、先に処理したProjectモデルのリレーションとして作成されたProjectsUserが優先されていたわけです。
</p>

<h4>今日の格言</h4>

<p>
リレーショナルテーブルのモデルを作ったら、uses 句内では必ず先に宣言すること。
</p>

<h3><span style="color: #999999;">ソフトウェアエンジニアのためのバグトラッキングシステム : Ciklone</span></h3>

<p><a title="ソフトウェアエンジニアのためのバグトラッキングシステム" href="http://ciklone.com/"><img class="alignnone" title="ソフトウェアエンジニアのためのバグトラッキングシステム" src="http://www.opengroove.com/images/ciklone-banner.png" alt="ソフトウェアエンジニアのためのバグトラッキングシステム" width="224" height="50" /></a></p>

<p><a style="color: #999999;" href="http://ciklone.com/" title="ソフトウェアエンジニアのためのバグトラッキングシステム">ソフトウェアエンジニアのためのバグトラッキングシステム</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2010/06/30/cakephp-%e3%81%a7%e9%80%a3%e7%b5%90%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e3%81%af%e5%85%88%e3%81%ab%e5%ae%a3%e8%a8%80%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActiveRecord の conditions を作成するためのクラスを作ってみた</title>
		<link>http://labo.opengroove.com/blog/2010/06/28/activerecord-%e3%81%ae-conditions-%e3%82%92%e4%bd%9c%e6%88%90%e3%81%99%e3%82%8b%e3%81%9f%e3%82%81%e3%81%ae%e3%82%af%e3%83%a9%e3%82%b9%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f/</link>
		<comments>http://labo.opengroove.com/blog/2010/06/28/activerecord-%e3%81%ae-conditions-%e3%82%92%e4%bd%9c%e6%88%90%e3%81%99%e3%82%8b%e3%81%9f%e3%82%81%e3%81%ae%e3%82%af%e3%83%a9%e3%82%b9%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 03:41:22 +0000</pubDate>
		<dc:creator>morimoto</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=611</guid>
		<description><![CDATA[どうもお久しぶりです。

morimotoです。

今日は複雑なActiveRecordの条件句を作成する際に（もしかしたら）楽になるのではないかと思いconditionを生成するクラスを作ってみました。


  class ARCond
    module OPERATION
      EQUAL            = '='
      NOT_EQUAL        = ''
      IN       [...]]]></description>
			<content:encoded><![CDATA[<p>どうもお久しぶりです。</p>

<p>morimotoです。</p>

<p>今日は複雑なActiveRecordの条件句を作成する際に（もしかしたら）楽になるのではないかと思いconditionを生成するクラスを作ってみました。</p>

<pre>
  class ARCond
    module OPERATION
      EQUAL            = '='
      NOT_EQUAL        = '<>'
      IN               = 'IN'
      GREATER          = '>'
      GREATER_OR_EQUAL = '>='
      LESS             = '< '
      LESS_OR_EQUAL    = '<='
    end

    attr_reader :conditions, :parameters, :separator, :table_name

    def initialize(separator="AND", table_name=nil)
      @conditions = []
      @parameters = []
      @separator  = separator
      @table_name = table_name
    end

    # column = ?
    def equal(column, value, table=nil)
      add(column, value, OPERATION::EQUAL, table)
    end
    # column <> ?
    def not_equal(column, value, table=nil)
      add(column, value, OPERATION::NOT_EQUAL, table)
    end
    # column IN (?,?,?...)
    def in(column, value, table=nil)
      add(column, value, OPERATION::IN, table)
    end
    # column > ?
    def greater(column, value, table=nil)
      add(column, value, OPERATION::GREATER, table)
    end
    # column >= ?
    def greater_or_equal(column, value, table=nil)
      add(column, value, OPERATION::GREATER_OR_EQUAL, table)
    end
    # column < ?
    def less(column, value, table=nil)
      add(column, value, OPERATION::LESS, table)
    end
    # column <= ?
    def less_or_equal(column, value, table=nil)
      add(column, value, OPERATION::LESS_OR_EQUAL, table)
    end

    def << (other)
      cond = nil
      param = []
      if other.kind_of? ARCond
        c = other.build
        cond = c.delete_at(0)
        param = c
      elsif other.kind_of? String
        cond = other
      elsif other.kind_of? Array
        cond = other.delete_at(0)
        param = other
      end
      unless cond.blank?
        @conditions << cond
        @parameters.concat(param)
      end
      return self.build
    end

    # [conditions, param, param, param,...]
    def build
      [join_conditions].concat(@parameters)
    end

    private
    def join_conditions
      sep = " #{@separator} "
      "(#{@conditions.join(sep)})"
    end

    def column_fullname(column, table=nil)
      unless column =~ /^[\w]+\.[\w]+$/
        if table_name = table.blank? ? @table_name : table
          return "#{table_name}.#{column}"
        end
      end
      column
    end

    def add(column, value, operation, table=nil)
      parts = [column_fullname(column, table), operation]
      param = [value].flatten
      parts << ((operation == OPERATION::IN) ? "(#{param.map{'?'}.join(',')})" : "?")
      self << [parts.join(' ')].concat(param)
    end
  end
</pre>

<p>使い方の例）</p>

</pre><pre>
# 基本スタイル
c1 = ARCond.new("AND")
c1.equal("col1", true)
  # => ["(col1 = ?)", true]
c1.not_equal("col2", nil)
  # => ["(col1 = ? AND col2 <> ?)", true, nil]
c1.in("col3", [31,32,33])
  # => ["(col1 = ? AND col2 <> ? AND col3 IN (?,?,?))", true, nil, 31, 32, 33]



# 連結文字を変更する
c2 = ARCond.new("OR")

# 指定した連結文字で結合されていく
c2.greater("col4", 100)
  # => ["(col4 > ?)", 100]
c2.less("col4", 200)
  # => ["(col4 > ? OR col4 < ?)", 100, 200]

# 配列みたいに追加していく
c1 << c2
  # => ["(col1 = ? AND col2 <> ? AND col3 IN (?,?,?) AND (col4 > ? OR col4 < ?))", true, nil, 31, 32, 33, 100, 200]



# 引数なしはANDで連結
c3 = ARCond.new()

# いつもどおりの配列の conditions もくっつけれる
c3 << ["col5 = ? AND col6 IN (?,?)", 11,22,33]
  # => ["(col5 = ? AND col6 IN (?,?))", 11, 22, 33]

# 任意文字列もくっつけれる
c3 < < "col7 > col8"
  # => ["(col5 = ? AND col6 IN (?,?) AND col7 > col8)", 11, 22, 33]


# テーブル名を指定する
c4 = ARCond.new("OR", "sample")

# カラム名の頭にテーブル名が付与される
c4.greater_or_equal("col9", 300)
  # => ["(sample.col9 >= ?)", 300]
c4.less_or_equal("col9", 400)
  # => ["(sample.col9 >= ? OR sample.col9 < = ?)", 300, 400]

# くっつけるときにテーブル名を指定する
c4.equal("col10", false, "banana")
  # => ["(sample.col9 >= ? OR sample.col9 < = ? OR banana.col10 = ?)", 300, 400, false]

c3 << c4
  # => ["(col5 = ? AND col6 IN (?,?) AND col7 > col8 AND (sample.col9 >= ? OR sample.col9 < = ? OR banana.col10 = ?))", 11, 22, 33, 300, 400, false]

c1 << c3
  # => ["(col1 = ? AND col2 <> ? AND col3 IN (?,?,?) AND (col4 > ? OR col4 < ?) AND (col5 = ? AND col6 IN (?,?) AND col7 > col8 AND (sample.col9 >= ? OR sample.col9 < = ? OR banana.col10 = ?)))", true, nil, 31, 32, 33, 100, 200, 11, 22, 33, 300, 400, false]


# 最終的に使いたいタイミングで build してあげたらよい
c1.build
  # => ["(col1 = ? AND col2 <> ? AND col3 IN (?,?,?) AND (col4 > ? OR col4 < ?) AND (col5 = ? AND col6 IN (?,?) AND col7 > col8 AND (sample.col9 >= ? OR sample.col9 < = ? OR banana.col10 = ?)))", true, nil, 31, 32, 33, 100, 200, 11, 22, 33, 300, 400, false]

</pre>

<p>作っておいてなんですが、テーブルが複数あったり、集計クエリが絡んできたりと、複雑になればなるほど自分でwhere句を書いたほうが早い気がします。</p>

<p>以上、morimoto でした。</p>
</pre>]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2010/06/28/activerecord-%e3%81%ae-conditions-%e3%82%92%e4%bd%9c%e6%88%90%e3%81%99%e3%82%8b%e3%81%9f%e3%82%81%e3%81%ae%e3%82%af%e3%83%a9%e3%82%b9%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>オープンソースソフトウェアの育て方</title>
		<link>http://labo.opengroove.com/blog/2010/05/24/%e3%82%aa%e3%83%bc%e3%83%97%e3%83%b3%e3%82%bd%e3%83%bc%e3%82%b9%e3%82%bd%e3%83%95%e3%83%88%e3%82%a6%e3%82%a7%e3%82%a2%e3%81%ae%e8%82%b2%e3%81%a6%e6%96%b9/</link>
		<comments>http://labo.opengroove.com/blog/2010/05/24/%e3%82%aa%e3%83%bc%e3%83%97%e3%83%b3%e3%82%bd%e3%83%bc%e3%82%b9%e3%82%bd%e3%83%95%e3%83%88%e3%82%a6%e3%82%a7%e3%82%a2%e3%81%ae%e8%82%b2%e3%81%a6%e6%96%b9/#comments</comments>
		<pubDate>Mon, 24 May 2010 04:49:34 +0000</pubDate>
		<dc:creator>syoji</dc:creator>
				<category><![CDATA[ソフトウェア開発]]></category>
		<category><![CDATA[読書]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=568</guid>
		<description><![CDATA[

プロジェクトが失敗に終わる可能性は非常に高く、 おそらく90–95%くらい

「オープンソースソフトウェアの育て方」という書籍があります。副題にフリーソフトウェアプロジェクトを成功させるコツとあるように、著者がオープンソースプロジェクトでの経験を元に実例を交えて説明されています。バージョン管理システムで有名なSubversionプロジェクトでの実際の経験から書かれています。
実践的な内容なので、ぜひソフトウェアエンジニアの方には読んで欲しい内容です。
（技術的な側面よりもオープンソースプロジェクトをうまく運営するための考え方やプロジェクト運営方法についての説明が多くなっています。）

さらに、うれしいことにウェブで全文を公開しているためだれでも読むことが出来ます（当然、日本語で）300ページにもなる専門的でためになる文書を公開された作者の方と翻訳者の方に感謝しなければいけません。

本の内容で特にビジネスアプリケーション開発の困難な点と共通する部分が多く（同じソフト開発なので当たり前ですが）さらに多くの課題に対処するための方法も参考になります。
「3. 技術的な問題」で紹介されているツールとその運用方法は、ビジネスアプリケーションの現場でも十分有効に使えるので、新入社員などに読ませるのも良いと思います。紹介されているツール群は若干古いですが、どのようなツールを、どのような場面で、どのように使っているのかを知る上でとても分かりやすいです。

また、「6.コミュニケーション」などは自分たちの開発でも学ぶべきコトが多いと思った部分で、読んでおくべき章だと思います。


     書いたことがすべて
    陥りがちな罠
    付録C.なんで自転車置場の色まで気にしなきゃならないの？


ソフトウェアエンジニアに求められる能力として、はじめに思いついたことは、「文章を作成する力」です。コミュニケーション能力や提案力、プログラミング能力などよく言われる能力も必要であると思いますが、自分の考えを正確に正しく伝えるための書く力はインターネットが仕事に欠かせないツールになったことで重要であると考えています。

そのためには書く（まとめる）内容以前に考える力が重要になってきますが。。。

http://subversion.tigris.org/
]]></description>
			<content:encoded><![CDATA[<div style="float:right;"><a href="http://www.amazon.co.jp/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E8%82%B2%E3%81%A6%E6%96%B9-Karl-Fogel/dp/4873114128"><img class="alignright size-full wp-image-599" title="オープンソースソフトウェアの育て方" src="http://labo.opengroove.com/blog/wp-content/uploads/2010/05/20100507.jpg" alt="オープンソースソフトウェアの育て方" width="210" height="210" /></a></div>

<blockquote>プロジェクトが失敗に終わる可能性は非常に高く、 おそらく90–95%くらい</blockquote>

<p>「オープンソースソフトウェアの育て方」という書籍があります。副題にフリーソフトウェアプロジェクトを成功させるコツとあるように、著者がオープンソースプロジェクトでの経験を元に実例を交えて説明されています。バージョン管理システムで有名な<a href="http://subversion.tigris.org/">Subversionプロジェクト</a>での実際の経験から書かれています。
実践的な内容なので、ぜひソフトウェアエンジニアの方には読んで欲しい内容です。
（技術的な側面よりもオープンソースプロジェクトをうまく運営するための考え方やプロジェクト運営方法についての説明が多くなっています。）</p>

<p>さらに、うれしいことにウェブで<a href="http://producingoss.com/ja/index.html">全文を公開</a>しているためだれでも読むことが出来ます（当然、日本語で）300ページにもなる専門的でためになる文書を公開された作者の方と翻訳者の方に感謝しなければいけません。</p>

<p>本の内容で特にビジネスアプリケーション開発の困難な点と共通する部分が多く（同じソフト開発なので当たり前ですが）さらに多くの課題に対処するための方法も参考になります。
「<a href="http://producingoss.com/ja/technical-infrastructure.html">3. 技術的な問題</a>」で紹介されているツールとその運用方法は、ビジネスアプリケーションの現場でも十分有効に使えるので、新入社員などに読ませるのも良いと思います。紹介されているツール群は若干古いですが、どのようなツールを、どのような場面で、どのように使っているのかを知る上でとても分かりやすいです。</p>

<p>また、「<a href="http://producingoss.com/ja/communications.html">6.コミュニケーション</a>」などは自分たちの開発でも学ぶべきコトが多いと思った部分で、読んでおくべき章だと思います。</p>

<ul>
    <li><span class="sect1"> </span><a href="http://producingoss.com/ja/communications.html#you-are-what-you-write">書いたことがすべて</a></li>
    <li><a href="http://producingoss.com/ja/common-pitfalls.html">陥りがちな罠</a></li>
    <li><a href="http://producingoss.com/ja/bikeshed-full.html">付録C.なんで自転車置場の色まで気にしなきゃならないの？</a></li>
</ul>

<p>ソフトウェアエンジニアに求められる能力として、はじめに思いついたことは、「文章を作成する力」です。コミュニケーション能力や提案力、プログラミング能力などよく言われる能力も必要であると思いますが、自分の考えを正確に正しく伝えるための書く力はインターネットが仕事に欠かせないツールになったことで重要であると考えています。</p>

<p>そのためには書く（まとめる）内容以前に考える力が重要になってきますが。。。</p>

<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">http://subversion.tigris.org/</div>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2010/05/24/%e3%82%aa%e3%83%bc%e3%83%97%e3%83%b3%e3%82%bd%e3%83%bc%e3%82%b9%e3%82%bd%e3%83%95%e3%83%88%e3%82%a6%e3%82%a7%e3%82%a2%e3%81%ae%e8%82%b2%e3%81%a6%e6%96%b9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>どこでもサーバー管理ができる iPhoneアプリ 「TouchTerm」</title>
		<link>http://labo.opengroove.com/blog/2010/05/06/%e3%81%a9%e3%81%93%e3%81%a7%e3%82%82%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e7%ae%a1%e7%90%86%e3%81%8c%e3%81%a7%e3%81%8d%e3%82%8b-iphone%e3%82%a2%e3%83%97%e3%83%aa-%e3%80%8ctouchterm%e3%80%8d/</link>
		<comments>http://labo.opengroove.com/blog/2010/05/06/%e3%81%a9%e3%81%93%e3%81%a7%e3%82%82%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e7%ae%a1%e7%90%86%e3%81%8c%e3%81%a7%e3%81%8d%e3%82%8b-iphone%e3%82%a2%e3%83%97%e3%83%aa-%e3%80%8ctouchterm%e3%80%8d/#comments</comments>
		<pubDate>Thu, 06 May 2010 06:35:51 +0000</pubDate>
		<dc:creator>sugimoto</dc:creator>
				<category><![CDATA[ZABBIX]]></category>
		<category><![CDATA[ツール]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Terminal]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=558</guid>
		<description><![CDATA[

sugimotoです。


Webサービスの運用ではサーバーやサービスの監視が欠かせないと思います。
オープングルーヴでも突然のサーバー停止や、サービス停止、定期処理の失敗などに備え、監視システムを使って障害発生時にはメール通知するようにしています。



GW中に出かける途中で、監視システムとして運用しているZABBIXから警告メールが飛んできました。



パソコンを持たずに出かけていて、長距離バスに乗っていたんですが、iPhoneにインストールしていたTouchTermを使いました。



TouchTermはiPhoneアプリとして動作するSSHターミナルです。
アプリケーション内で作成したSSHキーのパブリックキーをあらかじめサーバーにおいておくことで、サーバーにSSH経由でログインすることができます。



iPhoneの画面とキーでも十分にサーバー上のログや状況の確認が可能で、問題の箇所をすぐに特定、対応することができました。



iPhoneの画面とキーを使っての操作のため、長時間操作や大きな設定変更は難しいですが、緊急時の一時的な対応には十分使えるツールです。


ソフトウェアエンジニアのためのバグトラッキングシステム : Ciklone



ソフトウェアエンジニアのためのバグトラッキングシステム
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jbrink.net/touchterm/"><img src="http://labo.opengroove.com/blog/wp-content/uploads/2010/05/tt_graphic.gif" alt="tt_graphic" title="tt_graphic" width="196" height="193" class="alignright size-full wp-image-560" style="float: right;" /></a></p>

<p>sugimotoです。</p>

<p>
Webサービスの運用ではサーバーやサービスの監視が欠かせないと思います。
オープングルーヴでも突然のサーバー停止や、サービス停止、定期処理の失敗などに備え、監視システムを使って障害発生時にはメール通知するようにしています。
</p>

<p>
GW中に出かける途中で、監視システムとして運用しているZABBIXから警告メールが飛んできました。
</p>

<p>
パソコンを持たずに出かけていて、長距離バスに乗っていたんですが、iPhoneにインストールしていた<a href="http://www.jbrink.net/touchterm/">TouchTerm</a>を使いました。
</p>

<p>
TouchTermはiPhoneアプリとして動作するSSHターミナルです。
アプリケーション内で作成したSSHキーのパブリックキーをあらかじめサーバーにおいておくことで、サーバーにSSH経由でログインすることができます。
</p>

<p>
iPhoneの画面とキーでも十分にサーバー上のログや状況の確認が可能で、問題の箇所をすぐに特定、対応することができました。
</p>

<p>
iPhoneの画面とキーを使っての操作のため、長時間操作や大きな設定変更は難しいですが、緊急時の一時的な対応には十分使えるツールです。
</p>

<h3><span style="color: #999999;">ソフトウェアエンジニアのためのバグトラッキングシステム : Ciklone</span></h3>

<p><a title="ソフトウェアエンジニアのためのバグトラッキングシステム" href="http://ciklone.com/"><img class="alignnone" title="ソフトウェアエンジニアのためのバグトラッキングシステム" src="http://www.opengroove.com/images/ciklone-banner.png" alt="ソフトウェアエンジニアのためのバグトラッキングシステム" width="224" height="50" /></a></p>

<p><a style="color: #999999;" href="http://ciklone.com/" title="ソフトウェアエンジニアのためのバグトラッキングシステム">ソフトウェアエンジニアのためのバグトラッキングシステム</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2010/05/06/%e3%81%a9%e3%81%93%e3%81%a7%e3%82%82%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e7%ae%a1%e7%90%86%e3%81%8c%e3%81%a7%e3%81%8d%e3%82%8b-iphone%e3%82%a2%e3%83%97%e3%83%aa-%e3%80%8ctouchterm%e3%80%8d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ツールを使った情報共有#1（仕事で Wiki を使いたい）</title>
		<link>http://labo.opengroove.com/blog/2010/03/16/%e3%83%84%e3%83%bc%e3%83%ab%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e6%83%85%e5%a0%b1%e5%85%b1%e6%9c%891%ef%bc%88%e4%bb%95%e4%ba%8b%e3%81%a7-wiki-%e3%82%92%e4%bd%bf%e3%81%84%e3%81%9f%e3%81%84%ef%bc%89/</link>
		<comments>http://labo.opengroove.com/blog/2010/03/16/%e3%83%84%e3%83%bc%e3%83%ab%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e6%83%85%e5%a0%b1%e5%85%b1%e6%9c%891%ef%bc%88%e4%bb%95%e4%ba%8b%e3%81%a7-wiki-%e3%82%92%e4%bd%bf%e3%81%84%e3%81%9f%e3%81%84%ef%bc%89/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 05:44:46 +0000</pubDate>
		<dc:creator>syoji</dc:creator>
				<category><![CDATA[Wiki]]></category>
		<category><![CDATA[プロジェクト管理]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=530</guid>
		<description><![CDATA[社内での仕事術 #1

社内での仕事術について紹介したいと思います。
ソフトウェア開発は一つ一つの案件をプロジェクトとしてすすめるため、はじめにプロジェクトチームを作ります。

プロジェクトチームは提案内容や得意分野により主担当がかわります。
プロジェクトでは複数のメンバーが集まって仕事をすることになるため、情報共有はとても重要。

オープングルーヴではどのようにしているのか、ツールを使った情報共有#1として「Wikiを仕事で使う」について書きたいと思います。

Wikiとは「ウィキ」と言いますが、ウェブブラウザを使ってページの作成・編集ができるコンテンツサービスです。一人でメモ書きとして利用している方もいると思いますが、けっこう書込のためにページを開く。という動作が面倒になりがちということはあると思います。

弊社で利用する場合は、複数のメンバーでプロジェクトを進める上でガリガリ書き込みます。これはあるルールを決めているためですが、そのルールのおかげでWikiがなくてはならいツールになっています。

ルール : プロジェクトの成果物(中間成果物)はWikiで一元管理

Wikiのメリット


     会議をしながら議事録(画面を見ながらみんなで確認)
     顧客向けの議事録
     顧客との打合せで出来る議事録はWikiをPDF化やメールで共有
     設計書(技術メモ、検討メモ)、技術方式に対する他チームのコメント
     開発環境構築メモなど、開発に関わる情報源
     世代管理機能、ページ単位で履歴を確認し、追加された・削除されたがカラー表示される(下図)




などなど、メールでも同様のことはできますが、プロジェクトのポータルとして利用でき、大切な文書が埋もれない･･･(メールは探すのが大変)
プロジェクトメンバーで使うことで、ガリガリ更新され、すぐにWikiが必須の情報共有ツールになりました。

デメリットは&#8230;

しかし、良い面ばかりではないです。新しく加わったメンバーなどにとっては使ったことがないツールのため、慣れるまで大変かも知れません。
「Wikiを知らない人や初めて使う人にとって慣れ親しんだインターフェースではない。」ということです。ファイル名がない、特殊なフォーマット･･･

Wikiを仕事で使いたい人へ
セキュアで、1プロジェクト無料のcikloneを評価してください。
]]></description>
			<content:encoded><![CDATA[<h2>社内での仕事術 #1</h2>

<p>社内での仕事術について紹介したいと思います。
ソフトウェア開発は一つ一つの案件をプロジェクトとしてすすめるため、はじめにプロジェクトチームを作ります。</p>

<p>プロジェクトチームは提案内容や得意分野により主担当がかわります。
プロジェクトでは複数のメンバーが集まって仕事をすることになるため、情報共有はとても重要。</p>

<p><a href="http://www.opengroove.com/">オープングルーヴ</a>ではどのようにしているのか、ツールを使った情報共有#1として「Wikiを仕事で使う」について書きたいと思います。</p>

<p>Wikiとは「ウィキ」と言いますが、ウェブブラウザを使ってページの作成・編集ができるコンテンツサービスです。一人でメモ書きとして利用している方もいると思いますが、けっこう書込のためにページを開く。という動作が面倒になりがちということはあると思います。</p>

<p>弊社で利用する場合は、複数のメンバーでプロジェクトを進める上でガリガリ書き込みます。これはあるルールを決めているためですが、そのルールのおかげでWikiがなくてはならいツールになっています。</p>

<blockquote>ルール : プロジェクトの成果物(中間成果物)はWikiで一元管理</blockquote>

<h2>Wikiのメリット</h2>

<ul>
    <li> 会議をしながら議事録(画面を見ながらみんなで確認)</li>
    <li> 顧客向けの議事録</li>
    <li> 顧客との打合せで出来る議事録はWikiをPDF化やメールで共有</li>
    <li> 設計書(技術メモ、検討メモ)、技術方式に対する他チームのコメント</li>
    <li> 開発環境構築メモなど、開発に関わる情報源</li>
    <li> 世代管理機能、ページ単位で履歴を確認し、追加された・削除されたがカラー表示される(下図)</li>
</ul>

<p><div id="attachment_549" class="wp-caption aligncenter" style="width: 570px"><a href="http://labo.opengroove.com/blog/wp-content/uploads/2010/03/labo_blog_ciklone_wiki11.jpg"><img class="size-full wp-image-549 " title="Wikiによる備忘録・ルール" src="http://labo.opengroove.com/blog/wp-content/uploads/2010/03/labo_blog_ciklone_wiki11.jpg" alt="Wikiによる備忘録・ルール" width="560" height="329" /></a><p class="wp-caption-text">Wikiによる備忘録・ルール</p></div></p>

<p><div id="attachment_550" class="wp-caption aligncenter" style="width: 570px"><a href="http://labo.opengroove.com/blog/wp-content/uploads/2010/03/labo_blog_ciklone_wiki2.jpg"><img class="size-full wp-image-550 " title="Wikiの世代管理(履歴)" src="http://labo.opengroove.com/blog/wp-content/uploads/2010/03/labo_blog_ciklone_wiki2.jpg" alt="Wikiの世代管理(履歴)" width="560" height="329" /></a><p class="wp-caption-text">Wikiの世代管理(履歴)</p></div></p>

<p style="text-align: center;"></p>

<p>などなど、メールでも同様のことはできますが、プロジェクトのポータルとして利用でき、大切な文書が埋もれない･･･(メールは探すのが大変)
プロジェクトメンバーで使うことで、ガリガリ更新され、すぐにWikiが必須の情報共有ツールになりました。</p>

<h3>デメリットは&#8230;</h3>

<p>しかし、良い面ばかりではないです。新しく加わったメンバーなどにとっては使ったことがないツールのため、慣れるまで大変かも知れません。
「Wikiを知らない人や初めて使う人にとって慣れ親しんだインターフェースではない。」ということです。ファイル名がない、特殊なフォーマット･･･</p>

<blockquote>Wikiを仕事で使いたい人へ
セキュアで、1プロジェクト無料の<a href="http://ciklone.com/usage.html">ciklone</a>を評価してください。</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2010/03/16/%e3%83%84%e3%83%bc%e3%83%ab%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e6%83%85%e5%a0%b1%e5%85%b1%e6%9c%891%ef%bc%88%e4%bb%95%e4%ba%8b%e3%81%a7-wiki-%e3%82%92%e4%bd%bf%e3%81%84%e3%81%9f%e3%81%84%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IIS マネージャから FastCGI の設定を行う</title>
		<link>http://labo.opengroove.com/blog/2010/02/22/fastcgi-settings-with-iis-manager/</link>
		<comments>http://labo.opengroove.com/blog/2010/02/22/fastcgi-settings-with-iis-manager/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 04:21:17 +0000</pubDate>
		<dc:creator>omae</dc:creator>
				<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[IIS]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=520</guid>
		<description><![CDATA[こんにちわ。omae です。

さて、前回では IIS7 + FastCGI で PHP 5.3 を実行できるようにしました。

少し試しているうちに php のプロセス自体は 4 つまで増えるようになっている…ということに気づきました。
また当然ながらこの設定を変更する方法が用意されており、一つは %WINDIR%\system32\inetsrv\appcmd コマンドを用いるもので、もう一つは IIS マネージャから行うものです。

ここでは IIS マネージャから行う方法をやってみます。

手順

1. IIS 7.0 Administration Pack をインストール

Administration Pack : The Official Microsoft IIS Site からインストーラをダウンロードします。右のほうに Or, download x86 / x64 のような表記があるので実行環境に合ったものをダウンロードします。

ダウンロードしたらその MSI を実行してインストールします。

2. IIS マネージャを起動


IIS マネージャを起動すると FastCGI Settings アイコンが増えているのが確認出来ると思います。



3. FastCGI Settings を開く

FastCGI Settings アイコンを開くと設定されている FastCGI アプリケーションの一覧が表示されます。
一覧から設定したいアプリケーションのところで double click [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちわ。omae です。</p>

<p>さて、前回では <a href="/blog/2010/02/22/php-5-3-on-iis7-via-fastcgi/">IIS7 + FastCGI で PHP 5.3 を実行できる</a>ようにしました。</p>

<p>少し試しているうちに php のプロセス自体は 4 つまで増えるようになっている…ということに気づきました。
また当然ながらこの設定を変更する方法が用意されており、一つは <code>%WINDIR%\system32\inetsrv\appcmd</code> コマンドを用いるもので、もう一つは IIS マネージャから行うものです。</p>

<p>ここでは IIS マネージャから行う方法をやってみます。</p>

<h2>手順</h2>

<h3>1. IIS 7.0 Administration Pack をインストール</h3>

<p><a href="http://www.iis.net/expand/AdministrationPack">Administration Pack : The Official Microsoft IIS Site</a> からインストーラをダウンロードします。右のほうに <code>Or, download x86 / x64</code> のような表記があるので実行環境に合ったものをダウンロードします。</p>

<p>ダウンロードしたらその MSI を実行してインストールします。</p>

<h3>2. IIS マネージャを起動</h3>

<p>
IIS マネージャを起動すると FastCGI Settings アイコンが増えているのが確認出来ると思います。<br />
<img src="/blog/wp-content/uploads/2010/02/iis7-fastcgi-settings.png" />
</p>

<h3>3. FastCGI Settings を開く</h3>

<p>FastCGI Settings アイコンを開くと設定されている FastCGI アプリケーションの一覧が表示されます。
一覧から設定したいアプリケーションのところで double click すると設定が変更出来るようになっています。<br />
<img src="/blog/wp-content/uploads/2010/02/iis7-fastcgi-settings-2.png" />
</p>

<p>主に変更するのは MaxInstances (FastCGI ワーカープロセスの数) と InstanceMaxRequests (各ワーカープロセスの最大のリクエスト処理数。この値に到達するまでプロセスが再利用される) だと思います。</p>

<p>それ以外の設定の詳細は <a href="http://technet.microsoft.com/ja-jp/library/ee431554.aspx">IIS 7.0 コンフィギュレーション リファレンス &#8211; FastCGI アプリケーション &lt;application&gt;</a> に解説がありますので、これを確認しつつ必要であれば設定を行います。</p>

<h2>参考</h2>

<ul>
<li><a href="http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/">Using FastCGI to Host PHP Applications on IIS 7.0 : Host Applications on the Microsoft Web Platform : Running PHP Applications on IIS : The Official Microsoft IIS Site</a></li>
</ul>

<h3><span style="color: #999999;">ソフトウェアエンジニアのためのバグトラッキングシステム : Ciklone</span></h3>

<p><a title="ソフトウェアエンジニアのためのバグトラッキングシステム" href="http://ciklone.com/"><img class="alignnone" title="ソフトウェアエンジニアのためのバグトラッキングシステム" src="http://www.opengroove.com/images/ciklone-banner.png" alt="ソフトウェアエンジニアのためのバグトラッキングシステム" width="224" height="50" /></a></p>

<p><a style="color: #999999;" href="http://ciklone.com/" title="ソフトウェアエンジニアのためのバグトラッキングシステム">ソフトウェアエンジニアのためのバグトラッキングシステム</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2010/02/22/fastcgi-settings-with-iis-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IIS 7 + FastCGI で PHP 5.3 を実行する</title>
		<link>http://labo.opengroove.com/blog/2010/02/22/php-5-3-on-iis7-via-fastcgi/</link>
		<comments>http://labo.opengroove.com/blog/2010/02/22/php-5-3-on-iis7-via-fastcgi/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 03:05:30 +0000</pubDate>
		<dc:creator>omae</dc:creator>
				<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=493</guid>
		<description><![CDATA[こんにちわ。omae です。

今回は IIS 7 で PHP 5.3 を実行する環境が必要になったのでその手順を残しておきたいと思います。

作業しようとしてから気づいたのですが PHP 5.3 から isapi モジュールが廃止されていました。PHP 5.2 以前までは isapi モジュールで環境を作成していたのですが、廃止されてしまったものはしょうがありません。IIS 7 からは FastCGI が正式に対応しているので、こちらで設定することにします。

手順

1. PHP 5.3.1 をインストール

PHP For Windows: Binaries and sources Releases より今回は VC6 x86 Thread Safe (ZIP) を使うことにしました。この zip ファイルを C:\php に展開します。

ここでコマンドプロンプトを起動して C:\php\php-cgi.exe -h が実行できることを確認しておきます。実行すると以下のようなエラーが上がる場合は php.ini から extension=php_mssql.dll をコメントアウトします。SQL Server に接続する予定があるなら ntwdblib.dll を準備します。



無事に実行出来た場合:
C:\&#62;C:\php\php-cgi.exe -h
Usage: php [-q] [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちわ。omae です。</p>

<p>今回は IIS 7 で PHP 5.3 を実行する環境が必要になったのでその手順を残しておきたいと思います。</p>

<p>作業しようとしてから気づいたのですが PHP 5.3 から isapi モジュールが廃止されていました。PHP 5.2 以前までは isapi モジュールで環境を作成していたのですが、廃止されてしまったものはしょうがありません。IIS 7 からは FastCGI が正式に対応しているので、こちらで設定することにします。</p>

<h2>手順</h2>

<h3>1. PHP 5.3.1 をインストール</h3>

<p><a href="http://windows.php.net/download/">PHP For Windows: Binaries and sources Releases</a> より今回は <a href="http://windows.php.net/downloads/releases/php-5.3.1-Win32-VC6-x86.zip">VC6 x86 Thread Safe (ZIP)</a> を使うことにしました。この zip ファイルを C:\php に展開します。</p>

<p>ここでコマンドプロンプトを起動して <code>C:\php\php-cgi.exe -h</code> が実行できることを確認しておきます。実行すると以下のようなエラーが上がる場合は php.ini から <code>extension=php_mssql.dll</code> をコメントアウトします。SQL Server に接続する予定があるなら ntwdblib.dll を準備します。</p>

<p><img src="/blog/wp-content/uploads/2010/02/iis7-php-ntwdblib.png" /></p>

<p>無事に実行出来た場合:
<pre>C:\&gt;C:\php\php-cgi.exe -h
Usage: php [-q] [-h] [-s] [-v] [-i] [-f &lt;file&gt;]
       php &lt;file&gt; [args...]
  -a               Run interactively
  -b &lt;address:port&gt;|&lt;port&gt; Bind Path for external FASTCGI Server mode
  -C               Do not chdir to the script's directory
  -c &lt;path&gt;|&lt;file&gt; Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f &lt;file&gt;        Parse &lt;file&gt;.  Implies `-q'
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -q               Quiet-mode.  Suppress HTTP Header output.
  -s               Display colour syntax highlighted source.
  -v               Version number
  -w               Display source with stripped comments and whitespace.
  -z &lt;file&gt;        Load Zend extension &lt;file&gt;.
  -T &lt;count&gt;       Measure execution time of script repeated &lt;count&gt; times.
</pre></p>

<h3>2. IIS で FastCGI が使えるように設定します</h3>

<p>サーバーマネージャを起動して「Web サーバー (IIS)」の機能に「CGI」がインストール済みになっていることを確認します。
インストールされていない場合は「役割サービスの追加」からインストールします。</p>

<p><img src="/blog/wp-content/uploads/2010/02/iis7-cgi.png" /></p>

<h3>3. php.ini に fastcgi のための設定を行う</h3>

<p>php.ini を開いて次の設定に変更します。
<pre>fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo = 1
cgi.force_redirect = 0</pre>
</p>

<h3>4. IIS マネージャから PHP のハンドラを設定する</h3>

<p>
a. IIS マネージャを起動し、ハンドラマッピングを開きます。<br />
<img src="/blog/wp-content/uploads/2010/02/iis7-handler-mapping.png" />
</p>

<p>
b. 「モジュールハンドラの追加」を選択し、以下の要領で *.php に対して fastcgi による php の実行を設定します。<br />
<img src="/blog/wp-content/uploads/2010/02/iis7-add-php-handler.png" />
</p>

<h3>5. phpinfo.php にアクセスして確認</h3>

<p>C:\inetpub\wwwroot\phpinfo.php などに <code>&lt;?php phpinfo();</code> と書いたファイルを用意して、このファイルにブラウザからアクセスしてみます。<br />
<img src="/blog/wp-content/uploads/2010/02/iis7-phpinfo.png" />
</p>

<p>無事に phpinfo() が参照できれば、設定は完了です。</p>

<p>ついでにタスクマネージャを起動して FastCGI なので php-cgi.exe プロセスがいるか確認してみましょう。<br />
<img src="/blog/wp-content/uploads/2010/02/iis7-taskmgr.png" /><br />
ちゃんといますね。
</p>

<h2>参考</h2>

<ul>
<li><a href="http://www.php.net/manual/ja/install.windows.iis7.php">PHP: Microsoft IIS 7.0 以降 &#8211; Manual</a></li>
<li><a href="http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/">Using FastCGI to Host PHP Applications on IIS 7.0 : Host Applications on the Microsoft Web Platform : Running PHP Applications on IIS : The Official Microsoft IIS Site</a></li>
</ul>

<h3><span style="color: #999999;">ソフトウェアエンジニアのためのバグトラッキングシステム : Ciklone</span></h3>

<p><a title="ソフトウェアエンジニアのためのバグトラッキングシステム" href="http://ciklone.com/"><img class="alignnone" title="ソフトウェアエンジニアのためのバグトラッキングシステム" src="http://www.opengroove.com/images/ciklone-banner.png" alt="ソフトウェアエンジニアのためのバグトラッキングシステム" width="224" height="50" /></a></p>

<p><a style="color: #999999;" href="http://ciklone.com/" title="ソフトウェアエンジニアのためのバグトラッキングシステム">ソフトウェアエンジニアのためのバグトラッキングシステム</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2010/02/22/php-5-3-on-iis7-via-fastcgi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>バグ管理の必要性について</title>
		<link>http://labo.opengroove.com/blog/2010/01/25/%e3%83%90%e3%82%b0%e7%ae%a1%e7%90%86%e3%81%ae%e5%bf%85%e8%a6%81%e6%80%a7%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/</link>
		<comments>http://labo.opengroove.com/blog/2010/01/25/%e3%83%90%e3%82%b0%e7%ae%a1%e7%90%86%e3%81%ae%e5%bf%85%e8%a6%81%e6%80%a7%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 07:36:59 +0000</pubDate>
		<dc:creator>syoji</dc:creator>
				<category><![CDATA[ソフトウェア開発]]></category>
		<category><![CDATA[テスト]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=477</guid>
		<description><![CDATA[あなたの開発チームはバグ管理をどのようにやっていますか?

組込みシステムエンジニアやWebアプリケーションエンジニア、多くのソフトウェア開発に携わる開発者達。 製品開発やシステム開発の現場で「バグ管理」はどのようにおこなっているでしょうか。


     「ワープロソフトやスプレッドシート?」
     「オリジナルのツール」
     「高いライセンス料を払ったシステム?」
     「オープンソースで構築」


様々な方法でプロジェクトのバグを管理していると思います。

この記事を見てくださった方達はバグ管理の重要性を知っていて、今のやり方になにかしらの課題があって改善したいとお考えだと思います。

プログラムを開発するとき、複雑で大量にある課題・タスク・バグをきちんと漏れなく管理し、 データベース化しておくことは重要なことです。プロジェクトの成果物やリソース、活動状況をすべて追跡できる仕組みを導入することで、 問題を発見しやすく、製品の品質向上に繋がります。

複雑で大規模化しているソフトウェア開発にとって、バグ管理システムは必須のツールです。

ここで、バグ管理の必要性（メリット）について書き出してみたいと思います。


    バグデータベースが用意されることで障害についてチーム内の意思疎通がスムーズになる

     標準化されたレポートは、自由形式の電子メールや机越しの話よりも正確に内容を伝えることが出来ます


    データベース化することで、バグの通番管理(追跡と参照)が自動化され、レポートのための分析や報告が提供できる
    開発チームは、プロジェクトチーム、マネージャ、顧客、ユーザのそれぞれにとって重要な観点から考え修正を進めることができる。

     バグ管理システムを使わない場合、開発者やテスターの声が大きい担当者の報告したバグほど早く修正されがちになる


    バグの発見→レポート→担当者割当→解決について、全てのライフサイクルを通じたバグ管理が出来る。

     バグがどこかのライフサイクルに潜り込み、早期修正が必要なバグから注意がそれることがない。


 [...]]]></description>
			<content:encoded><![CDATA[<blockquote>あなたの開発チームはバグ管理をどのようにやっていますか?</blockquote>

<p>組込みシステムエンジニアやWebアプリケーションエンジニア、多くのソフトウェア開発に携わる開発者達。 製品開発やシステム開発の現場で「バグ管理」はどのようにおこなっているでしょうか。</p>

<ul>
    <li> 「ワープロソフトやスプレッドシート?」</li>
    <li> 「オリジナルのツール」</li>
    <li> 「高いライセンス料を払ったシステム?」</li>
    <li> 「オープンソースで構築」</li>
</ul>

<p>様々な方法でプロジェクトのバグを管理していると思います。</p>

<p>この記事を見てくださった方達はバグ管理の重要性を知っていて、今のやり方になにかしらの課題があって改善したいとお考えだと思います。</p>

<p>プログラムを開発するとき、複雑で大量にある課題・タスク・バグをきちんと漏れなく管理し、 データベース化しておくことは重要なことです。プロジェクトの成果物やリソース、活動状況をすべて追跡できる仕組みを導入することで、 問題を発見しやすく、製品の品質向上に繋がります。</p>

<p>複雑で大規模化しているソフトウェア開発にとって、バグ管理システムは必須のツールです。</p>

<p>ここで、バグ管理の必要性（メリット）について書き出してみたいと思います。</p>

<ul>
    <li>バグデータベースが用意されることで障害についてチーム内の意思疎通がスムーズになる
<ul>
    <li> 標準化されたレポートは、自由形式の電子メールや机越しの話よりも正確に内容を伝えることが出来ます</li>
</ul>
</li>
    <li>データベース化することで、バグの通番管理(追跡と参照)が自動化され、レポートのための分析や報告が提供できる</li>
    <li>開発チームは、プロジェクトチーム、マネージャ、顧客、ユーザのそれぞれにとって重要な観点から考え修正を進めることができる。
<ul>
    <li> バグ管理システムを使わない場合、開発者やテスターの声が大きい担当者の報告したバグほど早く修正されがちになる</li>
</ul>
</li>
    <li>バグの発見→レポート→担当者割当→解決について、全てのライフサイクルを通じたバグ管理が出来る。
<ul>
    <li> バグがどこかのライフサイクルに潜り込み、早期修正が必要なバグから注意がそれることがない。</li>
</ul>
</li>
    <li>開発チームやプロジェクトチーム、テスターの全員が最新の状況を簡単に入手できる。</li>
    <li>解決したバグはナレッジとなる。
<ul>
    <li> これらのバグ情報は、出荷される製品に紛れ込み、サポート部隊のコストを上げる原因、売上の伸び悩み、使えないシステムという辛らつな評価につながる傾向を見つけることが出来るかも知れない。</li>
</ul>
</li>
</ul>

<p>参考資料:<a title="基本から学ぶテストプロセス管理 - コンピュータシステムのテストを成功させるために -" href="http://www.amazon.co.jp/%E5%9F%BA%E6%9C%AC%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%83%86%E3%82%B9%E3%83%88%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%AE%A1%E7%90%86%E2%80%95%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E6%88%90%E5%8A%9F%E3%81%95%E3%81%9B%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB-Rex-Black/dp/482228199X" target="_blank">基本から学ぶテストプロセス管理 &#8211; コンピュータシステムのテストを成功させるために -</a></p>

<hr size="1" style="border-style:dotted"/>

<p><a title="Webベース バグ管理&amp;バージョン管理システム「Ciklone」" href="http://ciklone.com" target="_self">Webベース バグ管理&amp;バージョン管理システム「Ciklone」<br />
60秒ではじめることが出来る、ソフトウェアエンジニアのためのバグ管理システム</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2010/01/25/%e3%83%90%e3%82%b0%e7%ae%a1%e7%90%86%e3%81%ae%e5%bf%85%e8%a6%81%e6%80%a7%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZABBIXでイベントログのエラー数を監視する</title>
		<link>http://labo.opengroove.com/blog/2010/01/14/zabbix%e3%81%a7%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88%e3%83%ad%e3%82%b0%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc%e6%95%b0%e3%82%92%e7%9b%a3%e8%a6%96%e3%81%99%e3%82%8b/</link>
		<comments>http://labo.opengroove.com/blog/2010/01/14/zabbix%e3%81%a7%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88%e3%83%ad%e3%82%b0%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc%e6%95%b0%e3%82%92%e7%9b%a3%e8%a6%96%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 03:28:46 +0000</pubDate>
		<dc:creator>sugimoto</dc:creator>
				<category><![CDATA[ZABBIX]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=469</guid>
		<description><![CDATA[sugimotoです。


ZABBIX agent をWindowsにいれて、Windowsサーバーの監視をしているんですが、イベントログのエラー監視をしたくなりました。



ログ監視によるフィルタリングはうまくできそうになかったので次のような UserParameter を
zabbix_agentd.conf で設定するとエラー数がカウントできました。



UserParameter=eventlog.count[*],c:\windows\system32\cscript 
    c:\windows\system32\eventquery.vbs /FI "type eq $1" 
    /L application /FO csv /NH &#124; find /c ","



eventquery の各パラメーターは以下の通りです。



    /FI : イベントログをフィルタします &#8211; type er xxx でログタイプを指定
    /L : イベントログの種類を指定します &#8211; 今回はアプリケーションログでした(system&#124;security)など指定
    /FO : アウトプットの形式 &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>sugimotoです。</p>

<p>
ZABBIX agent をWindowsにいれて、Windowsサーバーの監視をしているんですが、イベントログのエラー監視をしたくなりました。
</p>

<p>
ログ監視によるフィルタリングはうまくできそうになかったので次のような UserParameter を
zabbix_agentd.conf で設定するとエラー数がカウントできました。
</p>

<pre>
UserParameter=eventlog.count[*],c:\windows\system32\cscript 
    c:\windows\system32\eventquery.vbs /FI "type eq $1" 
    /L application /FO csv /NH | find /c ","
</pre>

<p>
eventquery の各パラメーターは以下の通りです。
</p>

<ul>
    <li>/FI : イベントログをフィルタします &#8211; type er xxx でログタイプを指定</li>
    <li>/L : イベントログの種類を指定します &#8211; 今回はアプリケーションログでした(system|security)など指定</li>
    <li>/FO : アウトプットの形式 &#8211; 余計な行をフィルタしたいのでCSVを指定しました</li>
    <li>/NH : ヘッダを表示しない &#8211; カウントするのでヘッダはいらないですね</li>
</ul>

<p>
すべてのオプションを確認するには、コマンドプロンプトで以下のコマンドを実行します
</p>

<pre>
c:\windows\system32\cscript c:\windows\system32\eventquery.vbs /?
</pre>

<p>
あとはWebインターフェイスで item に eventlog.count[error] とか指定するとエラーをカウントします。eventlog.count[warn] とかも指定可能
</p>

<p>
ただし、期間を指定してないので、itemのほうでDiffをとるように設定しましょう。
</p>

<h3><span style="color: #999999;">ソフトウェアエンジニアのためのバグトラッキングシステム : Ciklone</span></h3>

<p><a title="ソフトウェアエンジニアのためのバグトラッキングシステム" href="http://ciklone.com/"><img class="alignnone" title="ソフトウェアエンジニアのためのバグトラッキングシステム" src="http://www.opengroove.com/images/ciklone-banner.png" alt="ソフトウェアエンジニアのためのバグトラッキングシステム" width="224" height="50" /></a></p>

<p><a style="color: #999999;" href="http://ciklone.com/" title="ソフトウェアエンジニアのためのバグトラッキングシステム">ソフトウェアエンジニアのためのバグトラッキングシステム</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2010/01/14/zabbix%e3%81%a7%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88%e3%83%ad%e3%82%b0%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc%e6%95%b0%e3%82%92%e7%9b%a3%e8%a6%96%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZABBIX1.8のインストールでmbstring supportが認識されない。。</title>
		<link>http://labo.opengroove.com/blog/2009/12/09/zabbix1-8%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%a7mbstring-support%e3%81%8c%e8%aa%8d%e8%ad%98%e3%81%95%e3%82%8c%e3%81%aa%e3%81%84%e3%80%82%e3%80%82/</link>
		<comments>http://labo.opengroove.com/blog/2009/12/09/zabbix1-8%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%a7mbstring-support%e3%81%8c%e8%aa%8d%e8%ad%98%e3%81%95%e3%82%8c%e3%81%aa%e3%81%84%e3%80%82%e3%80%82/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 01:16:53 +0000</pubDate>
		<dc:creator>sugimoto</dc:creator>
				<category><![CDATA[ZABBIX]]></category>
		<category><![CDATA[サーバーインフラ]]></category>

		<guid isPermaLink="false">http://labo.opengroove.com/blog/?p=460</guid>
		<description><![CDATA[sugimotoです。


昨日、ZABBIX 1.8 をインストールしていたところ、Web UIのインストールではまりました。
環境は CentOS でPHPなど、必要なライブラリは yum でインストールしていました。



サーバーの設定確認をするステップ、次の画面で、MB string supportがfalseになっていました。





php-mbstring をインストールしていなかったことに気がつき、mbstring をインストールしたけど、OKにならず。。



しばらく悩んだあと、Googleで調べるとこんなエントリがありました。



mbstring ライブラリのチェックでPHP 5.2 から導入された関数をチェックしているため、PHP5.1以前のバージョンをインストールした環境の場合、mbstringが設定されててもチェックが通らないらしい。


includes/locales.inc.php


     39 function mbstrings_available(){
     40         $mbstrings_fnc_exist =
     41              [...]]]></description>
			<content:encoded><![CDATA[<p>sugimotoです。</p>

<p>
昨日、ZABBIX 1.8 をインストールしていたところ、Web UIのインストールではまりました。
環境は CentOS でPHPなど、必要なライブラリは yum でインストールしていました。
</p>

<p>
サーバーの設定確認をするステップ、次の画面で、<strong>MB string support</strong>が<span style="color:red;">false</span>になっていました。
</p>

<p><a href="http://labo.opengroove.com/blog/wp-content/uploads/2009/12/zabbix_install1.png"><img src="http://labo.opengroove.com/blog/wp-content/uploads/2009/12/zabbix_install1.png" alt="zabbix_install" title="zabbix_install" width="654" height="495" class="alignnone size-full wp-image-463" /></a></p>

<p>
php-mbstring をインストールしていなかったことに気がつき、mbstring をインストールしたけど、OKにならず。。
</p>

<p>
しばらく悩んだあと、Googleで調べると<a href="http://www.zabbix.com/forum/showthread.php?p=54820">こんなエントリ</a>がありました。
</p>

<p>
mbstring ライブラリのチェックでPHP 5.2 から導入された関数をチェックしているため、PHP5.1以前のバージョンをインストールした環境の場合、mbstringが設定されててもチェックが通らないらしい。
</p>

<p>includes/locales.inc.php</p>

<pre>
     39 function mbstrings_available(){
     40         $mbstrings_fnc_exist =
     41                 function_exists('mb_strlen') &#038;&#038;
     42                 function_exists('mb_strtoupper') &#038;&#038;
     43                 function_exists('mb_strpos') &#038;&#038;
     44                 function_exists('mb_substr') &#038;&#038;
     45                 function_exists('mb_stristr') &#038;&#038;
     46                 function_exists('mb_strstr');
     47
     48 return $mbstrings_fnc_exist;
     49 }
</pre>

<p>対応として、44-46行目を変更</p>

<p>includes/locales.inc.php</p>

<pre>
     39 function mbstrings_available(){
     40         $mbstrings_fnc_exist =
     41                 function_exists('mb_strlen') &#038;&#038;
     42                 function_exists('mb_strtoupper') &#038;&#038;
     43                 function_exists('mb_strpos') &#038;&#038;
     44                 function_exists('mb_substr'); # &#038;&#038;
     45  #               function_exists('mb_stristr') &#038;&#038;
     46  #               function_exists('mb_strstr');
     47
     48 return $mbstrings_fnc_exist;
     49 }
</pre>

<p>
これでうまくとおりました。めでたしめでたし。
</p>

<p>
よくみたら、ZABBIX1.8の &#8220;<a href="http://www.zabbix.com/documentation/1.8/manual/about/installation_and_upgrade">known problems</a>&#8221; に書いてました。。マニュアルはよくみましょう。。
</p>

<h3><span style="color: #999999;">ソフトウェアエンジニアのためのバグトラッキングシステム : Ciklone</span></h3>

<p><a title="ソフトウェアエンジニアのためのバグトラッキングシステム" href="http://ciklone.com/"><img class="alignnone" title="ソフトウェアエンジニアのためのバグトラッキングシステム" src="http://www.opengroove.com/images/ciklone-banner.png" alt="ソフトウェアエンジニアのためのバグトラッキングシステム" width="224" height="50" /></a></p>

<p><a style="color: #999999;" href="http://ciklone.com/" title="ソフトウェアエンジニアのためのバグトラッキングシステム">ソフトウェアエンジニアのためのバグトラッキングシステム</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labo.opengroove.com/blog/2009/12/09/zabbix1-8%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%a7mbstring-support%e3%81%8c%e8%aa%8d%e8%ad%98%e3%81%95%e3%82%8c%e3%81%aa%e3%81%84%e3%80%82%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
