<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>klog</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/" />
    <link rel="self" type="application/atom+xml" href="http://5net.com/blog/atom.xml" />
    <id>tag:5net.com,2008-11-23:/blog//1</id>
    <updated>2009-06-01T08:46:11Z</updated>
    <subtitle>脳にピクッと来たことを綴っています。ウェブ技術とか生活とか。モバイル版もどうぞ。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.25</generator>

<entry>
    <title>あっぱれタモリ倶楽部 - Tamori on Earth</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2009/06/bravo-tamori-club.html" />
    <id>tag:5net.com,2009:/blog//1.85152</id>

    <published>2009-06-01T08:44:24Z</published>
    <updated>2009-06-01T08:46:11Z</updated>

    <summary> GPSを使って街全体を8bitゲーム風イラストにするアート この記事を読んで思...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="blog" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="google" label="google" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="googlemaps" label="google maps" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tamori" label="tamori" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="tamori_portrait.png" src="http://5net.com/blog/images/uploads/tamori_portrait.png" width="146" height="101" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></span>
</p>

<blockquote><a href="http://gigazine.net/index.php?/news/comments/20090530_largest_8bit/">GPSを使って街全体を8bitゲーム風イラストにするアート</a></blockquote>

<p>
この記事を読んで思い出したのがこれ。
</p>

<blockquote><a href="http://fieldsmith.net/gps/tamori/index.html">Tamori on Earth</a></blockquote>

<p>
タモリをはじめ水道橋博士などいつものメンバーがGPS付自転車に乗って目黒区を走り、一筆書きでタモリの似顔絵を描く「ナスカの地上絵を超えろ！ 我らがタモリをGPSを使って地球に描こう！」の回だった。
</p>

<p>
いやー2005年にこんな遊びをしていたのですね。タモリ倶楽部ステキ。
</p>

<p>
その他のエピソードも細かく細かくおもしろい。「「凄いマップを作る集団」略して『すMAP』」とか、「チズ・マスカラス」登場二回目とか、「下地になる絵も江川達也や五月女ケイ子に依頼して書いてもらったようだが、緻密すぎて話にならず、ADがさらっと描いたものが採用された」とかｗ
</p>

<p>
■<a href="http://blog.livedoor.jp/s_hakase/archives/15944021.html">水道橋博士の「博士の悪童日記」: ３月５日　　土曜日</a><br />
■<a href="http://www6.plala.or.jp/gene/tamori/review/052.htm#0541">05年4月1日	ナスカの地上絵を超えろ！ 我らがタモリをGPSを使って地球に描こう！</a>
</p>

<p>
そういえば Google 日本オフィスに潜入した回もありましたね。「日本一タモリ倶楽部ファンが多いといわれている会社」って説明はどうかとｗ
</p>

<div style="text-align: center;"><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/rqeFZsE5Tw8&hl=ja&fs=1&color1=0x3a3a3a&color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/rqeFZsE5Tw8&hl=ja&fs=1&color1=0x3a3a3a&color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></div>]]>
        
    </content>
</entry>

<entry>
    <title>PhotoShare用のActionStreamプラグイン書いた(MT)</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2009/05/photoshareactionstreammt.html" />
    <id>tag:5net.com,2009:/blog//1.85151</id>

    <published>2009-05-19T06:49:18Z</published>
    <updated>2009-05-29T06:29:46Z</updated>

    <summary> PhotoShareへアップした写真をブログで利用したくて、以前からスクレーピ...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="technology" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="actionstreams" label="actionstreams" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="movabletype" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>
PhotoShareへアップした写真をブログで利用したくて、以前からスクレーピングして独自にRSS生成してたのだけどオフィシャルにフィードをサポートしないの？と <a href="http://masuidrive.jp/">masuidriveくん</a>に聞くたびに「来週には公開します」とそば屋のように言っていたのでw 首を長くして待っていた。そしてついにリリース。
</p>

<blockquote><a href="http://satoshi.blogs.com/life/2009/05/photoshare-の-atomjsonjsonp-feed-の正式発表.html">PhotoShare の Atom/JSON/JSONP Feed の正式発表</a><br />
<br />
　PhotoShareの写真のFeedに関しては、少し前に実装が完了していたのだが、「サンプルをきちんと整えてから」などと考えているといつまでたっても発表できないので、とりあえずFeedのURLのみ発表してしまうことにした。</blockquote>

<p>
すでにブログのサイドバーに写真を並べてたりしたので特にやることはなかったけど、試しにMTのActionStreamで読み込めるようなプラグインを書いてみた。
</p>

<p>
<span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://5net.com/blog/download/PhotoShareActionStreams_1.0.zip" onclick="javascript:urchinTracker ('/blog/download/PhotoShareActionStreams_1.0.zip');">PhotoShareActionStreams_1.0.zip</a></span>
</p>

<p>
たとえば<a href="http://5net.com/blog/">ブログトップ</a>のサイドバーに出すとこんな感じで表示される。<br />
<a href="http://www.flickr.com/photos/kaz_goto/3545509996/" title="PhotoShare ActionStreams by kaz.goto, on Flickr"><img src="http://farm4.static.flickr.com/3329/3545509996_f5c41392b2.jpg" width="255" height="228" alt="PhotoShare ActionStreams" /></a>
</p>]]>
        <![CDATA[<strong>インストール手順</strong>
<ol>
<li>アーカイブを展開してMTがインストールされているディレクトリへコピーする</li>
<li>CSSの追記
<pre class="brush:css">
.service-bcphotoshare {
  background-image: url(&lt;mt:StaticWebPath&gt;plugins/PhotoShare/images/photoshare.png);
}
</pre>
</li>
<li>管理画面で利用サービス BIGCANVAS PhotoShare を追加。
<a href="http://www.flickr.com/photos/kaz_goto/3545430680/" title="PhotoShare ActionStreams dialog by kaz.goto, on Flickr"><img src="http://farm4.static.flickr.com/3543/3545430680_845ceca5b8.jpg" width="500" height="319" alt="PhotoShare ActionStreams dialog" /></a><br/>
「User#」はPhotoShareへログイン後URLに表示される数字。
</li>
</ol>

<p>
すでにActionStreamを使っていれば自動的にリストされる。簡単ですね。
</p>]]>
    </content>
</entry>

<entry>
    <title>JavaScriptで絵を描く(Processing.js) その2</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2009/05/javascriptprocessingjs-2.html" />
    <id>tag:5net.com,2009:/blog//1.85149</id>

    <published>2009-05-15T07:11:39Z</published>
    <updated>2009-05-22T03:44:04Z</updated>

    <summary> JavaScriptで絵を描く(Processing.js) のつづき。 最適...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="technology" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="processing" label="processing" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>
<a href="http://5net.com/blog/2009/05/javascriptprocessingjs-1.html">JavaScriptで絵を描く(Processing.js)</a> のつづき。
</p>

<p>
最適配置にする試みからスタートして、なんか動きのある方が楽しいなとごにょごにょいじってる内に時間つぶしちゃった。
</p>

<p>
<strong>2009年4月のユニークビジター数</strong><br />
<canvas id="unique-visitor-graph2" width="500" height="500"></canvas><br />
データ出典: <a href="http://compete.com/">compete</a>
</p>

<script type="application/processing" id="processing-code2">
// class definition
PFont font = loadFont("http://5net.com/blog/common/font/arial.svg");
Site  sites[];
int   siteCount = 0;

int borderWidth = 20;
int maxR  = 180;
int maxUU = 104125466;

float spring  = 0.25;
float gravity = 1;

void setup() {
  size(500, 500);
  frameRate(15);
  noStroke();
  smooth();
  sites = {
    new Site(random(width), random(height), 104125466, "facebook.com"),
    new Site(random(width), random(height),  77841968, "youtube.com"),
    new Site(random(width), random(height),  55559317, "myspace.com"),
    new Site(random(width), random(height),  37787322, "digg.com"),
    new Site(random(width), random(height),  25858911, "flickr.com"),
    new Site(random(width), random(height),  19443286, "twitter.com")
  };

}

void draw(){
  background(#FFFFFF);
  for (int i=0; i < sites.length; i++) {
    sites[i].update();
  }
}

class Site {
  float id, x, y, r, vx, vy, name, fontsize;
  Site (float _x, float _y, float _r, String _name) {
    id = siteCount++;
    x = _x; y = _y;
    r = _r/maxUU * maxR;
    vx = random(-0.5, 0.5);
    vy = random(-0.5, 0.5);
    name = _name;
    fontSize = 15;
    draw();
  }

  void collide() {
    int collideCount = 0;
    for (int i = id + 1; i < sites.length; i++) {
      float dx = sites[i].x - x;
      float dy = sites[i].y - y;
      float distance = sqrt(dx*dx + dy*dy);
      float minDist = (sites[i].r + r) * 1.15;
      if (distance < minDist) {
        collideCount++;
        float angle = atan2(dy, dx);
        float targetX = x + cos(angle) * minDist;
        float targetY = y + sin(angle) * minDist;
        float ax = (targetX - sites[i].x) * spring * (minDist - distance)/minDist;
        float ay = (targetY - sites[i].y) * spring * (minDist - distance)/minDist;
        vx -= ax;
        vy -= ay;
        sites[i].vx += ax;
        sites[i].vy += ay;
      }
    }
  }

  void move() {
    collide();
    vy += gravity * r/50;
    x  += vx;  y  += vy;
    vx *= 0.9; vy *= 0.9;

    if (x + r > width + borderWidth) {
      x = width - r + borderWidth;
      vx *= -0.9;
    }
    else if (x - r < 0 - borderWidth){
      x = r - borderWidth;
      vx *= -0.9;
    }
    if (y + r > height + borderWidth) {
      y = height - r + borderWidth;
      vy *= -0.9;
    }
    else if (y - r < 0 - borderWidth) {
      y = r - borderWidth;
      vy *= -0.9;
    }
  }

  void draw() {
    fill(#0000DD, 50);
    ellipse(x, y, r*2, r*2);
    fill(#000000, 100);
    textFont(font, fontSize);
    textwidth = font.width(name) * fontSize;
    text(name, x - textwidth/2, y - fontSize/2);
  }

  void update() {
    move();
    draw();
  }
}
</script>

<pre id="processing-code-view2" class="brush:js"></pre>

<script type="text/javascript" src="http://5net.com/blog/common/js/processing.js"></script>
<script type="text/javascript"><!--
  var canvas  = document.getElementById('unique-visitor-graph2');
  var codeElm = document.getElementById('processing-code2');
  var code = codeElm.textContent || codeElm.innerText;
  Processing(canvas, code);

  var view = document.getElementById('processing-code-view2');
  view.innerHTML = code;
//--></script>
]]>
        
    </content>
</entry>

<entry>
    <title>JavaScriptで絵を描く(Processing.js)</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2009/05/javascriptprocessingjs-1.html" />
    <id>tag:5net.com,2009:/blog//1.85147</id>

    <published>2009-05-15T02:20:51Z</published>
    <updated>2009-05-22T03:37:32Z</updated>

    <summary> 各種ウェブサービスの規模を1枚で表現するために書いた図をブログに載せようと思っ...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="technology" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="processing" label="processing" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>
各種ウェブサービスの規模を1枚で表現するために書いた図をブログに載せようと思ったのが始まりだったのに、いつの間にか <a href="http://processing.org/">Processing</a> および <a href="http://processingjs.org/">Processing.js</a> のお勉強開始。さらにはTTFフォントをSVGに書き出ししたり、ゴールが見えなくなりそうで息切れ気味。
</p>

<p>
ひとまず静止画だけはできたので一旦公開。
</p>

<p>
<strong>2009年4月のユニークビジター数</strong><br />
<canvas id="unique-visitor-graph" width="500" height="500"></canvas><br />
データ出典: <a href="http://compete.com/">compete</a>
</p>

<script type="application/processing" id="processing-code">
PFont font = loadFont("http://5net.com/blog/common/font/arial.svg");
 
class Site {
  float x, y, r, name, fontsize;
  Site (float _x, float _y, float _r, String _name) {
    x = _x;
    y = _y;
    r = _r/maxUU * maxR;
    name = _name;
    fontSize = 15;
    draw();
  }
  void draw() {
    fill(#0000DD, 50);
    ellipse(x, y, r*2, r*2);
    fill(#000000, 100);
    textFont(font, fontSize);
    width = font.width(name) * fontSize;
    text(name, x - width/2, y - fontSize/2);
  }
}
 
size(500, 500);
noStroke();
smooth();
 
int maxR  = 280;
int maxUU = 104125466;
new Site(400, 450, 104125466, "facebook.com");
new Site(400,  20,  77841968, "youtube.com");
new Site(80,   20,  55559317, "myspace.com");
new Site(50,  450,  37787322, "digg.com");
new Site(70,  280,  25858911, "flickr.com");
new Site(150, 200,  19443286, "twitter.com");
</script>

<pre id="processing-code-view" class="brush:js"></pre>

<script type="text/javascript" src="http://5net.com/blog/common/js/processing.js"></script>
<script type="text/javascript"><!--
  var canvas  = document.getElementById('unique-visitor-graph');
  var codeElm = document.getElementById('processing-code');
  var code = codeElm.textContent || codeElm.innerText;
  Processing(canvas, code);

  var view = document.getElementById('processing-code-view');
  view.innerHTML = code;
//--></script>
]]>
        
    </content>
</entry>

<entry>
    <title>ひとまず自宅サーバー復旧</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2009/05/post-128.html" />
    <id>tag:5net.com,2009:/blog//1.85139</id>

    <published>2009-05-05T16:23:07Z</published>
    <updated>2009-05-05T16:43:05Z</updated>

    <summary>仕事で4月23日サイト公開が迫っている20日(月)、突如自宅サーバーにアクセスで...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="diary" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>仕事で4月23日サイト公開が迫っている20日(月)、突如自宅サーバーにアクセスできないとYこっぷ氏から連絡あり。ブラウザで確認すると確かにレスポンス無し。仕方ないなと再起動して数分待ってもレスポンス無しは変わらず。</p>

<p>外出の予定もあって急いでたこともあり、夜作業して復旧するだろと高をくくっていて、とりあえず掘っておいてこの時点ではことの重大さに気づかずじまい。</p>

<p>夜になってはじめてモニターをつけて再起動するとそこには見慣れぬ「起動可能なOSが見つかりません」的残念なアイコンが表示されてる...（サーバーは mac mini で <a href="http://5net.com/blog/2007/07/mac-mini-deian-etch-1.html">Debian をインストールして使ってる</a>）</p>

<p>何が起きたか正確に把握するまでにかなりの時間を要したが、結局ハードディスクのブロック障害らしく一部〜かなりの部分をあきらめることになりかねない状態が判明した。さらに調べを進め、時間を経れば経るほど深刻さを理解して心のダメージが大きくなっていって泣きながら復旧作業状態へ。あーもうっ。</p>

<p>いろいろ対処しておおむねほとんどのデータは復旧できた記念にブログエントリ。いろいろ対処したことはまた後でまとめることにしよう。自分のためにも。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ブログパーツのテスト</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2009/04/post-127.html" />
    <id>tag:5net.com,2009:/blog//1.85138</id>

    <published>2009-04-07T02:46:58Z</published>
    <updated>2009-04-07T02:48:04Z</updated>

    <summary> ...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p><script type="text/javascript" src="http://wiredvision.jp/common/js/blogparts.js"></script><br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>New Z4 Roadster</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2009/02/new-z4-roadster.html" />
    <id>tag:5net.com,2009:/blog//1.85127</id>

    <published>2009-02-08T07:33:18Z</published>
    <updated>2009-02-08T07:38:42Z</updated>

    <summary>ひさびさにディーラーに行って話をしたら今年新しいZ4がデビューする話を聞いてしま...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="product" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="carbmw" label="car bmw" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>ひさびさにディーラーに行って話をしたら今年新しいZ4がデビューする話を聞いてしまった。さっそく調べて見ると、良いではないですか。</p>

<p><object width="480" height="295"><param name="movie" value="http://www.youtube.com/v/aY6c4_9MtwA&hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/aY6c4_9MtwA&hl=ja&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object></p>

<p>デザインは旧Z4の雰囲気を残しつつ、今のBMWのデザインを取り入れる形。ライトのデザインの影響が強く、フロント真正面から見るとほぼ今のデザイン。フロントサイドというかサイドは旧Z4っぽさが残っている。特にZ4を特徴付けるラインは残っていて安心した。テールもライトのデザインが完全変更されたので全く違う印象。今のBMWデザインを踏襲しているという話か。以前の方が好きなんだけど絶対に嫌なわけでもない。</p>

<p><object width="480" height="295"><param name="movie" value="http://www.youtube.com/v/-EVOu8kz71o&hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/-EVOu8kz71o&hl=ja&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object></p>

<p>6月に車検があるのでそれまでじっくり考えよう。</p>

<p>引用した映像はYouTubeからだけど、BMWオフィシャルチャンネルがあるのね。すばらしい。</p>

<p>■<a href="http://www.evo.co.uk/news/evonews/232896/new_bmw_z4.html">All-new BMW Z4 roadster | Car News | evo<br />
</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>感動(20代30代男性向け): Cam with me</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2009/01/30-cam-with-me.html" />
    <id>tag:5net.com,2009:/blog//1.83379</id>

    <published>2009-01-21T01:34:10Z</published>
    <updated>2009-01-21T02:21:42Z</updated>

    <summary>テクノロジーとかビジュアルがどうだという前に、ひさびさに、単純に、感動した。子供...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="blog" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ad" label="ad" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="blogparts" label="blogparts" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>テクノロジーとかビジュアルがどうだという前に、ひさびさに、単純に、感動した。子供はいないけど、なんかうれしくてさみしい、そんな体験ができる。またブログパーツでこうやってネタにできるのもいいね。</p>

<p><script type='text/javascript' src='http://www.sony.jp/products/Consumer/handycam/camwithme/embed/swfobject.js'></script><br />
<script type='text/javascript'>putSWF('iW4r5762IyXS6i2ZJakHsYwT5aXaEJKrIrcS8wOHodCRy4iHYUp9x6EjhUxdyPpVspGkp5rx1XIfuTfeeQEs5hnZP61gXNlssr-gJYGq4zw_');</script></p>

<p><br />
■<a href="http://www.sony.jp/products/Consumer/handycam/camwithme/main.html">Cam with me（カム ウィズ ミー）｜デジタルビデオカメラ Handycam "ハンディカム" | ソニー</a><br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>MT::Blog::clone()の罠</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2008/12/mt-blog-clone-trap.html" />
    <id>tag:5net.com,2008:/blog//1.78800</id>

    <published>2008-12-21T14:23:00Z</published>
    <updated>2009-05-19T08:17:36Z</updated>

    <summary> 仕事でＭＴをごにょごにょいじってる。バッチ処理中にMT::Blogのclone...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="technology" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="movabletype" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>
仕事でＭＴをごにょごにょいじってる。バッチ処理中にMT::Blogのclone()を使ってガンガン作成しようとするとエラーが出た。
</p>

<pre class="brush:bash">
DBD::mysql::st execute failed: Column 'templatemap_template_id' cannot be null at /path/to/MT/extlib/Data/ObjectDriver/Driver/DBI.pm line 348, <> line 4.
</pre>

<p>
管理画面のブログ一覧から「ブログの複製」を実行すると特に警告もなく終了する。もちろんログに何も出ていない。
</p>

<p>
いろいろ調査していくとMT::Blog::clone()で、え？と思う実装が。(以下ソースは 4.23 のもの)
</p>

<pre class="brush:perl first-line:843">
        require MT::Template;
        $iter = MT::Template->load_iter(
            { blog_id => $old_blog_id, type => { not => 'widgetset' } }
        );
        my $tmpl_processor = sub {
            my ( $new_blog_id, $counter, $tmpl, $tmpl_map ) = @_;
            $callback->($state . " " . MT->translate("[_1] records processed...", $$counter), 'tmpls')
                if $counter && ($$counter % 100 == 0);
            my $tmpl_id = $tmpl->id;
            $$counter++;
            delete $tmpl->{column_values}->{id};
            delete $tmpl->{changed_cols}->{id};
            # linked_file won't be cloned for now because
            # new blog does not have site_path - breaks relative path
            delete $tmpl->{column_values}->{linked_file};
            delete $tmpl->{column_values}->{linked_file_mtime};
            delete $tmpl->{column_values}->{linked_file_size};
            $tmpl->blog_id($new_blog_id);
            $tmpl->save or die $tmpl->errstr;
            $tmpl_map->{$tmpl_id} = $tmpl->id;
        };
        $counter = 0;
        while (my $tmpl = $iter->()) {
            $tmpl_processor->($new_blog_id, \$counter, $tmpl, \%tmpl_map);
        }
</pre>

<p>
パッチでも送りつけようかと思ったけど、とりあえず普通にCGI経由で使っていれば問題がないので（顕在化しない）ブログに公開する程度にする。
</p>]]>
        <![CDATA[<p>
さて他のオブジェクトもこのような実装がされているんだが、簡単にまとめると複製元となるブログからオブジェクトを読み出して
</p>

<p>
・プライマリーキー削除<br />
・プライマリーキー変更記録削除<br />
・新しいブログIDをセット<br />
・保存（新規プライマリー値設定）
</p>

<p>
たぶん Data::ObjectDriver あたりがキー値がないものは新規扱いにして、INSERT 文発行してくれているのでしょう。コレ単体ではいい感じの動きかもしれないけど、その後もう一度同じ条件で load_iter() を実行すると予想に反した結果が返る。
</p>

<p>
もう一つ Data::ObjectDriver のいい感じの機能としてキャッシュ機構がある。先の複製方式だと同一検索条件向けのキャッシュのデータをいじっていることになるので、同じ検索条件でついさっき複製・更新して保存した別のブログのためのデータを拾う結果となる。
</p>

<p>
テンプレート以外にもエントリーやカテゴリーなどの複製もあるので同様に問題が発生するかと思ったら、値にだけに着目すれば複製結果を複製しても実害がない。
</p>

<p>
ところがテンプレートマップ（どのテンプレートがどのブログ）を更新するときに問題が発生する。テンプレートを複製するときに複製元からコピーして新しいブログ用のテンプレートを保存する際、あとでブログとテンプレートIDのマッピングを保存するためにオリジナルのIDと複製先のIDの対応をハッシュ %tmpl_map へ記録してる。
</p>

<p>
ブログ複製の二回目以降、本来はオリジナルのブログのテンプレートIDが複製元にならなくちゃいけないのに、キャッシュから取り出されたデータは直前に更新され保存されたデータを参照してしまう。つまり直前に処理したブログのテンプレートIDがなぜかオリジナルのものとして利用され、その値をキーとして複製後のIDが保存される。
</p>

<p>
その後テンプレートマップを保存する際に問題が発生する。
</p>

<pre class="brush:perl first-line:884 highlight:[893]">
        require MT::TemplateMap;
        $iter = MT::TemplateMap->load_iter({ blog_id => $old_blog_id });
        $counter = 0;
        while (my $map = $iter->()) {
            $callback->($state . " " . MT->translate("[_1] records processed...", $counter), 'tmplmaps')
                if $counter && ($counter % 100 == 0);
            $counter++;
            delete $map->{column_values}->{id};
            delete $map->{changed_cols}->{id};
            $map->template_id($tmpl_map{$map->template_id});
            $map->blog_id($new_blog_id);
            $map->save or die $map->errstr;
        }
</pre>

<p>
そもそも %tmpl_map は本来の意図した状態とは違うことになっていて、その壊れたハッシュにオリジナルのテンプレートIDをキーにして値を参照してる($tmpl_map{$map->template_id}) ため存在しないキー値でのアクセスとなり、値は無しとなる。当然 template_id は NOT NULL なので $map->save 時にDBDでエラー発生。その結果先の冒頭のエラーメッセージが発生する。
</p>

<p>
個別のオブジェクトにも clone() があるんだから、一旦複製してから保存すればいい。ということで、こんな感じでOK。
</p>

<pre class="brush:perl first-line:853 highlight:[853]">
            my $new_tmpl = $tmpl->clone;
            delete $new_tmpl->{column_values}->{id};
            delete $new_tmpl->{changed_cols}->{id};
            # linked_file won't be cloned for now because
            # new blog does not have site_path - breaks relative path
            delete $new_tmpl->{column_values}->{linked_file};
            delete $new_tmpl->{column_values}->{linked_file_mtime};
            delete $new_tmpl->{column_values}->{linked_file_size};
            $new_tmpl->blog_id($new_blog_id);
            $new_tmpl->save or die $new_tmpl->errstr;
            $tmpl_map->{$tmpl_id} = $new_tmpl->id;
</pre>

<p>
なんか言葉で説明難しいけど、書くだけ書いた。疲れた。
</p>]]>
    </content>
</entry>

<entry>
    <title>はてなと任天堂提携（うごメモはてな）</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2008/12/post-126.html" />
    <id>tag:5net.com,2008:/blog//1.78559</id>

    <published>2008-12-18T15:04:50Z</published>
    <updated>2008-12-18T15:47:04Z</updated>

    <summary> 本日(18日)14時、はてなの新サービスおよび提携の発表会があった。たまたま知...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="news" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="hatena" label="hatena" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="nintendo" label="nintendo" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p><object data="http://ugomemo.hatena.ne.jp/js/ugoplayer_s.swf" type="application/x-shockwave-flash" width="279" height="240"><param name="movie" value="http://ugomemo.hatena.ne.jp/js/ugoplayer_s.swf"></param><param name="FlashVars" value="did=092A3EC8199FD5D5&amp;file=7DD445_086B87CBD0AC9_000"></param></object></p>

<p>本日(18日)14時、はてなの新サービスおよび提携の発表会があった。たまたま知人から案内を受けたので行ってみた。</p>

<p>新しい会社との提携を発表する際、「はてなと同様、京都をベースとして世界へ羽ばたいている会社と」まで近藤さんが言った瞬間、社名を言う前に会場内「おぉー」という驚きの声に包まれた。そう、任天堂だった。</p>

<p>その後任天堂からDSi専用ソフト「うごくメモ帳」の紹介がはじまり、メモのオンライン共有サービス部分にあたる「うごメモはてな」の紹介を近藤さんが説明した。</p>

<p>発表の詳細についてはニュースサイトにゆずるが、その後質疑応答では細かいところはともかくとして、任天堂とはてながどうして協業するのかへの答えが簡単言えば「いっしょにやりたいから」だったのはとても好感が持てた。また直接金銭上のやりとりは一切なく（開発費用はお互い負担）作り上げたものが結果として利益になればいいと。なにより協業できること事態がうれしいという雰囲気が感じられた。</p>

<p>彼らは京都がベースであることはともかくとして、お互いの社風や目指すものがにていることにシンパシーを感じてる様子は伺えたし、任天堂がネット関連サービスを提供している企業との協業する相手としては最良の相手だと思う。なんかほんわか温かい気持ちになりました。<br />
</p>]]>
        <![CDATA[<p>一つ仕組みとして面白いのは、うごくメモ帳では作ったメモをネットへアップして、また別のユーザーがうごくメモ帳で見ることができるのだが、このときコンテンツはうごメモはてなで先に公開されて一定期間不適切なコンテンツであると通報されずに残ったものだけがうごくメモ帳で見れるようになる。これははてなユーザーの力を借りてコンテンツをフィルタリングし、安心してみれるようにする仕組み。別の企業サービス、そしてそのユーザーがフィルタリングに協力する、これ、今まであまり無かったしかけじゃないかしら。どれだけ機能するかというテクニカルな課題は残るものの、面白い会社同士が共同で新しいしかけを試すのはやんやと批評せずに、期待して見守っていたいなとそんなことを思った。</p>

<p>あと質疑応答にもあったが、今まで接触のなかったDSiの低年齢ユーザーがどんどんとはてなサービスへ触れる機会が増える見込みだが、今後どういう対応が行われていくのか気になるところ。</p>

<p>さて何となく質疑応答をメモしたので書いておく。</p>

<p>Q 開発規模<br />
A 3ヶ月。3名でスタート、最近では多く参加。にのみやさんがディレクター。</p>

<p>Q ビジネスモデル<br />
A サイトの方で広告モデルなどを考える</p>

<p>Q 提携内容<br />
A 資本提携も金銭のやりとりは無し。</p>

<p>Q 開発経緯<br />
A うごくメモ帳の開発開始は6月スタート。はてなと話をしたのは8月下旬。開発開始は10月。</p>

<p>Q 投稿作品がDSiにのるまでの期間<br />
A 当初は30分で設定。調整していく。</p>

<p>Q 目標<br />
A 作品投稿数など特に設定してない。</p>

<p>Q ネットでの連携ははてなだけなのか？<br />
A 任天堂はUGCのノウハウがない。京都、雰囲気も任天堂とにている、サービスの質が高い。</p>

<p>Q なぜ外部サービスと連携したのか？<br />
A はてなが中でも最適な会社だと思うから。</p>

<p>Q 投稿するサーバーはどちらが管理するのか？<br />
A はてなサーバーで運営・管理する。</p>

<p>Q 投稿作品の著作権<br />
A 特殊なライセンス設定は無し。</p>

<p>Q 外部のコンテンツは持ち出せるのか<br />
A ブログパーツを利用する形では持ち出し可。その他は今のところ無し。</p>

<p>Q 任天堂から声をかけたのか<br />
A はい。以前から接触はあった。</p>

<p>Q うごめもとうごめもシアターの想定ユーザー数<br />
A 正直わからない。（両社）</p>

<p>Q はてなとしてのメリット<br />
A ウェブサイトでの収益化。任天堂と仕事ができることがメリットと感じている。その他のユーザーへのリーチも十分メリットと感じている。</p>

<p>Q はてなサービスでの低年齢ユーザーへの配慮は検討しているか<br />
A はてなトップのリニューアルでわかりやすさへの配慮は実施した。その他今後対応していく。</p>

<p>Q 年齢制限フィルタリング<br />
A 本日時点では無い。将来は改善する可能性はあるが現時点で具体的な計画は無い。</p>

<p>Q 任天堂としてのメリットは<br />
A DSiが新しいコンセプトであることを伝えたい。新しいユーザーにもリーチしたいのではてなとくむことが最適と感じている。UGC系サービスについてノウハウのある会社との連携が必須だと思う。</p>

<p>■<a href="http://ugomemo.hatena.ne.jp/">うごメモはてな - メモからはじまる新しいコミュニケーション！</a><br />
■<a href="http://touch-ds.jp/dsi/interview/5_1.html">Touch-DS.jp - 社長が訊く『ニンテンドーDSi』</a><br />
■<a href="http://japan.cnet.com/news/media/story/0,2000056023,20385542,00.htm">はてな、任天堂と提携した新サービス、DSiソフト発表:ニュース - CNET Japan</a><br />
</p>]]>
    </content>
</entry>

<entry>
    <title>Nikon Media Port UP 体験</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2008/12/nikon-media-port-up.html" />
    <id>tag:5net.com,2008:/blog//1.77981</id>

    <published>2008-12-14T14:35:00Z</published>
    <updated>2008-12-14T15:50:04Z</updated>

    <summary> アジャイルメディア・ネットワークのMEDIA PORT UP 300xモニター...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="product" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gadget" label="gadget" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="nikon" label="nikon" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p><a href="http://www.flickr.com/photos/kaz_goto/3107566180/" title="Nikon Media Port UP by kaz.goto, on Flickr"><img src="http://farm4.static.flickr.com/3096/3107566180_347220237a_t.jpg" width="75" height="100" alt="Nikon Media Port UP" class="photo" /></a><a href="http://www.flickr.com/photos/kaz_goto/3107566574/" title="Nikon Media Port UP by kaz.goto, on Flickr"><img src="http://farm4.static.flickr.com/3175/3107566574_708ff6627a_t.jpg" width="75" height="100" alt="Nikon Media Port UP" class="photo" /></a><a href="http://www.flickr.com/photos/kaz_goto/3107566794/" title="Nikon Media Port UP by kaz.goto, on Flickr"><img src="http://farm4.static.flickr.com/3036/3107566794_5f15330846_t.jpg" width="75" height="100" alt="Nikon Media Port UP" class="photo" /></a><a href="http://www.flickr.com/photos/kaz_goto/3106734721/" title="Nikon Media Port UP by kaz.goto, on Flickr"><img src="http://farm4.static.flickr.com/3128/3106734721_a6c1269ed4_t.jpg" width="75" height="100" alt="Nikon Media Port UP" class="photo" /></a><a href="http://www.flickr.com/photos/kaz_goto/3106735203/" title="Nikon Media Port UP by kaz.goto, on Flickr"><img src="http://farm4.static.flickr.com/3039/3106735203_cdd68a2f2a_t.jpg" width="75" height="100" alt="Nikon Media Port UP" class="photo" /></a><a href="http://www.flickr.com/photos/kaz_goto/3107567904/" title="Nikon Media Port UP by kaz.goto, on Flickr"><img src="http://farm4.static.flickr.com/3068/3107567904_3bd71bc8b1_t.jpg" width="75" height="100" alt="Nikon Media Port UP" class="photo" /></a><a href="http://www.flickr.com/photos/kaz_goto/3107568254/" title="Nikon Media Port UP by kaz.goto, on Flickr"><img src="http://farm4.static.flickr.com/3213/3107568254_6873af626d_t.jpg" width="75" height="100" alt="Nikon Media Port UP" class="photo" /></a></p>

<p>アジャイルメディア・ネットワークのMEDIA PORT UP 300xモニタープログラムに当選し<a href="http://5net.com/blog/2008/12/up%E3%82%AD%E3%82%BF%E3%83%BC.html">12/2に届いた</a>UP(<a href="http://www.upxup.jp/">Nikon Media Port UP300x</a>)、この2週間持ち歩いて使ってみた。基本的には会社と自宅の間、歩きと電車内での使用。自宅から駅までの10分弱の歩きと電車内での視聴を試した。<br />
</p>]]>
        <![CDATA[<p>以前<a href="http://5net.com/blog/2008/10/nikon-up-blogger-meeting.html">ブロガーミーティングに参加した</a>ときにすでに慣れていたのだが、外をみたり映像を見たりと焦点を合わせることは難なくできたので、まずは歩きで使用。</p>

<p>何かをしながらテレビを見るような「ながら見」の感覚でさほど集中せず、むしろ音声にたよる視聴は普通に出来た。映像はちょろちょろ見る感じ。5分くらいの映像を普通にながら見できた。途中数名とすれ違ったがチラ見するがそれだけ。何度も見てくる人はいない。大丈夫。(謎)</p>

<p>次に電車。満員でもなく、ガラガラでもない、やや混雑状態での視聴。座席ではなくいつもの通りドア付近にたっていたので、まわりからジロジロ見られることはなく、問題なし。適度に混雑していたので、皆さんの視線がすべてねじれの位置(?)状態。そのため視聴に集中できた。</p>

<p>以前からiPhoneでビデオキャストを見てきたこともあり、電車の中での使用はまわりに視線が気にならない限りは、非常に見やすいと感じた。iPhoneではイヤホンを耳につけ本体を手に持って見続けないといけないのポーズとしては目立つ。混雑してくると持ってみる姿勢をとることが難しいので見づらい場面が結構あった。UPの場合は頭につけてディスプレイを目の前にセットするだけなので、混雑してようが普通にその場でたっているだけなので問題ない。さすがに終電間際もしくは主な通勤時間帯の満員電車では、他のお客さんに当たる心配もあり(そんな当たらないと思うが、周りに人からしたら怖いだろうし)使用するのは難しいかな。</p>

<p>逆に移動中ではなく、自宅かオフィスでの使用はというと、なんか意味がない気がしてほとんど使用せず。パンフにあるようなUPつけながらギター(謎)とかはないなーと思ったり。ただ掃除など家事のときにながら見するときには役に立つかもとは思うので、残りの試用期間中にトライしてみる予定。</p>

<p>なんとなくまとめてみる。</p>

<p><strong>Pros.</strong><br />
・通勤などの移動中に映像を視聴できる<br />
・密閉式のおかげか外で使うデバイスとしては音質が良いと思う(個人差はあるかも)<br />
・なにより、移動以外に目的がない時間を有効に使える<br />
・ヘッドセットにディスプレイ/ストレージがワンセットになっていて取り回しが楽</p>

<p><strong>Cons.</strong><br />
・ヘッドホンが密閉式なので歩いて移動中に外への注意がしづらくなる<br />
・視るべき動画の種類がわからない(暇だから視る映像はあるが、外にいてUPをつけてみるべき映像はまだ見つからない)<br />
・Mac で動画を同期する方法がない(個人的に困る。仕方ないのでVMware FusionでWindowsを起動してUPLinkかWindows Media Playerで同期させた)<br />
・再生可能な映像フォーマットがMPEG1/2、WMVしかない(最近iPhone用にはMPEG4形式で保存してたのに、再利用はできず...)</p>

<p>いろいろ言ってみたがネットに落ちているお笑い動画を移動の合間に見るには最高のデバイスであることは間違いないです！</p>

<p>最後に未来のサラリーマンを。普通に支払いしてますｗ<br />
<a href="http://www.flickr.com/photos/kaz_goto/3107567558/" title="Nikon Media Port UP by kaz.goto, on Flickr"><img src="http://farm4.static.flickr.com/3135/3107567558_3dfbf0ed60_m.jpg" width="180" height="240" alt="Nikon Media Port UP" class="photo" /></a><br />
</p>]]>
    </content>
</entry>

<entry>
    <title>TimesWidgets by The New York Times</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2008/12/timeswidgets-by-the-new-york-t.html" />
    <id>tag:5net.com,2008:/blog//1.77547</id>

    <published>2008-12-11T15:29:58Z</published>
    <updated>2008-12-11T15:36:39Z</updated>

    <summary>あの The New York Times がブロガー向けにウィジェットを提供し...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="news" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="media" label="media" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="widgets" label="widgets" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>あの The New York Times がブロガー向けにウィジェットを提供しはじめた。かなりに自由にカスタマイズできるようになっていて、使ってみたくなったので張ってみる。</p>

<p><iframe id="widget" width="100%" height="300" scrolling="no" marginheight="0" marginwidth="0" frameborder="0" scrolling="no" src="http://www.nytimes.com/packages/html/widgets/widget.html?widgets=%5B%7B%22name%22%3A%20%22rss_tw%22%2C%20%22title%22%3A%20%22Home%20Page%22%2C%20%22source%22%3A%20%22http%3A//www.nytimes.com/services/xml/rss/nyt/HomePage.xml%22%2C%20%22maxItems%22%3A%20%2210%22%2C%20%22displayType%22%3A%20%22hs%22%7D%2C%20%7B%22name%22%3A%20%22rss_tw%22%2C%20%22title%22%3A%20%22Technology%22%2C%20%22source%22%3A%20%22http%3A//www.nytimes.com/services/xml/rss/nyt/Technology.xml%22%2C%20%22maxItems%22%3A%20%2210%22%2C%20%22displayType%22%3A%20%22hs%22%7D%2C%20%7B%22name%22%3A%20%22rss_tw%22%2C%20%22title%22%3A%20%22Media%20%26amp%3B%20Advertising%22%2C%20%22source%22%3A%20%22http%3A//www.nytimes.com/services/xml/rss/nyt/MediaandAdvertising.xml%22%2C%20%22maxItems%22%3A%20%2210%22%2C%20%22displayType%22%3A%20%22hs%22%7D%5D"></iframe><img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyMjkwMDkzODAzNzgmcHQ9MTIyOTAwOTM4MjYwNSZwPTE4NDE3MSZkPSZnPTEmdD*mbz*4MmYwYjdiN2I*MTg*NTI1YjQwNWE5MzZiOWJmMWFhMw==.gif" /></p>

<p>しかし新聞が売れなくなって来ている昨今、オンライン版サービスで直接広告収入に結びつかない活動をいつまで続けられるのかね？うまくいくなら見習いたい。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Baron Dance by Denki Groove</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2008/12/baron-dance-by-denki-groove.html" />
    <id>tag:5net.com,2008:/blog//1.76961</id>

    <published>2008-12-07T15:40:08Z</published>
    <updated>2008-12-07T15:49:47Z</updated>

    <summary>適当に電グルのPV探してたら、なんだかカッコイイものを発見。 Jugando c...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="misc" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>適当に電グルのPV探してたら、なんだかカッコイイものを発見。</p>

<p><object width="500" height="281"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1881361&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=1881361&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="281"></embed></object><br /><a href="http://vimeo.com/1881361">Jugando con Fuego</a> from <a href="http://vimeo.com/user559356">Alex_Higuera</a> on <a href="http://vimeo.com">Vimeo</a>.<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>Subversion + Trac 導入 on CentOS</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2008/12/subversion-trac-on-centos.html" />
    <id>tag:5net.com,2008:/blog//1.76063</id>

    <published>2008-12-03T13:31:00Z</published>
    <updated>2008-12-03T14:31:08Z</updated>

    <summary>Subversion と Trac の導入は過去に何度もやっているのに、毎回調べ...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="technology" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p>Subversion と Trac の導入は過去に何度もやっているのに、毎回調べないと思い出せないくらいの頻度でしか行わないので面倒。ということで CentOS のケースをメモ。</p>

<p>ついでに <a href="http://code.google.com/p/syntaxhighlighter/">SyntaxHighlighter</a> の導入もして、かつコマンドライン風味とPerl風味を自作してみたが、その件は後日。<br />
</p>]]>
        <![CDATA[<p>Subvesion 本体と WebDAV 経由で利用するための mod_dav_svn を導入。認証を Trac と共通化するのでおまじない（AuthUserFile）を入れる。</p>

<pre name="code" class="console">
# yum install subversion
# yum install mod_dav_svn
# mkdir /home/svn
# svnadmin create --fs-type fsfs /home/svn/project_name
# svn mkdir file:///home/svn/project_name/trunk file:///home/svn/project_name/tags file:///home/svn/project_name/branches -m 'INITIAL'
# chown -R apache:apache /home/svn/project_name
# vi subversion.conf 
---
LoadModule dav_module       modules/mod_dav.so
LoadModule dav_svn_module   modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
 
&lt;Location /svn&gt;
   DAV svn
   SVNPath /home/svn/project_name
#   &lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /home/trac/project_name/.htpasswd
      Require valid-user
#   &lt;/LimitExcept&gt;
&lt;/Location&gt;
---
</pre>

<p>Trac をパッケージで導入するためにおまじない。</p>

<pre name="code" class="console">
# vi /etc/yum.repos.d/CentOS-Base.repo
---
[dag]
name=Dag RPM Repository for Redhat EL4
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
---
# yum install trac
# mkdir /home/trac
# trac-admin /home/trac/project_name initenv
# chown -R apache:apache /home/trac
# htpasswd -c /home/trac/project_name/.htpasswd admin
# vi trac.conf 
---
Alias /trac/chrome/common /usr/share/trac/htdocs
&lt;Directory "/usr/share/trac/htdocs"&gt;
  Order allow,deny
  Allow from all
&lt;/Directory&gt;
 
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
 
&lt;Location "/trac"&gt;
        SetEnv TRAC_ENV         "/home/trac/project_name"
        SetEnv PYTHON_EGG_CACHE "/tmp/python_egg_cache"
&lt;/Location&gt;
&lt;Location "/trac/login"&gt;
        AuthType Basic
        AuthName "trac"
        AuthUserFile /home/trac/project_name/.htpasswd
        Require valid-user
&lt;/Location&gt;
---
 
# service httpd reload
</pre>

<p>Trac 用に追加のプラグインを入れるための準備。setuptools 導入。</p>

<pre name="code" class="console">
# wget http://pypi.python.org/packages/2.3/s/setuptools/setuptools-0.6c9-py2.3.egg#md5=a83c4020414807b496e4cfbe08507c03
# sh setuptools-0.6c9-py2.3.egg
</pre>

<p><a href="http://trac.edgewall.org/wiki/WebAdmin">WebAdmin</a> プラグイン導入。</p>

<pre name="code" class="console">
# wget http://trac.edgewall.org/attachment/wiki/WebAdmin/TracWebAdmin-0.1.2dev_r4240-py2.3.egg.zip?format=raw
# mv TracWebAdmin-0.1.2dev_r4240-py2.3.egg.zip\?format\=raw TracWebAdmin-0.1.2dev_r4240-py2.3.egg
# easy_install TracWebAdmin-0.1.2dev_r4240-py2.3.egg
</pre>

<p><a href="http://trac-hacks.org/wiki/AccountManagerPlugin">AccountManager</a> プラグイン導入。</p>

<pre name="code" class="console">
# easy_install http://trac-hacks.org/svn/accountmanagerplugin/0.10
</pre>
]]>
    </content>
</entry>

<entry>
    <title>UPキター</title>
    <link rel="alternate" type="text/html" href="http://5net.com/blog/2008/12/upキター.html" />
    <id>tag:5net.com,2008:/blog//1.76160</id>

    <published>2008-12-02T02:39:20Z</published>
    <updated>2008-12-02T02:42:16Z</updated>

    <summary> けど、開ける時間はない。夜だな。...</summary>
    <author>
        <name>kaz</name>
        
    </author>
    
        <category term="moblog" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://5net.com/blog/">
        <![CDATA[<p><a href="http://www.flickr.com/photos/kaz_goto/3076372672/" title="UPキター"><img src="http://farm4.static.flickr.com/3011/3076372672_ff6b2238c5_m.jpg" alt="" class="photo" /></a><br />
けど、開ける時間はない。夜だな。</p>]]>
        
    </content>
</entry>

</feed>
