2008.11.01 Saturday

HDD増設 [09:53]

HDD

SATA用のL型コネクタが余っていたので、それを使って増設しました。
増設HDDの拡張パーティション(と論理ドライブ)を作成した後にフォーマットして終了。
Cドライブ(SATAII 320GB)と、増設したHDDのDドライブ(SATA 300GB)を合わせて620GBです。
# Windowsの管理ツールから確認すると実際は580GB程度

2008.09.28 Sunday

スレッドあぼーん [23:54]

誕生日から三日経ちました。

快速かきこの掲示板を持ってるんですけど、
少し放置しておくだけですぐにスパムだらけになってしまい、
しかも管理設定からスレッドの一括削除とかできないから、
削除スクリプト書きました(すごい手抜きだけど)。

use strict;
use warnings;
use IO::Socket;

my $uri = "";              # BBSのURL
my $passwd = "";           # BBSパスワード
my @no = qw( 2 5 7 11 );   # 削除したいスレッドのスレッド番号

my( $host, $genre, $str, $user ) = ( split( '/', $uri ) )[2..5];
my $iaddr = inet_aton( $host );
my $saddr = pack_sockaddr_in( 80, $iaddr );
my $post  = new IO::Socket;

my @query = ();
my %query = (
        op => 'pagego',
        id => $user,
        pw => $passwd,
        sv => $genre
);

while( my( $key, $value ) = each( %query ) ){
        push( @query, "$key=$value" );
}

foreach my $no ( @no ){
        my $query = join( '&', @query, "wc=$no" );
        my $length = length( $query );
        
        unless( $post->socket( 2, 1, 0 ) ){
                next;
        }
        unless( $post->connect( $saddr ) ){
                next;
        }
        $post->send( "POST http://$host/command/i-remove.cgi HTTP/1.0\n" );
        $post->send( "Referer: $uri/$no.html\n" );
        $post->send( "Content-Length: $length\n\n" . $query );
        $post->flush();
        
        $post->recv( my $buffer, 9216 );
        $post->close();
        
        if( $buffer =~ /passww/i ){
                die( "Error: $passwd\n" );
        }else{
                printf( "deleted %d\n", $no );
        }
}

2008.09.22 Monday

うぇうぇ… [17:46]

窓を開けたらミニサイズのゲジゲジが侵入してきました。
突然の出来事に驚いて見失っちゃいました。
わーーー!!/(^o^)\

2008.09.18 Thursday

あらら独り言 [15:35]

Linuxマシンが別物のWindowsマシンとなって帰って来ました。
それはいいんですけど、WindowsやRedHat LinuxのインストールCD-ROM、
及び各種ドライバなどのCD-ROMを全く認識してくれないのです。
CD-ROMが壊れてるわけじゃなくて、CD-RWドライブが壊れてるのかも。

このPC君を買って使い始めてから6年ぐらい経っているらしく、
しかも元々CD-RやCD-RWへデータを書き込めないという不調もあったらしいです。
おまけに、一ヶ月前に電源付けっぱなしのところ雷が直撃して停電したのに、
よく無事でしたなと褒めてやりたいところです。
まぁ、それはどうでもいいことだけどね!

とりあえず、確認したらファイルやアプリケーションプログラムが書き込まれた
CD-RやCD-RWなら普通に読み込みが可能で、普通にコピーができます。
ライティングソフトウェアを使って焼いたUNIX系OSのブータブルディスクも読み込めるけど、
OSをインストールしようとすると途中でエラーが起きます。

Debianでは、CDからインストールコンポーネントをロードするところで問題が発生します。
そういうわけでインストーラからCD-ROMの安全性をチェックしてみると、
「/xxx/xxx/xxx ファイルの MD5 チェックサム検証に失敗しました。
 CD-ROM またはこのファイルが壊れています」
というメッセージが返され、やっぱり問題が発生しているようです。

Vine Linuxでは、最初の"boot:"を進んでその直後"running /sbin/loader/"にてストップし、
しばらく経つと「you may safely reboot your system」というメッセージが返されます。
やっぱり問題が発生しているようです。

Solarisでは、ミニルートの1を選択したあとインストーラが起動せず、
Media Errorとかなんたらになってしまったので、再起動してもう一回試したら
GRUBメニューの"Solaris"を選択したところでストップし、ミニルートにすら進めず、
やっぱり問題がアッーーーーー!!!

ちなみに上のLinuxやSolarisのインストールディスクはそれぞれ別々です。
とりあえず、CD-RWドライブを取り替えるか外付けのドライブを取り付けるかしましょうか。
っていうかクリーニングディスクどこにいったんだろ。

2008.09.09 Tuesday

(つд;`) [06:17]

現在、無気力で戦意喪失に等しい状態なのです。
こんなにやる気が出ないのも久しぶりなのです。
でも、絶対に自分の目標は遂げて見せますとも。

後ほど病院に行って来ようかなと。(つд;`)

2008.08.09 Saturday

首が痛いんDA☆ [16:47]

yorutrainさんの指摘で前回の記事での謎が解けました。
これを機にPerlのOOPの基礎をやり直します。

3年ぐらい前から水漏れを起こしてたクーラーもようやく直りました。

2008.08.03 Sunday

::っておいしいの? [05:11]

use strict;
use warnings;
use IO::File;

my $filename = 'hogehoge.txt';
my $io = new IO::File;

$io->open( $filename, 'r+' ) or die( $! );
$io->lock::on( 2 );   # OK
$io->lock_on( 2 );    # NG
...
$io->close();

sub lock::on(){
        my $this = shift;
        flock( $this, $_[0] );
}

sub lock_on(){
        my $this = shift;
        flock( $this, $_[0] );
}

上記のコードのlock::on()みたいに::(ダブルコロン?)を付けた関数なら、
第1引数にオブジェクトリファレンスを渡せて無事にメソッドとして呼び出せるのですけど、
lock_on()だとダメなんですね。
ちなみに、関数の呼び出しのときにlock::on()をlock->on()としても通用するみたいです。
意味が分からないけど、OOPに深く関係しているような気がしてきました。
うーん、どうも俺は寝ぼけているようです。

要するにOOPを全く理解できてないって話なんですね。

2008.07.16 Wednesday

頭痛い痛い [01:58]

でも、ぼくがんばる!!

use strict;
use warnings;
use Net::Ping;

my @host = ( "192.168.0.1", "localhost" );
my $this = new Net::Ping( "icmp" );

foreach my $host ( @host ){
        if( $this->ping( $host, 2 ) ){
                print "$host : OK!\n";
        }else{
                print "$host : NO!\n";
        }
}
$this->close();

2008.06.25 Wednesday

アッレー! [05:12]

thebbs【ザ掲示板】
PC君からだとthebbsにアクセスできないけど、
携帯君からだと普通にアクセスできるんです。
俺だけ?(ちなみに、うちのISPはplalaです)

telnetクライアントからthebbs.jp:80に接続してもダメで、
コンソールを起動してthebbs.jpにpingを送信したらこんな感じ。

C:\>ping thebbs.jp

Pinging thebbs.jp [61.194.74.83] with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 61.194.74.83:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

見事にタイムアウト連発。

http://bbs.kakuri.jp/server.php を見たらサーバは正常みたいです。
やっぱり俺んとこが異常なんかな。

それと、
Perlのgethostbyaddr()で127.0.0.1をホスト名に変換しようとしたら、
localhostじゃなくてnull-xxxxxxみたいな文字列に変換されちゃうんですけど、
もしかしてうちのネットワーク環境がバグってる?
2週間ぐらい前までは普通にlocalhostに変換できたのに。
ルータ再起動しまくっても直んないし、意味分かんない。(´;д;`)

2008.06.21 Saturday

よし! [16:10]

既存のtelnetによるIPアドレス取得スクリプトを参考にして書いてみました。
# setSock()関数内でソケットの作成〜accept()の実行やらをやってます。
# IO::Socket::INET()すれば、socket()〜listen()は必要ないんだけど。
インラインフレームからsetSock()とtelnetクライアントを同時にコールしてIPアドレス取得。
telnet以外のプロトコルを指定してもOKっぽい。
とにかく簡単に書いてあるので、タイムアウト処理はやってないです。
ローカルサーバでは動きます!!!11

#!perl

use strict;
use warnings;
use IO::Socket;
use IO::File;

our $port = 9000;

# $ENV{QUERY_STRING} =~ /\W/ and exit();
$ENV{QUERY_STRING} eq 'sock' ? setSock() : iframePage();

sub setSock()
{
        my $sock = new IO::Socket;
        my $client, my $paddr;
        
        $sock->socket( PF_INET, SOCK_STREAM, 0 );
        $sock->setsockopt( SOL_SOCKET, SO_REUSEADDR, 1 );
        $sock->bind( pack_sockaddr_in( $port, INADDR_ANY ) );
        $sock->listen( SOMAXCONN );
        
        $client = $sock->accept();
        $paddr = $client->peername();
        $client->close();
        
        viewLog( $paddr );
}

sub viewLog()
{
        my $paddr = shift @_;
        my $iaddr = [unpack_sockaddr_in( $paddr )]->[1];
        my $host = gethostbyaddr( $iaddr, 2 );
        my $addr = inet_ntoa( $iaddr );
        my $out = new IO::File;
        
        $out->open( 'iplog.txt', 'w' );
        $out->write( "$host : $addr\n" );
        $out->close();
        
        print "Content-Type: text/html\n\n";
        print "$addr : $host\n";
}

sub iframePage()
{
        print qq{Content-Type: text/html\n\n};
        print qq{<iframe src="$ENV{SCRIPT_NAME}?sock"></frameset>\n};
        print qq{<iframe src="telnet://$ENV{HTTP_HOST}:$port"></frameset>\n};
}

2008.06.16 Monday

thebbs [23:49]

http://gai.jp/Entry/19/

うー、本当に閉鎖しちゃうのかな。
うー、過去ログが…。

2008.06.06 Friday

後でやるZE☆ [13:22]

use strict;
use warnings;
use IO::Socket;
main();

sub main()
{
        my $port = 9000;
        my $cw = new IO::Socket;
        # my $cw = new IO::Socket::INET(
        #          LocalPort => $port, Listen => 1, Reuse => 1 );
        
        $cw->socket( PF_INET, SOCK_STREAM, 0 );
        $cw->setsockopt( SOL_SOCKET, SO_REUSEADDR, 1 );
        $cw->bind( pack_sockaddr_in( $port, INADDR_ANY ) );
        $cw->listen( SOMAXCONN );
        
        client( $cw );
}

sub client()
{
        my $cw = shift @_;
        
        while( 1 ){
                my $client = $cw->accept();
                
                # メッセージを受け取って返す
                while( my $buffer = $client->getline() ){
                        $client->send( $buffer );
                        $client->flush();
                }
                $client->close();
        }
}

試しにechoサーバのサンプルコードをちょっと書きました。
telnetクライアントを利用したIPアドレス取得なんてのも
後でやってみたい。

2008.05.29 Thursday

田代砲もどき [12:53]

use strict;
use warnings;
use IO::Socket;

my $uri   = 'http://localhost/'; # アクセス先
my $proxy = '';    # Proxy
my $port  = '';    # ポート
my $count = 5;     # アクセス回数
my $inter = 0;     # 間隔

my $sock   = new IO::Socket;
my $length = 1024 * 5;
my $buffer;

if( $proxy eq undef() ){
        $proxy = ( split( '/', $uri ) )[2];
        $port = getservbyname( 'http', 'tcp' );
}

foreach my $loop ( 1 .. $count ){
        unless( $sock->socket( PF_INET, SOCK_STREAM, 0 ) ){
                next;
        }
        unless( $sock->connect( pack_sockaddr_in(
                        $port, inet_aton( $proxy ) ) ) ){
                next;
        }
        $sock->send( "GET $uri HTTP/1.0\n\n" );
        $sock->flush();
        
        if( $loop == $count ){
                $sock->recv( $buffer, $length );
        }
        $sock->close();
        
        printf( "%d回目\n", $loop );
        sleep( $inter );
}

print $buffer;

似非田代砲だけど、Proxyサーバを介するとすごく遅いです。
ループ中にconnect()でサーバホストに接続しつつ、Proxyが使えなかったら飛ばす!
これをもっとすばやく処理できたら理想的なのかな、よく分かんねーや。/(^o^)\
# inet_aton()でホスト名をバイナリコード(IPアドレスの構造体)に
# 変換するらしいけど、これも関係あるかな。

ChiririDukeは他のモジュール使っててすごく早い><

2008.05.17 Saturday

nayutaさん [22:20]



歌にしても絵にしても、うまい人には憧れますね!
あと、思った通り嫉妬厨ってどこにでも沸くのね。||'A`||

2008.05.08 Thursday

/(^o^)\ [19:34]

#!perl -w

use strict;
use warnings;
use IO::Socket;

my $sock = new IO::Socket;

unless( $sock->socket( PF_INET, SOCK_STREAM, 0 ) ){
        die( "socket()" );
}

...

$sock->close();

socket()のPF_INETとAF_INETっていう定数は同じなんかな。
ソケット関係よくわかんない。他もわかんないことだらけ。/(^o^)\

1/7 >>