Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

2013年08月

パーフェクトPHP (PERFECT SERIES 3)
小川 雄大
技術評論社
2010-11-12


『パーフェクトPHP』を1年ぶりに読み返したら、色々再発見があったのでメモっておきます。

----------

「どんなプログラムでもいえることですが、テストコードを見ることは内部の挙動を知る大きな手助けとなります」 - p.34

フレームワークの内部の理解、テストコード読解から初めてみようかなと思いました。

「var_dump()関数は(中略)可変長引数に対応しており、カンマで区切ることでいくつでも引数を渡すことができます」 - p.39

し、知らなかった…。まあ、var_dump()で複数の変数を一度に出力したい場面ってあんまり無いですけど。var_dump()使うときはデバッグ時なので、出力する変数は1度に1つ、というのが基本ですね。

var_dump('hoge'); // こっちが普通
var_dump('hoge', 'fuga'); // 実はいくつでも引数を渡せる

<自動的に定義される変数>

代表的なものは$argc(CLIで実行時スクリプトに渡された引数の数)、$argv(CLIで実行時スクリプトに渡された引数の配列)、スーパーグローバル変数($_GLOBALS, $_SERVER, $_GET, $_POST, $_COOKIE, $_REQUEST, $_FILES, $_SESSION, $_ENV)などでしょう。

このうち、$_GLOBALSと$_REQUESTの使用はバッドプラクティスです。原則として避けるべき。


<PHPによって定義されている定数(完全なリストはhttp://php.net/manual/ja/reserved.constants.php)>
PHP_VERSION:実行しているPHPのバージョン番号
PHP_OS:実行しているOSの種類
PHP_EOL:実行された環境での改行コード
STDIN:標準入力ストリーム
E_WARNING:Warningのエラー番号

<マジック定数(完全なリストはhttp://www.php.net/manual/ja/language.constants.predefined.php)>

「マジック定数は、その定数が記述された場所によって動的にその値が変化する定義済み定数」- p.49

__FILE__:ファイルのフルパスとファイル名
__DIR__:そのファイルの存在するディレクトリ名
__LINE__:そのファイル上の現在の行番号
__FUNCTION__:関数名 ※
__CLASS__:クラス名 ※
__METHOD__:メソッド名 ※
__NAMESPACE__:現在の名前空間の名前
※:宣言時の名前を大文字小文字を区別して返す


<error_reporting設定>
E_ALL ^ E_NOTICE ^ E_DEPRECATED:本番環境用。NOTICE/STRICT/DEPRECATEDを無視。
E_ALL | E_STRICT:開発環境用。すべてのエラーを報告。

display_errorsは、本番ではOff、開発ではOn
log_errorsは、常にOn

表題のような現象が発生したので、直るまでの流れ。

<環境>
- MacBook Air mid 2013
- Mac OS X 10.8.4

<前提>
- パーティションを以下の2つに分割済み
  * Macintosh HD
  * Data(暗号化済み)

<現象>
- ディスクユーティリティの「パーティション」で、パーティション容量の変更をすることができない

<修正手順>
- 暗号化したパーティションの暗号化を解除

暗号化解除後は一度再起動したほうがいいかも。
暗号化を解除すれば、通常通りパーティションの容量を変更できるようになった。


なお、上記とは別件だけど、以下のような現象も発生。

<現象>
- ディスクユーティリティで表示される使用領域の値と、ファインダー等で「情報を見る」で表示される使用領域の値が違う

<修正手順>
- PRAMリセット(P + R + command + optionを同時に押しながら起動)


ディスクユーティリティと、「情報を見る」では、バックアップ用のデータの認識の仕方が異なっていて、使用領域の食い違いが発生する。(アップルメニュー→「このマックについて」→「詳しい情報」→「ストレージ」で、バックアップ用のデータがどの程度あるか確認できる)

通常使用の範囲でも、10GBくらいの違いは発生するが、私の場合、最大容量160GBのパーティションにバックアップ用のデータが115GB存在し、使用領域は「--(表示なし、計算上はマイナス10GB)」、空き領域は170GB、という異常な数値が表示されていた。

PRAMリセットに関しては、Appleが出している技術情報を参照のこと。起動ディスクを選択し直す、という処理なのだが、これをやると上記異常な数値は修正された。

FirefoxアドオンのGreasemonkeyを使って、ニコニコ動画のランキングにNGワードを指定します。

<動作確認している環境>
Mac OS X 10.8.4
Firefox 23
Greasemonkey 1.8
ニコニコ動画(原宿) - カテゴリ合算毎時総合ランキング(http://www.nicovideo.jp/ranking/fav/hourly/all)

特に重要なのはニコニコ動画のバージョンとページ。別バージョンや別ページでは動作確認していません。

Before(ニコニ広告は非表示にしてます)

before


After(「とある」をNGワードにしたので、1位の『とある科学の〜』が非表示に)

after

実際のスクリプトは以下(2013-08-10 14時追記。NG理由が表示されるようにする処理を追加)。
// ==UserScript==
// @name        Nico Ranking NG Word
// @namespace   https://twitter.com/ryo511
// @include     http://www.nicovideo.jp/ranking/*
// @version     1.0
// @grant       GM_getValue
// @grant       GM_setValue
// ==/UserScript==

(function () {
    var ng_pattern = /NG|ワード/;
    var display_matched = 0; // 0なら単なる非表示 1ならNG理由表示
    for (var i = 1; i <= 100; i += 1) {
        var elem = document.getElementById("item" + i);
        var matched = elem.innerHTML.match(ng_pattern);
        if (null !== matched) {
            if (1 === display_matched) {
                elem.innerHTML = "NG:" + matched; // NG理由表示
            } else {
                elem.style.display = "none"; // 単なる非表示
            } 
        }
    }
})()
ng_pattern に正規表現でNGパターンを指定して、あとは各要素をidで引っこ抜いてパターンマッチ。

ng_patternにマッチした場合、デフォルトでは単に非表示にします。何が理由で非表示になったか知りたい場合、「var display_matched = 0;」となっている部分を、「var display_matched = 1;」と書き換えます。

ng_patternは、「|」でいくつでも追加できます。例えば、/とある|科学|超電磁砲/だと、「とある」「科学」「超電磁砲」のいずれかの単語が動画のタイトル・説明文に含まれる動画を非表示にします。

Greasemonkeyのインストール方法に関しては、Greasemonkey入門、ユーザースクリプトの作り方はGreasemonkeyによるアプリケーション開発あたりを読んでください。

このページのトップヘ