「Python」を含む日記 RSS

はてなキーワード: Pythonとは

2008-10-11

私のプログラム

初めは小学生の頃か。

実物のスペースインベーダー記憶はない。

しかし、それを皮切りにアーケードゲームのみならず、ゲームウォッチ、ケームセンター嵐などを経て、ファミコンが登場する「ゲーム」の時代だった。

「ゲーム」コンピューターゲーム意味になった時代だった。小学生も「コンピューター」にワクワクした。

21世紀コンピューターにより人工知能ができる。そんな時代だった。

でも、アルファベットを知らない小学生BASICは難しかった。ぴゅう太がせいぜいだった。

中学生学校PC-9801があった。後のパソコンである。

PRINT」で文字を表示する。「GOTO」で行き先を変える。それは分かった。でも何をすればよいか分からなかった。

だから「ベーマガ」で16進数を打った。でも動かなかった。何度も調べ、直し、試した。デバッグした。

してようやくゲームが動いた。ゲームはつまらなかった。

でも動いた。自分の入れた文字で数字でコンピュータが動いた。自分で動かした。動かせた。

BASICで線を引きマシン語で文字を動かした。

高専に進んだ。Turbo Pascalコラムスもどきを作った。

初めてフルスクラッチで書いた。配列も使った。

小学生のころから6年が過ぎていた。

Turbo Cも使った。IDEで使うそれは、インタプリタのノリだった。

FM-Rレイトレースもした。一晩かけて、エラーが起きていた。

でも、構造プログラミングを学んだ。ポインタも学んだ。マシン語の知識が役立った。

Solarisも使った。EmacsやXも使った。オブジェクト指向も知らずC++にも触れた。

GC構造体を代入して使い回し、Xサーバを落した。

家のノートFreeBSDを入れた。rootになった。

awksed正規表現を学んだ。そしてperlに出会った。

コラムスもどきを作ってから6年が過ぎていた。

テレホーダイにした。Mewを使った。チャットをした。

perlで掲示版の書き込みをチェックし、madokaで遊んだ。CGIを書いたりした。

脆弱性を見つけた。作者にメールした。ドキドキした。

perlと出会ってから6年が過ぎていた。

オープンソースプロジェクトに参加した。

はてなに出会った。JavaScriptに出会った。

BookmarkletgreasemonkeyAjaxオブジェクトだらけだった。

初めはゲームだった。でも最初だけだった。

ハードを叩き、ライブラリを叩いていた。

サーバを叩き、ブラウザを叩いてきた。

気が付いたら24年が経っている。

今、pythonで書いている。

ようやく、言語の違いには慣れてきた。でも、まだLISPを使った事はない。

道はまだまだある。未知の世界につながっている。

作りたい物が本当は何かは分からない。作れる物が本当は何かは分からない。

でも、何かがあるような気はする。だからプログラムしてみる。

どんなふうに動くのかは分かってない気がするけれど、分かっている事もある。

今も「コンピューター」にワクワクしている。

それが今の私のstatusだ。

http://anond.hatelabo.jp/20081011173016

2008-10-10

女子クラスで理解するプログラミング言語

こんなところかな。異論は認める。つか、異論をくれ。

異論ありがとう


あ、元ネタ忘れてた:http://anond.hatelabo.jp/20080729035820

2008-10-08

プログラム言語入門サイトをぐぐってみる

Web 系の言語(って何?)に対して、 Google で 「○○ 入門」で検索してみる

Perl

Perl基礎入門 (www.kent-web.com)
"このコーナは、初心者向けのPerl入門ページであり、また、自分自身の覚え書きという位置づけで作成していきます。 "
Perl入門 (www.perlplus.jp)
"プログラミング言語としてPerlを使った方法を学習される型を対象として、 Perlによるプログラム記述方法を確認していきます"
とほほのperl入門 (www.tohoho-web.com)
"perlとは / 実行方法 / 基礎知識 / 定数・変数・値 "

21世紀にもなってまだKENTかよ、という気は若干しなくもないですが、入門レベルだけで終わる需要が多いことも考えるとこんなもんだと思います。

PHP

PHP入門 (www.scollabo.com)
"この章では、PHPの作成を支援するために解説しています。"
初心者用PHP入門 (www.standpower.com)
"初心者PHP入門ではWindowsでの環境構築方法、Apache2のインストールPHPインストールPHPの文法、関数演算子等の基礎知識の解説をしています。"
PHP入門 (www.phpbook.jp)
"これからPHPプログラムを開始される方を対象として、PHPの基本的な構文の解説とプログラム記述方法を学習していきます。 "

書籍サイトも全部糞、公式のマニュアルのみ正確正当」というPHPです(そう思うなら翻訳しっかり訳してくれ)。公式マニュアルは手元に置いておきましょう。

Python

Python 入門 (www.f7.ems.okayama-u.ac.jp)
"Python の紹介から C とのインターフェースまで、順を追って解説。"
Python入門 (www.pythonweb.jp)
"Pythonを使ってプログラミング学習を開始される方を対象として、Pythonを使ったプログラム記述方法や実行までをサンプルを使いながら順に学習していきます"
python入門 (word.starword.org)
"私がこう理解したというレベルお話です。用語等不適切な点があるかもしれません。"

日本語ドキュメントのいいのが無いのだけが欠点であるところのPythonさんです。まあこんなもんだと思います。

Ruby

さて、順番的にオチです。Rubyです。

Ruby入門 (www.lab.ime.cmc.osaka-u.ac.jp)
"阪大情報教育システムには、Ruby で作られたツールがたくさん用意されています。
これらのツールの仕組みを理解し、改良していくためにも、Ruby の使い方をマスターしましょう。"

まず、講義用の1枚ページが引っかかりました。このサイト自体はなんにも悪くありませんが、このサイトが国内で1位になるのってどうなのよ。どうなのよう。

Ruby入門 (www.rubylife.jp)
"これからRubyプログラムを開始される方を対象として、Rubyの基本的な構文の解説とプログラム記述方法を学習していきます"

次に、PerlでもPHPでもPythonでもあった、同一団体が同一フォーマットで各言語の検索結果上位に食い込ませてるページがヒットです。いや内容が妥当なら問題ないですが。

Ruby入門 (www.jaist.ac.jp)
"最後に更新した日からはや5年の月日がたった。Rubyバージョンも当時は1.4くらいだった気がする。"

で、3番目は大学に在籍さんのページです。ぬう。



ネタ元:http://pc11.2ch.net/test/read.cgi/tech/1170047838/61



追記

ブクマで「プログラミング」関連のタグをつけてる人には実は内容伝わってないんじゃいかと危惧

やっぱ最後に持ってくるんじゃなく2行目くらいにすぱっと結論書いて判断仰ぐべきですかそうですか

2008-09-23

http://anond.hatelabo.jp/20080923042914

普段C++使ってるけど、いい加減スクリプト言語の一つも憶えないといかんということでPythonやることにした俺が来たよ。

言語同士の優位性の争いとかマジどうでもいいね。言語なんて道具に過ぎないし。他にもっと大事なことあるんじゃないの?と思うね。

まぁクソつまらん業務系システムとか作らざるを得なくて、言語ハァハァするくらいしか心の拠り所が無いとかかもしれないけど。

Perl vs Ruby

PerlRuby信者の特徴…(中略)…Perlを選択する時点で、RubyよりもPerlを使いたいという前提があることを考えて欲しい。…(中略)…当然 too many ways だろ。その too many ways の中から more better なものを選ぶのがエンジニアとしての技量なんじゃねーの?あと the best way なんてものは存在しないよ。…(中略)… ruby 使わない人間から見ると異常。…(中略)…そうでもない。…(中略)…省略しすぎ…(中略)…JK…(中略)…越えられない壁…(中略)…尊敬します。…(中略)…geek…(中略)…言語がどうこうなんて小さいことじゃなくて、もっと大きな視点を持つべきなんじゃないですか?」

Ruby 「めんどくせえ……………」

Python 「めんどくせえ……………」

M$ 「マジどうでもいい……………」

こういうのは直球で行った方が分かり易いよね!

えーマジ Perl!?Perl が許されるのは江戸幕府までだよねー Perl でござるって感じぃ?

References

正規表現の機能の覚書き

はじめに

「はじめての正規表現」ホッテントリ入りしていますが、

導入としては、何に使うのかがわかりやすくて良いのではないかと思います。

あれを見て、基本機能をまとめてみたくなったので、正規表現の基本的な機能について書いてみます。

正規表現が初めてという人は「はじめての正規表現」を先に見たほうがいいと思います。)

例では「検索」か「置換」をするものとして話を進めていきます。

「はじめての正規表現」が実例を中心にしたのに対して、こちらは機能を中心に書きます)

正規表現は、プログラミング言語やその他のツールなど、それぞれで微妙な違い(方言)があるので、その点には注意が必要です。

(表記法が違ったり、ここに紹介する機能がサポートされていなかったり、逆に紹介していない機能をサポートしていたりする場合があります)

メタ文字とリテラル文字

正規表現には、メタ文字とリテラル文字というものがあります。

メタ文字とは機能を持つ文字で、『.』『*』『*?』といったものが当てはまります。

リテラル文字は「文字それ自体」と解釈される文字で、『 』『a』『<』といったものです。

アルファベットや数字はリテラル文字なので、

「検索する文字列:『egg』 置換する文字列:『chicken』」

などとすれば、正規表現を使わない置換と同じ効果になります。

なお、検索して検索文字列が当てはまることを「マッチする」と言います。

メタ文字に使われている文字を検索したい場合は、直前に『\』を置きます。(これを「エスケープ」と呼びます。)

.*?^$()[]{}』などがメタ文字です。

$100』を検索したければ、『\$100』とすればいいということになります。

(『\』は環境によって、半角の『¥』『\』のどちらかになります。)

言語、ツール、モードなどによっては『@/#』もエスケープが必要です。

また、『\』自体は常にエスケープが必要です。

繰り返しについて

メタ文字意味
?直前の文字を0回または1回繰り返す
*直前の文字を0回以上繰り返す
+直前の文字を1回以上繰り返す
{n}直前の文字をn回繰り返す
{n,}直前の文字をn回以上繰り返す
{n,m}直前の文字をn〜m回繰り返す

これらのメタ文字は「量指定子」といって、直前の文字の繰り返しを意味します。

*』は「任意の文字を0回以上繰り返す」とありますが、

「0回以上繰り返す」とは、「全く何もなくてもいいし、いくらあってもいい」という意味です。

よって、『?』は「あってもなくてもいい」、『+』は「1つ以上あればいい」と解釈できます。

colou?r』は『u』があってもなくてもいいので「colorかcolour」ということになります。

{n}』は、たとえば『-{15}』なら、「ハイフン(-)が15個続くもの」となります。

-{10,}』なら「ハイフン(-)が少なくともは10個続くもの(多いのはいくらでも)」、

-{10,15}』なら「ハイフン(-)が10〜15個続くもの」となります。

また、複数の文字を繰り返したい場合は括弧で囲みます。

(Gang){2}Dance』は『GangGangDance』と同じ意味になります。

欲張りと非欲張り

メタ文字意味
?直前の文字を0回または1回繰り返す(欲張り)
*直前の文字を0回以上繰り返す(欲張り)
+直前の文字を1回以上繰り返す(欲張り)
??直前の文字を0回または1回繰り返す(非欲張り)
*?直前の文字を0回以上繰り返す(非欲張り)
+?直前の文字を1回以上繰り返す(非欲張り)

「欲張り」とは、「なるべく多くの文字に適用しようとする」、

「非欲張り」とは、「なるべく少ない文字に適用しようとする」という意味です。

対象文字列が『aaa bbb ccc』だとします。

すると、検索する文字列が『a+』なら『aaa bbb ccc』、

検索する文字列が『a+?』なら『aaa bbb ccc』が置換対象となります。

(「すべてを検索/置換」する場合は当てはまりません)

「『a』を1回以上繰り返す」ということは、『a』でも『aa』でも『aaa』でもマッチすることになりますが、

「欲張り」かそうでないかで実際のマッチは変わってくるわけです。

文字クラス

文字クラス意味
[abc]a、b、cのいずれか
[a-z]a〜zのいずれか
[^a]a以外の文字(改行文字を含めaを除いた全て)
[^a-z]a〜z以外の文字(改行文字を含めa〜zを除いた全て)

文字クラスは『a』や『<』などの代わりに文字の種類を指定するものです。

a〜eのどれかの1文字という指定をしたい場合に『[abcde]』や『[a-e]』といった指定ができます。

また、文字クラス内の最初に『^』をつけて『[^abc]』などとすれば、

「a、b、c以外の何の文字でもいい」とすることができます。

間違いやすいのが「そこにaもbもcも存在しなければいい」という意味ではないということです。

文字クラスは「なんらかの1文字の身代わり」なので、それは何か1文字を表しています。

-』は範囲を表すのに使用します。そのため、『[;-%]』で「; - %のどれか」を表現することはできません。

-』を含める場合は必ず最初に持ってきます。すると『[-;%]』という風になります。

「; - %以外の文字」としたいならば『[^-;%]』とします。

[』や『]』、『\』を文字クラスに含めたい場合は直前に『\』を置いてエスケープします。

「『[』または『]』」であれば『[\[\]]』となります。

^』やその他の記号は先頭に置かなければいいので、エスケープの必要はありません。

.』は「改行以外のすべての文字」を表しています。

改行は『\n』で表されるため、『.』は『[^\n]』と等価です。

(ただし、正規表現モードによっては「改行も含めすべての文字」を表す場合もあります)

文字クラスにはいくつかの略記法があります。

文字クラス意味同等の表記
\w記号や空白ではない文字すべて[a-zA-Z0-9_]
\W記号や空白ではない文字以外[^a-zA-Z0-9_]
\d数字[0-9]
\D数字以外[^0-9]
\sタブや改行など、空白類とされる文字[ \t\n\r\f\v]
\Sタブや改行など、空白類とされる文字以外[^ \t\n\r\f\v]

(*間違って『\s』の同等の表記にも『^』がついていたのを修正しました)

(『\t』はタブ、『\v』は垂直タブ、『\r』はキャリッジリターン(CR、改行の一種)、『\f』は改ページ)

これらは『[a-fA-F\d]』のようにすることで、文字クラスブラケット角括弧)内に含めることができます。

「同等の表記」と書きましたが、文字をユニコードして扱うツールの場合は、上記が同等の表記にはならず、

たとえば『\d』であれば漢数字が含まれてしまったりするので注意が必要です。

選択

(A|B)』は「AまたはB」という意味です。(これを「選択」と呼びます)

(A|B|C)』なら「A、B、Cのどれか」という意味になります。

(gray|grey)』は『gr[ae]y』とほぼ等価となります。

[ae]』は「1文字のaまたはb」という意味になるので結果的に、ほぼ同じ効果が得られるわけです。

(ただし、これはgrayとgreyの違いが1文字だけだったためで、そうでない場合はこうはなりません)

気をつけなければならないのは、その順番です。

(Java|JavaScript)』で検索すると、対象文字列内に存在する『Java』と『JavaScript』すべてマッチするように思えますが、

JavaScript』は選択肢の前(左)のほうにある『Java』が当てはまってしまうため、

Script』部分にはマッチせず、『JavaScript』というマッチになってしまいます。

選択では左側が優先されるので、『(JavaScript|Java)』とすることでこの問題は防げます。

言語、ツールによっては、この問題が起こらない=順番関係なく長いほうを適用しようとするものもあります)

アンカー

メタ文字意味
^行頭
$行末
\b単語境界
\B単語境界以外

リテラル文字や文字クラスが「文字自体」にマッチするのと違い、アンカーは「位置」にマッチします。

検索する文字列が『^』、置換する文字列が『>』なら、「行頭に『>』を挿入する」という意味になります。

単語境界とは、「単語を構成する文字=『\w』に相当する文字」と「単語を構成しない文字=『\W』に相当する文字」の間の位置のことです。

regular expression.』なら『^regular^ ^expression^.』の4ヶ所に当てはまります。

\b.*?\b』とすれば単語すべてにマッチさせることができます。

しかし、「単語構成文字」が基準なので、『JavaScript』は1単語でも、『L?K?O』は1単語とは見なされません。

アンカーは位置にマッチするので、文字クラス内に含めることはできません。

^』や『$』を文字クラスに含めても、その文字自体という意味になります。

つまり、『[^$]』なら「行頭または行末」ではなくて、「『$』文字以外」ということになります。

また、『\b』は文字クラス内のみ、バックスペース文字を表す場合が多いようです。

大文字と小文字

正規表現には、大抵「大文字と小文字を無視する」というオプションがあります。

これが入っていないと「『to:』で検索しても『To:』にマッチしない」といったことが起こります。

言語、ツールによっては、正規表現の一部にのみ大文字と小文字を無視する機能があるものもあります。

例えばRubyでは『(?i:foo)』という形式を使用できます。

(?i:Ruby) Python』という表現なら、『ruby Python』や『RuBy Python』にはマッチしますが、

RUBY PYTHON』にはマッチしない、ということになります。


キャプチャと後方参照

括弧内に入れた文字列は、ある場所に記憶されます。(「キャプチャ」と呼びます)

これは『\n』という表記を使って呼び出すことができます。(nは数字)

同じ単語が2連続で出てくるもの(『merry merry』みたいなもの)を探すという場合、

\b(\w+)\b \1』とすることができます。(ここで使った『\1』を「後方参照」と呼びます)

こうすると、『\1』の部分は、『(\w+)』を使ってマッチしたものと同じものがあるものとして解釈されることになります。

括弧を何個も使う場合は、左の括弧から順に『\1』、『\2』、『\3』となります。

また、後方参照は置換文字列にも使うことができます。

つまり置換文字列内に『\1』と書けば1番目の括弧、

\2』と書けば2番目の括弧でキャプチャされたものがそこに入ることになります。

この場合、言語、ツールによっては『\n』ではなく『$n』を使う場合もあるようです。

括弧は『(foo|bar)』という選択や、『(humbert){2}』というグループ化など、キャプチャ以外にも使われます。

そのため、キャプチャに使われた数字をわかりやすくするために、キャプチャしない括弧もあります。

それには『(?:foo)』という表記を使います。

前の例であれば『(?:foo|bar)』と『(?:humbert){2}』になります。

先読みと否定先読み

「その位置の続くものを確認する」というのが「先読み」です。

対象文字列を『JavaScript Java Applet』として考えてみましょう。

Java(?=Script)』は「『Script』が後に続く『Java』」にマッチします。

(?=Script)』の部分が、「『Script』が後に続くかどうか」をチェックしているので、

後ろに『Script』が続かない単なる『Java』にはマッチしません。

(?=Script)』の部分は「後に『Script』が続く位置」にマッチしていることになります。

この例のマッチは『JavaScript Java Applet』となります。

逆に、『Java(?!Script)』とすれば、「『Script』が後に続かないかどうか」をチェックするので、

後ろに『Script』が続かない単なる『Java』にマッチさせることができます。

こちらは「否定先読み」と呼びます。

この例のマッチは『JavaScript Java Applet』となります。

言語、ツールによっては、「その位置の前にあるものを確認する」という「戻り読み」「否定戻り読み」がサポートされているものもあります。

(これは『(?<=foo)』『(?<!=bar)』という形で使います)

先読みや否定先読み、戻り読みなどをまとめて「前後読み」と呼びますが、

前後読みは位置にマッチするため、戻り読みは先読みとは通常書くべき位置が逆になります。

(?<Mozilla )Firefox』とすれば、『Mozilla 』に続く『Firefox』のみにマッチします。

強欲な量指定子とアトミックなグループ

メタ文字意味
?+直前の文字を0回または1回繰り返す(強欲)
*+直前の文字を0回以上繰り返す(強欲)
++直前の文字を1回以上繰り返す(強欲)

上のほうで?、*、+は「欲張り」だと書きましたが、「欲張り」な量指定子も“ゆずる”ことがあります。

対象文字列が『"something"』だとして、検索文字列".*"』はこれにマッチします。

しかし、強欲な量指定子*+』に置き換えて『".*+"』とするとマッチしません。

これはなぜかというと、「欲張り」な量指定子を使った『.*』の部分は、

最後の『"がなければ『something"』にマッチすることになりますが、

正規表現の最後に『"』があるために、対象文字列の最後の『"』をゆずっているのです。

しかし、強欲な量指定子*+』はゆずることがないため、

.*+』の部分が『something"』にマッチしてしまい、

正規表現の最後の『"』にはマッチできなくなるのです。

強欲な量指定子サポートしていない言語、ツールでも、「アトミックなグループ」というものが使える場合があります。

アトミックなグループでは『(?>foo)』という表記を使います。

\w?+』なら『(?>w+)』、『\w*+』なら『(?>w*)』、『\w++』なら『(?>w+)』で代替できます。

意図しないマッチに気をつける

*』の「直前の文字の0回以上の繰り返し」はよく気をつけないと、間違ったものにまでマッチしてしまいます。

リテラル文字と文字クラスは「文字自体」にマッチすると書きましたが、

-*』というような表現は、『-』や『--------』だけでなく、

『』つまり、空文字列にもマッチしてしまうのです。

なぜそうなるかというと、「0回以上」ということは「なくてもいい」ということだからです。

文字列へのマッチは、実質上「位置」へのマッチと似たようなものになります。

検索文字列を『-*』として一括置換すると、

-』や『--------』が置換されるだけでなく、

-』が存在しないすべての場所に置換文字列が挿入されてしまうことになります。

正しい正規表現を書くためには、「どう書けばマッチするか」だけでなく、

「どういう場合にマッチしなければいいか」についても考えてみる必要があります。

ワイルドカードの『*』≒正規表現の『.*

「はじめての正規表現」で、

ワイルドカードの『*』=正規表現の『.*

とありますが、これは厳密には微妙に違います。

ファイルグロブでは《*》は「任意の文字を1回以上繰り返す」

つまり、1文字以上あればなんでもいいということになります。

この意味だと、《*.*》は "foo." や ".bar" は当てはまりません。

しかし、「0回以上」であればマッチすることになります。

正規表現では「1回以上繰り返す」は、《+》なので、

「任意の文字を1回以上繰り返す」は『.+』となります。

よって、《*.*》とほぼ等価な表現は『.+\..+』となります。

これは私の勘違いでした。miauさんご指摘ありがとうございます。

「*.*」は foo. にマッチするはずだし、.barマッチしないのは、「*」がドットファイルマッチしないっていう特殊ルールがあるから・・・ですよね?

ワイルドカード(ファイルグロブ)の「*」って - miau's blog


ファイルグロブの《*》は、「0回以上繰り返す(ただし例外として、一番最初のドットは表せない)」ということのようです。

*.*》とほぼ等価な表現は、正しくは『(?!\.).*\..*』となります。


最後に

正規表現を使うにあたっては、検索対象がどのようなものか知っておくことが重要です。

\d{4}[-/]\d{1,2}[-/]\d{1,2}』で日付と思われる文字列を検索することができますが、

これは『00-0000-00-00』というものにもマッチしてしまいます。(『00-0000-00-00』)

かしこれを厳密にしようと思えばかなり複雑な正規表現になってしまうので、

どの程度の厳密さが必要かを把握しておくことが肝要と言えるでしょう。

冒頭にも書きましたが、正規表現は、言語やツールによって微妙な違いがあるので、

その辺りについては各言語、ツールの説明を参照してください。

本格的に学びたい場合はオライリー「詳説 正規表現」おすすめです。

(ただ、この本はプログラミングのことを多少は知らないと難しいかもしれません)

また、PHP正規表現チェッカーですぐに試せるようです。

関連リンク



反応への応答

b:id:K-Onoさんの

なぜ増田? これでidデビューしてもいいんじゃないのか?

について。

実ははてなダイアリーもある(d:id:sleepwlk)んですが、長いこと書いてなかったので、

匿名ダイアリーのほうが多くの人に見てもらえるのではないかと思ってこちらに書いてみました。

*2008-09-23 誤記の修正と、一部加筆しました。

*2008-09-24 ワイルドカード記述を修正しました。

*2008-09-24 文字クラス記述の間違いを修正しました。b:id:FunnyBunnyDizzyさんご指摘ありがとうございます。

*2008-09-24 「意図しないマッチに気をつける」を追加しました。

2008-09-22

lispといえば

AutoCADだよなと思う。なんでlispなんかな。

そういえばPhotoshoppythonだよな。なんでなんかな。

高いソフトって変わってるよな。あんなバカ高いソフト誰が買うんだろうな。

そういえばここってMochikit使ってるよな。はてなのみんなもMochikit大好きなんかな。

AutoCADPhotoshop増田、みんな関数型嫌いなのに使ってるのかな。マゾかな?

それとも好きなのに悪態ついてるのかな。ツンデレかな?

それにしても、なんで日本じゃlisppythonメジャーにならないのかな。なんでなんかな。

でも、Google先生は「ruby S式」って言ってるけどな。

rubyってS式すきなんかな。変態かな?

http://anond.hatelabo.jp/20080922131514

はてなは村じゃない、巨大なゴミ屋敷だ。

http://d.hatena.ne.jp/nishiohirokazu/20080918/1221708888

正答率5%ってwwwwwww

なんなの?

馬鹿なの?

死ぬの?

はてなGeek(笑)コミュニティの方々ってずいぶん優秀なんですね(苦笑)

これだからLisperは…みたいな事言ってる奴もいるけど、西尾Python使いじゃんwwww

一部に捨てアカでファビョっている奴もいるみたいだが。

http://q.hatena.ne.jp/1221971933

http://q.hatena.ne.jp/1222004858

http://gnews.x0.com/20080921_231233/

質問者は優秀すぎて非常識だと思いました」ってWWWWお前が無知で無能なだけだよ。馬鹿で自分が、馬鹿って気付けないくらいのな。

「質問の方がおかしい気がしません?」ってだいたい、そんなこと聞いてどうすんの?

ここは発言小町か?んん?

西尾が優秀だからなんなの?知らなくいい理由になると思ってる?

努力しなくて良い理由さがしているだけだろ?お前は?

安心したら、そこで成長止まっちゃうよ?いいの?

こういう奴に限って、ネット上ではなぜかアクティブなんだよな。

S/N比を下げる貢献をいっぱいしてくれる。

はてブとかもろにそうだし。無意味ネガコメ大量生産してくれる。

まぁ、馬鹿馬鹿同士、馬鹿じゃない事を確認したいんだなぁと思った。馬鹿の中だと相対的に馬鹿じゃなくなるもんね。

だから、S/N比を下げる馬鹿情報を量産しているんだなと思う。

そうやって、ネット馬鹿情報だらけにして、馬鹿馬鹿であることに安心して生きていける馬鹿ネット社会無意識的に作ろうとしているんだなぁとおもった。

これじゃ、まるで、ゴミ屋敷だ。

ゴミ屋敷の住人がゴミ囲まれて安心するように、馬鹿ゴミ情報に囲まれて安心するんだと思った。

これをゴミ屋敷理論として提唱したい。

まぁ、それはいいとして、はてな2chはそんな連中が集まってゴミだらけにするゴミ屋敷だと思った

2008-09-04

http://anond.hatelabo.jp/20080904150727

(X)HTMLCSS浪人の間の一年でだいたい覚えた俺が通りますよw

で、それを覚えたらとりあえずJavascriptを覚えよう。

モダンライブラリprototype.jsとかjQueryとか)使えるようになるといいかな。

このあたりはネット上に入門ごろごろのっかっているし、本屋行けば入門書あるだろう。

??????????Webプログラマコース??????????

PerlPHPRubyPythonのどれかをせめて覚えるべきかな?

後のことを考えるとPerlがいちばんかな?他のやつのほうが習いやすいみたいだけど

どれか一つ覚えれば他のはお互いに参考になっているから覚えやすいかも。

入門書一冊フルコンプすればとりあえず使えるんじゃね(ぇ

あ、Java忘れてた。これも手だけど初心者はきつくね と思ってスルー(ぁ

上のどれか覚えたならやってもいいとおもう。

ここらへん職業訓練で教えてくれるみたいだからそれで習うのもいいかも。

??????????Webデザイナコース??????????

ウェブデザイナー - Wikipediaより。

配色、色彩心理学レイアウト人間工学

このあたりがいるらしい。だいたい放送大学でいける(配色とか確かあったはず)から、↑の職業訓練と平行でいくといいかも。

配色とかのは資格もあるから、とるといいかも。

というかこっちも職業訓練でたしかあったと思った。

まぁ、まだJavascript覚えていないんで俺はそこからだけどなorz

ちなみにhtmlはez-htmlcssはstylenote使っているな(ぉ

2008-08-31

pythonダメな1つの理由

perl でいう CPAN のようなモジュールアーカイブの名前が pypi.

パイパイってwwwぷげらwwww

pypi がいっぱい♪

2008-08-06

pythonダメな1つの理由

1. if/while/for/class 文に : (コロン)が必要

例)

while i<5:
    i=i+1
    print i

python はインデント、改行に意味を持たせることをウリとして開発されたわけで、

ここにはインデントがあり、それに意味を持たせられるのだから、: コロンなど必要なはずがない。

Why are colons required for the if/while/def/class statements?

http://www.python.org/doc/faq/general/#why-are-colons-required-for-the-if-while-def-class-statements

(意訳)ボブ「比べてみろよ?こっち

if a==b
    print a

と、こっち

if a==b:
    print a

どっちが読みやすい、スザンヌ?」

スザンヌ「まぁ、2番目のほうが読みやすいわ。」

んなぁことあるかーい!!変わらんわい!!

(追記)ボブ「あとは、英語の文法に似せたってのもあるんだ。」

: (コロン)の後に説明書くにしても10行は書かんだろがーー!!それに、似せたんなら、

if a==b,
    print a

のほうが英語っぽいだろがー!! ってか printprint a. (ピリオド) って書けやそれなら!

中途半端中途半端

2008-08-01

http://anond.hatelabo.jp/20080801154904

なんか呼ばれた気がしなくもない。

ここ1年程の、ほぼすべてのエントリナンバは提供できると思う。

ただ、削除されたエントリもそれなりに入ってるけど、入ってないものも多い。そんなデータ

たぶん10万件×14桁で1.5Mほどかな。圧縮すれば2割くらいになってくれるだろうか。

いる人いる?

しかし、日単位なら365リクエストでいけるから、とってきた方が早いかも。

shならwgetsedperlならWeb::Scrapergmならgm_xhrか。

rubypythonは知らない。

xpathgraphという手もあるな。総計値になるけど。差分や統計が取れたらもっと面白いのに。

はてなグラフインポートできないかな。

2008-07-31

[][][][]無題

百万回繰り返された例の件について書いてみるよ。あ、タイトルは必要ないよね?このタグだけ見ればわかるものw

Perl

  • sigil 汚い、my our local 汚い。
  • ->が汚い、ドットにしてよ。Perl6ではドットになるんだって?やったぁ。
  • とにかくコードを見るだけでげんなりする。
  • クラス機構が後付けなのがめんどくせー。Exporter使うのだるい
  • とにかく文法がアレすぎる。あ、でも後置修飾子はおきにいり。
  • でもはえー、ちょうはえー。
  • ライブラリ超使える。もうなんでもできる。

総評:肉は腐りかけがうまい

PHP

  • 名前がださい。
  • ライブラリがださい。関数名がださい。
  • もうとにかください、見るのも嫌。

総評:作った人間はドS、使ってる人間はドM。

Python

総評:とにかく微妙というか、中途半端につかいにくい。いまだにPerlが生きていたり、Rubyキャッチアップされてるのも納得の出来。これがLL界を制覇したらPerlよりうっとうしい。

Ruby

  • 基本的な機能には文句ない。メソッドチェインとかブロック構文とかもうさいこう。
  • なんで定数に代入可なんだろう。警告出るからいいけど。
  • なんでも式だから乱用したら解読しにくそう。
  • ボキャブラリや慣習が他の言語からの流用が多いから覚えやすい。
  • ライブラリが貧弱。
  • バイト文字処理が貧弱。
  • require 'rubygems' が汚いしめんどくさい。RUBYOPTつかえ?そういう問題じゃない。
  • いちばんおそい。でもPythonとどっこいどっこいだからあんまりきにしない。
  • 日本でしか人気ないから結構あっという間にすたれそう。
  • よくまとまってて使いやすいけど、特に目新しい点はないよね。人気があんまりないから変な要望がなくてごちゃごちゃしてないって部分はあるかも。

総評Perlライブラリが流用できたら最高。できなかったらNIH症候群にかかる。

いじょう、ストレスたまったドヘタプログラマが真夏の暑いときに油をぶちまけてみたよ☆

2008-06-12

*[Java][Python]

javaからpythonスクリプトの構文チェックをするメソッドを作りたいんだけど、

スクリプトを実行しないで構文チェックだけする方法知ってる人いる?

イメージ

boolean isCollectGrammar( String strPythonScriptFilename ){
   ????
}

みたいな感じ。

jythoncあたりを利用してうまくいかないものかと試してるんだけどなかなかうまくいかず。。

org.jython.parserとかorg.jython.compilerあたりを使うとイケるのかなぁ。。

2008-06-10

諸君、私はC++が好きだ

諸君、私はC++が好きだ

諸君、私はC++が好きだ

諸君、私はC++が大好きだ

演算子オーバーロードが好きだ

テンプレートが好きだ

STLが好きだ

Boostが好きだ

FC++が好きだ

Windows

Mac

Linux

BSD

Solaris

この地上でコンパイルされるありとあらゆるC++が大好きだ

演算子を多重定義できるC++が好きだ

演算子意味が変わり、直感的なコードが書き下せる時など心がおどる

テンプレートが使えるC++が好きだ

動的言語の優位性を語っている奴等にそれを見せた時など胸がすくような気持ちだった

Boostが好きだ

Boost::lambdaを使って(_1 + _2)と二つの引数を足算した結果を返す無名関数を定義した時など感動すらおぼえる

Boost::regex正規表現を書く時などもうたまらない

Boost::shared_pointerでオブジェクト自動的に解放されるのは最高だ

納期に追われて急いで書かなければならないパーサを

Boost::spiritBNF記述して書いた時など絶頂すら覚える

マルチパラダイムC++が好きだ

そんなC++が複雑だと思われているのはとてもとても悲しいものだ

テンプレートが好きだ

エラーメッセージ意味不明だと言われるのは屈辱の極みだ

諸君 私はC++を 変態の様なC++を望んでいる

諸君 私に付き従うC++好きの諸君 君たちは一体何を望んでいる?

更なるC++を望むか 

糞の様なC++を望むか?

BoostFC++によってさらに変態的になっていくC++を望むか?

C++!! C++!! C++!!

よろしい ならばC++

だが、LL全盛の時代の陰でもはや組み込みHPCぐらいでしか使われないという中傷に耐え続けて来た我々には

ただのC++ではもはや足りない!!

C++を!! 一心不乱の大C++を!!

我々はわずかに小数

PerlPHPPythonRubyJavaScriptに比べれば物の数ではない

だが諸君は一騎当千のBinarianだと私は信じている

ならば我らは諸君と私で総兵力100万と1人のコンピュータサイエンティスト集団となる

我らを忘却の彼方へと追いやり、インタプリタしか知らない連中を叩きのめそう

髪の毛をつかんで引きずり下ろし 眼(まなこ)をあけて思い出させよう

連中コンパイラの偉大さを思い出させてやる

連中インタプリタでは実用的なプログラムが書けないということを思い出させてやる

C++には奴らの哲学では思いもよらない書き方がある事を思い出させてやる

1000人のBinarianの集団で 世界変態的なコードで埋め尽くしてやる

目標 世界のありとあらゆるプログラム

一億総合コンパイル作戦 状況を開始せよ

逝くぞ 諸君


http://wids.net/lab/sukida.htmlで生成。

2008-06-02

さくらのレンタルサーバ ライトユーザが書く実情(または宣伝もしくは疑問)

http://anond.hatelabo.jp/20080601175525

他の有料レンタルサーバを使ったことないので、あてにはできないけど。

総評

ライトプランの制限

重要なこと

プラン変更は出来ない。変更したい場合は別プランで新規登録後、データを移すことになる。

その他

実際の環境

公式にはこちら

以下私の環境。これは割り当てられたサーバにより多少の違いがあり得る。その他詳細はアカウント毎に確認できる。

CPUIntel(R) Pentium(R) M processor 2.00GHz
メモリ2GB
OSFreeBSD 6.1-RELEASE-p23 i386
ApacheApache/1.3.39
Perl5.8.8
Ruby1.8.5
Python2.4.5

主なperlライブラリ

2008-04-15

ちょいと>>1よ。聞いてくれよ。スレとあんま関係ないけどさ。

このあいだ、近所のはてな行ったんです。はてな

そしたらなんか人がめちゃくちゃいっぱいでアクセスできないんです。

で、よく見たらなんかjkondo愚痴ってて、たこつぼ、とか書いてあるんです。

もうね、アホかと。馬鹿かと。

お前らな、たこつぼ如きで普段来てないはてなに来てんじゃねーよ、ボケが。

壷だよ、壷。

なんか親子連れとかもいるし。一家4人ではてなか。おめでてーな。

よーしパパ日記始めちゃうぞー、とか言ってるの。もう見てらんない。

お前らな、壷やるから帯域空けろと。

はてなってのはな、もっと殺伐としてるべきなんだよ。

無断リンク禁止厨といつ喧嘩が始まってもおかしくない、

刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。

で、やっと日記を始めたかと思ったら、隣の奴が、Google Engine、とか言ってるんです。

そこでまたぶち切れですよ。

あのな、Googleなんてきょうび流行んねーんだよ。ボケが。

得意げな顔して何が、Googleで、だ。

お前は本当にpythonで開発したいのかと問いたい。問い詰めたい。小1時間問い詰めたい

お前、Googleって言いたいだけちゃうんかと。

はてな通の俺から言わせてもらえば今、はてな通の間での最新流行はやっぱり、

ネガコメ、これだね。

[これはひどい]ネガコメはてスタ。これが通の楽しみ方。

ネガコメってのはホッテントリの可能性があがる。そん代わりさらしあげ。これ。

で、それにコメ一覧を再ブクマ。これ最強。

かしこれをやるとと次からネガコメ否定派にマークされるという危険も伴う、諸刃の剣

素人にはお薦め出来ない。

まあお前みたいな奴は、要するに、勇気がないんでしょってこった。

2008-04-12

http://anond.hatelabo.jp/20080412115419

芸術性って・・・。

だったら言語から作れよ。

芸術性のあるソースなんて見たくもない。

芸術性は見る人に訴求するものがあり、人によって解釈が違う。そういう定義の言葉だろ。

素敵すぎるだろそんなソース

芸術をも感じさせるソースを見て、どうやったらこんな独自進化を遂げられるんだよと何度ヒザをついたことか…。

人を満足させるために作るのか、自分が満足するためにつくるのか。

自分を満足させるために作り出したものが結果的に人を満足させるということは殆どない。

だって最初のスタート方向が違うんだもの。

コーディングポリシーはもっていてもいいとおもうけど、そのポリシーアクションの枷になっているのだったら本末転倒だとおもうな。

どんな立派な機能があるクラスだろうが最初で弾かれて落ちてこないだったら意味ないじゃーん。

Google App Engine

というかApp Engineってなに?

つかって何かやりたいとまだ思えてこない以前にApp Engineがまだ未チェック。

PythonGMO証券会社が外部APIを公開したのがPythonだった。うんこだった。

勉強するには至らなかったが、そんな特殊だったという印象はもってないな。

どうせLL、学習コストなんてないに等しいだろ。

plのcgiがあって、そっからasp,jsp,cfmという時代をえて、

php5,RonR,Pythonとかになってきているわけだが、時代は違えどひとつ覚えておけば学習コストっていう意味は殆どかわらないと思うよ。Oracleを覚えてからSQL-serverにいこうがpostgresqlにいこうがmysqlにいこうが一緒みたいなもの。

後継に位置するものであれば必ず似た機能はある。

むしろiis-ocxとかtomcat-Servletとか、ns-ldapとかそういう周辺が違うのであって、

基本的な部分に収まっているあいだは殆ど一緒じゃない?

今の時代みたいに殆どがApacheごにょごにょしただけで動く時代ならphpもRonRも殆ど変わらないと思うな。

所詮LL。

いまだってデータ処理はDBに任せたり、画面だってjavaなりFlashにまかせるじゃん。

LLがクラスに対応したときはおお!!と思ったし、どんどん進化しているのは感じる。

そんな感じで、どんどん面白いのがでてくればいいとおもう。

言語なんてこだわりもって選らんだところで変遷は激しいよ。

コールドフュージョンがどれだけすばらしいかについてプレゼンしてた坊を思い出すたびに涙を禁じえない。

いい音楽が売れるんじゃない。

話題になる音楽が売れるんだ。

2008-04-05

さくらの旧(?)専用サーバ CentOS 4.6 を Linux-Vserver に入れ替えてみた

前置き

契約直後の初期状態

  • ホスト名をsakura2とした。
  • sshd と vsftpd が動いていた。
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.9-67.0.4.ELsmp #1 SMP Sun Feb 3 07:08:57 EST 2008 i686 athlon i386 GNU/Linux
[admin@sakura2 ~]$ cat /etc/issue.net
CentOS release 4.6 (Final)
Kernel \r on an \m

CentOS 5 へのアップグレード(?)

中身の整理
  • なるべく最小構成に近い最新のCentOS4.6にしてみる。
# yum update
# yum remove emacs emacspeak emacs-leim emacs-common
# yum remove NetworkManager
# yum remove bluez-bluefw bluez-hcidump bluez-libs bluez-utils
# yum remove cups cups-libs
# yum remove irda-utils isdn4k-utils pcmcia-cs wireless-tools
# yum remove wpa_supplicant gpm xinetd
# yum remove ppp nfs-utils lksctp-tools autofs
# yum remove xorg-x11-libs
# yum remove selinux-policy-targeted
# yum remove vsftpd
# yum clean all
CentOS 5 にアップグレード(?)してみる
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.9-67.0.7.ELsmp #1 SMP Sat Mar 15 06:54:55 EDT 2008 i686 athlon i386 GNU/Linux
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-notes-5.1.0-2.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-5-1.0.el5.centos.1.i386.rpm
[root@sakura2 admin]# cat /etc/issue.net
CentOS release 5 (Final)
Kernel \r on an \m

# yum update glib procps udev iptables
# rpm -Uvh --nodeps http://mirror.centos.org/centos/5/os/i386/CentOS/initscripts-8.45.17.EL-1.el5.centos.1.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/mkinitrd-5.1.19.6-19.i386.rpm
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-1.39-10.el5.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-libs-1.39-10.el5.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-devel-1.39-10.el5.i386.rpm
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/kernel-2.6.18-53.el5.i686.rpm
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.18-53.el5 #1 SMP Mon Nov 12 02:22:48 EST 2007 i686 athlon i386 GNU/Linux

# yum clean all

[root@sakura2 admin]# yum --version
Loading "fastestmirror" plugin
2.4.3
[root@sakura2 admin]# rpm --version
RPM version 4.3.3
# yum update
Error: Missing Dependency: python-abi = 2.3 is needed by package python-elementtree
  • 解決法がわからないので放置

Linux-Vserver の導入

# vi /etc/ssh/sshd_config
# /etc/init.d/sshd restart
# vi /etc/yum.repos.d/dhozac-vserver.repo
# yum update kernel
# yum install util-vserver{,-core,-lib,-sysv,-build}
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.22.19-vs2.3.0.34.1 #1 SMP Mon Mar 17 05:32:04 EDT 2008 i686 athlon i386 GNU/Linux

ホストOS環境の整備

# yum update bash screen rsync
# /etc/init.d/iptables save
# /etc/init.d/iptables start
# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
**filter
:INPUT ACCEPT [1067:96557]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [63680:6208436]
:e0 - [0:0]
-A INPUT -i eth0 -j e0
-A e0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A e0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A e0 -p tcp -m tcp --dport 22 -j ACCEPT
-A e0 -p tcp -m tcp --dport 80 -j ACCEPT
-A e0 -p tcp -m tcp --dport 443 -j ACCEPT
-A e0 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Mon Mar 24 19:57:07 2008
# Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
**nat
:PREROUTING ACCEPT [179:10642]
:POSTROUTING ACCEPT [213:13895]
:OUTPUT ACCEPT [251:16220]
-A PREROUTING -s ! 10.0.0.0/255.255.255.0 -p tcp -m tcp --dport NNNN -j DNAT --to-destination 10.0.0.1:22
-A POSTROUTING -s 10.0.0.0/255.255.255.0 -d ! 10.0.0.0/255.255.255.0 -j SNAT --to-source AAA.BBB.CCC.DDD
COMMIT
# Completed on Mon Mar 24 19:57:07 2008

ゲストOSの設定

[root@sakura2 ~]# /usr/sbin/vserver-stat
CTX   PROC    VSZ    RSS  userTIME   sysTIME    UPTIME NAME
40013   27 301.5M  73.8M  30m36s31  56m38s90  11d06h56 one
40015    5  10.8M   4.4M   0m28s33   0m12s68   9d04h23 two
40016    2   4.2M   1.3M   0m00s47   0m00s64   0m01s97 three

追記

2008-03-22

[]Python 2.6だと、オブジェクト辞書のキーに使えない場合がある

Python2.5のときは、新スタイルクラスインスタンス辞書のキーとして必ず使用できたけど、Python 2.6ではそういうわけじゃなくなってるぽい。という話。

class TestClass(object):
    def __init__(self, i_name):
        self._name = i_name

    def __eq__(self, i_other):
        if not isinstance(i_other, TestClass):
            return False
        return self._name == i_other._name

print 'object.__hash__ = ' + str(object.__hash__)
print 'TestClass.__hash__ = ' +str(TestClass.__hash__)

上記のようなコードを実行したら、Python 2.5とPython 2.6で結果が違いました。

Python 2.5の場合の結果。

object.__hash__ = <slot wrapper '__hash__' of 'object' objects>
TestClass.__hash__ = <slot wrapper '__hash__' of 'object' objects>

Python 2.6の場合の結果。

object.__hash__ = <slot wrapper '__hash__' of 'object' objects>
TestClass.__hash__ = None

Python 2.6だと、objectクラス継承すると、__hash__がNoneになっちゃってる。このままだと辞書のキーとして使えないね。object継承したクラスで__hash__を実装すれば、大丈夫みたい。

ハッシュ値の計算方法 (2)」というページも参考になりそう。

2008-03-21

[]Python 2.5のdistutilsで、Visual Studio 2005を使いたい!

目的

Visual Studio 2005しかインストールしてない場合、Python 2.5だとdistutilsが正しく動かないっぽいので、どうにかしたいYO!

なんでVisual Studio 2005だと、distutilsが動かないんかな?

distutilsでVisual Studioを使うときのコンパイル環境は、sysモジュールのversionプロパティを参照して環境を選択をしているようです。Pythonインタプリタを起動して、以下のような命令を実行してみると、sys.versionプロパティが確認できます。

import sys;print sys.version

Python 2.5.2だと、以下のようになっています。Visual Studio 2003の環境が使われるようです。

2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)]

Python 2.6a1だと、以下のようになっています。Visual Studio 2008の環境が使われるようです。

2.6a1 (r26a1:61155, Mar  1 2008, 12:11:56) [MSC v.1500 32 bit (Intel)]

以上から察するに、Python 2.5.2とPython 2.6のどちらでも、Visual Studio 2005の環境が選択されることはないっぽいです。うーん、困った!

解決策

Python 2.6とVisual Studio 2008をインストールしよう!」というのを真っ先に思いつきましたが、あんまり環境を変えたくないんだよなー。というわけで、環境の変更を最低限に抑えてどうにかしてみました。簡単に言うと、distutilsだけの置き換えをしました。

Python 2.6 をインストールする

Python 2.6の公式ダウンロードページから、Windows版のインストーラーをダウンロードして、適当な場所にインストールしてください。

distutilsだけ置き換える

"Python-2.5.2/Lib/distutils"を別の場所に移動し、"Python-2.6a1/Lib/distutils"を"Python-2.5.2/Lib"以下にコピーしてください。以降はPython 2.6は必要ないので、アンインストールして構いません。

ファイルの修正
  • 例外をPython 2.5.2で許されている形式に変更。
  • get_build_version()関数で強制的に8を返すように変更。

上記の2点の変更を行います。distutilsディレクトリに、以下のパッチをあててください。

Index: msvccompiler.py
===================================================================
--- msvccompiler.py
+++ msvccompiler.py
@@ -170,6 +170,7 @@
     if majorVersion == 6:
         minorVersion = 0
     if majorVersion >= 6:
+        return 8
         return majorVersion + minorVersion
     # else we don't know what version of the compiler this is
     return None
Index: msvc9compiler.py
===================================================================
--- msvc9compiler.py
+++ msvc9compiler.py
@@ -128,7 +128,7 @@
                                "sdkinstallrootv2.0")
             else:
                 raise KeyError("sdkinstallrootv2.0")
-        except KeyError as exc: #
+        except KeyError, exc: #
             raise DistutilsPlatformError(
             """Python was built with Visual Studio 2008;
 extensions must be built with a compiler than can generate compatible binaries.
@@ -172,6 +172,7 @@
     if majorVersion == 6:
         minorVersion = 0
     if majorVersion >= 6:
+        return 8
         return majorVersion + minorVersion
     # else we don't know what version of the compiler this is
     return None
@@ -455,7 +456,7 @@
                 try:
                     self.spawn([self.rc] + pp_opts +
                                [output_opt] + [input_opt])
-                except DistutilsExecError as msg:
+                except DistutilsExecError, msg:
                     raise CompileError(msg)
                 continue
             elif ext in self._mc_extensions:
@@ -482,7 +483,7 @@
                     self.spawn([self.rc] +
                                ["/fo" + obj] + [rc_file])
 
-                except DistutilsExecError as msg:
+                except DistutilsExecError, msg:
                     raise CompileError(msg)
                 continue
             else:
@@ -495,7 +496,7 @@
                 self.spawn([self.cc] + compile_opts + pp_opts +
                            [input_opt, output_opt] +
                            extra_postargs)
-            except DistutilsExecError as msg:
+            except DistutilsExecError, msg:
                 raise CompileError(msg)
 
         return objects
@@ -520,7 +521,7 @@
                 pass # XXX what goes here?
             try:
                 self.spawn([self.lib] + lib_args)
-            except DistutilsExecError as msg:
+            except DistutilsExecError, msg:
                 raise LibError(msg)
         else:
             log.debug("skipping %s (up-to-date)", output_filename)
@@ -598,7 +599,7 @@
             self.mkpath(os.path.dirname(output_filename))
             try:
                 self.spawn([self.linker] + ld_args)
-            except DistutilsExecError as msg:
+            except DistutilsExecError, msg:
                 raise LinkError(msg)
 
         else:
manifestファイルを作る

python.exeと同じディレクトリに、以下のXMLを"python.exe.manifest"として保存してください。

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type='win32'
        name='Microsoft.VC80.CRT'
        version='8.0.50608.0'
        processorArchitecture='x86'
        publicKeyToken='1fc8b3b9a1e18e3b'
        />
    </dependentAssembly>
  </dependency>
</assembly>

これで終わりです。

ログイン ユーザー登録
ようこそ ゲスト さん