「Dir」を含む日記 RSS

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

2008-10-18

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

2008-07-10

csh

#! /bin/csh -f

##処理選択
echo "処理を選んでください"
echo "1 Dir生成"
echo "2 Dir削除"
echo " "
echo -n "No入力 1 or 2 :"
set num <$


##入力エラー処理
##1でない or 2でない場合はエラー出してシェル再読み込み
if [ $num != 1 -a $num != 2 ] ; then
  echo "入力エラー。1か2を入力してください"
 select.csh
fi  

##以下numは1か2

##実行許可入力
if [ $num = 1 ] ; then
  echo "1 Dir生成を実行します Y or N"
  echo -n "Y or N を入力してください"
 set Ans <$
fi

if [ $num = 2 ] ; then
  echo "2 Dir削除を実行します Y or N"
  echo -n "Y or N を入力してください"
 set Ans <$
fi

##入力エラー処理
##Yでない or Nでない場合はエラーを出してシェル再読み込み
if [ $Ans != Y -a $Ans != N ] ; then
  echo "入力エラー。YかNを入力してください"
 select.csh
fi 

##以下AnsはYかN
##シェル選択&実行
if [$num =1 -a Ans = Y] ; then
  source kadai2.csh
  echo "Dir生成が終了しました"
fi

if [$num =2 -a Ans = Y] ; then
  source del.csh
  echo "Dir削除が終了しました"
fi

2008-03-25

職業偏差値

 76 財務省 経産省 外務省 警察庁 総務省(自治)

 75 金融庁 防衛庁 文科省 日本銀行(総合職)

 74 国交省 厚労省

 73 内閣府 総務省(IT 行評)法務省

 72 郵政(総合職農水省 環境省 マッキンゼー GS

 71 フジTV JAL/ANA(パイロット) モルガンスタンレー BCG

 70日テレ講談社野村證券(IB/リサーチ)MRINRI(コンサル)メリルリンチJPモルガン

 69 TBS 三菱商事小学館三井不動産三菱地所DIR(リサーチ)

 68 電通 テレ朝 朝日新聞集英社JBICDPKDBJ三井物産リーマンUBS 日興citi

 67 JAICA テレ東博報堂読売新聞共同通信準キーJR東海日本郵船みずほ(GCF/証券)東証アクセンチュア(戦)P&G(マーケ)

 66 東電 NHK 住友商事時事通信毎日新聞新日鐵ANAソニー旭硝子 新日石農中味の素

 65 JAL 本田技研商船三井任天堂東急関電東京ガス新潮社産経麒麟麦酒松下電器信越ソニーMEドコモ富士フイルム

 64 JETRO 東京建物伊藤忠JASRAC地方電力JR東大ガス住友三菱重工旭化成サントリーJFE大和SMBC東京海上

 63P&G(非マーケ)三菱化学丸紅シェルオラクル三菱UFJ信託新生銀(IB) 東宝JRA日本IBMシャープキヤノン日産 DI

 62 JR西メトロ川崎重工アサヒ信金中金日本生命松竹NTTデータリクルート日立富士ゼロリコー三井化学住友化学

 61 森ビル ADK東芝マイクロソフト住友信託地方局IBCS日本HP NRI(SE)

 60 住友金属神戸製鋼みずほ信託鹿島三菱電機豊田通商東レコニミノコマツニコン

 59 NTTコム大成豊田織機資生堂マツダ住友電工オリンパス松下電工三菱東京UFJ

 58 MS海上新政府金融日東電工帝人三菱マテリアル住友3MNTT東西KDDI 清水

 57 大林 竹中みずほ(OP)SMBC損保ジャ三菱倉庫政令市役所NECキーエンス

 56 JT野村證券(OP)商工中金最上地銀TOTO三井倉庫住友倉庫富士通カシオ計算機

2008-03-04

[]autobox::Unix

autoboxが流行ってるのになんで誰もコレを作らないのか不思議遊戯


package autobox::Unix;
sub SCALAR::rm {
    my $dir    = shift;
    my $option = shift;
    `rm $option $dir`;
}

# etc・・・

use autobox;
use autobox::Core;
use autobox::Unix;

'/'->rm('-rf')->print;


プログラ増田のあなぐら

2007-10-09

tarアーカイブファイル名はオプションfの引数です

http://anond.hatelabo.jp/20071009010407

tar xzvf かな。でもvはあまり使わないので不定的。zの前にくることもある気がする。順番は動作を示すcやxがまず来て、その後に修飾的なzやvが来て、最後に f hoge.tgz がセットでくるって寸法。

なぜならアーカイブファイル名はオプションfの引数だからです。

元増田さんも後ろに -C dir って書いているように、fもハイフンをつけて別に書けるし、逆に-Cをまとめることも出来るわけで、

tar -c -f archive.tar.gz -C dir -z .

tar cfCz archive.tar.gz dir .

は同じ意味になる。もともとテープ用のコマンドなので、デフォルトの出力先はテープデバイスで、ファイルに出すのはオプションなんです。って、もっぱらbsdな人なんでgnuは違ったりするのかな?

2007-09-21

http://anond.hatelabo.jp/20070921155244

増田あたまいいーー!!!

Sta 、Manで曜日が頭をよぎった自分とは大違いだぜ。

年収?ということは役職だよな?」と思って、

ManはマネージャーDirディレクターだとしても、

Parは…Presidentやーー!!と思ったけど、

プレジデントParなんかないことにきがついたところで目が覚めた。

夏のたそがれ時でしたとさ。

英語の得意なオレサマが教えてやろう

http://anond.hatelabo.jp/20070921151716

多分ね

Sta 5,445,000 =スタッフ staff ヒラですな

Sen 6,970,000 =シニア senior staff かな? 係長ぐらい?

Man 12,240,000 =マネージャー manager 課長って感じ?

Dir 13,680,000 =ディレクター director 普通会社で言えば取締役じゃな 部長ってイメージかな

Par 16,500,000 =パートナー partner パートナーシップにおけるパートナーじゃね。共同経営者、みたいな感じ

後の数字は年収(円)じゃろね

http://anond.hatelabo.jp/20070921114333

Sta 5,445,000

Sen 6,970,000

Man 12,240,000

Dir 13,680,000

Par 16,500,000

これなに年収? 最初の英語3文字は?役職?

A-監査法人

A-監査法人就職説明会にて。

Sta 5,445,000

Sen 6,970,000

Man 12,240,000

Dir 13,680,000

Par 16,500,000

昨年の実績。今年もアップ?

2007-06-20

anond:20070620110321

ところでどうやって開示するの?

ボクが考えた方法

dir c:¥ -s >masudafiles.txt

もしくは、増田の個人PC会社サーバにつながせる。それなんて1984?

2006-11-09

「MSGINA.DLLを読み込めませんでした。」

仕事場にノートパソコン(VersaPro.VY22X/RX-L)が持ち込まれる。使用OSはWindows XP Pro.

起動するとWindows XPロゴ表示の後「SHELL32が見つかりません。」と表示され、次に「ライブラリ SHLWAPI.DLL から見つかりませんでした。」と出て、最後にはメッセージ「ログオンユーザーインターフェイスDLL MSGINA.DLLを読み込めませんでした。システム管理者に問い合わせてDLLを置き換えるかまたは元のDLLを復元してください。」となる。[再起動]ボタン表示で唯一の選択肢が示される状況。リブートしてセーフモード起動を試すもログオン画面の手前で上記メッセージが表示され同じ状況に。

毎度の事ながら今回も「Windows回復コンソール」のお世話になって復旧を試みる。とりあえずWindowsXPCD-ROMからブートし、R[復旧]を選んで回復コンソール起動、C:\WINDOWS\SYSTEM32に入ってみると「dir shell32.dll」を実行しても「ファイルが見つかりません」という表示。そこで健康な別PCからのSHELL32.DLL移植を試みる。ついでにSHLWAPI.DLLとMSGINA.DLLも壊れている可能性が高いので一緒にコピーする事に決定。

方法としてはKNOPPIX5.0.1-CDから起動、/dev/hda1 が /media/hda1にオートマウントされているので、右クリック-プロパティのメニュー内で「Read Only」にチェックが入っているのを外し、別WindowsマシンFATフォーマットして上記3つのDLLを放り込んでおいた手持ちのUSBメモリ(128M)を差し込んで、/dev/sda1から/media/hda1にコピー(作業を簡便にしたいのと面倒くさいのでルートフォルダに)

KNOPPIXはログオフ-シャットダウンし、Windows XP CD-ROMに入れ替えて再び「Windows回復コンソール」にて以下を実行。

cd \windows\system32
ren msgina.dll msgina.bak
ren shlwapi.dll shlwapi.bak
cd \
copy SHELL32.DLL c:\windows\system32
copy MSGINA.DLL c:\windows\system32
copy SHLWAPI.DLL c:\windows\system32

EXIT

これで無事起動できれば御の字だったのだが。改善されたのは「SHELL32.DLL…」のエラーメッセージのみで後2つは相変わらず。ログオン画面へ移行せず再起動選択肢しか無い状態は変化なし。

いろいろ考えあぐねた末、「元々の正常起動時のバージョンと同一のDLLコピーしてやる事で解決した。具体的には、起動しなくなったPCは「Windows XP Pro. Service Pack 1」だった(!)ので、移植するDLLは最新の「SP2」でもWindows XP CD-ROMの中の「無印」でも駄目だという事だったようだ(無事にログオン画面が表示されてもその後フリーズ)。たまたま過去に作成していたWindowsXP-SP1統合インストールCD-Rを発掘し、そこからSHELL32.DLL、MSGINA.DLL、SHLWAPI.DLLを抽出、移植作業をやり直し再起動すると「何事も無かったかのように」ようこそ画面が表示されて元通りのデスクトップ画面を復活させる事ができた。

※追記:公式情報既出だったようだ。無駄に 時間を 浪費していた かもしれない。

Windows Update Web サイトから Windows XP の更新をインストールすると、エラー メッセージが表示される

ところでSTGは終わった。あとSTGは成長してないよね。

ログイン ユーザー登録
ようこそ ゲスト さん