まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 前月 翌月 > 最新


2008-10-01 (水)

制御文字のコード範囲は 0x00〜0x1f, 0x7f

入力データに含まれているコントロールコードを削除しようとしていたのですが、 制御コードの範囲って 0x00〜0x1f でいいんだっけ? と思い確認してみたところ、 実は 0x7f も DEL の制御文字でした。

人のことは言えませんが、検索してみると、0x7f のことを忘れている人が結構いるように感じられます。

ちなみに、上でやりたかったことは、

$data = preg_replace('/[\x00-\x1f\x7f]/', '', $data);

でできました。

Tags: PHP | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2008-10-02 (木)

PHP の switch 文は怖くて使えない

PHP の == 演算子が地雷なのは知っていましたが、 まさか switch 文にも同じ問題があるとは思いませんでした。 これでピンと来ない人は、先に以下のページでも読んで下さい。 PHP が落とし穴だらけの言語であることが分かります。

さて、私が今回はまりそうになったのはこういうコードです。

function filter($value) {
    switch ($value) {
    case 'abc':
    case 'def':
        return $value;
        break;
    default:
        return '';
        break;
    }
}

要するに、入力値として abc と def だけ受け付けようという意図なんですが、 このコードにはバグがありまして、

php > echo filter(0);
0

このように入力値としてゼロという数値を与えると、返り値もゼロになります。 えーっ! と思いマニュアルを読んでみると、

注意: switch/case が行うのは、緩やかな比較 であることに注意しましょう。

としっかり書かれていました。 コメント欄にも、こういう危なっかしいコードの例や対処法が山ほど載っていました。

それで私は結局、

function filter($value) {
    if ($value === 'abc' || $value === 'def') {
        return $value;
    }
    return '';
}

のように if 文と === 演算子を使うようにしました。 switch 文はもう怖くて使えません。

Tags: PHP | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink
本日のコメント(全2件) [コメントを書く]

# 貞子 [PHPプログラムは落とし穴だらけと書かれていますが、マニュアルに書かれていることを単に理解されていなかったあなたに問..]

# revulo [この記事は、PHP を批判する記事ではありません。私の失敗談を書いて、皆さんも気を付けましょうと言っているのです。]


2008-10-08 (水)

google-code-prettify が IE でコピペするとおかしくなる件

google-code-prettify には、 IE でコピペすると改行が消される というバグがあるのですが、

に載っている方法を使えば、修正できるんじゃないかという気がしました。

私はあまり興味がないのでやりませんが、このバグで困っている人は試してみてはいかがでしょう?

Tags: JavaScript | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2008-10-12 (日)

VML と Compositor フィルタを用いた放射状グラデーション

これは以前に書いた VML と DirectX Alpha フィルタを用いた放射状グラデーション を改良したものです。 SVG や Canvas と同じようなグラデーションを再現することに、なんとか成功しました。

この方法は以下のような特徴があります。

  • 長所
    • 多色のグラデーションが可能
    • 任意の形の図形に対応可能
    • グラデーションの焦点も任意の位置に設定可能
  • 短所
    • 3つの図形を重ねる必要があり、ややこしい
    • 不透明度のグラデーションはかけられない
    • DirectX のフィルタを使うので処理速度は遅いかもしれない

説明を始めるとものすごく長くなってしまいそうなので、具体的な解説はここではしません。 興味のある方は、リンク先のファイルを読み解くか、私に尋ねるかして下さい。

このエントリの続き: 2008-10-19 (日)
Tags: VML | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2008-10-13 (月)

SIE 0.34 がリリース

SIE は Internet Explorer で SVG を表示可能にする JavaScript ライブラリです。

バージョン 0.32 からの変更点:

  • グラデーション処理の改良
  • width → svgwidth の変換の改良
  • slice指定でも、はみ出した領域が表示されるバグを修正

グラデーションの処理は私が書き直したものです。 VML で colors を設定すると opacity の意味が逆になる バグも修正してあります。 まだ修正すべき箇所はあるものの、以前よりはそれっぽく表示されるようになったはずです。

もっと正確に描画したければ、昨日のブログに書いたような方法もありますが、 細かい点に目をつぶれば、それなりに SVG のグラデーションを再現できるようになってきたと思います。

このエントリの続き: 2008-10-25 (土)
Tags: SVG | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2008-10-14 (火)

Zend Framework 1.6.2 がリリース

Zend Framework の最新版がリリースされました。 以下のページに ZF 1.6.1 からの変更箇所が載っています。

また、Zend Framework 1.7 Preview Release もリリースされています。 そちらは、以下のような変更が加えられる予定のようです。

  • New Zend_AMF component
  • Dojo Toolkit 1.2.0
  • New ZendX_JQuery component
  • Support for dijit editor
  • Metadata API in Zend_Cache
  • Google book search API
  • Performance enhancements
  • Application-wide locale with other i18n enhancements
  • File upload form element enhancements

あと、しばらく前から API のドキュメントがダウンロードできなくなっていますが、 ファイル自体は存在するのでリンクを張っておきます。

http://framework.zend.com/releases/ZendFramework-1.6.2/ZendFramework-1.6.2-apidoc.tar.gz

この件、メーリングリストで指摘されて、直しておくと言っていた気がするんですが、直っていませんねぇ。

このエントリの続き: 2008-11-18 (火)
Tags: Zend | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2008-10-19 (日)

VML と clip プロパティを用いた放射状グラデーション

先日の VML と Compositor フィルタを用いた放射状グラデーション に引き続き、もう1つの方法を示しておきます。

この方法は以下のような特徴があります。

  • 長所
    • 多色のグラデーションが可能
    • opacity (不透明度) のグラデーションも2段階まで可能
    • グラデーションの焦点も任意の位置に設定可能
  • 短所
    • 図形が四角の場合しか対応できない
    • 回転などの変換を含む場合に対応できない
    • 3つの図形を重ねる必要がある

四角形の場合しか使えない、というのが致命的なので、使える場面はかなり限られると思いますが、 それでも良ければ綺麗な radial gradient を表示できます。

簡単に解説しておくと、この方法は3つの図形を重ねています。

  • 中央を丸くくり抜いた四角形
  • 放射状のグラデーションをかけた円
  • 四角形の外枠

基本的には、グラデーションのかかった円を、四角形の上に乗せれば済むのですが、

  • 円が半透明な場合は、四角形をくり抜いておかないと色が濃く見えてしまう
  • グラデーションの中心と四角形の中心がずれている場合は、はみ出た部分を隠さないといけない

といった問題があるので、こういったややこしい方法を採っています。

Tags: VML | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2008-10-25 (土)

SIE 0.36 がリリース

SIE は Internet Explorer で SVG を表示可能にする JavaScript ライブラリです。

バージョン 0.34 からの変更点:

  • CTMの処理方法を変更
  • プログレスバーの実装(改善#13698)
  • PaintColorオブジェクトの改良
  • a要素の継承のバグを修正
  • グラデーション参照要素がないときの対応
  • path要素の高速化
  • font関連の属性を処理するFontStyleオブジェクトの実装
  • パッチ#13682の適用
  • コメントの一部誤りを訂正
  • 画像を読み込んでから、次の画像を読み込む処理に変更
  • バグ#13703の一部修正

このバージョンは実験的な側面もあるそうですが、それでもちょっと不具合が多いです。 機能がいろいろと追加されているので、試してみる価値はあると思いますが、 性能的にはバージョンダウンしているかもしれません。

このエントリの続き: 2008-10-31 (金)
Tags: SVG | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2008-10-31 (金)

SIE 0.36.1 がリリース

SIE は Internet Explorer で SVG を表示可能にする JavaScript ライブラリです。

これは前回の バージョン 0.36 のバグフィックスリリースですが、試してみたところ、 今までで最も高速に動作し、かつバグも少ないバージョンに仕上がっているようです。

しばらく見ない間にかなり手が加えられているようなので、 また連休中に変更箇所を眺めてみるつもりです。

このエントリの続き: 2008-11-17 (月)
Tags: SVG | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

追記