はてなキーワード: extensionsとは
Also not paying taxes on tips is an incredibly stupid way to go about distributing a tax benefit. If you want to cut taxes for lower income, do that. Change the income thresholds or the marginal tax rate, don’t just change taxes on an income stream that is mostly correlated with lower incomes.
Server here. I was saying this the first time he announced it. Wtf would WE get this bonus and noone else. Makes ZERO sense until you realize... he was buying younger votes
Not to mention tipping is out of hand as it is, we shouldn’t be trying to create more tax incentives for it.
Worse than that. It lets them tie tax break extensions to a future, wildly unpopular bill. That’s how “the Big Beautiful Bill” got passed. No one was going to vote to not extend the last round of temporary tax cuts for the middle class. They would crow about the other problems in the bill, but the powers that be weren’t going to remove any of the problem elements. They would just label anyone who didn’t vote for the bill as for a tax increase...........
Chrome/Firefoxのはてブ機能拡張は配布されているが、Mac版Safariの機能拡張は数年前から配布されていない。
Safariに乗り換える際の個人的な障壁であったが、Chrome版機能拡張をSafari向けに変換して利用する事ができたので、メモ代わりに記しておく。
1. Chromeのアドレスバーに「chrome://extensions/」と打ち込み、機能拡張の画面を表示する。
3. 同画面内の「はてなブックマーク」の欄に表示されている「ID:xxxxxx」を次手順で使用する。
4. FinderでChromeのはてブ機能拡張がインストールされているフォルダが存在する事を確認する。
/Users/(ユーザー名)/Library/Application Support/Google/Chrome/Default/Extensions/(手順3のID名)/(バージョン番号)
5. ターミナルを起動して、以下コマンドを入力後にReturnキーを押す。この際に「Is this correct?」と表示されたら「yes」と入力後にReturnキーを押す。
6. XCodeが起動されるので[▶]ボタンを押して、Safari向け機能拡張をビルドする。(ビルド後に起動されたアプリは終了して良い)
7. Safariを起動して、「開発」>「未署名の機能拡張を許可」を押す。(「開発」メニューは、「Safari」>「環境設定」>「詳細」>「メニューバーに“開発”メニューを表示」で表示される)
8.「Safari」>「環境設定」 > 「機能拡張」にてはてブ機能拡張のチェックを入れ有効化する。
9. Safariのアドレスバーの横にはてブのアイコンが表示されていればインストール完了。
1. はてブのアイコンに [▲] のアラートが表示されている場合、アイコンを押して「すべてのWebサイトで常に許可」を選択する。
2. はてブのアイコンを押すと表示される利用規約画面で「同意する」を押す。(なお「同意する」を押しても何もリアクションがないので、手動でタブを閉じる必要がある)
3. はてブのアイコンを押して見慣れたはてブコメント一覧が表示されていれば設定完了。
上記手順では基本的にSafariを再起動する度に「未署名の機能拡張を許可」を行ってはてブ機能拡張を有効化する必要がある。
メニューから選択するだけの手間であるが、頻繁にSafari/Macを再起動するので面倒という場合には以下手順にて機能拡張に署名を行っておく。
1. 上述したインストール手順の「手順6」にてXCodeが開いている状態で画面内サイドメニューから「はてなブックマーク」を選び、画面中央上部の「Signing & Capabilities 」タブを押す。
2.「Signing」>「Team」で自身のApple IDを選択する。(選択リスト内に存在しなければ「Add an Account…」でアカウント追加後に選択する)
3.「Signing」>「Signing Certificate」で「Developement」を選択する。
4. 手順2-3を「Target」の「はてなブックマーク」と「はてなブックマーク Extension」の両方で実施後、[▶]ボタンを押して、Safari向け機能拡張をビルドする。
5. Safariにて「開発」>「未署名の機能拡張を許可」を外した状態でもはてブ機能拡張が表示されていれば完了。
Chrome+Google日本語入力でそんな酷い変換ラグが発生するのは考えにくい。おま環のトラブルもしくはバグだろう。OS等の環境は?
光回線は関係ない。辞書データはメモリに展開されているから変換候補を出すのに通信などしていない。その変換が重いのは常時なのか、たまになのか、特定のページでなのか、重い時のCPUやディスクI/Oはどうなっているのか、リソースが逼迫しているせいで重くなっているならどのプロセスが重くしているのか(IMEとは限らない)、リソースが問題ないならレンダリングの問題はないか、特殊なレンダリングソフトを入れてたりブラウザ側のレンダリング系の実験機能を弄ってないか、……いやこのへんはなんとなく当たらない気がする。
俺が昔にGoogle日本語入力でトラブルに遭遇したときは、だいたいIMEをアンインストールして再インストールしたら直った。OSのグレードアップ時やメジャーバージョンアップ時に不具合がでるようになった記憶がある(ここ数年はクリーンインストールすることが多かったので遭遇してないが)。
あとは64bitOSなら64bit版を入れているかどうか(最近は自動で正しい方が選択されるはず)、ChromeもIMEも最新バージョンになっているか。
他にはChromeに入れている妙な拡張機能が悪さをしていないか。拡張機能を無効で起動するには--disable-extensionsオプションが潰されて無ければ使えると思うが、beta版など普段使いと違う開発チャンネルのChromeを新規で入れて試してみてもいい。
私はコミットログの書き方に悩む英語の苦手な人間である。実際、似たような人は世の中に結構いるようで、頻出単語を集計したりまとめたものは既にあって役に立つのだけれど、これらはあくまで単語の話であり、具体的な文を構成する過程でやっぱり困る部分がかなりあった。
要するに、どういう時にどういう文が使われているのか、ということを示した例文集が欲しいのである。ググると他にも「例文集があればいいのに」みたいな声はあるくせして、しかし誰も作ろうとしない。何なんだお前ら。それじゃ私が楽できないじゃないか。
ここで挙げているコミットログは全て実際のコミットログからの転載である。当然ながら各コミットログの著作権はそれぞれの書き手にある。いずれも各英文でググれば出てくるし、フェアユースの範囲なら許してくれるだろうと考え名前とプロジェクト名は割愛したが、ここにお詫びと感謝を述べておきたい。
抽出条件だが、参考にできそうなコミットログを多く含んでいそうなリポジトリをGitHubのSTARの多い方からざっと目で見て適当に選び、それぞれ最新コミットから5000件抽出した(あわせて前処理として、コミットログ冒頭のタグ情報は消去した)。
atomのみ5400件抽出していたため、計25400件のコミットログがベースである。このうち、以下の条件に合致するものは参考例にすべきでないとして一律排除した。
こうして残った8540件を眺めながら、適当に切り出したのがこの用例集である。個人的に「うーんこの」と思った表現も、散見される場合は載せた。
ということで、以下用例を羅列していく。
以上の用例をふまえ、今回の参考ログ8540件から先頭の単語を出現回数で並べると次のようになった。
| Add | 1149 |
| Fix | 1014 |
| Update | 584 |
| Remove | 566 |
| Use | 382 |
| Don't | 260 |
| Make | 228 |
| Move | 178 |
| Change | 103 |
| Rename | 85 |
| Improve | 76 |
| Avoid | 68 |
| Allow | 65 |
| Implement | 60 |
| Handle | 58 |
コミットログの基本形はもちろん動詞 + 名詞である。名詞は固有名詞、複数形、不可算名詞が多いが、単数形の場合の冠詞は a が使われるか、あるいは省略される。the はまず使われない。
何かを追加した、という表現では非常に広く Add が使われる。メソッドからテスト、ドキュメントに至るまで大概これでまかなえる。
一方、何かを修正した、という表現では広く Fix が使われる。「何か」は typo や crash といった単語からメソッド名まで幅広い名詞を取るが、動名詞はあまり取らないのと、that節は取らないのでその点は注意が必要である。
Fix は「何かが正しく動くようにした」ことを示し、正しい動作内容が何かを説明しない。そこで正しい動作内容に言及したい場合は Make sure が使われる(こちらはthat節が取れる)。ただし Fix よりもニュアンス的に重い表現と思われ、Fix を使わず Make sure ばかり使うのはちょっとキモいのではないかと思う(Ensure はさらに重い表現っぽい)。
また、Fix は typo 以外でのドキュメント修正に対して使われることは稀である。対して 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以上用例を転載してあるので、それを読むだけでも多少は効果があるんじゃないかと思う。同じようにコミットログ書きたくねぇなぁ英語わっかんねぇなぁと思っている人にとって、何か役に立つところがあれば幸いである。
インストールすると、例えばWindowsの場合「\Users\(ユーザー名)\AppData\CromeCache\UserData\(Profile名)\Extensions」の中に拡張機能のファイル一式が入る。
この拡張機能の場合は「clkiaalhgfhgcllngddndbghoaahhnfa」というフォルダが出来上がるので、その中に全部入ってる。
さて、裏で常時起動していないとダメなものなので"persistent": falseが無いのは仕方がないのですが、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")) {
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
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
https://affiliate.amazon.co.jp/gp/associates/contact/
・要ログイン(捨てID可)、件名は「アソシエイト・プログラムへのご意見・ご要望」にしておく
・アソシエイトID アフィリンクURLから○○-22で終わるものを探す
>>498の本家をパクり(アマゾン規約、知的財産権の侵害)>>485-486で「webkit-chrome-22」「firefox_latest-22」という2つのアフィリエイトIDを付加して書き換え、御社への正常なアクセスを阻害している、と通報しといた
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-
むかし下手に紹介してみたらそれはアフィ入りできっちり通報しといたんだが(尼だけ)、
んー軽く見たら楽天アフィの書き換え+複数尼アフィ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検索パネルを追加
パスワードを表示【マウスオーバー】 - マウスオーバーでパスワードの******の内容を表示
2ch Reader Plus【軽量】 - シンプルな2chブラウザ機能と、DAT落ちスレの自動復活機能を追加します。
このリンクを経由して購入すると、作者に協力できます。などとのたまいながら勝手に仕込むww
https://chrome.google.com/webstore/detail/ejdgfnjgcnlijkefghkklkdfdongggid/reviews (全ての言語を選択すると)
全てのウェブページの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
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置き換え...
公開してるの全部パクリだな
どうにかならないかな、こういうの。
http://anond.hatelabo.jp/20140201015142 とかの対処 via https://twitter.com/polygon_planet/status/429753156231114752
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\ (未確認)
元に戻したい時は、リネームしたフォルダを戻して「Norton製品の改変対策」を「ON」にする。
なお、OSを再起動するとフォルダが強制的に作成されるようなので、その都度2.の実施が必要。
C:\Program Files\Mozilla Firefox\extensions\
以外と知られてないやつ。とりあえず設定項目をいじらずに出来るものをご紹介。
→IEで開く。表示が崩れたりイマイチ上手く動作しないページなんかあるときに便利。ちなみにシングルクリックでリロード。今動作を確認するためにクリックしてうっかり文章飛ばしてorz
→最後に開いていたタブを復元。ちなみにタブをホイールクリックすると閉じます。ダブルクリックでロック(Close禁止)。ちなみにデフォルト設定だと確かここでホイール回せばタブ切替になるはず。タブバーの空白部分は右クリックのコンテキストメニューも充実してるので一見の価値有り。
→インストールしてあれば描画エンジン切替。SeaMonkeyのGeckoらしい。比較的FireFoxに近いページ表示になるはず。IE6なんか入ってる状態で使ってると最近はページが崩れまくったり右上にアナログって出てきたりするので、知ってればちょっと便利。
少ないけどだいたいこんなもので。個人的には至極当たり前ではあるんだけど便利なのが、Alt+R → スクリプトの整理。スクリプト一覧がエクスプローラーで表示されるんだけど、結構中のフォルダいじって直接スキンおいたりする自分にはかなり便利。分からない人はSUECとかいってみましょう。
Visual Studio 2005しかインストールしてない場合、Python 2.5だとdistutilsが正しく動かないっぽいので、どうにかしたいYO!
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の公式ダウンロードページから、Windows版のインストーラーをダウンロードして、適当な場所にインストールしてください。
"Python-2.5.2/Lib/distutils"を別の場所に移動し、"Python-2.6a1/Lib/distutils"を"Python-2.5.2/Lib"以下にコピーしてください。以降はPython 2.6は必要ないので、アンインストールして構いません。
上記の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:
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>
これで終わりです。
以上のような組み合わせで出くわした困ったことと、その解決策をメモしておきます。
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
setup.pyを実行するとcl.exeが見つからないみたいなエラーが表示されました。これは、アレだ。「パス通せ!」ということですね。bashを起動するときのバッチファイル(たぶん"cygwin.bat"とか)で、以下のような行を入れてやれば解決しました。
call "%VS80COMNTOOLS%vsvars32.bat"
d:\python25\include\pyconfig.h(189) : fatal error C1083: include ファイルを開けません。'basetsd.h': No such file or directory
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%
link: extra operand `/INCREMENTAL:NO'
詳しくは `link --help' を実行して下さい.
これは、cygwinのほうのlink.exeが実行されてるのが原因でした。スマートな解決策ではありませんが、cygwinのほうのlink.exeをリネームして解決。パスの設定順序とかでどうにかできるといいんだけど、どうすればいいんかな。
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>