はてなキーワード: GIFとは
20 名前: 伝説のアフィブロガー(庭)[sage] 投稿日:2012/01/09(月) 23:57:50.62 ID:x5Ug4pGF0
*****************アフィ転載禁止の板
*****************
本日の発言数 2,787,961 (2012/01/09 21:21:3 現在)
2 poverty 162,187 ←嫌儲
3 livejupiter 128,693
4 morningcoffee 126,809
2 news 147,647
ツイッター民にもわかる2ちゃんねるのしくみ
59 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:31:44.25 ID:x3s6N9hF0
ν速の仕組み
17 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:24:11.90 ID:auEV3QXW0 [1/5]
431 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:03:09.42 ID:88IvLDfL0 [3/9]
241 :番組の途中ですがアフィサイトへの転載は禁止です [] :2012/01/09(月) 22:32:09.76 ID:88IvLDfL0 (2/3) [PC]
今までの旧速は異常だった
ウヨサヨ、人種差別、ゲハ、トンキン、被曝、民国、ETC・・・・
これら煽りまくってたわけだろ?
酷すぎだろ
人間のやることじゃないよ。マジで地獄に堕ちるべきだろブロガーども・・・・(ドン引き)
震災や被曝さえアクセス増加に利用し煽りまくるブログがそんな好きか?17
129 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:46:02.43 ID:jtUaB1YS0 [1/4]
>>17
オレも完全にこの罠にはまった野郎だった訳だ
たしかに何でこんなに毎日罵倒しあっているのか訳わからなくなりつつあったし
あふぃ糞には地獄を見てもらいたい
136 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:48:57.90 ID:4VAWN5mt0 [5/6]
>>17
ほんとに人間の所業じゃないよな
今回の件は決して無縁じゃない
154 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:53:57.49 ID:auEV3QXW0 [5/5]
>>136
アフィ糞含め,とにかく他人を貶めないと満たされなくなってたんだな
28 名前:番組の途中ですがアフィサイトへの転載は禁止です[sag] 投稿日:2012/01/09(月) 23:25:55.39 ID:VsfTHYS/0
本当に今までの流れは作られたものだったということ
ステマ恐ろしいわ
73 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:35:00.47 ID:pklWoNjm0
85 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:36:31.26 ID:mbSA40wx0 [5/7]
それ・・今考えるとゾッとするよ・・・
86 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:36:54.38 ID:4VAWN5mt0 [3/6]
対立構造が作り出されてる時は
クソ野郎が金儲けを企んでる時ということを
俺たちは身体で学んだのだ
91 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:38:41.45 ID:3Nof+OXQ0
アフィ連がその時々でウザい役を演じて煽ってたわけだ
142 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:50:23.26 ID:HkzObX8K0 [2/3]
つまりそういうことか
155 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:53:58.52 ID:rkBNbiA90 [5/6]
>>142
153 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:53:55.80 ID:ukLzDJQz0 [4/4]
やっぱ環境で変わるんだな
ニュー速は煽らせようとする仕組みがすごかった
160 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:55:04.91 ID:8ynDL91t0
>>153
224 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/10(火) 00:40:13.75 ID:OE+CnbKI0 [2/2]
在日もトンキンもスレ自体には必ずその反対を書く人がいたけど、
16 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:32:37.51 ID:mbSA40wx0 [1/8]
韓国関係は本当に酷かった
正直もう二度とあの対立に巻き込まれたくない
435 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:58:36.45 ID:IrFGBjnV0
>>16
コレに尽きる
ちょっとでもマジレスしようもんなら、在日認定ネトウヨ認定‥‥
もうね、病気かよとw
979 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/10(火) 00:40:10.89 ID:JH5oRO0I0
>>16
アレなんだったろうな。
36 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:34:02.33 ID:YybQtSLS0 [1/5]
・県表示がない
・ゲハ臭くない
45 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:34:39.62 ID:Y/TKr/Y10 [1/2]
これは素晴らしいよな
本当に普通のことなんだけど素晴らしい
64 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:35:51.82 ID:zFNNkWKH0
俺の言いたいことは全部書かれた
87 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:37:11.55 ID:k3yijoTp0
> ・ゲハ臭くない
528 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/10(火) 00:05:16.73 ID:prTTlAbA0
これに限る 特にネトウヨチョンの言葉がないだけで十分だわ もううんざりだ
642 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/10(火) 00:13:30.33 ID:J6h3owTS0 [1/5]
ここは天国だわ
857 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/10(火) 00:03:49.42 ID:F8B0L2IIO [6/6]
馬鹿ッターとかブログでやらかした一般人への粘着ストーカーもなくなるの?
870 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/10(火) 00:05:25.25 ID:4VAWN5mt0 [6/6]
あんな愚行はもうない
874 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/10(火) 00:05:44.18 ID:A+jBR/Fq0 [7/7]
そんなの祭りにするほどじゃなくね、その人に非はないだろ・・・
っていう、見てて気分が悪くなるような★スレは無くなってほしいわ
57 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:31:04.23 ID:becWHeG80
これで煽りが少なく感じるって旧速はどんだけ修羅の国だったんだよ
61 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:32:00.07 ID:auEV3QXW0 [3/5]
67 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:33:35.93 ID:RAVBlHdx0
71 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:34:37.73 ID:Ay9QXklE0 [2/2]
これでも多いのかw
旧速はマジで酷いぞ
72 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:34:41.65 ID:pEtkdSLg0
大阪で何かあったら民国ww
76 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:35:33.13 ID:bmXaYKWb0 [1/2]
アフィが引き戻しの為にわざと煽ってるレスもたくさんある
81 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:36:00.66 ID:qDWIkdJ+0 [1/2]
本当ここは天国だわ
92 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:38:46.34 ID:PxJpzM3W0 [1/2]
ここはどんだけ平和なんだよ
132 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/09(月) 23:48:00.26 ID:rkBNbiA90 [3/6]
万死に値する
144 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:50:57.63 ID:jtUaB1YS0 [2/4]
そうだよな
きっとオレの感覚が異常になってたんだろうな
旧速は掃溜め以下だったのかもしれないな
643 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:19:41.35 ID:1nll9WQ90 [3/3]
そういや最近異様に派遣フリーターvs正社員のスレが立っていたのはおかしいと思っていた
689 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/09(月) 23:24:21.70 ID:louh2GGq0
時を同じくして、VIPPERも反アフィの姿勢を表明し、「天国板」に移動を開始
1 名前:田中[] 投稿日:2012/01/10(火) 00:00:25.09 ID:cIBaz4Ot0
おめでとう
2 名前:田中[] 投稿日:2012/01/10(火) 00:00:34.92 ID:Lwx9eY2W0 [1/2]
おめっとさん
3 名前:田中[] 投稿日:2012/01/10(火) 00:00:39.97 ID:u5rFWmL80
そして
4 名前:田中[] 投稿日:2012/01/10(火) 00:00:42.52 ID:m9pJ2Rzn0
おめでとう
5 名前:田中[] 投稿日:2012/01/10(火) 00:00:45.05 ID:sOj4jwoK0
やった
6 名前:田中[] 投稿日:2012/01/10(火) 00:00:48.47 ID:yegXd2os0
おめでとう
7 名前:田中[] 投稿日:2012/01/10(火) 00:00:52.72 ID:GRyPcB100 [1/2]
おめ
8 名前:田中[] 投稿日:2012/01/10(火) 00:00:54.19 ID:SdFESZ+J0 [1/2]
おめでとう
9 名前:田中[] 投稿日:2012/01/10(火) 00:00:54.76 ID:uppjyNRT0 [1/2]
10 名前:田中[] 投稿日:2012/01/10(火) 00:00:58.88 ID:ZLgpnl2e0
きたで
1 名前:田中[] 投稿日:2012/01/09(月) 22:56:34.23 ID:LFvqbNTS0
テンゴッカー?
2 名前:田中[] 投稿日:2012/01/09(月) 22:57:10.89 ID:F7kcWXvH0
パラダイサー
3 名前:田中[sage] 投稿日:2012/01/09(月) 22:57:14.43 ID:bd2OQMNF0
4 名前:田中[sage] 投稿日:2012/01/09(月) 22:57:22.72 ID:nYot0YLD0
天使ちゃん
5 名前:田中[sage] 投稿日:2012/01/09(月) 22:57:40.13 ID:ViSps0vR0
Temper
6 名前:田中[] 投稿日:2012/01/09(月) 22:57:47.64 ID:7o+omQcd0
7 名前:田中[] 投稿日:2012/01/09(月) 22:57:57.88 ID:ZxDviub40 [1/3]
8 名前:田中[] 投稿日:2012/01/09(月) 22:58:09.09 ID:AtHcs5hv0
tanaker
9 名前:田中[] 投稿日:2012/01/09(月) 22:58:32.22 ID:ZxDviub40 [2/3]
10 名前:田中[] 投稿日:2012/01/09(月) 22:58:33.19 ID:ZQYqYPWM0
天パーだろ
天国板、さっそく書き込み数2位へ
1 名前:番組の途中ですがアフィサイトへの転載は禁止です[] 投稿日:2012/01/10(火) 00:12:26.41 ID:6uaEqfYC0● ?PLT(24456) ポイント特典
sssp://img.2ch.net/ico/miyabi.gif
1 news4vip 7,916 186,985 186,985 hayabusa ○
2 heaven4vip 3,803 89,831 276,816 anago ○
3 poverty 1,913 45,187 322,003 awabi ○
すべての星々を焼き払い、負けを知ることのなかった最強ニュー速民。
しかし、己の星に隠された支配構造を知ったとき、己の星をも一夜で焼き尽くした。
○
_.// | http://awabi.2ch.net/poverty/
__/ // .|
__/ 、 // |
/ ┌┐ .∨∧.. |
\ ├、 ├┘(∃i \___|┌‐─┐ /|
| | l └ //\ \ )l___|_ // /9
| // \ \/(ん` ) // (∃i
/| / ` __/ ̄\ \.〉 (_ /==o.//⌒ヽ
. //´ |__/ ̄ ̄ \ \ /// /――‐⊃
//___ ヘ | | |/ // | ^ν^)_
. //人__\ / \ 〉 / ./ / | \
//{: ´┴`}/_/__/ / \E ) \ |ヽ \_
|⌒j/  ̄\( ^ν^) ̄ /9 | _ \. | | \| \
| |
http://sky.geocities.jp/nanami061106/
調停 http://sky.geocities.jp/nanami061106/choutei.html
事情 http://sky.geocities.jp/nanami061106/jijyou.html
アパート破壊画像 http://sky.geocities.jp/nanami061106/gazou.html
ある市議へのメールとその返事(再加工するまでちょっと停止中)
法律には違反しないけど、無料のじゃなく告発サイトおkな所でやった方が良いかと思って
アパートは競売物件ではありません。元の大家が負債を抱えて、債権者にお金を返せなくて競売にかけられてしまった場合、賃借人の居住権が認められなくなる事もあるらしいですが
競売物件ではありません。
だから、家主にはこの物件の家賃を受け取る権利しかありません。
7/26追記
この判例を先に書いておくべきだった。と昨日書きかけたら、間違えてタブを閉じてしまい、保存してなかったので消えてしまった
何を書いてたか具体的には細かいところは忘れた。この判例のリンクは載せた気がする。わざわざ太字にしようとしたりしてた。。。
ええと、この判例はこれも偶然京都なんですが、借家を人が住んでる状態で追い出そうとして壁ギリギリまで壊して、訴訟に発展したという例です。
何を書いてたか思い出した!! 名古屋にはこの訴訟の案件を応援した団体はありません><
できかけてはいるそうです。まちbbsで教えて貰いました。し・か・し・・・ ある政党の関連なので、ある政党の交渉しかしたくなく老朽化が認められるかもなんて前例が見当たらず法的根拠に乏しい事(今日見つけたここのリンクでもそういう解釈)を言う弁護士と先に接触し、辞任されてしまったので、その系列の弁は全滅><
名古屋にはありませんが、他の都市には賃借人の権利を守る団体があります。上の判例の文字はリンクになってますが、その判例の訴訟を応援したのはその団体です。
しかし、私は「○○党がそんな事言うわけない!!」(サイトは点滅GIF画像が貼ってある。今2011/10/09までコピペできてない事に気付いてなかった。今訂正した)と言われてしまいましたが アハハ八八ノヽノヽノヽ
弁護士の非行を指摘するブログの方も、そこの系列の弁護士に付いては色々と語ってらっしゃいますが、わかる人にしかわからない事なんでしょう。
あぁ、それに、自分のリンク頁に参考に載せた千葉の不当に分限処分になり教職を追われ、それでも頑張って不登校の生徒を集めるなどしてやっていたが
映画を作るためマンションを売って引っ越したら・・・ 続きはここで(居住権の会ゲートのページ)ここにもある系列の弁護士の人との意見の違いから袂を分けた事が書かれてます。
まだ続きはありますが
前に、親の事知恵遅れに相談して(正しい知識が欲しいと言うより、一般の反応が見れるとか、実際の病院の情報とか そういうものが欲しかった) 親の状態を喩えると、代理ミュンヒハウゼン症候群みたいな、何の利得も無いところで、変な事をする異常な人の心理に近いのではないか? どこかで代理ミュンヒを扱っているような病院を知らないか?と質問したら
親のEAXも異常だが、はっきり申し上げてあなたにも同じ異常さを感じる、と書かれ、やたら病院を勧めるのだが、具体的な病院名は無し
はっきり言うなら、どこがどうなのかを明確にせよ、と言いたい!言いたいので最近くだらないなと思いつつ質問を新たに建てた。そいつ向けに。
過去質問
代理ミュンヒハウゼン症候群を扱っているような病院や医師をご存知ないですか?(避難するように離れて長く暮らしてましたが、居場所が親に知られた状態なので怖いのです。)
奈良で確かこれで逮捕された医療関係者の母親というのがいたと思うのですが
こういうややこしい人格障害のようなものまで、ちゃんと見てくれて気がついて診察や治療までしてくれる専門家が、日本にいるのでしょうか?
読み物として本で読んだり、ドラマや小説のように思っていたり、外国の珍しい事例だと、全く関係ない世界の話のように思っているのは、一般の人だけでなく専門家も同じのような気がします。
代理ミュンヒハウゼン症候群 http://ja.wikipedia.org/wiki/%E4%BB%A3%E7%90%86%E3%83%9F%E3%83%A5%E...
これは果たして医療関係者にだけある異常心理異常人格なのでしょうか?
教師の親にもこれの変形のようなものがあるとは考えられないでしょうか?
ミュンヒハウゼン症候群は、仮病で人の気を引くかまってちゃんのような病気らしいですが、医療関係者がこれをやるのはまたちょっと捩れていて、自分の子を使って自分が褒められたいみたいな気持ちらしいです。医療行為を認めてもらいたいとか他にも色々複雑怪奇なものを含んでると思いますが。まあ、これも広義なかまってちゃんですが。。。
広義な意味でと言っても、ちょっとしたかまってちゃんとはその害や迷惑の甚大さが違いすぎますが。。。
教師の場合の類似な異常までは行かなくても異様な心理として、学校への提出物に手を入れたがってきて、子供がやったものの方が評価が良いと機嫌が悪くなるとか、子供が自分でやるのを邪魔するとか、
単純に良い成績を取らせたいという目的でやっているとも思えない行為をする場合もあったりするのは、親がやった提出物が評価されるのが気持ちよいという心理があるからではないかと推測されるわけで・・・・
こういうのって、限りなく代理ミュンヒハウゼン症候群に近い心理のような気がするのですが・・
どうなんでしょう?
たまたま医療関係者にミュンヒハウゼン症候群がわかる人がいたのと、同じ医療専門家だから医療行為的に不審な部分に気が付けたりしたから、代理ミュンヒは医療関係者に多いという事になったけど
他の業界の親の中にも、形を変えて同種の心理状態に陥っている人は、ごく僅かにしても存在していてもおかしくないなと。
親からの気持ち悪いFAX http://sky.geocities.jp/nanami061106/oyanokimotiwarui.fax.html
補足
やんばるさん
保健所の精神衛生相談の精神科医は、親のFAXを見て「こんな変な人、今は誰も相手にしないだろう」とか言って何もシマセン
養護教諭だった母は前に住んでた所に来た時"転職して精神病院で働いてる"というメモをオイテイキ
隣の部屋の人に実は精神病院に入れましたがどんなですか?ト質問。私ノサイトニハ人格ニ問題アル家族ニ入院サセラレタ人ノ話もアリ。保健所デコノ話モシタ(これは文字数の関係でこうしただけです)
違反報告
回答数:1
お礼:知恵コイン50枚
閲覧数:125
(ソーシャルブックマークとは)
ベストアンサーに選ばれた回答
yambaru0917さん
この投稿から、Webサイトを拝見しましたがお母様の行動には問題があるように思います
はっきり申し上げますと、あなたの文章からもお母様のFAXと同じような異常さを感じます
代理ミュンヒハウゼン症候群は有名ですから、普通の精神系病院でも通じると思います
お返事の補足ありがとうございます
補足の文章だけ拝見しましても、ご本人かなりお疲れのご様子です
はっきり申し上げますと、あなたの言動は文章能力や周囲の方の問題
違反報告
編集日時:2011/8/1 20:30:04回答日時:2011/7/29 08:21:11
消えるのも何なんで選びました。
補足にもサイトにも書いてますが相談に行っても保健所で対応してくれてない状態ですが。被害者側が医療機関が必要という事もあるでしょうけどそれが同じ状態というのはどうかと。同じというとこちらが嘘や詐病になり親が代理ミュンヒというのも嘘になり親がそれでないかと言っている主張を認めるのも矛盾する事になりますが?
この質問・回答は役に立ちましたか?
役に立った!
お役立ち度:0人が役に立つと評価しています。<<
最近の質問
どこがどう異常か説明して下さいよ!そこまで言うのなら説明できますよね?はっきり申し上げればを枕詞にすれば何を言っても良い訳ではありません。それに代理ミュンヒハウゼン症候群を扱ってる医師を知ってるんですか
他サイトで、教えてGOOで2,3、質問して判断するわけでもなく、いきなり「勝手にお薬を減らしてませんか?」とか主治医の話なんて書いてないのに、この質問をプリントして医師に見せて下さいと書かれたので、アパート半壊画像を載せて、この画像だけでも私の頭の中にだけある映像ではない事がわかってもらえると思います、と書いたら謝罪はおろか一切返事がなかったと言う話を書いたら
>その答えを書いた人が「薬を飲まなかったことがあった」んだろうし、「主治医を信じなかった」ことがあったんだろ。自分のことに絡められそうな話題にレスしているだけで、話題そのものもろくに読んでないんだよ。
>つまり「質問に答える」という形で「自分語り」をしているに過ぎない。書かなかったこと(行間)が読めるすごい人もいるけど、たいがいは妄想大人。無視するよろし
根拠も無く異常異常って、はっきり言ってあなたの主観でしかないじゃないですか?根拠を述べたって、実際合って心理テストをしたわけでも医師が診断したわけでもないので、文面からの印象でしかないわけです
そんな客観的に判断できる材料が少ない状況で、そこまで決め付けるあなたの方が行動に問題があると思います
だいたい精神科というところは、昔から家畜経営と言われてきた歴史もありますhttp://blog.livedoor.jp/mizikanamondai/archives/2011-02.html
知恵袋過去回答でも良心的なものではこう言っている人もいます。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1271342947
そういうところなので慎重にならざるを得ない面もあるじゃないですか!!!!
それを、病院名を指定もせず、どこの病院でも代理ミュンヒハウゼン症候群は扱っているとか!!!!!!
症例報告少ないってここにもhttp://munchausen.seesaa.net/
研究としてあって医者なら知識として知ってるかもしれないが、その症状の人がごろごろしてるわけじゃあるまいし。
親は代理ミュンヒとも言ってない、変形のような心理ではないか?と聞いていた。利益がない事をする意味不明な人もいるという例で出しただけなのに。
通院しても無茶な人がのうのうと回答してるのに。私への最近の回答欄参照
補足
知恵遅れ内ラベリング検索http://goo.gl/CPQ9a 良回答http://goo.gl/XcyQ5(wikipediaコピペのような気もするけどまあいいや)
もしかしたら、親を悪くゆってる~とお花畑な頭で考えたのかもしれない。
以下を全てGoogle Reader上で行いたい。
タイトルをクリックしたら自動的に全文を取得して表示して欲しい。以下の設定を行うと出来る。
ブコメが表示されないので、これを直したい。
id:northappleさんが「googleリーダー内ではてなブックマークのコメントを参照したいで.. - 人力検索はてな」という質問の回答及びコメント欄でこれを直す方法を教えてくれている。よって、その通りに変更すると直る。2ヶ所置換が必要。
以下、Google Reader plus Hatenaの変更点です。変更するには、Firefoxの右上にある猿(Greasemonkey)のアイコンの右にある下矢印をクリック→「ユーザスクリプトの管理」をクリック→「Google Reader plus Hatena」の「設定」をクリック→「このユーザスクリプトを編集します」をクリックするとエディタで「Google Reader plus Hatena」のスクリプトが表示されるのでそれを編集する。
62行目
mySpan.innerHTML = '<a href="http://b.hatena.ne.jp/entry/'+url+'" onClick="window.open(this.href,\'\',\'status=yes,scrollbars=yes,directories=yes,menubar=yes,resizable=yes,toolbar=yes\'); return false;" ><img src="'+ BookmarkImageURL +'" /></a>';
を、
mySpan.innerHTML = '<a href="http://b.hatena.ne.jp/my/add.confirm?url='+url+'"><img src="'+ BookmarkImageURL +'" /></a>';
に変更。これで「○○ users」をクリックすると、目的のウィンドウが開くようになる。
147行目
var t = bookmark.timestamp.split(" ")[0].split("/");
を、
var t = bookmark.timestamp;
に変更。
156行目、
html += "<li><span class=\"__hatena_bookmark_anywhere_timestamp\">"+escapeHTML(t[0])+"年"+escapeHTML(t[1])+"月"+escapeHTML(t[2])+"日</span><img src=\"http://www.hatena.ne.jp/users/"+escapeHTML(bookmark.user.substring(0,2))+"/"+bookmark.user+"/profile_s.gif\" width=\"16\" height=\"16\"><a href=\"http://b.hatena.ne.jp/"+escapeHTML(bookmark.user)+"/"+escapeHTML(t.join(""))+"\" class=\"hatena_bookmark_anywhere_user\">"+escapeHTML(bookmark.user)+"</a><span class=\"hatena_bookmark_anywhere_tags\">"+tags.join(", ")+"</span>"+escapeHTML(bookmark.comment)+"</li>";
を、
html += "<li><span class=\"__hatena_bookmark_anywhere_timestamp\">"+escapeHTML(t.slice(2,-3))+"</span><img src=\"http://www.hatena.ne.jp/users/"+escapeHTML(bookmark.user.substring(0,2))+"/"+bookmark.user+"/profile_s.gif\" width=\"16\" height=\"16\"><a href=\"http://b.hatena.ne.jp/"+escapeHTML(bookmark.user)+"/"+escapeHTML(t.split(" ")[0].split("/").join(""))+"#bookmark-"+escapeHTML(json.eid)+"\" class=\"hatena_bookmark_anywhere_user\">"+escapeHTML(bookmark.user)+"</a><span class=\"hatena_bookmark_anywhere_tags\">"+tags.join(", ")+"</span>"+escapeHTML(bookmark.comment)+"</li>";
に変更。
# ブコメのはてなスターを取得しやすいように、ブコメのリンクもブコメのパーマリンクへ変更してあります。
を、
var evt = document.createEvent( "MouseEvents" ); evt.initEvent( "click", false, true ); createSpan.dispatchEvent( evt );
に変更。(「 JavaScriptの動かないコード (中級編) clickイベントを強制的に発生させたい (fireEvent/createEventの使い方) - 主に言語とシステム開発に関して」を参考にさせて頂きました。)
出来た。けど、めちゃくちゃソースが汚いので、差分として公開するのが難しい。ごめんなさい。
553 名無しさん名無しさん 2011/02/08(火) 14:40:19
そもそも何で今水池がネットの作画オタクの代表みたいに崇められてるのか理解できない
史観的に振り返るとインターネットではじめてまともに作画を語ったのはもう10年以上前
漫画家の悠里愛が自身のHPで現行のアニメや過去の作品において熱心に語り始めたのが最初だった
俺が知る中でまともな作画語り(というか素人然としていない作画語りみたいなもの、まぁ悠里は畑違いのプロではあるが)
をやったのはあれが最初
それとは別の文脈で沓名健一が出てくる
当時のくーさんの語りは今の作画スレの遥か下のにわかレベルであったが、小黒はじめ業界人がそのgifアニメの凄さに目をつけ掲示板は業界人の巣窟となる
そこでくーさんはヘッドハンティングされ今のweb系のスカウトの流れが出来上がるわけだが(最近はそれを狙ってHPで志望者がgif等を掲載するのが当たり前になっている)
その沓名HPの盛り上がりが、沓名がオサムの作品に呼ばれてセミプロになったあたりで多くの素人にも目をつけられ業界人が自重し始め一段落するわけだ
作画スレが出来上がったのはその直後だった(それまでは簡易的に巧いアニメータースレで情報交換はなされていたものの、メインは完全に沓名の掲示板だったんだ)
そしてここまでの流れを水面下でROMって知識を吸収した第一世代ネット作豚が水池屋であり、まっつねであり、たけしとであり、電源を切ってくださいになるんだよ
554 名無しさん名無しさん 2011/02/08(火) 14:48:01
そして作画スレの2桁代まではまさにその作豚第一世代、業界人、アニメーター志望者、にわかROMが仲良く同居した幸せな作画語りを築いた黄金期!
ちょうどぬるぽの初期話数がすごいすごい、松本憲生はすごいみたいな流れがネットの作画的な常識になる礎を築いたのもこの頃だ
当時の作画スレに関してはおそらく相当数の業界人のお墨付きが出ており、橋本敬史も烏のコメンタリーで
「このパートは、今2ちゃんねるの作画を語るスレで大人気の松田宗一郎君のパートで・・・」みたいな今じゃ有り得ない友好的なことも言っている
そしてそのネットでの作画語りの盛り上がりに後押しされる形で、前々からミュウミュウ等でお騒がせだった石野はじめとするへらすたの掲示板が出来上がる!
555 名無しさん名無しさん 2011/02/08(火) 14:53:38
そしてここが作画語りの分岐点になる
へらすた掲示板の嵐による閉鎖だ
にわかROM達がついに芽吹いて書き込むようになったということだ!
ここで初めて「作画オタクの=他のネットユーザーとは違う礼節を持った常識人」
という認識が崩れる
それから今に至るまで連綿と続くなが~い暗黒期に入るんだよ
ハルヒグレンコイルなど確かに作画アニメの放映による盛り上がりはあることはあった
でも具体的に作画が語られることはなくなってしまったんだ
アニメーターおたくみたいなテロップ厨という連中がいるということをテンプレに起こしてしまったのもこの頃で、今になって思えばそれもまずかったのだね
自虐的な作画を語れない作画オタク(前述したROM第一世代)が書き込むようになってしまって、もうぐちゃぐちゃになっちゃった
http://anond.hatelabo.jp/20110709223841
ラスタ画像の自動リサイズは画質劣化に繋がってうざい場合がある
見開き前提の漫画は見開きで読みたいし、1ページごと前提の漫画は1ページごとに読みたい
参考にしよう。
http://anond.hatelabo.jp/20110709234137
巻(章)の最終ページからの通常遷移(メージめくりで飛ぶ場所)は次巻(次章)の最初のページだとサクサク読めて嬉しい。
最終ページからの通常遷移が巻(章)の並んでる目次ページの場合がたまにあってそれだとすぐに続けて読めないし、
「あれ?次は何巻(何章)だったっけ?どこまで読んだっけ?」と(章も多いとスクロールして下の方を探さなきゃいけなかったりして)ちょっとイラっとする。
俺が想定しているWebコミックというのは、
こんな感じなので、そういった不満は出ないように考えてる。
画像表示プログラムの習作としてWindowsXP標準の「Windows FAXと画像ビューア」を模倣中に発見。
WindowsXPにおいて画像ファイル(JPEG、GIFなど)に関連づけられている「Windows FAXと画像ビューア(以下『画像ビューア』)」は、ファイル名昇順で画像を連続表示すると思われているが、別にそういうわけではなかった。
WindowsXP HomeEdition SP3(おそらくProffessionalも同様と思われる)
「Windows FAXと画像ビューア」の画像を開く順番は、フォルダ上の表示形式に依存しているようだ。何でまたこんなややこしい仕様にしたんだろう。
ツールバーの概要のページの「次のイメージ(→)」「前のイメージ(←)」の説明には、それぞれ「同じフォルダの次のイメージに進みます。」「同じフォルダの前のイメージに戻ります。」と記載されており、ファイル名順に進むとは記されていない。
ttp://aresoku.blog42.fc2.com/blog-entry-1558.html
1 名前: 漁網(東京都)[] 投稿日:2010/02/11(木) 18:18:09.56dH3oS8Vo BE:7367832-PLT(13001) ポイント特典
sssp://img.2ch.net/ico/anime_monar02.gif
日本の岡田克也外務大臣は、日本が30年以上韓国を統治した期間について、「悲劇的な事柄」と言う表現で、韓国に謝罪しました。
韓国の国営メディアは、岡田外相はユ・ミョンファン外相との共同会見で稀な謝罪をした、と伝えました。
(中略)
日本は1910年から1945年まで韓国を支配し、 その間、主に韓国と中国から日本軍が約20万人の女性を強制的に性奴隷として奉仕させたとして批判されています。
彼女たちは「慰安婦」として大日本帝国の兵士に知られていました。
(後略)
ttp://edition.cnn.com/2010/WORLD/asiapcf/02/11/japan.korea.apology/index.html
28 名前: 鉛筆(広島県)[] 投稿日:2010/02/11(木) 18:23:35.87ZheNWZWJ
嘘も100回言えば真実になる
41 名前: ラジオメーター(神奈川県)[] 投稿日:2010/02/11(木) 18:25:55.03RutJi3HM
そら日本の政治家が頭下げて回ってるんだからわざわざ外野が否定する理由がない。
自業自得すぎる。
67 名前: 漁網(東京都)[] 投稿日:2010/02/11(木) 18:29:19.16dH3oS8Vo BE:60167677-PLT(13001)
sssp://img.2ch.net/ico/anime_monar02.gif
これ、記事を読むと、岡田は慰安婦についてなんか一切発言してないのよね。
韓国側ですら、今回は発言してない。
>岡田外相は「この悲劇的な事柄が、韓国国民の国と自尊心を奪ったと認識している」と聯合ニュースに語った。
>彼は「こうした犠牲を忘れてはならない」と付け加えました
っつーだけ。
問題は、長年の積み重ねによって「日本は慰安婦20万人を強制連行した」というのが
「日帝支配時代」の事実として流布されてしまっている点でして…
105 名前: 蛍光ペン(アラバマ州)[] 投稿日:2010/02/11(木) 18:44:58.95btVkGZXn
»1
正確には
兵士1人に1人の慰安婦ぐらいw
229 名前: ホッチキス(鳥取県)[sage] 投稿日:2010/02/12(金) 11:20:18.74q9mJ5mhb
もう一回やって戦争に勝つしかないな
勝谷誠彦さん 「小沢先生からカネを貰って何が悪い!ボランティアで講演をやれというのか!」
ttp://finalfantasy35.blog45.fc2.com/blog-entry-1716.html
1 名前: 三脚(鹿児島県)[] 投稿日:2010/02/10(水) 20:57:36.29 ID:hEGme+pY ?PLT(15000) ポイント特典
sssp://img.2ch.net/ico/3na.gif
●これまでの流れ
勝谷誠彦が命名した株式会社「世論社」の取締役に勝谷本人が就任
主に国会議員の公式サイト製作で収益を稼いでいるが、その国会議員のほとんどが民主党所属
↓
民主党の公約の一つがネット選挙解禁であることから、世論社と民主党との
黒い繋がりが指摘される
↓
ttp://blog.livedoor.jp/manguhsai/archives/1214812.html
↓
総務省が公表した政治資金収支報告書において、勝谷などワイドショーのコメンテーター十数人が小沢一郎氏の講演会に出席し謝礼を貰っていた事実が発覚
ttp://74.125.153.132/search?q=cache:N76C6vbe7VQJ:tsushima.2ch.net/test/read.cgi/news/1265019162/+http://tsushima.2ch.net/test/read.cgi/news/1265019162/&cd=1&hl=en&ct=clnk
↓
勝谷、自身の有料配信日記(2010年2月5日)で「これのどこが問題なんだ」などと苦しい言い訳に終始するも、同志である高橋茂さんが自身のTwitterアカウントを削除して逃亡
完全に八方塞 【← 今ここ】
> 私が小沢さんの会で講演してお金をもらったということをわあわあ騒いでいる人たちは、
> では貰うなというのだろうか。「いえいえ、タダでいいです」などと言うほど本当の意味で
> 媚びへつらう行為はないだろう。それとも小沢さんの講演は受けるなと言いたいのか。極めて
> 危険な考え方だが、そういうタコツボに住んでいる人たちが増えているのかもしれない。
> よほどのことがない限り、私は出かけていく。そんな機会ででもないと出会うことがないかも
> しれないし、私を呼んでみようという気概にも敬意を表するからである。
ttp://blog.livedoor.jp/manguhsai/archives/1242577.html
10 名前: 平天(関西地方)[] 投稿日:2010/02/10(水) 20:59:21.07 ID:fKpDFEHR
悪くはないが、それやって小沢をとことん擁護じゃ、
何言っても説得力はなくなる。
75 名前: しらたき(鳥取県)[sage] 投稿日:2010/02/10(水) 21:06:08.86 ID:QyLr91Bq
»10で結論出てた
163 名前: ハンドニブラ(沖縄県)[sage] 投稿日:2010/02/10(水) 21:14:42.24 ID:psF2G6w7
»10
勝谷見てるか?これに答えろ
ttp://nihon9999.blog77.fc2.com/blog-entry-4257.html
1 名前: 昆布(dion軍)[sage] 投稿日:2010/02/09(火) 17:04:26.19 ID:p9YhVy0I ?PLT(12501) ポイント特典
sssp://img.2ch.net/ico/mamono.gif
高市氏「地方であっても国益に関係ある。では何故地方参政権は良い?」
鳩山氏「だから議論をすべき」高市氏「既に地方でも国益に関する例がある。原発の誘致など」
高市氏「中国からの多大な移民があり、中国の国防の影響下にある。日本の防衛に対する影響は?」
北沢氏 「 衆 院 選 で 民 団 の 方 と 話 し た が、危 険 性 は な い」
ttp://twitter.com/keiko000/status/8846049619
外国人参政権法案「錦の御旗(略称錦旗、別名菊章旗)として今国会で実現」 民団の新年会で民主・山岡氏
ttp://sankei.jp.msn.com/politics/situation/100112/stt1001121327004-n1.htm
鳩山首相「違憲?重要だから議論」「外国人参政権を錦の御旗(菊章旗)として今国会で実現」と言うだけあるな
ttp://tsushima.2ch.net/test/read.cgi/news/1265702276/
4 名前: 鋸(アラバマ州)[] 投稿日:2010/02/09(火) 17:05:28.23 ID:NwrRwNRz
ttp://society6.2ch.net/test/read.cgi/jsdf/1244515722/
210 名前: 石綿金網(東京都)[] 投稿日:2010/02/09(火) 23:24:56.64 ID:4+zr0fIt
»4
有名な事件っていうか事案だよな、それ。
14 名前: れんげ(dion軍)[sage] 投稿日:2010/02/09(火) 17:09:42.12 ID:SjlSttv9
16 名前: 時計皿(岡山県)[sage] 投稿日:2010/02/09(火) 17:10:41.27 ID:+v3/kDJK
民主党に投票した、メディアリテラシー皆無のバカ愚民さん 何か言ってみて
ttp://aresoku.blog42.fc2.com/blog-entry-1527.html
37 名前: ハンドニブラ(東京都)[sage] 投稿日:2010/01/15(金) 23:11:39.235U9VH1sn BE:39949733-2BP(2224)
sssp://img.2ch.net/ico/onigirimona.gif
»33
そういや、自給1,000円は完全な釣りだったな。
39 名前: れんげ(新潟県)[] 投稿日:2010/01/15(金) 23:12:18.74gKu0ExlE
»1
小沢なんて元々真っ黒じゃねえかよ
50 名前: アルバム(奈良県)[] 投稿日:2010/01/15(金) 23:16:30.3252TGM8pA BE:927299366-PLT(12000)
sssp://img.2ch.net/ico/kyu.gif
»37
「次の選挙、民主党が勝ったらバイトの時給1000円に上がるらしいぜ」
こんな会話聞いて、暗澹たる気分になったわ。。
»39
今の20代は、自民党経世会時代の、まさに土建金権政治の権化だった
小沢を知らないからなあ。
自民党の中の一番汚い連中を、自浄作用で自民党から追い出したら、出来た
64 名前: 輪ゴム(神奈川県)[sage] 投稿日:2010/01/15(金) 23:26:39.66HmYKe3Js
»50
旧55年体制とか知らないんだろうな
ttp://tsushima.2ch.net/test/read.cgi/news/1262163210/
1 名前: リービッヒ冷却器(静岡県)[] 投稿日:2009/12/30(水) 17:53:30.46 ID:fk9GKj+n ?PLT(12000) ポイント特典
sssp://img.2ch.net/ico/snow.gif
出かけていて帰宅しました。多くの誤解を生んでしまって申し訳ありません。
息子と話したのですが、彼が言っていたのはプロアクションリプレイ付属の
PCアプリケーションでダウンロードした攻略コードのことで、ゲームソフトを
チートしたいので、その方法を知りたいとのことでした。
17分前 webで
renho_sha
ttp://twitter.com/renho_sha/status/7190521896
137 名前: 目打ち(長屋)[] 投稿日:2009/12/30(水) 18:09:18.71 ID:ZfiQysML
やたら専門用語つかって多弁になってるのは
入れ知恵された証拠w
469 名前: 目打ち(長屋)[] 投稿日:2009/12/30(水) 19:10:59.42 ID:ZfiQysML
607 名前: 魚群探知機(関東・甲信越)[] 投稿日:2009/12/30(水) 20:14:19.80 ID:cobTLK+Z
( `∀´)「DS『イナズマイレブン2』の改造コードの入れ方をどなたかご存知ですか? 私にはさっぱり…」
↓
( `∀´) プロアクションリプレイの件でご懸念を抱かせてしまいました。
↓
PARって「改造コードを入れる」必要ないんだよね。(´ι_` )
・LV最大
とかメニューから選択するだけ。
ttp://tsushima.2ch.net/test/read.cgi/news/1262162359/330
↓
ttp://www.datel-japan.co.jp/lineup/japanese/par/max2/index.html#product-how
↓
(´Д` )←R4 (´Д` )←R4に入れ知恵して文章書かせた奴
「改造コードの入れ方」を質問するのはおかしい。その矛盾点。
ttp://tsushima.2ch.net/test/read.cgi/newsplus/1262163389/291
ttp://tsushima.2ch.net/test/read.cgi/newsplus/1262163389/647
鳩山「正直に話してるのに国民が理解してくれないw」 NHKは会見放送を辞め まさかのニコニコ動画大勝利
ttp://ichisureichi.blog67.fc2.com/blog-entry-1436.html
1 まな板(東日本)[sage] 2009/12/24(木) 18:37:48.61 ID:/CrXStPL● BE:92088432-PLT(12000) ポイント特典
sssp://img.2ch.net/ico/anime_shii03.gif
ちなみにNHKやらTV各局は会見放送せず ニコニコ動画が独占中継する始末(中継は終了済み)
399 巾着(東京都)[sage] 2009/12/24(木) 18:56:03.66 ID:Cv5KHgbV
誰か「選挙前に散々言ってた記者クラブ改革はどうなった?国民に「また鳩山さんが嘘をついてる」と言われると思うがどうよ?」
鳩「過去の発言について言い訳をするつもりはない。記者クラブ改革は来年する。どうせ信じて貰えないだろうが(←マジで言った)」
1 : ◆PENGUINqqM @お元気で!φ ★:2009/11/24(火) 22:21:24 ID:???0
このところ東京市場の一人負けが鮮明になってきた。海外市場の株価が相次いで今年の最高値を
更新しつつある中で、東京市場だけは下落基調から抜け出せない。
大はしゃぎをしたのは鳩山さんだけ。国民の多くはただ白けただけのオバマ大統領の訪日も終わり、
鳩山さんは彼に「Trust me」(私を信じてほしい)と直接言ってあるから何も問題はないと考えて
いるようだが、市場はまったく反対の反応しかしていないのは大いに気になる。
その後のオバマ大統領の日程を見ても一目瞭然だが、明らかにこれからも米債を確実に買ってくれる
中国と、勝手に東アジアをまとめたがっている日本とではアメリカがどちらのウエイトを高くするかは
素人にも分かる。
そんな情勢を反映してこのところ東京市場の一人負けが鮮明になってきた。海外市場の株価が相次いで
今年の最高値を更新しつつある中で、東京市場だけは下落基調から抜け出せず、NY市場が上げても上海が
上げても、「そんなの関係ない」といったまったく気合の見られない腑抜けた市場になってしまった。
かねてから東京市場の無気力ぶりに警告を発してきてはいたが、それも程度問題でここまで無気力に
なると、ことは重大である。しかも東京市場低迷の原因のひとつが大企業による大型増資だそうだから、
本来資本調達の場であるべき市場が調達を嫌気して下げるという、何ともおかしな現象になっているのは
大いに気になる。
(»2以降に続く)
▽画像:日米首脳会談で「私を信頼して」とオバマ大統領に訴えた鳩山首相
ttp://moneyzine.jp/static/images/article/181574/premiere.gif
▽MONEYzine
ttp://moneyzine.jp/article/detail/181590/
前スレ ★1が立った日時 2009/11/23(月) 14:57:49
ttp://tsushima.2ch.net/test/read.cgi/newsplus/1258967504/
3 : ◆PENGUINqqM @お元気で!φ ★:2009/11/24(火) 22:21:34 ID:???0
(»1の続き)
米国もリーマンショック以来大型増資を重ねてきたが、経営陣の頑張りや株主の応援が功を奏したの
だろう、GEやGSなど株価は見事な回復を見せている姿とはまったく対照的である。
JALなどまさに日本的資本主義の典型であり、まるで非上場の中小企業が金繰りのために増資を繰り返す
ようなことばかりやっていれば、本来歓迎されるべき増資が忌避されても仕方があるまい。
金融機関もそうだ。本来普通株式で自己資本の充実を図るべきときに劣後債や優先株でBIS基準を保って
いたので、今回利益と自己資本を重視するように基準が変わってくるとなると、利益目標が立たないまま
増資をしなければならなくなる。
既存の株主にしてみれば、その分だけ希釈化され1株あたりの価値が下がるのではとっても持っては
いられないと、ぶんなげたくなるのはあたりまえだろう。
かくして本来の市場の機能が大きく低下しているところに、円高や経済成長にはまったく無関心な
「友愛内閣」が出てきたのだから、株などおっかなくて持ってはいられないとなるのは人情だろう。
本当の意味の友愛はそんなに資本が足りなくてお困りなら出してあげましょうか、となるはずなのだが
この友愛はどうやらばら撒きという意味らしいから、市場にとって優しいものになる友愛ではないことは
覚悟しておくべきだろう。
閣僚の市場に対する態度も酷いものだ。前原国交相など不用意にJALの法的整理の可能性を口走り、
あっという間にJALが急落してしまい、この損害を投資家は泣き寝入りしなければならないなら、これは
自己責任以前の大きな問題である。
直嶋経産相のGDPの事前漏洩も酷い。インサイダーの塊のような大事な数字をケロッと喋って反省
どころか薄笑いでごまかす始末。きちんちとルールを守っているエコノミスト諸氏は猛然とクレームを
つけ大臣の座から引きずり降ろすべきではないのだろうか。
(»3に続く)
4 : ◆PENGUINqqM @お元気で!φ ★:2009/11/24(火) 22:21:49 ID:???0
(»2の続き)
■日本は酷い国になりそうだ
また事業仕分けもある種国民のあく抜きのための人民裁判みたいなもので、こんな衆愚に阿るような
国の株など、あの人民裁判をさんざん経験した中国人ならまず買ってはこないだろう。ましてや他の国の
投資家に魅力的に見えるはずも無い。
かくして有り余る金を持ちながら東京市場の低迷は長期化をよぎなくされるだろう。いま注目する
のなら資源国か、環境などテーマ性のあるグローバル企業の押し目買いしかあるまい。それにしても
酷い国になりそうである。
-おわり-
1 名前: ノイズe(関西地方)[sage] 投稿日:2009/10/11(日) 23:06:47.47fb7Nmm2f BE:1077245748-PLT(12073) ポイント特典
sssp://img.2ch.net/ico/anime_iyahoo.gif
2009年10月11日12時00分 / 提供:サイゾーウーマン
スケトウダラや鶏のすり身にエビの風味をつける添加物(エビパウダー)を加え、
小ぶりのエビの周りに結着させていくと......特大エビのできあがり!
チキンナゲットと名乗る以上、チキンの肉だけで作られているものと思いきや、さにあらず。
少量の鶏のクズ肉に、でんぷんや大豆タンパク、スケトウダラのすり身でかさを増やし、
大豆タンパクを加工して作った繊維を加えて固めると鶏肉モドキが完成。
植物性油脂(味のついていないマーガリンのようなもの)や添加物を加えたシロモノも多いのだとか。
用いられる。格安店で「エンガワ」とあったら、ヒラメではなくオヒョウという魚を使っていることが多いのだとか。
牛乳にバニラエッセンス、卵黄、砂糖、生クリームなどを加え、かき混ぜながら冷やす。
これが、一般的にイメージするアイスクリームの作り方。しかし、市販の多くのアイスクリームは、
卵黄の代わりにレシチンなどの大豆由来成分、牛乳の代わりに植物性油脂を使っているらしい。
塩、醤油、とんこつ、シーフード。各社さまざまな味が発売されているインスタントラーメン。
スープの味は、塩化ナトリウムや風味パウダーなど、数十種類の添加物の配合比だけで
作り分けられている。味の安定やコストを考慮し、これらの添加物を使って調味している
チェーン系ラーメン店もあるというから驚きだ。
今年に入ってPVの水増し問題が大人気!というわけで記憶に残っているうちに書いておくよ。
3年くらい前だったと思う。
もともとサイトは持っていたので、ドメインなどはそのまま流用。
いわゆるリニューアル扱いだ。
ここまではよくある話。
で、その担当が納品間際にSEO対策をして欲しいと言い出した。
今日頼まれて明日実現するようなものじゃないことを説明したが、他社ならYahoo!の検索で1番にしてくれるところもあると言ってきかない。
そもそもSEOをオーバーチュアと勘違いしているようだったが、聞く耳を持たない相手に説明するのもだんだんと面倒になってきた。
話は平行線を辿り、結局そのまま納品することになった。
そして数ヶ月たったある日、突然その会社のサイトがリニューアルされた。
そして翌週になり、当社へ連絡があった。
「1日数百件しかカウンターが回ってなかったけど、他社に依頼したら1日に50万人のアクセスが出るようになった。お前の会社は技術が足りない」と嫌味っぽく文句を言われた。
しばらく呆然と立ち尽くしてしまった。
お前は何を言っているんだ?
初めに設置していたカウンターはトップページのUUをカウントするものだ。
それに対して、まずその50万人という単位は何なのだ。
gif画像へのアクセスとかもカウントしているんじゃないのか?
それにしても多すぎる。F5アタックをしたとしても多すぎる。
ロリポの共用レンサバで1日50万人も来たら追い出されるぞ?
どんなレポートを見て電話してきたのか知りたい気持ちもあったが、まともなレポートじゃないのは間違いないので、「それはよかったですね」とさわやかに電話を切った。
ギークではないし、どちらかといえば下手なのですが。
http://anond.hatelabo.jp/20090324005857
例えば、サムネイルを作る makeThumbnails という関数なら、
result = array.new() while(src = gets()) result.add(Thumbnail.new(src)) end return result
かもしれないし、例えばサムネイルを一覧表示時のアイコンに使うなら、index_iconsとか、gif化してアニメーションするならframesとかつけるかも。
ちなみに、perlなら $frame = shift @frame だ。
(For Beginners)
(For Windows)
(For Mac)
(In case you are using shared computer)
id:f_iryo1です。
はてブのお気にいられアイコンを非表示にしてほしいで、自分のブックマークページに自分の意図しないアイコンが表示されるのは嫌だよ、と書きました。多くの反応をいただき、「やっぱりアイデアに書くより増田に書いたほうが。。。」などと思いました。(はてなアイデアの分かりにくさは本当に問題だと思うんですけど、その話はいまはいいです)
今回の件で一番残念だったのは、id:y_arimさんを怒らせてしまったことです。いろいろと反感を買いやすい人だとは思いますが、私はid:y_arimさんのファンですので、、、。
さて、おそらく昨夜のことだと思うのですが、立て続けに不思議なアイコンの方から「お気に入り」に追加されました。
http://b.hatena.ne.jp/taltal2/
http://b.hatena.ne.jp/kenkoukenkou/
http://b.hatena.ne.jp/rekurel/
おもしろいことに、みなさんアイコンが裸の女性の絵で、よく動きます。また、みなさんブックマーク件数がゼロか非常に少なく、「お気に入り」に追加しているのもid:f_iryo1のみとなっています。
これは明らかに私に対する嫌がらせでしょう。
私は、先日の記事で「萌え絵」を否定するつもりはないと明記したはずです(誤読・読み飛ばしをされた方も多かったのですが。。)。
おそらく、id:taltal2さん、id:kenkoukenkouさん、id:rakurelさんは同一人物だと思うのですが、このような誤読をし、短絡的に「お前が嫌がることをしてやるぜ!」とばかりエロアイコンで「お気に入り」に追加してくること、また記事が話題になって1週間たってからの反応というスピードの遅さなどから考えると、この人は中学生、せいぜい高校1年生くらいではないかと思われます。
id:rakurelさんが中学生であるとすると、これは大変な問題です。中学生がGIFアイコンを作れるのは不思議ではないでしょうが、中学生がこのアイコンのような、性行為をしている女性の絵を入手できることは非常に問題であると思われます。中学生のうちからそんな簡単にエロ画像を収集していたら、ろくな大人になりません。
インターネットの規制に関する法律についていろいろと議論されているようですが、諸々の問題はさておき、中学生が自分のアイコンにエロ画像を採用するような世界は、あるべきではないと思うのです。
id:f_iryo1です。
はてなアイデアに書いたところで誰の目にも留まらないだろうから、匿名ダイアリーに。
すでに要望としては上がっているようなんだけど、はてなブックマークのお気にいられアイコンは表示・非表示の切り替えはできないんだろうか。
これが私のブックマークページ。
http://b.hatena.ne.jp/f_iryo1/
左側に、id:f_iryo1を「お気に入り」に入れているアカウントのアイコンが表示されている。一番左には、いわゆる「萌え絵」が表示されている。これを非表示にしたい。
id:ashitano244さんに対して、特別な感情は一切ない。ashitano244さんがどういうタイプのマンガ・アニメが好きなのかは知らないし、自分が好きな絵をアイコンにすることはまったく問題ないことだと思う((著作権のことは知らない))。ashitano244さんに「私をお気に入りから外してください」というつもりも、「アイコンを変えてください」というつもりもない。
私は、「萌え絵」があまり好きではない。また、他人から「萌え」が好きであると誤解されたくない。
自分の はてなブックマークページは、自分のサイトのひとつだと思っている。もちろんダイアリーのほうがメインだが、ブックマークページやアンテナも同じアカウントを使っている以上、自分の庭のようなものだと思っている。
自分のサイトに、自分が好まないものが常時表示されていることのデメリットは2種類ある。ひとつは、自分自身がそれをみて不愉快になること。これについては、非表示にするGreasemonkeyでも書けばいいのだろう。もうひとつのデメリットは、他人から「この人はこういうのが好きなんだな」と誤解される恐れがあること。この問題は、現時点では解決できない。
「f_iryo1」でGoogle検索すると、4番目に http://b.hatena.ne.jp/f_iryo1/ がでてくる。私に興味を持った人がこのブックマークページを見たとき、「萌え絵」アイコンが表示されているのを見て、「f_iryo1という人はこういう絵が好きなのか」と誤解する可能性は十分にある。
重ねて書くが、id:ashitano244さんにアイコンを変えてほしいとかお気に入りから外してほしいとか言いたいわけではない。
私の場合は現時点ではashitano244さんの「萌え絵」アイコンだけだから、まだ全然ましだ。これが、id:anigokaさんの乳揺れGIFアイコンだったり ( http://b.hatena.ne.jp/anigoka/ )、id:akoginaさんの蝿がたかるウンコGIFアイコン( http://b.hatena.ne.jp/akogina/ )だったりしたら、なんだかもうものすごくがっかりである。こういうことを書くと捕捉されて「お気に入り」されそうな気がするけどまあ仕方ない。
自分が選んだ人(お気に入り)を表に出すのは理解できるけれど、(頼んでもいないのに)(勝手に)自分を選んだ人(お気にいられ)が前に出てくるのは、あまり普通じゃないんじゃないかなあと思う。Twitterの個人ページに表示されるのは自分のFollowingだし。
だったらプライベートモードにしろよって言うかもしれないけど、それはしたくないんだよなあ。
というわけで、よろしくお願いしたいところです。
YourFileHostのCAPTCHA画像をなんとかするの続きの続き。
まぁ、なんというか、一応できたので張ってみる。微妙な出来栄えだけど。
decaptcha.rbと同じディレクトリに置いて適当に動かしてみてください。
どっかにいいRSSがないかなぁ。。。
しかし、CAPTCHA画像を相手にしてた時の方が楽しかったなぁ。。。
あと、添削とかいろいろ歓迎です。
なぜか&が&amp;に置き換えられてるみたいなので、適当に&に読み替えてください。
#!/usr/local/bin/ruby $LOAD_PATH << File::dirname(File::expand_path($0)) require 'rubygems' require 'rss' require 'mechanize' require 'decaptcha' # require 'ruby-debug' # require 'pp' DESTDIR = 'files' TMPDIR = '/tmp' class Downloader COOKIE_URI = 'http://www.yourfilehost.com/media.php?cat=video&file=%s' DOWNLOAD_URI = 'http://www.yourfilehost.com/downloadlink.php?cat=video&file=%s&adult=1' VERBOSE = false DEBUG = false def self.fetch(file, destdir) puts "Fetching file: #{file}" destfile = destdir + '/' + file if test(?e, destfile) then puts ' - Already exists. skip' puts return nil end # # Initialize Mech # mech = WWW::Mechanize.new mech.user_agent_alias = 'Windows IE 6' mech.max_history = 3 mech.open_timeout = 15 mech.read_timeout = 3 # # get cookie # uri = COOKIE_URI % file page = mech.get(uri) # # Challenge against CAPTCHA # uri = DOWNLOAD_URI % file page = mech.get(uri) for i in 0...3 captcha_path = (page/'img[@height="38"]').attr(:src) captcha_uri = 'http://www.yourfilehost.com/%s' % captcha_path gif = mech.get_file(captcha_uri) open("#{TMPDIR}/captcha.gif", 'w') {|fd| fd.write(gif) } mech.back code = DeCAPTCHA.decode("#{TMPDIR}/captcha.gif") File.unlink("#{TMPDIR}/captcha.gif") if code.nil? then puts ' - CAPTCHA decode failed. retry' if VERBOSE next end form = mech.page.forms.first form.verify = code page = mech.submit(form) break unless page.links.empty? end if page.links.empty? then puts ' - Failed 3 times. Try another one.' puts return nil end # # download # puts " - Downloading: #{page.links.first.href}" if DEBUG retry_count = 0 video = nil begin video = page.links.first.click rescue Timeout::Error => evar retry_count += 1 if retry_count < 5 then puts " * Timedout, retry" if VERBOSE retry end raise evar end unless video.instance_of?(WWW::Mechanize::File) then if DEBUG then puts " - Something wrong while downloading. skip." puts end return nil end video.save(destfile) return destfile end end # # main # [DESTDIR, TMPDIR].each do |dir| if !test(?d, dir) or !test(?w, dir) then puts "#{dir}: Directory not exists or cannot write." exit end end files = [] # collect URIs from RSS RSS_URI = [ ['http://www.yourfilehost.com/make-rss.php?range=day&af=off', lambda {|rss| rss.items.map {|x| x.link }}, ], ] RSS_URI.each do |uri, preprocessor| rss = RSS::Parser.parse(uri) uris = preprocessor.call(rss) #=> Array of URI of YourFileHost uris.map {|x| /file=([^&]*)/.match(x).to_a[1] }.each do |file| # next if file !~ /\.wmv/ # uncomment it if you need only wmv files << file end end files.uniq! # download files.each do |file| begin Downloader.fetch(file, DESTDIR) rescue SystemCallError, Timeout::Error => evar puts " - error (#{evar.to_s}). skip." puts end end __END__
YourFileHostのCAPTCHA画像をなんとかするの続き。
その後、適当にいじったら、手元環境で1枚あたり25秒くらい→だいたい2.5秒くらいで判別できるようになった。このくらいなら使えるかな。
速度向上に一番効いたのは、Token#importで画像を比較しているところの修正。他は細かい手直し。
使い方は前のやつと変わってません。
あと、テストに100枚くらいCAPTCHA画像食わせてみたけど、とりあえず全部正しく判定できた。
カレントディレクトリ以下にある*.gifなCAPTCHA画像ファイルを適当に判別するスクリプト。動作確認用にどうぞ。
後述のdecaptcha.rbと同じディレクトリに適当に置いてchmod +xしてね。
#!/usr/local/bin/ruby $LOAD_PATH << File::dirname(File::expand_path($0)) require 'decaptcha' STDOUT.sync = true Dir.glob('*.gif').sort.each do |file| correct = File::basename(file, '.*') puts "Processing file: #{file}" start_time = Time.now ret = DeCAPTCHA.decode(file) elapsed = Time.now - start_time puts " Result: #{ret} (=> #{(correct == ret) ? "Ok" : "Fail"})" puts " Elapsed time: #{elapsed}" puts end
#!/usr/local/bin/ruby require 'rubygems' require 'gd2' require 'pp' # #= CAPTCHA画像解析モジュール # CAPTCHA画像ファイルを食わすとあら不思議、Stringが出てくるよ。 # YourFileHostのやつに対応。 # #== Usage # decoded_str = DeCAPTCHA.decode("some_captcha_image.gif") #=> String # 失敗したらnilが返る。 # module DeCAPTCHA DEBUG = false #=== CAPTCHA画像デコード # file:: 画像ファイル名のパス # method:: 未指定でよい。男は細かい事を気にするな。 # returns:: CAPTCHA画像解析結果(String) or nil (デコード失敗時) def self.decode(file, method = DeCAPTCHA::Site::YourFileHost) return method.new(file).decode end #= CAPTCHA画像デコード用クラス # このクラスのサブクラスはimport, tokenize, stream_parseメソッドの # 実装を含む必要がある。 class Site def initialize(file = nil) @pix = nil self.import(file) unless file.nil? end def decode return stream_parse(tokenize()) end end #= YourFileHostのCAPTCHA画像を解析するクラス class Site::YourFileHost < Site def import(file) @pix = PixelMatrix.new.import(file) return self end # importしたイメージ(PixelMatrix)から、文字と思わしきパターンを # 抽出して上下マージンを切り取ってArrayにして返す。 # returns:: Array of PixelMatrix def tokenize ret = [] state = :initial for x in 0...@pix.width case state when :initial if !@pix.vline_blank?(x) then state = :tokenize pixel = PixelMatrix.new(0, 0, true) ret << pixel redo end when :tokenize if @pix.vline_blank?(x) then state = :initial next end x0 = pixel.width for y in 0...@pix.height pixel[x0, y] = @pix[x, y] end else raise 'NOTREACHED' end end ret.map! {|token| Token.new.import(token.cutoff_vmargin!) } end # PixelMatrixのArrayを受け取り、数字を判別。 # tokens:: Array of PixelMatrix # returns:: String (判別結果) def stream_parse(tokens) rs = tokens.map {|x| x.guess.to_s }.join('') if rs.length != 4 then rs = nil if DEBUG then puts '- guess failed. dumping guess result of each token:' tokens.each_index do |i| print "##{i}:#{tokens[i].guess} " pp tokens[i].candidate end puts end end return rs end class Token @@digits = nil attr_accessor :candidate def initialize if @@digits.nil? then # 文字画像サンプルを作っておく @@digits = DIGITS_ASSOC.map {|digit| PixelMatrix.new(0, 0, true).import_array(digit) } end @candidate = Hash.new end # PixelMatrixを受け取り、文字画像サンプルと比較して # 一致率を計算しておく。 # pixel:: PixelMatrix # returns:: self def import(pixel) @@digits.each_index do |i| digit = @@digits[i] if (digit.width - pixel.width).abs > 4 or (digit.height - pixel.height).abs > 4 then @candidate[i] = -1 # サイズが違いすぎな場合、一致させない next end correct_bits = 0 enlarged_width = [digit.width, pixel.width ].max enlarged_height = [digit.height, pixel.height].max for y in 0...enlarged_height dy = (y.to_f / digit.height * enlarged_height).to_i py = (y.to_f / pixel.height * enlarged_height).to_i for x in 0...enlarged_width dx = (x.to_f / digit.width * enlarged_width).to_i px = (x.to_f / pixel.width * enlarged_width).to_i correct_bits += 1 if digit[dx, dy] == pixel[px, py] end end @candidate[i] = correct_bits * 100 / (enlarged_width * enlarged_height) end return self end # importのときの比較結果をもとに文字を推測 # returns:: Fixnum or nil(失敗時) def guess digit, ratio = @candidate.sort {|a, b| a.last <=> b.last}.last digit = nil if ratio < 0 or ratio < 65 return digit end end end #= 画素マトリックスクラス # 画像ファイルを食わせると、各ピクセル(画素)を2値(black(1) or white(0))に # 変換して、内部で保持する。 # 以後、Matrixクラスのような感じで個々の画素にアクセスできる。 class PixelMatrix BLACK = 1 WHITE = 0 attr_accessor :width attr_accessor :height # width:: 幅 # height:: 高さ # is_flexible:: 自動的に伸張するか def initialize(width = 0, height = 0, is_flexible = false) @matrix = Hash.new {|hash, key| hash[key] = Hash.new(WHITE)} @width, @height, @flexible = width, height, is_flexible end # file:: 画像ファイル名のパス # brightness_threshold:: 画素を黒とみなす閾値 (0 - 255, default: 0x40) # returns:: self (DeCAPTCHA::PixelMatrix) def import(file, brightness_threshold = 0x40) gd = GD2::Image.import(file) @width, @height = gd.width, gd.height self.each_with_axis do |x, y| color = gd[x, y] greyscale = (color.red + color.green + color.blue) / 3 self[x, y] = (greyscale > brightness_threshold) ? WHITE : BLACK end return self end def import_array(array) array.each_with_index do |str, y| str.split('').each_with_index do |c, x| self[x, y] = c.to_i end end return self end # PixelMatrixを画像ファイルとしてexport # file:: 新たに作る画像ファイル名のパス def export(file) gd = GD2::Image::IndexedColor.new(@width, @height) gd.palette << GD2::Color::WHITE gd.palette << GD2::Color::BLACK self.each_with_axis do |x, y| gd[x, y] = { WHITE => GD2::Color::WHITE, BLACK => GD2::Color::BLACK, }[self[x, y]] end gd.export(file) return self end # 指定された位置の画素を返す。 # returns:: PixelMatrix::BLACK(1) or WHITE(0) def [](x, y) if !@flexible and !in_range?(x, y) then raise RangeError end return WHITE if !@matrix.has_key?(y) # XXX: for optimize return @matrix[y][x] end # 画素に値を設定。 # returns:: PixelMatrix::BLACK(1) or WHITE(0) def []=(x, y, val) unless in_range?(x, y) then raise RangeError unless @flexible @width = (x >= @width) ? x + 1 : @width @height = (y >= @height) ? y + 1 : @height end @matrix[y][x] = val end def in_range?(x, y) ((0...@width) === x and (0...@height) === y) end # 指定された軸をもとに画素を走査し、Arrayに変換。 # 例えば、to_a(:vertical, 10) とすると、x == 10 な列を取り出して # Arrayにして返す。 # # axis:: 軸を指定 (:vertical または :horizontal) # pos:: 位置を指定。_axis_で指定した軸と直交する軸における位置を指定。 def to_a(axis, pos) {:vertical => lambda { (0...@height).map {|y| self[pos, y]} }, :horizontal => lambda { (0...@width).map {|x| self[x, pos]} }, }[axis].call end # returns:: Array def hline(y) self.to_a(:horizontal, y) end # returns:: Array def vline(x) self.to_a(:vertical, x) end # X軸方向に画素を走査。 # y:: どの位置で走査するか # returns:: 指定された軸の上にドットが存在: false, 無い: true def hline_blank?(y) return true if @matrix.has_key?(y) == false # XXX: for optimize for x in 0...@width return false if self[x, y] == BLACK end return true end # Y軸方向に画素を走査。 # x:: どの位置で走査するか # returns:: 指定された軸の上にドットが存在: false, 無い: true def vline_blank?(x) for y in 0...@height return false if self[x, y] == BLACK end return true end # 上下のマージンを削除した新しいPixelMatrixを返す。 # returns:: PixelMatrix def cutoff_vmargin pixel = PixelMatrix.new(0, 0, true) head = 0 tail = self.height - 1 head.upto(tail) do |y| if !self.hline_blank?(y) then head = y break end end tail.downto(head) do |y| if !self.hline_blank?(y) then tail = y break end end head.upto(tail) do |y| 0.upto(self.width - 1) do |x| pixel[x, y - head] = self[x, y] end end return pixel end # 自身の上下のマージンを削除する。cutoff_vmarginの破壊版。 # 速度稼ぎのために直接@matrixを触ったり、すこしずるをしている。 # 効率は、ほんの少しだけ速くなったような誤差の範囲のような感じ。 # returns:: self (PixelMatrix) def cutoff_vmargin! head = 0 tail = self.height - 1 head.upto(tail) do |y| if !self.hline_blank?(y) then head = y break end end tail.downto(head) do |y| if !self.hline_blank?(y) then tail = y break end @matrix.delete(y) if @matrix.has_key?(y) # XXX end if head > 0 then head.upto(tail) do |y| next if !@matrix.has_key?(y) # XXX @matrix[y - head] = @matrix.delete(y) # XXX end end self.height = tail - head + 1 return self end def each_with_axis for x in 0...@width for y in 0...@height yield(x, y) end end end end end class DeCAPTCHA::Site::YourFileHost::Token DIGITS_ASSOC = [ # 0 ["00000000011111110000000000", "00000001111111111110000000", "00000011111000001111000000", "00001111111100010011110000", "00011111100000110000111000", "00111111000000100001111000", "00111111110001000001111100", "01111111000010000011111110", "01111100000110000111111110", "01111111000100000111111110", "11111100001000001111111111", "11100000001000011111111111", "11111000010000011111111111", "11111000110000111111111111", "10000000100001111111111111", "01100001000001111111111110", "01100010000011111111111110", "01100010000111111111111110", "00111100000111111111111100", "00011100001111111111111000", "00001100011111111111111000", "00001111111111111111100000", "00000011111111111111000000", "00000000111111111100000000"], # 1 ["00001", "00111", "11111", "11111", "10001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001"], # 2 ["0000011111111110000000", "0001111111111111000000", "0011110000000010000000", "0110000000000100000000", "1100000000001100011110", "1000000000001000001111", "1000000000010000000111", "1000000000110001111111", "1000000000100001111111", "1000000001000000011111", "0100000011000001111111", "0011000010000111111110", "0011000110000001111110", "0000001100000111111100", "0000001000011111110000", "0000011000000111100000", "0000110000000000000000", "0000111111111111111111", "0001111111111111111110", "0011111111111111111100", "0011111111111111111100", "0111111111111111111000", "0111111111111111110000"], # 3 ["000000011111111110000000", "000001111111111111100000", "000011100000011111111000", "000111000000111111111000", "000110000001111111111100", "000100000001111111111100", "000100000011111111111100", "000110000111111111111000", "000010000111111111111000", "000000001111111111100000", "000000011111111111000000", "000000011111111110000000", "000000000000001100000000", "000000000000011100011100", "000000000000111000111110", "000000000000110000001110", "000000000001110001111111", "110000000011100011111111", "111000000111000000111110", "011100000110001111111100", "001111001110000111111000", "000011111100000011100000", "000000011000111000000000"], # 4 ["0000000000011", "0000000000011", "0000000000111", "0000000001111", "0000000001111", "0000000011111", "0000000111111", "0000000110111", "0000001100111", "0000011100111", "0000011000111", "0000110000111", "0001110000111", "0001100000111", "0011000000111", "0111000000111", "0111111111111", "1111111111111", "0000000000111", "0000000000111", "0000000000111", "0000000000111", "0000000000111"], # 5 ["000000001111111111111110", "000000011111111111111100", "000000111111111111111100", "000000111111111111111000", "000001111111111111110000", "000011100000000000000000", "000011011111111110000000", "000111111111111111000000", "001111100000000111000000", "001110000000000110001100", "000000000000000100011110", "000000000000001100000110", "000000000000011000011111", "000000000000011001111111", "000000000000110000011111", "000000000001100000111111", "110000000001100111111110", "011000000011000001111110", "011100000110000011111100", "001111000110011111111000", "000111111100001111110000", "000001111100000011000000", "000000001000011000000000"], # 6 ["000000000000000110000000", "000000010001111111111000", "000001110000011100111100", "000011100000011000001000", "000111000011111000000000", "001111000001110000000000", "001110000000111100000000", "011110001111111111100000", "011100000111000011110000", "011000000010000001111000", "011000011110000011111100", "010000111100000111111110", "100000001000000111111110", "100001111000001111111111", "000011110000011111111111", "000000100000011111111111", "000011100000111111111111", "001111000001111111111110", "000010000001111111111110", "001110000011111111111100", "000111000111111111111000", "000011111111111111110000", "000000111111111111000000", "000000000111111000000000"], # 7 ["0011111111111110001111", "0011111111111100000011", "0111111111111000000110", "1111111111111000111100", "1111111111110000001100", "0000000000000000011000", "0000000000000011111000", "0000000011000000110000", "0000001110000011100000", "0000011110001111100000", "0000111100000011000000", "0001111000000110000000", "0001111000111110000000", "0011110000001100000000", "0011110000001000000000", "0011100011111000000000", "0011000001110000000000", "0001000000110000000000", "0000000111100000000000", "0000000111000000000000", "0000000011000000000000", "0000001110000000000000", "0000001100000000000000"], # 8 ["0000000111111111110000000", "0000011111111111111100000", "0000001111100000011110000", "0000000001110000000111000", "0011000011111000000011100", "0011100001111100000011100", "0011110000001110000011100", "0001111000011111000111000", "0000111100000111101110000", "0000011110000001111100000", "0000001111000011111110000", "0000111111110000011111000", "0011110011111000001111100", "0111100001111100011111100", "0111000000111110000111110", "1111000000011111000000111", "1111000000001111100011111", "1111000000000011111000010", "0111100000000001111100000", "0011110000000000111110000", "0001111110000001111110000", "0000011111111111111000000", "0000000011111110000000000"], # 9 ["000000111111111110000000", "000001111111111111100000", "000111111111111001111000", "001111111111110000010000", "011111111111110000010000", "011111111111100000100000", "011111111111000001100000", "111111111110000001000111", "111111111110000010000001", "111111111100000110000111", "011111111000000100011111", "011111111000001000001111", "001111110000011000011111", "001111100000010001111110", "000111110000100000011110", "000001111111100000111110", "000000011111000111111100", "000000000010000001111100", "000000000110000001111000", "000100001100011111110000", "000111001100001111100000", "000011111000001111000000", "000000010000110000000000"], ] end __END__
そんなわけで、みんな大好きなYourFileHostだけども、最近みてみたら、なんかCAPTCHA認証がついているわけじゃないですか。
でもこれってさーCAPTCHAといっても見るからに危ういというか、見れば見るほど簡単に破れてしまいそうな気がして、どうにもむずがゆいアンニュイな気分になってしまうわけです。
そんで、このたび適当にいじってみたところ、それなりに推測できるコードが書けたので、ここに張ってみますね。
やってることは単純で、こんな感じ
使い方は、こんな感じで
require 'decaptcha.rb' captcha_string = DeCAPTCHA.decode(filename) if !captcha_string.nil? then # 判別成功時の処理 else # 判別失敗時の処理。失敗することもあるのでよしなに。 end
あ、Ruby/GD2入れといてね。sudo gem install gd2とかで入ります。多分。
判別率はそこそこ良い感じになったんだけども、富豪プログラミングがたたってか、いかんせん遅いです。
手元だと1枚判別するのに20秒くらいかかることもある。
そんなわけで誰かチューニングしてくれるとうれしい。
実行速度を上げた改良版はこっちにうpしました。以下のコードは参考程度に。
#!/usr/local/bin/ruby require 'rubygems' require 'gd2' require 'pp' # #= CAPTCHA画像解析モジュール # CAPTCHA画像ファイルを食わすとあら不思議、Stringが出てくるよ。 # YourFileHostのやつに対応。 # #== Usage # decoded_str = DeCAPTCHA.decode("some_captcha_image.gif") #=> String # 失敗したらnilが返る。 # module DeCAPTCHA DEBUG = false #=== CAPTCHA画像デコード # file:: 画像ファイル名のパス # method:: 未指定でよい。男は細かい事を気にするな。 # returns:: CAPTCHA画像解析結果(String) or nil (デコード失敗時) def self.decode(file, method = DeCAPTCHA::Site::YourFileHost) return method.new(file).decode end #= CAPTCHA画像デコード用クラス # このクラスのサブクラスはimport, tokenize, stream_parseメソッドの # 実装を含む必要がある。 class Site def initialize(file = nil) @pix = nil self.import(file) unless file.nil? end def decode return stream_parse(tokenize()) end end #= YourFileHostのCAPTCHA画像を解析するクラス class Site::YourFileHost < Site def import(file) @pix = PixelMatrix.new.import(file) return self end # importしたイメージ(PixelMatrix)から、文字と思わしきパターンを # 抽出して上下マージンを切り取ってArrayにして返す。 # returns:: Array of PixelMatrix def tokenize getter, tokenizer = lambda {|queue| [ lambda { return queue }, lambda {|x, pixel| if pixel.nil? then x, pixel = tokenizer.call(x, PixelMatrix.new(0, 0, true)) queue << pixel return x end if !@pix.in_range?(x, 0) or @pix.vline_blank?(x) then return [x, pixel] end x0 = pixel.width @pix.vline(x).inject(0) do |y, color| pixel[x0, y] = color y + 1 end return tokenizer.call(x + 1, pixel) } ] }.call([]) x = 0 while (x < @pix.width) x = @pix.vline_blank?(x) ? x + 1 : tokenizer.call(x, nil) end getter.call.map do |token| # Token.new.import(token.cutoff_vmargin.shrink) Token.new.import(token.cutoff_vmargin) end end # PixelMatrixのArrayを受け取り、数字を判別。 # tokens:: Array of PixelMatrix # returns:: String (判別結果) def stream_parse(tokens) r = [] tokens.inject(nil) do |prev, cur| r << cur.guess end rs = r.map {|x| x.to_s}.join('') if rs.length != 4 then if DEBUG then puts '- guess failed. dumping guess result of each token:' tokens.each_index do |i| print "##{i}: " pp tokens[i].candidate end puts end return nil end return rs end class Token @@digits = nil attr_accessor :candidate def initialize if @@digits.nil? then # 文字画像サンプルを作っておく @@digits = DIGITS_ASSOC.map {|assoc| PixelMatrix.new(0, 0, true).import_assoc(assoc) } end @candidate = Hash.new end # PixelMatrixを受け取り、文字画像サンプルと比較して # 一致率を計算しておく。 # pixel:: PixelMatrix # returns:: self def import(pixel) gcd = lambda {|a, b| a, b = [b, a] if a < b return a if b == 0 r = a % b return gcd.call(b, r) } lcm = lambda {|a, b| a * b / gcd.call(a, b) } mul_to_lcm = lambda {|a, b| g = gcd.call(a, b) [b / g, a / g] } 0.upto(@@digits.size - 1) do |i| if (@@digits[i].width - pixel.width).abs > 4 or (@@digits[i].height - pixel.height).abs > 4 then @candidate[i] = -1 # 比較対象とサイズが違いすぎ next end mul_ax, mul_bx = mul_to_lcm.call(@@digits[i].width, pixel.width) mul_ay, mul_by = mul_to_lcm.call(@@digits[i].height, pixel.height) enlarged_width = @@digits[i].width * mul_ax enlarged_height = @@digits[i].height * mul_ay # 文字画像サンプルと比較対象画像のサイズをあわせる # 幅・高さをそれぞれ適当に整数倍して、最小公倍数に合わせて比較 # (めんどうだから) correct_bits = 0 (0...enlarged_width).each do |x| (0...enlarged_height).each do |y| if @@digits[i][x/mul_ax, y/mul_ay] == pixel[x/mul_bx, y/mul_by] then correct_bits += 1 end end end @candidate[i] = correct_bits * 100 / (enlarged_width * enlarged_height) end return self end # importのときの比較結果をもとに文字を推測 # returns:: Fixnum or nil(失敗時) def guess digit, ratio = @candidate.sort {|a, b| a.last <=> b.last}.last digit = nil if ratio < 0 or ratio < 80 return digit end end end #= 画素マトリックスクラス # 画像ファイルを食わせると、各ピクセル(画素)を2値(black(1) or white(0))に # 変換して、内部で保持する。 # 以後、Matrixクラスのような感じで個々の画素にアクセスできる。 class PixelMatrix BLACK = 1 WHITE = 0 attr_accessor :width attr_accessor :height # width:: 幅 # height:: 高さ # is_flexible:: 自動的に伸張するか def initialize(width = 0, height = 0, is_flexible = false) @matrix = Hash.new {|hash, key| hash[key] = Hash.new(WHITE)} @width, @height, @flexible = width, height, is_flexible end # file:: 画像ファイル名のパス # brightness_threshold:: 画素を黒とみなす閾値 (0 - 255, default: 0x40) # returns:: self (DeCAPTCHA::PixelMatrix) def import(file, brightness_threshold = 0x40) gd = GD2::Image.import(file) @width, @height = gd.width, gd.height self.each_with_axis do |x, y| color = gd[x, y] greyscale = (color.red + color.green + color.blue) / 3 self[x, y] = (greyscale > brightness_threshold) ? WHITE : BLACK end return self end # reverse function of to_assoc def import_assoc(assoc) assoc.inject(0) do |y, columns| columns.inject(0) do |x, color| self[x, y] = color x + 1 end y + 1 end return self end # PixelMatrixを画像ファイルとしてexport # file:: 新たに作る画像ファイル名のパス def export(file) gd = GD2::Image::IndexedColor.new(@width, @height) gd.palette << GD2::Color::WHITE gd.palette << GD2::Color::BLACK self.each_with_axis do |x, y| gd[x, y] = { WHITE => GD2::Color::WHITE, BLACK => GD2::Color::BLACK, }[self[x, y]] end gd.export(file) return self end def to_assoc (0...@height).map do |y| (0...@width).map do |x| self[x, y] end end end # 指定された位置の画素を返す。 # returns:: PixelMatrix::BLACK(1) or WHITE(0) def [](x, y) if !@flexible and !in_range?(x, y) then raise RangeError end return @matrix[y][x] end # 画素に値を設定。 # returns:: PixelMatrix::BLACK(1) or WHITE(0) def []=(x, y, val) unless in_range?(x, y) then raise RangeError unless @flexible @width = (x >= @width) ? x + 1 : @width @height = (y >= @height) ? y + 1 : @height end @matrix[y][x] = val end def in_range?(x, y) ((0...@width) === x and (0...@height) === y) end # 指定された軸をもとに画素を走査し、Arrayに変換。 # 例えば、to_a(:vertical, 10) とすると、x == 10 な列を取り出して # Arrayにして返す。 # # axis:: 軸を指定 (:vertical または :horizontal) # pos:: 位置を指定。_axis_で指定した軸と直交する軸における位置を指定。 def to_a(axis, pos) {:vertical => lambda { (0...@height).map {|y| self[pos, y]} }, :horizontal => lambda { (0...@width).map {|x| self[x, pos]} }, }[axis].call end # returns:: Array def hline(y) self.to_a(:horizontal, y) end # returns:: Array def vline(x) self.to_a(:vertical, x) end # X軸方向に画素を走査。 # y:: どの位置で走査するか # returns:: 指定された軸の上にドットが存在: false, 無い: true def hline_blank?(y) hline(y).find {|color| color == BLACK }.nil? ? true : false end # Y軸方向に画素を走査。 # x:: どの位置で走査するか # returns:: 指定された軸の上にドットが存在: false, 無い: true def vline_blank?(x) vline(x).find {|color| color == BLACK }.nil? ? true : false end # 上下のマージンを削除した新しいPixelMatrixを返す。 # returns:: PixelMatrix def cutoff_vmargin pixel = PixelMatrix.new(0, 0, true) head = 0.upto(self.height - 1) do |y| break(y) if !self.hline_blank?(y) end tail = (self.height - 1).downto(0) do |y| break(y) if !self.hline_blank?(y) end head.upto(tail) do |y| y0 = pixel.height self.hline(y).inject(0) do |x, color| pixel[x, y0] = color x + 1 end end return pixel end def each_with_axis (0...@width).each {|x| (0...@height).each {|y| yield(x, y)}} end end end class DeCAPTCHA::Site::YourFileHost::Token DIGITS_ASSOC = [ # 0 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0] ], # 1 [[0, 0, 0, 0, 1], [0, 0, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1]], # 2 [[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]], # 3 [[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]], # 4 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1]], # 5 [[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]], # 6 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0], [0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]], # 7 [[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], # 8 [[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1], [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0], [0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], # 9 [[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], ] end __END__ Dir.glob('*.gif').each do |file| puts "Processing file: #{file}" p DeCAPTCHA.decode(file) end __END__