「extensions」を含む日記 RSS

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

2019-05-10

Reactive Extensions

一向に流行る気配がない

ずっと避けてきたのにうっかり該当プロジェクトを引き継ぐことになった

いやだなーもー

覚えてもメリットなさそー

2018-11-04

知らなかったよ

https://chrome.google.com/webstore/search/はてな?hl=ja&_category=extensions

ずっとFirefoxを利用してたからわからなかったけど、GoogleChromeだとはてな関連の拡張がいっぱいあるのね。

Firefoxだと純正はてなブックマークくらいだぜ。増田関連もないし。

いま、いろいろみてるけど、あれがあると便利だとか教えてください。

知らなかったよ

https://chrome.google.com/webstore/search/はてな?hl=ja&_category=extensions

ずっとFirefoxを利用してたからわからなかったけど、GoogleChromeだとはてな関連の拡張がいっぱいあるのね。

Firefoxだと純正はてなブックマークくらいだぜ。増田関連もないし。

いま、いろいろみてるけど、あれがあると便利だとか教えてください。

2016-07-25

gitにおけるコミットログ/メッセージ例文集100

私はコミットログの書き方に悩む英語の苦手な人間である。実際、似たような人は世の中に結構いるようで、頻出単語を集計したりまとめたものは既にあって役に立つのだけれど、これらはあくま単語の話であり、具体的な文を構成する過程でやっぱり困る部分がかなりあった。

要するに、どういう時にどういう文が使われているのか、ということを示した例文集が欲しいのであるググると他にも「例文集があればいいのに」みたいな声はあるくせして、しかし誰も作ろうとしない。何なんだお前ら。それじゃ私が楽できないじゃないか

仕方なく自分でまとめたので、増田に垂れ流しておく。

はじめに

ここで挙げているコミットログは全て実際のコミットログから転載である。当然ながら各コミットログ著作権はそれぞれの書き手にある。いずれも各英文でググれば出てくるし、フェアユース範囲なら許してくれるだろうと考え名前プロジェクト名は割愛したが、ここにお詫びと感謝を述べておきたい。

抽出条件だが、参考にできそうなコミットログを多く含んでいそうなリポジトリGitHubSTARの多い方からざっと目で見て適当に選び、それぞれ最新コミットから5000件抽出した(あわせて前処理として、コミットログ冒頭のタグ情報は消去した)。

結果として対象としたリポジトリは以下の通り。

atomのみ5400件抽出していたため、計25400件のコミットログベースである。このうち、以下の条件に合致するものは参考例にすべきでないとして一律排除した。

こうして残った8540件を眺めながら、適当に切り出したのがこの用例集である個人的に「うーんこの」と思った表現も、散見される場合は載せた。

ということで、以下用例を羅列していく。

用例集

オプションフラグメニューを追加した
ファイルを追加した
メソッド機能を追加した
実装を別のものへ切り替えた
  • Use args.resourcePath instead of args.devResourcePath
  • Use arrays instead of while loops
  • Use auto instead of repeating explicit class names
  • Use weak pointer instead of manual bookkeeping
  • Change all uses of 'CInt' to 'Int32' in the SDK overlay
  • Change Integer#year to return a Fixnum instead of a Float to improve consistency
新しく何かに対応した/機能上の制約を取り払った
何かを使うようにした
より好ましい実装に改良した
何かを出来ない/しないようにした
  • Don't bail reading a metadata instance if swift_isaMask isn't available
  • Don't exit until the parent asks for an instance
  • Don't include Parent pointer in Nominal/BoundGeneric TypeRef uniquing
  • Don't use MatchesExtension for matching filters
  • Don't use ES6 class for AutoUpdater windows class
  • Don't use MatchesExtension for matching filters
  • Avoid `distinct` if a subquery has already materialized
  • Avoid infinite recursion when bad values are passed to tz aware fields
オブジェクトの内容や挙動確認やすくした
Assertを追加した
不要コードを除去した
コードを移動した
名前修正した
さなバグタイポ修正した, 警告を潰した
バグや好ましくない挙動修正した
テストコメントドキュメントを追加した
テストを削除した
テストコメント修正した
ドキュメント修正した

表現傾向とまとめ

以上の用例をふまえ、今回の参考ログ8540件から先頭の単語を出現回数で並べると次のようになった。

Add1149
Fix1014
Update584
Remove566
Use382
Don't260
Make228
Move178
Change103
Rename85
Improve76
Avoid68
Allow65
Implement60
Handle58

コミットログの基本形はもちろん動詞 + 名詞である名詞固有名詞複数形、不可算名詞が多いが、単数形場合冠詞は a が使われるか、あるいは省略される。the はまず使われない。

何かを追加した、という表現では非常に広く Add が使われる。メソッドからテストドキュメントに至るまで大概これでまかなえる。

一方、何かを修正した、という表現では広く Fix が使われる。「何か」は typocrash といった単語からメソッド名まで幅広い名詞を取るが、動名詞はあまり取らないのと、that節は取らないのでその点は注意が必要である

Fix は「何かが正しく動くようにした」ことを示し、正しい動作内容が何かを説明しない。そこで正しい動作内容に言及したい場合Make sure が使われる(こちらはthat節が取れる)。ただし Fix よりもニュアンス的に重い表現と思われ、Fix を使わず Make sure ばかり使うのはちょっとキモいのではないかと思う(Ensure はさらに重い表現っぽい)。

また、Fixtypo 以外でのドキュメント修正に対して使われることは稀である。対して Update はドキュメントコメントテストに使われ、本体コード修正に対しては使われない。本体コード修正にあわせてテスト更新したなら Update が使われる。ただ、テスト機構それ自体バグ修正したなら Fix である

無駄な何かを単純に除去したなら Remove を使う。これまでのもの(A)からのもの(B)に切り替えたのであれば Use B instead of A か Change A to B が使われる。新たに何かを利用するようにしたのであれば Use を、利用を取りやめた場合Don't use を使うことが多い。

何かをしないようにしたなら Don't を、内部実装効率化なら Make A + 比較級/形容詞Improve が使われる。

中身の変更を伴わない単なる名前の変更なら Rename A to B、コード機能論理上の場所を移動させたなら Move A to B である

この辺はリファクタリングと呼ばれる行為と思うが、Refactor というぼんやりした動詞はあまり使われず、このように変更内容の種類に応じて動詞が使い分けられている。

余談

コミットログにはWhyを書くべきだ、というのを何かで見かけたので because とか since を使ったログがどの程度あるかを調べたが、8540件のうち22件だった。基本的に短く、シンプルに、一目で意味が取れるログが好まれる傾向がある。例えば get rid of とか2件しか使われておらず、圧倒的に remove である

一方で、シンプル単語だけど開始単語としては使われないものもある。例えば次のような単語である。Expand(9)、Extend(8)、Print(5)、Optimize(5)、Publish(4)、Append(4)、Modify(3)、Manage(2)、Revise(2)、Dump(2)、Insert(2)、Migrate(2)、Enhance(1)、Edit(1) 。いずれもカッコ内は8540件に対する冒頭での登場回数である。結局、より一般的平易な単語で表せたり、Refactor同様に抽象度が高すぎると使われないのだろう。

おわりに

8000件もログを見たおかげで、迷いなくコミットメッセージが思いつくようになったのが個人的には今回書いてて最大の収穫だった。たぶんカンニングペーパーを作る行為それ自体効率のいい学習になるという話と同じだと思う。

このまとめも100以上用例を転載してあるので、それを読むだけでも多少は効果があるんじゃないかと思う。同じようにコミットログ書きたくねぇなぁ英語わっかんねぇなぁと思っている人にとって、何か役に立つところがあれば幸いである。

2015-02-03

http://anond.hatelabo.jp/20150203070157

インストールすると、例えばWindows場合「\Users\(ユーザー名)\AppData\CromeCache\UserData\(Profile名)\Extensions」の中に拡張機能ファイル一式が入る。

この拡張機能場合は「clkiaalhgfhgcllngddndbghoaahhnfa」というフォルダが出来上がるので、その中に全部入ってる。

さて、裏で常時起動していないとダメものなので"persistent": falseが無いのは仕方がないのですが、chrome拡張機能用のタイマーってありませんでしたっけ?

公式のあのドキュメント、すぐに自分が何処を読んでいるかからなくなるので辛い。

2014-02-01

使ってはいけないChrome拡張機能アフィリエイト書き換え】

以前こんな話もあったけど……

今回はそれとは別、Flare0n という作者のChrome拡張機能について。以下の拡張機能を使ってる人は注意。

――他にもあるかも。

色々なサイトブログなどが商品を紹介する際にAmazonアソシエイトアフィリエイト)を利用している。

自分は気になった書籍などを紹介してくれた記事からは、お礼代わりにそのリンクからAmazonへ飛んでいる。

そういったAmazonのページURLには「○○-22」というアソシエイトID文字列が付加されており、もちろん各サイトによりこのIDが違ってくる。

しかし、上記作者の拡張機能を入れて(有効にした状態で)Chromeブラウザを使用していると、そういったAmazonリンクURL内のアソシエイトIDがすべて「webkit-chrome-22」に書き換えられてしまう。

まりAmazonリンクを貼った側ではなく、いつの間にかこの拡張機能の作者(と思われるアカウント)側にアフィリエイト収益が入るように、勝手に変更されてしまう。

調べてみると、他にも気づいている人がいる模様。また、Firefox拡張機能でも同じIDに書き換えられるものがあるらしい。

Mozilla Firefox 拡張機能スレッド Part78

485 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 10:49:50.10

Google Translator Tooltip Expanded」

http://note.chiebukuro.yahoo.co.jp/detail/n192625


486 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 10:54:58.29

Google Translator Tooltip Expanded (マウスオーバー翻訳) for Greasemonkey

http://userscripts.org/scripts/show/173851


487 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 11:08:25.00

それアドオン版(>>485)のほうは>>486を勝手にいじって、

amazonリンクをアフィリンクに書き換えるアレなやつだよ

うまく書き換えができてないことが多いのかamazonリンクおかしくなって気づいたわ


492 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 12:15:18.62

xpiの中身とuser scriptとでは、コードほとんど同じで、どっちもamazon link書き換え

してるとこあるけど、アフィではなさそうだ


493 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 12:40:31.48

いや書き換えてるよ

userscript版はコードを1行にして分かりにくくしてるけどアドオン版は自動コンパイルから綺麗に見える

//特定サイトへのリンクで発生する問題回避

....

if (b.href.match("zon.co.jp")) {

if (b.href.match("-22")) {

b.onclick = function () {

this.href = this.href.replace(/&tag=.*-22/, "&tag=firefox_latest-22").

こんな感じ


494 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 12:49:32.33

firefox_latest-22とwebkit-chrome-22ってアフィなのか

だったらすまん、xpiもuser scriptも両方書き換えてるね


495 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 12:50:30.92

amazonだと-22は・・・


497 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 13:03:04.23

確か国別の識別子みたいなもんで日本のだろ


498 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 13:05:44.43

本家

http://userscripts.org/scripts/show/150664

↑これにアフィ加えたのが>>486>>485


500 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 14:20:26.20

うげげ。ホントだ、すまん。zon.co.jpで隠してたのか('A`)

firefox_latest-22ってバージョン情報かと軽くスルーしてしまった

尼に通報するは


503 : 名無しさん@お腹いっぱい。[sage] : 2013/09/11(水) 15:16:14.91

2ch嫌儲 まとめ@ ウィキ - amazon通報テンプレ

http://www6.atwiki.jp/kenmo/pages/83.html

amazonアソシエイト アソシエイトカスタマーサービス

https://affiliate.amazon.co.jp/gp/associates/contact/

・返事が返ってくるのでメールアドレスは受け取れるもの

・要ログイン(捨てID可)、件名は「アソシエイトプログラムへのご意見・ご要望」にしておく

アソシエイトID アフィリンクURLから○○-22で終わるものを探す

>>498の本家をパクり(アマゾン規約知的財産権侵害)>>485-486で「webkit-chrome-22」「firefox_latest-22」という2つのアフィリエイトIDを付加して書き換え、御社への正常なアクセスを阻害している、と通報しといた

http://i.imgur.com/nh5AbuQ.png


Mozilla Firefox 拡張機能スレッド Part80

939 : 名無しさん@お腹いっぱい。[sage] : 2014/01/06(月) 06:44:53.52

需要があるアドオンマルウェア入ってるのか


950 : 名無しさん@お腹いっぱい。[sage] : 2014/01/07(火) 13:04:41.47

>>939

去年一昨年くらいに急増した、というかメジャー表面化した事例なんだが

長年多くの人間から愛用されてきたアドオンが乗っ取られることが結構あるんだよ

アドオン開発者の開発が滞ったり、あるいはほぼ開発しつくしてVerアップメンテくらいしかなくなってるものとか

そんな放置されかけてたところをFirefox本体アップデートで使用不可能になったものとか

まあそんなディスコンしかけてたものが突然復活したりフォークして開発再開されたなと思ったら

中身にいろんな追跡関係コード仕込まれたりマルウェア化されたりね

開発者アカウント確認すると嘘くさいコピペプロフィールだったり

もともとの開発者からどういう経緯でアカウント譲渡されたのかわからんが全く別人化してたり

からこういう時の派生代替版は注意が必要

たいていはAMO審査とかで弾いてくれると思ってガード下がってるとは思うけれど


951 : 名無しさん@お腹いっぱい。[sage] : 2014/01/07(火) 13:26:36.07

2013年度総括おすすめFasterfox LiteやAutoCopyすすめてる人とかまだいるし

いくら現状ではスパイウェア部分取り除かれたとはいえ、また信用して使いたいと思うのかな


953 : 名無しさん@お腹いっぱい。[sage] : 2014/01/07(火) 13:59:01.98

WIPS.com とか ppclick(EmmaSawyersも同一人物?)あたりは話題になったよな

マルウェア注入とか、まじ勘弁してくれ


956 : 名無しさん@お腹いっぱい。[sage] : 2014/01/07(火) 16:32:34.73

Scriptにもあるぞ

http://www.logsoku.com/r/software/1374211502/481-

むかし下手に紹介してみたらそれはアフィ入りできっちり通報しといたんだが(尼だけ)、

今見たら該当部分の文字コード偽装して生き残ってるしww

んー軽く見たら楽天アフィの書き換え+複数尼アフィIDの書き換えへとパワーアップしてやがるな


961 : 名無しさん@お腹いっぱい。[sage] : 2014/01/07(火) 19:38:07.09

>>956

お同士よ

俺も通報したら尼消えてDropbox紹介リンクヤフー楽天になっててワロタw


965 : 名無しさん@お腹いっぱい。[sage] : 2014/01/07(火) 21:47:13.25

>>956>>961

尻尾掴んだかな。webkit-chrome-22でぐぐってこれ見つけた

http://b.hatena.ne.jp/YawChang/20131020

で、そいつブログがこれ

http://archive.is/MvRyY (糞アフィ作者だから魚拓)

こいつが公開してるアプリリスト(全部仕込んでることだろう)

YouTube ダウンロード自動画質設定 - YouTubeをワンクリックダウンロードできます

Text Link Plus - リンク化されていないURLリンク化する (h抜きやドメインのみにも対応)

ニコニコ動画 盛り上がりチェッカー - 再生画面の下にコメント密度を表示

Wikipedia ポップアップ検索 - 画面右上にWikipedia検索パネルを追加

パスワードを表示【マウスオーバー】 - マウスオーバーパスワードの******の内容を表示

Pixiv読み込み高速化 - Pixiv漫画素早く表示

2ch Reader Plus【軽量】 - シンプル2chブラウザ機能と、DAT落ちスレ自動復活機能を追加します。

このリンクを経由して購入すると、作者に協力できます。などとのたまいながら勝手に仕込むww

https://chrome.google.com/webstore/detail/ejdgfnjgcnlijkefghkklkdfdongggid/reviews (全ての言語を選択すると)

f aquei 2013年10月26日 ★☆☆☆☆

全てのウェブページamazonへのリンクに'webkit-chrome-22'という作者のものと思われるアフィリエイトコードがついていたのでびっくりしました。勝手に書換えてるんですね。


966 : 名無しさん@お腹いっぱい。[sage] : 2014/01/07(火) 21:59:28.00

>>965

http://blog.livedoor.jp/kamekameboy/archives/12795981.html

パクリ元のAuto HD For YouTubeスパイウェア扱いにして自分のを宣伝してる

http://chiebukuro.yahoo.co.jp/my/myspace_note.php?writer=pasenave&flg=1

http://chiebukuro.yahoo.co.jp/my/myspace_note.php?writer=ankhd4455

知恵袋でも宣伝


967 : 名無しさん@お腹いっぱい。[sage] : 2014/01/07(火) 22:22:58.00

YouTube ダウンロードと、2ch Reader Plus【軽量】という同一作者のアプリからwebkit-chrome-22に書き換えられるという苦情があるから間違いないだろう

2ch Reader Plus【軽量】についてにはここでも。

https://twitter.com/piwahup/status/413269595034624000

フムフム。ID書き換えはアマゾンアソシエイトプログラム参加条件の25番めに違反すんだなw

https://affiliate.amazon.co.jp/gp/associates/promo/participationrequirements?ie=UTF8

25. 乙は、本プログラムに参加するいずれのサイトトラフィックを(ユーザコンピュータインストールされたソフトウェア経由を含めて)妨害またはリダイレクトしようとしたり、他のサイトから紹介料を流用しようとしないものします。

ちなみに「このリンクを経由して購入すると、作者に協力できますからaguseかまして尼へ飛んでみたらmaftrackingー66465-22(-は検索避け)が付与されたからこれが本アフィ垢かな?

さらにちなみに、Google Translator Tooltipの文字コードデコードしてみたら

headerー_logo-22

footerー_logo-22

cartー_logo-22

全部ーは検索避け。これらのアフィIDもまだ暴かれてなかったからぐぐられたら簡単に見つかっちまうw どうやら2ちゃん見てるようだし。


968 : 名無しさん@お腹いっぱい。[sage] : 2014/01/07(火) 22:34:30.05

>>966

うおww ひでえw

楽天にもアフィID書き換えは違反みたいなのあるんかねえ?

Google Translator Tooltipパクリ版のソース見て、特定サイトへのリンクで発生する問題回避(笑)~//endまでを

コピってここに貼り付けるとある程度デコードされるから参考にして通報してみて。

パッと見ソース見えないとこに大量に隠されてるww

http://www.ahref.org/app/mozicode/index_2.html

最初段落楽天のアフィID書き換えで、次の段落が尼ID書き換え


969 : 名無しさん@お腹いっぱい。 : 2014/01/07(火) 22:37:29.66

>>965-967

GJ乙。

しかしこれは酷いな。久しぶりに虫唾が走ったわ。

こういうアフィカスパクリ野郎は、皆で通報するに限るな。

通報先のリンクも書いといてくれると、助かるかも。


971 : 名無しさん@お腹いっぱい。[sage] : 2014/01/07(火) 23:59:48.30

>>969

ここみたい

Amazon アソシエイトお問い合わせフォーム

https://affiliate.amazon.co.jp/gp/associates/contact/send.html


972 : 名無しさん@お腹いっぱい。[sage] : 2014/01/08(水) 00:19:31.54

>>966

パクリさんの質問一覧

2013/08/2720:20:21 DOMNodeInsertedを、MutationObserverで書き換えようと...

2013/08/2408:59:42 Javascriptで、URLを置き換えたあとでそれにrel="norefe...

2013/08/2121:13:54 Greasemonkeyスクリプトの書き方についての質問です。ht...

2013/08/0321:32:42 リンククリック時に処理を中断させ、そのURLを書き換え...

2013/07/1810:44:21 以下のスクリプト部分的しか動作しません。何が問題...

2013/07/1417:41:59 Javascriptの書き方についてhttp://www.programming-mag...

2013/07/1202:14:03 【500枚】GreasemonkeyスクリプトにおけるURL置き換え...

この人アフィIDの書き換えしかプログラムからなさそう

公開してるの全部パクリだな

どうにかならないかな、こういうの。

追記

http://anond.hatelabo.jp/20140201015142 とかの対処 via https://twitter.com/polygon_planet/status/429753156231114752

2012-01-27

[] Firebugログ上限に達しました。

エラーメッセージFirebugログ上限に達しました。n 件表示されませんでした。」

about:configextensions.firebug.console.logLimitを増やす。

既定値は500件。

2011-11-19

Firefoxアドオンマネージャからノートンを除外する方法

セキュリティの設定なので実施自己責任で。

Windows 7 - Firefox 8.0 - Norton Internet Security(NIS) 2011 の場合

 

(xはバージョン番号)

1. NIS - 設定 - その他の設定 - 製品セキュリティ で「Norton製品の改変対策」を「OFF」にする。

2. C:\ProgramData\Norton\{0C55C096-0F1D-4F28-AAA2-85EF591126E7}\NIS_xx.x.x.x\

  内にある次のフォルダリネームする。

  ・coFFPlgn_xxxx_x_x_x → coFFPlgn_xxxx_x_x_xOLD

  ・IPSFFPlgn → IPSFFPlgnOLD

  ※WindowsXPでは C:\Documents and Settings\All Users\Application Data\Norton\{0C55C096-0F1D-4F28-AAA2-85EF591126E7}\NIS_xx.x.x.x\ (未確認)

3. Firefox再起動する。

 

元に戻したい時は、リネームしたフォルダを戻して「Norton製品の改変対策」を「ON」にする。

なお、OS再起動するとフォルダが強制的に作成されるようなので、その都度2.の実施が必要。

 

 

(おまけ)Java Console を削除する方法

C:\Program Files\Mozilla Firefox\extensions\

内にある {CAFEEFAC で始まるフォルダリネーム

2009-03-30

知ってるとちょっと幸せになれるSleipnirTips

以外と知られてないやつ。とりあえず設定項目をいじらずに出来るものをご紹介。

IEで開く。表示が崩れたりイマイチ上手く動作しないページなんかあるときに便利。ちなみにシングルクリックリロード。今動作を確認するためにクリックしてうっかり文章飛ばしてorz

→最後に開いていたタブを復元。ちなみにタブをホイールクリックすると閉じます。ダブルクリックロック(Close禁止)。ちなみにデフォルト設定だと確かここでホイール回せばタブ切替になるはず。タブバーの空白部分は右クリックコンテキストメニューも充実してるので一見の価値有り。

インストールしてあれば描画エンジン切替。SeaMonkeyGeckoらしい。比較的FireFoxに近いページ表示になるはず。IE6なんか入ってる状態で使ってると最近はページが崩れまくったり右上にアナログって出てきたりするので、知ってればちょっと便利。

少ないけどだいたいこんなもので。個人的には至極当たり前ではあるんだけど便利なのが、Alt+R → スクリプトの整理。スクリプト一覧がエクスプローラーで表示されるんだけど、結構中のフォルダいじって直接スキンおいたりする自分にはかなり便利。分からない人はSUECとかいってみましょう。

�z�[���bSleipnir Unofficial Extensions Center

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>

これで終わりです。

2008-03-15

[][]PythonからSWIG経由でVisual Studio 2005を使って困ったこと

以上のような組み合わせで出くわした困ったことと、その解決策をメモしておきます。

setup.py を実行するとエラーが表示された!

Python was built with Visual Studio 2003;

extensions must be built with a compiler than can generate compatible binaries.

Visual Studio 2003 was not found on this system. If you have Cygwin installed,

you can try compiling with MingW32, by passing "-c mingw32" to setup.py.

setup.pyに.iファイルとか.cppファイルを記述して実行すると、こんな感じのエラーメッセージが表示されました。うーん、困った!

http://labs.cybozu.co.jp/blog/mitsunari/2007/08/vc2005boostpython.html

上記のページを参考にして、"%Pythonインストールしたフォルダ%/Lib/distutils/msvcompiler.py"を以下のように修正してみたら解決できました。ありがとうありがとう

--- msvccompiler.py    2007-04-04 17:17:12.000000000 +0900
+++ 
@@ -126,7 +126,7 @@
         self.set_macro("FrameworkDir", net, "installroot")
         try:
             if version > 7.0:
-                self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1")
+                self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv2.0")
             else:
                 self.set_macro("FrameworkSDKDir", net, "sdkinstallroot")
         except KeyError, exc: #
@@ -252,7 +252,10 @@

     def initialize(self):
         self.__paths = []
-        if os.environ.has_key("DISTUTILS_USE_SDK") and os.environ.has_key("MSSdk") and self.find_exe("cl.exe"):
+        if self.__version >= 7.1 or (
+            os.environ.has_key("DISTUTILS_USE_SDK") and
+            os.environ.has_key("MSSdk") and
+            self.find_exe("cl.exe")):
             # Assume that the SDK set up everything alright; don't try to be
             # smarter
             self.cc = "cl.exe"
@@ -288,10 +291,16 @@

         self.preprocess_options = None
         if self.__arch == "Intel":
-            self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GX' ,
-                                     '/DNDEBUG']
-            self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GX',
-                                          '/Z7', '/D_DEBUG']
+            if self.__version >= 7.1:
+                self.compile_options = [
+                    '/nologo', '/Ox', '/MD',  '/W3', '/EHsc', '/DNDEBUG']
+                self.compile_options_debug = [
+                    '/nologo', '/Od', '/MDd', '/W3', '/EHsc', '/Z7', '/D_DEBUG']
+            else:
+                self.compile_options = [
+                    '/nologo', '/Ox', '/MD',  '/W3', '/GX',  '/DNDEBUG']
+                self.compile_options_debug = [
+                    '/nologo', '/Od', '/MDd', '/W3', '/GX', '/Z7', '/D_DEBUG']
         else:
             # Win64

cl.exeが見つからないと言われた!

setup.pyを実行するとcl.exeが見つからないみたいなエラーが表示されました。これは、アレだ。「パス通せ!」ということですね。bashを起動するときのバッチファイル(たぶん"cygwin.bat"とか)で、以下のような行を入れてやれば解決しました。

call "%VS80COMNTOOLS%vsvars32.bat"

setup.pyを実行したときに"basetsd.h"が開けないと言われた!

d:\python25\include\pyconfig.h(189) : fatal error C1083: include ファイルを開けません。'basetsd.h': No such file or directory

error: command 'cl.exe' failed with exit status 2

setup.pyを実行すると、上のようなエラーが表示されました。

http://d.hatena.ne.jp/ousttrue/20070531/1180556273

上記のサイトを見るとインクルードパスが通っていない場所に"basetsd.h"があるのが原因なので、"cygwin.bat"にインクルードパスの設定をしておきました。

call "%VS80COMNTOOLS%vsvars32.bat"
set INCLUDE=C:\Program Files\Microsoft Platform SDK\Include;%INCLUDE%

setup.pyを実行したときのリンク時にエラーが発生した!

link: extra operand `/INCREMENTAL:NO'

詳しくは `link --help' を実行して下さい.

error: command 'link.exe' failed with exit status 1

これは、cygwinのほうのlink.exeが実行されてるのが原因でした。スマートな解決策ではありませんが、cygwinのほうのlink.exeをリネームして解決。パスの設定順序とかでどうにかできるといいんだけど、どうすればいいんかな。

MSVCR80.dllが見つからないと言われた!

MSVCR80.dllが見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションインストールし直すとこの問題は解決される場合があります。

SWIGが生成した.pyファイルをimportしたら、こんな感じのエラーダイアログが表示されたよ。うーん、困った!

http://d.hatena.ne.jp/moriyoshi/20070525

上記のページを参考にして、"%Pythonインストールしたフォルダ%/python.exe.manifest"として以下のようなファイルを新しく作ったら、解決できました。ありがとうありがとう

あとこれ、bashから実行したらエラーダイアログが表示されず、importするモジュールが見つからないみたいなエラーメッセージが出力されるだけだったよ。

<?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>
 
アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん