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

<channel>
	<title>DailyHckr</title>
	<atom:link href="http://hylom.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://hylom.net</link>
	<description>Hack, Hacker, Hackest</description>
	<lastBuildDate>Tue, 09 Feb 2010 15:53:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>日本語リファレンスには書いてない話：urllibとurllib2の違いってなんだ</title>
		<link>http://hylom.net/2010/02/10/urllib_and_urllib2_usag/</link>
		<comments>http://hylom.net/2010/02/10/urllib_and_urllib2_usag/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 15:51:57 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[library]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1257</guid>
		<description><![CDATA[　Pythonでは、HTTPやFTPなどでファイルの送受信をするモジュールとして「urllib」と「urllib2」が用意されている。使い方も似ていて、どちらも引数としてURLを与えてurlopen()関数を呼び出すと自動的に対応したプロトコルでURLにアクセスしてデータを読み出せる、というものである。しかし、似たような名前で似たような機能を持つこの2つ、何が違うのかが明確にはドキュメントに記述されていない。そのためどちらを使うべきか迷って、そのたびにGoogleのお世話になるという状況だったのでざっとまとめてみよう。



　外から見える違いとしては、urlopen()の引数としてurllibはURL文字列のみを受け付けるのに対し、urllib2ではurllib2.Requestクラスを受け取ることができる、という点がある。urllib2.Requestクラスはリクエストを抽象化したクラスで、これを利用することでたとえばHTTPでのデータ送受信の際、任意のHTTPヘッダーを送信させるようなことが可能になる。また、urllibでは使用するproxyを直接引数で指定できるが、urllib2ではRequestオブジェクトで指定することになる。

　ということで、ただHTTPやFTPでデータを取得したいだけならurllibでもurllib2でもどちらでも対して変わらない、HTTPヘッダーをカスタマイズしたいならurllib2を使え、という話になる。あと、urllibにはurlretrive()という関数があったり、quote()/unquote()/urlencode()などの便利そうなユーティリティ関数がある、というくらい。

独自プロトコルを実装したい場合は？

　いっぽう、挙動をカスタマイズしたい、独自プロトコルを実装したい、という場合は話が変わってくる。urllibもurllib2も独自プロトコルへの対応などのカスタマイズが可能なのだが、urllibはFancyURLopenerクラスの派生クラスで実装を行うのに対し、urllib2はBaseHandlerクラスの派生クラスで実装する。

　まず、urllibの場合。ドキュメントに記載されている例だが、たとえばUser-Agentを変更したい場合、下記のようにFancyURLopenerの派生クラスを作り、その初期化時に指定したいUserAgentをversion変数に代入するようにする。そして、この派生クラスのインスタンスをurllib._urlopenerに代入してやる。


import urllib

class AppURLopener(urllib.FancyURLopener):
    def __init__(self, *args):
        self.version = "App/1.7"
        urllib.FancyURLopener.__init__(self, *args)

urllib._urlopener = AppURLopener()


　これにより、以後はurllib.urlopen()などを呼び出した際、urllib._urlopener()で指定したインスタンスを使用してHTTP/FTPなどの処理が行われるようになる。

　ちなみに、FancyURLopenerとURLopenerの関係だが、HTTP/HTTPS/FTPなどの基本的な通信/データ取得処理はURLopener内で実装されており、FancyURLopenerはそれに各種HTTPレスポンスコードへの対応やリトライといった処理を実装したサブクラスとなっている。

　またドキュメントには記述されていないが、URLopenerにはaddheader()というメソッドが用意されており、ヘッダー名をキー、与えるデータを値にした辞書を引数として与えることで、任意のヘッダーを追加できる。


    def addheader(self, *args):
        """Add a header to be used by the HTTP interface only
  [...]]]></description>
			<content:encoded><![CDATA[<p>　Pythonでは、HTTPやFTPなどでファイルの送受信をするモジュールとして「<a href="http://www.python.jp/doc/2.4/lib/module-urllib.html">urllib</a>」と「<a href="http://www.python.jp/doc/2.4/lib/module-urllib2.html">urllib2</a>」が用意されている。使い方も似ていて、どちらも引数としてURLを与えてurlopen()関数を呼び出すと自動的に対応したプロトコルでURLにアクセスしてデータを読み出せる、というものである。しかし、似たような名前で似たような機能を持つこの2つ、何が違うのかが明確にはドキュメントに記述されていない。そのためどちらを使うべきか迷って、そのたびにGoogleのお世話になるという状況だったのでざっとまとめてみよう。</p>

<span id="more-1257"></span>

<p>　外から見える違いとしては、urlopen()の引数としてurllibはURL文字列のみを受け付けるのに対し、urllib2ではurllib2.Requestクラスを受け取ることができる、という点がある。urllib2.Requestクラスはリクエストを抽象化したクラスで、これを利用することでたとえばHTTPでのデータ送受信の際、任意のHTTPヘッダーを送信させるようなことが可能になる。また、urllibでは使用するproxyを直接引数で指定できるが、urllib2ではRequestオブジェクトで指定することになる。</p>

<p>　ということで、ただHTTPやFTPでデータを取得したいだけならurllibでもurllib2でもどちらでも対して変わらない、HTTPヘッダーをカスタマイズしたいならurllib2を使え、という話になる。あと、urllibにはurlretrive()という関数があったり、quote()/unquote()/urlencode()などの便利そうなユーティリティ関数がある、というくらい。</p>

<h4>独自プロトコルを実装したい場合は？</h4>

<p>　いっぽう、挙動をカスタマイズしたい、独自プロトコルを実装したい、という場合は話が変わってくる。urllibもurllib2も独自プロトコルへの対応などのカスタマイズが可能なのだが、urllibはFancyURLopenerクラスの派生クラスで実装を行うのに対し、urllib2はBaseHandlerクラスの派生クラスで実装する。</p>

<p>　まず、urllibの場合。ドキュメントに記載されている例だが、たとえばUser-Agentを変更したい場合、下記のようにFancyURLopenerの派生クラスを作り、その初期化時に指定したいUserAgentをversion変数に代入するようにする。そして、この派生クラスのインスタンスをurllib._urlopenerに代入してやる。</p>

<pre>
import urllib

class AppURLopener(urllib.FancyURLopener):
    def __init__(self, *args):
        self.version = "App/1.7"
        urllib.FancyURLopener.__init__(self, *args)

urllib._urlopener = AppURLopener()
</pre>

<p>　これにより、以後はurllib.urlopen()などを呼び出した際、urllib._urlopener()で指定したインスタンスを使用してHTTP/FTPなどの処理が行われるようになる。</p>

<p>　ちなみに、FancyURLopenerとURLopenerの関係だが、HTTP/HTTPS/FTPなどの基本的な通信/データ取得処理はURLopener内で実装されており、FancyURLopenerはそれに各種HTTPレスポンスコードへの対応やリトライといった処理を実装したサブクラスとなっている。</p>

<p>　またドキュメントには記述されていないが、URLopenerにはaddheader()というメソッドが用意されており、ヘッダー名をキー、与えるデータを値にした辞書を引数として与えることで、任意のヘッダーを追加できる。</p>

<pre>
    def addheader(self, *args):
        """Add a header to be used by the HTTP interface only
        e.g. u.addheader('Accept', 'sound/basic')"""
        self.addheaders.append(args)
</pre>

<p>　たとえばURLopenerの__init__()内では、次のようにしてUser-Agentを指定している。</p>

<pre>
        self.addheaders = [('User-Agent', self.version)]
</pre>

<p>　なおURLopenerでは、urlopen()でHTTP/HTTPSのURLを与え、かつ第2引数が非Noneの場合（つまり、なんらかのデータを与えた場合）は「Content-Type: application/x-www-form-urlencoded」でのPOSTリクエストを利用するようにハードコーディングされている。そのため、ほかの形式でデータをPOSTしたい場合（ファイルを送信するなど）は、独自のURLopenerを作成する必要がある。</p>

<h4>urllib2で独自プロトコルを使うには？</h4>

<p>　いっぽうurllib2で独自のプロトコルを扱いたい場合、まずプロトコルを実装したBaseHandler()派生クラスを用意し、続いてそれを引数として与えてbuild_opener()を呼び出してURLハンドラを作成、最後にそれをinstall_opener()引数に与えて登録、という手順となる。下記はドキュメントに記載されている例だ。</p>

<pre>
import urllib2
# ベーシック HTTP 認証をサポートする OpenerDirector を作成する...
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password('realm', 'host', 'username', 'password')
opener = urllib2.build_opener(auth_handler)
# ...urlopen から利用できるよう、グローバルにインストールする
urllib2.install_opener(opener)
urllib2.urlopen('http://www.example.com/login.html')
</pre>

<p>　なお、urllib2の（デフォルトの）HTTP/HTTPSハンドラでも、urlopen()の第2引数が非Noneの場合（つまり、なんらかのデータを与えた場合）は「Content-Type: application/x-www-form-urlencoded」でのPOSTリクエストを利用するようにハードコーディングされている。そのため、ほかの形式でデータをPOSTしたい場合（ファイルを送信するなど）は、やっぱり独自のハンドラを作成する必要がある。</p>

<p>　ちなみに、Python3系ではPython2系のurllibは廃止され、urllib2もurllib.requestという名称に変更されている。ということで、Python3系を見据えるならurllibではなくurllib2を利用するのが望ましいようだ。</p>
]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/02/10/urllib_and_urllib2_usag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mako Templaters for Pythonメモ1：Makoってなに？</title>
		<link>http://hylom.net/2010/02/02/python_mako_intro/</link>
		<comments>http://hylom.net/2010/02/02/python_mako_intro/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 06:32:06 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[develop]]></category>
		<category><![CDATA[mako]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1247</guid>
		<description><![CDATA[　最近Pythonのテンプレートエンジン「Mako」を触ってるんだけど、日本語の情報が全然ないのでまとめてみる。





　Makoは「Hyperfast and lightweight templating for the Python platform.」（Pythonプラットフォーム向けの超高速で軽量なテンプレートエンジン）だ。Pythonのテンプレートエンジンとしては、Python標準ライブラリに含まれているstring.Templateや、WebフレームワークのDjangoに組み込まれているDjangoテンプレートエンジン、そしてCheetahなどが知られているが、Makoはそれらよりも高速で、テンプレート内にPythonコードを埋め込む機能や、キャッシュ機構などを備えてるのが特徴だ。また、文法もPython風であり習得しやすいのも利点だろう。

　いっぽう、特に大きな欠点は（いまのところ）見つかっていないのだが、日本語環境で利用する場合は文字コードをうまく扱うように適切にオプションを与える必要がある。

　ちなみに、MakoのWebサイトにはPython向けテンプレートエンジンのパフォーマンス比較が掲載されているのだが、ほかのテンプレートエンジンと比べてMakoは同等レベル以上に高速、という結果が出ているようだ。

Makoのインストール

　Makoはダウンロードページから行える。配布されているtar.gz形式のソースコードをダウンロードしてインストールできるほか、Pythonモジュール用のインストールマネージャ「easy_install」を利用してもインストールできる。

　ソースコードからインストールする場合は、ダウンロードしたアーカイブを展開し、次のように実行する。


# python setup.py install


　ちなみに、makoはすべてPythonコードで記述されているため、基本的にはPythonが動く環境であればどのプラットフォームでも動作するはずだ。

　つづく。]]></description>
			<content:encoded><![CDATA[<p>　最近Pythonのテンプレートエンジン「<a href="http://www.makotemplates.org/">Mako</a>」を触ってるんだけど、日本語の情報が全然ないのでまとめてみる。

<div class="wp-caption aligncenter" style="width: 460px"><a href="http://www.makotemplates.org/"><img alt="Mako公式Webサイト" src="http://hylom.net/img/blog/100202/mako_web.png" title="Mako公式Webサイト" width="450" height="261" /></a><p class="wp-caption-text">Mako公式Webサイト</p></div>

<span id="more-1247"></span>

<p>　Makoは「Hyperfast and lightweight templating for the Python platform.」（Pythonプラットフォーム向けの超高速で軽量なテンプレートエンジン）だ。Pythonのテンプレートエンジンとしては、Python標準ライブラリに含まれている<a href="http://docs.python.org/library/string.html#template-strings">string.Template</a>や、Webフレームワークの<a href="http://www.djangoproject.com/">Django</a>に組み込まれている<a href="http://djangoproject.jp/doc/ja/1.0/ref/templates/api.html">Djangoテンプレートエンジン</a>、そして<a href="http://www.cheetahtemplate.org/">Cheetah</a>などが知られているが、Makoはそれらよりも高速で、テンプレート内にPythonコードを埋め込む機能や、キャッシュ機構などを備えてるのが特徴だ。また、文法もPython風であり習得しやすいのも利点だろう。

<p>　いっぽう、特に大きな欠点は（いまのところ）見つかっていないのだが、日本語環境で利用する場合は文字コードをうまく扱うように適切にオプションを与える必要がある。

<p>　ちなみに、MakoのWebサイトにはPython向けテンプレートエンジンのパフォーマンス比較が掲載されているのだが、ほかのテンプレートエンジンと比べてMakoは同等レベル以上に高速、という結果が出ているようだ。

<h4>Makoのインストール</h4>

<p>　Makoは<a href="http://www.makotemplates.org/download.html">ダウンロードページ</a>から行える。配布されているtar.gz形式のソースコードをダウンロードしてインストールできるほか、Pythonモジュール用のインストールマネージャ「<a href="http://peak.telecommunity.com/DevCenter/EasyInstall">easy_install</a>」を利用してもインストールできる。

<p>　ソースコードからインストールする場合は、ダウンロードしたアーカイブを展開し、次のように実行する。

<pre>
# python setup.py install
</pre>

<p>　ちなみに、makoはすべてPythonコードで記述されているため、基本的にはPythonが動く環境であればどのプラットフォームでも動作するはずだ。

<p>　つづく。]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/02/02/python_mako_intro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE8の検索ボックスから英語版Googleを利用する</title>
		<link>http://hylom.net/2010/01/21/use-english-google-with-ie/</link>
		<comments>http://hylom.net/2010/01/21/use-english-google-with-ie/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 08:38:02 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[diary]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1244</guid>
		<description><![CDATA[<p>　Internet Explorer 8を最初に起動して、真っ先にやるのが検索エンジン（検索プロバイダ）の指定なんですが、<a href="http://www.ieaddons.com/jp/searchproviders/"日本語の検索プロバイダページ</a>にあるGoogleを指定してしまうと、自動的に「日本語のページを検索」になってしまうのが微妙なところ。

<p>　ということで、全言語を対象にGoogle検索を行うには、<a href="http://www.ieaddons.com/en/searchproviders/">英語版の検索プロバイダページ</a>から「Google Search Suggestions」をインストールしましょう。

[caption id="" align="aligncenter" width="500" caption="英語版のIE検索プロバイダページ"]<img alt="英語版のIE検索プロバイダページ" src="http://hylom.net/img/blog/100121/search_s.png" title="英語版のIE検索プロバイダページ" width="500" height="406" />[/caption]

<p>　以上、小ネタでした。]]></description>
			<content:encoded><![CDATA[<p>　Internet Explorer 8を最初に起動して、真っ先にやるのが検索エンジン（検索プロバイダ）の指定なんですが、<a href="http://www.ieaddons.com/jp/searchproviders/">日本語の検索プロバイダページ</a>にあるGoogleを指定してしまうと、自動的に「日本語のページを検索」になってしまうのが微妙なところ。

<span id="more-1244"></span>

<p>　ということで、全言語を対象にGoogle検索を行うには、<a href="http://www.ieaddons.com/en/searchproviders/">英語版の検索プロバイダページ</a>から「Google Search Suggestions」をインストールしましょう。

<div class="wp-caption aligncenter" style="width: 510px"><img alt="英語版のIE検索プロバイダページ" src="http://hylom.net/img/blog/100121/search_s.png" title="英語版のIE検索プロバイダページ" width="500" height="406" /><p class="wp-caption-text">英語版のIE検索プロバイダページ</p></div>

<p>　以上、小ネタでした。]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/01/21/use-english-google-with-ie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 7の評価版仮想ハードディスクイメージを日本語で使う</title>
		<link>http://hylom.net/2010/01/19/windows-7-eval-vhd-japanese/</link>
		<comments>http://hylom.net/2010/01/19/windows-7-eval-vhd-japanese/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 12:18:29 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[develop]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1237</guid>
		<description><![CDATA[<p>　Microsoftが、Windows 7の90日期間限定評価版がインストールされた仮想ハードディスクイメージ（Windows 7 90-Day Eval VHD）を無償公開している。<a href="http://www.forest.impress.co.jp/docs/news/20091015_321806.html">窓の杜の記事</a>などでも紹介されているが、これは同じくMicrosoftがWindows環境向けに無償提供している<a href="http://www.microsoft.com/japan/windows/virtual-pc/">Virtual PC</a>上で利用できるもので、（期間限定、評価目的限定ではあるものの）ライセンスの問題なしにWindowsの仮想環境を構築できる。多くのソフトウェアのインストール/アンインストールを繰り返すライターや、クリーンな環境で動作確認を行いたいようなソフト開発者にとって非常に便利なソリューションだ。

<p>　ただし、注意しなければ行けないのが、現状公開されているのは英語版のEnterprise Editionのみという点。といっても、インストール後に日本語言語ファイル（Multi User Interface、MUI）をWindows Update経由でインストールし、いくつかの設定を行えば日本語版とほぼ同じインターフェイスに変更できる。ということで、以下ではWindows 7 90-Day Eval VHDを日本語化する手順をメモ代わりに解説しておこう。]]></description>
			<content:encoded><![CDATA[<p>　Microsoftが、Windows 7の90日期間限定評価版がインストールされた仮想ハードディスクイメージ（Windows 7 90-Day Eval VHD）を無償公開している。<a href="http://www.forest.impress.co.jp/docs/news/20091015_321806.html">窓の杜の記事</a>などでも紹介されているが、これは同じくMicrosoftがWindows環境向けに無償提供している<a href="http://www.microsoft.com/japan/windows/virtual-pc/">Virtual PC</a>上で利用できるもので、（期間限定、評価目的限定ではあるものの）ライセンスの問題なしにWindowsの仮想環境を構築できる。多くのソフトウェアのインストール/アンインストールを繰り返すライターや、クリーンな環境で動作確認を行いたいようなソフト開発者にとって非常に便利なソリューションだ。

<span id="more-1237"></span>

<p>　ただし、注意しなければ行けないのが、現状公開されているのは英語版のEnterprise Editionのみという点。といっても、インストール後に日本語言語ファイル（Multi User Interface、MUI）をWindows Update経由でインストールし、いくつかの設定を行えば日本語版とほぼ同じインターフェイスに変更できる。ということで、以下ではWindows 7 90-Day Eval VHDを日本語化する手順をメモ代わりに解説しておこう。


<div class="wp-caption aligncenter" style="width: 510px"><a href="http://hylom.net/img/blog/100119/190complete.png"><img alt="日本語化されたWindows 7 90日試用版" src="http://hylom.net/img/blog/100119/190complete_s.png" title="日本語化されたWindows 7 90日試用版" width="500" height="421" /></a><p class="wp-caption-text">日本語化されたWindows 7 90日試用版</p></div>

<h4>Windows 7 90-Day Eval VHDのダウンロードとインストール</h4>
<p>　まずはMicrosoftの<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=606ae07e-b7db-405b-974b-dd61fc41add4&#038;displaylang=en">ダウンロードページ</a>から、Microsoft Windows 7 90-Day Eval VHDをダウンロードする。なお、ダウンロードには正規版のWindowsが必要で、ダウンロード時に認証がかかるのでIEでダウンロードするほうが良いかもしれない。また、インストーラは3ファイルに分割されていて、合計で約1.8GBと大きいので、ダウンロード時にはHDDの残量に注意。

<p>　ダウンロード後、3つのファイルを同じフォルダに保存して「Windows7Fullx86Ent90Days.part1.exe」を実行すると「Windows7Fullx86Ent90Days」というフォルダが作成され、その中の「Virtual Hard Disks」ディレクトリ内にある「Win7ENT90DAYS.vhd」がWindows 7がインストールされた仮想ハードディスクイメージとなる。

<div class="wp-caption aligncenter" style="width: 510px"><a href="http://hylom.net/img/blog/100119/010vhd.png"><img alt="Windows 7 30日評価版の仮想ハードディスクイメージ" src="http://hylom.net/img/blog/100119/010vhd_s.png" title="Windows 7 30日評価版の仮想ハードディスクイメージ" width="500" height="364" /></a><p class="wp-caption-text">Windows 7 30日評価版の仮想ハードディスクイメージ</p></div>

<h4>Virtual PCのインストール</h4>
<p>　続いて、Virtual PCのインストールを行う。Windows 7でVTが利用できる環境の場合は、<a href="http://www.microsoft.com/japan/windows/virtual-pc/download.aspx">Windows Virtual PC</a>を、それ以外（Windows 7でVTが利用できない環境およびWindows Vista、XP）の場合、<a href="http://www.microsoft.com/downloads/details.aspx?familyid=04D26402-3199-48A3-AFA2-2DC0B40A73B6&#038;displaylang=ja">Virtual PC 2007</a>を利用する。それぞれのインストールについては割愛（ダウンロードしてインストーラを実行するだけ）。

<h4>仮想マシンの作成（Windows 7＋Windows Virtual PC環境）</h4>
<p>　Virtual PCのインストールが終わったら、仮想マシンを作成する。以下はWindows 7＋Windows Virtual PCの場合。それ以外の場合は適当にググっていただきたい（汗）。

<p>　Windows 7の場合、「＜ユーザーのホームディレクトリ＞\仮想マシン」というフォルダでWindows Virtual PCの操作を行う。まずはコマンドバーの「仮想マシンの作成」をクリックする。「仮想マシンを作成します」というウィザードが表示されるので、仮想マシン名とその保存先、メモリとネットワーク、仮想ハードディスクの設定を行う。マシン名は適当。メモリは1GBくらいは欲しいところ。最後の「仮想ハードディスクの追加」では、「既存の仮想ハードディスクを使用する」を選択し、「参照」をクリックしてWindows 7 90-Day Eval VHDの仮想ハードディスク（Win7ENT90DAYS.vhd）を指定する。

<div class="wp-caption aligncenter" style="width: 510px"><a href="http://hylom.net/img/blog/100119/020new_vm.png"><img alt="「仮想マシンの作成」で仮想マシンを作成する" src="http://hylom.net/img/blog/100119/020new_vm_s.png" title="「仮想マシンの作成」で仮想マシンを作成する" width="500" height="101" /></a><p class="wp-caption-text">「仮想マシンの作成」で仮想マシンを作成する</p></div>

<div class="wp-caption aligncenter" style="width: 510px"><a href="http://hylom.net/img/blog/100119/050sel_vhd.png"><img alt="「仮想ハードディスクの追加」で「既存のハードディスクを使用する」を選択し、Windows 7のVHDファイルを選択する" src="http://hylom.net/img/blog/100119/050sel_vhd_s.png" title="「仮想ハードディスクの追加」で「既存のハードディスクを使用する」を選択し、Windows 7のVHDファイルを選択する" width="500" height="324" /></a><p class="wp-caption-text">「仮想ハードディスクの追加」で「既存のハードディスクを使用する」を選択し、Windows 7のVHDファイルを選択する</p></div>

<p>　以上で仮想マシンの作成は完了。作成された仮想マシンをダブルクリックすると、設定等に問題がなければ英語版Windows 7 Enterprise Editionが起動する。

<p>　続いてWindows 7のセットアップを行う。始めにセットアップ画面が表示されるので、「Country or region」を「Japan」、「Time and currency」を「Japanese（Japan）」、「Keyboard layout」を「Japanese」に設定して「Next」をクリックする。なお、Virtual PCのウィンドウをクリックするとマウスポインタがVirtual PC内のWindows 7に取られてウィンドウ外に出せなくなる。ウィンドウ外にマウスポインタを出したい場合はAlt＋Tabを押せばOK。あとは通常のWindows 7のインストールと同様にセットアップを進めていく。

<div class="wp-caption aligncenter" style="width: 510px"><a href="http://hylom.net/img/blog/100119/070setup.png"><img alt="セットアップ画面で「Japan」/「Japanese」を選択する" src="http://hylom.net/img/blog/100119/070setup_s.png" title="セットアップ画面で「Japan」/「Japanese」を選択する" width="500" height="407" /></a><p class="wp-caption-text">セットアップ画面で「Japan」/「Japanese」を選択する</p></div>

<h4>統合コンポーネントのインストール</h4>
<p>　セットアップが完了したら、Windows Virtual PCの　「ツール」−「統合コンポーネントのインストール」を実行して統合コンポーネントをインストールしておく。これにより、Windows Virtual PC内外でマウスがシームレスに動くようになる。

<div class="wp-caption aligncenter" style="width: 419px"><a href="http://hylom.net/img/blog/100119/080inst_unity.png"><img alt="Virtual PCの「ツール」メニューから「統合コンポーネントのインストール」を選択する" src="http://hylom.net/img/blog/100119/080inst_unity_s.png" title="Virtual PCの「ツール」メニューから「統合コンポーネントのインストール」を選択する" width="409" height="201" /></a><p class="wp-caption-text">Virtual PCの「ツール」メニューから「統合コンポーネントのインストール」を選択する</p></div>

　「統合コンポーネントのインストール」を選択すると確認ダイアログが表示され、「続行」をクリックすると仮想PCにインストールDVDがマウントされるので、「Run setup.exe」をクリックする。ウィザードが起動するので、「Next」をクリックしてインストールを進める。完了したら再起動。

<div class="wp-caption aligncenter" style="width: 367px"><a href="http://hylom.net/img/blog/100119/100unity_setup2.png"><img alt="仮想マシンに統合コンポーネントが含まれた仮想CDがマウントされる" src="http://hylom.net/img/blog/100119/100unity_setup2_s.png" title="仮想マシンに統合コンポーネントが含まれた仮想CDがマウントされる" width="357" height="318" /></a><p class="wp-caption-text">仮想マシンに統合コンポーネントが含まれた仮想CDがマウントされる</p></div>

<h4>日本語言語ファイルのインストール</h4>
<p>　日本語言語ファイルはWindows Updateの追加コンポーネントとして用意されている。Windows Updateを起動し、「optional updates are available」をクリックすると各種言語ファイルなどが表示されるので、「Japanese Language Pack」にチェックを入れて「OK」をクリック、Windows Updateを実行する。インストールの完了後、いったん再起動。

<div class="wp-caption aligncenter" style="width: 510px"><a href="http://hylom.net/img/blog/100119/120instlangpack2.png"><img alt="Windows Updateで「optional updates are available」をクリックする" src="http://hylom.net/img/blog/100119/120instlangpack2_s.png" title="Windows Updateで「optional updates are available」をクリックする" width="500" height="376" /></a><p class="wp-caption-text">Windows Updateで「optional updates are available」をクリックする</p></div>

<div class="wp-caption aligncenter" style="width: 510px"><a href="http://hylom.net/img/blog/100119/130instlangpack.png"><img alt="「Japanese Language Pack」にチェックを入れてインストールする" src="http://hylom.net/img/blog/100119/130instlangpack_s.png" title="「Japanese Language Pack」にチェックを入れてインストールする" width="500" height="376" /></a><p class="wp-caption-text">「Japanese Language Pack」にチェックを入れてインストールする</p></div>

<p>　再起動後、コントロールパネルの「Region and Language」で「Change display language」をクリックし、「Display language」の「Choose a display language」で「日本語」を選択、「OK」をクリックする。ここでいったんログオフが要求されるので、そのままログオフする。

<div class="wp-caption aligncenter" style="width: 510px"><a href="http://hylom.net/img/blog/100119/150sel_lang.png"><img alt="「Region and Language」の「Keyboards and Languages」の「Display Language」で「日本語」を選択する" src="http://hylom.net/img/blog/100119/150sel_lang_s.png" title="「Region and Language」の「Keyboards and Languages」の「Display Language」で「日本語」を選択する" width="500" height="572" /></a><p class="wp-caption-text">「Region and Language」の「Keyboards and Languages」の「Display Language」で「日本語」を選択する</p></div>

<p>　再度ログインすると、UIが日本語化される。続いて、コントロールパネルの「地域と言語」を開き、「管理」タブで「ようこそ画面と新しいユーザーアカウント」の「設定のコピー」をクリックする。「現在のユーザー」および「ようこそ画面」、「新しいユーザーアカウント」の言語を設定するダイアログが表示されるので、ダイアログ下の「ようこそ画面とシステムアカウント」および「新しいユーザーアカウント」にチェックを入れ、「OK」をクリックする。再起動が要求されるので、そのまま再起動を実行しよう。

<div class="wp-caption aligncenter" style="width: 510px"><a href="http://hylom.net/img/blog/100119/170welcome.png"><img alt="「地域と言語」の「管理」タブで「設定のコピー」をクリックする" src="http://hylom.net/img/blog/100119/170welcome_s.png" title="「地域と言語」の「管理」タブで「設定のコピー」をクリックする" width="500" height="586" /></a><p class="wp-caption-text">「地域と言語」の「管理」タブで「設定のコピー」をクリックする</p></div>

<div class="wp-caption aligncenter" style="width: 492px"><a href="http://hylom.net/img/blog/100119/180welcome2.png"><img alt="「現在の設定のコピー先」の両方にチェックを入れる" src="http://hylom.net/img/blog/100119/180welcome2_s.png" title="「現在の設定のコピー先」の両方にチェックを入れる" width="482" height="602" /></a><p class="wp-caption-text">「現在の設定のコピー先」の両方にチェックを入れる</p></div>

<p>　以上で日本語化が完了。日本語版Windows 7と同様のインターフェイスが利用できるようになる。90日という期間限定だが、Windows 7 Enterpriseの全機能が利用できる。]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2010/01/19/windows-7-eval-vhd-japanese/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HandBrake日本語版 0.9.4（Windows版）リリース</title>
		<link>http://hylom.net/2009/12/31/handbrake094r1_release/</link>
		<comments>http://hylom.net/2009/12/31/handbrake094r1_release/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 09:36:03 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[handbrake]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1232</guid>
		<description><![CDATA[　HandBrake日本語版 0.9.4をリリースしました。詳しい情報はWikiページをどうぞ。




　新機能としてはアングル指定サポートや、プレビュー機能などがあります。いっぽう、0.9.4ではAVI形式がサポート対象外になりました。AVI形式を使いたい場合は0.9.3を使う必要があります。0.9.3もちょっとアップデートする予定なので、しばしお待ちを。

　また、プリセットのロード/セーブに失敗するという話があります。こちらも現在確認中です……。

]]></description>
			<content:encoded><![CDATA[<p>　<a href="http://sourceforge.jp/projects/handbrake-jp/simple/">HandBrake日本語版 0.9.4</a>をリリースしました。詳しい情報は<a href="http://sourceforge.jp/projects/handbrake-jp/wiki/FrontPage">Wikiページ</a>をどうぞ。

<span id="more-1232"></span>


<p>　新機能としてはアングル指定サポートや、プレビュー機能などがあります。いっぽう、0.9.4ではAVI形式がサポート対象外になりました。AVI形式を使いたい場合は0.9.3を使う必要があります。0.9.3もちょっとアップデートする予定なので、しばしお待ちを。

<p>　また、プリセットのロード/セーブに失敗するという話があります。こちらも現在確認中です……。

<div class="wp-caption aligncenter" style="width: 410px"><a href="http://hylom.net/img/blog/091231/handbrake094r1.png"><img alt="HandBrake日本語版 0.9.4" src="http://hylom.net/img/blog/091231/handbrake094r1_s.png" title="HandBrake日本語版 0.9.4" width="400" height="244" /></a><p class="wp-caption-text">HandBrake日本語版 0.9.4</p></div>]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2009/12/31/handbrake094r1_release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HandBrake 0.9.4日本語版開発中</title>
		<link>http://hylom.net/2009/12/17/handbrake-0-9-3-jp-makin/</link>
		<comments>http://hylom.net/2009/12/17/handbrake-0-9-3-jp-makin/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 06:54:01 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[handbrake]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1230</guid>
		<description><![CDATA[　先日本家からHandBrake 0.9.4がリリースされていたので、日本語化をちょこちょこと進め中。現在の状況ですが、おおむね（外観的には）日本語になっている、という感じ。あとは設定ファイル周りと、HandBrakeコマンドに渡すオプション周り、ツールチップ周りをいじればひとまず完了、という感じでしょうか。



　年内にリリースできるといいなぁ……。これが終わったら、0.9.3で発見した0.9.2の日本語化版の細かいミスを修正する予定。

　ちなみに0.9.4の新機能の1つは「プレビュー」機能。結構便利。

]]></description>
			<content:encoded><![CDATA[<p>　先日本家からHandBrake 0.9.4がリリースされていたので、日本語化をちょこちょこと進め中。現在の状況ですが、おおむね（外観的には）日本語になっている、という感じ。あとは設定ファイル周りと、HandBrakeコマンドに渡すオプション周り、ツールチップ周りをいじればひとまず完了、という感じでしょうか。</p>

<span id="more-1230"></span>

<p>　年内にリリースできるといいなぁ……。これが終わったら、0.9.3で発見した0.9.2の日本語化版の細かいミスを修正する予定。</p>

<p>　ちなみに0.9.4の新機能の1つは「プレビュー」機能。結構便利。</p>

<div class="wp-caption aligncenter" style="width: 410px"><img alt="HandBrake 0.9.4の新機能、「プレビュー」" src="http://hylom.net/img/blog/091217/handbrake_preview.png" title="HandBrake 0.9.4の新機能、「プレビュー」" width="400" height="331" /><p class="wp-caption-text">HandBrake 0.9.4の新機能、「プレビュー」</p></div>]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2009/12/17/handbrake-0-9-3-jp-makin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pyblosxom用のブログ記事をWordPressにインポートする</title>
		<link>http://hylom.net/2009/12/11/migrate_pyblosxom_to_wordpress/</link>
		<comments>http://hylom.net/2009/12/11/migrate_pyblosxom_to_wordpress/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 15:54:45 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[develop]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1225</guid>
		<description><![CDATA[<p>　以前このブログはPythonで書かれたブログシステム「<a href="http://pyblosxom.sourceforge.net/">pyblosxom</a>」を使って運用していたんだけど、機能拡張が面倒臭かった（＆色々細かいところが気にくわなかった）ので先日WordPressに移行しました。そこで面倒だったのが記事の移行。WordPressではMovableTypeとかBloggerとかからの移行ツールは充実しているんだけど、pyblosxomからの移行ツールは公式には用意されていません。また、参考情報としてWordPressの公式サイトで紹介されていた<a href="http://blog.unto.net/meta/migrating-from-blosxom-to-wordpress/">blosxomからの移行スクリプト</a>はURLやタグ情報を移行してくれなかったため、結局自前で変換スクリプトを用意することに。</p>]]></description>
			<content:encoded><![CDATA[<p>　以前このブログはPythonで書かれたブログシステム「<a href="http://pyblosxom.sourceforge.net/">pyblosxom</a>」を使って運用していたんだけど、機能拡張が面倒臭かった（＆色々細かいところが気にくわなかった）ので先日WordPressに移行しました。そこで面倒だったのが記事の移行。WordPressではMovableTypeとかBloggerとかからの移行ツールは充実しているんだけど、pyblosxomからの移行ツールは公式には用意されていません。また、参考情報としてWordPressの公式サイトで紹介されていた<a href="http://blog.unto.net/meta/migrating-from-blosxom-to-wordpress/">blosxomからの移行スクリプト</a>はURLやタグ情報を移行してくれなかったため、結局自前で変換スクリプトを用意することに。</p>

<p>　幸い、WordPressのインポート/エクスポートで使われるWXL（WordPress XML）形式のファイルを簡単に生成できるモジュールをGoogle様が提供しているのを発見、そいつを使ってお気楽に作成できました。ということでここでご紹介。</p>

<p>　スクリプト本体は<a href="http://github.com/hylom/pyblosxom2wp">github</a>で公開しているので必要な方は適宜どうぞ。「pyblosxom2wp.py」が本体です。このスクリプト内の頭で宣言している変数「title」にブログのタイトル、「link」にブログのリンクURL、「baseurl」をにBase URLが入るように書き換えて、次のように実行すると標準出力経由でインポート用XMLファイルが出力されます。</p>
<pre>./pyblosxom2wp.py ＜pyblosxomの記事ディレクトリ＞ &gt; output.xml</pre>

<p>あとはそいつをWordPressのインポート機能で読みこめばOK、のはず。これで、カテゴリやタグ、URLについてもできるだけ保持する形でインポートが可能です。</p>]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2009/12/11/migrate_pyblosxom_to_wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TortoiseGit日本語言語ファイル1.2.1.0-r1リリース</title>
		<link>http://hylom.net/2009/12/03/tortoisegit_jplang_1210r1_release/</link>
		<comments>http://hylom.net/2009/12/03/tortoisegit_jplang_1210r1_release/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 04:41:57 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[develop]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1222</guid>
		<description><![CDATA[<p>　自分が日本語化ファイルを作っているバージョン管理ツール、TortoiseGitの日本語言語ファイルをアップデートしました（<a href="http://sourceforge.jp/forum/forum.php?forum_id=21250">プロジェクトニュース</a>）。TortoiseGit 1.2.1.0向けの1st releaseとなります。ダウンロードは<a href="http://sourceforge.jp/projects/tortoisegit/">SourceForge.JPのプロジェクトページ</a>からどうぞ。</p>]]></description>
			<content:encoded><![CDATA[<p>　自分が日本語化ファイルを作っているバージョン管理ツール、TortoiseGitの日本語言語ファイルをアップデートしました（<a href="http://sourceforge.jp/forum/forum.php?forum_id=21250">プロジェクトニュース</a>）。TortoiseGit 1.2.1.0向けの1st releaseとなります。ダウンロードは<a href="http://sourceforge.jp/projects/tortoisegit/">SourceForge.JPのプロジェクトページ</a>からどうぞ。</p>

<div class="wp-caption aligncenter" style="width: 410px"><img alt="TortoiseGit 1.2.1.0" src="http://hylom.net/img/blog/091203/tgit_s.png" title="TortoiseGit 1.2.1.0" width="400" height="404" /><p class="wp-caption-text">TortoiseGit 1.2.1.0</p></div>

<p>　開発環境をWindows VistaからWindows 7に変更して、Visual Studioも再インストールして関連ツールを入れ替えて……とやっていたら色々とハマってしまい、リリースが遅れてしまいました。すいません＞ユーザーの皆様。</p>

<p>　あと、Windows 7環境では（自分が試した限り）ダイアログが日本語化されないようです。TortoiseGitはTortoiseSVNをベースに作られているのですが、<a href="http://w7.vector.jp/softrev/detail.php?s_no=67165">Windows 7 アプリケーション動作報告リスト</a>でTortoiseSVNの日本語化もおかしい、という話があがっているので、日本語ファイル側の問題ではない模様。本体に手を入れる必要があるっぽいので、対応にはちょっと時間がかかりそうです。</p>]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2009/12/03/tortoisegit_jplang_1210r1_release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gitメモ：diffとやり直し</title>
		<link>http://hylom.net/2009/12/02/git_diff_rese/</link>
		<comments>http://hylom.net/2009/12/02/git_diff_rese/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 06:33:52 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[develop]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1217</guid>
		<description><![CDATA[　最近久しぶりにgitを触って色々と忘れていたので再度メモ。]]></description>
			<content:encoded><![CDATA[<p>　最近久しぶりにgitを触って色々と忘れていたので再度メモ。</p>

<h4>mergeを取り消す</h4>
<p>　mergeを実行したらconflictが大量に出てしまったので取り消したい、という場合、下記を実行。</p>

<pre class="command">
$ git reset --hard ORIG_HEAD
</pre>

<h4>conflictを解決する</h4>
<p>　gitにはmergeを実行した場合にconflictを解決するコマンド「git mergetool」がある。conflictしているファイルに対して、順番にdiffツールを実行して編集を促すもの。しかし、Windows上のMSysGit環境で実行したら見事にvimのdiffが実行されたので個人的にはデフォルトでは使えない認定（自分はvimはあまり使えないので）。</p>

<pre class="command">
$ git mergetool
</pre>

<p>　.gitconfigの「merge」および「mergetool」項目で起動するツールを設定できるそうなので、今度はEmacsに設定してテストしてみようかな。</p>

<h4>diffを使う</h4>
<p>　<a href="http://www.kernel.org/pub/software/scm/git/docs/git-diff.html">マニュアル</a>に書いてあるけど、「git diff」コマンドの書式は下記のとおり。</p>

<pre>
git diff <比較元commit> <比較先commit> [<対象ファイルパス>]
</pre>

<p>　ここで、比較元・比較先commitはハッシュだけでなく、「HEAD」（最新のコミット）や「HEAD^」（最新の1つ前のコミット）、「HEAD^^」（最新の2つ前のコミット）、「HEAD~4」（最新の4つ前のコミット）などのほか、tagも利用可能。</p>

<p>　例えば最新のコミットと、その1つ前のコミットでdiffを取るには次のようにする。</p>

<pre class="command">
$ git diff HEAD^ HEAD hogehoge.py
</pre>]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2009/12/02/git_diff_rese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python_sqlite3_commit</title>
		<link>http://hylom.net/2009/11/26/python_sqlite3_commit/</link>
		<comments>http://hylom.net/2009/11/26/python_sqlite3_commit/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 17:55:20 +0000</pubDate>
		<dc:creator>hylom</dc:creator>
				<category><![CDATA[develop]]></category>

		<guid isPermaLink="false">http://hylom.net/?p=1215</guid>
		<description><![CDATA[<p>　Pythonにはsqlite3という、SQLiteのインターフェイスモジュールがあるんだけど、Python 2.5の日本語ドキュメントのとおりやろうとすると微妙にハマる、という話。</p>]]></description>
			<content:encoded><![CDATA[<p>　Pythonにはsqlite3という、SQLiteのインターフェイスモジュールがあるんだけど、Python 2.5の日本語ドキュメントのとおりやろうとすると微妙にハマる、という話。</p>

<p>　<a href="http://www.python.jp/doc/release/lib/module-sqlite3.html">日本語ドキュメントのsqlite3ページ</a>には、以下のようなコード例が載ってます。</p>

<pre>c = conn.cursor()

# Create table
c.execute('''create table stocks
(date text, trans text, symbol text,
 qty real, price real)''')

# Insert a row of data
c.execute("""insert into stocks
          values ('2006-01-05','BUY','RHAT',100,35.14)""")</pre>

<p>　ところが、これだと実際にはinsertがデータベースに反映されない。実はinsertなどの操作を行った最後に、sqlite3.Connectionオブジェクトのcommit()メソッドを行わないとコミットが行われず、変更が実行されない模様。</p>

<p>　で、実は<a href="http://www.python.org/doc/2.5.2/lib/module-sqlite3.html">Python 2.5.2ドキュメントのsqlite3ページ</a>には、このあとに以下のようなコードが追加されております。</p>

<pre># Save (commit) the changes
conn.commit()

# We can also close the cursor if we are done with it
c.close()</pre>

<p>　にも関わらず、「Connection Object」のページにはcommit()に関する記述がないのでさらに混乱は深まる……。ちなみに、<a href="http://docs.python.org/library/sqlite3.html#connection-objects">Python 2.6.4のドキュメント</a>ではちゃんとcommit()メソッドについて記述されており、commit()を実行しないとデータベースへの変更が行われないよ、またrollback()メソッドを実行すれば前回のcommit()までの内容を取り消せるよ、との旨が書かれてます。</p>

<p>　教訓：日本語ドキュメントを当てにせず、ちゃんと原文を読め。</p>]]></content:encoded>
			<wfw:commentRss>http://hylom.net/2009/11/26/python_sqlite3_commit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
