「Map」を含む日記 RSS

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

2007-09-23

http://anond.hatelabo.jp/20070923195513

ほんとだ。

リダイレクトしてるみたいだけどそこがまちがってるんだろうね。

http://www.uniqlo.com/jp/search/

MAPにある店舗からのお知らせをみてると、地方は閉店ラッシュだね。

ニュースリリースからはオープン情報しかみれないし。

ユニクロも大変だなぁ。

2007-09-15

http://anond.hatelabo.jp/20070914233531

再掲載

増田の皆様!

明日、9月15日超突発カラオケ企画を行います。

13時に新宿駅中央東口でて左側、映画看板が出ているところに集合です。

集合後、人数が確定次第カラオケの予約を取ります。万一、予約が取れなかったら移動、もしくは解散します。

 

詳しい集合場所は、新宿駅中央東口を出て左側の映画看板前です。

 

ヤフー地図でココ

http://map.yahoo.co.jp/pl?lat=35.41.20.033&lon=139.42.13.962&sc=1&mode=map&type=scroll

 

ちょっと古い写真ですが、このあたりです。

http://p-homes.hp.infoseek.co.jp/p_data/shinjuku/shinju5_2.html

 

歓迎増田様とかかれた、看板を持っていますので、合流しましょう。

できるだけウェルカムな雰囲気をかもしだすようにします。

予算カラオケだけで2000円程度です。

お昼ご飯は食べてきてくださいねー。

それでは! 現地で!

2007-09-14

増田の民がカラオケにいきます

増田の皆様!

明日、9月15日超突発カラオケ企画を行います。

13時に新宿駅中央東口でて左側、映画看板が出ているところに集合です。

集合後、人数が確定次第カラオケの予約を取ります。万一、予約が取れなかったら移動、もしくは解散します。

 

詳しい集合場所は、新宿駅中央東口を出て左側の映画看板前です。

ヤフー地図でココ

http://map.yahoo.co.jp/pl?lat=35.41.20.033&lon=139.42.13.962&sc=1&mode=map&type=scroll

ちょっと古い写真ですが、このあたりです。

http://p-homes.hp.infoseek.co.jp/p_data/shinjuku/shinju5_2.html

 

歓迎増田様とかかれた、看板を持っていますので、合流しましょう。

できるだけウェルカムな雰囲気をかもしだすようにします。

予算カラオケだけで2000円程度です。

お昼ご飯は食べてきてくださいねー。

それでは! 明日現地で!

2007-09-10

Gauche によるもう少し効率的なバージョン

(define str "Hello world")

(let ((a 0))
  (let1 b (with-input-from-string str
	    (lambda ()
	      (port-fold
	       (lambda (c b)
		 (if (eqv? #\o c) (inc! a))
		 (+ 1 b))
	       0
	       read-char)))
    (print a " " b)))

あるいはこう。

(use srfi-1)

(define (times* e n)
  (map (lambda _ (e)) (iota n)))

(define-macro (with-gensyms var . body)
  `(let ,(map (cut list <> '(gensym)) var)
     ,@body))

(define-macro (with-gensyms* var n . body)
  `(let ((,var (times* gensym ,n)))
     ,@body))

(define-macro (port-vfold proc seed reader)
  (with-gensyms
   (loop %proc v)
   (with-gensyms*
    pr (length seed)
    (with-gensyms*
     npr (length seed)
     `(let ((,%proc ,proc))
	(let ,loop ((,v (,reader)) ,@(map list pr seed))
	     (if (eof-object? ,v)
	       (values ,@pr)
	       (receive ,npr (,%proc ,v ,@pr)
		 (,loop (,reader) ,@npr)))))))))

(receive (a b)
    (with-input-from-string "Hello world"
      (lambda ()		    
	(port-vfold
	 (lambda (c a b)
	   (values
	    (if (eqv? #\o c) (+ a 1) a)
	    (+ 1 b)))
	 (0 0)
	 read-char)))
  (print a " " b))

文字列操作関数って高価じゃね?

2007-09-07

ようこそ、℃-uteLisp の世界へ

発祥: http://ex23.2ch.net/test/read.cgi/morningcoffee/1188654905/

はじめに

Scheme という Lisp 語族言語を用いて ℃-ute相関関係プログラムし、様々な角度から関係性を分析する手法を紹介していきます(ソースコードは最後に張ります)。

まずは、メンバー間の関係を「リスト」というデータ型で表現します。例えば「栞菜->愛理」という関係

(kanna . airi)

という形で表すことができます。これに、「大好き」という情報を付加し、ついでにその関係の性質を数値化したものを加えると

((kanna . airi) (desc "大好き") (score . 1))

のようになり、関係図における一つの矢印の情報データ化できたことになります(暫定的に、好意は 1、良好・中立は 0、険悪は -1 の3段階で表すことにします)。

メンバー間の全ての関係性をこのデータ単位で定義し、データベース化しておくことで、色んな条件に基づいた検索やスコア計算などが可能となります。

例 1: リンク状況の調査

ここで相関関係図における矢印を「リンク」と呼ぶことにして、あるメンバーから他のメンバーへどのようにリンクし、またリンクされているかを調べることができます。

関係の中からリンクの起点を抽出してソートしてみると

(sort-nodes (number-list (from-links)))

結果:

((kanna . 6) (saki . 5) (maimi . 4) (erika . 3) (mai . 3) (chisato . 3) (airi . 2))

栞菜ちゃんがメンバー全員にリンクを張っていることが分かり、℃-ute ラブっぷりが伺えます。なっきーにも同様の事が言えます。例の「女の子が好き」発言を数値的に裏付ける結果と言えるかもしれません。

ただ、データ不足でリンク件数がまだ少ないのと、リンクの性質(好意/反感など)までは分からない点を考慮する必要があるでしょう。

例 2: 被リンク状況の調査

同様に、リンクの終点の件数を調べてみます。

(sort-nodes (number-list (to-links)))
((chisato . 5) (erika . 5) (kanna . 4) (maimi . 4) (airi . 4) (mai . 3) (saki . 1))

えりかちゃんと千聖ちゃんが高ポイントです。メンバーからの人気や注目度の高さを示すデータですが、千聖ちゃんの場合敵対的なリンクが2件含まれている点に注意してください。

なっきーの被リンク数が極端に少ないですが、単純にデータ不足のためだと思われます。はぶら(ryとか言わないようにお願いします。

例 3: 愛情度の評価

リンクに付随するスコアを計算することで、愛情の度合いを測ることができるのではないか、という考えに基づく研究です。

まず、全ての関係性を対象として、スコアマイナス関係を抽出してみます。

(filter-nodes (lambda (n)
		(< (score-relation n) 0)))

結果:

(((kanna . chisato) (desc "愛理に手出すんじゃねぇよ") (score . -1))
 ((saki . chisato) (desc "愛理に手出すんじゃねぇよ") (score . -1)))

件数だけを得ると

(length (filter-nodes (lambda (n)
			(< (score-relation n) 0))))
2

僅か2件です。

良好・中立的な関係

(length (filter-nodes (lambda (n)
			(= (score-relation n) 0))))
8

愛に満ちた関係

(length (filter-nodes (lambda (n)
			(> (score-relation n) 0))))
16

非常に多いです。舞美ちゃんの「℃-ute同士でラブラブなんですよ」発言(例のラジオ)を数値的に裏付ける結果と言えるんじゃないでしょうか。

次に、メンバーごとのスコアを算出してみます。Lisp 的には以下のようにフィルタリングと畳み込み (fold) で計算することができます。例えば

(foldr (lambda (n acc)
	 (+ (get-score n) acc))
       0
       (filter-nodes (cut to? <> 'kanna)))

栞菜ちゃんに対するリンクスコアが得られます。結果:

3

上式を一般化して一挙にメンバー全員に適用してみると

(sort-nodes (map (lambda (x)
		   (cons x (score-loved x)))
		 (all-members)))

結果:

((airi . 4) (kanna . 3) (mai . 2) (erika . 2) (maimi . 2) (saki . 1) (chisato . 0))

愛理ちゃんが好意を寄せられやすい傾向が伺えます。

今度は逆方向のスコアを計算してみると

(sort-nodes (map (lambda (x)
		   (cons x (score-loving x)))
		 (all-members)))
((kanna . 3) (maimi . 3) (chisato . 2) (airi . 2) (saki . 2) (mai . 1) (erika . 1))

まいまいえりかちゃんが特に堅い・一途だという傾向を読み取ることができます。

例 4: 相性の調査

今度は組み合わせ(カップリング)の評価です。

2点間相互のリンクスコアを加算したものを「相性」と考えられるものとします。最大値 (互いに好意を寄せている場合の数値) は現在スコアリング方式では 2 です。例えば

(score-between 'kanna 'airi)

の値は

2

となります。1 であれば一方通行と考えます。

関係性が未定義の場合もあるので 0 のものを除外して算出すると

(sort-nodes (filter (lambda (n)
		      (not (= (cdr n) 0)))
		    (map (lambda (n)
			   (cons n (apply score-between n)))
			 (all-combinations))))
(((chisato mai) . 2)
 ((chisato airi) . 2)
 ((airi kanna) . 2)
 ((saki kanna) . 2)
 ((kanna maimi) . 2)
 ((erika maimi) . 2)
 ((saki airi) . 1)
 ((saki erika) . 1)
 ((kanna mai) . 1)
 ((maimi airi) . 1)
 ((saki chisato) . -1)
 ((kanna chisato) . -1))

となります。若干ピンとこない部分もあるかも知れませんが、計算上は矛盾無くデータの内容を表しています。

参考までに、スコア 1 の相互関係の中身を見てみると

(map (lambda (p)
       (find-relation (cons (caar p) (cadar p))
		      identity))
     (filter (lambda (n)
	       (= (cdr n) 1))
	     (map (lambda (n)
		    (cons n (apply score-between n)))
		  (all-combinations))))
(((kanna . mai) (desc "喰ってやるよ") (score . 1))
 ((saki . airi) (desc "好き") (score . 1))
 ((maimi . airi) (desc "良き妹") (score . 1))
 ((saki . erika) (desc "彼氏にしたい") (score . 1)))

のようになります。

まとめ

以上の調査を経て気になった問題点を列挙してみます。

特に最初の点に関して、「百合的」なるものの質的評価がなかなか難しいと感じました。例えば「大好き」も「良き妹」も同じ 1 と評価してしまっているのが妥当かどうか、といったことです。

また、スレにて与えられた情報を評価・分析する方法としては有効だとしても、逆方向のフィードバックの手段がなかなか見つからないというのが三つ目の問題です(技術力不足とも言います)。(注:画像化の方法が分かりました。追記参照)

最後に、プログラムソースを示します。実行には PLT Scheme が必要です。文字コードUTF-8 で保存した上で、(load "c-ute.ss") としてください。文字化けする場合はターミナルUTF-8 を表示できるよう設定する必要があります。がんばってください。

プログラム

c-ute.ss:

(require (lib "etc.ss")
         (lib "list.ss")
         (lib "26.ss" "srfi")
         (lib "delete.ss" "srfi" "1"))

;;; Utilities

(define true? (compose not not))

(define (ignore _) #f)

(define fif
  (case-lambda
    ((predicate consequent)
     (fif predicate consequent ignore))
    ((predicate consequent alternative)
     (lambda (x)
       (if (predicate x)
           (consequent x)
           (alternative x))))))

(define (concat! xs) (apply append! xs))

(define (mapconcat f lst sep)
  (let lp ((str (f (car lst)))
           (lst (cdr lst)))
    (if (null? lst)
        str
        (lp (string-append str sep (f (car lst)))
            (cdr lst)))))

(define (slice-string str len)
  (let lp ((res '())
           (str str))
    (if (<= (string-length str) len)
        (reverse! (cons str res))
        (lp (cons (substring str 0 len) res)
            (substring str len)))))

(define (break-string str len)
  (mapconcat identity (slice-string str len) "\\n"))

;; NOTE: input and output ports have to be either file-stream or #f
;; (i.e., cannot be a string port)
(define (run exe opt in out)
  (let-values (((p p-i p-o p-e)
                (subprocess out in #f exe opt)))
    (subprocess-wait p)
    (close-input-port p-e)))

;;; Database

;; http://ja.wikipedia.org/wiki/%E2%84%83-ute

(define names
  '((erika . "えりか") (maimi . "舞美") (saki . "早貴") (airi . "愛理")
    (chisato . "千聖") (mai . "舞") (kanna . "栞菜")))

(define (symbol->name sym)
  ((fif true?
        cdr)
   (assq sym names)))

(define nodes '())
(define edges '())

(define (relate from to desc score)
  (let ((n (cons from to)))
    (or (find-relation n
                       (lambda (r)
                         (let ((d (assq 'desc r))
                               (s (assq 'score r)))
                           (set-cdr! d (cons desc (cdr d)))
                           (set-cdr! s (+ score (cdr s))))))
        (begin
          (set! nodes (cons n nodes))
          (set! edges (cons (cons n `((desc ,desc)
                                      (score . ,score)))
                            edges))))))

(define (find-relation n k)
  ((fif true? k)
   (assoc n edges)))

(define (related? x y)
  (find-relation (cons x y) (lambda (_) #t)))

(define (from? n x)
  (eq? (car n) x))

(define (to? n x)
  (eq? (cdr n) x))

(define flip-relation
  (case-lambda
    ((n)
     (and (related? (cdr n) (car n))
          (cons (cdr n) (car n))))
    ((n k)
     ((fif true? k)
      (flip-relation n)))))

(define (get-score n)
  (cdr (assq 'score n)))

(define (get-description n)
  (cdr (assq 'desc n)))

(define (describe-relation n)
  (find-relation n get-description))

(define (score-relation n)
  (or (find-relation n get-score) 0))

(define (print-node . ns)
  (for-each (cute find-relation <>
                  (lambda (r)
                    (display
                     (format "| ~a => ~a  (~a)~%"
                             (caar r) (cdar r)
                             (mapconcat (lambda (s)
                                          (string-append "\"" s "\""))
                                        (cdr (assq 'desc r))
                                        ", ")))))
            ns))

(define (iter-nodes k)
  (let lp ((nodes nodes))
    (unless (null? nodes)
      (k (car nodes))
      (lp (cdr nodes)))))

(define (filter-nodes p)
  (let ((ns '()))
    (iter-nodes (fif p
                     (cut find-relation <> (lambda (n)
                                             (set! ns (cons n ns))))))
    ns))

(define (from-links)
  (map car nodes))

(define (to-links)
  (map cdr nodes))

(define (all-members)
  (delete-duplicates! (from-links)))

(define (all-pairs) nodes)

(define (ordered-pairs)
  (concat! (map (lambda (x)
                  (map car
                       (sort (filter-nodes (cute to? <> (car x)))
                             (lambda (x y)
                               (> (get-score x) (get-score y))))))
                (sort-nodes (map (lambda (x)
                                   (cons x (score-loved x)))
                                 (all-members))))))

(define (all-combinations)
  (let lp ((cs '()) (ns nodes))
    (if (null? ns)
        cs
        (let ((n (car ns)))
          (lp (if (member (list (cdr n) (car n))
                          cs)
                  cs
                  (cons (list (car n) (cdr n)) cs))
              (cdr ns))))))

;; number-list :: [a] -> [(a . Int)]
(define (number-list ls)
  (let lp ((ns '()) (ls ls))
    (if (null? ls)
        ns
        (let ((x (car ls)))
          (lp ((fif not
                    (lambda (_) (cons (cons x 1) ns))
                    (lambda (n)
                      (set-cdr! n (add1 (cdr n)))
                      ns))
               (assq x ns))
              (cdr ls))))))

;; sort-nodes :: [(a . Int)] -> [(a . Int)]
(define (sort-nodes ns)
  (sort ns (lambda (x y)
             (> (cdr x) (cdr y)))))

(define (diff-nodes ms ns)
  (let lp ((ds '()) (ns ns))
    (if (null? ns)
        (sort-nodes ds)
        (lp (let* ((n (car ns))
                   (m (assq (car n) ms)))
              (cons (cons (car n)
                          (- (cdr m) (cdr n)))
                    ds))
            (cdr ns)))))

(define (get-total-score x p)
  (foldr (lambda (n acc)
           (+ (get-score n) acc))
         0
         (filter-nodes (cut p <> x))))

(define (score-loved x)
  (get-total-score x to?))

(define (score-loving x)
  (get-total-score x from?))

(define (score-between x y)
  (+ (score-relation (cons x y))
     (score-relation (cons y x))))

(define (-> x)
  (display (format "~%Links from [~a]~%" x))
  (iter-nodes (fif (cut from? <> x)
                   print-node)))

(define (<- x)
  (display (format "~%Links towards [~a]~%" x))
  (iter-nodes (fif (cut to? <> x)
                   print-node)))

(define (<-> x)
  (display (format "~%Reciprocal links for [~a]~%" x))
  (iter-nodes (fif (cut to? <> x)
                   (lambda (n)
                     (flip-relation n
                                    (lambda (m)
                                      (print-node m n)))))))

(define (<=> x)
  (display (format "~%Reciprocal matches for [~a]~%" x))
  (iter-nodes
   (fif (cut to? <> x)
        (lambda (n)
          (flip-relation n
                         (lambda (m)
                           (if (ormap (lambda (x)
                                        (ormap (lambda (y)
                                                 (equal? x y))
                                               (describe-relation m)))
                                      (describe-relation n))
                               (print-node m n))))))))

(define (<?> x)
  (let ((to (assq x (number-list (from-links))))
        (from (assq x (number-list (to-links)))))
    (display (string-append
              (format "~%Link statistics for [~a]~%"
                      x)
              (format "| ~a => ~a (love ~a)~%"
                      x
                      (cdr to)
                      (score-loving x))
              (format "| ~a => ~a (love ~a)~%"
                      (cdr from)
                      x
                      (score-loved x))))))

(define (info x)
  (for-each (cut <> x)
            (list <- <-> <=> -> <?>)))

;;; GraphViz (http://www.graphviz.org/) support

(define graphviz "C:/Program Files/ATT/Graphviz/bin/dot.exe")

(define (nodes->dot ns)
  (string-append "digraph cute {\n"
                 ;;"\tordering=out;\n"
                 ;;"\trankdir=LR;\n"
                 "\toverlap=true;\n"
                 "\tnode[fontname=\"msgothic.ttc\"];\n"
                 "\tedge[fontname=\"msgothic.ttc\",fontsize=9];\n"
                 (let lp ((str "") (ns ns))
                   (if (null? ns)
                       str
                       (let* ((n (car ns))
                              (s (score-relation n)))
                         (lp (string-append
                              str
                              (format "\t\"~a\" -> \"~a\""
                                      (symbol->name (car n))
                                      (symbol->name (cdr n)))
                              (format "[label=\"~a\",color=\"~a\","
                                      (break-string
                                       (car (describe-relation n))
                                       7)
                                      (cond ((> s 0) "red")
                                            ((= s 0) "green")
                                            (else "blue")))
                              (format "style=\"bold~a\"];\n"
                                      (if (and (not (= s 0)) (< s 1) (> s -1))
                                          ",dashed"
                                          "")))
                             (cdr ns)))))
                 "}"))

(define (write-dotfile dot file)
  (and (file-exists? file) (delete-file file))
  (with-output-to-file file
    (lambda ()
      (display dot)))
  file)

(define (dot->png dot png)
  (call-with-input-file (write-dotfile dot "c-ute.dot")
    (lambda (in)
      (and (file-exists? png) (delete-file png))
      (call-with-output-file png
        (lambda (out)
          (run graphviz "-Tpng" in out)))))
  'done)

;;; Setup database

;; Based on:
;; http://ex23.2ch.net/test/read.cgi/morningcoffee/1188654905/116-142
(begin
  (relate 'maimi 'erika "大好き" 1)
  (relate 'maimi 'kanna "良き妹" 1)
  (relate 'maimi 'airi "良き妹" 1)
  (relate 'maimi 'mai "姉妹" 0)
  (relate 'erika 'maimi "一番可愛いよ" 1)
  (relate 'erika 'kanna "仲間" 0)
  (relate 'erika 'chisato "おソロパジャマ" 0)
  (relate 'kanna 'erika "仲間" 0)
  (relate 'kanna 'maimi "好き" 1)
  (relate 'kanna 'saki "喰ってやるよ" 1)
  (relate 'kanna 'mai "喰ってやるよ" 1)
  (relate 'kanna 'airi "大好き" 1)
  (relate 'kanna 'chisato "愛理に手出すんじゃねぇよ" -1)
  (relate 'saki 'maimi "荷物整理" 0)
  (relate 'saki 'erika "彼氏にしたい" 1)
  (relate 'saki 'kanna "興味がある" 0.5)
  (relate 'saki 'chisato "愛理に手出すんじゃねぇよ" -1)
  (relate 'saki 'airi "好き" 1)
  (relate 'airi 'kanna "受け入れる" 1)
  (relate 'airi 'chisato "最近親密" 1)
  (relate 'mai 'erika "保護者" 0)
  (relate 'mai 'maimi "姉妹" 0)
  (relate 'mai 'chisato "恋人" 1)
  (relate 'chisato 'erika "おソロパジャマ" 0)
  (relate 'chisato 'mai "恋人" 1)
  (relate 'chisato 'airi "最近親密" 1))

;; query relations / draw graphs

(if (file-exists? graphviz)
    (dot->png (nodes->dot (ordered-pairs))
              "c-ute.png")
    (for-each info (all-members)))

追記(グラフ描画について)

Graphviz というソフトによって関係図を可視化できる、ということを教えていただきました(既に上プログラムを実行すると自動的に関係画像を作成するようにしてあります)。ここでは技術的な観点から幾つか注意点を挙げておきます。

まず、Scheme プログラムから Graphviz を動かす方法について。コマンドラインからの起動のように、プログラムへのオプション文字列で入出力ファイルを指定する方法ではどうも上手く行きませんでした。調査の結果、入出力ファイルポートScheme 側で用意しておく必要があるようです。処理系によって異なりますが、PLT Scheme の場合 subprocess という関数を次のように呼び出します。

(subprocess output-port input-port #f "/path/to/dot.exe" "-Tpng")

ここで output-port は png画像ファイルへの出力ポート。input-port は dot ファイルグラフの定義ファイル)の入力ポートです。エラーポートは必要無いでしょう (#f)。

dot という名前の実行ファイルが、関係図のような有向グラフを描画するプログラムです。最後にオプション文字列として出力形式を指定します(png, jpeg, gif, etc.)。

次に dot ファイルScheme で書く方法ですが、以下の基本的な有向グラフの書式

digraph g {
  A -> B;
  B -> C;
  C -> A;
}

を理解すれば、後は実直に Schemeデータを当てはめて format 関数等で変換するだけです。

(string-append
 "digraph g {"
 (format "~a -> ~a;" (car node) (cdr node))
 "}")

問題は、ノードを配置する順番によって出来上がる画像が変わってくる、ということです。

より見た目に分かりやすくするための工夫としては、相互にリンクするノード同士が dot ファイル上でも近接して出力されるようにすると良いでしょう。関連の強いものが画像の上でも近くに表示されるようになります。

また上述(特に例3)のスコア概念を応用し、スコアの低いものが後に出力されるようにすることで、重力感覚に一致するような関係図を得ることができるでしょう。

2007-08-22

ループを書けない病

久々にC言語を使用していて「ループを書けない病」が再発してることに気がついた。

ループで書くべき場所を再帰Map,Reduceなどコレクション走査関数を利用していた。

些細なループでさえそのように処理していたのだ。

それで、出来上がったものを他人に見せたらなんでfor(while)を使わないの?と聞かれてしまった。

職業lisperには再帰にまみれた初学者向けに再帰剥がしする伝統があるそうだけどループが書けない人っている?

2007-07-28

はてなワールドの予想

自己採点は60点? Hatena Inc.が過ごしたシリコンバレーでの1年間:インタビュー - CNET Japan

このインタビューみてて、いままではてなワールドってなんだろーなーと検討もつかなかったんだけどピンときてしまった。

予想する。

はてなワールドGUIベースの自己認識が可能な状態でのネットブラウジングだ。

以前はみんなそこを目指してきた。

自己の存在が視認できる状態での行動。

RPGも初期の迷路のころは自己視点だけだった。これがWEBブラウジングだ。

RPG2.0とやらはドラクエのように自分が「どれ」だか認識できた状態でアクションをおこす。

もちろんこの傾向はネットにもあった。

卑近としてはセカンドライフもそうだ。

だが、はてなはおそらくセカンドライフのように自己のワールド内にコンテンツを誘致しようとせずにいままでどおり既存のコンテンツを利用するだろう。

そう、わんわんワールドグーグルMAPを利用したように。

ページ内を歩き回るスクリプトがあったように。

はてな技術レベルDBmySQLレベル育ちだしコンパイルできるような言語の土壌があまりない。

MMOのようなワールドの創出はあまり考えられない。

だが、すでにぼくらはその予兆をはてなテストにより見て取ることができた。

ブログペットが自分のブログから出れない時代はここで終わるかもしれない。


なんてことを思った。だとしたら面白い。リリース楽しみになってきた。

はてなワールドって何だと思う?

にゃー。

2007-07-11

もうあきらめた。

寝るよ。疲れた。おいらの睡眠時間を返せ…。寝る前にみるんじゃなかった。

http://www.maid-robo.com/masda/mairo.php

完成しなかったよ。

迷路ロジックは多分そこらへんをぐぐればいっぱいあるとおもうが

あえて独自で車輪の再発明をしてみた。

うんこくさいプログラムになってしまった。洗練さのかけらもない。

しかも完成していない。

誰か完成させておいて。

なにか二次元配列をつかいたかったのだけど、php配列ってよくわからないや。

んー。いけてないなーーー。。。。

これが俺の限界か…。

おやすみ。。。



<pre>
<?php

/**
http://anond.hatelabo.jp/20070711013155
迷路を作成するプログラムを書いてみましょう。
1BIT/PIXEL のビットマップで道と壁の幅は1PIXEL。
任意の解像度で出力できること。
入り口と出口があること。
実行毎に異なる迷路が生成されること。
それをASCIIテキストで出力すること。
ソースコードテキストで出力した迷路増田に投稿すること。
言語問わず。
期限無し。



出力例)
##########
..#...#...
#.#.#.##.#
#...#..#.#
#####.##.#
#...#.#..#
#.#.....##
##########
***/



define("MAP_X" ,10);
define("MAP_Y" ,10);
define("MAP_WALL" ,"■");
define("MAP_LINE" ," ");


// 塗り。
for ($y = 0 ;$y < MAP_Y  ; $y++) {
	for ($x = 0 ;$x < MAP_X  ; $x++) {
		$map[$y][$x] = MAP_WALL;
	}
}


// start pointの設定
if (rand(0,1)%2)  {
	$start_x = rand(1,MAP_X-2);
	$start_y = (MAP_Y-1)*rand(0,1);
} else {
	$start_x = (MAP_X-1)*rand(0,1);
	$start_y = rand(1,MAP_Y-2);
}
$map[$start_x][$start_y] = MAP_LINE;


$i=0;
$giveupcnt = 0;
$now_x = $start_x;
$now_y = $start_y;


while ($i < 40) {


	if ($giveupcnt > ((MAP_X-1)*(MAP_Y-1))) {
		break;
	}

	if (rand(0,1)%2)  {
		$rnd_x = rand(-1,1);
		$rnd_y = 0;
	} else {	
		$rnd_x = 0;
		$rnd_y = rand(-1,1);
	}

	$tmp_x = $now_x + $rnd_x;
	$tmp_y = $now_y + $rnd_y;

	// 壁だったらパス
	if ($tmp_x <= 0 || $tmp_x >= (MAP_X-1) ) {
		$giveupcnt++;
		continue;
	}
	if ($tmp_y <= 0 || $tmp_y >= (MAP_Y-1) ) {
		$giveupcnt++;
		continue;
	}

/**
print("@".($tmp_x) . "," . ($tmp_y)."<br>");
print(($tmp_x + $rnd_x) . "," . ($tmp_y + $rnd_y)."<br>");
print(($tmp_x + -1*$rnd_x) . "," . ($tmp_y + -1*$rnd_y)."<br>");
print(($tmp_x + -1*$rnd_y) . "," . ($tmp_y + -1*$rnd_x)."<br>");
***/

	// そこを掘ることにより他の壁とつながってしまうのであればパス
	if ($tmp_x > 0 &amp;&amp; $tmp_x < (MAP_X-1) &amp;&amp;
		$tmp_y > 0 &amp;&amp; $tmp_y < (MAP_Y-1) ) {

		if ($map[$tmp_x + $rnd_x][$tmp_y + $rnd_y] == MAP_LINE ||
			$map[$tmp_x + $rnd_y][$tmp_y + $rnd_x] == MAP_LINE ||
			$map[$tmp_x - $rnd_y][$tmp_y - $rnd_x] == MAP_LINE ) {
			$giveupcnt++;
			continue;
		}
	}


	// 適当なマス数掘り進んだところで壁際まできれてばゴールをつくる
	// 未実装


	$now_x = $tmp_x;
	$now_y = $tmp_y;

	$map[$now_x][$now_y] = MAP_LINE;
	$i++;

}


// 4方壁のところを起点に同じルールで通路をつくる



foreach ($map as $key => $value) {
	$value = join("",$value);
	print($value."<br>");
}

//print_r($map);


?>
</pre>

pre記法で書いたらトラバがとんでなかったので、追加。

http://anond.hatelabo.jp/20070711013155

2007-06-21

怠け者へのmochikitノススメ

javascriptライブラリMochiKitというのをご存知だろうか?

私はこのライブラリを採用して非常に開発が楽になったことから諸君にもおすすめをしたいのでサワリだけ紹介したいと思う。

parial 引数をいちいち指定するのが面倒な人用。


配列を受け取り、それぞれを1加算した配列を返す処理を見てみよう

var arr = [1,2,3,4,5];
var v = map(
  function(x){return x+1},
  arr);
v -> [2,3,4,5,6]

となる。

複数回同じ処理を別の配列に適応する場合は

var arr1 = [1,2,3,4,5];
var arr2 = [2,4,6,8,10];
var fx = function(x){return x+1};
var v1 = map(fx,arr1);
var v2 = map(fx,arr2);
v1 -> [2,3,4,5,6]
v2 -> [3,5,7,9,11]

とできる。しかしこれを書くのが面倒な怠惰な人々のためにpartialが用意されている。

var arr = [1,2,3,4,5];
var fx = partial(map,function(x){return x+1});
var v1 = fx(arr1);
var v2 = fx(arr2);
v1 -> [2,3,4,5,6]
v2 -> [3,5,7,9,11]

とできる。partialは関数の第一引数から順に値を指定した関数を作る関数だ。

この場合はmap関数の一つ目の値をfunction(x){return x+1}に指定した関数fxに束縛される。

もう少々一般化して配列を受け取り、それぞれをn加算した配列を返す処理を考えてみよう。

var arr = [1,2,3,4,5];
var n = 10;
var add = function(n,x){return x+n};
var fx = partial(map,partial(add,n));
var v1 = fx(arr);
n = 1;
var v2 = fx(arr);
v1 -> [11,12,13,14,15]
v2 -> [11,12,13,14,15]

ここでv1とv2の値が等しい理由はちょっと考えてもらえば解ると思う。

もちろんaddという名前を考えるのが面倒な人は

var n = 10;
var fx = partial(map,partial(function(n,x){return x+n},n));

と書いても問題ない。

compose function(N){return F(A(N))}と書くのが面倒な人へ

では、配列を受け取り、それぞれを値をn加算したあとm倍した配列を返す処理をみてみよう。

既にn加算する処理は一度出てきているからそれを利用する。

var arr = [1,2,3,4,5];
var n = 10;
var m = 2;
var add = function(n,x){return x+n};
var mul = function(n,x){return x*n};
var addMul = compose(partial(mul,m),partial(add,n));
var fx = partial(map,addMul);
var v = fx(arr);
v -> [22, 24, 26, 28, 30]

compose(f1, f2, ..., fN)はf1(f2(arguments))という評価をする関数をかえす。

つまりaddMul(n)の場合はpartial(mul,m)(partial(add,n)(N))と等価なのだ。

もちろん

var arr = [1,2,3,4,5];
var n = 10;
var m = 2;
var fx = partial(map,
            compose(partial(function(n,x){return x*n},m),
                    partial(function(n,x){return x+n},n)));
var v = fx(arr);

とかいてもよい。ただし名前を考えることの労力と、可読性を天秤にかける必要があるかもしれない。

ちなみに私は addMulを別の場所で使わない限り後者で書くことが多い。

以上のことに興味持った怠惰貴方

http://mochikit.com/

にいってみてはどうだろうか。

http://anond.hatelabo.jp/20070620200618#tbと同じ増田

2007-05-10

Re: FizzBuzz問題

ゴルファーじゃないけど短く出来たので

#!/usr/bin/perl
@s[map {$_*3} (1..33)] = map {"Fizz"} (1..33);
@s[map {$_*5} (1..20)] = map {@s[$_*5]."Buzz"} (1..20);
print join "\n", map {$s[$_]||$_} (1..100,"");

こんなんでどうでしょ。mapつかいまくりだけど。

http://anond.hatelabo.jp/20070510174121

正規表現でFizzBuzzに置換するような解法は……

5の倍数は /[05]$/ でいけるけど、3の倍数がわかんない。数字を足し合わせるなんて出来ないよな。

つーことで

print join "\n",map {(eval(join("+",split//,eval(join("+",split//))))=~/[369]/)?(/[05]$/?"FizzBuzz":"Fizz"):/[05]$/?"Buzz":$_} (1..100),""

配列を合計する方法がわかんなかった。けど一行に収まって満足。

2007-04-26

都市伝説」たる検証可能性

http://anond.hatelabo.jp/20070426180318

Wikipedia は、ある程度信頼のおける第三者機関(あまりに弱小でない新聞社とか査読制度のある論文誌とか)の発表を参照することでその事実存在することを検証できる場合に限り記事を書いていい、という風に厳格に定められてるので、具体的な都市伝説の事例を記事に書く場合、その都市伝説が実際に「伝説」という形で社会の中に存在したことを検証できなければいけないんだよ。逆に言うと検証さえできればセンスなかろうが書いて構わない(もちろん君がセンスのない記事を書くなと言ってないことはわかってるよ!)。

そんで、「都市伝説一覧」の記事はほとんどが出典を提示してないか、出典に信頼性が無いよね。つまり検証不可能。そっちの方が問題だなあ。

検証可能であることが明らか、もしくは検証可能なのではないかと(俺が)推測できる都市伝説を「都市伝説一覧」の記事から探すとこんなもんかな。ちなみに都市伝説が検証可能であるかどうかを判断するためには、「都市伝説とされる噂が実際に流れていたことが検証可能」「その噂が事実ではないことが検証可能」の二点を考慮しなければならないことに注意。

めんどくさかった。時間を無駄にしたような気がする。あまりにめんどくさくて、途中から「信頼のおける第三者機関の発表の中に噂の実態が含まれている」と「信頼のおける第三者機関により噂の実態が存在することが発表されている」の差に突っ込まなくなってるわ。

それにしても、明らかに「噂は実話だった」というタイプの、「都市伝説一覧」から排除すべきものも結構あるな。それはまた今度まとめるか。

2007-04-02

特定しますた

恋人ふつけるプレゼントする Schemer の俺が来ましたよ。

# 鬼の首をとったかのように書いてごめんよ。

Lisp とカッコの不揃い

CommonLisp はよく知らないんだけれど、 Scheme だと #\( と書けば ( という文字を示すことになるし、マルチバイト処理系だと ((((((( というようなシンボルも問題なく使えたりする(開きカッコが全角であることに注意)。

処理系によっては半角のカッコでさえシンボルに使える、かもしれない。実際、ある処理系では SRFI-17 に関係したコードに半角空白を含むシンボルがあったりする。

そういうわけで

(define ((((( xs)
 (if (null? xs)
  '()
  (cons (map (lambda (c) (if (eqv? #\( c) #t #f))
         '(#\( #\( #\( #\( #\( |setter of hogehoge|)))
        ((((( (cdr xs)))))

というようにカッコが不揃い(に見える)コードも可能。まあ、デモ以外でマルチバイト文字をシンボルに使うことなんてないだろうし、文字リテラルたまに目視でカッコをチェックしていて「あれ?」と思うぐらいだし、そもそも上のコード意味のある処理をしていないんだけど。

そういえば Emacs は閉じカッコを打った時、対応する開きカッコを強調表示してくれますよ。

結論

Lisp なんてやってないで HSP とかやるといいよマジで。 Lisper になるには最初に HSP を学ぶのが最も近道なんじゃないかと最近気付いたんだ。

増田に思うこと

super pre 記法ないのかよ! Web2.0 っぽいインターフェースブクマコメント表示したりする暇があるならこういう基本的なところやれよなマジで(いや、コメント表示も便利だけど)。そもそも増田システムなんてほとんどはてブと共通かと思ってたよ。増田が出た当初、「適当に組替えただけで、うまいことやったなぁ」と感心していただけに残念だ。

2007-03-25

[][][][][][]

ASCII.jp:「納品をなくせば」の倉貫CEOたちが語る新しいSIへの道 (1/2)

めりくるくるりん: 簡単に人月請求の矛盾を指摘する

どっちの契約でショー!「一括請負」vs「準委任」

Rails Hub情報局: 優秀なエンジニア5人は二流の1000人を完全に凌駕する

404 Blog Not Found:プログラマーって本当に労働者なのか?

例えば、「コード1行につき10円」という取り決めがあったとする。

そしてプログラムの中に要素数1000からなる配列

初期化するルーチンが必要だったとする。

この場合

my @a;

$a[0] = 1;

$a[2] = 1;

# ...

$a[999] = 1;

というコードを書けば

1万10円になるが、

my @a;

for (my $i = 0; $i &lt; 0; $i++){

$a[$i] = 1;

}

と書けば一気に

40円に下落し、

my @a = map { 1 } (1..1000);

と書けばたった

10円になってしまう。

下に行けば行くほど優れたコードなのに、収入も減ってしまうのだ。




論理的思考の放棄 - 登 大遊@筑波大学情報学類の SoftEther VPN 日記

システム業界の詐欺的行為2 - 小学校の算数もできない技術者? --- 生島 勘富 : アゴラ - ライブドアブログ

404 Blog Not Found:博士の異常なアルゴリズム、または私は如何にして心配するのを止めて線形探索を愛するようになったか

アルゴリズムとは何か (研究者向けの解説)

見積りの根拠出してくれっていったら、金くれって言われたよ

2007-03-24

[]今昔

anond:20070218150508のあと、 機能変更、お知らせなど - はてなブックマーク日記 - 3/19(月) のはてなブックマークのメンテナンスについて とかあったので、変化を調べてみた。

% diff resolve.old resolve.txt | grep '[<>]' | sort
< 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.

?Bの他、関連のmgwも。着々と移転は進む。次はcounter辺りだろうか、それとも?Gとかだろうか。何にせよ、?Dの移転が最大の山場でしょうな。

以下メモ

% dig -f host.txt | grep '^[^;]' | awk '{print $5, $1}' | sort | uniq | sed 's/ /:        /' > resolve.txt

host.txt

a.hatena.ne.jp
anond.hatelabo.jp
b.hatena.ne.jp
counter.hatena.ne.jp
d.hatena.ne.jp
f.hatena.ne.jp
g.hatena.ne.jp
graph.hatena.ne.jp
hatelabo.jp
hatena.ne.jp
i.hatena.ne.jp
mail.hatelabo.jp
map.hatena.ne.jp
mgw.hatena.ne.jp
mobile.hatena.ne.jp
music.hatelabo.jp
q.hatena.ne.jp
r.hatena.ne.jp
red.hatena.ne.jp
red3.hatena.ne.jp
rimo.tv
ring.hatena.ne.jp
screenshot.hatena.ne.jp
search.hatena.ne.jp
searchplus.hatelabo.jp
serif.hatelabo.jp
sns.hatelabo.jp
sv.hatelabo.jp
sv.hatena.ne.jp
wordlink.hatelabo.jp
world.hatelabo.jp
www.hatelabo.jp
www.hatena.ne.jp

resolve.txt

125.206.202.66:	graph.hatena.ne.jp.
125.206.202.66:	i.hatena.ne.jp.
125.206.202.66:	map.hatena.ne.jp.
125.206.202.66:	q.hatena.ne.jp.
125.206.202.82:	search.hatena.ne.jp.
125.206.202.83:	d.hatena.ne.jp.
216.52.184.230:	dns2.name-services.com.
219.99.160.180:	ns0.future-s.com.
219.99.160.181:	ns1.future-s.com.
221.186.129.146:	d.hatena.ne.jp.
221.186.129.147:	counter.hatena.ne.jp.
221.186.129.147:	ring.hatena.ne.jp.
221.186.129.148:	g.hatena.ne.jp.
221.186.146.26:	mail.hatelabo.jp.
221.186.146.26:	sv.hatena.ne.jp.
221.186.146.27:	hatena.ne.jp.
221.186.146.27:	www.hatena.ne.jp.
221.186.146.28:	a.hatena.ne.jp.
221.186.146.28:	anond.hatelabo.jp.
221.186.146.28:	hatelabo.jp.
221.186.146.28:	music.hatelabo.jp.
221.186.146.28:	searchplus.hatelabo.jp.
221.186.146.28:	serif.hatelabo.jp.
221.186.146.28:	sns.hatelabo.jp.
221.186.146.28:	sv.hatelabo.jp.
221.186.146.28:	wordlink.hatelabo.jp.
221.186.146.28:	world.hatelabo.jp.
221.186.146.29:	d.hatena.ne.jp.
59.106.108.67:	red.hatena.ne.jp.
59.106.108.67:	red3.hatena.ne.jp.
59.106.108.68:	mobile.hatena.ne.jp.
59.106.108.69:	f.hatena.ne.jp.
59.106.108.70:	rimo.tv.
59.106.108.71:	mgw.hatena.ne.jp.
59.106.108.72:	b.hatena.ne.jp.
61.196.246.67:	d.hatena.ne.jp.
61.196.246.68:	r.hatena.ne.jp.
61.196.246.68:	screenshot.hatena.ne.jp.
63.251.92.193:	dns3.name-services.com.
64.74.96.242:	dns4.name-services.com.
69.25.142.1:	dns1.name-services.com.
70.42.37.1:	dns5.name-services.com.
dns1.name-services.com.:	rimo.tv.
dns2.name-services.com.:	rimo.tv.
dns3.name-services.com.:	rimo.tv.
dns4.name-services.com.:	rimo.tv.
dns5.name-services.com.:	rimo.tv.
ns0.future-s.com.:	hatelabo.jp.
ns0.future-s.com.:	hatena.ne.jp.
ns1.future-s.com.:	hatelabo.jp.
ns1.future-s.com.:	hatena.ne.jp.
sv.hatelabo.jp.:	www.hatelabo.jp.

2007-03-12

ツープライススーツについて調べていたら

ファッション板的に汚染されたブログが結構ひっかかって、そのうち「非モテ」「脱オタ」論壇に迷い込み、気がつけばこんな時間。

非モテMAPとか、話のネタとしてはおもしろいなぁ。


ジーンズメイトで服は済ませていた私が、ちょっとだけ丸井も取り入れるようになったのは、彼女ができそうになった(女の子に遊びに誘われた)のがきっかけだった。

了解したはいいが、着ていく服がなくて慌てて買いにいったのがちょっと前。

いわゆる非モテで、大学に入ってのその彼女がはじめての彼女に。(失恋は何度かあった)

とはいうものの、ぜんぜんオサレではないし、オサレになろうという気もなく、街を眺めたり、服屋をふらついたりして、無難そうなのを考え、てきとーにみつくろっている。彼女は男のファッションはよくわからない、といい、あれこれ言ってこない(本当は不満があるのかもしれないが)


で何がいいたいかというと、非モテとか脱オタとか、不毛なブログで数時間つぶしてしまって腹が立っているから、チラ裏みたいな益田に書いただけ。

http://anond.hatelabo.jp/20070310225955

2007-03-05

ぜんぶかいてみた

http://anond.hatelabo.jp/20070305101151

見出し関連】

見出し記法

みだしきほうをとなえた

◆時刻付き見出し記法

t*じこくつきみだしきほうをとなえた

name属性付き見出し記法

name*ねいむぞくせいつきみだしきほうをとなえた

カテゴリー記法

[はてな]かてごりーきほうをとなえた

小見出し記法

こみだしきほうをとなえた

◆小々見出し記法

ここみだしきほうをとなえた

【その他入力支援】

リスト記法

  • hogehoge
    • hogehoge
  • hogehoge
    1. hogehoge

◆定義リスト記法

hoge
fuga

◆表組み記法

hoge fuga
hoge fuga

引用記法

hoge

◆pre記法

hoge

スーパーpre記法

hoge

スーパーpre記法シンタックスハイライト

$There's @More %Than &amp;One \$Way \@To \%Do *It.

aa記法

                 _,,,.. --- ..,,,__
              ,, r''"        `ヽ、
            /     , .∧     `'、
            //  , i  / ,/ 'i i,  ,   'i
           ',i' ,  /フ'メi_/   '、i_i,_L,, i  ',
       _,,_   ,/ ,,i / ,,r==、,,''  _,,,ニ,,i 'i,i i i,
      ./  'i ./ i. レ'i             `' i/レ'! ',    幸 運 を !
      |.  i i  '、 i    r─---┐    i  i ',
     _,,L,,_ i, i   `'i,.   i      i   ,' /  ',
   ,r''"    `'i'、!    /ヽ,   '、    ノ  ./''"    i
 / -─'''''''‐く ト-、,/   フ-、`ー‐ '",,_-''" ',      i
 i   _,,,,,__ノ ,i.i.  `'ヽー" 'ヽ,  ̄ ̄''ー0'i   ヽ    i
 'i        )i i     `ヽ  `ヽ,,`>、,,,,,,L_  \,,,j
  '、   ─--r' i i          i       ヽ,
   \,,__,,ノ-,i,i           i   0 i ',
    i,    //      ,, -'   i 0    ', i
     \,__//   _,, -ァ'''"       i   0 ', i
        ̄゛゛゛ ̄  i           i 0     ', ',

脚注記法

(( hoge ))

◆改行記法

----ここから----

1行目

2行目

----ここまで----

◆pタグ停止記法

----ここから---- < hoge fuga >

----ここまで----

tex記法

<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?e^{i\pi}~=~-1" class="tex" alt="e^{i\pi} = -1">

ウクレレ記法

[uke:D7 D7@0202 C C@3345]

http記法

http://www.hatena.ne.jp/

はてな

<img src="http://d.hatena.ne.jp/barcode?str=http%3a%2f%2fwww%2ehatena%2ene%2ejp%2f" class="barcode" alt="http://www.hatena.ne.jp/">

http://www.hatena.ne.jp/

◆mailto記法

mailto:info@hatena.ne.jp

google記法

google:はてな

google:image:はてな

google:news:はてな

amazon記法

[amazon:はてな]

自動リンク停止記法

http://www.hatena.ne.jp/

id記法

id:1234567890

id:1234567890:archive

id:1234567890:about

id:1234567890:image

id:1234567890:detail

question記法

question:1234567890:title

question:1234567890:detail

question:1234567890:image

search記法

search:はてな

search:keyword:はてな

search:question:はてな

search:asin:はてな

search:web:はてな

◆antenna記法

a:id:1234567890

bookmark記法

b:id:1234567890

[b:id:1234567890:t:1234567890]

b:t:1234567890

b:keyword:はてな

◆diary記法

d:id:hatena

d:keyword:はてな

fotolife記法

f:id:hatena:hatena:image

f:id:hatena:favorite

◆group記法

g:hatena

g:hatena:id:hatenadiary

g:hatena:id:hatenadiary:20040501

g:hatena:id:hatenadiary:archive

g:hatena:keyword:はてなダイアリー利用可能タグ

idea記法

idea:182

idea:182:title

i:id:sample

i:t:タグ

rss記法

r:id:sample

◆graph記法

graph:id:sample

graph:id:sample:しなもんの体重

<img src="http://graph.hatena.ne.jp/sample/graph?graphname=%e3%81%97%e3%81%aa%e3%82%82%e3%82%93%e3%81%ae%e4%bd%93%e9%87%8d" class="hatena-graph-image" alt="しなもんの体重" title="しなもんの体重">

graph:t:体重

map記法

map:x139.6983y35.6514

keyword記法

[[はてな]]

[keyword:はてな]

[keyword:はてな:map]

[keyword:はてな:map:satellite]

[keyword:はてな:map:hybrid]

isbn/asin記法

ISBN:9784798110523

ISBN:4798110523

asin:B0009WHOMG

ISBN:9784798110523

◆rakuten記法

[rakuten:rdownload:10285260:image:small]

jan/ean記法

jan:4981254610640:barcode

続きを読む記法

====

スーパー続きを読む記法(これ大丈夫かな…ないと思うけど、以下のエントリ隠れたらごめんなさい)

=====

以上。

(追記)波線が??になっちゃってたので、hoge等に変更しました。

(追記:20070412) 引用記法の書き方間違ってたので修正しました。

2007-02-18

[]ついでに調べてみた

久しぶりにwhoisなんて使ったかもんだから。

inetnum:	59.106.0.0/16 (59.106.0.0 - 59.106.255.255)
netname:	SAKURA
inetnum:	59.106.108.64/26 (59.106.108.64 - 59.106.108.127)
netname:	HATENA
59.106.108.67:	red.hatena.ne.jp
		red3.hatena.ne.jp
59.106.108.68:	mobile.hatena.ne.jp
59.106.108.69:	f.hatena.ne.jp
59.106.108.70:	rimo.tv

inetnum:	61.192.0.0/13 (61.192.0.0 - 61.199.255.255)
netname:	JPNIC-NET-JP
inetnum:	61.196.246.64/29 (61.196.246.64 - 61.196.246.71)
netname:	HATENA
61.196.246.67:	d.hatena.ne.jp
61.196.246.68:	r.hatena.ne.jp
		screenshot.hatena.ne.jp
61.196.246.69:	b.hatena.ne.jp
61.196.246.70:	b.hatena.ne.jp

inetnum:	125.200.0.0/13 (125.200.0.0 - 125.207.255.255)
netname:	OCN
inetnum:	125.206.202.64/29 (125.206.202.64 - 125.206.202.71)
netname:	HATENA
inetnum:	125.206.202.80/29 (125.206.202.80 - 125.206.202.87)
netname:	HATENA
125.206.202.66:	graph.hatena.ne.jp
		i.hatena.ne.jp
		map.hatena.ne.jp
		mgw.hatena.ne.jp
		q.hatena.ne.jp
125.206.202.82:	search.hatena.ne.jp
125.206.202.83:	d.hatena.ne.jp

inetnum:	 221.184.0.0/13 (221.184.0.0 -221.191.255.255)
netname:	 OCN-JPNIC-JP
inetnum:	 221.186.129.144/29 (221.186.129.144 - 221.186.129.151)
netname:	 HATENA
inetnum:	 221.186.146.24/29 (221.186.146.24 - 221.186.146.31)
netname:	 HATENA
221.186.129.146: d.hatena.ne.jp
221.186.129.147: counter.hatena.ne.jp
		 ring.hatena.ne.jp
221.186.129.148: g.hatena.ne.jp
221.186.146.26:	 sv.hatena.ne.jp
		 mail.hatelabo.jp
221.186.146.27:	 hatena.ne.jp
		 www.hatena.ne.jp
221.186.146.28:	 a.hatena.ne.jp
		 hatelabo.jp
		 anond.hatelabo.jp
		 music.hatelabo.jp
		 searchplus.hatelabo.jp
		 serif.hatelabo.jp
		 sns.hatelabo.jp
		 wordlink.hatelabo.jp
		 world.hatelabo.jp
		 sv.hatelabo.jp (www.hatelabo.jp)
221.186.146.29:	 d.hatena.ne.jp

[追記]

そうそう、rimo.tvMXがないね。webmasterとかinfoとかが届くようにした方が良いと思うよ。

2007-02-15

カント

とは言わないが、せめて非モテとは - はてなダイアリー非モテMAP ver.003くらいは読んどいてほしいなぁ、と。非モテとゆーのは差別と抵抗の物語であり武器です。基本的に。

それこそ、器質的に異性に受け容れられない(エレファントマンとかな)というところまで射程に入れた。

なんだが、なぜか増田(および世間一般)では「非モテ」=「モテるために努力をするよ (鯛派/ポジ喪派)」だと思われてる。思想的に発展を見せたのはむしろソコとは違う方面なんだけどなぁ。啓蒙が足りんかったようですなぁ。

そして残念ながらおれは批判さるべきメタ非モテですがなにか。kiya先生降臨してくんねぇかなぁ(呪い言葉

http://anond.hatelabo.jp/20070215113117

2007-02-07

いわゆる南の島に住んでいる。

で的確に分析してくれたけれども、結局の所、どっちも自分たちより後に来た者を排除したがっているということだとは思う。

  • 旧住民 - 移住者が増えて住みにくくなるから下水敷設には反対。日なたぼっこできる丘を守れ。
  • 移住者 - 観光客が増えて海が込んだりするから空港建設には反対。貴重な生物サンゴを守れ。

ファンだったバンドが売れてきたときに古くからのファンと新しいファンがけんかするかのような。

ただ、空港に限って言うと、反対をしているのがこっちに住んですらいない人達だったりするのに、どうしても釈然としないものを感じる。年に何回も来ない人が「あんなに大きな空港は必要ない、港で十分」とか言ったりしている。いやいや、十分じゃないから新しい空港がほしいんであって、第一、港だって需要が増えたらもっと直接的に海を汚すんですけど。

こんなやりとり商工会掲示板で何度となく繰り返されている。商工会は(もちろん)推進派だから、推進派ホームの掲示板という地の利があるにせよ、たいがいの反対意見は論破されているように、自分には見える。

中央のメディアでは、そして県庁所在地メディアですら、もっぱら反対運動に焦点を当てて報道がなされているけど、地元メディア(たとえばhttp://www.y-mainichi.co.jp/)などでは、推進歓迎が論調の基本だということも、できたらいろんな人に知ってほしい。

余談だが、上記サイトは記事へのコメントトラックバックは当たり前、はてブに飛べたり、サイト内でスクラップできたり、PDFダウンロードできたり、ニュースの場所がGoogle Mapで表示されて近くで起こった記事を参照できたり、むやみにWeb2.0していて好きだ。

2007-02-01

Re: そろそろまたJavascriptオフの時代が来た

また?

JavaScript を常時 off していた私は、特定 page でのみ on するようになり、そのうち white list で有効 site を指定するも常時 off で必要時のみ on とするようになり、そのうち NoScript を入れて常時 on となり、そのうち bookmarklet を使い始め、そのうち GreaseMonkey を入れて、今では on にする site 、user script は増え続ける一方と、まったくもって毒され続けているのだが。

あー、話が長くなった。横道にそれるところだ。

つまり使う方向へ向けて一方向だ。戻ったりしない。

それにしても、常時 on の人は怖くないのだろうか?ここ数年の browser の脆弱性ほとんどscript がらみだというのに。xss なども威力を増すのに。

少なくとも個人情報を預けてる site 、出来れば password の必要な site では切るべきだ。そんな site に xss できる脆弱性ががあったら?実際、ここ hatena にもあった。google にもあった。 政府運営 site にもあった。account を発行し、何かの手続きや登録が出来るような site にないほうがおかしいだろう。

常時 on でも、せめてそういった site では off にすべきだろう。ただ、残念なことに、一番守りたいであろう銀行が、ことごとく off ではまともに使えない site を作ってる。おそらく一番遅れているのではないだろうか?

世の中のほとんどの site では script など使用しなくても使えるように出来ている。一部 google maps のような site もあるが、それは必然からくるものだ。ここ hatena も graph, map を除いて使える。わずか十数名の会社であるのにだ。

銀行はみてくれなどに金や労力をつぎ込む前に、もっと security について勉強すべきだ。会社の規模に比べて余りにお粗末なそれをあらわにして恥ずかしくないのだろうか。

2007-01-25

はてながメンテでoffだからoffしろとの天啓が

きみにズギャーン!

http://anond.hatelabo.jp/20070125003153

はてなOFFOFFの意味は、2/3ははてなが終日メンテ突入だからOFFしようーという意味じゃないかな?

P:D:O:T:Lの意味がわかっていなかったので助かった。

なんとなくピッザポモドーロのオニオン、トマト付き!ラージで!!...だとか思ってたよ。

というか、サーバメンテだと技術陣はいそがしそうだが、キヨヘロ君あたりはこれるよな。うん。

で・・・、渋谷でどこにいくん?

個人的印象として3人以上で入れるような店とかがおもいうかばにーよ?

席とかせめぇところバッカだし。

はてなってマークシティの抜けた先だっけ?

確か、POSレジだかゆーせんだかの会社のあったあたりになんかファミレスがあったような…。

http://map.hatena.ne.jp/?x=139.69430565834045&y=35.65348666442832&z=0&type=map

これか?デニーズランドか?

みんなの顔知らないところで渋谷シナモンで待ってても永遠と声かけれなそうだから…ここらあたりに集まって、

技術陣が留守のはてなに殴りこんで、お留守番の人あたりに豆まきをするプランを提案したい。

か、王様ゲーム恵方巻きを両サイドからくわえ(ny

2007-01-11

http://anond.hatelabo.jp/20070111001700

http://anond.hatelabo.jp/20070110211059

調布住人ですが

確かに某ビルと、某事務所は、同じ番地だけど

建物は全く別で、結構離れているので

そこに関連性を見出すのはかなりのこじつけ感が…

ビル map:x139.5451y35.6549

事務所 map:x139.5449y35.6544

でもいろんなアングルから勘繰るのはネットの華ですよね

水を差して失礼しました

2006-11-17

[][]ニューカマーにも優しい増田になるために

話題の流れが自動的に視覚化されれば、みんな幸せになれると思うよ。

掲示板ブログ間の言及合戦でもそうかもしれないが、増田でも普段から増田に常駐している人と、最近利用を始めたばかりの人との間に増田に対する理解に差があるね。

匿名ダイアリーとやらに書いてみる」とか「増田って何?」みたいな短いポストを平然とできる人はニューカマーと考えていいだろう。増田に常駐している人々にすれば、「何をいまさらそんなことを書いているのか」と思うかもしれないが、増田ワールドになんの予備知識もなく入ってきたニンゲンにとって、増田内の作法やホットな話題をすばやく把握することは難しい。

増田やりとりされているホットな話題やその中から形成されてきた暗黙の了解はニューカマーには見えにくいし、過去をさかのぼって学習することが難しい(というかめんどくさい)。なぜなら、

では、どうすればニューカマーにも優しい増田になれるのか?

技術的な方法としては、記事同士のつながりを明示化する機能をつければよい。はてなのおとなりMAPの記事単位版をつくればよい(おとなりMAPってもうなくなった?JAVAアプレットでうねうね表示されるやつ)。記事にMAPボタンがついていて、それを押すとその記事がリンクしていたり、リンクされている記事のつながりが芋づる式に図式化される。わんぱーく先生、よろしくお願いいたします!

増田民のボランティア精神に頼る方法としては、[まとめ]とか[前回までのあらすじ]とか[保護者のみなさまへ]みたいなタグタイトルに付けて、任意の議論のまとめ記事を作ればいんじゃね?

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