「Dir」を含む日記 RSS

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

2016-11-28

SIerランク

ランク 企業

A+ OracleCiscoNTTデータSAP

A 日立製作所富士通

A- 日本IBMNTTコミュニケーションズアクセンチュア野村総研(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兼松エレクトロニクス都築電気

日興システムソリューションズ、キャノンITソリューション

D 損保ジャパン日本興亜システムズ、インフォコムセゾン情報システムズ日商エレクトロニクス

コベルコシステムIIJネットワンシステムズパナソニックインフォメーションシステムズ、

菱化システムJRシステム富士通システムイースト東芝ソリューション富士通FIP

D- ユニアデックスNECネッツエスアイ日立産業制御ソリューションズ、

三菱電機インフォメーションシステムズMS&ADシステムズ、NTTソフトウェア

NTTアドバンステクノロジ、JFEシステムズ、テクマトリックス三井情報第一生命情報システム

ソニーグローバルソリューションズ、ワークスアプリケーションズ

E+ 富士通システムウエスト富士通マーケティング三菱電機インフォメーションネットワーク

中央コンピュータシステムティージー情報ネットワークリンクレアジャストシステム

E NECフィールディングNEC情報システムズ富士通BSC日本情報通信

住友電工システムソリューションJR西日本ITソリューションズ、

インテック明治安田システムテクノロジー

E- 富士通ネットワークソリューションズ、日立公共システムNEC通信システム

スミセイ情報システム丸紅情報システムズ双日システムズ

京セラコミュニケーションシステムsky

F+ 日立ソリューションズクリエイトキヤノンソフトウェアさくら情報システム

トヨタコミュニケーションシステムエクサアイネスTKCCACCEC、SRA

F クオリカNSDDTSさくらKCS東邦システムサイエンス、菱友システムズ、

ヤマトシステム開発CTCシステムマネジメント

G 大塚商会富士ソフト、コア、アルファシステムズ

H トランスコスモス旭情報サービス、ジャステックシステナ、Minoriソリューションズ、

東京コンピュータサービス

2016-06-25

ドル株価暴落してるタイミングで、海外ETF購入手数料を安くあげる

最近流行りのインデックス投資をする際には、手数料が安い投資信託またはETF投資先として選ぶ必要がある。

米国ETFであるヴァンガードトータルワールドストック(VT)は、ランニングコストの点で優れているのだが、購入の際に手数料がそれなりにかかってしまう。多分そのせいもあって、国産インデックス投資信託にいい物が出てきた昨今では微妙に人気が落ちつつある。投信ブロガー2015年評価は第3位で、前年から順位を2つ落とした(http://www.fundoftheyear.jp/2015/)。

しかし、ネット証券会社が行っているキャンペーンを利用すれば、条件付きながら、米国ETFの購入時の手数料結構下げることができる。

自分が使っているSBI証券での手数料削減方法について以下に記載するが、もっといい方法があればご教示いただきたい。また、自分の考えに誤りがあればご指摘いただきたい。

1. 為替コスト削減

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を積み立てることができるようになる。

しかし、もっといい方法があればご教示いただきたい。

2015-12-02

増田twitterを埋め込む方法: サンプル有り

twitterツイート増田に埋め込む方法を丁寧に書きます

*さっき一部の半角文字増田で書けないと書きましたが数値文字参照にすれば書けました。訂正します!教えてくれた人あんがとー!でもスーパーpre記法ではこのやり方通用しなかったのでシンタックスカラーは無し。

 

twitterから引用する埋め込みHTML要素を持ってくる

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>&mdash; 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>&mdash; IFTTT (@IFTTT) <a href="https://twitter.com/IFTTT/status/662023324306837504">2015, 11月 4</a></blockquote>

確認する

確認するボタンツイートが埋め込まれてないのであれ?と思うかもしれませんがそのまま「この内容を登録する」を押してください。

ツイートの埋め込みを確認する

増田タイムラインでも埋め込みツイートは表示されずたんなる引用として表示されます。あれ?となるけど書いた増田記事の本文URLを開いてください。本文を表示した場合のみツイートが埋め込みで表示されます

応用すると以下のようにツイート内にインラインされている動画増田にインライン出来るなど夢が広がりますね。あと増田コードサンプルを書くにはクソですね。

参考

増田Twitter引用法まとめ

増田では半角山括弧が使えない?

増田だとスーパーpre記法内で&をそのまま書けない件

はてな記法一覧 - はてなダイアリーのヘルプ

IFTTT(@IFTTT)さん | Twitter

アメコミ大全集(TM)(@amecomic)さん | Twitter

2014-05-21

Windows8はクソ(3本目)

エクスプローラーでの検索がクソ

@マークインデックスされてねーじゃねーか

@以外でも一文字だとヒットしないことが多いんだが。

例えば「ん」で検索しても「うんこフォルダが引っかからない

「うん」だとヒットする、、、

逆に「ほげほげ」というフォルダを探したい時、

「ほ」「ほげ」「ほげほ」ではヒットするのに「ほげほげ」ではヒットしないこともある

以前のような全探索はどうやんだよ?

DOSプロンプトでdirコマンド使うとか、ライトユーザーには無理だって

あとインデクシングしてる割には検索が遅すぎだろ、クソが

おい、マイクロソフト社員

お前らWindows使ってんのか?

なんでこのクソOSを発売できたのか、不思議でならない。

2013-04-19

http://anond.hatelabo.jp/20130419021708

人生相談だったんですね。それもコンテンツ業界の話ですね。

でも、最近の高スペックって何なんだろう。

一般的な高スペックって、経歴書に書かれた社名だったりします…。

コンテンツ業界と行っても上流~下流まであるじゃないですか。上流の人間は重宝されます

もちろんですが、年齢によっても評価が変わりますよね。

業界10年以上いるなら、何よりも技術と実績。何を作ってきて、どんな立ち回りをしてきたのか。

そして、プロジェクト管理能力の有無。若い人は育てれば良いのでポテンシャル採用ですが、年増は人的スキル必須

強みがあってもなくても最後は「使いやすい」「話しやすい」で決まります。人的スキルが最重要

自分がいた会社では、技術的に厳しい人が半ディレクター的な立ち回りで評価されてました。

コミュ力なし社畜(言われたことはやるが、提案は一切しない)率が高くて、DirやDesとコミュニケーション取れなかったんで。

この業界10年以上いるなら、他社も5~6社程度は知っていますよね?(いい噂はあまり入ってこないですが…)

有名どころは常時募集をかけていて、技術力、もしくはポテンシャル採用若い駒を必要としています

そこらはあえて、避けて選んでいるんでしょうか?

最初元増田から読み取れたのは「当たって砕けている」印象でした。

「ヤ○ザまがいの人がでてきたり」と言うのは、出会いサイトエロチャットを作ってるっぽいし

企業サイトにもコンテンツ実績なんて出してないはずだし、業界内で名前を聞かない会社だったんでは?

業界経験浅くて、右も左もわからないのかな…と思った次第です。

やや古い情報ですが、1~2年前はiPhone/Androidアプリ技術者が不足していましたよね。

社内で人を育てている時間がないか制作会社に丸投げ。それをコントロールできる人も不足してた。

自分がいた会社JavaPHPばっかで、C書ける人がいなかったです。(自分Dirなんであまり詳しくないですが)

面接を受けている時に、これから自社でソシャゲ作りたいって会社さんも何社かあったので

ソシャゲ作っていない会社に言って、ニーズを掘り起こしてみるのも良いかもしれないですよ。

自分はソシャゲの開発経験がないので、求人に書いていないことを求められて困りました。

元増田さんは第一線で活躍する自信や意気込みがないということなので、WEBでも流れがゆるやかなところに移ってみるのはどうですか?

この点は、自分も専門外なんで憶測になりますが、ECサイト企業WEB運営担当求人賃貸物件検索等のサイト運営など

基本DBサイトって、アプリ開発やソシャゲほどのスピードは求められないんじゃないですかね?

自分はソシャゲは作ってないんですが、旗から見てても、モバイル特にソシャゲは異様なスピード感なんで

コンテンツからサービス主体の制作へ移られると、少し楽になるかもしれないと思いました。

派遣なら、担当の方に業種チェンジ相談すればマッチングミスが防げるし

別の増田を立てて、経験者の話を募ってみてはどうでしょう

と言うか、学生からDQNになってればって、どんだけ高学歴なんだよ!

DQNで打たれ強くなれる人はごく一部の苦労人だけで、他は後から苦労してます。悲観しないでくださいよ。

2013-01-30

アップグレード版の Windows 8 を(ほぼ)クリーンインストールする方法


1. DVDブート

2. インストールの種類を選んでください:「カスタム」をクリック

3. Windowsインストール場所を選んでください:「ドライブオプション」をクリック

  3-1. すべてのパーティションを「削除」

  3-2. 「新規」をクリックするとパーティションが2個できる

  3-3. システムに予約されていない方をフォーマット

4. Shift キーを押しながら F10 キーを押してコマンドプロンプトを起動する

  4-1. diskpart コマンドインストールするパーティションドライブベルを確認する

> diskpart
DISKPART> list vol
DISKPART> exit

  4-2. 空の WINDOWS フォルダ作成する

> mkdir E:\WINDOWSdir E:\
> exit

5. WINDOWS フォルダ作成したパーティションを選択して「次へ」

6. インストールが終了したら C ドライブ直下Windows.old フォルダを削除する

XP~7 の正規ライセンスがあるなら、この方法が一番楽かな。

アップグレード版を2回インストールしても結果は同じだけどね。

2012-11-12

[][]一応メモ

609 :実名攻撃大好きKITTY:2012/11/02(金) 20:30:54.20 ID:e/Mxbvll0
    &gt;&gt;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;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;amp;dir=prev&amp;amp;offset=20110329161021&amp;amp;limit=500&amp;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 

http://engawa.2ch.net/test/read.cgi/ojyuken/1348238669/

どこかで見た感じです。

2011-06-27

jQuery.fileTree と 日本語ファイル名 (IIS & PHP)

IIS+PHP(つまりWindows環境)で

A Beautiful Site (http://abeautifulsite.net/)さんの

jquery.fileTreeを利用させてもらった。

以下、留意点...

script:

パスを指定しないと、もとのhtmlがあるパス(ディレクトリ)にあるもの解釈する。

(/jqueryFileTree.php と指定すると、公開しているルートディレクトリにあるjqueryFileTree.phpを探しにいく)

http://...と指定して他のサーバへ問い合わせるのも可能な模様(だが、試していない)。

root:

Windows場合は、最後に/または¥が必要。

d:/

d:/temp/

など

日本語文字化け対策:

hemlentries -&gt; htmlspecialchars は必須。

 http://treatment-head.blogspot.com/2008/11/jquery-file-tree_21.html

 ただし、UTF-8EUC-JPでページを記述している場合は、さらに処理が必要。

phpではscandirなどのファイル処理において

windowsでは、mbstringの設定にかかわらず、引数SJIS渡し、戻り値SJIS返しの模様。

したがってUTF-8EUC-JPでページを記述している場合は、

その点を考慮してconnectorsフォルダにあるjqueryFileTree.phpを書き換える必要がある。

(きれいなソースでないので公開はちょっと控えます)


この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

他、ご参考

 http://life-hack.jp/blog/charly/151

2010-10-19

NEC VALUESTAR VW500をリカバリ領域のみで再セットアップするまでのまとめ

自分用および同様の症状で困っている方用ログ

当初の目的ブートエラーからの復帰

友人から起動しなくなったとヘルプが来たので急行

電源ボタンを押し、BIOS起動後、ブート中にこんなエラー

A disk read error occurred

Press Ctrl+Alt+Del to restart

帰省中1ヶ月ほど放置し、久しぶりに電源を押すとエラーが出るようになったらしい。

変なソフトインストールBIOSアップデート等はしていないとのこと。

エラー復旧に1週間も無駄にした挙句挫折

当初はF8キーを押して[詳細ブートオプション]を開ければ、すぐに直せると思っていたけど、

ブートから進まないのだからF8キーを押しても同じエラーが出るだけ。

一応、F2キーBIOS設定画面を開き、[Load Setup Defaults]を試すも症状変わらず。

 

また、VISTAにはXPの[回復コンソール]がなく、[システム回復オプション]という復旧手段が用意されている。

しかし、このマシンプリインストール版なので、ディスクからの起動できない。

この場合はF8キーを押して[詳細ブートオプション]を開いて、そこから起動できるようだ。

・・・・・・\(^o^)/オワタ

 

その後、試行錯誤を繰り返した結果、再セットアップするしかないという結論に至った。

KNOPPIXデータバックアップを取っておこう

バックアップするにもWindowsが起動しないので、こんな時はいつもLinuxOS Knoppixに頼っている。

公式サイトhttp://www.rcis.aist.go.jp/project/knoppix/)ではDVD版とCD版がiso形式で配布されており、DVDなりCDなりに焼けばOSディスク起動できる優れもの

さらにCD版をUSBインストールしたUSB版も作成できるので、非常用に1つ作っておくと便利。

以下、USBKnoppixの作り方。

こちらのサイトUSB-Knoppixではじめよう http://yumenohako.jp/cgi-bin/knoppix/wiki.cgi)を参考に簡単に解説。

【本題】リカバリディスク(再セットアップディスク)をどうやって作る?

このマシンは前述の通りプリインストール版なのでインストールディスク(再セットアップディスク)が付属していない。

では、どうやって再セットアップするかというと、

しかし、今回はF11キーを押してもエラーが表示されるのみ。それにわざわざリカバリディスク作成しているはずもなく手詰まり

リカバリディスクはこちら(http://nx-media.ssnet.co.jp/から購入できるけど価格は1万円。自作するしかない。

そもそも本来はリカバリディスク作成できるのだからHDD内のどこかにリカバリディスク用のデータが入っているはず。

そこで再びKNOPPIXを起動してみると、[NEC-RESTORE]という名前リカバリ領域が隠しパーティションとして用意されていた。

以下、リカバリ領域を使ったリカバリディスクの作り方。

こちらのサイトLaVieレストア顛末記 http://deme.jp/wing/vol019/demeshin/NEC.htm)が大変参考になった。感謝

以上の作業により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

A:\GHOSTERR.TXT

[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

or contact systematec support

どうやらイメージファイルが壊れているらしい。

このイメージファイルとは、前述リカバリディスク作成手順6以降の[拡張子GHSファイル]。GHSGHOSTの略か?

そこで、Disk4,5,6をNERO9体験版太陽誘電製のTHE日本製DVD-Rを使用し、

念のためディスク1枚あたり4GBを超えないようにし、4倍速で焼き直してみたところ、今度は正常に再セットアップが完了。

最初Windowsに標準装備されている[ディスクへの書き込み]+台湾製の安物DVD-Rを使用したのだが、

どこかで焼きミスしたことがエラーの原因だったらしい。

これを教訓に次からは絶対にライティングソフト国産ディスクを使うことにしよう。

(追記10/22)HDD健康状態は「注意」レベル

CrystalDiskInfoを使用してHDDの状態を調べたところ、案の定「注意」レベルだった。

注意項目生の値 
代替処理保留中のセクタB(11
回復不可能セクタ25(37)

※[生の値]の数値はデフォルトが16進数表記。括弧内は10進数に変換した数値。

やっぱり当初のエラーHDD故障とまではいかなくとも寿命が近いということだったのか。

使用時間は17000時間HDDの交換を検討した方が良いけど、一体型の交換は難しいような。

まずはWestern DigitalHDDからData Lifeguard Diagnosticsでゼロフィルをやってみる予定。

エラーチェックで完全に逝くかもしれないけど、バックアップもしてるし、リカバリディスクもあるし。

あと、VistaのバーションはSP1だと思っていたけど、まだ更新していなかった模様。

そこで更新プログラムインストールしてみると途中で止まってしまい、修復スタートアップする羽目に。

(追記10/24WD Data LifeGuard Diagnosticsのゼロフィルで「正常」に回復

Vista SP1の導入に失敗し、修復スタートアップを行ったものの、12時間経っても終わらず。

そこでいっそのことHDDデータを完全に消去して、再セットアップすることにした(7時間ほどかかる)。

方法としては先日のとおり、Western DigitalHDDの診断ツール「Data Lifeguard Diagnostics」を使用する。

このツールはFDD版とCDしかないので、いつものようにUSB版の作成を試みる。以下作り方と使用方法

再セットアップ後、CrystalDiskInfoを実行すると見事に「正常」レベルに回復。

前回注意項目だった「代替処理保留中のセクタ」と「回復不可能セクタ数」の生の値は0に変化。

なぜか使用時間が14000時間に減少していたものの、とりあえずはHDD故障心配はしなくていいかな。

ちなみにSP1の導入は成功。今後はCrystalDiskInfoを常駐させ、監視を続けることにする。

 

(追記11/8/18)そろそろ限界

あれから10か月後、悪夢ブルースクリーン降臨したので、またクリーンインストールを行った。

CrystalDiskInfoを使用してHDDの状態を調べたところ、「注意」レベルに逆戻り。

注意項目生の値 
代替処理保留中のセクタ2D9(729)
回復不可能セクタ70(112)

※[生の値]の数値はデフォルトが16進数表記。括弧内は10進数に変換した数値。

以前のエラー時よりさらに状況が悪化しており、HDD寿命がかなり迫っている模様。

いつ突然死を迎えてもおかしくないので、重要データバックアップのうえHDDの交換を予定。

 

ブログがないので、増田ログ残し。ツッコミや質問はid:frsattiまで。

2010-10-16

はてな匿名ダイアリー

たかがコピペ相手にそこまで憤慨している増田が怖すぎる。 思い込みが激しすぎるというか、独善的というか。 リアルでこんな人と関わりあいたくねえええええ. 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

2009-10-04

グーグルマップ壁紙にしてみる

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などで拾ってください。

2009-06-14

download festival

めっちゃ楽しみにしてたのにマンソン中継なし(´・ω・`)

slipknot気になるけど寝よ。

しかし昨日リンプKORN見たんだけど、無料なのに中継のクオリティ高杉ワロタ。

日本はこういうの、カスラックがあるからできないのかな。

地球の裏側のフェスを中継で見られるとか、いい時代になったもんだね。

あと、別のステージだけどdir en grayが出ててびっくりした。

dirがんばってるなあ。

2009-06-13

http://anond.hatelabo.jp/20090613045856

周波数は、数GHzでしばらく止まっている。

変わりにコア数の増加で技術革新は進んでいる。


試しに、MS-DOSを入れて、dir ってうってみては?

あまりに速くて、ひゅん!で終わってしまうと思う。


あと、NEC製のPCは、ピポッ!!って起動音がするが、CPU速度が上がるにつれて

ピポーが、ピポッになり、ピッ、、とついには音が聞こえないくらいに音域の周波数

随分あがってしまったので、誰も聞き分けられないくらいに速くなったのだよ。


あぁ、素晴らしきかな。

2009-04-14

http://anond.hatelabo.jp/20080822142610

スーパー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


  

2008-12-09

全てのキーが修飾化すればいいのに

と思った。

キーボードをよく見ればわかるように、様々なキーが乱立している。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」という状態を経ているのかもしれない。ということは普通に高速タイピングしていても思わず修飾キーとして動作されて戸惑う場面が出てしまうかもしれない。

それでもやはりこの同時押しキー空間をほぼ封印しっぱなしにするのは実に惜しいと思うのである。

----

いや、決して、ゲームでzxcキーの同時押しがきかないキーボードばかりだと不便だなあと思ったからとか、そういうわけでは…

2008-11-01

mobircいれるじゅんばんのメモ

svn から mobirc

ここみる 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

やっぱり HTML::DoCoMoCSS でコケたので

make && make test して出てきた not installed を f**k

=> install Test::Spelling

=> install Test::Perl::Critic

=> install Test::Pod

sudo gnome-terminal

cd /home/pc/.cpan/build/HTML-DoCoMoCSS-0.01

make && make install

・・・いけたか?

・・・

・・・

・・・

はいむりー

2008-10-19

http://anond.hatelabo.jp/20081019124317

まあ、昔はUNIXって手に入りづらかったから、UNI+とかそういうのがあったわけだ。

そこには「より一般化された方法論や機能性の強力さ」への渇望があったんだと思うし、それは「Windows 上がりなんで CUI 苦手で」とか口走る人の顔に浮かぶ恥じらいのような表情にも通底しているんだと思う。

なので、

1. dir最強

(snip)

10. おれはUNIXいくぞ。UNIXいく。

はそのとおりだと思う。いまどきLinuxでも*BSDでもOpenSolarisでも(それこそバッドエンドかもしれないがCygwinでも)行っちゃえばいい。ただで行ける。そこには特に感興はない。

元々の感想は、大元の増田情報を一覧整理してわざわざ増田メモしようというような人であるにも関わらず、上のような一般性への希求があまり感じられないのが興味深いというものだったのだが、よくよく読むと大元増田にとっては「ファイル一覧イコールDVD上のMP3データ整理」なのだから、「音楽データ整理TIPS」として読めばそんなに不自然ではないのかも知れん。

http://anond.hatelabo.jp/20081019121356

そこは増田メモなんだから別にどうこうないとおもうが。

つーか

  1. dir最強
  2. sort!uniq!
  3. cmd.exe愛してる
  4. sh知らない奴はもぐり
  5. やっぱlsだろ
  6. grepつよすぎ
  7. findあれば死ね
  8. sedないと死ぬ
  9. 俺はshを知らなさすぎた
  10. おれはUNIXいくぞ。UNIXいく。

http://anond.hatelabo.jp/20081019044429

フォルダ内のファイル名一覧をテキストにする方法

リストを出したいフォルダに移動(cd)して『dir /b *.* > file_list.txt』を実行

拡張子の指定で「特定拡張子ファイルのみ」、または「拡張子は異なるが同じファイル名」の一覧も作成可能。

ソフトインストールも不要で使用環境を選ばない。最強。

ディレクトリファイル一覧の採取に対して、「方法」とか「Tips」とか「dir最強」といった「大仰な言い方」ができる、というのはちょっと新鮮。

昔からCUIGUI(ファイラー)論争とかは目にすることはあったけど、あれはあくまでCUI/GUI論争の一種で、何がどうあれファイルの一覧が採取できることは双方前提の話だったと思う。どっちが便利か好みかって話で。

ただしソートには別途エクセルが必要。

そこはエクセルなのかーー。

「実はコマンドってのがあって、sortとかuniqとか使うとすごいんだぜ、へへん」というわけでもないし(この方向性は食傷)、淡々と網羅性も一貫性もない方法群を書き連ねる(それをファイル一覧採取に対して!!)、という感覚がちょっと新鮮。

http://anond.hatelabo.jp/20081019044429

DOSコマンドの記載についてdir/bだと出力されるのは

カレントフォルダファイルのみだけどいいの?

サブフォルダフォルダ対象にならんの?

tree/F

dir /S

サブフォルダファイルとかも書き出すべきじゃね?

[]フォルダ内のファイル名一覧をテキストにする方法

●便利なシチュエーション

  1. 大量のMP3ファイルや圧縮ファイルを持っているが、通常の稼動ドライブバックアップドライブに分割してしまわなければならない時
  2. DVD-Rなどにデータバックアップする際のインデックスファイルの作成
  3. DVD-RなどにバックアップしたデータがどのDISKに入っているかの一覧作成(蔵書リスト的なもの)

コマンドプロンプトを使う http://cmd-pro.com/m_list.html

リストを出したいフォルダに移動(cd)して

dir /b *.* > file_list.txt』を実行

拡張子の指定で「特定拡張子ファイルのみ」、または「拡張子は異なるが同じファイル名」の一覧も作成可能。

ソフトインストールも不要で使用環境を選ばない。最強。ただしソートには別途エクセルが必要。

ファイル構成テキスト化ツール Ver1.56 http://kenchin8.hp.infoseek.co.jp/program.html


リストアップ!! http://www.vector.co.jp/soft/win95/util/se340173.html

重複ファイルの検索も可能

LS - ファイル一覧の出力 http://www.vector.co.jp/soft/win95/util/se247619.html

フォルダ以下のファイル一覧が作成可能。MP3アルバムを、ZIP圧縮ではなく1フォルダ1アルバムで管理している際に便利

NNScanText http://www.vector.co.jp/soft/winnt/util/se271444.html

ファイル名だけではなく、画面内のテキスト抽出できる

2008-10-18

http://anond.hatelabo.jp/20081018072817 の続きだよ

これでおしまいだよ

elisp

sangels.el
(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 (&amp;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 (&amp;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 (&amp;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)

real street angels から mechanize を使って動画を取ってきてEmacsで見てみるよ

せっかく書いたから匿名でのせてみるよ

使い方は

  • 動画を取ってきたいよ
    • config.yamlユーザとかを設定するよ
    • ids.txt に取ってきたいIDを書くよ
    • sangels.bat を実行するよ
  • Emacs動画を見たいよ
    • sangels.el を load するよ
    • M-x sangels だよ

必要なものを gem で取ってくるにはこうすればいいよ

  • gem install -r log4r
  • gem install -r -v 0.6 hpricot
  • gem install -r mechanize

長すぎてelispが消えたから続きがあるよ

sangels.bat - 起動用バッチファイル

@echo off
setlocal
set WD=%~dp0
cd /d %WD%

ruby get_movies.rb
ruby get_images.rb
ruby create_m3u.rb

ruby

config.yaml - 設定ファイル
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"
get_movies.rb
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
get_images.rb
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
create_m3u.rb
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)}"
    }
  }
}
sangels.rb
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 &amp;&amp; !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(&amp;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
util.rb
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
ログイン ユーザー登録
ようこそ ゲスト さん