のほほんのおと

IT系、音楽、映画、旅行などなど。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【トラブル】Windowsの暗号化でファイルコピー失敗

俺の無知とWindowsの分かりづらさという奇跡のコラボで素敵にハマった話し。

【 状況 】

PCを新調したので、データ移行をしようとしていた。
大量で大きなデータをどう移行したものかと考え、試行錯誤した結果、USB接続外付けHDDを介することにした。

外付けHDDに移行元であるPC1からデータをコピー。
そして移行先のPC2に外付けHDDをつなげ、データをコピーしようとした時にトラブった。

環境 : PC1,2ともにMS-Windows7 Professional Edition。


【 現象 】

外付けHDDにあるファイルをコピーしようとすると、
「このファイルを変更するには、XXXXからアクセス許可を得る必要があります」
というメッセージが出る。
「"変更"ってなんだ?コピーするだけなのだが?」と戸惑う。
それに「XXXX」の部分なのだが、大抵はこういう権限許可の時は「管理者」なんて出ている。
でも、今回は「S-1-5-21-55640950-~」とやたら長くて謎なものだった。
ともあれ、続行。
でも、すぐにまた同じダイアログが出てどうにもならなくなる。


【 調査、迷走 】

さっさと原因を知りたいひとはこちらへ。

まずは謎の所有者の変更を試した。
ファイルのプロパティを開く。
タブ「セキュリティ」へ。
「詳細設定」ボタン。
タブ「所有者」へ。
「編集」ボタン。
リストにあるログインユーザにした。
管理者権限も持っている奴だ。
所有者の変更はできた。俺自身だ。これでこのファイルをどうしようと勝手なはず。
でも、ダメ。現象変わらず。

またアクセス権限の話しだろうととりあえず片っ端からフルコントロールにしてみた。
権限は後できちんとすればいいや、ととにかく一時的にフルコンに。
それでも、ダメ。

Windowsの場合、とりあえずこういう時はリブートを試してみるに限るよなぁ。
でも、ダメ。

元々その外付けHDDにあって普通にコピーできるやつと、今回NGなやつを比較する。
プロパティで気になる違いを見つけた。
ファイルを右クリックして「プロパティ」で以下へ。
タブ「全般」 > 属性 > ボタン「詳細設定」
コピーできない方は以下にチェックが入っている。
「内容を暗号化してデータをセキュリティで保護する」
このチェックを外そうとしたが、最後の「適用」ボタンでまた叱られる。

なんかすごくこれっぽい感触。
でも、どうしたらいいのかさっぱり分からない。

ここでちょっと調査の方向を変える。
問題のファイルをPC1からPC2へLANを介してコピーしてみた。
大量だとやってられないので外付けHDDを使っているのだが、1ファイルだけの実験だ。
するとコピーする際に「暗号化を解除するぞ」みたいに出た。
そしてコピーができた。

それと、PC1の方ではPC2では失敗した「内容を暗号化してデータをセキュリティで保護する」のチェックも外せる。
こうしてからだと外付けHDDを介してもコピーができるようになった。

ということで、この暗号化とやらが原因と確信。
でもって情報探し。


【 原因 】

いつの間にか特定のフォルダ以下がEFS(Encrypting File System:暗号化ファイル システム) で暗号化されていた。
そのため、移行先のPCでの復号化に失敗していた。

せめてエラーメッセージに「暗号化されてるでよ」みたいのがほんのちょっとでも入っていてくれたらも少し早く気づけたのに・・・


【 対応 】

方法は2つ考えられた。
方法1. PC1の方で復号化しておく
方法2. PC1のデジタル証明書をPC2に持っていき、PC2でも復号できるようにしてからPC2で復号化を実行

面倒そうだけど方法2をとった。
なにせPC1は古いので復号化なんて重い処理はきっとゲロ遅になると考えたためだ。
この判断は当たりで全然速度が違った。
それに思ったほど面倒な話しでも無かった。

具体的な方法は、以下。

1. PC1でデジタル証明書をエクスポートする。
1.1. Internet Explorer(IE)を起動する。
1.2. 「ツール」 > 「インターネットオプション」 > タブ「コンテンツ」 >  「証明書」ボタン押下
1.3. タブ「個人」へ。
1.4. リストにあるもののうち、選択すると「証明書の目的」に「暗号化ファイルシステム」と表示されるものを選ぶ。
1.5. 「エクスポート」ボタンで任意のファイルに出力する。

2. PC2でデジタル証明書をインポートする。
2.1. 証明書ファイルをダブルクリックで開く
2.2. あとはウィザードに従ってインポート。
詳しい内容は覚えてないけど、普通に進んだだけ。

3. PC2で外付けHDD中のファイルを復号化
3.1. 問題のファイル群がある一番上のフォルダを選択。
3.2. フォルダのプロパティを開き、以下へ。
タブ「全般」 > 属性 > ボタン「詳細設定」
3.3. 「内容を暗号化してデータをセキュリティで保護する」のチェックを外し、適用。
このとき、サブフォルダなども復号化するようにチェックを入れること。


【 補足情報 】

証明書のインポート/エクスポートは以下がハードコピーもあって分かりやすい。
情報漏えい時代のパソコン必修スキル 秘密のファイルは暗号で守れ(前編)
http://www.nikkeibp.co.jp/sj/2/special/170/index2.html

今回は使わなかったが、コマンドラインで暗号化を操作する方法が以下にある。
暗号化属性の一括解除
http://arrow3.way-nifty.com/shige/2004/08/windows_.html

テーマ:Windows - ジャンル:コンピュータ

【Android/iPhone】クロスプラットフォーム開発ツールの選定

【 はじめに 】
Android、iPhoneなど複数のプラットフォームで動くアプリを作れるツール、開発環境、ライブラリなどで何がいいかを調査、選定してみたよ。

【 動機 】
Androidアプリを作りたいとは以前から思っており、少し勉強もしていた。
が、とある事情があり、iPhoneアプリも作る必要ができた。
でも、俺はMac環境を持っていないし、今のところは揃えるつもりもない。
どちらにしろ同じアプリをAndroidとiPhoneとでネイティブアプリを作るなんて大変でやるつもり無し。

ということで、複数のプラットフォームで動くものを、となったという経緯。
そこで最近よく聞くクロスプラットフォーム開発のツールを探してみることにした。

正直、iPhoneアプリに興味は無かった。
以前にiPhoneは使っていたけど、Androidに乗り換え、二度と戻るつもりは無かったし。
クロスプラットフォーム開発のツールにしても、なんかそれぞれのOSの機能を最大限引き出すことなんてできず、各OSの最大公約数的なことしかできないものというイメージがあり、これまた興味が無かった。
ということで全然まったく詳しく無いのでほとんどゼロベースでの調査開始となった。
こりゃ大変。


【 要件 】

ツールによって色々な特色、向き不向きがあると思うので、まずは自分が求めるところを整理してみる。

・動いて欲しいプラットフォームは最低限以下。
  ・Android携帯電話
  ・iPhone
  その他にもAndroidタブレットやiPad、WindowsPhone、Blackberryとかあるけど、二の次で。

・iOS環境が無くてもiPhone用アプリがビルド可能。

・アプリ開発用。
  逆に言うと、ゲーム開発に特化、あるいは向いているというものは除外。

・無償あるいはなるべく安価に済む。

・Google Documents、Evernoteなどのクラウドサービスと連携できる。

【 選定候補 】

まずリストアップした候補は以下だった。
  CoronaSDK
  PhoneGap
  Titanium Mobile
  SenchaTouch
  Intel XDK

要件にも書いたようにゲームではなくアプリを作りたいので、ゲーミングフレームワーク的なものは最初から除外した。
最近Unityとかかなりきているみたいだけど除外、みたいな。

【 調査、選定 】

感触レベルなのだが、以下は除外することにした。
  Titanium Mobile
    XCodeつまりiOS環境も必要というところが俺にとって致命的。

  SenchaTouch
    これはどちらかというとゲーミングフレームワークという側面が強いみたい。
    それと、WEBアプリ用なのでWEBサーバが必須、つまりネットワーク環境が必須というのもいまいち。
    WEBサーバを立てる必要もあるし。
    ただし、"UIフレームワーク"としてPhoneGapと組み合わせて使うという手もあるらしい。
    単体では使うつもりは無いけど、そういう使い方で採用という芽はある。

で、残ったのは以下。
  CoronaSDK
  Intel XDK
  PhoneGap

さらに絞って以下とすることにした。
  CoronaSDK
  Intel XDK

ただし、PhoneGapは不採用ということではない。
実はIntel XDKはPhoneGapの機能を使っているらしい。
だからIntel XDKを採用するということは、PhoneGapを採用するということでもある。多分。

PhoneGapだけだとUI面が弱く、SenchaTouchなどと組み合わせる必要があったりするらしい。
それもIntel XDKを使えば不要になるのでは?UIフレームワークも包含されているのでは?と期待している。

この2つを簡単に比較してみる。
  CoronaSDK
    開発言語:Lua
    ビルド方法:(無償版)クラウドビルド、(有償版)ローカルビルド
  Intel XDK
    開発言語:JavaScript
    ビルド方法:クラウドビルド

ちょっと比較する要素が足りないな。
ただ、CoronaSDKはLuaを使うという点でいまいちと感じている。
簡単な言語ということだけど、新しい言語をこれだけのために覚えるのはめんどい。
でも、CoronaSDKはフルスタックそろった開発環境っぽいのが魅力的ではある。
Intel XDKの方はまだ未知数だけど、エミュレータ機能とかが強力っぽい。
CoronaSDKと比べて完全にフリーらしいし。
天下のIntelが出しているのでなんとなく安心感もある。
などなど、色々と悩ましいのだが、まだ決定打が無い。
やっぱりもうちょっとそれぞれ詳しくを調べる必要がありそうだな。

「 CoronaSDK 」
  開発言語:Lua
  ビルド方法:(無償版)クラウドビルド、(有償版)ローカルビルド

  無償版のSTARTERで商用アプリまで作れるようになった。

  ローカルビルドができるとずっと勘違いしていたのだが、それは有償版だけらしい。
  ま、これはいっか。

  以下の機能はPRO版以上らしい。
    「各プラットフォームのAPI(Java/Obj-C)に、Luaからアクセスできます(参考:Android/iOS)」
  逆に言うと使いたかった無償版のSTARTERじゃダメ、と。
  これはでかいかも・・・

  ちなみにPRO版は599ドル/年。今のレートで日本円にして58,911円。こりゃ無理だわ・・・

  どうもこれ、ゲーム用という側面が強いみたい。それも2Dの。
  普通のアプリも作れるけど、ゲームが主なターゲットみたいな。

  これはどうも俺の要件には向いてないかなぁという気がしてきた。


「 Intel XDK 」
  開発言語:JavaScript
  ビルド方法:クラウドビルド

  2013/04発表とごく最近出てきたツール。

  XDKはGoogle Chromeのエクステンションとして実装されている。

  いわゆるHTML5+CSS3+JavaScriptのスキルでできる。

  情報が少なくて不安だ。
  まだ4月に出たばかりだからかなぁ。当然、本も無いし。
  すぐに「英語サイトを読む必要がある」となりそうな・・・

  でも、ま、基本は「HTML5+CSS3+JavaScript」なんだし、こっちの情報はふんだんにある。
  XDKのツールとしての使い方はそんなものすごい大変じゃあるまい。

  ただ、なんか日本語の扱いが怪しいみたいなことが書かれているのが気になる。
  もう直っているか?

このあたりでもう「CoronaSDKは無いな」、という気分になっている。
お金の問題が一番でかい。
それに金銭面でのハードルが高いということは、参入も少なく、すなわち世の中に出回る情報も少なくなる気がする。
このツールは仕事で使う人やゲーム会社など、プロ向けという感じがする。

では、Intel XDKかということ、これはこれでいまいち不安要素がある。
日本語の情報が少なすぎて判断もできないのだが・・・
さて、どうしたものか?


【 選定結果 】
やっぱり Intel XDK でいくことにした。

http://html5dev-software.intel.com/

以下、選択理由。
  ・開発がHTML5+CSS3+JavaScriptとツブシのきくものになっている。
    俺が今現在得意ということではないが・・・
  ・無償。
  ・iPhoneのバイナリのビルドにもiOSなどの環境が不要。
  ・最新のツール。
    最後発なので一番いい?と期待。枯れてないのでは?という話しもあるけど。
  ・天下のIntelという安心感。
  ・PhoneGapという実績のあるものを組み込んでいる。
    もし、XDKがダメになっても、PhoneGapのスキルは生きると期待。
  ・他に候補にしていたツールがことごとくダメというネガティブな理由もある。

以下、不安要素。
  ・2013/04発表と新しいツールなので情報が少ない。
    特に日本語での情報が少ない。せいぜい「インストールして試してみました」レベルばっか。
  ・新しいツールなので将来性が見えない。
    あっさりとぽしゃる可能性もある?
    天下のIntelなので見切りつけるのも早そうな気もする。
    "採算度外視のオープンソースプロジェクト"だったり、
    "このツールの成否に社運をかけている"なんてのと違って・・・
  ・Intel XDKそのものに加え、HTML5+CSS3+JavaScript、そしてPhoneGapと覚えることが多い。
    1つで完結しているフルスタックなツールと違ってなんとなく学習コストが高そうな気が。

こんなもんかな。
とりあえずはこれで行ってみることにする。
もしこれがダメでもHTML5+CSS3+JavaScriptとPhoneGapに関するスキルは残ると期待できるし。


【 余談 : wishscope 】
  調査中に面白そうなサービスを見つけた。
  プログラミングはできるけど、絵とか描けないという人のブログだ。
  俺と同じ悩み。
  その人はこのwishscopeというサービスでデザイナーさんを募集し、アイコンとスプラッシュスクリーンを3000円で作ってもらったそうな。
  使えるかもしれんのでメモメモ。
  
  みんなの募集コミュニティWishScope [ウィッシュスコープ]
  http://www.wishscope.com/
  
  誰かのお願いをソーシャルグラフで解決する「WishScope(ウィッシュスコープ)」
  http://blogs.itmedia.co.jp/shakaikouken0023/2013/02/wishscope-945f.html

  Facebook社も注目するサービス『WishScope』原田CEOインタビュー
  http://getnews.jp/archives/187301

以上

テーマ:プログラミング - ジャンル:コンピュータ

ウチのバックアップ環境構築

【 発端 : やっちまった! 】

先日、ヒヤリとしたことがあった。
自炊した本・雑誌・マンガのデータがわんさと入っているUSB接続外付けHDDの中身がスッカラカンになったのだ。でも、実際にデータが消えたわけではなく、PCをリブートしたらまた見えるようになり、ほっとした。
とは言え、バックアップの必要性を痛感させられた。もうDVD-Rなどではバックアップできるデータ量ではなくなり、バックアップそのものをすっかり諦めてからずいぶんと経つ。でも、さすがになんとかせねば、と。

そう思いつつもついつい面倒で後回しにしていた。
そしてつい先週、とうとう事件は起きた。

俺は「知子の情報」というソフトをずっと愛用している。「テキスト型データベース」というジャンルのソフトだ。
もうまったく新バージョンも出なくなり、すっかり古びているので乗り換えたいのだが、乗り換え先のいいソフトが無く、ずっと使っている。
このソフトに俺はとにかくなんでも入れていた。日々のどうでもいいメモ帳の転記から、銀行やら色々なWEBサービスのアカウント情報、マジメに色々と想うところ、Etc・・・

無論、このデータはお金を出しても二度と手に入れられるわけがない。そんな大事な代物。
それが先週、ぶっ飛んだ・・・
「知子の情報」がクラッシュした。それ自体はたまにあることなので、あまり気にせず、再起動。
でも、いつもと違った様子。なんと、データ数がゼロに・・・「体温がすっと下がる」という感覚を久しぶりに味わってしまったよ。
その後必死で修復を試みたが、戻らず・・・

その後、まだバックアップしていたころのデータファイルやDVD-Rやらなにやらを探した。いくつか出てきた。
それで復旧できたのが2009/06まで。現在、2012/08。実に約3年分のデータが吹き飛んでしまった・・・

泣こうがわめこうがもう消えたデータは戻らない。
危険な状態と分かっていながら、なんでバックアップをきちんとしようとしなかったのだろう?
面倒なのは確かだが、万が一のことが起きたらどうなるか分かっていたはずなのに?
多分、「今まで大丈夫だったし、ま、これからも大丈夫だろう」という正常化バイアスってやつがかかっていたのだろう。
万が一のことがあったらどうなるか分かっている、とは言いつつも、実はもうひと押し想像力が足りなかったのかもしれん。

さすがに今度の今度こそ本気で反省。
ということで、改めてバックアップ環境をマジメに作った、という話し。


【 バックアップ方針 】

DVDはもちろん、Blu-rayでも追いつかないデータ量だ。
だから、HDDからHDDのバックアップにする。
そしてバックアップ先のHDDはRADI1あたりでミラーリングしておく。
ここまでやっておけばまずひと安心だろう。
  • PC本体と普段使いの外付けHDD
  • バックアップ先HDDのRAIDの片側
  • バックアップ先HDDのRAIDのもう片側
これが3つがいっぺんにぶっ壊れるなんてことはそうそうあるまい。
もしそんなことがあったらもうなんか諦めもつくだろ、という感じだ。


【 ハードウェア 】

以下のNASをBICカメラで買ってきた。
  「BUFFALO LinkStation LS-WV4.0TL/R1J 4TB」    37500円

4TBなので、RAID1にすれば2TBになる。これだけあれば、ま、当分は大丈夫でしょう、と。


【 ソフトウェア 】

ファイルやフォルダ単位で同期してくれるソフトを使用することにした。
いくつか選定した結果「FreeFileSync」に決定。

公式サイト
http://sourceforge.net/projects/freefilesync/

紹介サイト
FreeFileSyncでファイル同期がこんなに簡単に。


【 データの優先度づけ 】

バックアップしたいデータと言っても色々と重要度は違う。
「知子の情報」のデータのように絶対に無くせないものもあれば、がっかりはするけど「ま、いっか」ですむものまで色々だ。
ということで、重要度によってレベル分けをしてみた。

以下みたいな感じ。
Level1  : 自分で作ったもの。無くしたら絶対手に入らないもの。絶対無くしたくないもの。
Level2  : 自分で作ったもの。無くしたら絶対手に入らないもの。無くしても諦めはつくもの。
Level3  : 自分で作ったもの。お金あるいは手間をかければ手に入るかもしれないもの。でも、大変。
Level4  : 自分で作ったものではなく、集めたもの。無くしたら絶対手に入らないもの。なるべく無くしたくないもの。
Level5  : 自分で作ったものではなく、集めたもの。無くしたら絶対手に入らないもの。無くしても諦めはつくもの。
Level6  : 自分で作ったものではなく、集めたもの。お金あるいは手間をかければ手に入るかもしれないもの。でも、大変。
Level7 :  自分で作ったものではなく、集めたもの。無くしても諦めがつくもの。


ちょっと細かくし過ぎた感もあるけど、この感じで手持ちデータを優先度づけした。
とは言っても全部、NASにバックアップするようにしてある。
ただ、今後の話しだけど、Level1、2あたりの重要度の高い奴はディザスタリカバリ(災害対策)を考えてクラウドにもバックアップするかもと考えている。その時のため用だ。


とりあえずここまでやってほっとひと息つけたところ。
それでも飛んだデータは戻らない。
後悔の想いがしばらく頭をグルグルグルグルしてたけど、後の祭りだ。
せめて今後の教訓としましょうかね。

テーマ:トラブル - ジャンル:コンピュータ

【Python】EmEditorでPythonマクロを動かすまで

EmEditorというエディタではマクロに色々な言語を使えるようになっている。
基本はVBScript,JavaScriptだが、それ以外にもPython,Ruby,Perlなどが使える。

今回は今勉強中のPythonをマクロとして使えるようにしてみたので整理する。

【 手順概要 】
  1. Python(CPython)のインストール
  2. Python for Windows extensions(PyWin32)のインストール
  3. レジストリ設定
  4. 動作確認

【 1. Python(CPython)のインストール 】

すでに入っている環境なので詳細は略。

PythonのバージョンはPython2.7を前提にする。
3.0系でもいけるかは不明。

【 2. Python for Windows extensions(PyWin32)のインストール 】

以下のサイトを参考にした。
  http://www.byjohndoe.com/contents/9
  EmEditorでPythonScriptを動かす場合にエラーが出たときの対処法

PyWin32の配布サイトへ。
  http://sourceforge.net/projects/pywin32/
  Python for Windows extensions

ここからが分かりづらいのだが、以下のようにダウンロードページにたどり着く。
  ・リンク「Python for Windows extensions Web Site」へ。
  ・リンク「download pages」へ。
  ・リンク「download area 」へ。
  ・リンク「pywin32」へ。
  ・リンク「Build216」へ。この時点の最新のビルド。

ダウンロード一覧にある以下を落とす。
  pywin32-216.win32-py2.7.exe
  
  「-py2.7」とあるのが「Python2.7用」ということらしい。

実行し、インストール。

インストール時、Pythonとして私の環境ではCPyhtonとActivePythonの2つを検出された。
CPythonの以下を指定する。
  Python Directory  :C:\Software\Python27\
  Installation Directory  :C:\Software\Python27\Lib\site-packages\

以下のように入った。
  Copied pythoncom27.dll to C:\WINDOWS\system32\pythoncom27.dll
  Copied pythoncomloader27.dll to C:\WINDOWS\system32\pythoncomloader27.dll
  Copied pywintypes27.dll to C:\WINDOWS\system32\pywintypes27.dll
  Registered: Python.Interpreter
  Registered: Python.Dictionary
  Registered: Python
  -> Software\Python\PythonCore\2.7\Help[None]=None
  -> Software\Python\PythonCore\2.7\Help\Pythonwin Reference[None]='C:\\Software\\Python27\\Lib\\site-packages\\PyWin32.chm'
  Pythonwin has been registered in context menu
  Creating directory C:\Software\Python27\Lib\site-packages\win32com\gen_py
  Shortcut for Pythonwin created
  Shortcut to documentation created
  The pywin32 extensions were successfully installed.

【 3. レジストリ設定 】

以下のPyWin32にあるスクリプトを実行する。
  'PyWin32インストール先'\win32comext\axscript\client\pyscript.py

参考サイトによると実行方法は以下の2つ。
  1. エクスプローラでダブルクリック
  2. コマンドプロンプトで実行
    ただし、コマンドプロンプトは管理者権限で。

私は「2. コマンドプロンプトで実行」でやった。

以下のように実行。
  C:\>python -V
  Python 2.7.2
  
  C:\>python.exe C:\Software\Python27\Lib\site-packages\win32comext\axscript\client\pyscript.py
  Registered: Python
  
  C:\>

複数のPythonのバージョンを入れているときは「python -V」でどれが動くか確認しておくが吉。

【 4. 動作確認 】

以下の内容のファイル「pysample.py」を作成。
  #language = "Python"
  # encoding: cp932
  
  text = Window.document.selection.Text.encode('UTF-8')
  Window.alert( text )

EmEditor上で適当に文字列選択をしておいてからこのマクロを実行。

アラートダイアログが出て、中に選択しておいた文字列が表示されたら、動作確認OK。

【 トラブル事例 】

この作業時、幾つかあったトラブルを事例として整理。

「 未設定時エラー 」

CPythonは元々入っていたが、PyWin32は入っていなかった。
その状態でPythonのマクロを実行すると出たエラーが以下。
  ---------------------------
  EmEditor
  ---------------------------
  Python
  指定された言語はシステムに登録されていません。
  ---------------------------
  OK
  ---------------------------

「 ActivePythonではダメ? 」

以下のサイトに代表されるように、ActivePythonを使う、という説明がネットには多い。
  http://emeditor.web.fc2.com/EmEditor_Macro_ActiveScript.html
  EmEditorのマクロを様々なActiveScriptで書いてみる

が、結論から言うとダメで、結局CPythonを使った。

ダメだった時にPythonマクロを実行すると出た2つのエラーが以下。
  ---------------------------
  Microsoft Visual C++ Runtime Library
  ---------------------------
  Runtime Error!
  
  Program: C:\Software\EmEditor\EMEDITOR.EXE
  
  R6034
  
  An application has made an attempt to load the C runtime library incorrectly.
  Please contact the application's support team for more information.
  
  ---------------------------
  OK
  ---------------------------
  
  
  ---------------------------
  EmEditor
  ---------------------------
  ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。
  
  ---------------------------
  OK
  ---------------------------

私と同じようにトラブり、CPythonを使うことで解決したという話しが以下。
ここを参考にして私も軌道修正した。
  http://www.byjohndoe.com/contents/9
  EmEditorでPythonScriptを動かす場合にエラーが出たときの対処法

「 ActivePythonアンインストールでPyWin32壊れた? 」

ActivePythonはやめて、CPythonを使うことにした。
で、不要なのでActivePythonをアンインストールした。
するとどうやらPyWin32の環境を壊すかなんかしたみたい。

それまで動いていたPyWin32そのものが動かないようになっていた。
  スタート > プログラム > Python2.7 > PythonWin

以下のエラーが出る。
  ---------------------------
  Python for Win32
  ---------------------------
  Still can't get my hands on win32ui
  ---------------------------
  OK
  ---------------------------

その状態で「 3. レジストリ設定 」を実行して出たエラーが以下。
  C:\>python.exe -V
  Python 2.7.2
  
  C:\>python.exe C:\Software\Python27\Lib\site-packages\win32comext\axscript\client\pyscript.py
  Traceback (most recent call last):
   File "C:\Software\Python27\Lib\site-packages\win32comext\axscript\client\pyscript.py", line 11, in
   import win32com
   File "C:\Software\Python27\lib\site-packages\win32com\__init__.py", line 5, in
   import win32api, sys, os
  ImportError: DLL load failed: 指定されたモジュールが見つかりません。
  
  C:\>

再度PyWin32をインストールすることで上記2つの現象は収まった。

「 32bit版か64bit版か 」

Python,PyWin,EmEditorの全てを32bit版かあるいは64bit版に統一しておかないと具合が悪かった。
ここまでの説明は32bit版での話し。
他の環境で「Python,PyWinは32bit」、「EmEditorだけ64bit」でやったところ、トラブった。
Pythonマクロを実行すると、以下のエラーダイアログが出る。
「クラスが登録されていません」

【 参考情報 】

「 EmEditorマクロのオンラインヘルプ 」
http://jp.emeditor.com/help/macro/index.htm
EmEditor ホーム - EmEditor ヘルプ
マクロ リファレンス

「 色々な言語でマクロを動かす情報 」

http://emeditor.web.fc2.com/EmEditor_Macro_ActiveScript.html
EmEditorのマクロを様々なActiveScriptで書いてみる

ただし、少なくともPythonに関してはダメだった。
ActivePythonではダメ。

「 Python for Windows extensions(PyWin32) 」
http://sourceforge.net/projects/pywin32/
Python for Windows extensions

以上

テーマ:プログラミング - ジャンル:コンピュータ

【Python】PythonとライブラリmechanizeでWEBスパイダリング/スクレイピング

PythonでWEBスパイダリング/スクレイピング用のライブラリ「mechanize」というものをインストールし、動作確認するまでを整理してみます。

スパイダリング/スクレイピングというのは要するにWEBサイトをうろつき回り、WEBページ中の情報で必要なところを切り出してくる、といったものです。
WEB APIが用意されてないようなサイトからプログラムでデータを得る時は、WEBページのHTMLソースを解析し、必要な文字列等を抽出する、というわけです。

「 環境 」

ここで今回やった時の環境について。

Windows7 64bit
Python 2.7

Pythonのバージョンには注意です。
最初、3.X系でやろうとしたのですがうまく行かず、結局2.7を入れました。

「 手順概要 」

これからやる作業は以下です。
  1. EasyInstallのインストール
  2. Mechanizeのインストール
  3. 実験
「 EasyInstallのインストール 」

MechanizeのインストールにEasyInstallを使うのですが、入ってなかったので。

以下へ。

http://peak.telecommunity.com/dist/


以下を落とします。
ez_setup.py

ez_setup.pyをPythonインストールディレクトリ下にコピーします。
以下、例です。
C:\Software\Python27\
ez_setup.py

あとはez_setup.pyを実行するだけです。
以下、実行例。
C:\Software\Python27>python ez_setup.py
Downloading http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
Processing setuptools-0.6c11-py2.7.egg
Copying setuptools-0.6c11-py2.7.egg to c:\software\python27\lib\site-packages
Adding setuptools 0.6c11 to easy-install.pth file
Installing easy_install-script.py script to C:\Software\Python27\Scripts
Installing easy_install.exe script to C:\Software\Python27\Scripts
Installing easy_install.exe.manifest script to C:\Software\Python27\Scripts
Installing easy_install-2.7-script.py script to C:\Software\Python27\Scripts
Installing easy_install-2.7.exe script to C:\Software\Python27\Scripts
Installing easy_install-2.7.exe.manifest script to C:\Software\Python27\Scripts

Installed c:\software\python27\lib\site-packages\setuptools-0.6c11-py2.7.egg
Processing dependencies for setuptools==0.6c11
Finished processing dependencies for setuptools==0.6c11

C:\Software\Python27>

以下のようにインストールされていることが確認できます。
C:\Software\Python27>dir scripts
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 940C-02E6 です

 C:\Software\Python27\scripts のディレクトリ

2011/11/17  23:53    <DIR>          .
2011/11/17  23:53    <DIR>          ..
2011/11/17  23:53               316 easy_install-2.7-script.py
2011/11/17  23:53             7,168 easy_install-2.7.exe
2011/11/17  23:53               531 easy_install-2.7.exe.manifest
2011/11/17  23:53               308 easy_install-script.py
2011/11/17  23:53             7,168 easy_install.exe
2011/11/17  23:53               527 easy_install.exe.manifest
               6 個のファイル              16,018 バイト
               2 個のディレクトリ  120,230,211,584 バイトの空き領域

C:\Software\Python27>

「 Mechanizeのインストール 」

EasyInstallのあるディレクトリ「Scripts」まで移動してから以下でインストールします。
easy_install mechanize

以下、実行例。
C:\Software\Python27\Scripts>easy_install mechanize
Searching for mechanize
Reading http://pypi.python.org/simple/mechanize/
Reading http://wwwsearch.sourceforge.net/mechanize/
Best match: mechanize 0.2.5
Downloading http://pypi.python.org/packages/source/m/mechanize/mechanize-0.2.5.tar.gz
Processing mechanize-0.2.5.tar.gz
Running mechanize-0.2.5\setup.py -q bdist_egg --dist-dir c:\users\yosi\appdata\local\temp\easy_install-3dsj4w\mechanize-0.2.5\egg-dist-tmp-nt82uk
warning: no files found matching 'output' under directory 'test\functional_tests_golden'
Adding mechanize 0.2.5 to easy-install.pth file

Installed c:\software\python27\lib\site-packages\mechanize-0.2.5-py2.7.egg
Processing dependencies for mechanize
Finished processing dependencies for mechanize

C:\Software\Python27\Scripts>


以下のようにmechanizeのライブラリが入ったことが確認できます。

C:\Software\Python27\Lib\site-packages\
mechanize-0.2.5-py2.7.egg

「 実験 」

ここではGoogleへのアクセスを試してみます。
Googleのトップぺージにアクセスし、タイトル表示とページ中のリンクを全て表示しています。
Pythonのコマンドラインで対話的に実行しました。

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> from mechanize import Browser
>>> br = Browser()
>>> br.open('http://www.google.com/')
<response_seek_wrapper at 0x2a50580 whose wrapped object = <closeable_response at 0x2a50288 whose fp = <socket._fileobject object at 0x02A47AF0>>>
>>> br.title()
'Google'
>>> for i in br.links():
...     print i
...
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/imghp?hl=ja&tab=wi', text='\x89\xe6\x91\x9c', tag='a', attrs=[('class', 'gb1'), ('href','http://www.google.co.jp/imghp?hl=ja&tab=wi')])
Link(base_url='http://www.google.co.jp/', url='http://video.google.co.jp/?hl=ja&tab=wv', text='\x93\xae\x89\xe6', tag='a', attrs=[('class', 'gb1'), ('href', 'http://video.google.co.jp/?hl=ja&tab=wv')])
Link(base_url='http://www.google.co.jp/', url='http://maps.google.co.jp/maps?hl=ja&tab=wl', text='\x92n\x90}', tag='a', attrs=[('class', 'gb1'), ('href', 'http://maps.google.co.jp/maps?hl=ja&tab=wl')])
Link(base_url='http://www.google.co.jp/', url='http://news.google.co.jp/nwshp?hl=ja&tab=wn', text='\x83j\x83\x85\x81[\x83X', tag='a', attrs=[('class', 'gb1'), ('href', 'http://news.google.co.jp/nwshp?hl=ja&tab=wn')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/prdhp?hl=ja&tab=wf', text='\x83V\x83\x87\x83b\x83s\x83\x93\x83O', tag='a', attrs=[('class', 'gb1'), ('href', 'http://www.google.co.jp/prdhp?hl=ja&tab=wf')])
Link(base_url='http://www.google.co.jp/', url='https://mail.google.com/mail/?tab=wm', text='Gmail', tag='a', attrs=[('class', 'gb1'), ('href', 'https://mail.google.com/mail/?tab=wm')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/intl/ja/options/', text='\x82\xe0\x82\xc1\x82\xc6\x8c\xa9\x82\xe9 &raquo;', tag='a', attrs=[('class', 'gb1'), ('style', 'text-decoration:none'), ('href', 'http://www.google.co.jp/intl/ja/options/')])
Link(base_url='http://www.google.co.jp/', url='/url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja%26source%3Diglk&usg=AFQjCNEmQuNg1ivauCid9lXp5yYSx6AHXw', text='iGoogle', tag='a', attrs=[('href', '/url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja%26source%3Diglk&usg=AFQjCNEmQuNg1ivauCid9lXp5yYSx6AHXw'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.com/history/optout?hl=ja', text='\x83E\x83F\x83u\x97\x9a\x97\xf0', tag='a', attrs=[('href', 'http://www.google.com/history/optout?hl=ja'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='/preferences?hl=ja', text='\x90\xdd\x92\xe8', tag='a', attrs=[('href', '/preferences?hl=ja'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='https://accounts.google.com/ServiceLogin?hl=ja&continue=http://www.google.co.jp/', text='\x83\x8d\x83O\x83C\x83\x93', tag='a', attrs=[('id', 'gb_70'), ('href', 'https://accounts.google.com/ServiceLogin?hl=ja&continue=http://www.google.co.jp/'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='/advanced_search?hl=ja', text='\x8c\x9f\x8d\xf5\x83I\x83v\x83V\x83\x87\x83\x93', tag='a', attrs=[('href', '/advanced_search?hl=ja')])
Link(base_url='http://www.google.co.jp/', url='/language_tools?hl=ja', text='\x8c\xbe\x8c\xea\x83c\x81[\x83\x8b', tag='a', attrs=[('href', '/language_tools?hl=ja')])
Link(base_url='http://www.google.co.jp/', url='/intl/ja/ads/', text='\x8dL\x8d\x90\x8cf\x8d\xda', tag='a', attrs=[('href', '/intl/ja/ads/')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/intl/ja/services/', text='\x83r\x83W\x83l\x83X \x83\\\x83\x8a\x83\x85\x81[\x83V\x83\x87\x83\x93', tag='a', attrs=[('href', 'http://www.google.co.jp/intl/ja/services/')])
Link(base_url='http://www.google.co.jp/', url='/intl/ja/about.html', text='Google \x82\xc9\x82\xc2\x82\xa2\x82\xc4', tag='a', attrs=[('href', '/intl/ja/about.html')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.com/ncr', text='Google.com in English', tag='a', attrs=[('href', 'http://www.google.com/ncr'),('class', 'gl nobr')])
Link(base_url='http://www.google.co.jp/', url='/intl/ja/privacy.html', text='\x83v\x83\x89\x83C\x83o\x83V\x81[', tag='a', attrs=[('href', '/intl/ja/privacy.html')])
>>>

おしまい








テーマ:プログラミング - ジャンル:コンピュータ

前のページ 次のページ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。