<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>Tech</title>
      <link>http://jamz.jp/tech/</link>
      <description>IT関連の技術的な情報をちょこちょこと</description>
      <language>ja</language>
      <copyright>Copyright 2009</copyright>
      <lastBuildDate>Mon, 03 Nov 2008 19:55:38 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

      
      <item>
         <title>Feedjack で Planet</title>
         <description><![CDATA[フィードをゴニョゴニョしている Django なアプリはないかなぁーと探してみたら。

<p class="ref"><a title="参考ページ" href="http://www.feedjack.org/">Feedjack - Feed aggregator powered by Python and Django</a></p>

一応、最新のバージョンで Django 1.0 beta 1 に対応させている模様。

<blockquote cite="http://www.feedjack.org/"><p class="title"><a href="http://www.feedjack.org/">Changes</a></p><p>Feedjack 0.9.16</p><p>Added compatibility with Django 1.0 beta 1: newforms admin and pagination</p><p class="source">Feedjack - Feed aggregator powered by Python and Django</p></blockquote>

他には、TurboGears で作られたもの (最近はメンテナンスされていないっぽい) や、有名どころで planetplanet.org の Planet などがある。

<blockquote cite="http://plaza.rakuten.co.jp/kugutsushi/diary/200805010000/"><p class="title"><a href="http://plaza.rakuten.co.jp/kugutsushi/diary/200805010000/">傀儡師の館.Python - 楽天ブログ（Blog）</a></p><p>planet は Planet GNOME や Planet Debian をはじめとしてあちこちで使われているもので一番メジャー。Feedjack は Django を使って作られていて planet より新しい。cogplanet は、TurboGears を使って作られている。1年以上、手が入っていないしマイナーな存在か。</p><p class="source">傀儡師の館.Python - 楽天ブログ（Blog）</p></blockquote>

ということで Feedjack を動かしてみようと試みたが ... 思いがけず四苦八苦。

なんせドキュメントがない (と思われる)
恐らく、唯一、公式サイトのホームに最低限必要と思われること (Installation, Configuration のあたりを参照) が書かれているだけ。

ポイントを整理すると以下のような感じ。

<ul class="point">
	<li>feedparser が依存ライブラリとして必要で</li>
	<li>feedjack 用のメディア系のファイルがあるので MEDIA_URL の設定が必要</li>
	<li>INSTALL APPS は django.contrib.admin と feedjack</li>
	<li>併せて、urls で、通常の admin の追加と feedjack の urls を読込む</li>
</ul>

単に Django のお作法 ? を忘れていただけなんだけど二カ所でハマった。

<h4>開発サーバーでのメディア系のファイルの扱い</h4>

明示的に設定してあげないといけない。

なんか以前にもハマった気がする ...
単に忘れていたため繰り返してしまったような ...

<blockquote cite="http://djangoproject.jp/doc/ja/1.0/howto/static-files.html#howto-static-files"><p class="title"><a href="http://djangoproject.jp/doc/ja/1.0/howto/static-files.html#howto-static-files">静的なファイルの提供方法</a></p><p>Django 自体では、画像やスタイルシート、ビデオといった静的な (メディア) ファ イルを提供しません。通常、 Django はメディアファイルの提供を使っている Web サーバの仕事として残しておきます。なぜなら、 Apache や lighttpd のような 標準的な Web サーバは Web アプリケーションフレームワークよりもはるかに高 性能な静的ファイル提供機能を備えているからです。</p><p>というわけで、 Django が静的ファイルをサポートするのは 開発中だけ です。 メディアファイルの提供には django.views.static.serve() ビューを使って 下さい。</p><p class="source">Django v1.0 documentation</p></blockquote>

ということで、settings.py の MEDIA_ROOT, MEDIA_URL とあわせて urls.py に以下の記述が必要。

<pre class="terminal"><code>(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
 {'document_root': '/path/to/media'}),
</code></pre>

<code>'/path/to/media'</code> の部分は settings.py の MEDIA_ROOT を読込むと良いのかなぁと思い、ファイルの先頭で <code>from settings import *</code> とかして以下のように記述。

<pre class="terminal"><code>from settings import *
urlpatterns = patterns('',
    (r'^feedjack_statics/(?P<path>.*)$', 'django.views.static.serve', {'document_root': MEDIA_ROOT}),
)</code></pre>

<h4>Django1.0 で admin の有効化の方法が多少変わってる ?</h4>

多分、1.0 になる以前と異なっていると思う。

<p class="ref"><a title="参考ページ" href="http://djangoproject.jp/doc/ja/1.0/intro/tutorial02.html#admin">はじめての Django アプリ作成、その 2 #サイトの有効化 -- Django v1.0 documentation admin</a></p>

Feedjack のサイトには urls.py の記述方法が <code>(r'^admin/', include('django.contrib.admin.urls')),</code> と書かれており、素直にそのまま書いてしまった。

チュートリアルの通り、INSTALL APPS に django.contrib.admin して urls.py の admin 系のコメントアウトを外して有効にするだけでよい。

以上で、python manager.py runserver 後、localhost:8000 でエラーは出なくなったが、使い方がいまいちよくわからない。

クロールを自動化するためと思われる <code>bin/feedjack_update.py</code> というコマンドがあるようだけど、これの使い方も詳しく分からず、admin 画面からフィードを登録したけど...

英語で検索してみるかぁ...

<h4>おまけ</h4>

<ul class="ref"><li><a title="参考ページ" href="http://www.panopticon.jp/blog/2007/04/082145.html">Panopticon :: Django :: DjangoでRSSリーダーを作る(1)</a></li>
<li><a title="参考ページ" href="http://www.panopticon.jp/blog/2007/04/110204.html">Panopticon :: Django :: DjangoでRSSリーダーを作る(2) 解決編?</a></li>
<li><a title="参考ページ" href="http://www.panopticon.jp/blog/2007/04/242156.html">Panopticon :: Django :: DjangoでRSSリーダーを作る(3)</a></li>
<li><a title="参考ページ" href="http://www.panopticon.jp/blog/2007/04/270037.html">Panopticon :: Django :: DjangoでRSSリーダーを作る(3.5)</a></li>
<li><a title="参考ページ" href="http://www.panopticon.jp/blog/2007/05/011311.html">Panopticon :: Django :: DjangoでRSSリーダーを作る(4) カスタムタグ内で別の変数を参照したいとき</a></li>
<li><a title="参考ページ" href="http://www.panopticon.jp/blog/2007/05/092308.html">Panopticon :: Django :: djangoでRSSリーダーを作る(5)</a></li></ul>
]]></description>
         <link>http://jamz.jp/tech/2008/11/django-planet-feedjack.html</link>
         <guid>http://jamz.jp/tech/2008/11/django-planet-feedjack.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">インストール・アップグレード</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">django</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">planet</category>
        
         <pubDate>Mon, 03 Nov 2008 19:55:38 +0900</pubDate>
      </item>
      
      <item>
         <title>BlogD ができるまで - Django でアプリケーション開発 その2</title>
         <description><![CDATA[BlogD って何 ? とか言われそうですが、Blog を使い始めたとき (2003/2004年頃) に自作のブログツールを作りたいなぁと思って取得したドメインが blogd.org

Linux のデーモンって xxd (e.g. httpd, vsftpd) と名称の最後に d をつけることが多いでしょ ? そこから blog のデーモンみたいなもの、ってことで blogd

なんとなく見た目を変えて BlogD

読み方は「ブロッディー」

さて、前回に続き、Django 初心者 (Python も初心者) がアプリケーションを開発していく過程で気づいたことや、つまずいたことをメモしていきたいと思います。

<p class="ref"><a title="参考ページ" href="http://jamz.jp/tech/2008/09/blogd-by-django-01.html">[J] BlogD ができるまで - Django でアプリケーション開発 その1 - Jamz (Tech)</a></p>

なんとか二回目にこぎ着けた。

<h4>なにから考えれば (設計すれば) いいの ?</h4>

そもそも Django などのフレームワークを作って開発する時点で「こんなツールを作りたい」というのは描いているはず。

正しいアプローチなのかは分からないけど、私の場合、そのアプリケーションを実装するにあたり必要なモデル (データ、DB のテーブル) って何 ? というところから入る。

<p class="center"><a href="http://jamz.jp/tech/img/blogd_mindmaped_by_freemind.jpg.png"><img alt="blogd_mindmaped_by_freemind.jpg.png" src="http://jamz.jp/tech/assets_c/2008/09/blogd_mindmaped_by_freemind.jpg-thumb-450x545.png" width="450" height="545" class="mt-image-none" style="" /></a></p>

まぁ、これ (マインドマップ) だとなんだかちょっとよく分からないと思いますが、ER図なんかを使って考えるのが適当なんでしょうかね。

<p class="ref"><a title="参考ページ" href="http://jamz.jp/tech/2008/07/localize-www-sql-designer.html">[J] WWW SQL Designer 2.1.1 の日本語化 - Jamz (Tech)</a></p>

っで、ある程度モデルの想像がついてきたら、前回投稿のアプリケーションの分割部分をどうするかを考える。

<p class="ref"><a title="参考ページ" href="http://jamz.jp/tech/2008/09/blogd-by-django-01.html#proj_app">[J] BlogD ができるまで - Django でアプリケーション開発 その1 - Jamz (Tech)</a></p>

view の部分も考えないといけないんだけど、いろいろと実装始めると model がないことには前に進めない、開発が進まないので、モデルの定義から入っている。

なのでモデルドリブンな開発アプローチなんだけど、これって正しいのかな ?

<h4>settings.py</h4>

さて、モデルのコーディングを始めるわけですが、その前に settings.py の最低限の定義を済ませておきます。

リファレンスは後で紹介しますが、まずは以下のあたりを編集。

<ol>
	<li>BASE_DIR の定義</li>
	<li>TIME_ZONE = 'Asia/Tokyo'</li>
	<li>LANGUAGE_CODE = 'ja'</li>
	<li>MEDIA_ROOT = os.path.join(BASE_DIR, 'media_dir_name')</li>
	<li>MEDIA_URL = 'media_dir_name'</li>
	<li>ROOT_URLCONF = 'project_name.urls'</li>
</ol>

1 はスタンダードってわけじゃないようですが、慣習的にそうしておくと便利ということで。

<pre class="terminal"><code>import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))</code></pre>

2 の TIME_ZONE の定義は Japan/Tokyo と書いちゃいそうですが、Asia/Tokyo だそうです。 

3 の LANGUAGE_CODE = 'ja' も ja_JP とか書いちゃいそうですが、RFC 的に ja_JP というのはないらしい。

<ul class="ref"><li><a title="参考ページ" href="http://groups.google.com/group/django-ja/browse_thread/thread/ceee0f4327816adf/d5b2ca6cd88b2904?lnk=gst&q=LANGUAGE_CODE+%3D+%27ja%27#d5b2ca6cd88b2904">Django アプリケーションの国際化 - django-ja | Google グループ</a></li>
<li><a title="参考ページ" href="http://www.i18nguy.com/unicode/language-identifiers.html">Using Language Identifiers (RFC 3066)</a></li></ul>

4, 5 あたりは好きなように。

強いて言うなら、django.contrib.admin で使う場合の media とうまくすみ分け ? できるよう気をつける。

っつか、admin の media を有効にする場合に適当な方法ってなんだろう。

以前は、site-package/django の中から該当するディレクトリをシンボリックリンクさせて httpd.conf とかで alias してた。

manage.py runserver したときは勝手にうまくいってるけど、これって Django の開発サーバーがうまいこと処理してくれているだけだよね ?

6 の urls.py は、django-admin で生成したプロジェクトの名称 (ルートのディレクトリ名) と同期しているので開発開始後にプロジェクトのディレクトリ名を変更した時なんかは要注意。

上記意外には、settings.py の分割なんかも知っておくとよいかも。

<blockquote cite="http://www.ueblog.org/mediawiki/index.php?title=Django_Settings.py"><p class="title"><a href="http://www.ueblog.org/mediawiki/index.php?title=Django_Settings.py">Django Settings.py</a></p><p>テスト環境がsqlite3で本番がMySQLのように変更する必要がある場合は、異なる部分だけを設定したcustom_settings.pyなどのファイルを用意して</p><p>(snip)</p><p>perezvonさんの使っている本環境のsettings.pyをdevelopment.pyなどのように名前を変えた開発環境用の設定ファイルで異なる部分だけ上書きするテクニックはより有効だと思います。</p><p class="source">UeblogWiki</p></blockquote>

上記についてはどちらも有効だと思う。使う際のタイミングや用途が微妙に異なる気もするなぁ。

再配布を想定する場合は、上書きできるように local_settings.py などがあると便利だろうし、開発時はことあるごとに編集することがあるだろうから、settings.py をまるまるコピーして <code>python manage.py --settings=dev_setting.py runserver</code> しちゃう方が良さそうな気がする。

<h4>その 3 に続く</h4>

django.contrib.admin の扱い (使い方) が、古いバージョンの頃とだいぶ変わっているので、次回は admin について書こうかなぁ。]]></description>
         <link>http://jamz.jp/tech/2008/09/blogd-by-django-02.html</link>
         <guid>http://jamz.jp/tech/2008/09/blogd-by-django-02.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">django</category>
        
         <pubDate>Sun, 21 Sep 2008 16:29:06 +0900</pubDate>
      </item>
      
      <item>
         <title>BlogD ができるまで - Django でアプリケーション開発 その1</title>
         <description><![CDATA[さぁ、続くかどうか分かりませんが、細かく整理せずに実況中継的にログっていこうと思います。

自宅サーバーを構築して、ブログを設置して、かれこれ 7, 8年にはなると思います。その間、サイトでやっていたことは日々のログを記録すること。

色々と実装したいことや構想なんかもあるんだけど、それを Django で実装、実現していこうと思っています。

<h4>参考情報</h4>

多分、困るたびに色々検索して解決していくんだろうけど、多少は前提知識を持っておきたい。標準的 (と、思っている) 参考サイトをピックアップしておく。

<p class="ref"><a title="参考ページ" href="http://michilu.com/django/doc-ja/index/">
Django オンラインドキュメント和訳</a></p>

Django について少しでも調べたことがあるなら説明の必要もないだろう。公式ドキュメントの日本語訳。

<p class="ref"><a title="参考ページ" href="http://www.ueblog.org/mediawiki/index.php?title=Django">Django - UeblogWiki</a></p>

「こんなときどうする？ 」をまとめていたり、巷のチュートリアルを一覧化していたりと参考になる情報が色々あります。

最近更新されていないようなので最新情報を拾いたい場合はマッチしないかも。

最後にまとまった情報を得たいないなら書籍もオススメ。

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048672096/jamzjp-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51q-uR4G72L._SL160_.jpg" alt="開発のプロが教える標準Django完全解説―Webアプリケーションフレームワーク (デベロッパー・ツール・シリーズ) (デベロッパー・ツール・シリーズ)" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048672096/jamzjp-22/ref=nosim/" name="amazletlink" target="_blank">開発のプロが教える標準Django完全解説</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4048672096/jamzjp-22/ref=nosim/" title="開発のプロが教える標準Django完全解説―Webアプリケーションフレームワーク (デベロッパー・ツール・シリーズ) (デベロッパー・ツール・シリーズ)" target="_blank">amazlet</a> at 08.09.09</div></div><div class="amazlet-detail">増田 泰 中居 良介 露木 誠 松原 豊 <br />アスキー・メディアワークス <br />売り上げランキング: 49524<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048672096/jamzjp-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

できるだけ最新のバージョンで、ということで開発版をもとに今後の改変を想定して書かれているものの、先日バージョン 1.0 がリリースされたこともあり若干内容が異なる部分もあるようだ。

models.py の管理画面をカスタマイズするときの書き方とか。

<h4><a id="proj_app" name="proj_app"></a>Django 思想 - その1 (続くかな ?)</h4>

プロジェクトとアプリケーションの概念 (Django での定義) を理解できると Django と Python を少し理解できた気になれる。

<ul class="ref">
<li><a title="参考ページ" href="http://groups.google.com/group/django-ja/browse_thread/thread/2e693fcfbbefa6ab">applicationの単位 - django-ja | Google グループ</a></li>
<li><a title="参考ページ" href="http://d.hatena.ne.jp/shuji_w6e/20080731/1217477232">アプリケーションの単位 - やさしいデスマーチ</a></li>
</ul>

アプリケーションはパッケージと考えるのが正しいらしい。これ目から鱗だった。

先に紹介した書籍にも書いてなかったと思う。

<p class="ref"><a title="参考ページ" href="http://www.python.jp/doc/release/tut/node8.html#packages">Python チュートリアル - 6. モジュール 6.4 パッケージ</a></p>

公式のチュートリアルでも紹介されていたけど、Pythono のパッケージに関するドキュメントを読んでおくと参考になる。]]></description>
         <link>http://jamz.jp/tech/2008/09/blogd-by-django-01.html</link>
         <guid>http://jamz.jp/tech/2008/09/blogd-by-django-01.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">django</category>
        
         <pubDate>Tue, 09 Sep 2008 00:15:58 +0900</pubDate>
      </item>
      
      <item>
         <title>シェルスクリプトで実行ファイルのディレクトリを参照する方法</title>
         <description><![CDATA[最近「コマンド化」「自動化」に目覚め、シェルスクリプトにハマっている。

第一歩としてはコマンド化なんだけど、これができると cron などで定期実行できるようになるから結果、これが自動化につながる。

っで、今回はこれまでにプログラムしたスクリプトを汎用化したいと思い、試行錯誤している。

シェルスクリプトを実行する際、以下のようにいくつかの参照方法 / 実行方法がある。

<ul>
<li><code>/path/to/shell_script</code> (/ ルートから絶対パスで指定)</li>
<li><code>./path/to/shell_script</code> (相対パスで指定)</li>
<li><code>./shell_script</code> (実行ファイルがあるディレクトリに移動して実行)</li>
</ul>

この前提として、実行したファイルと同一階層に設定ファイルや共通 (共有) 化した外部ファイルなどを配置して汎用化を図っているんだけど、こうした外部ファイルの参照方法が今回の課題だった。

PHP でいうところの <code>dirname(__FILE__)</code>。

<p class="ref"><a title="参考ページ" href="http://www.php.net/manual/ja/language.constants.predefined.php">PHP: 自動的に定義される定数 - Manual</a></p>

マニュアル見ると <code>__DIR__</code> が PHP 5.3.0 で追加されました、とあるので、実行ファイルのディレクトリ (絶対パス) を知りたいというニーズが高かったのかな。

っで、同じことをシェルスクリプトでやりたかったということで。

以下のあたりを参照して対処コードを書いてみた。

<ul class="ref"><li><a title="参考ページ" href="http://blog.livedoor.jp/froo/archives/50761473.html">浮浪プログラマの始末書:[Unix] シェルスクリプトで自身のいるディレクトリへ移動</a> (cd file_self_dir)</li>
<li><a title="参考ページ" href="http://ml.tietew.jp/cppll/cppll_novice/article/767">[cppll_novice:0767] Re: プログラムが決まったファイルを読み込む場合。</a> (参照方法のパターン)</li>
<li><a title="参考ページ" href="http://www.techworld.jp/channels/desktop/102121/">シェルスクリプト・トレーニング 第8回 findコマンドで"検索プラスアルファ"の操作 ： デスクトップ - TECH WORLD</a> (dirname の存在)</li></ul>

一つ目の参照先にある、「スクリプト内でディレクトリを移動しちゃえ」という発想は読んだ瞬間は "目から鱗" 的な関心を持った。

<blockquote cite="http://blog.livedoor.jp/froo/archives/50761473.html"><p class="title"><a href="http://blog.livedoor.jp/froo/archives/50761473.html">[Unix] シェルスクリプトで自身のいるディレクトリへ移動</a></p><p>相対パスで指定した場合、呼び出し側でカレントディレクトリをこのディレクトリに移動してから実行すれば動くのだが、これだと少し使いづらい。かといって絶対パスで指定してしまうと、スクリプトファイルの格納場所を移動する度にスクリプトを変更しなければならなくなる。</p><p>PATH環境変数にスクリプトファイルのあるディレクトリを追加すれば、実行可能ファイルについては解決するのだが、環境変数やユーティリティ関数なんかの定義ファイルには対応できない。</p><p>そこで、スクリプトの中で、カレントディレクトリを自分のファイルがあるディレクトリに移動するようにしてみた。子プロセス側でいくらカレントディレクトリを変更しても親プロセスには影響がないので問題ないと思う。</p><p class="source">浮浪プログラマの始末書</p></blockquote>

のだけど、コードを改良していくうちにディレクトリを移動しなくても実行ファイルのディレクトリを絶対パスで知る方法はないものかと疑問が湧いてきた。(これについては方法がまだわかっていない。誰か教えて。pwd のソースとか読めばいいのか ?)

以上のような経緯で書いたのが以下のコード。

<pre class="terminal"><code>SELF_DIR=`dirname $0`
cd ${SELF_DIR}
if [ -f ./script.conf ]; then
  source ./script.conf
else
  echo "ERROR!! ... config file not found."
  exit 2
fi</code></pre>

ディレクトリを参照する部分だけど、先の参照ページだと <code>`echo $0 | sed 's;[^/]*$;;'`</code> とかしていて複雑。

<code>dirname</code> なんていう素敵なコマンドがあるのでこちらを活用して正規表現なんてスッ飛ばしているのがミソ。

っで、ここまでできれば <code>cd</code> でディレクトリを移動しなくてもやりようによっては絶対パスを取得できる気がするんだけど ... 。

<code>$0</code> が実行ファイルの呼び出され方に依存するからダメかな ... ?

<code>cd</code> しちゃえば、後は <code>pwd</code> すれば取り敢えず絶対パスは取得できる。

<pre class="terminal"><code>SELF_DIR=`dirname $0`
cd ${SELF_DIR}
echo &quot;FILE_SELF DIR is: &quot;`pwd`</code></pre>]]></description>
         <link>http://jamz.jp/tech/2008/08/get-file-self-dir-on-shell-script.html</link>
         <guid>http://jamz.jp/tech/2008/08/get-file-self-dir-on-shell-script.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">shell</category>
        
         <pubDate>Sun, 10 Aug 2008 01:20:14 +0900</pubDate>
      </item>
      
      <item>
         <title>yum-cron だと /etc/yum.repos.d/CentOS-Base.repo を読まない ?</title>
         <description><![CDATA[yum-updatesd はよくないという記述を数カ所で見たので、yum-cron に変更した。

<blockquote cite="http://centossrv.com/centos5-init.shtml"><p class="title"><a href="http://centossrv.com/centos5-init.shtml">CentOS5初期設定</a></p><p>以下に示す理由によりyum-updatesdを停止しておく</p><p>デフォルトで1時間ごとにアップデートチェックを行うようになっており、手動によるパッケージインストールと競合すると インストールが失敗する</p><p>大量にメモリを消費する(約10MB以上使用) </p><p class="source">CentOSで自宅サーバー構築</p></blockquote>

しかし、この処理以降 Cron Deamon よりエラーのメッセージが届くようになってしまった。

<pre class="terminal"><code>Error: Missing Dependency: httpd = 2.2.3-11.el5_1.centos.3 is needed by package mod_ssl</code></pre>

おそらく、CentOS 5.1 で OS をインストール後、http* を rpm のソースから rebuild してインストールして、さらに 5.2 に yum で update したことなんかが影響しているんじゃないかと...

問題はエラーよりも  <code>/etc/yum.repos.d/CentOS-Base.repo</code> で自動アップデートから除外しているはずなのに勝手に yum update の対象になっていること。

<pre class="terminal"><code>[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://ftp.iij.ad.jp/pub/linux/centos/$releasever/os/$basearch/
gpgcheck=1
#gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
gpgkey=http://ftp.iij.ad.jp/pub/linux/centos/RPM-GPG-KEY-CentOS-5
exclude=httpd* php* mod_python subversion mod_dav_svn mysql* senna*</code></pre>

細かく仕組みを追うには時間が必要そうだったので別の設定ファイルがないか検索。

<code>/etc/yum.conf</code> に <code>exclude</code> を設定するやり方もあるようで、こちらを設定。今夜の自動更新の様子を見てみることに。

多分、うまく行く気がする。]]></description>
         <link>http://jamz.jp/tech/2008/08/yumcron_etcyumreposdcentosbase.html</link>
         <guid>http://jamz.jp/tech/2008/08/yumcron_etcyumreposdcentosbase.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">サーバー</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">yum</category>
        
         <pubDate>Sat, 09 Aug 2008 00:00:01 +0900</pubDate>
      </item>
      
      <item>
         <title>Hyper Estraier のソースにパッチを当ててインストール</title>
         <description><![CDATA[Hyper Estraier のインストールに向けて事前調査をしていたら、いくつか気になることがでてきた。

<ul class="point">
	<li>依存ライブラリである libiconv の日本語処理 (cp932 関連) に問題があるようで、それに対するパッチが有志の方より提供されている</li>
	<li>fedora は yum で一発インストールできるようだが、CentOS は手動でインストールするしかなさそう</li>
	<li>Hyper Estraier 1.4.13 向けにパッチが提供されている</li>
</ul>

<h4>libiconv</h4>

インストール済みか確認。

<pre class="terminal"><code>iconv -l | egrep -i '(-31j|-ms)'
EUC-JP-MS//
EUCJP-MS//
WINDOWS-31J//</code></pre>

iconv は既にインストール済みだった。

参考にリンクを載せておく。

<ul class="ref"><li><a title="参考ページ" href="http://www2d.biglobe.ne.jp/~msyk/software/libiconv-patch.html">MORIYAMA Masayuki's Home Page! : ソフトウェア - libiconv パッチ集</a><ul class="ref"><li><a title="参考ページ" href="http://msyk.at.webry.info/200711/article_1.html">libiconv 1.12 用 cp932 パッチ コードページ932/ウェブリブログ</a></li>
<li><a title="参考ページ" href="http://www2d.biglobe.ne.jp/~msyk/software/libiconv-1.12-cp932-patch.html">libiconv-1.12-cp932.patch.gz</a></li></ul></li></ul>

説明を読んでいくとちょっと気になる記述があった。

<blockquote cite="http://www2d.biglobe.ne.jp/~msyk/software/libiconv-1.12-cp932-patch.html"><p class="title"><a href="http://www2d.biglobe.ne.jp/~msyk/software/libiconv-1.12-cp932-patch.html">cp932 修正による影響</a></p><p>cp932 の変換を 表1-2 のように修正したため、iconv( "iso-2022-jp", "cp932" ); といった変換で表1-2 にある文字が変換出来なくなります。</p><p class="source">libiconv-1.12-cp932.patch.gz</p></blockquote>

パッチの適用が必須ということでもないみたい。

<h4>QDBM</h4>

QDBM は rpm が出ているみたいだけど、最新バージョン 1.8.77 の rpm はないみたい...

<p class="ref"><a title="参考ページ" href="http://qdbm.sourceforge.net/rpm/">Index of http://qdbm.sourceforge.net/rpm</a></p>

メーリングリストの以下の投稿よりパッチを入手。

<p class="ref"><a title="参考ページ" href="http://sourceforge.net/mailarchive/message.php?msg_id=20080403.190234.98160137.Yasuharu.Yamada%40access-company.com">SourceForge.net: [hyperestraier-users-ja] 投稿済 patch の 1.4.13 対応</a></p>

qdbm のソースにパッチをコピーして、patch コマンドで適用。

<pre class="terminal"><code>cd /path/to/src/qdbm-1.8.77
patch < qdbm1.8.77_00all.diff
./configure --enable-zlib
make
make check #自己診断チェック
make install</code></pre>

configure の <code>--prefix=</code> の初期値は <code>/usr/local</code>

<ins>configure で <code>--enable-zlib</code> する。</ins>
<ins>コメントで指摘いただいた、<code>--enable-zlib</code> は QDBM で指定するオプションですね。</ins>

ちなみにほかにもパッチは出ているみたい。

<blockquote cite="http://sourceforge.net/mailarchive/message.php?msg_id=20080201.003704.191224104455955364.koie%40guriandgura"><p class="title"><a href="http://sourceforge.net/mailarchive/message.php?msg_id=20080201.003704.191224104455955364.koie%40guriandgura">[hyperestraier-users-ja] bodyが空のMIMEのインデックス作成</a></p><p>メールの検索につかっているのですが、メールボディが空だとヘッダがユーザ属性として登録されません。</p><p>どうもヘッダとボディの境界を検出する部分の条件が厳しすぎるようなので qdbm-1.8.77 に対するパッチを書いてみました。</p><p class="source">SourceForge.net: Hyper Estraier - Mailing List</p></blockquote>

<h4>Hyper Estraier</h4>

<p class="ref"><a title="参考ページ" href="http://sourceforge.net/mailarchive/message.php?msg_id=20080403.190234.98160137.Yasuharu.Yamada%40access-company.com">SourceForge.net: [hyperestraier-users-ja] 投稿済 patch の 1.4.13 対応</a> (再掲)</p>

どんなパッチなのか、というのは過去の ML より

<blockquote cite="http://sourceforge.net/mailarchive/forum.php?thread_name=20070709.112627.207581762.Yasuharu.Yamada%40access-company.com&forum_name=hyperestraier-users-ja"><p class="title"><a href="http://sourceforge.net/mailarchive/forum.php?thread_name=20070709.112627.207581762.Yasuharu.Yamada%40access-company.com&forum_name=hyperestraier-users-ja">[hyperestraier-users-ja] Patched for Node Sever & Crawler</a></p><p>2007-07-09</p>
<ol><li>ノードサーバ挙動修正パッチ</li>
<li>Crawler のログ情報に関するパッチ</li>
<li>Crawler 高速化パッチ</li>
<li>Crawler log rotate パッチ</li>
<li>Basic 認証パッチ</li>
<li>情報量 0 ページの削除ルールパッチ</li></ol>
<p class="source">SourceForge.net: Hyper Estraier - Mailing List</p></blockquote>

あと、以下のメールも含めたパッチみたい。参考情報有。

<p class="ref"><a title="参考ページ" href="http://sourceforge.net/mailarchive/message.php?msg_id=20071217.111057.01368508.Yasuharu.Yamada%40access-company.com">SourceForge.net: Re: [hyperestraier-users-ja] 投稿済 patch の 1.4.12 対応</a></p>

patch コマンドでパッチあててインストール。

<pre class="terminal"><code>cd /path/to/src/hyperestraier
patch -p0 < he1.4.13_00all.diff
./configure
make
make check #自己診断チェック
make install</code></pre>

<del>configure で <code>--enable-zlib</code> するのがミソ ? かなぁ。</del>
<ins>コメントで指摘いただいた、<code>--enable-zlib</code> は QDBM で指定するオプションですね。</ins>

その他の Hyper Estraier 向けのパッチ。今回は含めなかった。

<blockquote cite="http://sourceforge.net/mailarchive/message.php?msg_id=JZ200802090253349.130023671%40s1100.com"><p class="title"><a href="http://sourceforge.net/mailarchive/message.php?msg_id=JZ200802090253349.130023671%40s1100.com">[hyperestraier-users-ja] シンプルな入力フォームと、MIMEヘッダの文字コード判別パッチ</a></p><p>estseek.cgiに、シンプルな入力フォームを追加するパッチです。</p><p>estcmdで、MIMEファイル登録する際、日本語が優先選択(-il ja)されている時、ヘッダ文字列の文字コードを、本文に指定された文字コードとは別に、個別に文字コードを自動判定し、変換・登録処理を行います。</p><p class="source">SourceForge.net: Hyper Estraier - Mailing List</p></blockquote>

<blockquote cite="http://sourceforge.net/mailarchive/message.php?msg_id=u63rygoe0.wl%25fuchimoto%40ebookjapan.co.jp"><p class="title"><a href="http://sourceforge.net/mailarchive/message.php?msg_id=u63rygoe0.wl%25fuchimoto%40ebookjapan.co.jp">Re: [hyperestraier-users-ja] 文書登録件数による検索結果の差異について</a></p><p>例でいうと、「下」というフレーズの検索は「下*」という扱いになり、この"*"を256種類までしか調べない、ということのようです。</p><p>このために、インデックスに登録されているすべての文書が検索結果として出てこなくなるようです。</p><p>対処としましては、estseek.cgiで検索を行う場合は、このwildmaxパラメータはestseek.confで設定できます。この値を大きな数字にしてみてください。</p><p>estcmd ではこのパラメータを変更できないようでして、添付のパッチを作りました。</p><p>hyperestraier-1.4.13/でpatch -p0 < ＜パッチファイルのフルパス＞で適用できます。</p><p>
このパッチをあてると estcmd search に -wmax というオプションを使えるようになります。</p><p class="source">SourceForge.net: Hyper Estraier - Mailing List</p></blockquote>

API経由なら「est_db_set_wildmax」を使用して上限値を上げることで、漏れなく検索できるとのこと。

実際の動作確認はまだ、なのでメモしておく。

<ul class="ref">
<li><a title="参考ページ" href="http://hyperestraier.sourceforge.net/intro-ja.html#deployment">Introduction of Hyper Estraier Version 1 (Japanese) # 検索機能の配備</a></li>
<li><a title="参考ページ" href="http://www.crimson-snow.net/hmsvr/centos/memo/hyperestraier.html">全文検索システム「Hyper Estraier」の導入</a> ("「Hyper Estraier」の実行" の見出し以降が参考になる)</li>
<li><a title="参考ページ" href="http://sites.google.com/a/openskip.org/docs/techinfo/fulltextsearch">全文検索 (ドキュメント)</a> (<a class="external" title="参考ページ" href="http://www.openskip.org/">TIS のオープンソース SKIP</a> 関連のページより)</li></ul>

<h4>おまけ</h4>

<h5>rpm 化はいずれ...</h5>

<p class="ref"><a title="参考ページ" href="http://www.impressit.co.jp/blog/dev/?p=65">でぶろぐ。 / HyperEstraierをCentOS 5.1に導入</a></p>

<h5>Python & Django で Hyper Estraier</h5>

Python より Hyper Estraier を利用するライブラリ

<ul class="ref"><li><a title="参考ページ" href="http://www.liris.org/tech/program/hyperestraier-purepython/">Pure Python HyperEstraier - Emerge Technology</a> (Ohtani さんのがよさ気)</li>
<li><a title="参考ページ" href="http://www.geocities.co.jp/ndpcw007/perezvon/">Perezvon's archives &gt; estraierpure</a></li></ul>

<ul class="ref"><li><a title="参考ページ" href="http://d.hatena.ne.jp/perezvon/20061127/1164652458">DjangoでHyper Estraierを使う - スコトプリゴニエフスク通信</a></li></ul>

<h5>patch の使い方</h5>

パッチファイルと対象ファイルとの相対位置 ... 云々のところがまだよくわからない。-p オプションの使い方とか...

<blockquote cite="http://www.sip.eee.yamaguchi-u.ac.jp/kou/diff-patch.html"><p class="title"><a href="http://www.sip.eee.yamaguchi-u.ac.jp/kou/diff-patch.html">patch/diff Tips</a></p><p>-p オプションは差分作成時の相対ディレクトリを有効にします (-p がないと全てのファイルがカレントディレクトリにあると仮定されます)。 -p の後ろの 0 は 差分ファイルに記録されている相対ディレクトリを全て有効にするという意味です。 1、2 と増えていくと、記録された相対ディレクトリが頭から１つづつ削られます (例 : -p1 だと usr/local/src → local/src、-p2 だと usr/local/src → src)。</p><p class="source">Personal Information Box</p></blockquote>


<h5>tee コマンドいいかも</h5>

<blockquote cite="http://x68000.q-e-d.net/~68user/unix/pickup?tee"><p class="title"><a href="http://x68000.q-e-d.net/~68user/unix/pickup?tee">tee コマンド</a></p><p>パイプからの入力を標準出力と指定ファイルに書き出す</p><p class="source">UNIXの部屋</p></blockquote>]]></description>
         <link>http://jamz.jp/tech/2008/08/patch-to-hyper-estraier-before-install.html</link>
         <guid>http://jamz.jp/tech/2008/08/patch-to-hyper-estraier-before-install.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">インストール・アップグレード</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">hyper estraier</category>
        
         <pubDate>Sun, 03 Aug 2008 14:20:26 +0900</pubDate>
      </item>
      
      <item>
         <title>WWW SQL Designer 2.1.1 の日本語化</title>
         <description><![CDATA[フレームワークのモデルを自動生成する仕組みがないか調べていたら、そこから広がっちゃって <a class="external" title="参考ページ" href="http://ondras.zarovi.cz/sql/">WWW SQL Designer</a> の日本語化を始めちゃった。

もう少し詳しく書くと、TurboGears の ModelDesigner のようなツールってほかにないのかなぁとフレームワークからみで調べていたら以下のような記述を発見したのが切っ掛けで WWW SQL Designer をいじり始めた。

<blockquote cite="http://docs.turbogears.org/1.1/DevPlans#improve-the-toolbox"><p class="title"><a href="http://docs.turbogears.org/1.1/DevPlans#improve-the-toolbox">Improve the Toolbox</a></p><p>ModelDesigner should work with SA and Elixir, too.</p><ul><li>ChrisZ considers doing this if time permits</li><li>Needs update to latest WWW SQL Designer, and addition of XSLT transformations to generate SA and Elixir models</li><li>TG2 team may be interested in this, too</li></ul><p class="source">1.1/DevPlans - TurboGears Documentation</p></blockquote>

<a class="external" title="参考ページ" href="http://ondras.zarovi.cz/sql/">WWW SQL Designer</a> 自体は主に JavaScript で開発されたオンライン (ブラウザ) で動作する ER図作成ツール。

正確にはオフラインでもブラウザさえあれば動作するツールで、保存やロードはテキストのコピペで対応するといった具合。

こんな感じ。

<p class="center"><a href="http://jamz.jp/tech/img/wwwsqldesinger-save-xml.png"><img alt="wwwsqldesinger-save-xml.png" src="http://jamz.jp/tech/img/wwwsqldesinger-save-xml-thumb-450x274.png" width="450" height="274" class="mt-image-none" style="" /></a></p>

SQL文の自動生成にも対応。

<p class="center"><a href="http://jamz.jp/tech/img/wwwsqldesinger-save-sql.png"><img alt="wwwsqldesinger-save-sql.png" src="http://jamz.jp/tech/img/wwwsqldesinger-save-sql-thumb-450x266.png" width="450" height="266" class="mt-image-none" style="" /></a></p>

いずれも JavaScript で文字列生成しているので、ファイル生成/保存なんかが (基本) できないためしかたない。(HTA などの特殊技術を利用すれば、実現はできますが...)

PHP でバックエンドにデータベースをおいて、そこに保存したり、データベースからリバースして ER図を自動生成 (インポート) する、なんてこともできるっぽい。

っで、本題。

言語ファイルは xml で定義されており、locale/ja.xml というファイルを今回作成した。

100% 日本語訳になっていないけど、おおよそ分かるからよしとする。日本語化できていないもののほとんどがメッセージの再現場所が分からず日本語訳の予測ができなかったから。

<pre class="terminal"><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;locale&gt;
	&lt;!-- table management --&gt;
	&lt;string name=&quot;addtable&quot;&gt;テーブル追加&lt;/string&gt;
	&lt;string name=&quot;edittable&quot;&gt;テーブル編集&lt;/string&gt;
	&lt;string name=&quot;removetable&quot;&gt;テーブル削除&lt;/string&gt;
	&lt;string name=&quot;aligntables&quot;&gt;テーブルの整列&lt;/string&gt;
	&lt;string name=&quot;cleartables&quot;&gt;テーブル全削除&lt;/string&gt;
	&lt;string name=&quot;confirmall&quot;&gt;本当に全てのテーブルを削除しますか&lt;/string&gt;
	&lt;string name=&quot;newtable&quot;&gt;新規テーブル&lt;/string&gt;
	&lt;string name=&quot;addpending&quot;&gt;テーブル配置&lt;/string&gt;
	&lt;string name=&quot;tablenamelabel&quot;&gt;テーブル名&lt;/string&gt;
	&lt;string name=&quot;tablecommentlabel&quot;&gt;コメント&lt;/string&gt;
	
	&lt;!-- row management --&gt;
	&lt;string name=&quot;addrow&quot;&gt;フィールド追加&lt;/string&gt;
	&lt;string name=&quot;editrow&quot;&gt;フィールド編集&lt;/string&gt;
	&lt;string name=&quot;removerow&quot;&gt;フィールド削除&lt;/string&gt;
	&lt;string name=&quot;uprow&quot;&gt;行移動(上)&lt;/string&gt;
	&lt;string name=&quot;downrow&quot;&gt;行移動(下)&lt;/string&gt;
	&lt;string name=&quot;newrow&quot;&gt;新規フィールド&lt;/string&gt;
	&lt;string name=&quot;foreigncreate&quot;&gt;外部キー設定&lt;/string&gt;
	&lt;string name=&quot;foreignpending&quot;&gt;外部キーの対象テーブルをクリック&lt;/string&gt;
	&lt;string name=&quot;confirmtable&quot;&gt;本当にテーブルを削除しますか&lt;/string&gt;
	&lt;string name=&quot;confirmrow&quot;&gt;本当にフィールドを削除しますか&lt;/string&gt;
	
	&lt;!-- row edit --&gt;
	&lt;string name=&quot;name&quot;&gt;名称&lt;/string&gt;
	&lt;string name=&quot;type&quot;&gt;型&lt;/string&gt;
	&lt;string name=&quot;size&quot;&gt;サイズ&lt;/string&gt;
	&lt;string name=&quot;def&quot;&gt;初期値&lt;/string&gt;
	&lt;string name=&quot;notnull&quot;&gt;NOT NULL&lt;/string&gt;
	&lt;string name=&quot;ai&quot;&gt;自動振番&lt;/string&gt;
	&lt;string name=&quot;comment&quot;&gt;コメント編集&lt;/string&gt;
	&lt;string name=&quot;commenttext&quot;&gt;このフィールドのコメントを入力&lt;/string&gt;
	
	&lt;!-- windows &amp; options --&gt;
	&lt;string name=&quot;windowok&quot;&gt;OK&lt;/string&gt;
	&lt;string name=&quot;windowcancel&quot;&gt;キャンセル&lt;/string&gt;
	&lt;string name=&quot;throbber&quot;&gt;しばらくお待ちください...&lt;/string&gt;
	&lt;string name=&quot;options&quot;&gt;オプション&lt;/string&gt;
	&lt;string name=&quot;language&quot;&gt;言語&lt;/string&gt;
	&lt;string name=&quot;db&quot;&gt;新規デザインの対象データベース&lt;/string&gt;
	&lt;string name=&quot;optionsnotice&quot;&gt;いくつかのオプション設定はページが完全リロードされるまで有効になりません。オプション設定を反映させるためには Cookie を有効にしてください。&lt;/string&gt;
	&lt;string name=&quot;snap&quot;&gt;テーブルの間隔&lt;/string&gt;
	&lt;string name=&quot;optionsnapnotice&quot;&gt;ピクセル, 0 = 無効 snapping&lt;/string&gt;
	&lt;string name=&quot;pattern&quot;&gt;外部名の命名規則&lt;/string&gt;
	&lt;string name=&quot;optionpatternnotice&quot;&gt;%T = 主テーブル, %R = 主キー, %t = 外部テーブル&lt;/string&gt;
	&lt;string name=&quot;hide&quot;&gt;テーブルドラッグ中にコネクター(キー線)を隠す&lt;/string&gt;
	&lt;string name=&quot;vector&quot;&gt;コネクター(キー線)をスムーズに描画 (サポート対象のブラウザの場合)&lt;/string&gt;
	
	&lt;!-- keys --&gt;
	&lt;string name=&quot;tablekeys&quot;&gt;テーブルキー&lt;/string&gt;
	&lt;string name=&quot;keyslistlabel&quot;&gt;Keys in table &quot;%s&quot;&lt;/string&gt;
	&lt;string name=&quot;keytypelabel&quot;&gt;型:&lt;/string&gt;
	&lt;string name=&quot;keynamelabel&quot;&gt;名称:&lt;/string&gt;
	&lt;string name=&quot;keyfieldslabel&quot;&gt;Fields in key&lt;/string&gt;
	&lt;string name=&quot;keyavaillabel&quot;&gt;Available fields&lt;/string&gt;
	&lt;string name=&quot;keyedit&quot;&gt;キー編集&lt;/string&gt;
	&lt;string name=&quot;keyadd&quot;&gt;キー追加&lt;/string&gt;
	&lt;string name=&quot;keyremove&quot;&gt;キー削除&lt;/string&gt;
	
	&lt;!-- io --&gt;
	&lt;string name=&quot;saveload&quot;&gt;保存/ロード&lt;/string&gt;
	&lt;string name=&quot;empty&quot;&gt;XMLデータを下のテキストエリアに貼付けて、再度試してください。&lt;/string&gt;
	&lt;string name=&quot;client&quot;&gt;クライアント&lt;/string&gt;
	&lt;string name=&quot;server&quot;&gt;サーバー&lt;/string&gt;
	&lt;string name=&quot;output&quot;&gt;入力/出力&lt;/string&gt;
	&lt;string name=&quot;clientsave&quot;&gt;XML保存&lt;/string&gt;
	&lt;string name=&quot;clientload&quot;&gt;XML読込&lt;/string&gt;
	&lt;string name=&quot;clientsql&quot;&gt;SQL生成&lt;/string&gt;
	&lt;string name=&quot;backendlabel&quot;&gt;Server backend:&lt;/string&gt;
	&lt;string name=&quot;serversave&quot;&gt;サーバー保存&lt;/string&gt;
	&lt;string name=&quot;serverload&quot;&gt;サーバー読込&lt;/string&gt;
	&lt;string name=&quot;serverlist&quot;&gt;List items&lt;/string&gt;
	&lt;string name=&quot;serverimport&quot;&gt;DBからインポート&lt;/string&gt;
	&lt;string name=&quot;serverloadprompt&quot;&gt;Enter keyword under which your design was saved:&lt;/string&gt;
	&lt;string name=&quot;serversaveprompt&quot;&gt;Enter keyword under which your design will be saved:&lt;/string&gt;
	&lt;string name=&quot;serverimportprompt&quot;&gt;インポートするデータベース名を入力してください:&lt;/string&gt;
	&lt;string name=&quot;httpresponse&quot;&gt;Server response&lt;/string&gt;
	&lt;string name=&quot;http201&quot;&gt;Saved&lt;/string&gt;
	&lt;string name=&quot;http404&quot;&gt;Not Found&lt;/string&gt;
	&lt;string name=&quot;http500&quot;&gt;Internal Server Error&lt;/string&gt;
	&lt;string name=&quot;http501&quot;&gt;Not Implemented&lt;/string&gt;
	&lt;string name=&quot;http503&quot;&gt;Service Unavailable&lt;/string&gt;
	
	&lt;!-- misc --&gt;
	&lt;string name=&quot;xmlerror&quot;&gt;XMLエラー&lt;/string&gt;
	&lt;string name=&quot;docs&quot;&gt;ドキュメント&lt;/string&gt;
	
&lt;/locale&gt;</code></pre>

<ul class="script"><li><a href="http://jamz.jp/tech/file/ja.xml">ja.xml</a></li></ul>

上記 XML を UTF-8 なファイルにコピペして保存か、作成済みのファイルを入手。

その後、js/config.js という設定ファイルの言語設定を ja に変更。

<pre class="terminal">< code >AVAILABLE_LOCALES:[&quot;en&quot;,&quot;fr&quot;,&quot;de&quot;,&quot;cs&quot;,&quot;ja&quot;],
DEFAULT_LOCALE:&quot;ja&quot;,</code></pre>

以上で、日本語化完了。]]></description>
         <link>http://jamz.jp/tech/2008/07/localize-www-sql-designer.html</link>
         <guid>http://jamz.jp/tech/2008/07/localize-www-sql-designer.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">アプリケーション・フレームワーク</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">model</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">WWW SQL Designer</category>
        
         <pubDate>Mon, 28 Jul 2008 22:08:47 +0900</pubDate>
      </item>
      
      <item>
         <title>国際化対応済み (標準で日本語化されている) Trac 0.12dev をインストール</title>
         <description><![CDATA[<ins>以前書いた 0.10 のころ (だったと思いますが...) のインストール方法のエントリーが結構参照されているっぽい</ins>

<p class="ref"><a href="http://jamz.jp/tech/2006/07/install-trac-ja.html">Trac-ja を新規でインストール</a></p>

CentOS 5.2 の標準的な環境 (Python なんかが初期状態) で Trac 0.12dev をインストールしてみました。

長いこと 0.10 系だったせいか、0.11 や 0.12 の情報が少ない。0.11 はようやく正式版が出たけど、0.12 に至っては...

最近、Subversion, Trac の新書が出ていた。

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798013730/jamzjp-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41V2A26MT4L._SL160_.jpg" alt="入門Subversion―Windows/Linux対応" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798013730/jamzjp-22/ref=nosim/" name="amazletlink" target="_blank">入門Subversion―Windows/Linux対応</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4798013730/jamzjp-22/ref=nosim/" title="入門Subversion―Windows/Linux対応" target="_blank">amazlet</a> at 08.06.29</div></div><div class="amazlet-detail">上平 哲 <br />秀和システム <br />売り上げランキング: 25622<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-5.gif" alt="4.5" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> Subversionを使えるようになります。<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 初心者には適した解説本<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> 個人から小規模の開発用途までに<br />必要十分な内容<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> 概念を学びたい人には適してます。<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> バックアップツール<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798013730/jamzjp-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798019615/jamzjp-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/515Kp-CGcAL._SL160_.jpg" alt="入門Trac with Subversion―Linux/Windows対応" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798019615/jamzjp-22/ref=nosim/" name="amazletlink" target="_blank">入門Trac with Subversion―Linux/Windows対応</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4798019615/jamzjp-22/ref=nosim/" title="入門Trac with Subversion―Linux/Windows対応" target="_blank">amazlet</a> at 08.06.29</div></div><div class="amazlet-detail">高山 恭介 <br />秀和システム <br />売り上げランキング: 3273<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798019615/jamzjp-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

さておき、0.8, 0.9 あたりから 0.10 を長いこと使っていたのでちょっと戸惑った。

インストールなど基本的なことはあまり変わっていない、むしろ簡便になっているとは思うけど若干勝手が違ったのでメモしておく。

Trac のソースより trunk (0.12dev) の INSTALL を覗くと

<pre class="terminal"><code>python ./setup.py install</code></pre>

とあるだけ、これなら以前と変わらない。

でも、(0.11 対象だけど) 公式サイトを参照すると何やら色々必要なモジュール (ライブラリ) が色々あるっぽい。

<p class="ref"><a title="参考ページ" href="http://trac.edgewall.org/wiki/TracInstall">TracInstall - The Trac Project - Trac</a></p>

easy_install が入っていれば以下のコマンドで必要なモジュールも含めて ? インストールされる。

<pre class="terminal"><code>easy_install Trac</code></pre>

どんなものが必要なのか知っておきたいので、見当のつくモジュールは先にインストールした。

必要なモジュールに関しては trunk (0.12dev) の setup.py を見るとヒントがある。

<pre class="terminal"><code># 70行目前後
    install_requires = [
        'setuptools>=0.6b1',
        'Genshi>=0.5'
    ],
    extras_require = {
        'Babel': ['Babel>=0.9.2'],
        'Pygments': ['Pygments>=0.6'],
        'reST': ['docutils>=0.3'],
        'SilverCity': ['SilverCity>=0.9.4'],
        'Textile': ['textile>=2.0'],
    },</code></pre>

0.12 では 開発元の Edgewall が開発している Genshi や Babel などのモジュール (ライブラリ) も利用するようだ。

まずは easy_install をインストール。Perl でいうところの cpan みたいなもの (だと思っている)

<p class="ref"><a title="参考ページ" href="http://peak.telecommunity.com/DevCenter/EasyInstall">EasyInstall - The PEAK Developers' Center</a></p>

上記より、ez_setup.py を入手。

<pre class="terminal"><code>wget http://peak.telecommunity.com/dist/ez_setup.py
python ./ez_setup.py</code></pre>

これにより <code>easy_install</code> というコマンドが <code>/usr/bin</code> に追加される。

次にライブラリ関係のインストール

<pre class="terminal"><code>yum install python-setuptools
easy_install Genshi
easy_install Babel
easy_install Pygments
easy_install docutils
easy_install textile</code></pre>

easy_install SilverCity はエラーこいたので取り敢えず無視。トラブル発生したら追求する。多分、ソース拾ってきてインストールすれば入ると思う。

ちなみに SilverCity のエラーはこんな感じ。

<pre class="terminal"><code>No local packages or download links found for SilverCity
error: Could not find suitable distribution for Requirement.parse('SilverCity')</code></pre>

っで、ようやく Trac 本体のインストール

0.12dev = svn の trunk ということになるので、常時コミットされているような開発版ということでもある。なので定期的にインストール (アップグレード) する必要がありそう。

少々面倒な気もするけど、標準で日本語化されているというのは大きい。というか、、最新を使いたいという興味が強いだけかっ...

0.11 のローカライズ版 (有志の型の日本語版 Trac ) もあるようだけど、あくまでも派生系だから。

<blockquote cite="http://www.shuwasystem.co.jp/support/7980html/1961.html"><p class="title"><a href="http://www.shuwasystem.co.jp/support/7980html/1961.html">入門Trac with Subversion Linux/Windows対応</a></p><p>当該ページにおきまして、Trac日本語版（以下trac-ja）のバージョン0.11の正式なリリースが行なわれているかのような記述がありますが、そのような事実はありません。</p><p>したがいまして、記載内容通りにインストール作業を進める事ができません。</p><p>trac-jaは、英語版が正式リリースされてから新しいバージョンのリリースが行なわれるので、現時点で、trac-jaのバージョン0.11のリリースの予定は未定です。</p><p>そこで、英語版Tracの最新リリースである0.11rc1をもとに、trac-jaのバージョン0.10.4時点での翻訳を反映したバージョンを作成いたしました。trac-jaから派生した完全に別のリリースであるため、こちらのリリースはtrac-shuwaと呼ぶ事にします。</p><p class="source">サポート｜秀和システム</p></blockquote>

っで、trunk からどうインストールするかなんだけど、まずはソースを適当なディレクトリに svn checkout もしくは svn export してくる。

<pre class="terminal"><code>svn export http://svn.edgewall.com/repos/trac/trunk ./trunk</code></pre>

っで、ここからが知らないと分からない。

<pre class="terminal"><code>python setup.py compile_catalog -f
python setup.py build
python setup.py install</code></pre>

INSTALL を見ると <code>setup.py install</code> としか書いていない。もしかすると <code>setup.py compile_catalog</code> や <code>setup.py build</code> は <code>setup.py install</code> で一括してやってくれるのか ?

それと Trac の初期設定のコマンドの内容が少し変更になっている。以前はテンプレートを指定することになっていたど、これがいらないみたい。

<code>trac-admin --help</code> で参照してみると <code>&lt;templatepath&gt;</code> がなくなっている。

<pre class="terminal"><code>initenv &lt;projectname&gt; &lt;db&gt; &lt;repostype&gt; &lt;repospath&gt;</code></pre>

ちなみに、<code>trac-admin /path/to/trac/install/dir initenv</code> で対話式で初期設定してもテンプレートのパスを聞いてこない。

あわせて、古いバージョンだとテンプレート関係が <code>/usr/share/trac</code> に配置 (配布) されていたけど、今回インストールしたときにそれがなかった。

あとは、trac.ini の中身を見てみると以前との違いが色々分かる。それらについては追々理解しく。

<h4>Genshi の  EGG のキャッシュがバグを含んでいる ??</h4>

インストール後、最初に躓いたことをメモしておく。

プラグインのキャッシュの設定でものによっては <code>SetEnv PYTHON_EGG_CACHE</code> というのを <code>httpd.conf</code> に書かないといけない場合があるけど、これがなぜかちゃんと認識してくれない。

<p class="ref"><a title="参考ページ" href="http://trac.edgewall.org/wiki/TracPlugins#SettingupthePluginCache">TracPlugins# Setting up the Plugin Cache - The Trac Project - Trac</a></p>

初期設定した Trac のページにアクセスするとapache のエラーログにはキャッシュディレクトリにアクセスできないペーミッションが正しくないんじゃない ? 的な記録が残っていた。

<pre class="terminal"><code>ExtractionError: Can't extract file(s) to egg cache
 
The following error occurred while trying to extract file(s) to the Python egg
cache:
 
  [Errno 13] Permission denied: '/home/.python-eggs'
 
The Python egg cache directory is currently set to:
 
  /home/.python-eggs
 
Perhaps your account does not have write access to this directory?  You can
change the cache directory by setting the PYTHON_EGG_CACHE environment
variable to point to an accessible directory.</code></pre>

<code>httpd.conf</code> に <code>SetEnv PYTHON_EGG_CACHE</code> を追記する前は <code>/home/.python-eggs</code> の部分が <code>/root/.python-eggs</code> だった。訳が分からない。

<ul class="ref"><li><a title="参考ページ" href="http://takanory.net/takalog/898">trac 0.11rc2 がリリース(Genshi でハマる) -- takanory.net</a></li>
<li><a title="参考ページ" href="http://takanory.net/takalog/902">Genshi 0.5 再インストール + trac 0.11rc2 日本語版 -- takanory.net</a></li></ul>

Plone マスター ? takanory さんのサイトに解決策があった。

<blockquote cite="http://takanory.net/takalog/902"><p class="title"><a href="http://takanory.net/takalog/902">Genshi 0.5 再インストール + trac 0.11rc2 日本語版</a></p><p>なるほど、unzipという方法もあるんですね。私は、#7320のコメントを参考に、/etc/sysconfig/httpd のファイルにexport PYTHON_EGG_CACHE=(eggのキャッシュフォルダ)を追記して動かしていました(CentOS5.0)が、httpdの設定ファイルを書き換えるのもなぁ・・・と思っていました（＾＾；</p><p>※どうも、httpd.confのSetEnvが無視されるようになってしまったのが原因のようで。</p><p class="source">takanory.net</p></blockquote>

どうやら本家でチケットが切られている問題っぽい。

<blockquote cite="http://trac.edgewall.org/ticket/7320"><p class="title"><a href="http://trac.edgewall.org/ticket/7320">#7320 (traceback for genshi-related error)</a></p><p>The quick/simple fix is to add to the end of: /etc/sysconfig/httpd export PYTHON_EGG_CACHE=/tmp </p><p class="source">The Trac Project - Trac</p></blockquote>

これを知ったのが解決した後だったので...

私はエラーログの指摘の通り、<code>/home/.python-eggs</code> ディレクトリを作成して、apache が書き込みできるように設定した... (<a href="how-to-repair">後述</a>)

ただ、ちょっと気になるのは takanory さんのエントリーにあった 「httpd.confのSetEnvが無視されるようになってしまった」というコメント。

これって、apache がダメなの ? mod_python がダメなの ? それとも Trac ?

<a name="how-to-repair"></a>話を戻して、最終的には (<code>/home/.python-eggs</code> は気持ち悪いので) <code>PYTHON_EGG_CACHE </code> が認識されるよう <code>/etc/sysconfig/httpd</code> に設定を追加して、/tmp あたりにキャッシュ用のディレクトリを作成して対応した。

<pre class="terminal"><code>vim /etc/sysconfig/httpd
 
# <del>PYTHON_EGG_CACHE=/tmp/.python-eggs</del>
<ins>export PYTHON_EGG_CACHE=/tmp/.python-eggs</ins></code></pre>

行末に設定を追記して、

<pre class="terminal"><code>cd /tmp
mkdir .python-eggs
chmod 777 .python-eggs</code></pre>

した ... けどダメだった。<del>結局、最初の /home/.python-eggs しか認識してくれない...</del>

<ins>記述が間違ってた。export PYTHON_EGG_CACHE=/tmp/.python-eggs の export が抜けていた...</ins>

<h4>mod_python の 設定内容が変わっている</h4>

0.10 の頃の設定で正常に動いていると思っていたけど、甘かった。
ブラウザ越しに一通り眺めて login しようと思ったらできず...

設定項目 ? ディレクティブ ? パラメーター ? (呼称がわかりませんが) <code>httpd.conf</code> の Location ディレクティブにて設定する項目が増えていた。

<p class="ref"><a title="参考ページ" href="http://trac.edgewall.org/wiki/TracModPython#Simpleconfiguration">TracModPython#Simpleconfiguration - The Trac Project - Trac </a></p>

上記の公式ページを見ると、一つ目は必須の設定項目で、二つ目以降が options available で紹介されている。

<pre class="terminal"><code>PythonInterpreter main_interpreter
 
# For a single project
PythonOption TracEnv /var/trac/myproject
# For multiple projects
PythonOption TracEnvParentDir /var/trac/myprojects
# For the index of multiple projects
PythonOption TracEnvIndexTemplate /srv/www/htdocs/trac/project_list_tepmlate.html
# A space delimitted list, with a "," between key and value pairs.
PythonOption TracTemplateVars key1,val1 key2,val2
# Useful to get the date in the wanted order
PythonOption TracLocale en_GB.UTF8
# See description above        
PythonOption TracUriRoot /projects/myproject</code></pre>

<code>TracEnvIndexTemplate</code> ってのがとても気になる。多分、複数の Trac を利用しているときにルートで一覧表示される Trac の一覧のことなんじゃないかと思うけど、これがカスタマイズできるのは大変ありがたい。

と勝手に予測しているけど、あっているかどうかは不明...

私の設定は以下のような感じ。

<pre class="terminal"><code>&lt;Location /&gt;
	SetHandler mod_python
	#SetEnv PYTHON_EGG_CACHE /home/.python-eggs
	PythonInterpreter main_interpreter
	PythonHandler trac.web.modpython_frontend
	PythonOption TracEnv /path/to/trac/project
	#PythonOption TracEnvParentDir /path/to/trac/project
	PythonOption TracLocale ja_JP.UTF8
	PythonOption TracUriRoot /
&lt;/Location&gt;
 
#&lt;LocationMatch &quot;/[^/]+/login&quot;&gt;
&lt;Location /login&gt;
	AuthType Digest
	# Trac login
	AuthName &quot;Authentication Directory&quot;
	#AuthDigestDomain
	AuthDigestProvider file
	AuthUserFile /etc/httpd/.htdigest
	Require valid-user
&lt;/Location&gt;
#&lt;/LocationMatch&gt;</code></pre>

login も正常に動作しているっぽい。もう少し運用してみると、もしかすると問題が出てくるかも...

<h4>おまけ</h4>

淡々と、Trac 0.12dev のインストールログをアップしている人がいた。この人のログもちょこちょこ参照しました。

<ul class="ref"><li><a title="参考ページ" href="http://geocities.yahoo.co.jp/gl/xmlinux2004/view/20080602/1212377186">[Trac Lightning] Trac 0.12dev-r7181 をインストール - XMLinuxのジオログ - Yahoo!ジオシティーズ</a></li>
<li><a title="参考ページ" href="http://geocities.yahoo.co.jp/gl/xmlinux2004/view/20080516/1210910825">[Trac Lightning] Trac 0.12dev-r7070 をインストール - XMLinuxのジオログ - Yahoo!ジオシティーズ</a></li></ul>]]></description>
         <link>http://jamz.jp/tech/2008/06/how-to-install-trac-0_12_dev.html</link>
         <guid>http://jamz.jp/tech/2008/06/how-to-install-trac-0_12_dev.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">アプリケーション・フレームワーク</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">trac</category>
        
         <pubDate>Sun, 29 Jun 2008 01:37:31 +0900</pubDate>
      </item>
      
      <item>
         <title>MacOSX 10.4 + MacPorts の Python 2.5 で smtplib 使ってたら socket.ssl ってエラーが</title>
         <description><![CDATA[OP25B の影響下でローカルマシンからメール送信したくて、以前書いたプログラムなんだけど、マシンを再インストールしたり、ゴニョゴニョ色々していたら動かなくなった...

書いたのは、以下のようなプログラム。

<pre class="terminal"><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import smtplib
from email.MIMEText import MIMEText
from email.Utils import formatdate
 
args = {}
args["subject"] = sys.argv[1]
args["from_email"] = sys.argv[2]
args["to_email"] = sys.argv[3]
 
#UTF-8
data = sys.stdin.read()
 
body = unicode(data, "utf8").encode('iso-2022-jp','replace')
 
msg = MIMEText(body, 'plain', 'iso-2022-jp')
msg['Subject'] = args["subject"]
msg['From'] = args["from_email"]
msg['To'] = args["to_email"]
msg['Date'] = formatdate()
 
s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login('example@gmail.com', 'password')
s.sendmail(args["from_email"], [args["to_email"]], msg.as_string())
s.quit()</code></pre>

上記ソースを send_mail.py で保存したと仮定して、

<pre class="terminal"><code>echo "test mail" | send_mail.py "subject" send_from@example.com send_to@example.com</code></pre>

とかすればいい。

最初は、標準で入っている python 2.3 ? で実行したら

<pre class="terminal"><code>Traceback (most recent call last):
  File "/opt/local/script/update-notifier.py", line 16, in ?
    body = unicode(data, "utf8").encode('iso-2022-jp','replace')
LookupError: unknown encoding: iso-2022-jp</code></pre>

とかエラーが出て ???

macports でインストールした python2.5 で再実行したら

<pre class="terminal"><code>echo "test mail" | python2.5 send_mail.py "subject" send_from@example.com send_to@example.com</code></pre>

socket.ssl なんて attribute はないと

<pre class="terminal"><code>Traceback (most recent call last):
  File "/opt/local/script/update-notifier.py", line 27, in <module>
    s.starttls()
  File "/opt/local/lib/python2.5/smtplib.py", line 605, in starttls
    sslobj = socket.ssl(self.sock, keyfile, certfile)
AttributeError: 'module' object has no attribute 'ssl'</code></pre>

困って検索したら関連ありそうなページがいくつか見つかったんだけど、英語でよくわからない。

<ul class="ref"><li><a title="参考ページ" href="http://www.mail-archive.com/trac-users@googlegroups.com/msg08221.html">[Trac] Re: ERROR: Failure sending notification on creation of ticket #1:</a></li>
<li><a title="参考ページ" href="http://72.14.235.104/search?q=cache:8-VPnvKwcFEJ:blog.e-shell.org/72+python2.5+smtplib+socket.ssl(self.sock,+keyfile,+certfile)&hl=ja&ct=clnk&cd=1&gl=jp&client=firefox-a">Problem with ssl in Python 2.5</a></li></ul>

二つ目のサイトはエラーってて Google のキャッシュからなんとか情報拾って、

<blockquote cite="http://72.14.235.104/search?q=cache:8-VPnvKwcFEJ:blog.e-shell.org/72+python2.5+smtplib+socket.ssl(self.sock,+keyfile,+certfile)&hl=ja&ct=clnk&cd=1&gl=jp&client=firefox-a"><p class="title"><a href="http://72.14.235.104/search?q=cache:8-VPnvKwcFEJ:blog.e-shell.org/72+python2.5+smtplib+socket.ssl(self.sock,+keyfile,+certfile)&hl=ja&ct=clnk&cd=1&gl=jp&client=firefox-a">Problem with ssl in Python 2.5</a></p><p>There it was! a py25-socket-ssl port. I proceeded installing it:</p><p class="source">» e-shell.org</p></blockquote>

書かれているがままに、py25-socket-ssl をインストールしたら

<pre class="terminal"><code>sudo /opt/local/bin/port install py25-socket-ssl</code></pre>

動いた。

だけど、プロバイダのメール (e.g. @biglobe.ne.jp とか) にはスパム判定されちゃうのか、うまく送れなかった。

多分原因は、ここ (<a class="external" title="参考ページ" href="http://jamz.jp/tech/2008/06/handling-of-op25b-on-yahoobb.html">[J] YahooBB 回線下で OP25B に対応する自宅サーバーの MTA - Jamz (Tech)</a>) とかと似たようなことだろうから無視。

とりあえず、解決。 ]]></description>
         <link>http://jamz.jp/tech/2008/06/socket-ssl-error-on-macosx10_4-in-python-2_5.html</link>
         <guid>http://jamz.jp/tech/2008/06/socket-ssl-error-on-macosx10_4-in-python-2_5.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">サーバー</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">python</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">smtplib</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">socket-ssl</category>
        
         <pubDate>Sat, 28 Jun 2008 16:31:57 +0900</pubDate>
      </item>
      
      <item>
         <title>suEXEC を /home 配下で有効にする</title>
         <description><![CDATA[適当なところにまずはソースを落としてくる。

<pre class="terminal"><code>wget http://ftp.iij.ad.jp/pub/linux/centos/5.2/os/SRPMS/httpd-2.2.3-11.el5_1.centos.3.src.rpm</code></pre>

ダウンロードが終わったらソースをインストール ? 

<code>/usr/src/redhat/SPECS/httpd.spec</code> なんかを作る作業なのかな。

<pre class="terminal"><code>rpm -ihv ./httpd-2.2.3-11.el5_1.centos.3.src.rpm</code></pre>

以下のような警告ができるけれどエラーではないので無視。

<pre class="terminal"><code>警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します</code></pre>

以下が、今回のメイン処理。http のルート ? ディレクトリを /home とすることでその設定の内容でコンパイルしてくれる。

<pre class="terminal"><code>vim /usr/src/redhat/SPECS/httpd.spec
#%define contentdir /var/www
%define contentdir /home</code></pre>

rpm をリビルドする。

<pre class="terminal"><code>rpmbuild --bb /usr/src/redhat/SPECS/httpd.spec</code></pre>

リビルドした rpm をインストール

<pre class="terminal"><code>rpm -ihv /usr/src/redhat/RPMS/i386/httpd-2.2.3-11%{dist}.3.i386.rpm
rpm -ihv /usr/src/redhat/RPMS/i386/httpd-devel-2.2.3-11%{dist}.3.i386.rpm
rpm -ihv /usr/src/redhat/RPMS/i386/httpd-manual-2.2.3-11%{dist}.3.i386.rpm
rpm -ihv /usr/src/redhat/RPMS/i386/mod_ssl-2.2.3-11%{dist}.3.i386.rpm</code></pre>

そうすると /home 以下に cgi-bin, error, html, icons, manual などのディレクトリに作成されるので /var/www などに移動してあげる。

最後に、yum update などで勝手にアップグレードされないように exclude の設定をしておく。

<pre class="terminal"><code>vim /etc/yum.repos.d/CentOS-Base.repo
 
[base]
　：
　：
exclude=httpd*
 
[updates]
　：
　：
exclude=httpd*</code></pre>]]></description>
         <link>http://jamz.jp/tech/2008/06/enable-suexec-under-home-dir.html</link>
         <guid>http://jamz.jp/tech/2008/06/enable-suexec-under-home-dir.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">サーバー</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">httpd</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">rpm</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">suexec</category>
        
         <pubDate>Sat, 28 Jun 2008 13:52:33 +0900</pubDate>
      </item>
      
      <item>
         <title>yum のリポジトリを増やす</title>
         <description><![CDATA[バージョン管理システムに Subversion を利用しているが、最近はリポジトリの種類も多様化 ? してきて Python で実装された <a class="external" title="参考ページ" href="http://www.selenic.com/mercurial/wiki/index.cgi">Mercurial</a> や Linux 開発者の Linus が開発した <a class="external" title="参考ページ" href="http://git.or.cz/">Git - Fast Version Control System</a> なんかも出てきている。

Mercurial をインストールしたかったんだけど CentOS 5.1 の yum の初期状態のリポジトリには含まれていないっぽい。

<pre class="terminal"><code>yum install mercurial
Loading "fastestmirror" plugin
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
extras                    100% |=========================| 1.1 kB    00:00     
updates                   100% |=========================|  951 B    00:00     
base                      100% |=========================| 1.1 kB    00:00     
addons                    100% |=========================|  951 B    00:00     
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
Parsing package install arguments
Nothing to do</code></pre>

Nothing to do となってしまう。

こうした作業の背景には、自宅サーバーを再構築しているんだけど、過去のインストールログを漁ってみるとどうやら参照するリポジトリを追加していたみたい。

この辺を参照してた。

<p class="ref"><a title="参考ページ" href="http://d.hatena.ne.jp/kopug/20061014">CentOS使ってるならyumを使う - Kopug Memo!</a></p>

<pre class="terminal"><code>vim /etc/yum.repos.d/CentOS-Base.repo
[dag]
name=Dag RPM Repository for Redhat EL5
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt</code></pre>

baseurl は物理的に近い理化学研究所とかの方がよいのかな ?

<pre class="terminal"><code>http://ftp.riken.jp/Linux/dag/redhat/el5/en/i386/dag</code></pre>

とかがあるから

<pre class="terminal"><code>baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag
gpgkey=http://ftp.riken.go.jp/pub/Linux/dag/RPM-GPG-KEY.dag.txt
</code></pre>

でいいのかな。

dag リポジトリを追加すると、通常のリポジトリには含まれていないパッケージを yum でインストールできるけど、php なんかの新しいバージョンをインストールしたいときとかは、以下のような方法があるみたい。

<p class="ref"><a title="参考ページ" href="http://d.hatena.ne.jp/allspice/20080301">CentOS で PHP5.2.5、MySQL5.0.54 を yum update - 熟年広報</a></p>

上記はてダより

<pre class="terminal"><code>rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
vim /etc/yum.repos.d/utterramblings.repo
 
[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka</code></pre>

とかすると、新たなリポジトリが追加できる。

ただ、このままだと色々なものがバージョンアップしてしまうので

<pre class="terminal"><code>yum update php
# 私は以下のようにしてみた、php-xxx は適当
yum install php-devel php-mbstring php-xml php-xmlrpc php-common php-pdo php-gd php-cli php-mysql --enablerepo=utterramblings</code></pre>

や

<pre class="terminal"><code>yum update mysql</code></pre>

のあとで、utterramblings.repo の enabled=1 を 0 にしておいた方がよい。

基本バージョン以外のものを利用している場合、yum update の自動実行の対象外にする方がよい。<a href="#exclude_yum_update">詳細は後述</a>

上記を参照しているエントリーをいくつかピックアップ

<ul class="ref"><li><a title="参考ページ" href="http://d.hatena.ne.jp/radioboo/20080307/1204876834">CentOS5にPHP5.2.5を割と簡単にアップデートする方法みーっけ★ - GuinEa Pig</a></li>
<li><a title="参考ページ" href="http://www.kfactory.net/?p=833">kfactory ブログ» ブログアーカイブ » centos 5 で php 5.2を使う</a></li></ul>

<h5>yum の扱いについて参考にしたとこ</h5>

<ul class="ref"><li><a title="参考ページ" href="http://www.crimson-snow.net/hmsvr/centos/memo/yum.html">「yum」の設定</a></li>
<li><a title="参考ページ" href="http://www.miloweb.net/yum.html">yum でパッケージ管理 - Linux で自宅サーバ [ Home Server Technical. ]</a></li>
<li><a title="参考ページ" href="http://pooh.gr.jp/item-4932.html">CentOS 5 : セキュリティ更新が速やかに適用できる状態にする | Linux - P-SOC</a></li>
<li><a title="参考ページ" href="http://sugi3.jugem.jp/?eid=49">コンピュータ！ | Yum - リポジトリで必要なものを必要なときだけ使う方法</a></li></ul>

<h4>まとめ</h4>

サードパーティのリポジトリは dag が一般的 ? 比較的多くの場面で利用されているっぽくて、それ以外にも野良リポジトリ ? 的なものがいくつか存在している。

検索でヒットしたものをいくつか列挙しておく。

<ul class="ref">
<li>dag</li>
<li>utterramblings</li>
<li>PostgreSQL の pgdg83, pgdg83-source</li>
<li>sea-mew-noarch, sea-mew-common</li>
<li>Nagios や Puppet の epel,epel-testing</li>
</ul>

基本リポジトリ以外は基本的には設定ファイルの .repo で enabled=0 にしておくのが常識っぽい。

適宜利用する場合に yum のオプションで --enablerepo を指定し、各野良リポジトリを有効にして利用する。

<pre class="terminal"><code>yum search xxx --enablerepo=utterramblings
yum install xxx --enablerepo=utterramblings</code></pre>

yum の update から除外する設定も必要かどうか、検討した方がよい。

<a href="#exclude_yum_update">yum updat から除外する</a>

<h4>おまけ</h4>

<h5>CentOS 5.2 へのアップグレード</h5>

<pre class="terminal"><code>yum update
rpm -qa |grep centos-releas</code></pre>

<blockquote cite="http://d.hatena.ne.jp/shinsuke_sugaya/20080626/1214462651"><p class="title"><a href="http://d.hatena.ne.jp/shinsuke_sugaya/20080626/1214462651">CentOS 5.2のアップデート - 今日のひとこと</a></p><p>サーバーを CentOS 5.1 で yum の自動更新にしておいたのだけど、昨日の朝に突然サーバーが動かなくなったと思ったら、5.2 にガッツリ更新されていた。</p><p>前に別なマシンで、5.0 から 5.1 に更新されたときも壊れて、そのときは glibc とか入れ直したら直ったのだけど、今回は glibc や kernel とか入れなおしても何ともならない・・・。</p><p class="source">CentOS 5.2のアップデート - 今日のひとこと</p></blockquote>

<h5>自前リポジトリ</h5>

<ul class="ref"><li><a title="参考ページ" href="http://d.hatena.ne.jp/kopug/20071219/1198029633">自前でyumリポジトリを作成 - Kopug Memo!</a></li>
<ul class="ref"><li><a title="参考ページ" href="http://tech.feedforce.jp/yum-repos.html">FFTT : 独自yumリポジトリ</a></li></ul></ul>

<h5>メインであげたところ以外のリポジトリ</h5>

<p class="ref"><a title="参考ページ" href="http://www.siwa32.com/?p=94">siwa32.com » 【自宅サーバ】PostgreSQL8.3をyumでインストールしてみた</a></p>

<pre class="terminal"><code>vim /etc/yum.repos.d/pgdg-83-centos.repo
 
[pgdg83]
name=PostgreSQL 8.3 $releasever - $basearch
baseurl=http://yum.pgsqlrpms.org/8.3/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
 
[pgdg83-source]
name=PostgreSQL 8.3 $releasever - $basearch - Source
failovermethod=priority
baseurl=http://yum.pgsqlrpms.org/srpms/8.2/redhat/rhel-$releasever-$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
</code></pre>

<p class="ref"><a title="参考ページ" href="http://blog.dc-d.jp/archives/280.html">php-apcでPHPの高速化 on CentOS5 | データセンター ダイレクト ブログ</a></p>

<pre class="terminal"><code>vim /etc/yum.repos.d/sea-mew.repo 
 
[sea-mew-noarch]
name=SeaMew Fedora AddIn Packages
baseurl=ftp://sea-mew.jp/yum/el5/noarch/
enabled=0
gpgcheck=0 
 
[sea-mew-common]
name=SeaMew Fedora AddIn Packages
baseurl=ftp://sea-mew.jp/yum/el5/i386
enabled=0
gpgcheck=0 
 
# Pentium4以上のCPUを利用している場合はコメントアウトを外すと良い
#[sea-mew-pentium4]
#name=SeaMew Fedora AddIn Packages
#baseurl=ftp://sea-mew.jp/yum/el5/i686
#enabled=0
#gpgcheck=0</code></pre>

<h5><a id="exclude_yum_update" name="exclude_yum_update"></a>yum updat から除外する</h5>

<blockquote cite="http://www.siwa32.com/?p=94"><p class="title"><a href="http://www.siwa32.com/?p=94">【自宅サーバ】PostgreSQL8.3をyumでインストールしてみた</a></p><p>CentOSのリポジトリと衝突しないように、[base]と[updates]セクションの最後に「exclude=postgresql*」を追加する。</p><p class="source">siwa32.com</p></blockquote>

<pre class="terminal"><code>vim /etc/yum.repos.d/CentOS-Base.repo
 
[base]
　：
　：
exclude=postgresql*
 
[updates]
　：
　：
exclude=postgresql*</code></pre>]]></description>
         <link>http://jamz.jp/tech/2008/06/third-party-yum-repos.html</link>
         <guid>http://jamz.jp/tech/2008/06/third-party-yum-repos.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">サーバー</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">centos</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">yum</category>
        
         <pubDate>Sat, 28 Jun 2008 09:25:00 +0900</pubDate>
      </item>
      
      <item>
         <title>YahooBB 回線下で OP25B に対応する自宅サーバーの MTA</title>
         <description><![CDATA[結論から書くと "ダメ" っぽい。

<blockquote cite="http://help.yahoo.co.jp/help/jp/mail/mailsoft/mailsoft-01.html"><p class="title"><a href="http://help.yahoo.co.jp/help/jp/mail/mailsoft/mailsoft-01.html">メールソフトで送受信するには（Yahoo!メールアドレスの場合）</a></p><ul><li>メールソフトによるYahoo!メールの送受信（POPアクセス機能）と、ほかのメールアドレスへの転送（転送機能）は、併用できません。</li><li>メールソフトで差出人（From）に以下のメールアドレスを設定する場合は、ユーザー認証をSMTP-AUTH方式で行う必要があります。</li></ul><p class="source">Yahoo!メール ヘルプ</p></blockquote>

実は、yahoo.co.jp のメールは別のメールに転送しているので併用できないのは困る。

ただ、これ自体はプログラム組めばなんとか対処はできそうだけど、二つ目が痛い。

独自ドメインでメール送りたいから From の設定を yahoo.co.jp にするのは厳しいし...

っと書いてみたけど、色々試してみたらうまくいった。

<h4>まとめ</h4>

YahooBB 回線下の自宅サーバーで SMTP を利用する場合、サブミッションポート 587 の影響で普通の状態ではメールを送れない。

プロバイダ側でブロックされてしまう。

回避策としては、YahooBB で用意している (利用させてもらえる) SMTP を経由してメールを送る方法。

つまり、自宅サーバーの SMTP から YahooBB の SMTP へリレーしてメールを送るということ。

YahooBB のメールの扱いは通常のプロバイダとちょっと違っていて、メール機能自体を Yahoo メールに依存している。ブラウザで利用するウェブメールが YahooBB のメールということになっている。

そのため、YahooBB の SMTP は初期状態では利用できない。

そこで Yahoo メール上より、外部から Yahoo メールの SMTP にアクセスできるよう「メールオプション」で設定変更する必要がある。
 
<p class="ref"><a title="参考ページ" href="http://egf.or.tp/another/op25b.html#yahoo">OP25B yahoo + 玄箱(HG,Debian sarge)自宅サーバ + Postfix + Cyrus</a></p>

要は Yahoo メールを Outlook などのメーラーでも利用できるようにするってこと。

そこまでできればあとは Postfix の処理を残すのみ。別の SMTP にリレーさせる設定をすればよい。

<ul class="ref"><li><a title="参考ページ" href="http://centossrv.com/op25b.shtml">OP25B(Outbound Port 25 Blocking)対策 - CentOSで自宅サーバー構築</a></li>
<li><a title="参考ページ" href="http://www.aconus.com/~oyaji/bbs/past/0009/B0005417.html">No.5417　SMTP-Authを利用してリレーしたい</a></li>
<li><a title="参考ページ" href="http://d.hatena.ne.jp/tomo3i/20080329">2008-03-29 - SMTPを考える - なんタイ</a></li></ul>

ちなみに、YahooBB (ybb.ne.jp) 用の Yahoo メールの SMTP を利用した場合は問題なかったけど、新規に Yahoo メールを取得して、その SMTP を利用した場合は SMTP 自体は問題なく利用できたが、別プロバイダ (biglobe) のスパムフィルタに引っかかった。

スパム判定されメールヘッダの X-Biglobe-spamcheck が 100.00% に設定されていた。]]></description>
         <link>http://jamz.jp/tech/2008/06/handling-of-op25b-on-yahoobb.html</link>
         <guid>http://jamz.jp/tech/2008/06/handling-of-op25b-on-yahoobb.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">サーバー</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">OP25B</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">smtp</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">yahoo</category>
        
         <pubDate>Sun, 15 Jun 2008 22:23:57 +0900</pubDate>
      </item>
      
      <item>
         <title>OpenSSL/OpenSSH の脆弱性</title>
         <description><![CDATA[突然レンタルサーバーの SSH が使えなくなった。

これが原因ではないかもしれないが、様子を見ておく必要はありそうだ。

<ul class="ref"><li><a title="参考ページ" href="http://www.jpcert.or.jp/at/2008/at080008.txt">Debian GNU/Linux に含まれる OpenSSL/OpenSSH の脆弱性に関する注意喚起 - JPCERT/CC Alert 2008-05-16</a></li></ul>

関連企業で対応しているところもある

<ul class="ref"><li><a title="参考ページ" href="http://www.verisign.co.jp/press/2008/pr_20080520.html">プレスリリース - 2008 日本ベリサイン、Linux OSの脆弱性による影響を受けたお客様に、電子証明書を再発行</a></li>
<li><a title="参考ページ" href="http://www.verisign.co.jp/support/maintenance/announce20080520.html">サポート - 「Debian GNU/Linux に含まれる OpenSSL/OpenSSH の脆弱性」について</a></li></ul>

セキュリティといえば、JPCERT にはメーリングリストがあります。セキュリティ関連の情報が定期的に流れるので重宝してる。

<p class="ref"><a title="参考ページ" href="http://www.jpcert.or.jp/announce.html">JPCERT Coordination Center メーリングリスト</a></p>

ちなみに JPCERT は "経済産業省より公示された「ソフトウェア等脆弱性関連情報取扱基準」において、日本国内脆弱性関連情報調整機関として指定を受け、脆弱性関連情報流通業務(情報セキュリティ早期警戒パートナーシップ運用)開始" したということなので公的機関。

<del>チクる</del>報告用の窓口があり、こういうところを通じてみんなで情報共有しましょう、という構図。

<p class="ref"><a title="参考ページ" href="https://isec.ipa.go.jp/vuln/index.html">脆弱性関連情報の届出｜IPA 情報処理推進機構</a></p>]]></description>
         <link>http://jamz.jp/tech/2008/05/vulnerability-of-ssl-ssh.html</link>
         <guid>http://jamz.jp/tech/2008/05/vulnerability-of-ssl-ssh.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">ニュース・記事</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">security</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">ssh</category>
        
         <pubDate>Wed, 21 May 2008 12:23:15 +0900</pubDate>
      </item>
      
      <item>
         <title>Python で実装されたシステム管理フレームワーク Func</title>
         <description><![CDATA[YAPC::Asia 2008 が開催されていたけど、そのセッションで Func という Python 製の管理ツールが紹介されていた。

<blockquote cite="http://conferences.yapcasia.org/ya2008/talk/973"><p class="title"><a href="http://conferences.yapcasia.org/ya2008/talk/973">フレームワークでシステム管理プログラミングをもっと簡単に</a></p><p>Ruby製のPuppet, Python製のFuncといった、軽量言語製のシステム管理ツールが最近出てきていますが、特にFuncは、システム管理をおこなうアプリケーションを開発するためのフレームワークという、従来のツールにはない特徴を持っています。</p><p class="source">YAPC::Asia 2008 - May 15-16th in Tokyo, JAPAN</p></blockquote>

このツールの存在を知らなかった。

Puppet は、去年のオープンソースカンファレンスで見かけた単語のような気がする... うる覚え

スライドが公開されてる。

<p class="ref"><a title="参考ページ" href="http://www.slideshare.net/mizzy/yapcasia-2008-tokyo-easy-system-administration-programming-with-a-framework-by-gosuke-miyashita">Yapc::Asia 2008 Tokyo - Easy system administration programming with a framework by Gosuke Miyashita » SlideShare</a></p>

反応記事

<ul class="ref"><li><a title="参考ページ" href="http://d.hatena.ne.jp/hiratara/20080515/p1">YAPC::Asia 2008 Tokyo １日目 - a geek</a></li>
<li><a title="参考ページ" href="http://blog.miraclelinux.com/asianpen/2008/05/yapcasia-2008-t.html">アジアのペンギン: YAPC::Asia 2008 Thu. 5/15 (1)</a></li></ul>

以前も似たような発表があったみたい。

<ul class="ref"><li><a title="参考ページ" href="http://lab.klab.org/modules/mediawiki/index.php/KLab%E5%8B%89%E5%BC%B7%E4%BC%9A#KLab.E5.8B.89.E5.BC.B7.E4.BC.9A.234_-_2008-03-28">KLab勉強会#4 - 2008-03-28</a></li>
<li><a title="参考ページ" href="http://trac.mizzy.org/public/wiki/KlabAndFuncAndPunc">KlabAndFuncAndPunc - mizzy.org - Trac</a></li></ul>

記事 or 連載

<ul class="ref"><li><a title="参考ページ" href="http://gihyo.jp/admin/serial/01/func">連載：オープンソースなシステム管理フレームワーク Func｜gihyo.jp ... 技術評論社</a></li>
<li><a title="参考ページ" href="http://gihyo.jp/admin/serial/01/puppet">連載：オープンソースなシステム自動管理ツール Puppet｜gihyo.jp ... 技術評論社</a></li></ul>

<h4>Func</h4>

<p class="ref"><a title="参考ページ" href="https://fedorahosted.org/func/">func - Trac</a></p>

<h4>Punc</h4>

<p class="ref"><a title="参考ページ" href="http://coderepos.org/share/wiki/Punc">Punc - CodeRepos::Share - Trac</a></p>

<h4>Puppet</h4>

<p class="ref"><a title="参考ページ" href="http://trac.mizzy.org/puppet/wiki/LearningPuppet">LearningPuppet - puppet wiki （パペウィキ） - Trac</a></p>]]></description>
         <link>http://jamz.jp/tech/2008/05/func-system-administration-framework.html</link>
         <guid>http://jamz.jp/tech/2008/05/func-system-administration-framework.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">アプリケーション・フレームワーク</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">サーバー</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Func</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Punc</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Puppet</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">python</category>
        
         <pubDate>Mon, 19 May 2008 00:55:13 +0900</pubDate>
      </item>
      
      <item>
         <title>オープンソースで顧客管理、販売管理、業務管理</title>
         <description><![CDATA[<h4>SugarCRM</h4>

顧客管理で有名なのは SugarCRM でしょうか、最近日本代理店の会社名が変わったようです。

<ul class="ref"><li><a title="参考ページ" href="http://www.osscrm.com/">《SugarCRM正規取扱店》オープンソースCRM株式会社</a></li>
<li><a title="参考ページ" href="http://www.sugarforge.org/frs/?group_id=18">SugarForge: Japanese Language Pack: ファイルリスト</a></li>
<li><a title="参考ページ" href="http://wiki.sugarce.com/jp/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8">SugarWiki 日本語版</a></li></ul>

Wikipedia を見ると SugarCRM はオープンソースじゃない、という見解もあるとか、ないとか。

<blockquote cite="http://ja.wikipedia.org/wiki/SugarCRM#.E3.80.8E.E3.82.B3.E3.83.9E.E3.83.BC.E3.82.B7.E3.83.A3.E3.83.AB.E3.80.8F.E3.82.AA.E3.83.BC.E3.83.97.E3.83.B3.E3.82.BD.E3.83.BC.E3.82.B9"><p class="title"><a href="http://ja.wikipedia.org/wiki/SugarCRM#.E3.80.8E.E3.82.B3.E3.83.9E.E3.83.BC.E3.82.B7.E3.83.A3.E3.83.AB.E3.80.8F.E3.82.AA.E3.83.BC.E3.83.97.E3.83.B3.E3.82.BD.E3.83.BC.E3.82.B9">SugarCRM</a></p><p>OSIはSugarCRMをオープンソースと認めていなかった。その理由として、すべてのソースコードが、SugarCRM社に実際にコントロールされていることもあげられていた</p><p class="source">Wikipedia</p></blockquote>

PHP + MySQL という手軽な構成がいい。

これをベースにしたオールインワンな製品もあるみたい。

<ul class="ref"><li><a title="参考ページ" href="http://www.sugarst.net/">顧客管理CRMソフトSugarST ダウンロード - 簡単顧客管理セットアップツール「SugarST」</a></li>
<li><a title="参考ページ" href="http://www.spacetag.jp/">オープンソーススタック「STServer」のスペースタグ - オープンソーススタックを通じてWebアプリのアプライアンス化を推進</a></li></ul>

ほかにもいくつか見つかったけど Java ベースなのでセットアップがやや面倒かも。

<h4>Compiere</h4>

配送とサービスにおける中小企業向けのオープンソース ERP, CRM だそうだ。

<ul class="ref"><li><a title="参考ページ" href="http://www.compiere-japan.com/">オープンソースERP&CRM-Compiere (UTF-8)</a></li>
<li><a title="参考ページ" href="http://sourceforge.jp/projects/compiere">SourceForge.JP: Project Info - Compiere−オープンソースERP & CRM</a></li>
<li><a title="参考ページ" href="http://www.compiere.com/">Compiere Open Source ERP and CRM Business Solution</a></li>
<li><a title="参考ページ" href="http://sourceforge.net/projects/compiere/">SourceForge.net: Compiere ERP + CRM Business Solution</a></li></ul>

ホント Wikipedia って参考になる。

<blockquote cite="http://ja.wikipedia.org/wiki/Compiere"><p class="title"><a href="http://ja.wikipedia.org/wiki/Compiere">Compiere</a></p><p>論争の要点は、Compiere社がコミュニティの貢献と関与を無視してきた、というコミュニティメンバーの考えである。より直接的には、Compiereの継続した方針が、ユーザーコミュニティではなく、Compiere社に出資したベンチャーキャピタルよって主に行われたことである。新しいフォーク、Adempiereは2006年9月にen:SourceForgeで発足した。</p><p class="source">Wikipedia</p></blockquote>

<h4> Adempiere</h4>

ベクターで日本語版が入手できる。

<ul class="ref"><li><a title="参考ページ" href="http://www.adempiere.jp/">Adempiere オープンソース ERP+CRM</a></li>
<li><a title="参考ページ" href="http://www.vector.co.jp/soft/winnt/business/se441673.html">ADempiere ERP+CRM 統合業務管理(WindowsNT/2000/XP/Vista / ビジネス)</a></li>
<li><a title="参考ページ" href="http://www.adempiere.com/">ADempiere</a></li></ul>

あっ、これ、どちらも (Compiere, Adempiere) クライアントアプリでコントロールするのか... っ ?
ブラウザの UI もある ...

<p class="ref"><a title="参考ページ" href="http://sourceforge.net/project/screenshots.php?group_id=176962">SourceForge.net: ADempiere ERP Business Suite - Screenshots</a></p>

さておき、J2EE かぁ、手を出すにはちょっと敷居が高いなぁ。

<blockquote cite="http://ja.wikipedia.org/wiki/Adempiere"><p class="title"><a href="http://ja.wikipedia.org/wiki/Adempiere">Adempiere</a></p><p>AdempiereはJ2EEを使って開発されている。JBossアプリケーションサーバーを利用することが出来る。現状では、サポートされるデータベースはOracleとPostgreSQLに制限されるが、データベースの独立性は、プロジェクトの主な目標である。</p><p class="source">Wikipedia</p></blockquote>

<h4>NECO (おまけ)</h4>

ColdFusion で開発された国産 ? の顧客管理ツール。プラットフォームがあれなので試すことはまずないだろう。

<p class="ref"><a title="参考ページ" href="http://www.cba-japan.com/opensource/4_neco/">株式会社 コミュニケーション ビジネス アヴェニュー | 4 Neco</a></p>

<h4>有償パッケージ系</h4>

<ul class="ref"><li><a title="参考ページ" href="http://www.daidojp.com/mmp/">カスタマイズ可能な販売管理・仕入管理・在庫管理システム もうかりまうす！</a> (そこそこメジャーっぽい Access ベース)</li>
<li><a title="参考ページ" href="http://www.viva-mambo.co.jp/goodbiz/">見積・請求・経費・給与・顧客・勤怠の管理に。業務管理システム『GoodBiz!（グッビズ）』</a> (FileMaker かぁ)</li></ul>

Excel で頑張っちゃうなら...

<ul class="ref"><li><a title="参考ページ" href="http://soft.rifnet.or.jp/excel-db/">エクセル de データベース ソフトの紹介</a></li>
<li><a title="参考ページ" href="http://soft.rifnet.or.jp/seikyu/">エクセル de 見積請求α</a></li></ul>

実工数のカウントにいいかも。

<p class="ref"><a title="参考ページ" href="http://www.souchi.jp/index.html">いつでも、どこでも瞬時に時間管理　創知株式会社</a></p>]]></description>
         <link>http://jamz.jp/tech/2008/05/oss-crm-erp.html</link>
         <guid>http://jamz.jp/tech/2008/05/oss-crm-erp.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">調査・情報収集</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Adempiere</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Compiere</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">CRM</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">ERP</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">SugarCRM</category>
        
         <pubDate>Fri, 16 May 2008 00:11:50 +0900</pubDate>
      </item>
      
   </channel>
</rss>
