‘Reference’カテゴリーの記事

opacity / filter : alpha »

a:hover img {
    opacity: 0.7;
    filter: alpha(opacity=70);
}

Tail-Lagoon @ 10:26   |   PageUp

MacOSX 不可視ファイルの解除方法(&パスの通しかた) »

不可視属性の無効化

ファイル名の先頭がピリオドで始まるファイルが不可視になるのは周知だけれど、通常の命名でも不可視になる

仕事でZIP等の圧縮ファイルを受け取って、ファイルサイズが大きいにも関わらず、伸長してフォルダを開けると空っぽ[0項目]になっていて、首を傾げることが何度かあった。
それで、ふと思いついて、ターミナルから確認したら、実はちゃんとファイルが存在していることがわかった。
送り主(Windows ユーザ)も意図して不可視にしたわけではないだろうから、そうなってしまう原因はよくわからないのだが、不可視のままだと通常使用するアプリケーションで開けないものもあるので、この属性を解除しなければならない。

解除(不可視属性を無効化)には、SetFile コマンドを使う(Developer Tools がインストールされている必要あり)。ターミナルから、下記コマンドを実行すれば、ファインダーで表示されるようになる。

    SetFile -a v [InvisibleFileName]

  • [InvisibleFileName] は不可視ファイル名。多数の場合はワイルドカードで処理。
  • オプションの v は小文字。(大文字にすると、逆に不可視属性が有効になる)
  • パスが通っていない場合、コマンドは /Developer/Tools/SetFile のようにフルパスで指定しなければならない。

(参考 : http://appling.jp/p_blog/article.php?id=51

続きを読む… »

Tail-Lagoon @ 10:44   |   PageUp

毎回忘れる Win IE7 用の CSS Hack »

↓毎回忘れる Win IE7 用の CSS Hack

*:first-child+html #Example {
    /* for WinIE7 */
    margin-top: -1px;
}

↓今のところは忘れていない Win IE6 用の CSS Hack

*html #Example {
    /* for WinIE6 \*/
    margin-top: -1px;
    /**/
}

↓あと、このエントリーで使うことになったバックスラッシュのエンティティ

\ ← Backslash Entity

Tail-Lagoon @ 16:39   |   PageUp

PHPの変数、定数、演算子 »

以下は、恥ずかしながら、つい最近知りました。

変数 $str[n] (文字列を配列に分解して返す nはオフセット)

文字列の変数は、実は各文字を一文字ずつ配列として取り出すことができる。呼び出す時は、左(文字列の頭)からのバイト数を添え字にする。

 例 :
  $str = ‘012345678′;
  echo ‘$str[0] = ‘ . $str[0] . ‘<br />’;
  echo ‘$str[1] = ‘ . $str[1] . ‘<br />’;
  echo ‘$str[2] = ‘ . $str[2] . ‘<br />’;
  echo ‘$str[9] = ‘ . $str[9] . ‘<br />’;
 結果 :
  $str[0] = 0
  $str[1] = 1
  $str[2] = 2
  $str[9] =
 (注 : バイト単位で分解されるので、マルチバイトでは使用できない)

続きを読む… »

Tail-Lagoon @ 20:17   |   PageUp

RewriteBase »

CakePHP の設置時、.htaccess でつまずいた。
ローカルでは問題なかったのに、レンタルサーバにアップしたら、500エラーが発生。mod_rewrite が使えないせいかと疑ったのだが、しかし WordPress で使っているのだから、mod_rewrite は使用できるはずだ。
そこでそれぞれの .htaccess を比較すると、CakePHP のそれには Rewritebase の指定がなかったため、これを追加してみたら、あっさり動いた。
(他にも、FTP からは同階層に見えている公開エリアと非公開エリアのフルパスが実は全く違う(※1)ということを知らず、それに気づくまでにもかなりてこずったのだが、これはレンタルサーバの仕様およびドキュメント不足のせいなので、別の問題)
いつかまた同様の問題に出くわすかもしれないので、忘れないようメモしておく。

(webroot)/.htaccess

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /   # この行を追加
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

(※1) 自分のためにメモっておくが、公開エリアと非公開エリアについて、フルパスでは全く違うのに、相対パスでは参照可能なのだ。不思議。シンボリックリンクを置いているのだろうか?(でもそれなら、フルパスでだってリンクにアクセス可能なのでは?)……もともと別の箇所で相対パスで使用してうまくいっていたから、ますますフルパスが違うなど思いもよらなかったのである。思い込みってよくないね。しかしどういう仕組みなのだろう?

Tail-Lagoon @ 16:24   |   PageUp

CakePHP の h() »

 CakePHP では htmlspecialchars() を h() と短縮できるのだが……、ちょっと気になることがあって、該当するソースを確認すると、下記のようになっていた。

cake/basics.php

    function h($text) {
        if (is_array($text)) {
            return array_map('h', $text);
        }
        return htmlspecialchars($text);
    }

 配列を渡すと、その値をすべて処理してくれるのは便利だけど、htmlspecialchars() はデフォルトのまま使っているから、シングルクォートは変換されない(ENT_COMPACT になる)。これはちょっと危険な気がする。といって、コア部の cake/basics.php を直しても、バージョンアップのたびに対処しなきゃいけないし、むしろ忘れてしまう可能性大。

 ではやはり h() は使わず htmlspecialchars($str, ENT_QUOTES, 'UTF-8') ときちんと書くのが一番安全かな。でもかなり長ったらしいから、毎回面倒だ。本当は app/ の中のどこか適当な場所に、改良した h() が定義できればいいんだろうけど、でもどこに置けばいいのかな?

 と調べていたら、app/config/bootstrap.php に書き込めばいいらしい。なるほど、このファイル、今後もいろいろ利用価値がありそう。覚えておこう。

    function hsc($text, $quoteStyle=ENT_QUOTES, $encoding='UTF-8') {
        if (is_array($text)) {
            return array_map('hsc', $text, $quoteStyle, $encoding);
        }
        return htmlspecialchars($text, $quoteStyle, $encoding);
    }

Tail-Lagoon @ 12:54   |   PageUp

配列の加算 (PHP) »

[Q] : 配列を、マージではなく、単純に加算したらどうなる?

[A] : 右(下記例の $e)の配列要素のうち、左(下記例の $a)の配列に存在しないキーの要素を追加する。 重複するキーは左の配列の元のまま(上書きされない)。

$a = array('a','b','c','d');
$e = array('e','f','g','h','i');
$Res = $a + $e;
var_dump($Res);
------------------------- 結果 -------------------------
array(4) {
    [0]=> string(1) "a"
    [1]=> string(1) "b"
    [2]=> string(1) "c"
    [3]=> string(1) "d"
    [4]=> string(1) "i"
}

 実は最初、要素数が同数の配列でテストしていた(上記例の $e[4] がなかった)ので、加算は不可でエラーも出ないものなのだと誤認してしまった! それはまったくの間違いで、キー名を変えるなり、上記のように要素数を変えるなりしてみればわかるとおり、重複しないキーの要素が、ちゃんと追加される。
 テストする仕方がまずいと、このような思い込みをしてしまうことがあるのだと反省(いや、それ以前に、マニュアルもきちんと確認しておけよ、ってことでもある)。

参考 : PHP マニュアル ⇒ 配列演算子

Tail-Lagoon @ 08:01   |   PageUp

関数の中でのグローバル変数の書き換え (PHP) »

 関数の中にある変数をグローバル宣言で読込んで参照するということはよくやるのだが、変数である以上、書き換えることももちろん可能だ。(これを知った時、思い掛けない結果だったので、ちょっとショックだったのだが、これって当たり前のことなのか)

 ということは、ある関数を走らせて、グローバル変数を書き換えた場合は、リターンの必要もなく変数の内容が変わってしまうということだ。

 使いようによっては便利だが、関数の内容を忘れてしまうと、いつのまにか意図せずに変数の値が変わってしまっている、ということも起こる。

 何か関数にその機能についての明示的な名前をつけておくか、呼び出した箇所でコメントを残しておいた方が無難だろう。

 あるいは、関数の中でのグローバル変数の使用は、参照のみにとどめておくか。
 実際、殆どの場合はそういう使用方法なのだが、ルールとして厳格に決めてない限り、関数内でのグローバル変数書き換えはありうることだ。

 でもやはり、書き換えない、と決めた方がいいのかもしれない。

Tail-Lagoon @ 08:00   |   PageUp

MySQL よく使うコマンド »

MySQL

  • ログイン
    mysql -u USERNAME -p;
    ユーザ名 USERNAME でパスワードオプション付きでログイン
  • データベース作成
    create database DB-NAME character set utf8;
    DB-NAME というデータベースを、使用する文字コード UTF-8 と指定して作成
  • データベース削除
    drop database DB-NAME;
    DB-NAME というデータベースを削除
  • データベースの一覧
    show databases;
  • データベースの選択
    use DB-NAME;
  • TABLE情報表示
    show table status;
    テーブルの型などが知りたい場合もこれで分る
  • TABLE作成時のクエリ表示
    show create table TBL-NAME;
    新たにテーブルを作る時や、同じカラムを持つテーブルを作りたい時など参考になる
  • カラム情報表示
    show columns from TBL-NAME;
  • 全データ表示
    select * from TBL-NAME;
  • 新規レコード作成
    insert into TBL-NAME set ID=0,TITLE='あああ',BODY='いいい';
    (ID, TITLE, BODY という名の各カラムがあると想定)
  • レコード削除
    delete from TBL-NAME where ID=0;
    ID の値が 0 のレコードを消去
  • キーワードを重複なしで表示
    select distinct KEYWORDS, KANA from TBL-NAME order by KANA;
    KEYWORDS カラムの値と KANA カラムの値を重複なしで表示し、表示順は KANA カラムの値でソート
  • オートインクリメント(自動連番)カラムの値を振り直す場合、下記の手順で実行する(例では ID カラムがこれに該当)
    1. ID カラムを削除
      alter table TBL-NAME drop column ID;
      オートインクリメント・カラムは各テーブルに一つだけしか作成できないので、連番を振り直す場合は、一旦カラムを削除して新たに作り直す必要がある
    2. 新規 ID カラム(整数型・自動連番)を追加
      alter table TBL-NAME add ID int(5) primary key not null auto_increment first;
      primary key は重複を許さない主キーのことであり、NOT NULL でなければならない
  • カラム名を変更する
    alter table TBL-NAME change OldColumnName NewColmunName DataType;
    (データタイプについては調べること)
  • レコードを変更する
    update TBL-NAME set ColumnName='New Data' [, ColumnName='New Data'] where … ;
    (where 以下の条件文を指定しない場合は、全レコードが書き換えられる)

Tail-Lagoon @ 17:54   |   PageUp

Mac OSX のターミナルコマンド覚書き »

ファイル比較

cmp -[op] [File1] [File2]
実行すると、相違点の行数と桁数がわかる。画像などのバイナリファイルにも使用できる。
diff -[op] [File1] [File2]
テキストファイルの比較に使用。
comm -[num] [File1] [File2]
テキストファイルの比較に使用。
num :

  • num = 1 : File1のみにあるデータを非表示
  • num = 2 : File2のみにあるデータを非表示
  • num = 3 : 両方にあるデータを非表示

テキスト表示

cat -[op] [File]
テキストファイルの内容を出力。パイプやリダイレクトにも使用。
more -[op] [File]
less -[op] [File]
テキストファイルの内容を画面単位で出力。(less はviライクな表示操作も可能)

Tail-Lagoon @ 00:00   |   PageUp