<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" >
  <channel>
  <title>mond-tech</title>
  <link>http://mondtech.blog.shinobi.jp/</link>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://mondtech.blog.shinobi.jp/RSS/" />
  <description>焼肉屋さんが大好きです。いや、そうでも無い。
たぷたぷになってきてピンチです。</description>
  <lastBuildDate>Thu, 10 Feb 2011 14:00:19 GMT</lastBuildDate>
  <language>ja</language>
  <copyright>© Ninja Tools Inc.</copyright>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />

    <item>
    <title>もう簡便ならん</title>
    <description>
    <![CDATA[ Click証券いい加減にしてください。3日連続サーバが落ちまくるってどう言う事ですか。
 
生活掛かっている人間も大勢いるって分かっていてシステム開発、サーバ運営してますか？
 
遊びじゃないんですよ？システム屋ってのは。
 
もう正直あきれ果てたので、DMMの方へ移ります。さようならClick証券。2度と使いません。

<br>
<br>
<br>
<br>

 

<a href="http://track.affiliate-b.com/visit.php?guid=ON&a=Q3492A-D70583m&p=w99919L" target="_blank"><img src="http://www.affiliate-b.com/upload_image/3492-D70583m-3.gif" width="468" height="60" style="border:none;" alt="DMM.com証券" /></a><img src="http://track.affiliate-b.com/lead/Q3492A/w99919L/D70583m" width="1" height="1" style="border:none;" />]]>
    </description>
    <category>FX</category>
    <link>http://mondtech.blog.shinobi.jp/fx/%E3%82%82%E3%81%86%E7%B0%A1%E4%BE%BF%E3%81%AA%E3%82%89%E3%82%93</link>
    <pubDate>Thu, 10 Feb 2011 14:00:25 GMT</pubDate>
    <guid isPermaLink="false">mondtech.blog.shinobi.jp://entry/43</guid>
  </item>
    <item>
    <title>[mysql]Column count of mysql.proc is wrong.</title>
    <description>
    <![CDATA[5.0系でdumpしたデータを5.1へ入れた際に、出るエラー。<br />
mysql_upgradeを叩かなきゃならん。]]>
    </description>
    <category>DB</category>
    <link>http://mondtech.blog.shinobi.jp/db/-mysql-column%20count%20of%20mysql.proc%20is%20wrong.</link>
    <pubDate>Thu, 15 Apr 2010 10:23:31 GMT</pubDate>
    <guid isPermaLink="false">mondtech.blog.shinobi.jp://entry/42</guid>
  </item>
    <item>
    <title>[perl]AnyEvent - HTTPサーバ</title>
    <description>
    <![CDATA[AnyEventを使ってHTTPD書いてみた。モジュールリロードもやれる子。<br />
まぁ、アプリケーションサーバライクな部分のコードを書いて無いから、<br />
モジュールリロード部分はさっぱり役に立たないけれどｗｗｗ。<br />
試したい場合は、create_responseでreq、resを受け取ってホゲホゲするパッケージを書いてやると良いよ。<br />
<br />
AnyEvent::HTTPDを使えば良いじゃん、って話もあるけど、あれって微妙で・・・。<br />
Object::Eventとか要らんもの使っていて、モジュールのリロードが痛いコードになったり、<br />
ヘッダに同じキーが2作るとアウトだったり(Cookieで刺さる)。HTTP::Requestじゃないのが痛かったり。<br />
他も微妙と言うか、べっつにこんくらい自分で書けよ、シリーズだったので。<br />
なんでもCPAN使えば良いってもんじゃない。と言うかそれやると無駄な苦労が増える場合の方が多かったりｗｗｗ。<br />
最近ホント酷いものねぇ。困ったもんです。Ratingが一切アテにならないと言う・・・。<br />
<br />
CPANに対する愚痴はほどほどにしといて、このコード、前書いたechoより随分コードが増えてると思う。特にレスポンス周り。<br />
echoのサンプル、実は、レスポンスで返すデータが増えると、データが途中でぶった切られるのよね。<br />
サンプルのエコーサーバ程度だからあれで済むんだけど、本気でサーバやるとなるとそれじゃ困る。<br />
<br />
何故にデータが途中で切られるか、と言うと、ソケットが書き込み可能の状態じゃないのに無理やり書こうとするから。<br />
この原因は、ソケットが読み書き両用でオープンされてて、あっちからデータが来たりこっちから書いたりがブツかって、<br />
いやーんな状態になったりするから。<br />
<br />
そう言う場合EAGAINって言うエラーが飛んでくる。これは読めないのに無理やりソケットからデータを読もうとしても飛ぶエラー。<br />
データが無いのに読んだりね。<br />
<br />
だから、ソケットが書ける状態なのかをAnyEventのioで監視して、書ける状態になったら書き込み開始。<br />
で、書いてる最中にEAGAIN起こっちゃったら、書くの中止して、再びソケットの監視へ、ってな風にやれば良い。<br />
それをwrite_responseで再帰使ってやってる。<br />
<br />
これで、最低限動くHTTPDの出来上がり。<br />
<br />
<pre><br />
#!/usr/bin/perl<br />
<br />
use AnyEvent;<br />
use AnyEvent::Socket;<br />
use IO::Handle;<br />
use HTTP::Parser;<br />
use Errno qw(EAGAIN);<br />
<br />
use Data::Dumper;<br />
<br />
my $HOST = '192.168.0.100';<br />
my $PORT = 8080;<br />
my $HTTP_VERSION = '1.1';<br />
my $MODULE_RELOAD = 0.5;<br />
<br />
$| = 1;<br />
<br />
server_listen();<br />
<br />
sub server_listen {<br />
    tcp_server $HOST, $PORT, sub {<br />
        my ($sock, $host, $port) = @_;<br />
        autoflush $sock 1;<br />
        print "Client connected: $host($port)\n";<br />
        my $sock_watcher; $sock_watcher = AnyEvent->io(<br />
            fh      => $sock,<br />
            poll    => 'r',<br />
            cb      => sub {<br />
                my $data;<br />
                while (<$sock>) { $data .= $_; }<br />
                my $res = create_response(parse_request($data));<br />
                $res->header('Content-Length' => length $res->content);<br />
                my $res_data = "HTTP/$HTTP_VERSION " . $res->as_string;<br />
                my $res_len = length $res_data;<br />
                write_response($sock, $res_data, $res_len);<br />
                undef $sock_watcher;<br />
            },<br />
        );<br />
    }, sub {<br />
        my ($fh, $host, $port) = @_;<br />
        print "HTTP server is listening on $host($port)\n";<br />
    };<br />
    if ($MODULE_RELOAD) { reload_check(); }<br />
    else { AnyEvent->condvar->recv; }<br />
}<br />
<br />
sub parse_request {<br />
    my $parser = new HTTP::Parser(request => 1);<br />
    if ($parser->add(shift) == 0) {<br />
        my $req = $parser->request;<br />
        warn 'URI: ' . $req->uri;<br />
        warn 'METHOD: ' . $req->method;<br />
        warn Dumper $req->headers;<br />
        return $req;<br />
    }<br />
}<br />
<br />
sub create_response {<br />
    my ($req) = @_;<br />
    my $res = new HTTP::Response;<br />
    $res->code(200);<br />
    $res->header('Content-Type' => 'text/html');<br />
    my $content;<br />
    for ('a' .. 'z') { $content .= $_ x 10000 . "<br>\n"; }<br />
    $res->content($content);<br />
    return $res;<br />
}<br />
<br />
sub write_response {<br />
    my ($sock, $res_data, $res_len, $offset) = @_;<br />
    my $w_sock_watcher; $w_sock_watcher = AnyEvent->io(<br />
        fh      => $sock,<br />
        poll    => 'w',<br />
        cb      => sub {<br />
            defined $offset or $offset = 0;<br />
            while (my $len = syswrite $sock, $res_data, $res_len, $offset) {<br />
                $offset += $len;<br />
                $offset == $res_len and last;<br />
            }<br />
            if ($! == EAGAIN && $offset != $res_len) {<br />
                undef $w_sock_watcher;<br />
                write_response($sock, $res_data, $res_len, $offset);<br />
            }<br />
            undef $w_sock_watcher;<br />
        }<br />
    );<br />
}<br />
<br />
sub reload_check {<br />
    my $cv = AnyEvent->condvar;<br />
    my $time_watcher = AnyEvent->timer(<br />
        interval => $MODULE_RELOAD,<br />
        cb => sub {<br />
            if (my $target = module_reload()) {<br />
                for (keys %$target) { print "Reloaded: $_($target->{$_})\n"; }<br />
            }<br />
        },<br />
    );<br />
    $cv->wait;<br />
}<br />
<br />
sub module_reload {<br />
    my %reloaded = ();<br />
    for (keys %INC) {<br />
        my $lm = -M $INC{$_};<br />
        my $path = $INC{$_};<br />
        $lm == $LAST_MODIFY{$_} and next;<br />
        if ($LAST_MODIFY{$_}) {<br />
            delete $INC{$_};<br />
            eval { require $path; };<br />
            if ($@) { $INC{$_} = $path; warn $@; }<br />
            else { $reloaded{$_} = $path; }<br />
        }<br />
        $LAST_MODIFY{$_} = $lm;<br />
    }<br />
    return %reloaded ? \%reloaded : undef;<br />
}<br />
</pre><br />
]]>
    </description>
    <category>Perl</category>
    <link>http://mondtech.blog.shinobi.jp/perl/-perl-anyevent%20-%20http%E3%82%B5%E3%83%BC%E3%83%90</link>
    <pubDate>Sun, 21 Mar 2010 16:53:28 GMT</pubDate>
    <guid isPermaLink="false">mondtech.blog.shinobi.jp://entry/41</guid>
  </item>
    <item>
    <title>[perl]モジュールの自動リロード</title>
    <description>
    <![CDATA[モジュールファイルに変更があった際にそのモジュールを自動で読み込みなおしたい、そんな時・・・<br />
<br />
サーバ系やら常駐系のアプリ開発しない限りは必要性は無いと思うけれど。<br />
<br />
CPANのModule::Reloadは、モジュールがエラーでこけると、そのモジュールの再読み込みが行われない、だとか、<br />
モジュール再読み込みの際にどのモジュールが読み込まれたか知りたい場合それを外からハンドリング不能、<br />
だとか、微妙なので、こんなもんは書いて、自分のライブラリに追加した方が早いと思うんだ、わたくし。<br />
<br />
<pre><br />
sub module_reload {<br />
    my %reloaded = ();<br />
    for (keys %INC) {<br />
        my $lm = -M $INC{$_};<br />
        my $path = $INC{$_};<br />
        $lm == $LAST_MODIFY{$_} and next;<br />
        if ($LAST_MODIFY{$_}) {<br />
            delete $INC{$_};<br />
            eval { require $path; };<br />
            if ($@) { $INC{$_} = $path; warn $@; }<br />
            else { $reloaded{$_} = $path; }<br />
        }<br />
        $LAST_MODIFY{$_} = $lm;<br />
    }<br />
    return %reloaded ? \%reloaded : undef;<br />
}<br />
<br />
if (my $target = module_reload) {<br />
    warn 'RELOADED: ' . Dumper $target;<br />
}<br />
</pre><br />
<br />
こんな感じで。<br />
<br />
%INCには読み込み済みのモジュール情報が詰まってる。<br />
Keyには、パッケージ名をファイルパスに直した謎フォーマットのデータ、<br />
Valueには、パッケージへのファイルフルパス。<br />
それをぶん回して最終更新日をチェックするだけ、と言う代物。まぁ、何とも単純。<br />
<br />
返り値は、再読み込みしたモジュールがあれば、<br />
その情報をINCのKey-Valueそのままにハッシュのリファレンスで返す。<br />
無ければundef。<br />
<br />
そーんなかんじでー。よろぴこめかどっく。<br />
]]>
    </description>
    <category>Perl</category>
    <link>http://mondtech.blog.shinobi.jp/perl/-perl-%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE%E8%87%AA%E5%8B%95%E3%83%AA%E3%83%AD%E3%83%BC%E3%83%89</link>
    <pubDate>Sun, 21 Mar 2010 16:23:21 GMT</pubDate>
    <guid isPermaLink="false">mondtech.blog.shinobi.jp://entry/40</guid>
  </item>
    <item>
    <title>[FX]FXで俺のお小遣いを2倍3倍にして、こつこつドカンで元金の半分に！</title>
    <description>
    <![CDATA[やっぱギャンブルだ人生。子供も生まれたが、そんなのは知らない。博打大事。<br />
って事で先月からFXのデモトレードを試しにやっていた。<br />
1ヶ月足らずで、100万円が280万円になった。帰って来てからちょびーっとだけやってるだけなんだけどね。<br />
まぁ、デモだから気軽にやれるから参考にはならんね。実弾撃ってどうなるか。<br />
株よりは全然良いや。24時間やってるのが良い。社会人はまともな取引出来ないもの、株は。<br />
<br />
とりあえず、ヒロセとクリックに口座開設。<br />
本人OKのアフィだからね、アフィ貼ってここから登録しよう。嫁にも登録させよう。<br />
<br />
<a href="http://hirose-fx.co.jp/rd.php?aid=3200000" onClick="return Button39335()"><img src="http://www.affiliate-b.com/upload_image/1064-1241150821-3.gif" width="468" height="60" style='border:none;' alt="lionfx" /></a><script type="text/javascript">function Button39335(){para="?pa=w99919L&ad=01064i-J39335i";site="http://track.affiliate-b.com/reqclick.php";qu=site+para+"&url="+escape(document.URL); window.open(qu, '_blank');return false;}</script><img src="http://track.affiliate-b.com/lead/01064i/w99919L/J39335i" width="1" height="1" style='border:none;' /><br />
<br />
<a href="http://track.affiliate-b.com/visit.php?a=M753D-A10899O&p=w99919L" target="_blank"><img src="http://www.affiliate-b.com/upload_image/753-1194240031-3.gif" width="468" height="60" style='border:none;' alt="クリック証券" /></a><img src="http://track.affiliate-b.com/lead/M753D/w99919L/A10899O" width="1" height="1" style='border:none;' /><br />
<br />
ってぇか、DMMが却下されたｗｗｗ。<br />
却下しないで～。使いたいから～。頼みます～～。FXの話題やってくから～。<br />
<br />
とりあえず、最近のこの超ドル円下げ相場は死者多数なんだろうなぁ。ロンガーしょんぼり。円強すぎ。まぁポン円の下げっぷりはさらに地獄で死者だらけだろうけど。<br />
と言うか、市況2のドル円専用スレの乱立っぷりが酷い。スレ立て嵐はやめて欲しいよなぁ。<br />
多分、大損こいてる人が憂さ晴らしにやってるんだろうけどさぁ。人に迷惑掛けるのは良くないよなぁ。<br />
]]>
    </description>
    <category>未選択</category>
    <link>http://mondtech.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/-fx-fx%E3%81%A7%E4%BF%BA%E3%81%AE%E3%81%8A%E5%B0%8F%E9%81%A3%E3%81%84%E3%82%922%E5%80%8D3%E5%80%8D%E3%81%AB%E3%81%97%E3%81%A6%E3%80%81%E3%81%93%E3%81%A4%E3%81%93%E3%81%A4%E3%83%89%E3%82%AB%E3%83%B3%E3%81%A7%E5%85%83%E9%87%91%E3%81%AE%E5%8D%8A%E5%88%86%E3%81%AB%EF%BC%81</link>
    <pubDate>Wed, 03 Mar 2010 15:49:20 GMT</pubDate>
    <guid isPermaLink="false">mondtech.blog.shinobi.jp://entry/39</guid>
  </item>
    <item>
    <title>[Windows]英語キーボードのCapsLockでME切り替え　by AltIME</title>
    <description>
    <![CDATA[さっきのエントリついでに。<br />
<br />
普通に、英数をCapsLockにする、でやると、<br />
IMEを切り替えるたびCapsLockがかかる珍現象に見舞われるのでダメ。<br />
<br />
CapsLockと、何か要らないキーを入れ替えて、入れ替えたキーにIME切り替えを割り当てる。<br />
<br />
英語キーマップに無い、無変換を、IME切り替えに割り当てて、CapsLockを右Ctrlに割り当てる<br />
<br />
キー入れ替えで <br />
<br />
<blockquote>/3A7B<br />
/9D3A<br />
</blockquote><br />
IME起動キーで<br />
<br />
<blockquote>007b</blockquote><br />
]]>
    </description>
    <category>Windows</category>
    <link>http://mondtech.blog.shinobi.jp/windows/-windows-%E8%8B%B1%E8%AA%9E%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%81%AEcapslock%E3%81%A7me%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%80%80by%20altime</link>
    <pubDate>Wed, 03 Mar 2010 15:15:43 GMT</pubDate>
    <guid isPermaLink="false">mondtech.blog.shinobi.jp://entry/38</guid>
  </item>
    <item>
    <title>[Windows]Syncpadのキーボードでブラウザボタンがウザい</title>
    <description>
    <![CDATA[知らない人が居たので、何となく投稿。困るよね、確かにこれ。<br />
設計した人間何考えてるのか脳みそ開けて見てみたい、よりむしろ、<br />
脳みそ引き抜いて河原に捨てたいよね。<br />
<br />
AutoHotKey使うと良い。超手抜きの方法で説明。<br />
<br />
http://www.autohotkey.com/download/<br />
<br />
インストーラー版をDL。何も考えずインストール。<br />
<br />
<br />
適当な場所に、kill_browser_button.ahkと言う名前でファイルを作って<br />
<br />
<blockquote>&lt;!Left::Send,{Left}<br />
&lt;!Right::Send,{Right}<br />
</blockquote><br />
<br />
を書き込む。<br />
<br />
\Program Files\AutoHotkey\Compiler\Ahk2Exe.exeを実行。<br />
<br />
Required ParametersのSourceで、さっきのkill_browser_button.ahkを指定。<br />
Converと押すと、kill_browser_button.exeが作成されるから、それを実行すればOK。<br />
後は、この実行ファイルをスタートアップに指定しておけば良い。<br />
<br />
<br />
<br />
]]>
    </description>
    <category>Windows</category>
    <link>http://mondtech.blog.shinobi.jp/windows/-windows-syncpad%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%81%A7%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%8C%E3%82%A6%E3%82%B6%E3%81%84</link>
    <pubDate>Wed, 03 Mar 2010 14:54:31 GMT</pubDate>
    <guid isPermaLink="false">mondtech.blog.shinobi.jp://entry/37</guid>
  </item>
    <item>
    <title>[perl]ProcForkt使ってDaemon化</title>
    <description>
    <![CDATA[<pre><br />
#!/usr/bin/perl<br />
<br />
use strict;<br />
<br />
use Proc::Fork;<br />
use POSIX;<br />
<br />
chdir '/';<br />
close $_ for *STDIN, *STDOUT, *STDERR;<br />
<br />
run_fork {<br />
    child {<br />
        POSIX::setsid;<br />
        while(1) {<br />
            # daemon operation.<br />
        }<br />
    }<br />
    parent { exit; }<br />
};<br />
</pre><br />
]]>
    </description>
    <category>Perl</category>
    <link>http://mondtech.blog.shinobi.jp/perl/-perl-procforkt%E4%BD%BF%E3%81%A3%E3%81%A6daemon%E5%8C%96</link>
    <pubDate>Wed, 03 Mar 2010 14:48:38 GMT</pubDate>
    <guid isPermaLink="false">mondtech.blog.shinobi.jp://entry/36</guid>
  </item>
    <item>
    <title>[perl]AnyEvent - echoサーバ</title>
    <description>
    <![CDATA[AnyEventのechoサーバサンプル<br />
<br />
<pre><br />
#!/usr/bin/perl<br />
<br />
use AnyEvent;<br />
use AnyEvent::Socket;<br />
use IO::Handle;<br />
<br />
$| = 1;<br />
<br />
my $HOST = '192.168.1.200';<br />
my $PORT = 9999;<br />
<br />
tcp_server $HOST, $PORT, sub {<br />
    my ($sock, $host, $port) = @_;<br />
    autoflush $sock 1;<br />
    print "Client connected: $host($port)\n";<br />
    my $watcher; $watcher = AnyEvent->io(<br />
        fh      => $sock,<br />
        poll    => 'r',<br />
        cb      => sub {<br />
            my $data = <$sock>;<br />
            $data =~ s/\r?\n//g;<br />
            if ($data eq 'quit') {<br />
                print "Client disconnected: $host($port)\n";<br />
                undef $watcher;<br />
                return;<br />
            }<br />
            print "$data by $host($port)\n";<br />
            print $sock "[$data]\n";<br />
        },<br />
    );<br />
}, sub {<br />
    my ($fh, $host, $port) = @_;<br />
    print "Echo server is listening on $host($port)\n";<br />
};<br />
AnyEvent->condvar->recv;<br />
</pre><br />
<br />
WEBには、sysread、syswriteのサンプルしかないんだよね。<br />
バッファリングされちゃうからsys*系使うんだろうけどautoflushしちゃえば良い。]]>
    </description>
    <category>Perl</category>
    <link>http://mondtech.blog.shinobi.jp/perl/-perl-anyevent%20-%20echo%E3%82%B5%E3%83%BC%E3%83%90</link>
    <pubDate>Wed, 03 Mar 2010 14:46:25 GMT</pubDate>
    <guid isPermaLink="false">mondtech.blog.shinobi.jp://entry/35</guid>
  </item>
    <item>
    <title>[perl]AnyEvent::Util::guard - 微妙な子</title>
    <description>
    <![CDATA[変数が開放されたタイミングで走る関数を定義する事が出来る。<br />
AnyEventのサンプルコード見てもらえれば解かる通り、これを用いたコードは、<br />
使い手側に、一見、使いもしない謎の変数確保を強要されるので、気持ち悪い事になる。<br />
普通には使わない方が良いと思う。DESTROY、MooseならDEMOLISHでやれば良い。<br />
<pre><br />
#!/usr/bin/perl<br />
<br />
use AnyEvent::Util;<br />
<br />
my $guard1 = create_guard(1);<br />
my $guard3 = hoge();<br />
<br />
{<br />
    my $guard4 = create_guard(4);<br />
}<br />
<br />
undef $guard3;<br />
undef $guard1;<br />
<br />
sub hoge {<br />
    my $guard2 = create_guard(2);<br />
    return create_guard(3);<br />
}<br />
<br />
sub create_guard {<br />
    my ($no) = @_;<br />
    return AnyEvent::Util::guard {<br />
        warn "Destroy $no";<br />
    };<br />
}<br />
</pre><br />
2, 4, 3, 1の順でクロージャが呼ばれる。]]>
    </description>
    <category>Perl</category>
    <link>http://mondtech.blog.shinobi.jp/perl/-perl-anyevent--util--guard%20-%20%E5%BE%AE%E5%A6%99%E3%81%AA%E5%AD%90</link>
    <pubDate>Mon, 01 Mar 2010 14:40:17 GMT</pubDate>
    <guid isPermaLink="false">mondtech.blog.shinobi.jp://entry/34</guid>
  </item>

    </channel>
</rss>