はてなキーワード: Dirとは
A- 日本IBM、NTTコミュニケーションズ、アクセンチュア、野村総研(NRI)
B+ NEC、日本HP、新日鉄住金ソリューションズ(NSSOL)、日本総研(JRI)、大和総研(DIR)
B NTTコムウェア、伊藤忠テクノソリューションズ(CTC)、電通国際情報サービス(ISID)
B- 三菱UFJインフォメーションテクノロジー(MUIT)、みずほ情報総研(MHIR)、
C+ JSOL、農中情報システム、SCSK、日立システムズ(HISYS)、日立ソリューションズ(HISOL)
C NECソリューションイノベータ、ニッセイ情報テクノロジー、JR東日本情報システム(JEIS)、
C- オービック、TIS、オージス総研、富士通エフサス、シンプレクス、
D+ 三菱UFJトラストシステム、三菱総研DCS、兼松エレクトロニクス、都築電気、
D 損保ジャパン日本興亜システムズ、インフォコム、セゾン情報システムズ、日商エレクトロニクス、
コベルコシステム、IIJ、ネットワンシステムズ、パナソニックインフォメーションシステムズ、
菱化システム、JRシステム、富士通システムズイースト、東芝ソリューション、富士通FIP
D- ユニアデックス、NECネッツエスアイ、日立産業制御ソリューションズ、
三菱電機インフォメーションシステムズ、MS&ADシステムズ、NTTソフトウェア、
NTTアドバンステクノロジ、JFEシステムズ、テクマトリックス、三井情報、第一生命情報システム、
ソニーグローバルソリューションズ、ワークスアプリケーションズ
E+ 富士通システムズウエスト、富士通マーケティング、三菱電機インフォメーションネットワーク、
中央コンピュータシステム、ティージー情報ネットワーク、リンクレア、ジャストシステム
E NECフィールディング、NEC情報システムズ、富士通BSC、日本情報通信、
住友電工システムソリューション、JR西日本ITソリューションズ、
E- 富士通ネットワークソリューションズ、日立公共システム、NEC通信システム、
F+ 日立ソリューションズ・クリエイト、キヤノンソフトウェア、さくら情報システム、
トヨタコミュニケーションシステム、エクサ、アイネス、TKC、CAC、CEC、SRA
F クオリカ、NSD、DTS、さくらKCS、東邦システムサイエンス、菱友システムズ、
最近流行りのインデックス投資をする際には、手数料が安い投資信託またはETFを投資先として選ぶ必要がある。
米国ETFであるヴァンガードトータルワールドストック(VT)は、ランニングコストの点で優れているのだが、購入の際に手数料がそれなりにかかってしまう。多分そのせいもあって、国産のインデックス投資信託にいい物が出てきた昨今では微妙に人気が落ちつつある。投信ブロガーの2015年の評価は第3位で、前年から順位を2つ落とした(http://www.fundoftheyear.jp/2015/)。
しかし、ネット証券会社が行っているキャンペーンを利用すれば、条件付きながら、米国ETFの購入時の手数料を結構下げることができる。
自分が使っているSBI証券での手数料削減方法について以下に記載するが、もっといい方法があればご教示いただきたい。また、自分の考えに誤りがあればご指摘いただきたい。
SBI証券で米国ETFを購入するためには、まずドルを買わないといけない。
SBI証券で為替取引をすると1ドルあたり25銭かかる(https://search.sbisec.co.jp/v2/popwin/attention/trading/stock_exchange_01.html)。
しかし、SBI銀行の外貨普通預金では、1ドルあたり15銭で為替取引ができる(https://www.netbk.co.jp/wpl/NBGate/i900500CT/PD/gaika_futsu_01)。さらに、SBI銀行の外貨普通預金口座とSBI証券の外貨口座の間では手数料無料でドルのやりとりができる。銀行で買って証券に移せば、1ドル10銭の節約になる。SBIネット銀行「外貨普通預金」でドルを買った後、SBI証券の「入出金・振替」からSBI銀行で買ったドルの「外貨入金」を行えばドル移動が完了する。タイムラグはほとんどない。
さらに、SBIネット銀行の「外貨特BUY日」キャンペーンを利用すると、為替手数料が0になる(https://www.netbk.co.jp/wpl/NBGate/i900500CT/PD/camp_gaika_cost)。「外貨特BUY日」とは、毎月25日から3営業日だけ、外貨購入手数料が無料になるキャンペーンだ。
なお、このキャンペーンは2016年9月で終了予定らしい。キャンペーン終了後は、一度に1万ドル買う場合なら、難易度が上がるがSBI証券のFXでドルを現引きするのが一番安上がりになる。[SBI ドル 現引]でぐぐれば方法はわかる。そこまでやりたくなければ上記の銀行→証券ルートを使うことになる。
2. 購入コスト削減
SBI証券のNISA口座で米国ETFを購入すると、購入手数料が0になる(https://site1.sbisec.co.jp/ETGate/WPLETmgR001Control?OutSide=on&getFlg=on&burl=search_nisa&cat1=nisa&cat2=none&dir=info&file=nisa_info151009_01.html)。
これらを利用すれば、為替手数料と購入手数料がゼロになるので、毎月ゼロコストでSBI証券NISA口座で米国ETFを積み立てることができるようになる。
twitterのツイートを増田に埋め込む方法を丁寧に書きます。
*さっき一部の半角文字を増田で書けないと書きましたが数値文字参照にすれば書けました。訂正します!教えてくれた人あんがとー!でもスーパーpre記法ではこのやり方通用しなかったのでシンタックスカラーは無し。
twitter.comに行き ツイートの ... ボタンを押す。ツイートをサイトに埋め込むを押す。そうすると以下のHTML要素がコピー出来る。ここではサンプルにしても無害そうなifttt公式アカウントのツイートを引用します。
<blockquote class="twitter-tweet" lang="ja"><p lang="en" dir="ltr">Connect <a href="https://twitter.com/instagram">@Instagram</a> to <a href="https://twitter.com/Dropbox">@Dropbox</a> and automagically save every photo you post for safe keeping <a href="https://t.co/YVrgcSJZAD">https://t.co/YVrgcSJZAD</a> <a href="https://t.co/3vEiFZ3ADW">pic.twitter.com/3vEiFZ3ADW</a></p>— IFTTT (@IFTTT) <a href="https://twitter.com/IFTTT/status/662023324306837504">2015, 11月 4</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
まあ増田を書く
先ほどのHTML要素のうち末尾のscript要素は引用する際,埋め込んだtwitter引用からはみ出て表示されるので邪魔です。取りましょう。
末尾のこれを取ります。
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
そうするとこうなります。これを増田にそのまま貼り付けてください。
<blockquote class="twitter-tweet" lang="ja"><p lang="en" dir="ltr">Connect <a href="https://twitter.com/instagram">@Instagram</a> to <a href="https://twitter.com/Dropbox">@Dropbox</a> and automagically save every photo you post for safe keeping <a href="https://t.co/YVrgcSJZAD">https://t.co/YVrgcSJZAD</a> <a href="https://t.co/3vEiFZ3ADW">pic.twitter.com/3vEiFZ3ADW</a></p>— IFTTT (@IFTTT) <a href="https://twitter.com/IFTTT/status/662023324306837504">2015, 11月 4</a></blockquote>
確認するボタンでツイートが埋め込まれてないのであれ?と思うかもしれませんがそのまま「この内容を登録する」を押してください。
増田のタイムラインでも埋め込みツイートは表示されずたんなる引用として表示されます。あれ?となるけど書いた増田記事の本文URLを開いてください。本文を表示した場合のみツイートが埋め込みで表示されます。
Connect @Instagram to @Dropbox and automagically save every photo you post for safe keeping https://t.co/YVrgcSJZAD pic.twitter.com/3vEiFZ3ADW— IFTTT (@IFTTT) 2015, 11月 4
応用すると以下のようにツイート内にインラインされている動画を増田にインライン出来るなど夢が広がりますね。あと増田はコードサンプルを書くにはクソですね。
気づいてない人も多そうですが、『マッドマックス 怒りのデス・ロード』の主役マックス役は10;『ダークナイト ライジング』でベインを演じたトム・ハーディです10;https://t.co/cJ816F5Mpu 10;https://t.co/Qh0iuQKFTl— アメコミ大全集(TM) (@amecomic) 2015, 12月 1
一般的な高スペックって、経歴書に書かれた社名だったりします…。
コンテンツ業界と行っても上流~下流まであるじゃないですか。上流の人間は重宝されます。
もちろんですが、年齢によっても評価が変わりますよね。
業界に10年以上いるなら、何よりも技術と実績。何を作ってきて、どんな立ち回りをしてきたのか。
そして、プロジェクト管理能力の有無。若い人は育てれば良いのでポテンシャル採用ですが、年増は人的スキル必須。
自分がいた会社では、技術的に厳しい人が半ディレクター的な立ち回りで評価されてました。
コミュ力なし社畜(言われたことはやるが、提案は一切しない)率が高くて、DirやDesとコミュニケーション取れなかったんで。
この業界に10年以上いるなら、他社も5~6社程度は知っていますよね?(いい噂はあまり入ってこないですが…)
有名どころは常時募集をかけていて、技術力、もしくはポテンシャル採用の若い駒を必要としていますが
そこらはあえて、避けて選んでいるんでしょうか?
最初の元増田から読み取れたのは「当たって砕けている」印象でした。
「ヤ○ザまがいの人がでてきたり」と言うのは、出会いサイトやエロチャットを作ってるっぽいし
企業サイトにもコンテンツ実績なんて出してないはずだし、業界内で名前を聞かない会社だったんでは?
業界経験浅くて、右も左もわからないのかな…と思った次第です。
やや古い情報ですが、1~2年前はiPhone/Androidアプリの技術者が不足していましたよね。
社内で人を育てている時間がないから制作会社に丸投げ。それをコントロールできる人も不足してた。
自分がいた会社はJavaとPHPばっかで、C書ける人がいなかったです。(自分はDirなんであまり詳しくないですが)
面接を受けている時に、これから自社でソシャゲ作りたいって会社さんも何社かあったので
ソシャゲ作っていない会社に言って、ニーズを掘り起こしてみるのも良いかもしれないですよ。
自分はソシャゲの開発経験がないので、求人に書いていないことを求められて困りました。
元増田さんは第一線で活躍する自信や意気込みがないということなので、WEBでも流れがゆるやかなところに移ってみるのはどうですか?
この点は、自分も専門外なんで憶測になりますが、ECサイト、企業のWEB運営担当、求人や賃貸物件検索等のサイト運営など
基本DBのサイトって、アプリ開発やソシャゲほどのスピードは求められないんじゃないですかね?
自分はソシャゲは作ってないんですが、旗から見てても、モバイル、特にソシャゲは異様なスピード感なんで
コンテンツからサービス主体の制作へ移られると、少し楽になるかもしれないと思いました。
派遣なら、担当の方に業種チェンジを相談すればマッチングミスが防げるし
2. インストールの種類を選んでください:「カスタム」をクリック
3. Windows のインストール場所を選んでください:「ドライブオプション」をクリック
3-1. すべてのパーティションを「削除」
3-2. 「新規」をクリックするとパーティションが2個できる
4. Shift キーを押しながら F10 キーを押してコマンドプロンプトを起動する
4-1. diskpart コマンドでインストールするパーティションのドライブラベルを確認する
> diskpart DISKPART> list vol DISKPART> exit
> mkdir E:\WINDOWS > dir E:\ > exit
5. WINDOWS フォルダを作成したパーティションを選択して「次へ」
6. インストールが終了したら C ドライブ直下の Windows.old フォルダを削除する
609 :実名攻撃大好きKITTY:2012/11/02(金) 20:30:54.20 ID:e/Mxbvll0 >>608 坂出、まだ、居たのか!今日はハロワ行ったか?www ●●● 前科2犯・無職「坂出」 ●●● Wikiでの自己紹介 1975年生まれ男性O型、橿原市在住 http://ja.wikipedia.org/w/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Sakaide&amp;oldid=36029552 ●液クロサイエンス様に、病的な、たび度重なる業務妨害で2回の逮捕歴 http://www.lc-s.co.jp/press01.htm ●坂出の投稿記録・頻繁に学校のwiki改竄などを実行 http://ja.wikipedia.org/w/index.php?title=%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Sakaide&amp;dir=prev&amp;offset=20110329161021&amp;limit=500&amp;target=Sakaide ●ノート聖心学園:坂出による改竄例 多重ハンドルが露見し、wiki出入り禁止処分に http://ja.wikipedia.org/wiki/%E3%83%8E%E3%83%BC%E3%83%88%3A%E8%81%96%E5%BF%83%E5%AD%A6%E5%9C%92%E4%B8%AD%E7%AD%89%E6%95%99%E8%82%B2%E5%AD%A6%E6%A0%A1 ●IPアドレス情報(2012年9月22日9時31分時点) Name: p3208-ipbfp01daianjibetu.nara.ocn.ne.jp Address: 125.175.194.208
どこかで見た感じです。
A Beautiful Site (http://abeautifulsite.net/)さんの
jquery.fileTreeを利用させてもらった。
以下、留意点...
パスを指定しないと、もとのhtmlがあるパス(ディレクトリ)にあるものと解釈する。
(/jqueryFileTree.php と指定すると、公開しているルートディレクトリにあるjqueryFileTree.phpを探しにいく)
http://...と指定して他のサーバへ問い合わせるのも可能な模様(だが、試していない)。
root:
d:/
d:/temp/
など
hemlentries -> htmlspecialchars は必須。
http://treatment-head.blogspot.com/2008/11/jquery-file-tree_21.html
ただし、UTF-8やEUC-JPでページを記述している場合は、さらに処理が必要。
windowsでは、mbstringの設定にかかわらず、引数SJIS渡し、戻り値SJIS返しの模様。
したがってUTF-8やEUC-JPでページを記述している場合は、
その点を考慮してconnectorsフォルダにあるjqueryFileTree.phpを書き換える必要がある。
$_POST['dir'] = urldecode($_POST['dir']);
という行があるが(スーパーグローバル変数はデコード済みで、さらにデコードするのは危険とphpマニュアルに記載されている)
どのみちUnicode文字列のURLデコードはこの関数では無理なようなので、phpマニュアルのUserNoteから拝借。
http://php.net/manual/en/function.urldecode.php
こちらにズバリが掲載されているか...と試してみたが、どうも動作がうまくいかなかった
http://ameblo.jp/pushurinko/entry-10287161493.html
他、ご参考
A disk read error occurred
Press Ctrl+Alt+Del to restart
帰省中1ヶ月ほど放置し、久しぶりに電源を押すとエラーが出るようになったらしい。
変なソフトのインストールやBIOSのアップデート等はしていないとのこと。
当初はF8キーを押して[詳細ブートオプション]を開ければ、すぐに直せると思っていたけど、
ブートから進まないのだからF8キーを押しても同じエラーが出るだけ。
一応、F2キーでBIOS設定画面を開き、[Load Setup Defaults]を試すも症状変わらず。
また、VISTAにはXPの[回復コンソール]がなく、[システム回復オプション]という復旧手段が用意されている。
しかし、このマシンはプリインストール版なので、ディスクからの起動できない。
この場合はF8キーを押して[詳細ブートオプション]を開いて、そこから起動できるようだ。
その後、試行錯誤を繰り返した結果、再セットアップするしかないという結論に至った。
バックアップするにもWindowsが起動しないので、こんな時はいつもLinuxOS Knoppixに頼っている。
公式サイト(http://www.rcis.aist.go.jp/project/knoppix/)ではDVD版とCD版がiso形式で配布されており、DVDなりCDなりに焼けばOSをディスク起動できる優れもの。
さらにCD版をUSBにインストールしたUSB版も作成できるので、非常用に1つ作っておくと便利。
こちらのサイト(USB-Knoppixではじめよう http://yumenohako.jp/cgi-bin/knoppix/wiki.cgi)を参考に簡単に解説。
- 用意するもの
- 作成手順
- 前述したKNOPPIXの公式サイトからCD版のISO形式ファイルをダウンロード(現在はバージョン6.0.1)。
- 「DAEMON Tools」等の仮想ディスク作成ソフトでisoファイルをマウント。
- マウントしたディスクを開き、[KNOPPIX]フォルダを丸ごとUSB直下にコピー。
- さらに「\boot\isolinux」フォルダを開き、中のファイルを全てUSB直下にコピー。
- USB直下にコピーした[isolinux.cfg]というファイルの名前を[syslinux.cfg]に変更。
- こちらのサイト(http://www.kernel.org/pub/linux/utils/boot/syslinux/)から[syslinux.zip]をダウンロード(現在はsyslinux-4.02.zipが最新)。
- zipファイルを解凍して開き、「\win32\syslinux.exe」ファイルをCドライブ直下に移動。
- コマンドプロンプトを開き、[cd c:\]([]内のみ)と入力してEnterキーを押す。
- 次に[dir syslinux.exe]と入力してEnterキーを押す。
- さらに[syslinux.exe -ma USBドライブ名:](例:USBがEドライブなら[syslinux -ma E:]、間違ったドライブを指定すると指定先が壊れるので注意)と入力してEnterキーを押す。
- 完成!
- 使用方法
このマシンは前述の通りプリインストール版なのでインストールディスク(再セットアップディスク)が付属していない。
では、どうやって再セットアップするかというと、
しかし、今回はF11キーを押してもエラーが表示されるのみ。それにわざわざリカバリディスクを作成しているはずもなく手詰まり。
リカバリディスクはこちら(http://nx-media.ssnet.co.jp/)から購入できるけど価格は1万円。自作するしかない。
そもそも本来はリカバリディスクを作成できるのだから、HDD内のどこかにリカバリディスク用のデータが入っているはず。
そこで再びKNOPPIXを起動してみると、[NEC-RESTORE]という名前のリカバリ領域が隠しパーティションとして用意されていた。
こちらのサイト(LaVieレストア顛末記 http://deme.jp/wing/vol019/demeshin/NEC.htm)が大変参考になった。感謝。
- 用意するもの
- 作成手順
- 対象PCに接続されているUSBやLANケーブルなどはマウスとKNOPPIX以外全て外す。
- KNOPPIXで起動し、前述バックアップと同じ方法で[NEC-RESTORE]ドライブを開き、[RESTORE]フォルダを丸ごと外付けHDDにコピー(約10.3GB)。他のは不要。
- 「\RESTORE\TOOLS\IMG\winpe.iso」ファイルをISOイメージでCDに書き込む(Disk1)。
- 「\RESTORE\TOOLS」フォルダを丸ごとCDに書き込む(Disk2)。
- 「\RESTORE\BKVSTIMG.GHO」ファイルをCDに書き込む(Disk3)。
- 「\RESTORE\BKVST0**.GHS」ファイルが001から018まで18個あるので、まずは「BKVST001.GHS」から「BKVST007.GHS」まで約3.75GBをDVDに書き込む(Disk4)。
- 「BKVST008.GHS」から「BKVST014.GHS」まで約3.75GBをDVDに書き込む(Disk5)。
- 「BKVST015.GHS」から「BKVST018.GHS」まで約1.93GBをDVDに書き込む(Disk6)。
- 完成!
- 使用方法
- 対象PCの電源をつけ、Disk1を挿入。そして、電源ボタンを長押しして強制終了。
- 再度、電源をつけ、すぐにF2キーを連打してBIOS設定画面を開き、[Boot]タブから[1st Boot Device]を[CD-ROM]に変更して設定を保存。
- しばらくすると[Window Vista 再セットアップ]が起動するので、[再セットアップ]を選択(他のものを選択しても途中でエラーが出た)。
- その後[Cドライブのみの再セットアップ]など3項目が表示されたので、自分は[ハードディスクを購入時の状態に戻して再セットアップ]を選択。
- あとは「ディスク2を入れてください」等の指示に従って、Diskを入れ替えていけば、そのうちWindowsのセットアップ画面になる。
以上の作業によりHDDが故障していない限りはリカバリディスクを作成して再セットアップ可能。
ただし、当初のエラーの原因がHDDにある可能性もあるので、HDDを交換してからリカバリディスクを使用した方がいいかもしれない。
今後はCrystalDiskInfoなどのソフトを使用してHDD監視をするつもり。
再セットアップが進むと、シマンテック社の「Norton Ghost」というバックアップツールが起動し、1%2%3%...と作業が進行する。
最初にやった時は、50%ほど作業が完了したところでこんなエラーが出現。
Cannot open GHOSTERR.TXT - insert diskette (434)
File Name ? (546)
Output error file to the following location
[OK] [Cancel]
おそらくGHOSTERR.TXTというファイルの出力先が見つからないのだろうとあたりを付けて、
フォーマット済みCD-RWを挿入後、A:をCDドライブのF:に書き換えてOKを押すと
Application Error 19235
Ghost has detected corruption in the image file.
Please perform an integrity check on the image.
if this program persists, please contact Symantec support center
このイメージファイルとは、前述リカバリディスク作成手順6以降の[拡張子GHSのファイル]。GHSはGHOSTの略か?
そこで、Disk4,5,6をNERO9体験版+太陽誘電製のTHE日本製のDVD-Rを使用し、
念のためディスク1枚あたり4GBを超えないようにし、4倍速で焼き直してみたところ、今度は正常に再セットアップが完了。
最初はWindowsに標準装備されている[ディスクへの書き込み]+台湾製の安物DVD-Rを使用したのだが、
これを教訓に次からは絶対にライティングソフトと国産ディスクを使うことにしよう。
CrystalDiskInfoを使用してHDDの状態を調べたところ、案の定「注意」レベルだった。
注意項目 | 生の値 |
---|---|
代替処理保留中のセクタ数 | B(11) |
回復不可能セクタ数 | 25(37) |
※[生の値]の数値はデフォルトが16進数表記。括弧内は10進数に変換した数値。
やっぱり当初のエラーはHDDの故障とまではいかなくとも寿命が近いということだったのか。
使用時間は17000時間。HDDの交換を検討した方が良いけど、一体型の交換は難しいような。
まずはWestern Digital製HDDだからData Lifeguard Diagnosticsでゼロフィルをやってみる予定。
エラーチェックで完全に逝くかもしれないけど、バックアップもしてるし、リカバリディスクもあるし。
あと、VistaのバーションはSP1だと思っていたけど、まだ更新していなかった模様。
そこで更新プログラムをインストールしてみると途中で止まってしまい、修復スタートアップする羽目に。
Vista SP1の導入に失敗し、修復スタートアップを行ったものの、12時間経っても終わらず。
そこでいっそのことHDDのデータを完全に消去して、再セットアップすることにした(7時間ほどかかる)。
方法としては先日のとおり、Western Digital製HDDの診断ツール「Data Lifeguard Diagnostics」を使用する。
このツールはFDD版とCD版しかないので、いつものようにUSB版の作成を試みる。以下作り方と使用方法。
- 用意するもの
- 作成手順
- こちら(http://files.extremeoverclocking.com/file.php?f=196)から[Windows 98 System Files]をダウンロード後、解凍しておく。
- こちら(http://files.extremeoverclocking.com/file.php?f=197)から[HP USB Disk Storage Format Tool-v2.1.8]をダウンロード後、インストール。
- [HP USB Disk Storage Format Tool]を起動し、[Device]で用意したUSBを選択。[Create a DOS startup disk]にチェックを付け、[using DOS system files located at:]のところで、先ほど解凍したフォルダ(ファイル名はwin98boot)を指定する。
- こちら(http://support.wdc.com/product/download.asp?groupid=608&sid=30&lang=jp)から[Data Lifeguard Diagnostic for DOS (CD)]のiso形式をダウンロード。
- USB内に[DLGDIAG]という名前のフォルダを作成。
- ダウンロードしたisoファイルを仮想ディスク作成ソフトでマウント。
- マウント起動したディスク内の[DLGDIAG5.EXE][DLGDIAG.txt][DLGLICE.TXT]をUSB内の[DLGDIAG]フォルダにコピー。
- 完成!
- 使用方法
- PCにUSBを挿して、起動直後にF2を連打。BIOS設定画面から[boot]→[Hard Disk Boot Priority]を選択し、USB-HDDを一番上にして設定保存。
- DOSが起動するので、[cd dlgdiag]と入力してEnter。その後、[dlgdiag5]と入力してEnter。
- [Data Lifeguard Diagnostic]が起動するので、ライセンス画面でESCキーを押す。そして承諾。
- メイン画面が開いたら、[Extended Test]を選択して、まずはHDDのチェック(結果は余裕のFail)。所要時間は容量500GBで1時間40分。
- 続いて[Write Zeros To Drive]を選択して、HDD内の全データを削除(0で埋める)。これは2時間。
- もう一度[Extended Test]を実行(1時間40分)。この時点でNO ERRORS FOUND(エラーなし)。
- BIOS設定画面を開き、デフォルト設定をロードして、あとは前述どおりに再セットアップ(1時間30分)。
再セットアップ後、CrystalDiskInfoを実行すると見事に「正常」レベルに回復。
前回注意項目だった「代替処理保留中のセクタ」と「回復不可能セクタ数」の生の値は0に変化。
なぜか使用時間が14000時間に減少していたものの、とりあえずはHDDの故障の心配はしなくていいかな。
ちなみにSP1の導入は成功。今後はCrystalDiskInfoを常駐させ、監視を続けることにする。
あれから10か月後、悪夢のブルースクリーンが降臨したので、またクリーンインストールを行った。
CrystalDiskInfoを使用してHDDの状態を調べたところ、「注意」レベルに逆戻り。
注意項目 | 生の値 |
---|---|
代替処理保留中のセクタ数 | 2D9(729) |
回復不可能セクタ数 | 70(112) |
※[生の値]の数値はデフォルトが16進数表記。括弧内は10進数に変換した数値。
以前のエラー時よりさらに状況が悪化しており、HDDの寿命がかなり迫っている模様。
いつ突然死を迎えてもおかしくないので、重要なデータをバックアップのうえHDDの交換を予定。
ブログがないので、増田にログ残し。ツッコミや質問はid:frsattiまで。
たかがコピペ相手にそこまで憤慨している増田が怖すぎる。 思い込みが激しすぎるというか、独善的というか。 リアルでこんな人と関わりあいたくねえええええ. Permalink | トラックバック(0) | 23:34 はてなブックマーク このエントリーのブックマーク ...
anond.hatelabo.jp/ - キャッシュ - 類似ページ増田とは - はてなキーワード
増田 - 日本人に多い苗字 リスト::日本人の苗字 主な有名人 名前なまえ別名肩書き解説 チャンコ増田ちゃんこますだ-サークル主宰者「抱き枕製作」という同人ジャンルを成立 増田...
d.hatena.ne.jp/keyword/増田 - キャッシュ - 類似ページ増田にゃんねるβ
1 名前:以下、はてなにかわりまして元増田がお送りします。 投稿日:2010/10/14 00:47:00. 最近嫌なこと続きでむしゃくしゃして、この前つい中古でポケモンハートゴールド買ってしまった。 起動してみたら前のデータが残ってたので、めぼしいものを ...
masuda.livedoor.biz/ - キャッシュ - 類似ページ24 時間以内の結果をさらに検索
増田俊男の小冊子 Vol.17 「2010年の総決算?!」 2010年から2011年7月までをズバリ大予測! 主な解説内容: *米中間選挙の論争点と結果* ... 「増田俊男の世界」(時事直言)携帯サイト ※携帯電話のバーコードリーダーで左のQRコードを読み取り、 ...
www.chokugen.com/ - キャッシュ - 類似ページ増田貴久 - Wikipedia
増田 貴久(ますだ たかひさ、1986年7月4日 - )は、日本のタレント、歌手。男性アイドルグループ・NEWSおよびテゴマスのメンバーである。愛称はまっすー。ジャニーズ事務所所属。東京都練馬区出身。クラーク記念国際高等学校卒業。身長171cm、体重68kg。 ...
ja.wikipedia.org/wiki/増田貴久 - キャッシュ - 類似ページ場所:増田
homepage3.nifty.com/MASUDA/ - キャッシュ - 類似ページデイトレードや株価(日経平均/225先物)に強い株価チャートソフト増田足
2010年10月14日 ... 株価チャートソフトなら「トレンド」「転換点」がひと目でわかる増田足。デイトレードの基本テクニックやノウハウ、日経平均(225先物)など株価に関する情報もご提供しております。
www.masudaasi.com/ - キャッシュ - 類似ページ24 時間以内の結果をさらに検索
2010年10月14日 ... ますだおかだ増田のブログ、ますだおかだ増田ブログです。漫才師 ますだおかだ増田 公式ブログ.
ameblo.jp/msokm/ - キャッシュ - 類似ページ24 時間以内の結果をさらに検索
このコラムの上の「増田部長のめざめるパワー」の写真の背景。 そうです、NYです!! ちゃんと右端にブルックリンブリッジが写って .... 増田順一プロフィール. 株式会社ゲームフリーク取締役開発部長; 1968年1月12日生まれ; 神奈川県横浜市出身 ...
www.gamefreak.co.jp/blog/dir/ - キャッシュ - 類似ページ増田寛也 オフィシャルサイト
元総務大臣、元岩手県知事、現野村総合研究所顧問の増田寛哉のオフィシャルサイト.
www.h-masuda.net/ - キャッシュ - 類似ページ増田 のニュース検索結果
デイリースポーツ ますおか増田「―ダジャレで覚える韓国語」本を出版 - 12時間前
漫才コンビ・ますだおかだの増田英彦(40)=写真=が14日、韓国語会話本「ますだ式 ダジャレで覚える韓国語」(学研パブリッシング、税込み1000円)の出版会見を大阪市内で開いた。 3月までNHKの「テレビでハングル講座」に出演し、ダジャレ ...
スポーツ報知 - 関連記事 4 件
「全日本大学駅伝」の魅力、増田明美さんに聞きました! - 名古屋テレビ - 関連記事 2 件
増田俊樹
増田塾
増田都子
増田 b'z
10/18 改訂
なお、取得した画像の著作権はグーグル他各社が保持しています。
ご利用は計画的に私的範囲でどうぞご利用ください。
#!/usr/bin/perl use strict; use warnings; use Getopt::Long; use LWP::UserAgent; use GD; my $cmdline = join(" ", $0, @ARGV); my $usage = "usage: $0 -sx=116423 -sy=51603 -ex=116426 -ey=51605 -dx=4 -dy=3 -z=17 -size=300 -get=30 -dir=cache -output=output.jpg -nodebug"; my ($sx, $sy) = (0, 0); my ($ex, $ey) = (0, 0); my ($dx, $dy) = (4, 3); my $z = 17; my $size = 300; my $get = 30; my $dir = "cache"; my $output = "output.jpg"; my $debug = 0; GetOptions("sx=i" => \$sx, "sy=i" => \$sy, "ex=i" => \$ex, "ey=i" => \$ey, "dx=i" => \$dx, "dy=i" => \$dy, "z=i" => \$z, "size=i" => \$size, "get=i" => $get, "dir=s" => \$dir, "output=s" => \$output, "debug!" => \$debug) or die "$usage\nDied"; if ($ex == 0) { $ex = $sx + $dx; } else { $ex++; $dx = $ex - $sx; } if ($ey == 0) { $ey = $sy + $dy; } else { $ey++; $dy = $ey - $sy; } $sx>0 and $dx>0 and $sy>0 and $dy>0 and $z>0 and $dir and $output or die "$usage\nBad arguments"; $dx*$dy > $size and die "Getting too large."; $debug and print "debug: mkdir $dir\n"; mkdir $dir; -d $dir or die "can't make dir $dir: $!"; my $base = sprintf("http://khm%d.google.co.jp/kh/v=46&z=%d", int(rand(4)), $z); my $ua = LWP::UserAgent->new; printf "now get %d images...\n", $dx*$dy; for (my $x=$sx; $x < $ex; $x++) { for (my $y=$sy; $y < $ey; $y++) { my $file = sprintf("%s/%02dz%06dx%06d.jpg", $dir, $z, $x, $y); $debug and print "debug: check of $file\n"; -s $file and next; --$get < 0 and last; my $req = HTTP::Request->new(GET=>+"$base&x=$x&y=$y"); $debug and print "debug: fetch from ".$req->uri."\n"; my $res = $ua->request($req); unless ($res->is_success) { print "fail fetch from $file: ", $res->status_line, "\n"; next; } if (open(my $fh, ">", $file)) { $debug and print "debug: write of $file\n"; binmode $fh; print $fh $res->content; close $fh; } else { print "fail open in $file: $!\n"; } } } $get < 0 and print "reach the getting limit, skip after all.\n"; printf "creating %dX%d image...\n", 256*$dx, 256*$dy; my $image = new GD::Image(256*$dx, 256*$dy); for (my $x=$sx; $x < $ex; $x++) { for (my $y=$sy; $y < $ey; $y++) { my $file = sprintf("%s/%02dz%06dx%06d.jpg", $dir, $z, $x, $y); $debug and print "debug: check of $file\n"; -s $file or next; $debug and print "debug: read of $file\n"; my $part = GD::Image->newFromJpeg($file); $debug and print "debug: image copy\n"; $image->copy($part, 256*($x-$sx), 256*($y-$sy), 0, 0, 256, 256); } } #$image->string(gdSmallFont, 0, 0, $cmdline, $image->colorAllocate(255, 255, 255)); open(my $fh, ">", $output) or die "fail open $output: $!"; $debug and print "debug: write of $output\n"; binmode $fh; print $fh $image->jpeg(); close $fh;
例えば秋葉原とか
perl gmwall.pl -sx=116423 -sy=51603 -ex=116427 -ey=51606
駅だけとか
perl gmwall.pl -sx=465701 -sy=206420 -ex=465705 -ey=206423 -z=19
使う数値はfirebugなどで拾ってください。
スーパーpre記法がアレなまま直ってないわけで。
姉妹サイト(?)ができていたわけで。
なにやらcookieを食べようとした形跡があるわけで。
#!/usr/local/bin/perl -w use strict; use warnings; use Web::Scraper; use URI; use Perl6::Say; use MIME::Type; use HTTP::Cookies; use LWP::UserAgent; use Path::Class; use Data::Dumper;sub p { print Data::Dumper::Dumper(@_) }; # cookie_jar
と思った。
キーボードをよく見ればわかるように、様々なキーが乱立している。Shift、Ctrl、Alt、Esc、そしてWindows/Appleキーもよくみられるようになっている。
しかしShiftだのCtrlだのAltだの、機能キーがどんどん増えていてはちゃめちゃになってきているように感じる。それにしてはタイピングというものにもっと大きな可能性が残されているように感じてならなかった。何が問題なのだろうか?
今までの話はキーボードといっても汎用コンピューター入力デバイスとしてよくみられるキーボードの話であった。一方キーボードというものには楽器用のキーボードもある。同じ指で打鍵するタイプだが大きな違いがある。和音を奏でるためによく複数の箇所を同時押しをするのだ。
汎用コンピューター入力デバイスとしてのキーボードに視点を戻してみる。同時押しといってもそれはShift、Ctrl、Alt、Windows/Appleなどのキーが主体であり、例えばCとVを同時押しするとか、PとDを同時押しするとか、そういう利用法はほとんどない。というよりワープロから考えればわかるように同時押しを同時押しではなく逐次押しとして処理していくようになっている。
なんかもったいないんだよなあ。
無論アルファベットなどのキーの同時押しを別処理用途として開放することにはデメリットもある。普通に高速タイピングしていると瞬間瞬間では複数のキーが同時に押されていることは多いのだろう。例えば「dir」と打鍵する場合も詳しくみていけば「d」、「d+i」、「i」、「i+r」、「r」という状態を経ているのかもしれない。ということは普通に高速タイピングしていても思わず修飾キーとして動作されて戸惑う場面が出てしまうかもしれない。
それでもやはりこの同時押しキー空間をほぼ封印しっぱなしにするのは実に惜しいと思うのである。
----
ここみる http://d.hatena.ne.jp/h_kenan/20080717
apt-get から install Encode
svn から Encode
cd [Encode Dir] してから sudo perl Makefile.PL
モジュール一括インストール? sudo -H cpan App::Mobirc
make && make test して出てきた not installed を f**k
=> install Test::Spelling
sudo gnome-terminal
cd /home/pc/.cpan/build/HTML-DoCoMoCSS-0.01
・・・いけたか?
・・・
・・・
・・・
はいむりー
まあ、昔はUNIXって手に入りづらかったから、UNI+とかそういうのがあったわけだ。
そこには「より一般化された方法論や機能性の強力さ」への渇望があったんだと思うし、それは「Windows 上がりなんで CUI 苦手で」とか口走る人の顔に浮かぶ恥じらいのような表情にも通底しているんだと思う。
なので、
1. dir最強
(snip)
はそのとおりだと思う。いまどきLinuxでも*BSDでもOpenSolarisでも(それこそバッドエンドかもしれないがCygwinでも)行っちゃえばいい。ただで行ける。そこには特に感興はない。
元々の感想は、大元の増田が情報を一覧整理してわざわざ増田にメモしようというような人であるにも関わらず、上のような一般性への希求があまり感じられないのが興味深いというものだったのだが、よくよく読むと大元増田にとっては「ファイル一覧イコールDVD上のMP3データ整理」なのだから、「音楽データ整理TIPS」として読めばそんなに不自然ではないのかも知れん。
リストを出したいフォルダに移動(cd)して『dir /b *.* > file_list.txt』を実行
ディレクトリのファイル一覧の採取に対して、「方法」とか「Tips」とか「dir最強」といった「大仰な言い方」ができる、というのはちょっと新鮮。
昔からCUI対GUI(ファイラー)論争とかは目にすることはあったけど、あれはあくまでCUI/GUI論争の一種で、何がどうあれファイルの一覧が採取できることは双方前提の話だったと思う。どっちが便利か好みかって話で。
そこはエクセルなのかーー。
「実はコマンドってのがあって、sortとかuniqとか使うとすごいんだぜ、へへん」というわけでもないし(この方向性は食傷)、淡々と網羅性も一貫性もない方法群を書き連ねる(それをファイル一覧採取に対して!!)、という感覚がちょっと新鮮。
●便利なシチュエーション
『dir /b *.* > file_list.txt』を実行
拡張子の指定で「特定拡張子のファイルのみ」、または「拡張子は異なるが同じファイル名」の一覧も作成可能。
ソフトのインストールも不要で使用環境を選ばない。最強。ただしソートには別途エクセルが必要。
重複ファイルの検索も可能
フォルダ以下のファイル一覧が作成可能。MP3のアルバムを、ZIP圧縮ではなく1フォルダ1アルバムで管理している際に便利
これでおしまいだよ
(require 'cl) ; for cl-seq (defvar sangels-movies-dir nil) (defvar sangels-player "c:/Program Files/GRETECH/GomPlayer/GOM.exe") (defvar sangels-sort-by 'sangels-sort-by-rate) (defvar sangels-rate-file "~/.emacs.d/.sangels/rate") (defvar sangels-buffer "*sangels*") (defvar sangels-thumbnail "00_thumbnail.jpg") (defvar sangels-m3u "00_movies.m3u") (defface sangels-name '((t (:family "fixed" :weight bold :height 3.0))) "") (defface sangels-rate '((t (:family "fixed" :weight bold :height 1.5))) "") (defvar sangels-mode-map (let ((map (make-sparse-keymap))) (define-key map "n" 'next-line) (define-key map "p" 'previous-line) (define-key map (kbd "RET") 'sangels-select) (define-key map (kbd "SPC") 'sangels-select) (define-key map "q" 'sangels-quit) (define-key map "+" 'sangels-rate-plus) (define-key map "-" 'sangels-rate-minus) map)) (defvar sangels-mode-hook nil) (defvar sangels-highlight-overlay nil) (defvar sangels-rate-alist nil) (defconst sangels-rate-max 6) (defun sangels-insert-movies () (save-excursion (let* ((inhibit-read-only t) (files (remove-if-not (lambda (x) (and (not (member (file-name-nondirectory x) '("." ".."))) (file-directory-p x) (member sangels-thumbnail (directory-files x)))) (directory-files sangels-movies-dir t))) (ids (mapcar 'file-name-nondirectory files))) (erase-buffer) (setq ids (sangels-sort-ids ids)) (dolist (id ids) (let ((file (expand-file-name id sangels-movies-dir)) (pos (point))) (insert-image-file (expand-file-name sangels-thumbnail file)) (end-of-line) (insert (propertize (format "%-15s " id) 'face 'sangels-name)) (sangels-insert-rate id) (insert "\n") (put-text-property pos (point) 'sangels-id id)))))) (defun sangels-sort-by-name (a b) (string< a b)) (defun sangels-sort-by-rate (a b) (or (> (sangels-rate a) (sangels-rate b)) (sangels-sort-by-name a b))) (defun sangels-sort-ids (ids) (sort ids (or sangels-sort-by 'sangels-sort-by-name))) (defun sangels-insert-rate (id) (let ((rate (sangels-rate id))) (insert (propertize (concat (make-string rate ?★) (make-string (- sangels-rate-max rate) ?☆)) 'sangels-rate t 'face 'sangels-rate)))) (defun sangels-current-id () (get-text-property (point) 'sangels-id)) (defun sangels-play-movie (movie) (let ((explicit-shell-file-name "cmdproxy") (shell-file-name "cmdproxy")) (apply 'call-process-shell-command "start" nil "*tmp*" nil (mapcar (lambda (x) (concat "\"" x "\"")) (list sangels-player (unix-to-dos-filename movie)))))) (defun sangels-select () (interactive) (let ((id (sangels-current-id))) (when id (sangels-play-movie (expand-file-name sangels-m3u (expand-file-name id sangels-movies-dir)))))) (defun sangels-quit () (interactive) (kill-buffer sangels-buffer)) (defun sangels-rate (id) (or (cdr (assoc id sangels-rate-alist)) (/ sangels-rate-max 2))) (defun sangels-rate-save () (interactive) (let ((dir (file-name-directory sangels-rate-file))) (unless (file-exists-p dir) (make-directory dir t))) (with-temp-file sangels-rate-file (insert (pp-to-string sangels-rate-alist)))) (defun sangels-rate-load () (interactive) (when (file-exists-p sangels-rate-file) (with-temp-buffer (insert-file-contents sangels-rate-file) (goto-char (point-min)) (setq sangels-rate-alist (read (current-buffer)))))) (defun sangels-rate-plus (&optional n) (interactive "p") (setq n (or n 1)) (let* ((id (sangels-current-id)) (cell (assoc id sangels-rate-alist))) (unless cell (setq cell (cons id (sangels-rate id))) (setq sangels-rate-alist (cons cell sangels-rate-alist))) (setcdr cell (+ (cdr cell) n)) (save-excursion (let ((inhibit-read-only t)) (beginning-of-line) (goto-char (next-single-property-change (point) 'sangels-rate)) (delete-region (point) (next-single-property-change (point) 'sangels-rate)) (sangels-insert-rate id))) (sangels-rate-save))) (defun sangels-rate-minus (&optional n) (interactive "p") (setq n (or n -1)) (sangels-rate-plus (- n))) (defun sangels-post-command-hook () (save-excursion (move-overlay sangels-highlight-overlay (progn (move-beginning-of-line 1) (point)) (progn (move-end-of-line 1) (forward-line) (point)) (current-buffer)))) (defun sangels-mode () (interactive) (kill-all-local-variables) (use-local-map sangels-mode-map) (setq sangels-highlight-overlay (make-overlay 0 0)) (overlay-put sangels-highlight-overlay 'face 'highlight) (overlay-put sangels-highlight-overlay 'evaporate t) (make-local-variable 'post-command-hook) (add-hook 'post-command-hook 'sangels-post-command-hook nil t) (setq major-mode 'sangels-mode) (setq mode-name "Sangels") (run-mode-hooks 'sangels-mode-hook) (set-buffer-modified-p nil) (setq buffer-read-only t)) (defun sangels (&optional arg) (interactive "P") (when (or arg (not sangels-movies-dir)) (setq sangels-movies-dir (read-directory-name "movies dir: "))) (sangels-rate-load) (switch-to-buffer (get-buffer-create sangels-buffer)) (sangels-insert-movies) (sangels-mode)) (provide 'sangels)
せっかく書いたから匿名でのせてみるよ
使い方は
必要なものを gem で取ってくるにはこうすればいいよ
長すぎてelispが消えたから続きがあるよ
@echo off setlocal set WD=%~dp0 cd /d %WD% ruby get_movies.rb ruby get_images.rb ruby create_m3u.rb
user: ユーザID password: パスワード ids_file: ids.txt done_file: ids_done.txt movies_dir: movies log4r_config: pre_config: global: INFO loggers: - name: app type: Log4r::Logger level: INFO outputters: - STDOUT - FILE outputters: - name: STDOUT type: Log4r::StdoutOutputter formatter: type: Log4r::PatternFormatter pattern: "%d [%l] %C - %M" date_pattern: "%H:%M:%S" - name: FILE type: Log4r::FileOutputter filename: "#{LOGDIR}/sangels.log" formatter: type: Log4r::PatternFormatter pattern: "%d [%l] %C - %M" date_pattern: "%Y-%m-%d %H:%M:%S"
require 'fileutils' require 'logger' require 'mechanize' BASEDIR = File.dirname($0) require "#{BASEDIR}/util" require "#{BASEDIR}/sangels" $config = load_config(BASEDIR) prepare_logger(BASEDIR) $log = new_logger("get_movies") WWW::Mechanize.log = new_logger("mechanize") WGet.log = $log class IDFile def initialize(file) @file = file unless File.exist?(@file) Fileutils.touch(@file) end end def ids(contains_comment = nil) File.open(@file) {|io| io.to_a.map {|x| x.chomp }.select {|x| if x.empty? nil elsif contains_comment true else not /^\s*\#/ =~ x end } } end def add(id) ids = ids(true) unless ids.any? {|x| x == id} write(ids + [id]) end end def delete(id) ids = ids(true) if ids.any? {|x| x == id} write(ids - [id]) end end def write(ids) File.open(@file, "w") {|io| ids.each {|x| io.puts x} } end end $log.info("BEGIN #{$0} ================") exit_code = 0 begin ids_file = IDFile.new($config.ids_file) done_file = IDFile.new($config.done_file) movies_dir = $config.movies_dir wget = WGet.new sangels = SAngels.new sangels.login($config.user, $config.password) ids_file.ids.each {|id| begin movies = sangels.movies(id) rescue SAngels::Movies::InvalidMoviesError $log.warn("invalid movie id: #{id}") next end dir = File.expand_path(id, movies_dir) movies.each {|link| wget.retrieve(link.href, dir) } expected = movies.movie_links.map{|x| File.basename(x.href)} actual = Dir.glob("#{dir}/*").map {|x| File.basename(x)} if (expected - actual).empty? done_file.add(id) ids_file.delete(id) end } rescue => e $log.error(e) exit_code = 1 end $log.info("END #{$0} (#{exit_code}) ================") exit exit_code
require 'fileutils' require 'logger' require 'mechanize' require 'ostruct' BASEDIR = File.dirname($0) require "#{BASEDIR}/util" require "#{BASEDIR}/sangels" $config = load_config(BASEDIR) prepare_logger(BASEDIR) $log = new_logger("get_images") WWW::Mechanize.log = new_logger("mechanize") WGet.log = $log $log.info("BEGIN #{$0} ================") exit_code = 0 begin movies_dir = $config.movies_dir sangels = SAngels.new sangels.login($config.user, $config.password) thumbnails = sangels.thumbnails Dir.glob("#{movies_dir}/*").each {|dir| next unless File.directory? dir id = File.basename(dir) url = thumbnails.url(id) unless url $log.warn("#{id} is not found") next end path = File.expand_path("00_thumbnail#{File.extname(url)}", dir) next if File.exist? path $log.info("retrieving #{url}") thumbnail = thumbnails.get_file(id) File.open(path, "wb") {|io| io.write(thumbnail)} } rescue => e $log.error(e) exit_code = 1 end $log.info("END #{$0} (#{exit_code}) ================") exit exit_code
BASEDIR = File.dirname($0) require "#{BASEDIR}/util" $config = load_config(BASEDIR) movies_dir = $config.movies_dir Dir.glob("#{movies_dir}/*") {|dir| next unless File.directory? dir name = File.basename(dir) files = Dir.glob("#{dir}/*.wmv").sort File.open("#{movies_dir}/#{name}.m3u", "w") {|io| files.each {|file| io.puts "#{name}/#{File.basename(file)}" } } File.open("#{dir}/00_movies.m3u", "w") {|io| files.each {|file| io.puts "#{File.basename(file)}" } } }
require 'mechanize' require 'hpricot' BASEDIR = File.dirname($0) require "#{BASEDIR}/util" class SAngels HOST = "real2.s-angels.com" LOGIN_URL = "http://#{HOST}/member/" INFO_URL = "http://#{HOST}/teigaku/item.php" THUMBNAILS_URL = "http://#{HOST}/teigaku/" THUMBNAIL_URL = "http://#{HOST}/images/default/thumb/" def initialize() @agent = WWW::Mechanize.new end def login(user, password) login_form = @agent.get(LOGIN_URL).forms.find {|form| form.fields.any? {|field| field.name == "frmLoginid"} } login_form.frmLoginid = user login_form.frmPw = password @agent.submit(login_form) end def movies(id, no_validate = nil) Movies.new(@agent, id, !no_validate) end def thumbnails Thumbnails.new(@agent) end class Thumbnails def initialize(agent) @agent = agent doc = Hpricot(@agent.get_file(THUMBNAILS_URL)) elems = doc.search("div[@class=realthum]/a") @links = Hash( elems.map {|elem| href = elem["href"] id = $1 if /ID=(.+)/ =~ href url = elem.search("img")[0]["src"] [id, url] }) end def get_file(id) @agent.get_file(url(id)) end def url(id) @links[id] end def exist?(id) url(id) end end class Movies class InvalidMoviesError < StandardError end def initialize(agent, id, no_validate) @agent = agent @id = id if !no_validate && !valid? raise InvalidMoviesError end end def info_page_url "#{INFO_URL}?ID=#{@id}" end def info_page @agent.get(info_page_url) end def movies_page @agent.click(info_page.links.find {|link| /P=10/ =~ link.href}) end def movie_links movies_page.links.select {|link| /wmv$/ =~ link.href }.sort {|a, b| File.basename(a.href) <=> File.basename(b.href) } end def valid? info_page.uri.to_s == info_page_url end def each(&block) orig_links = movie_links orig_links.each {|orig_link| link = movie_links.find {|l| File.basename(l.href) == File.basename(orig_link.href)} block.call(link) } end end end
require 'log4r' require 'log4r/yamlconfigurator' require 'singleton' require 'fileutils' require 'ostruct' def Hash(a) Hash[*a.flatten] end def load_config(basedir) OpenStruct.new(File.open("#{basedir}/config.yaml") {|io| YAML.load(io)}) end def new_logger(name) Log4r::Logger.new("app::#{name}") end def prepare_logger(basedir, logdir = nil) logdir ||= basedir Log4r::YamlConfigurator["LOGDIR"] = logdir Log4r::YamlConfigurator.load_yaml_file("#{basedir}/config.yaml") end class NullObject include Singleton def method_missing(message, *arg) NullObject.singleton end end class WGet class << self attr_accessor :log def initialize super @log = NullObject.singleton end end def log self.class.log end def retrieve(url, dir) FileUtils.mkdir_p(dir) file = File.expand_path(File.basename(url), dir) if File.exist?(file) log.info("already retrieved #{url}") return true end tmp = "#{file}.part" log.info("retrieving #{url}") ret = system("wget", "-c", "-O", tmp, url) if ret log.info("retrieving succeeded #{url}") File.rename(tmp, file) else if $? == 0x020000 # Ctrl-C exit($?) else log.error("retrieving failure #{url} (#{$?})") end end return ret end end