タグ

ブックマーク / fbis.hatenablog.com (15)

  • PHPのDateTimeクラス - Unknown::Programming

    PHPのDateTimeクラスは標準装備なのでお手軽で便利なのだけど、若干使い勝手が悪い。 なのでDateTimeを継承してちょっとした拡張をしとくと便利かと。 <?php class MyDateTime extends DateTime { function year () { return $this->format('Y'); } function month () { return $this->format('n'); } function day () { return $this->format('j'); } function hour () { return $this->format('H'); } function minute () { return $this->format('i'); } function second () { return $this->

    PHPのDateTimeクラス - Unknown::Programming
  • PHPでPath_Classを使ってらくらくディレクトリorファイル操作 - Unknown::Programming

    先日の記事だけを見ると、Perlを使ったこと無い人からすれば何がどう便利なのか良く分からないと思うのでここらでPath_Classの解説。 まずPath_Classの大きな特徴として、引数で与えたパスが、実際にファイルとして存在してなくても良いというところがあげられるでしょう。 <?php require_once 'Path/Class.class.php'; // 存在しないパスを与えてもまったく問題なく動く $dir = cdir('/foo/bar/baz'); // 一個戻ったり $dir->parent(); # /foo/bar // 一個進んだり $dir->subdir('hoge'); # /foo/bar/baz/hoge // ディレクトリ生成しちゃったり $dir->mkpath(); # /foo/bar/baz/というディレクトリが作られる。 // ファイルの

    PHPでPath_Classを使ってらくらくディレクトリorファイル操作 - Unknown::Programming
  • PHP版Path::Class - Unknown::Programming

    え?あぁ。Perlerなら皆さんご存知のPath::Classですが、それのPHP版です。欲しかったので作りました。 以下使い方例。 <?php require_once 'Path/Class.class.php'; $dir = cdir(array('foo', 'bar')); # Path_Class_Dirオブジェクト $file = cfile(array('bob','file.txt')); # Path_Class_Fileオブジェクト print "dir: $dir\n"; # foo/bar print "dir: $file\n"; # bob/file.txt $subdir = $dir->subdir('baz'); # foo/bar/baz $parent = $subdir->parent(); # foo/bar $parent2 = $paren

    PHP版Path::Class - Unknown::Programming
  • 複雑なデータ構造はData::Visitor::Callbackで簡単一発変換 - Unknown::Programming

    ハッシュと配列の参照が入り交じったような複雑なデータ構造の、全value を均等に加工したかったので次の様にしてみました。 (中略) すでに似たモジュールがある気が激しくしています! ご存知でしたらぜひ教えてくださいませ。 [perl] 複雑なデータ構造のvalue を一気に書き換える方法 - harupiyoの日記 ということでData::Visitor::Callbackがズバリそれにあたるものじゃないかなーと。 use strict; use warnings; use Data::Dumper; use Data::Visitor::Callback; my $rh_testdata = { 'a' => 1, 'b' => { 'aa' => 1, 'ab' => [ 1, 2, 3, \ 'test', 5 ], 'ac' => 3, }, 'c' => 3, 'd' => 4

    複雑なデータ構造はData::Visitor::Callbackで簡単一発変換 - Unknown::Programming
  • 正規表現ベースのHTML::FillInForm::Lite - Unknown::Programming

    HTML::FillInFormを正規表現ベースで再実装したHTML::FillInForm::LiteってのがCPANにリリースされてます。 なかなか爽快ですね。HTML::FillInFormHTML::Parserを利用しているので無駄な部分が多かったのがデメリットだったわけで。 ドキュメントには2倍近く高速になると書いてたので一応ベンチを取ってみました。 use Benchmark qw(cmpthese timethese :hireswallclock); use HTML::FillInForm; use HTML::FillInForm::Lite; my $str = q{ <form> <input type="text" name="text_data1" value="" > <input type="text" name="text_data2" value="

    正規表現ベースのHTML::FillInForm::Lite - Unknown::Programming
  • Hashを使って配列をユニークにしよう! - Unknown::Programming

    軽く便乗。 use strict; use warnings; use Data::Dumper; my @cars = qw/honda honda suzuki toyota toyota daihatu mitubishia/; my %report = (); for my $car ( @cars ) { $report{ $car }++; } print Dumper \%report; http://perl-mongers.org/2008/06/hash.html とありますが、単に配列をユニークにするだけの場合なら my @cars = qw/honda honda suzuki toyota toyota daihatu mitubishia/; my @uniq = do { my %h; grep { !$h{$_}++ } @cars }; print Dum

    Hashを使って配列をユニークにしよう! - Unknown::Programming
    bigbro
    bigbro 2010/02/09
  • エイリアスメソッドの作成方法の続き - Unknown::Programming

    エイリアスメソッドの作成方法 - Unknown::Programming 前に上記記事でメソッドのエイリアスを作る方法を書いたんだけども。 Class::C3使ってるときにうまくいかないという結論のまま終わってました。 一応その後、id:charsbarさんがエイリアスメソッドの作成方法 - Charsbar::Noteという記事でAUTOLOADを使って実現する方法を書いてくれたんだけど、AUTOLOADだと全体に影響を及ぼしそうなので他に影響を与えずにエイリアスメソッドを作りたいなぁと。 そこで、最近Perl Hacks読んで思いついたので若干無茶な方法だけどエイリアスメソッドを作るモジュールを考えてみました。 名づけてSub::Alias。 package Sub::Alias; use strict; use warnings; use B::Deparse; use base

    エイリアスメソッドの作成方法の続き - Unknown::Programming
    bigbro
    bigbro 2010/01/07
    エイリアス
  • エイリアスメソッドの作成方法 - Unknown::Programming

    ここにhogeというメソッドがあるとして sub hoge { my $self = shift; my $num = shift; return $num + 10; } こいつと同じ動きをするhoge_aliasメソッドを作成する場合、 例えば下記のようにhogeメソッドにそのまま投げるやり方がすぐ思いつく方法かな。 sub hoge_alias { shift->hoge(@_) } これでもいいんですが、hogeメソッドでcaller関数なんかを使って何かしら処理している場合に問題になる可能性があるので、gotoとか使ってみる。 sub hoge_alias { goto &hoge } だけど、型グロブ期な僕は下記のようにするのが好きです。 *hoge_alias = \&hoge; ただし、use warningsとかしてると「Name "main::hoge_alias" u

    エイリアスメソッドの作成方法 - Unknown::Programming
    bigbro
    bigbro 2010/01/07
    エイリアス
  • Unknown::Programming

    3年ぶりの更新というわけで、まさしく3年寝太郎状態なわけですが。 今日は今巷を賑わせているJSON SQL Injectionについてです。 DeNA Engineers' Blog [ Technology of DeNA ] JSON SQL Injection、PHPならJSONなしでもできるよ | 徳丸浩の日記 徳丸さんの記事で紹介されていたように、僕が作ったSQL_Abstractでも同様の問題が発生するとのことです。 SQL::Makerのようにstrictモードを導入するかどうかも一応考えたのですが、PHPSQL_Abstract自体PHP5でも動作はしますがPHP4時代のコードですし、そもそもそんなに使われてないだろう(泣)いうことで今回は見送ることにしました。(ちょっと今すぐ時間が取れないという状況もありまして・・・) またstrictモードを導入したとしてもSQL_A

    Unknown::Programming
    bigbro
    bigbro 2010/01/07
    fbisさんのはてダ
  • PHP版HTML::FillInForm大幅バージョンアップ - Unknown::Programming

    PHP版のHTML_FillInFormを大幅にバージョンアップしました。 今回はちゃんとテストコードを書いてみたんですが、漏れやバグありまくりで焦ったorz やっぱりちゃんとテストコード書かないとダメダメですね・・・。 ってことで以下箇条書きで更新一覧を。 ソースの文字コードをutf8に変更 テストコードの追加 />に対応(17_xhtml.t.php) type="textfield"に対応(13_textfield.t.php) disable_fieldsオプションの追加(21_disable_fields.t.php) HTML::FillInForm::Liteのescapeオプションの追加(22_escape_option.t.php) selectedのmultipleに対応(04_select.t.php) formのidに対応(11_target.t.php) type

    PHP版HTML::FillInForm大幅バージョンアップ - Unknown::Programming
  • PHP版HTML::FillInForm - Unknown::Programming

    まだまだ続きます。 PHPSQL::Abstract - Unknown::Programming PHP版Data::Page(::Navigation) - Unknown::Programming というわけで第三弾。 先日の記事で「HTML::FillInFormの移植もお願い!」とお願いされてたのとはまったく関係なく作りました^^。 →HTML_FillInForm-0.01.tar.gz で、HTML::FillInFormなんですが、実はもうすでに作ってらっしゃる方がいます。 2LBOX – Online Tool Reviews – Testing online tools that makes your life easier. ただ、ignore_fieldsやtargetなどのいくつかのオプションが足りないのと、データを埋め込む時にchecked="checkded

    PHP版HTML::FillInForm - Unknown::Programming
  • Perlにおける定数宣言(constant or Readonly or Attribute::Constant) - Unknown::Programming

    正直言いますと、個人的には定数って殆ど使わないんですよね。 昔はちょこちょこ使ってたんですが、最近は定数となりうる物は基的にYAML等外部ファイルに持たせて変更可能にすることが多いのでまったく使ってません。 ですがそれでもPerlで定数を使いたい時にはどーすんの?っていう時のために軽くここにまとめておきます。 言わずもかなPerl5.8にはconstantという定数を定義できる標準モジュールがあります。 use strict; use constant PI => 3.14; # 表示 print PI; # 3.14 # 上書きしようとすると・・・ PI = 3; # Can't modify constant item in scalar assignment とこのように上書きしようとするとエラーを吐いて死にます。 しかも実行時ではなく、コンパイル時にエラーを吐きます。 実はこのc

    Perlにおける定数宣言(constant or Readonly or Attribute::Constant) - Unknown::Programming
    bigbro
    bigbro 2010/01/04
  • Perlが初めての人に教えてあげたいちょっとしたこと - Unknown::Programming

    タイトルは釣りです。 実際のタイトルは「Perlのオブジェクト指向がムズカシイだって?んなバカな。だったらPHPで再現してやんよ!」でございます。 ヘイヘイヘイ。そこの君。Perlのオブジェクト指向が難しいだなんていったい誰が言ったんだい? Perlのオブジェクト指向ほど、シンプル且つ柔軟なものはないよ! 単なるパッケージ(名前空間)とリファレンス(データ)をblessという関数で紐付けただけのもなんだから。 第一引数に必ず$selfが来るっていうのも結局の話たんなる関数呼び出しとなんら変わらないのだから。 package Foo; sub new { my $class = shift; return bless { @_ } , ref $class || $class; } sub plus { my $self = shift; my $int = shift; return $s

    Perlが初めての人に教えてあげたいちょっとしたこと - Unknown::Programming
    bigbro
    bigbro 2009/12/25
    PerlのOOPをPHPで再現。面白い
  • 新人教育 - Unknown::Programming

    明日からちょっと遅めのゴールデンウィークということでなんか更新しとくか。 まっさらな新人にPerl教えるのって当にきついですね。 専門学校レベルのC言語しかやったことないとかいう人は配列やfor文を凄く好む。 ハッシュやforeach使えよと。 はたまた学校でPerlやってましたとか言う人もstrictってなんですか?ってな状態だし。 というかね、専門学校で教えられてるPerlのレベルがね、10年くらい時が止まってるんじゃねーのか、と思うくらいレベルが低いのがなんとかならんかなと。(ということはPerlでOOPとかstrictとかCPANとかを教えてくれるような専門学校があったら凄い生徒集まるんじゃない!?いやいや、世の中はPHP主流になりつつあるらしいぞ) いや、まとにかく勉強しないといけない項目を箇条書きでざーっと上げてみようか。 foreach文 ハッシュ 配列操作関数push,s

    新人教育 - Unknown::Programming
    bigbro
    bigbro 2009/11/24
    「専門学校レベルのC言語しかやったことないとかいう人は配列やfor文を凄く好む」凄く分かる
  • PHPがどうにも好きになれない理由 - Unknown::Programming

    仕事PerlPHPも使うんだけど、どうにもPHPが好きになれない。 いったいなんでだろうか。先にPerlから入ったもんだから後から入ったPHPに対して不満があるのかな? ま、とにかく両方やっててPHPが微妙だなぁと思う部分を列挙してみよう。 ただPHPに関してそれほど詳しくないので間違っている部分もあるかもしれません。 あ、ちなみにここでいうPHPってのはPHP4(PHP4.4.1)のことです。 変数のtypeミス(strict 'vars') これが一番痛い。 まさしくPerlでstrictを使わずに実装してるような、そう、まるで先祖帰りしてるような感覚になってしまうので当につらい。 変数のスコープ 変数のスコープが関数単位でしか発生しないのが痛い。 これによりif条件の場合のみとかループ中でしか使わない変数とかを定義できない。 つまり、変数の存在範囲を細かく設定できないのだ。 配

    PHPがどうにも好きになれない理由 - Unknown::Programming
  • 1