Windows VistaにTortoiseSVNをインストールする際の注意点

前回の投稿に引き続き、今回もWindows Vista上での開発環境構築について書きたいと思います。
今回はSubversionを利用するためのクライアント、TortoiseSVNのインストールについてです。

インストール自体は特に問題ないのですが、以下では2008/05/15時点での最新版TortoiseSVN1.4.8をWindows Vistaで利用するにあたって注意すべき点についてまとめます。

注意点

公式サイトのFAQに、TortoiseSVNWindows Vistaで利用する場合の問題点について書かれた以下のようなページがあります。

ここに書かれている問題のいくつかは、最新版では解決されているようですが、解決されていないものもいくつかあるようなのでそれらを簡単に確認します。

Windows エクスプローラへのカラムの追加が出来ない

Vistaの仕様上、以下の図の赤線で囲まれた部分のような、SVNに関連するカラムを追加することが出来なくなったとのこと。
正直これについては、今までこんな機能があることすら知らなかったので個人的には問題ないです。

コンテキストメニューの表示がおかしくなる

自分自身が遭遇したことがないので、どういう風におかしくなるのかが把握できていないのですがコンテキストメニューの表示がうまくいかない場合があるとのこと。
とりあえずの回避方法としては、TortoiseSVN設定ダイアログ内の「Look and Feel」項目で "Enable accelerators on the top level menu" にチェックを入れればいいそうです。
ちなみにTortoiseSVNが日本語化されている場合は「概観」項目の "トップレベルメニューのショートカットキーを有効にする" にチェックを入れることになります。
この不具合については、nightly buildでは修正されているとのことなので、正式版でも近いうちに修正されそうです。

・ダイアログのリサイズ時の問題

ダイアログのリサイズ時に表示がおかしくなることがあるようです。こうなった場合の解決策としては、ダイアログを一度最小化して、元にもどせばよいとのこと。
これについても、nightly buildでは修正されているそうです。

リポジトリアクセスが遅い

Windows VistaTCP-Autotuningに関する問題により、リポジトリアクセスが非常に遅くなり、場合によってはタイムアウトしてしまうことがあるようです。
この場合を解決するためには、コマンドプロンプトで以下のコマンドを入力すればよいとのこと。

 netsh interface tcp set global autotuninglevel=disabled

このコマンドの詳細については正直よく把握していないのですが、以下のページに詳しく書かれているそうです。


以上の4項目がVistaでTortoiseSVN1.4.8を利用する際の注意点です。
これら以外に関しては問題なく動作するようなので、Vista上でも特に困ることはないのではないかと思います。

Windows VistaにXAMPPをインストール

最近Windows Vista PCを購入しました。まだまだ慣れない点が多いですが、ボチボチ環境を構築していっています。
ということで、以下はWindows VistaにXAMPPを導入する際のメモです。

ダウンロード&インストール

まずは公式ページからインストーラをダウンロード
http://www.apachefriends.org/jp/xampp-windows.html

ここで、公式ページより

Windows Vistaをご利用の方へ: Windows VistaではC:\Programfilesのフォルダのパーミッションが限定されております。
その為、通常のインストールではインストールが成功しない場合があります。
XAMMP用のフォルダをCドライブの直下か、C:\userの下にxamppというディレクトリを作成してご利用いただくことをお勧めします。

とのことなので、今回はD:\xamppにインストールしました。
インストールが完了したら、apacheMySQLを起動。
(外部からのアクセス等の危険性に備えるという意味では、この後セキュリティの設定が完了するまではとりあえずインターネットから切断しておくと、より安全だと思います)

確認

http://localhostにアクセスして以下のXAMPP画面が表示されればインストールに成功しています。

php.iniファイルの設定

PHPで日本語を扱うための文字コードの設定を行います。
これについては以下のページが分かり易いです。
http://power.scianto.net/php/xampp/id69.php

セキュリティ設定

Apacheに外部からアクセスされないよう、セキュリティ関連の設定を行います。
以下の内容のファイルをメモ帳で作成し、「.htaccess」というファイル名でD:\xampp\htdocsに保存。

Order deny,allow
Deny from All
Allow from localhost 127.0.0.1

次に、http://localhostにアクセスし、左のメニューから「セキュリティ」を選択。
画面中央部のhttp://localhost/security/xamppsecurity.phpへのリンクをクリックし、その先の画面の「MYSQL 項目: "ROOT" パスワード」という部分でMySQLの"ROOT"パスワードの設定をする。

さらに、その下の「XAMPPのディレクトリ制御 (.htaccess)」という部分で、http://localhost/xampp/にパスワードを設定する。
ここで設定を行うと、D:\xampp\htdocs\xampp以下に「.htaccess」ファイルが作成され、
http://localhost/xampp/にアクセスする際にパスワードを求められるようになります。

最終的なXAMPP セキュリティの状態は以下のようになります。


FTPサーバとメールサーバの項目が「不明」となっていますが、これらは利用しないので放置でOK。
またsafe_modeの設定は「要注意」となっていますが、開発を行うだけであればoffのままで問題ないようなので、これでOKです。

以上でXAMPPの基本的な設定は終了です。

参考ページ

   http://www.apachefriends.org/jp/xampp-windows.html

  • phpspot内のXampp紹介記事

   http://phpspot.net/php/pgXAMPP.html

正式版リリースFlex Builder3.0, Flex SDK 3.0, AIR 1.0

Flex Builder3.0, Flex SDK 3.0, AIR 1.0の正式版がついにリリース。

Flex Builder 3.0
http://www.adobe.com/products/flex/

Flex SDK 3.0
http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK

AIR 1.0
http://www.adobe.com/products/air/

The Flex SDK is one of several open-source projects in a Subversion repository hosted by Adobe.

ということで、Flex SDKソースコードも公開されている。

PythonのリストとJavaのリストの比較

新しいプログラミング言語を勉強するにあたって、リストやマップなどのいわゆるコレクションの使い方について把握することは重要だ。しかし、コレクションには追加、削除、挿入などのメソッドがいくつかあり、各言語でメソッド名や使い方などが異なっているため、それぞれの言語についてこれらのメソッドを覚えるのは意外と大変。ということで、Pythonのリストに関するメソッドを少しでも覚え易くするため、PythonのリストとJavaArrayListとを比較し、基本的な機能についてまとめてみた。Javaのリストは使ったことあるけどPythonのリストは分からない、という人のためになれば幸い。

以下では、リストをlistまたはx、リストの要素をe、インデックスを指定する変数をiとしている。

リストの初期化

  • 空のリストを作る場合
list = [] ##python
List list = new ArrayList(); //java
  • 任意の要素で初期化されたリストを作る場合

Pythonでは内包表記を使って、任意の要素で初期化されたリストを作成出来る。
リストの内包表記については以前の記事参照。ちなみにJavaではこのような機能は用意されていない。

要素の有無の判定

e in list ##python
list.contains(e); //java

リストの長さを取得

len(list) ##python
list.size(); //java

要素の置換

list[i] = e ##python
list.set(i,e); //java

要素の挿入

  • リストのi番目に要素eを挿入
list.insert(i, e) ##python
list.add(i, e); //java
  • 要素の末尾挿入
list.append(e) ##python
list.add(e); //java

要素の削除

  • リストに要素eがあれば、その要素をリストから1つ削除
list.remove(e) ##python 
list.remove(Object o); //java
  • リストのi番目の要素を削除
del list[i] ##python
list.remove(int i); //java

リストの連結

list.extend(x) ##python
または
list + x
list.addAll(x); //java

要素の検索(s[i]==x となる 最小の i を返す)

list.index(e) ##python
list.indexOf(e); //java

Pythonでのリストの内包表記について

概要

Pythonではリストの内包表記 (list comprehension) が可能である。
この表記方法を使うとリストの生成をfilter()、map() を使わずに簡潔に行う事が出来る。
普段、主にCやJavaを使っている自分にとっては見慣れない表記法だったので、最初は戸惑ったが慣れれば難しくない。
リストの内包表記の便利さを知るために、とりあえずfilter()、map() についてそれぞれ簡単に説明する。

filter(function, sequence)

sequenceの中の要素から、functionの返り値が真となるような要素のみからなるsequenceを返す。
以下の例では、filter()を使うことにより、2の倍数のみからなるリストを取得している。

>>> def f(x): return x%2 == 0
>>> filter(f,range(1,11))
[2, 4, 6, 8, 10]

map(function, sequence)

sequenceの各要素に対してfunctionを呼び出し、その返り値からなるリストを返す。
以下の例では、引数として渡したリストの各要素を3乗したリストを取得している。

>>> def cube(x): return x*x*x
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

リストの内包表記

リストの内包表記を使うと上の2つの例を以下のように記述することが出来る。

>>> num = range(1,11)
>>> [x for x in num if x % 2 == 0] ##これが内包表記
[2, 4, 6, 8, 10]

>>> [x*x*x for x in num] ##これが内包表記
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

filter()やmap()の際にはf(x),cube(x)のような単純な関数をいちいち定義する必要があったが、リストの内包表記ではその必要がない。
表記内で関数を呼ぶことも出来るので、以下の様な記述も可能。

>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']

Pythonでコマンドライン引数を処理

コマンドラインオプションのパーザgetoptを使う。

from getopt import getopt, GetoptError
    try:
        opts, args = getopt(argv[1:], 'ab:', ['help', 'size='])
    except GetoptError, e:
        # ヘルプメッセージを出力して終了
        usage()
        sys.exit(2)

getoptの引数

getoptの第1引数は構文解析の対象になる引数リスト。基本的にsys.arg[1:] を渡す。
第2引数は1文字のオプション名。オプションが引数をとる場合(-b 10 や -f data.txtなど)はオプション指定文字の後に「:」をつける。
上の例では、オプションbのみ値をとることが出来る。aとbの両方が値をとるようにするときは'a:b:'と指定すればよい。
第3引数は複数文字のオプション名(省略可)。オプションが引数をとる場合はオプション文字列の後に「=」をつける。

getoptの返り値

2値のタプルを返す。
1つ目の要素は (オプション, それに対応する引数) という形式のタプルのリスト。
2つ目の要素は コマンドライン引数からオプションとそれに対応する引数を除去したもののリスト。

サンプルコード

Python ライブラリリファレンス getoptより

>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'
>>> args = s.split()
>>> args
['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'x', ['condition=', 'output-file=', 'testing'])
>>> optlist
[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x','')]
>>> args
['a1', 'a2']

Google Scholar ブックマークレット

「ブラウザ上での選択文字列」or「クリップボードの文字列」をGoogle Scholarで検索するブックマークレット(ダブルクォーテーションで囲って検索)。
Googleツールバーとかで、もっとちゃんとしたものが提供されているかも。
Firefoxではクリップボードの文字列を取得することが出来ないようなので、クリップボード版はIEのみ。

IE

・選択文字列をGoogle Scholarで検索
javascript:void(window.open('http://www.google.com/scholar?hl=ja&safe=off&lr=&q='+encodeURIComponent('\"')+encodeURIComponent(document.selection.createRange().text)+encodeURIComponent('\"')))
・クリップボードの文字列をGoogle Scholarで検索
javascript:void(window.open('http://www.google.com/scholar?hl=ja&safe=off&lr=&q='+encodeURIComponent('\"')+encodeURIComponent(clipboardData.getData("Text"))+encodeURIComponent('\"')))

Firefox

・選択文字列をGoogle Scholarで検索
javascript:void(window.open('http://www.google.com/scholar?hl=ja&safe=off&lr=&q='+encodeURIComponent('\"')+encodeURIComponent(window.getSelection().getRangeAt(0))+encodeURIComponent('\"')))

javascriptは殆ど使ったことがないのでおかしなコードになっているかもしれませんが、一応普通に使えます。