<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
  <link rel="stylesheet" type="text/css" href="//blog.8-p.info/2009/wp-content/themes/b8i/ALL.css" />

  <link rel="alternate" type="application/rss+xml"
             href="//blog.8-p.info/2009/feed" title="Japanese + English" />
  <link rel="alternate" type="application/atom+xml"
             href="//blog.8-p.info/2009/tag/lang-en/feed/atom" title="English" />

  <link rel="icon" href="//blog.8-p.info/favicon.ico" type="image/vnd.microsoft.icon" />
  <title>blog.8-p.info</title>

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="//blog.8-p.info/2009/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="//blog.8-p.info/2009/wp-includes/wlwmanifest.xml" /> 


</head>

<body>

<div id="header">
  <div class="main">
    <h1><a href="/">blog.8-p.info</a></h1>
    <p>加藤和良 (1984年うまれ) の個人的なブログです。</p>
  </div>
  <div class="sidebar">
    <form method="get" action="//blog.8-p.info/2009/">
      <div id="search">
        <input type="text" class="text" id="searchKeyword"  name="s"
               value="" />
      </div>
    </form>
  </div>
</div>

<div id="body">
   <div class="main">

<div class="entry" id="entry1700">
  <h2 class="entry-title"><a href="//blog.8-p.info/2009/12/chrome-repl-released">ChromeRepl released</a>
      </h2>
  <div class="yui-g meta">
    <div class="date yui-u first">
      2009-12-11 21:49    </div>
    <div class="tags yui-u">
      <a href="//blog.8-p.info/2009/tag/lang-en" rel="tag">lang-en</a>    </div>
  </div>
  <div class="body"><p>Today, I released ChromeRepl on the <a href="https://chrome.google.com/extensions/detail/dedppbpeendknnpchklgpdiiiodajgki">Extensions Gallery</a>.</p>
<p>ChromeRepl is is heavily inspired from MozRepl. However Google Chrome can&#8217;t speak the telnet protocol. So I released <a href="http://gemcutter.org/gems/google-chrome-client">google-chrome-client</a> library (in Ruby) too. The library includes &#8220;chrome-repl&#8221; command.</p>
<p>I think the installation process is complicated. However, ChromeRepl brings the power of UNIX to Google Chrome. Please try!</p>
</div>
</div>
<div class="entry" id="entry1684">
  <h2 class="entry-title"><a href="//blog.8-p.info/2009/12/hatena">Hatena&#8217;s routing problem</a>
    (1)  </h2>
  <div class="yui-g meta">
    <div class="date yui-u first">
      2009-12-11 02:30    </div>
    <div class="tags yui-u">
      <a href="//blog.8-p.info/2009/tag/lang-en" rel="tag">lang-en</a>    </div>
  </div>
  <div class="body"><p>Hatena released &#8220;Hatena Bookmark for iPhone&#8221;. Great!</p>
<p>However, the URI of the page is <a href="http://b.hatena.ne.jp/touch">http://b.hatena.ne.jp/touch</a> and I found <a href="http://www.hatena.ne.jp/touch/fans">id:touch</a>. So he (or she?) probably can&#8217;t use Hatena Bookmark.</p>
<p>Hatena made same mistake on <a href="http://i.hatena.ne.jp/idea/23484">Hatena Bookmark News</a> and <a href="http://kossori.g.hatena.ne.jp/bbs/6/1">Ashika</a>. I like their short URI better than &#8220;foobar.php?id=baz&#8221;. But this namespace collision is not good.</p>
</div>
</div>
<div class="entry" id="entry1650">
  <h2 class="entry-title"><a href="//blog.8-p.info/2009/12/test-synchronized">Test::Synchronized released</a>
      </h2>
  <div class="yui-g meta">
    <div class="date yui-u first">
      2009-12-09 01:26    </div>
    <div class="tags yui-u">
      <a href="//blog.8-p.info/2009/tag/lang-en" rel="tag">lang-en</a>    </div>
  </div>
  <div class="body"><p>Tim Bray wrote on his article <a href="http://www.tbray.org/ongoing/When/200x/2009/09/27/Concur-dot-next">Concur.next</a> that:</p>
<blockquote><p>No longer; Next year’s system will do more computing all right, but by giving you more CPUs, running at this year’s speed, to work with.</p></blockquote>
<p>Perl&#8217;s multi-core support is good old-fashioned fork(2). It&#8217;s not sexy, but it works. So recently I began to use &#8220;prove -j9&#8243;. But some of our project&#8217;s tests are not works correctly under the &#8220;prove&#8221; command.</p>
<p>For example, our cron script has tests that create and remove a log file.</p>
<ul>
<li>foo.t open and create a log file.</li>
<li>foo.t write something to the file.</li>
<li>foo.t remove the file.</li>
</ul>
<ul>
<li>bar.t open and create a new log file.</li>
<li>bar.t write something to the file.</li>
<li>bar.t remove the file.</li>
</ul>
<p>And it&#8217;s not works at the same time.</p>
<ul>
<li>foo.t open and create a log file.</li>
<li>bar.t open the log file.</li>
<li>foo.t write something to the file.</li>
<li>bar.t write something to the file, too.</li>
<li>foo.t remove the file.</li>
<li>bar.t <em>can&#8217;t</em> remove the file.</li>
</ul>
<p>I can modify the code to fix it. However, I&#8217;m lazy and impatient. So I wrote a simple lock system named Test::Synchronized.</p>
<p>Test::Synchronized provides a giant lock to your tests. When you add &#8220;use Test::Synchronized;&#8221; on both foo.t and bar.t.</p>
<ul>
<li>foo.t create a lock directory.</li>
<li>foo.t open and create a log file.</li>
<li>bar.t can&#8217;t create the lock directory. So bar.t wait the end of foo.t.</li>
<li>foo.t write something to the file.</li>
<li>foo.t remove the file.</li>
<li>foo.t remove the lock directory.</li>
<li>bar.t create a new lock directory.</li>
<li>bar.t open and create a new log file.</li>
<li>&#8230;</li>
</ul>
<p>It&#8217;s not sexy, but it works :)</p>
<p>I released 0.01 on <a href="http://bitbucket.org/kzys/test-synchronized/">Bitbucket</a> and CPAN already. Enjoy!</p>
<h3>0.02</h3>
<p>Tokuhiro-san (aka tokuhirom) blogged about <a href="http://d.hatena.ne.jp/tokuhirom/20091209/1260330943">some bugs and problems of Test::Synchronized</a>. So I fixed and released 0.02 now. Thanks a lot. </p>
</div>
</div>

    <div class="paginate">
            <a href="//blog.8-p.info/2009/tag/lang-en/page/2" >Older</a>    </div>
  </div>
  <div class="sidebar"><h2>About me and this blog</h2>
<p>
  All articles are written by <a href="http://8-p.info/me/">加藤和良</a>.
  A few are <a href="/2009/tag/lang-en">written in English</a>.
</p>

<ul>
  <li>
    <h2>Recent articles</h2>
    <ul>	<li><a href='//blog.8-p.info/2009/12/wordpress' title='さよなら WordPress'>さよなら WordPress</a></li>
	<li><a href='//blog.8-p.info/2009/12/chrome-repl-released' title='ChromeRepl released'>ChromeRepl released</a></li>
	<li><a href='//blog.8-p.info/2009/12/hatena' title='Hatena&#8217;s routing problem'>Hatena&#8217;s routing problem</a></li>
	<li><a href='//blog.8-p.info/2009/12/test-synchronized' title='Test::Synchronized released'>Test::Synchronized released</a></li>
	<li><a href='//blog.8-p.info/2009/11/26' title='11月をふりかえる'>11月をふりかえる</a></li>
	<li><a href='//blog.8-p.info/2009/11/subversion-file-find' title='Subversion のワーキングコピー上の File::Find を速くする'>Subversion のワーキングコピー上の File::Find を速くする</a></li>
	<li><a href='//blog.8-p.info/2009/11/chrome-repl' title='ChromeRepl - a remote REPL client for Google Chrome'>ChromeRepl - a remote REPL client for Google Chrome</a></li>
	<li><a href='//blog.8-p.info/2009/10/october' title='10月をふりかえる'>10月をふりかえる</a></li>
	<li><a href='//blog.8-p.info/2009/10/linux-db-system' title='『Linux-DB システム 構築/運用入門』を読んだ'>『Linux-DB システム 構築/運用入門』を読んだ</a></li>
	<li><a href='//blog.8-p.info/2009/10/cubic-volume' title='体積パズル'>体積パズル</a></li>
	<li><a href='//blog.8-p.info/2009/10/scala-scripting' title='Scala で書き捨てスクリプト'>Scala で書き捨てスクリプト</a></li>
	<li><a href='//blog.8-p.info/2009/09/september' title='9月をふりかえる'>9月をふりかえる</a></li>
	<li><a href='//blog.8-p.info/2009/09/greasekit-1-7' title='GreaseKit 1.7 released'>GreaseKit 1.7 released</a></li>
	<li><a href='//blog.8-p.info/2009/09/gcd-1' title='C にクロージャのようなものを追加する Grand Central Dispatch'>C にクロージャのようなものを追加する Grand Central Dispatch</a></li>
	<li><a href='//blog.8-p.info/2009/09/greasekit-1-6' title='GreaseKit 1.6 released'>GreaseKit 1.6 released</a></li>
	<li><a href='//blog.8-p.info/2009/09/yapcasia-2009' title='YAPC::Asia 2009 スタッフ日記'>YAPC::Asia 2009 スタッフ日記</a></li>
	<li><a href='//blog.8-p.info/2009/09/clickatell-sms' title='Clickatell 経由で SMS を送信する'>Clickatell 経由で SMS を送信する</a></li>
	<li><a href='//blog.8-p.info/2009/09/devel-nytprof' title='Devel::NYTProf を読む'>Devel::NYTProf を読む</a></li>
	<li><a href='//blog.8-p.info/2009/08/august' title='8月をふりかえる'>8月をふりかえる</a></li>
	<li><a href='//blog.8-p.info/2009/08/toeic' title='TOEIC スコアとか'>TOEIC スコアとか</a></li>
	<li><a href='//blog.8-p.info/2009/08/july-kpt' title='7月の KPT'>7月の KPT</a></li>
	<li><a href='//blog.8-p.info/2009/08/managers-schedule' title='Does anyone like &#8220;Manager&#8217;s Schedule&#8221;?'>Does anyone like &#8220;Manager&#8217;s Schedule&#8221;?</a></li>
	<li><a href='//blog.8-p.info/2009/07/wewlc' title='『レガシーコード改善ガイド』を読もう (あるいは、テストを書こう)'>『レガシーコード改善ガイド』を読もう (あるいは、テストを書こう)</a></li>
	<li><a href='//blog.8-p.info/2009/07/newspeak-on-bitbucket' title='Newspeak on Bitbucket'>Newspeak on Bitbucket</a></li>
	<li><a href='//blog.8-p.info/2009/07/newspeak' title='Newspeak - The search engine for commit logs'>Newspeak - The search engine for commit logs</a></li>
	<li><a href='//blog.8-p.info/2009/07/php-or-perl' title='What language should we learn?'>What language should we learn?</a></li>
	<li><a href='//blog.8-p.info/2009/06/june-kpt' title='6月の KPT'>6月の KPT</a></li>
	<li><a href='//blog.8-p.info/2009/06/html' title='HTML + CSS + JavaScript を組み合わせる難しさ'>HTML + CSS + JavaScript を組み合わせる難しさ</a></li>
	<li><a href='//blog.8-p.info/2009/06/dsvn-el' title='dsvn.el から Subversion をつかう'>dsvn.el から Subversion をつかう</a></li>
	<li><a href='//blog.8-p.info/2009/06/google-page-speed' title='Google Page Speed を読む'>Google Page Speed を読む</a></li>
	<li><a href='//blog.8-p.info/2009/05/may-kpt' title='5月の KPT'>5月の KPT</a></li>
	<li><a href='//blog.8-p.info/2009/05/testapache2-003-and-004' title='Test::Apache2 0.03 and 0.04'>Test::Apache2 0.03 and 0.04</a></li>
	<li><a href='//blog.8-p.info/2009/05/code-smell' title='コードの匂いは人に移る'>コードの匂いは人に移る</a></li>
	<li><a href='//blog.8-p.info/2009/05/test-apache2-released' title='Test::Apache2 をリリースした'>Test::Apache2 をリリースした</a></li>
	<li><a href='//blog.8-p.info/2009/05/april-kpt' title='4月の KPT'>4月の KPT</a></li>
	<li><a href='//blog.8-p.info/2009/04/test-apache2' title='My new project: Test::Apache2'>My new project: Test::Apache2</a></li>
	<li><a href='//blog.8-p.info/2009/04/project-root' title='プロジェクトのルートディレクトリを探す'>プロジェクトのルートディレクトリを探す</a></li>
	<li><a href='//blog.8-p.info/2009/04/danboard' title='Danboard is my XFD'>Danboard is my XFD</a></li>
	<li><a href='//blog.8-p.info/2009/04/glitchcam' title='glitchcam'>glitchcam</a></li>
	<li><a href='//blog.8-p.info/2009/03/kpt' title='3月の KPT'>3月の KPT</a></li>
	<li><a href='//blog.8-p.info/2009/03/textfield-js-2' title='JavaScript でプレースホルダ、の続き'>JavaScript でプレースホルダ、の続き</a></li>
	<li><a href='//blog.8-p.info/2009/03/gnu-strlen' title='GNU strlen を読む'>GNU strlen を読む</a></li>
	<li><a href='//blog.8-p.info/2009/03/textfield-js' title='JavaScript でプレースホルダつき入力欄を作る'>JavaScript でプレースホルダつき入力欄を作る</a></li>
	<li><a href='//blog.8-p.info/2009/02/life' title='2月の反省と近況'>2月の反省と近況</a></li>
	<li><a href='//blog.8-p.info/2009/02/class-sniff-combine_graphs' title='New Class::Sniff has &#8220;combine_graphs&#8221;'>New Class::Sniff has &#8220;combine_graphs&#8221;</a></li>
	<li><a href='//blog.8-p.info/2009/02/class-sniff' title='Class::Sniff で継承木をかく'>Class::Sniff で継承木をかく</a></li>
	<li><a href='//blog.8-p.info/2009/02/simbl' title='SIMBL で Cocoa アプリケーションにコードをつぎたす'>SIMBL で Cocoa アプリケーションにコードをつぎたす</a></li>
	<li><a href='//blog.8-p.info/2009/01/hreview' title='hReview is just a draft'>hReview is just a draft</a></li>
	<li><a href='//blog.8-p.info/2009/01/unwired-life' title='断線生活'>断線生活</a></li>
	<li><a href='//blog.8-p.info/2009/01/dom-scripting' title='『DOM Scripting 標準ガイドブック』を読んだ'>『DOM Scripting 標準ガイドブック』を読んだ</a></li>
	<li><a href='//blog.8-p.info/2009/01/object-kv-mapping' title='オブジェクトを key-value ストアに直列化する'>オブジェクトを key-value ストアに直列化する</a></li>
	<li><a href='//blog.8-p.info/2009/01/chrome-ui-test' title='Google Chrome の UI テスト (実装編)'>Google Chrome の UI テスト (実装編)</a></li>
	<li><a href='//blog.8-p.info/2009/01/refactoring' title='テストぬきリファクタリング'>テストぬきリファクタリング</a></li>
	<li><a href='//blog.8-p.info/2009/01/unittest-js' title='UnittestJS でクロスブラウザテスト'>UnittestJS でクロスブラウザテスト</a></li>
	<li><a href='//blog.8-p.info/2009/01/red-prompt' title='コマンドが失敗したらプロンプトを赤くする'>コマンドが失敗したらプロンプトを赤くする</a></li>
	<li><a href='//blog.8-p.info/2009/01/blogging-in-english' title='Blogging in English'>Blogging in English</a></li>
	<li><a href='//blog.8-p.info/2009/01/2009' title='2009'>2009</a></li>
</ul>
  </li>
</ul>

<ul><li id="linkcat-2" class="linkcat"><h2>Links</h2>
	<ul class='xoxo blogroll'>
<li><a href="http://collisions.doppac.cc/">collisions.doppac.cc</a></li>
<li><a href="http://googletesting.blogspot.com/">Google Testing Blog</a></li>
<li><a href="http://www.grafikcache.com/">Grafikcache</a></li>
<li><a href="http://news.ycombinator.com/">Hacker News</a></li>
<li><a href="http://someru.blog74.fc2.com/">Hang Reviewers High</a></li>
<li><a href="http://labs.ideo.com/">IDEO Labs</a></li>
<li><a href="http://blog.makezine.com/">MAKE: Blog</a></li>
<li><a href="http://d.hatena.ne.jp/KZR/">Radium Software</a></li>
<li><a href="http://steps.dodgson.org/">steps to phantasien</a></li>

	</ul>
</li>
</ul>

<p>
  <a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
</p>
</div>
</div>

<div id="footer">Powered by <a href="http://wordpress.org/">WordPress</a></div>


<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-329758-2");
pageTracker._trackPageview();
</script>

<script type="text/javascript" src="//blog.8-p.info/2009/wp-content/themes/b8i/ALL.js"></script>

<script type="text/javascript">//<![CDATA[
(function () {
  var elements = document.body.getElementsByTagName('pre');
  var i, pre;
  for (i = 0; i < elements.length; i++) {
    pre = elements[i];
    if ((pre.innerText || pre.textContent).match(/^[%\(]/)) {
      ;
    } else {
      pre.className += ' prettyprint';
    }
  }
  prettyPrint();

  (new TextField($('searchKeyword'))).setPlaceholder('Search');
})();
//]]></script>

</body>
</html>
