「Map」を含む日記 RSS

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

2008-12-22

処女MAP ver.001

処女の肉体を求める

 →自分好みの女にしたい(カスタマイズ厨)

 →他の男と関係を持った女じゃイヤだ(嫌「中古」厨)

 →他の男を知ってる女だと、自分と比較されたら困る(ベンチマーク禁止厨)

処女精神を求める

 →(浮気するのは男の甲斐性だが、)女は貞操を守るのが務めだ(悪しき伝統

 →男も女も等しく、結婚した相手とだけにしなさい(キリスト教原理主義的純潔主義)

 →汚れ無き乙女って素晴らしいよね(処女崇拝者)

 →結婚前に数々の男と軽々しく寝るような女が、結婚したからといってす性格が変わるわけないだろ(疑りと嫉妬)

 →肉体の結びつきははかないが、魂と魂の結びつきは永遠だ(精神重視)

処女だからって、否定すべき理由は特にないよ

 →とりあえず、ふしだらな女よりいいんじゃない?(消去法)

 →そもそも女に興味がない(女嫌い)

 →むしろ、男の方がもっと興味がある(ホモ

 →というか、人付き合いめんどい人間嫌い)

2008-12-14

[]歴史

前回のエントリに、思いのほかブックマークがついた。

せっかくなので、ここ2年ほどのさくらインターネットiDC移転を中心に、わかる範囲ではてなサーバ変遷の歴史をまとめてみようと思う。

さくらインターネットiDCへ順次移転
2007-01-29 mobile.hatena.ne.jp 追加
> 59.106.108.68:	mobile.hatena.ne.jp.
2007-02-03 f.hatena.ne.jp 移転
> 59.106.108.69:	f.hatena.ne.jp.
2007-02-16 rimo.tv 追加
> 59.106.108.70:	rimo.tv.
2007-03-14 不正侵入
2007-03-17 b.hatena.ne.jp 移転
移転
< 125.206.202.66:	mgw.hatena.ne.jp.
< 61.196.246.69:	b.hatena.ne.jp.
< 61.196.246.70:	b.hatena.ne.jp.
移転
> 59.106.108.71:	mgw.hatena.ne.jp.
> 59.106.108.72:	b.hatena.ne.jp.
2007-03-22 rimo.tv
2007-04-09 g.hatena.ne.jp 移転
移転
< 221.186.129.148:      g.hatena.ne.jp.
移転
> 59.106.108.73:        g.hatena.ne.jp.
2007-04-17 music.hatelabo.jp 終了
2007-04-21 anond.hatelabo.jp
2007-05-10 a.hatena.ne.jp
2007-05-22 rimo.tv
2007-05-22 XSS
2007-05-29 はてなロゴリニューアル
2007-06-05 r.hatena.ne.jp ring.hatena.ne.jp 移転
移転
< 125.206.202.82:       search.hatena.ne.jp.
< 221.186.129.147:      ring.hatena.ne.jp.
< 221.186.146.28:       a.hatena.ne.jp.
< 61.196.246.68:        r.hatena.ne.jp.
移転
> 221.186.129.147:      search.hatena.ne.jp.
> 59.106.108.74:        a.hatena.ne.jp.
> 59.106.108.75:        r.hatena.ne.jp.
> 59.106.108.76:        ring.hatena.ne.jp.
2007-06-26 d.hatena.ne.jp 移転
移転
< 125.206.202.83:       d.hatena.ne.jp.
< 221.186.129.146:      d.hatena.ne.jp.
< 221.186.146.29:       d.hatena.ne.jp.
< 61.196.246.67:        d.hatena.ne.jp.
移転
> 59.106.108.77:        d.hatena.ne.jp.
2007-07-05 ユーザー登録システム刷新
2007-07-11 s.hatena.ne.jp s.hatena.com m.hatena.ne.jp m.hatena.com 追加
> 59.106.108.97:        d.hatena.com.
> 59.106.108.97:        hatena.com.
> 59.106.108.97:        m.hatena.com.
> 59.106.108.97:        m.hatena.ne.jp.
> 59.106.108.97:        s.hatena.com.
> 59.106.108.97:        s.hatena.ne.jp.
2007-07-17 ポケットはてな ドコモ公式サイト
2007-07-19 XSS
2007-07-27 faviconリニューアル
2007-08-08 Rimoリニューアル
2007-08-16 ユーザー助け合い掲示板開設
2007-08-30 はてなキーワード
2007-09-13 お気に入りAPI公開
2007-09-21 はてな回線工事
2007-09-28 d2.hatena.ne.jp 追加
> 59.106.108.80:        d2.hatena.ne.jp.
2007-10-01 はてなサポート掲示板開設
2007-11-02 はてなスターOpenID受入
2007-11-08 OpenID提供
2007-11-13 d2.hatena.ne.jp

d2.hatena.ne.jpで新しいコメント構造の実験を開始しました - はてなダイアリー日記

2007-11-13 ☆の登録総数が1000万個を突破
2007-11-14 現代用語の基礎知識2008
2007-11-15 アンテナカウンター・検索を移転
移転
< 221.186.129.147:      counter.hatena.ne.jp.
< 221.186.129.147:      search.hatena.ne.jp.
移転
> 59.106.108.81:        counter.hatena.ne.jp.
> 59.106.108.82:        search.hatena.ne.jp.

アンテナフロントエンドはすでに移転(置換)してる模様

2007-11-30 XSS
2007-12-04 XSS
2007-12-05 XSS
2007-12-10 XSS
2007-12-13 w.hatena.ne.jp h.hatena.ne.jp 追加
> 59.106.108.78:	w.hatena.ne.jp.
> 59.106.108.84:	h.hatena.ne.jp.
> 59.106.108.84:	h.hatena.com.
> 59.106.108.98:	w.hatena.com.
2007-12-15 はてなハイク正式公開
2007-12-20 www.hatena.ne.jp q.hatena.ne.jp i.hatena.ne.jp graph.hatena.ne.jp map.hatena.ne.jp screenshot.hatena.ne.jp 移転
移転
< 221.186.146.27:	www.hatena.ne.jp.
< 61.196.246.68:	screenshot.hatena.ne.jp.
< 125.206.202.66:	map.hatena.ne.jp.
< 125.206.202.66:	i.hatena.ne.jp.
< 125.206.202.66:	graph.hatena.ne.jp.
< 125.206.202.66:	q.hatena.ne.jp.
移転
> 59.106.108.86:	www.hatena.ne.jp.
> 59.106.108.87:	screenshot.hatena.ne.jp.
> 59.106.108.88:	map.hatena.ne.jp.
> 59.106.108.89:	i.hatena.ne.jp.
> 59.106.108.92:	graph.hatena.ne.jp.
> 59.106.108.99:	q.hatena.ne.jp.
2007-12-21 d2.hatena.ne.jp
2008-01-04 i.hatena.ne.jp 移転
2008-01-07 auth.hatena.ne.jp 移転
移転
< ???.???.???.???:	auth.hatena.ne.jp.
移転
> 59.106.108.90:	auth.hatena.ne.jp.
2008-01-09 hatelabo.jp 移転

長いので省略

2008-01-18 d2.hatena.ne.jp
2008-01-24 なぞなぞ認証
2008-01-25 serif.hatelabo.jp 移転
2008-01-25 サーバ移転完了
2008-01-25 d2.hatena.ne.jp
2008-01-26 anond.hatelabo.jp
2008-01-28 rokuro.hatelabo.jp 追加
> 59.106.108.93:	rokuro.hatelabo.jp.
2008-01-31 h.hatena.com
2008-02-07 認証セット
2008-02-14 はてな本移転
2008-02-19 認証セット
2008-02-28 f.hatena.ne.jp
2008-03-25 f.hatena.ne.jp
2008-03-31 map.hatena.ne.jp
2008-04-24 f.hatena.ne.jp
2008-04-25 ring.hatena.ne.jp
2008-05-03 XSS
2008-05-22 はてなクラブ開始
2008-05-29 f.hatena.ne.jp
2008-06-05 f.hatena.ne.jp
2008-06-10 w.hatena.ne.jp
2008-07-15 b.hatena.ne.jp
2008-08-26 ネットワーク基幹ルータの入れ替え
2008-08-28 d.hatena.ne.jp
2008-09-01 rimo.tv 終了
2008-09-01 k.hatena.ne.jp 追加
> 59.106.108.102:	k.hatena.ne.jp.
2008-10-30 f.hatena.ne.jp
2008-11-07 はてなブックマークベータテスト開始
> 59.106.108.103:	favicon.hatena.ne.jp.
> 59.106.108.105:	img.b.hatena.ne.jp.
> 59.106.108.106:	bbeta.hatena.ne.jp.
2008-11-25 はてなブックマークリリース
2008-11-26 ring.hatena.ne.jp
2008-12-04 news.hatelabo.jp counting.hatelabo.jp bottle.hatelabo.jp 追加
> 59.106.108.93:	bottle.hatelabo.jp.
> 59.106.108.93:	counting.hatelabo.jp.
> 59.106.108.93:	news.hatelabo.jp.
余談 はてなサーバの実態あれこれ

2008-11-12

真・非モテMAP

以上、もてたい男とは区別の上の分類

※万能の俺様像のソース自体からして漫画等の絵空事だから仮に能力があっても実現できるとは言い難いものなのだが

2008-10-21

http://anond.hatelabo.jp/20081020235740

プランタンの裏あたりに天津飯店ってあるはず。

いつもざわついていてにぎやかですよ。

http://maps.google.co.jp/maps?hl=ja&ie=UTF8&ll=35.674675,139.766202&spn=0.001379,0.002704&z=19

MAPで見たらプランタンより通り1つ東京駅よりだった。

水餃子アキレス腱炒めがとても好き。

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

2008-10-12

[][]Grass

Table of Contents: ||||||

オープンソースソフトウェアGISOpen Source software and GISOpen Source software and GIS 1 (6)
オープンソース概念Open Source concept1 (2)
オープンソースGISとしてのGRASSGRASS as an Open Source GIS3 (2)
ノースカロライナサンプルデータセットThe North Carolina sample data set 5 (1)
この本の読み方How to read this book5 (2)
GIS概念GIS conceptsGIS concepts 7 (14)
一般的なGIS原理General GIS principles 7 (6)
地理空間データモデルGeospatial data models 7 (4)
GISデータシステムの構成Organization of GIS data and system11 (2)
機能functionality
地図投影法と座標系Map projections and coordinate systems 13 (8)
地図投影原理Map projection principles13 (3)
一般的な座標系とdatumsCommon coordinate systems and datums 16 (5)
GRASSをはじめようGetting started with GRASSGetting started with GRASS 21 (32)
第一歩First steps21 (16)
GRASSダウンロードインストールDownload and install GRASS 21 (2)
データベースコマンド構造Database and command structure 23 (3)
GRASS6のためのグラフィカルユーザインタフェイス: Graphical User Interfaces for GRASS 6: 26 (1)
QGISgis.mQGIS and gis.m
ノースカロライナを用いてGRASSを開始Starting GRASS with the North Carolina 27 (3)
データセットdata set
GRASSデータディスプレイ3D可視化GRASS data display and 3D visualization30 (4)
プロジェクトデータ管理Project data management34 (3)
新しいプロジェクトGRASSを開始Starting GRASS with a new project37 (7)
aのための座標系の定義Defining the coordinate system for a 40 (4)
新しいプロジェクトnew project
空間投影されていないxy座標系Non-georeferenced xy coordinate system 44 (1)
座標系の変換Coordinate system transformations44 (9)
座標系のリストCoordinate lists 45 (2)
ラスタベクトル地図投影Projection of raster and vector maps 47 (1)
GDAL/OGRツールで、再投影Reprojecting with GDAL/OGR tools 48 (5)
GRASSデータモデルデータの交換GRASS data models and data exchange53 (30)
ラスタデータRaster data54 (16)
GRASS2Dの、3DラスタデータモデルGRASS 2D and 3D raster data models 54 (2)
領域の統合と境界Managing regions and boundaries raster map resolution
ジオコードされたラスタデータインポートImport of georeferenced raster data58 (8)
スキャンされた歴史地図インポートとジオコーディングImport and geocoding of a scanned66 (3)
ラスタデータエクスポートRaster data export 69 (1)
ベクトルデータVector data70 (13)
GRASSベクトルデータモデルGRASS vector data model70 (3)
ベクトルデータインポートImport of vector data73 (5)
xy CAD描画のための座標変換Coordinate transformation for xy CAD drawings 78 (2)
ベクトルデータエクスポートExport of vector data80 (3)
ラスタデータを使うWorking with raster data 83 (86)
ラスタ地図を表示、管理Viewing and managing raster maps 83 (22)
ラスタデータの表示と、カラーテーブルの割り当てDisplaying raster data and assigning a color table 83 (3)
ラスタ地図に関するメタデータを管理Managing metadata of raster maps 86 (2)
ラスタ地図クエリプロファイルRaster map queries and profiles88 (2)
ラスタ地図統計Raster map statistics90 (1)
ラスタ地図ズームと、部分集合の生成Zooming and generating subsets from91 (1)
簡単なラスタ地図の生成Generating simple raster maps92 (2)
再分類と再スケーリングReclassification and rescaling of94 (3)
ラスタ地図raster maps
ラスタ地図タイプの記録と値の置換Recoding of raster map types and value replacements 97 (2)
カテゴリベルの割り当てAssigning category labels99 (4)
マスキングとノーデータ値の取り扱いMasking and handling of no-data values 103(2)
ラスタ地図の計算Raster map algebra 105(10)
整数と浮動小数点データInteger and floating point data107(1)
基本的な計算Basic calculations 108(1)
“if"状態を使うWorking with ``if'' conditions109(1)
r.mapcalcのNULL値の取り扱いHandling of NULL values in r.mapcalc 110(1)
r.mapcalcでMASKを作成Creating a MASK with r.mapcalc 111(1)
特別なグラフ演算子Special graph operators112(1)
相対的座標での近傍演算Neighborhood operations with relative coordinates113(2)
ラスタデータの変換と内挿Raster data transformation and interpolation 115(11)
離散的ラスタデータ自動ベクトルAutomated vectorization of discrete raster data115(3)
連続フィールドの等値線の描画を生成Generating isolines representing continuous fields 118(1)
ラスタデータのリサンプリングと内挿Resampling and interpolation of raster data 119(5)
ラスタ地図オーバーレイマージOverlaying and merging raster maps 124(2)
ラスタデータの空間分析Spatial analysis with raster data126(29)
近傍分析とクロスカテゴリー統計Neighborhood analysis and cross-category statistics126(7)
ラスタフィーチャのバッファリングBuffering of raster features 133(2)
コストサーフェイスCost surfaces135(5)
地勢と分水界分析Terrain and watershed analysis 140(13)
ランドスケープ構造解析Landscape structure analysis 153(2)
ランドスケーププロセスモデリングLandscape process modeling 155(11)
文学的、地下水モデルHydrologic and groundwater modeling155(3)
浸食と宣誓証言モデルErosion and deposition modeling158(8)
ラスタベースモデルと解析に関するまとめFinal note on raster-based modeling and analysis166(1)
ボクセルデータを使うWorking with voxel data166(3)
ベクトルデータを使うWorking with vector data 169(94)
地図の表示とメタデータ管理Map viewing and metadata management169(4)
ベクトル地図を表示Displaying vector maps 169(3)
ベクトル地図メタデータ維持Vector map metadata maintenance172(1)
ベクトル地図属性管理とSQLサポートVector map attribute management and SQL support173(14)
GRASS6でのSQLサポートSQL support in GRASS 6 174(7)
サンプルSQLクエリ属性変更Sample SQL queries and attribute modifications 181(4)
地図再分類Map reclassification 185(1)
複数の属性があるベクトル地図Vector map with multiple attribute tables: layers 186(1)
ベクトルデータデジタルDigitizing vector data 187(5)
位相データデジタル化の一般原理General principles for digitizing topological data187(2)
GRASSでの対話的なデジタイジンInteractive digitizing in GRASS189(3)
ベクトル地図クエリ統計Vector map queries and statistics192(4)
地図クエリMap queries192(2)
ベクトルオブジェクトに基づくラスタ地図統計Raster map statistics based on vector objects194(2)
ポイントベクトル地図統計Point vector map statistics196(1)
幾何学操作Geometry operations196(20)
位相的な操作Topological operations 197(6)
バッファリングBuffering203(1)
フィーチャの抽出と境界のディゾルブFeature extraction and boundary dissolving204(1)
ベクトル地図を修理Patching vector maps 205(1)
ベクトル地図インターセクディングとクリッピングIntersecting and clipping vector maps206(3)
ベクトル幾何の変換と3Dベクトルの作成Transforming vector geometry and creating 3D vectors 209(2)
点からのコンベックスハルとトライアンギュレーションConvex hull and triangulation from points 211(1)
同じ位置の掘り出し物の複数のポイントFind multiple points in same location212(2)
一般的な多角形境界の長さLength of common polygon boundaries214(2)
ベクトルネットワーク分析Vector network analysis216(11)
ネットワーク分析Network analysis 216(5)
直線的な参照システム(LRS)Linear reference system (LRS)221(6)
ラスタへのベクトルデータ変化Vector data transformations to raster227(3)
空間的な内挿と近似Spatial interpolation and approximation230(19)
内挿方法を選択Selecting an interpolation method230(5)
RSTによる内挿と近似Interpolation and approximation with RST 235(2)
RSTパラメタの調整: テンションスムージングTuning the RST parameters: tension and smoothing 237(4)
RSTの精度を評価Estimating RST accuracy241(3)
セグメント化処理Segmented processing 244(3)
RSTとのトポグラフィー分析Topographic analysis with RST247(2)
ライダーポイントクラウドデータを使うWorking with lidar point cloud data249(8)
ボリュームに基づくは内挿Volume based interpolation 257(6)
3番目の変数の追加: 高度のある降水量Adding third variable: precipitation with elevation 258(3)
ボリュームとボリューム-時間内挿Volume and volume-temporal interpolation 261(1)
地球統計学とスプライGeostatistics and splines262(1)

2008-10-07

http://anond.hatelabo.jp/20081007012006

たしかに非モテMAPには、そういう人の入る場所がないな。

「これまで人間関係でいい思いをしてこなかったので、恋愛で一発逆転を狙いたいよ派」「白馬王子王女)を待つよ、特に努力とかはしないけど派」「恋に恋する未経験者」って印象。

MAPの中では、

が比較的近いけど、モテ文化に対する対抗意識が薄いから違うしなあ。

長々と書いているわりには、そんなにこじれてなくて普通の人(ちょっと理屈ぽいとか、過去経験に囚われてるとかあるけど、そういうの誰にでもあるもんだし)なので、非モテMAP対象外なのかもと思った。あれはもっとこじれた人用で、恋愛至上主義とかモテ文化とか対象となる異性や世間への偏見とか憎悪とか、とにかくなんかもっと極端なところがないと入らないんじゃない?ネタっぽさが足りないというか。

しかし、

  • これまで人間関係でいい思いをしてこなかったので、恋愛で一発逆転を狙いたいよ派、承認欲求足りてないから満たしたいよ派
  • 白馬王子王女)を待つよ、特に努力とかはしないけど派、空から美少女が降ってこないかな派、なんかいいことないかな派、とにかく他人任せ派
  • 恋に恋する未経験者、機会がなかっただけ派

この辺りって、ネタとして目を引かないだけで一番多数派のような気もする。つまり、君は1人じゃない。

非モテMAP

http://scarecrowbone.crz.jp/etc/himotemap/himoteMap.html

おれはどこにいるんだろう。

まず非モテであることは間違いない。なにせ年齢=彼女いない歴であり甘酸っぱい経験など皆無なのである。そのくせ嫌経験値だけ異様に高く対人関係に適度な距離を求めてしまうのが積極的行動を取れない原因かと思われるわけだが。ぶっちゃけ人間不信寸前。他人を信じる自分を信じろ的屁理屈によってギリギリのところで踏み止まっているが、これって生命力だけで踏み止まっているようなもんだから非常に危うい状態。実際折れることもあるしな。けっこう折れやすいのかもしれない、と最近思っている。

うっわ、こりゃあ非モテなワケだ。なにこの中二病自意識過剰も大概にしろと。

話を続けよう。ここで落ち込んでいたらしょうがない。でもおれ彼女が欲しいわけだ。おれが「彼女が欲しい」と思っているのは前述の嫌経験値を相殺できる経験を求めているからだと思う。このままだと過去に囚われてろくな未来へ進めないことは明白。具体的には孤独死が待ち受けている。おれに他人を信じさせてくれ。だから「彼女」というのは概念に過ぎず「友達」でも良いはずだが、そこはそれ、やはり男の子彼女が欲しい。おれ女の子が好きなんだ! と、ここで性欲肯定思考停止はたやすいが、もうちょっと踏み込んでみよう。だいたいそれほど切羽詰まった性的欲望は持ち合わせていない。だったら「友達」で満たされるはずだ。どうして「彼女」なのか。

「友達」と「彼女」はどのように違うのかといえば、なにより「関係性」が違うだろう。

「友達」は趣味嗜好など自分自身以外の要素で結びつくことが可能である。それに対し「彼女」は自分自身に魅力なくして結ばれることは不可能な関係性である。つまり自分自身を受け入れて欲しいという願望が「彼女が欲しい」には現れているのではかろうか。あるいは「相手(彼女)の自分自身」を自分に預けて欲しいという「信頼」を求めているという可能性も考えられる。いずれにせよキーワードは「自分自身」だ。この推論に自分の状況を照らし合わせてみると、どっちにも当てはまる気がする。そりゃあ当然「自分自身」を受け入れて欲しいし他人に頼られるのも、めんどくさいけど、なんだかんだで引き受けてしまう性格だ。

となると嫌経験値の相殺とは「自分自身」と「相手(彼女)の自分自身」に対する信用回復を求めていると解釈できる。だから趣味嗜好で結ばれることのできる「友達」では足りなくて自分自身で結ばれる「彼女」が欲しい。ままならない状況でうまく立ち回ることのできない「自分」や自分を苦しめるような「相手(彼女)」ばかりとは限らず、「自分」も「他人(彼女)」も、もっと信じるに足るものだという確証を求めているということではなかろうか。って、おれって結局人間不信なんじゃねえか、どこが人間不信寸前だ。とっくのとうに立派な人間不信患者じゃねーか。踏み止まることができていない。折れてる。ちょっとヘコんだ。

自分が「他人を信じたい」のはわかっていたけど、まさかここまでとは。「友達」じゃなくて「彼女」が欲しいのは相当重症のようだ。せめて「親友」がいれば違ったのかもしれない。けれどもそこまで親しい友達はいない。おれが距離を作っているせいもあるけど。たとえ同性相手だろうとも、おれは滅多に心を許さない。どこかしら予防線を張ってしまっている。もしも「自分自身」が受け入れられなかったり「相手の自分自身」を預けてくれるような信頼を得られなくても傷付かないように「他人を信じる自分を信じろ」なんて言って本当は信じていなかったんだ。

だけど、まだ人間を信じたい。

だから「彼女が欲しい」と思っている。

おっかなびっくり人間を信じたいと思っている日陰者。

いまはまだだれそれが好きというわけじゃなくて漠然と「彼女が欲しい」と思っているけど、いつかだれかを心の底から信じたいと思ったとき、そのときおれは相手(彼女)に惚れるのだろうか。そのときおれは積極的な行動に出ることができるのだろうか。というか、そもそもこんなテキストを書いたのは「非モテMAP」のどこに自分が当てはまるか考えてみようというのがことのきっかけだったのだが、なんだかどこにも当てはまらないようで、ちょっとだけ寂しいです。こんなところでもひとりぼっちなんて! だれかー!

--------------------------------------------------------------------------------

うわー。

なんか勢いに任せて書いたので書き足りないと思って修正していたらいつのまにかトラックバックが沢山付いている! どうやって返せばいいのかわからないので、とりあえず追記で。すみません。

・追い詰められているのかな。ぶっちゃけ薬服用してますが。

承認欲求をすべて「彼女」に求める気はないです。嫌経験を払拭できる「きっかけ」が欲しいだけなのです。たぶん。

女友達はいるけどそういう雰囲気になることがないんです……

・「彼女」は「友達」の延長線上にあるという考え方はアリだと思います。だけどその延長線上にどうやってステップアップするのでしょうか。

ハムスターを飼っていたのですが死んでしまいました。超泣きました。

おれも「いいひと」終わりです。面と向かって言われました。たぶんエロゲーでたとえると「主人公の友達」的立ち位置です。

2008-10-06

加害者情報公開

当て逃げされた。

http://anond.hatelabo.jp/20080930094309

続き。

ネット上でこういうコトを書くのは少しためらいがあったが、

方々から背中を押されるカタチで、私の知っている加害者情報を書き込もうかと思う。

事故の起こった場所】

神奈川県藤沢市菖蒲沢大下交差点

六地蔵交差点よりいすゞ藤沢工場南門方面に向かって)

http://map.yahoo.co.jp/pl?type=scroll&lat=35.39275299&lon=139.44639152&sc=2&mode=map&pointer=on

事故の起こった日時】

9月28日 日曜日

事故の状況】

信号信号待ち中に、後方より殆ど減速せずに追突。

一旦車両を降りて話し合いを始めるが、名前を聞こうとしたら逃走。

六地蔵方面に逃げる。

加害者の概要】

50代後半??60代前半の痩せ型の男性

165cmくらい。

加害者の車種】

トヨタ ヴィッツ 現行型 灰系色

http://images.google.co.jp/images?q=Vitz+1F8

ナンバー

・931

(登録陸運局、分類番号、平仮名は不明)

で、このナンバーなんですが、事故発生から時間が経っており目で見て記憶しただけなので100%確実とは言い切れないですが、

この番号に近い感じのヴィッツを見かけたら、目撃場所をお教えください。

容疑車両を見つけたからといって、決して無理なさらずに・・・

なんてったって“逃げる”ような人ですから、アウトローなのは間違いないです。

情報提供よろです。

[湘南台 綾瀬 藤沢]

2008-09-14

ついにミスリードまではじめた高木浩光

http://d.hatena.ne.jp/kumakuma1967/20080913/p1

> ほとんどの地域では私道や私有地からの撮影が目立ちますが、札幌市では5km×5km程度の範囲で

> Google mapストリートビューを見たとき、簡単に私道や私有地であるとわかる画像がみつかりませんでした。

http://b.hatena.ne.jp/HiromitsuTakagi/20080913#bookmark-10004311

> 5km四方内で私道・私有地で撮影していないケースを探すことの方が難しいらしい。

2008-09-05

Google Map 地形表示で、田舎の中に都会が出現

http://maps.google.co.jp/maps?ie=UTF8&t=p&ll=34.70888,137.969055&spn=0.336982,0.585709&z=11

静岡県磐田市の横に、横須賀市があります。

少し東に行くと、川崎も。

どこをどう間違えたんだろうか?

2008-08-25

http://anond.hatelabo.jp/20080825233641

教科書的には、その回答で合ってると思う。Java屋じゃないんで詳しいことはしらないが。

教科書レベルではなく、現場レベルでは、違うと思うので、ようはポインタしかとらえていない。

そもそもなぜVector,List,Map などの複数のデータ保存形式があるか?

といえば、データの種別や、それの検索方法、取り扱い方法により、保存方法を変えた方が効率的だ。

という側面から来ている。

そういった、異なるデータには、異なる方式のデータ構造という構造を取っておきながら、

アルゴリズムは共通です。というのにどれだけ意義があろうか?という事。

たとえば、Vectorであれば、コピーならばmemcpyなどの専用命令でDMA転送を期待するが

Listやmapであれば、一つ一つforを回してコピーする必要性がある。

たとえば、1KB単位ブロックVectorソートする場合、スワップの手間がバカにならないので、スワップをなるべくさせないアルゴリズムソートする。

逆にListであれば、個別の要素が、以下に大きくても、スワップの手間は高々ポインタ1つ分なので、スワップを気にせず最適なアルゴリズムソートする。

データ構造が違うと言う段階で、同じアルゴリズムを使うことは少ない。だから、そもそもイテレータアルゴリズムの吸収を期待しない。

つーこと。

もっとも、一般的には、簡単なプログラムであればアルゴリズムを使った方が簡単にできるので、使った方がよいが・・・。

それこそ、DB使った方が早くない?とか、Perlでよくね?とかいろいろな議論が出てくるのだが

今回はあくまでもプロレベルでどうのこうのという話しだったので

普段からチューニングを念頭にプロとして話すとそうなるんじゃね?という話し。

http://anond.hatelabo.jp/20080825010326

javaとかさっぱわかんないペーペーですけど

>ListやMapループで回して値を取る時Iterator使うのは何故?

それはね、Javaにはポインタがないからなんだよ。

ポインタのあるC++でもSTLではIteratorを使うわけで、

もちろんjavaの場合はポインタの代用という側面はあるにしても、

アルゴリズムの型依存性を無くす目的もあるんじゃないかなーと思うんですが…。

http://anond.hatelabo.jp/20080824080254

とりあえず、ベテランよりも俺の方が優秀という事が言いたいのだろうが・・・。

いや。うん、2年目って感じで初々しいね。

Interfaceって何のためにあるんですか?

それはね、Javaには関数ポインタがないからなんだよ。実装としてはvtableだから、関数ポインタなんだよ。知ってる? まぁ、一部言語ではhashTableだが。

>ListやMapループで回して値を取る時Iterator使うのは何故?

それはね、Javaにはポインタがないからなんだよ。

>staticなメソッドを作るときはどんな時?

いや、そもそもnon staticだって、データへのポインタがある、関数コールという意味ではstaticと大差ないジャン

むしろ、staticではなく、シングルトンのクラスのメソッドコールにしたら? Javaなんだから。

あぁ、指摘があったけど、mainとエントリポイントのぞく。w

2008-08-24

http://anond.hatelabo.jp/20080824080254

# Interfaceって何のためにあるんですか?

# ListやMapループで回して値を取る時Iterator使うのは何故?

# staticなメソッドを作るときはどんな時?

この辺ハードル高くね? なんか哲学の域。

経験年数2年半のJavaプログラマがちょっと書くよ。

はてな界隈では、Javaって、あんま人気無いみたいだけど、ちょっと書かせてよ。

SIerお仕事してると、派遣とか常駐とか言う形で、色んな会社に行って、違う会社の人とお仕事するんだけど、「経験年数n年(n>3)です」っていう人達が、恐ろしく使えなくてびっくりすることがしばしば。

特に、Java 5以降の機能

辺りを全く知らなかったり。 って言うか、Javaの極々基本的な知識である

  • equals/hashCodeの実装
  • Serializableの実装
  • Iteratorの実装

が全く出来ないんだよね…。

そういうのを知らなくても(出来なくても)業務をこなせちゃう(?)のが、Java言語特性だとは思わないけど、こういう人達だらけなんだよね…。 PMが新しい人を採用しようとして、ここら辺の知識を割りと厳し目にテストしたら、候補が10人居たのに全滅で、プロジェクトスタートが遅れてしまったりして、もう大変。

他人のJavaスキルを知るために、自分がする質問は

  • Interfaceって何のためにあるんですか?
  • ListやMapループで回して値を取る時Iterator使うのは何故?
  • staticなメソッドを作るときはどんな時?

かな。

2008-07-18

vimperator最高

ほんとにもう最高。

楽したい人間+ハマり性な人間には、こーゆーカスタマイズがしがし出来るツールが最高なのよ。

オレ流ブラウザ環境整備できるのももうタマラン。

エディタならvimemacsでもいいけど、あんまり詳しくない。

他のツールはカスタマイズ性で見劣りする。

こだわりのない人間にはどんなツールでもオッケーなんだろうね。

オレはこだわるところはこだわる。

ちょっとした不便に気づかないか気づいても甘受してしまうような人間と、今はクリアできなくともなんとか今後の課題にしたいと考える人間。

そこの違いだね。

どっちが得かというのはわからんけどね。

優劣とか損得の問題じゃなく、ただオレはそういう人種だってこと。


追記

ブクマありがとう

vimperatorrcねえ。特筆すべき点はないけど、あえて一部抜粋すれば、こんな感じ。

inoremap <C-1> <Esc>1gt
inoremap <C-2> <Esc>2gt
inoremap <C-3> <Esc>3gt
inoremap <C-4> <Esc>4gt
inoremap <C-5> <Esc>5gt
inoremap <C-6> <Esc>6gt
inoremap <C-7> <Esc>7gt
inoremap <C-8> <Esc>8gt
inoremap <C-9> <Esc>9gt
noremap <BS> H
noremap <S-BS> L
noremap ,b <Esc>:bmarks -tags=
noremap u :o<Space> " ldrc+ldrでoで:open出来ない問題を解決
" wildoptions=auto時に一瞬補完が表示されてウザいmapがある - Dis Communication - 符号無し
" http://unsigned.g.hatena.ne.jp/Trapezoid/20080620/1213961754
javascript <<EOM
[
    [',a',':dialog addbookmark'],
    [',c',':viewSBMComments -t h'],
    [',C',':viewSBMComments -t hdl'],
    [',d',':pindownload'],
    [',ld',':set ldrc'],
    [',p',':mb clear-pin'],
    [',q',':toggleldrc'],
    [',R',':so ~/_vimperatorrc'], 
    [',r',':res'],
    [',v',':!vim ~/_vimperatorrc'], 
    ['\\s',':scrapbook'],
    ['\\S',':scrap'],
    ['\\f',':firebug'],
    ['\\d',':dialog downloads'],
    ['\\p',':tabopen chrome://browser/content/places/places.xul'],
    ['!',':set invum'],
    ['B',':ls!'],
    ['\\a',':addons'],
    ['\\e',':errorconsole'],
    ['\\F',':firebugwindow'],
    ['\\d',':dialog downloads'],
    ['\\g',':oepnGMpanel'],
    ['\\G',':toggleGM'],
    ['e',':note'],
    ['<F11>',':fullscreen'],
    ['\\P',':placesnewwin'],
    ['\\H',':historynewwin'],
    ['<C-j>',':togglebookmarksidebar'],
    ['<C-k>',':togglehistorysidebar'],
    ['<C-l>',':addtoldr'],
    ['<C-S-Right>',':removerighttabs'],
    ['<C-S-Tab>',':previousfirebugtab'],
    [',o',':openselectedlinks'],
    [',3',':copy titleAndURL'],
    [',ig',':imageGet'],
    [',io',':imageOpen'],
    ['w',':submit'],
    [',lo',':logout'],
    // nicontroller.js
    [',ni',':nicoinfo'],
    [',np',':nicopause'],
    [',nm',':nicomute'],
    [',nv',':nicommentvisible'],
    [',nz',':nicosize'],
    [',ns',':nicoseek'],
].forEach(function([key,command]){
    liberator.mappings.addUserMap([liberator.modes.NORMAL], [key], "User defined mapping",
        function () { liberator.execute(command); }, {rhs: key, noremap: true});
});
EOM

javascript <<EOM
[
    ['<C-j>',':togglebookmarksidebar'],
    ['<C-k>',':togglehistorysidebar'],
].forEach(function([key,command]){
    liberator.mappings.addUserMap([liberator.modes.INSERT], [key], "User defined mapping",
        function () { liberator.execute(command); }, {rhs: key, noremap: true});
});
EOM
javascript <<EOM
// nicontroller.js plugin
// [N]-
// N 秒前にシークする。
// 指定なしの場合 10 秒前。
liberator.mappings.addUserMap(
    [liberator.modes.NORMAL],
    ['-'],
    'seek by count backward',
    function(count) {
        if(count === -1) count = 10;
        liberator.execute(':nicoseek! ' + '-' + count);
    },
    { flags: liberator.Mappings.flags.COUNT }
);

// [N]+
// N 秒後にシークする。
// 指定なしの場合 10 秒後。
liberator.mappings.addUserMap(
    [liberator.modes.NORMAL],
    ['+'],
    'seek by count forward',
    function(count) {
        if(count === -1) count = 10;
        liberator.execute(':nicoseek! ' + count);
    },
    { flags: liberator.Mappings.flags.COUNT }
);
EOM

Vimperatorで;bでリンクを新しいバックグラウンドのタブに開くようにする。

http://anond.hatelabo.jp/20080709195527

も俺の仕業なんだけど、これvimperator本体に実装してくれないかな。

気になる点・これからの課題

窓の杜 - 【NEWSFirefox 3のスマートロケーションバーに対応した「XUL/Migemo

http://www.forest.impress.co.jp/article/2008/07/07/xulmigemo0105.html

余談

Index of /

http://vimperator.driftaway.org/

に上がるのはたいてい朝の07:30になっているので、いつからかチェックするのが朝の習慣になった。

2008-07-16

http://anond.hatelabo.jp/20080716005853

非モテ 自己恋愛対象およびその可能性的候補としての他者に、恋愛対象もしくはその候補としてみなされないか、忌避されたりする者。もしくは自分はそういう者だと強く認識しており、それが原因で恋愛行動をとらない、とれない者

http://scarecrowbone.crz.jp/etc/himotemap/himoteMap.html

ついこの前もこのツリー内で挙がったばっかりだったんだが。このMAPも完全なものとは言い難いが、最低限この程度は目を通してくれ。そもそも、普通モテない」というと「年齢=恋人いない歴」かそれに近い状態を指すだろう。「非モテ」も同じことだよ。

2008-07-14

Re: http://anond.hatelabo.jp/20080714223522

これかい?

* 非モテMAP ver.003

http://scarecrowbone.crz.jp/etc/himotemap/himoteMap.html

それそれ、ありがとう

結構面白く読んでたんだけど、自分を当てはめてみると「左側のいろいろだね」みたいな感じでちっとも分類できなかったw

2008-06-27

[][][]文字列char*をキーにするのなら、気をつけたいこと

http://www.sgi.com/tech/stl/Map.html

stlmapクラスtree継承してるようなしてないような。

それはともかく、文字列をキーにしている場合、文字列を比較するための処理を定義してやらないといけない。

map<char*, object*, COMPARE> hogehoge;

もし、

map<char*, object*> hogehoge;

としてしまうと、キーは文字列ではなく、文字列アドレスになってしまう。

、、、string使えばいいのか。

2008-06-26

http://anond.hatelabo.jp/20080626231143

コード書き始めて1ヶ月強ですが、なかなかC++仕様が把握できません。

今日はポリモーフィッククラスの扱いがよくわからなくてハマッったりしました。

抽象クラスポインタをnewしようとしてました)

あとSTLmapコンテナがイマイチわからず困ってます。

書いたコードは2,3000行くらい。図形処理のアルゴリズムが難しくて相当苦しみました(まだ未完成)。

テストケースをあまりきちんと洗い出してないからこれから困ると思います。

OOP的に正しい設計とか未だによくわからないし…(設計始めたのはさらに1ヶ月前くらい)。

ギークとまではいかないにしても、何とかして「そっち側」に行きたいのです。

スキルを身につけるという意味では、実際どのくらいのタイムスパンを見込むべきでしょうか。

とか、終わってもいないのに増田に書いちゃう集中力のなさも問題です。

2008-06-18

おおお

C++STLvectorを使ってランダムリスト構造を作ることに成功した。

vectoriteratorへのポインタを持たせれば良かったようだ。

助かった。

ちなみに下の議論?に参加してた増田だ。

集中力が無くて困る。詰まるとすぐ集中できなくなる。何かいい方法はないだろうか。

いやいやまてよiteratorsetしてからinsertとかするとiteratorが無効になるだろう。

やっぱり駄目か…。今のうちに損をとってmapコンテナあたりに書き換えるべきか…orz

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