みしょのねこごや

Diary - 2009年3月

RE: RE: 美人時計の画像filesが欲しい

http://d.hatena.ne.jp/Yamashiro0217/20090310/1236674979

のはてぶのタグに何故か Python タグがあったので,

http://d.hatena.ne.jp/jYoshiori/20090311/1236768388yoshioriさんがpythonで書いてらっしゃったので

みしょはperlで書いてみることにしm……な ぜ 画 像 だ け で 満 足 す る の か !!!!!

男なら画像に加えてprofile情報も欲しいだろjk……。。。。


美人時計という素晴らしいserviceがあります。

1分ごとに美人が表示される素晴らしいweb siteですが,悲しい技術者の性。Url 分かるんだったら画像取得できるし,ちょっとAjaxの中身見ればprofileも取得できちゃうじゃん!とか思っちゃうわけです。

というわけで,美人時計の画像を根こそぎGETしちゃって,その上なおかつ美人なみなさまのprofileまでGETしちゃうcodeを書きました。

3月16日追記:なんか使えなくなってたので修正しました!なんか英語になっちゃったけど,これで大丈夫☆ もうすぐ使えなくなるのでお早めに!! 旧版は倉庫に置いておきます。

#!/usr/bin/perl

$OUTPUT  = 'bijin.html';
$TMPFILE = 'tmp';
$MAX_RETRY = 10;
  
open(OUT, ">$OUTPUT");
print OUT <<_EOF_;
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"> 
<title>美人時計</title>
</head>
<body>
<h1>美人時計</h1>
<table border="1">
<tr>
  <th>TIME</th><th>NAME</th><th>BIRTHDAY</th><th>HOME</th>
  <th>BLD</th><th>HEIGHT</th><th>3-SIZE</th><th>OCC.</th><th>FAVORITE WEBSITE</th>
</tr>
_EOF_
  
$retry = 0;
  
for $h(0..23){
  $h="0$h" if $h<10;
  for $m(0..59){
    $m = '0'.($m+0) if $m<10;
    my $file = "";
    if($retry++>$MAX_RETRY){exit 1;}
    sleep(5);
    my @prof = ();
    print `wget http://www.bijint.com/en/clocks/view/$h$m -O $TMPFILE`;
    open(IN,$TMPFILE) or redo;
    foreach (<IN>){
      chomp;
      if($_ =~ /(\/jp\/img\/clk\/.*?\.jpg)/){
        $file = $1;
      }
      $_ =~ s/<[^a].*?>//g;
      push(@prof,$_) if $_;
      last if $_ =~ /</;
    }
    close(IN);
    unlink($TMPFILE);
    redo if @prof < 5;
    $elem = join("</td><td>",@prof);
    print OUT "<tr><th>$h$m</th><td>$elem</a></td></tr>";
    exit 1 if $file eq '';
    while(not(-f "$h$m.jpg")){
      if($retry++>$MAX_RETRY){exit 1;}
      sleep(5);
      print `wget http://www.bijint.com$file -O $h$m.jpg`;
    }
    $retry = 0;
  }
}
print OUT "</table></body></html>";
close(OUT);
exit 0;

ひたすらshellでwgetを叩きまくるだけのprogramなので,wgetを使える環境で実行してください!!

あと,自分用に作ったので大してdebugとかしてないので動作は保証しません!!動かなかったらあの有名なweb siteで質問してみてください!!「use strictしろよー」とか「DOCTYPE宣言は?」とかゆうひとは使うな!!!!

もちろんみしょは環境にやさしい人なので,Yamashiro0217さんとは違ってちゃんとsleepを入れています!!!

あと,みしょはこの情報の入手に全身全霊をつぎ込んだので,きちんとERROR処理もしています!!!!

みなさまもこれで快適美人時計らいふをお送り下さい!!!

観光する価値のある都道府県

アルファルファモザイクに挙がっていた,2ちゃんねるのthread『観光する価値のある都道府県ランキング』に触発されて。

S: must stay
北海道,沖縄,京都
A: should stay
東京,島根,奈良,三重
B: must visit
青森,大分,三重,愛媛,和歌山,長崎,宮城,兵庫,大阪,福岡,長野,鹿児島
C: should visit
長野,鹿児島,栃木,茨城,千葉,神奈川,鳥取,熊本,広島,新潟,岐阜
D: good
静岡,愛知,石川,高知,和歌山,山口,香川,山梨,秋田,福島
E: usual
山形,福岡,福井,富山,岩手,栃木,静岡,滋賀
F: worthless
群馬,岡山,宮崎,徳島,埼玉,佐賀

独断と偏見に基づいているが,異論は認めない。

ちなみにそれぞれの区分内でも,前から順におすすめ度が高い。


3月20日追記:太宰府天満宮と日光と熱海のことをすっかり忘れていたので福岡と栃木と静岡がだいぶ上に上がりました。 4月2日追記:熊野本宮と新宮が三重県ではなく和歌山県だということに気づいたのでだいぶ色々変わりましたww。

Unix Shellでの出力(色およびencode)を,DOS Shell用に変換するwrapperを作った。

よく知られているように,Unix系のshell consoleと,WindowsのDOS shell consoleは全然違う。特にUnix shell系向けに作られたprogramをWindowsで実行すると,

  • 文字code
  • 制御文字による色の変更

の2点で問題が現れる。

僕は仕事で Ruby / RSpec を使って開発しているのだけれど,RSpecの鮮やかな出力がWindowsだとなんか文字化けしたような感じに見えてしまう。もちろん色については先駆者が居て,確かにこのようにすればDOSでもちゃんと色付きで表示される

しかし,これでもやはり問題がある。僕の環境では,RSpecの出力がUTF-8なのに対して,DOS console はShift_Jisしか認識してくれない。これではあの有名なfaultierさんを見習って頑張って日本語で書いたRSpecの意味が全然分からないことになる!!

もちろんこれについても色々な解決案があるようなのだけれど,でも色を付けた上で文字化けを解決する手段が見つからなかったのだ。

なんかもう色々めんどくさかったのでしばらくは文字化けしたままで使っていたが,いい加減なんとかしようという気になったので,ちょっとWrapperを書いてみた。

package ShellToDos;

use Win32::Console;	
use Encode;

            # black, red, green, yellow,
            # blue, magenda, cyan, white
my $HASH  = { 30=>0, 31=> 4, 32=> 2, 33=> 6,
              34=>1, 35=> 5, 36=> 3, 37=> 7, };
my $VIVID = { 30=>0, 31=>12, 32=>10, 33=>14,
              34=>9, 35=>13, 36=>11, 37=>15, };

sub new{
  my $class   = shift;
  my $vivid   = shift;
  my $in      = shift || 'utf-8';
  my $out     = shift || 'shiftjis';

  my $c = new Win32::Console(STD_OUTPUT_HANDLE);

  my $h = $vivid ? $VIVID : $HASH; # Color Hash
  $h->{0} = ($c -> Attr);          # Default Value

  $| = 1;
  bless { console => $c, hash => $h,
          in => $in, out => $out }, $class;
}

sub output{
  my($self, $str) = @_;
  Encode::from_to($str, $self->{in}, $self->{out});
  my @output = split(//, $str);
  print shift(@output);
  foreach(@output){
    $_ =~ s/\[(\d+)m//;
    ($self->{console}) -> Attr($self->{hash}->{$1});
    print $_;
  }
}

sub DESTROY{
  my $self = shift;
  ($self -> {console}) -> Attr($self->{hash}->{0});
  $| = 0;
}

1;

Constructorの引数は,

  • $vivid : 表示を鮮やかにするかどうか。DEFAULT : 0 (false)
  • $in : 入力時のencoding。DEFAULT : utf-8
  • $out : 出力時のencoding。通常は指定しなくて良い。DEFAULT : shiftjis

の3つ。まぁ何もしなくても死にはしない。

こいつをShellToDos.pmみたいな感じで保存して,

#!/usr/bin/perl

use ShellToDos;
my $wrapper = new ShellToDos(1);

$wrapper -> output("andyRED\nREDGR\nEEEEENandy\n");
DOS窓での実行結果。ちゃんと色付きで表示される。

とかすれば,何もかもうまくいく。ちなみにこのsampleで見えている“”みたいなやつが,Unix shellのいわゆる色変更命令。WindowsでRSpecを実行した人はみな,この忌まわしき文字列がずらーっと画面上に並ぶあの絶望感を知っているはずだ。

ちなみに例では日本語は処理させていないけれども,ちゃんとconstructorにinput encodingを与えれば日本語も正しく処理できる。

RSpecとかautospecとかの結果も,wrapper.plとして

#!/usr/bin/perl
use ShellToDos;

my $cmd = $ARGV[0];
my $wrapper = new ShellToDos(1);

open(PIPE, "$cmd |") or die "Can't open pipe $cmd";
while(<PIPE>){
  $wrapper -> output($_);
}
close(PIPE);

とかを書いて,DOS promptからperl wrapper.pl autospecみたいな感じで実行してやれば,日本語も化けないし色もきれいに表示される!!!!……のだけど,CTRL+Z による reset / halt がうまく動かないの><。どうしよう……。。。。

Re: 理系は使わない言葉

はてな匿名ダイアリーの『理系は使わない言葉』より。

世の中の文系(非理系)の人が理系チックな表現をしようとして,理系の人間が聞くと「その用法はありえねぇ!」と思うものが少なからずあります。

俺が理系を代表してるかはわからないけど,あくまで主観で,違和感を感じた例をいくつか挙げてみます。

ということだが,元増田(匿名diaryでは元記事の著者のことをこう呼ぶ)の言っていることがやや的外れなので,ネタにマジレスして,ホントの理系がどう使ってるかを書いてみようと思う。

理論的
「理論的には」「理論上は」として普通に使う。
「Vector」の誤用
これは元増田の言うとおりだなぁ。
加速度的に
数学を知っている理系なら「指数関数的に」と言う。生物系だと「加速度的に」と言うような気がするけれども。
力学が働く
力学を勉強したてのうちは確かに違和感を覚えたけれども,そのまま深い世界に沈んでいくと(一回転して)自然な用法に感じるようになると思う。Mechanicsが働く,dynamicsが働く。そんなに違和感を覚えない今日この頃。
方程式が崩れる
方程式は破れるものだなぁ。理論は崩れたり破れたりする。機構も崩れたりする。でも崩れると言っても良いような感じもする。びみょい。
次の次元
元増田は彼は既に次の次元で世界を見ています。という用例を挙げてたけど,こんなの聞いたことがない。次元は「1つ上の男」……もとい,「1つ上の次元」であり,次にあるものではないような感じがある。
1+1
田んぼの田だろjk。というか元増田の指摘が野暮……。
それ以上でもそれ以下でもない

          ____   

       / \  /\ キリッ

.     / (ー)  (ー)\      

    /   ⌒(__人__)⌒ \    

    |      |r┬-|    |      それは空集合です。

     \     `ー'´   /      

    ノ            \

  /´               ヽ              

 |    l              \

 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    

  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____

        /_ノ  ヽ、_\

 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ

/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)

| / / /     |r┬-|    | (⌒)/ / / //  だっておwwwwwwwwwwwwwwwwwww

| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/

|     ノ     | |  |   \  /  )  /       さすがにこれは理系でも普通に使うおwwwww

ヽ    /     `ー'´      ヽ /    /     バ

 |    |   l||l 从人 l||l      l||l 从人 l||l  バ   ン

 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、    ン

  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))