してログ

普通に書くと、ループ構文や乱数関数で5~6行程度必要かと思いますが、substr に str_shuffle と str_repeat を組み合わせると一行で済ますことができます。なお、同じ文字が出てこないで良い場合は、str_shuffle だけで良いと思います。

同じ文字を最大3個まで許す、長さ8文字のパスワードを生成
substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyz',3)), 0, 8);

文字列に大文字や記号を加えると、更に複雑なパスワードを生成することができます。str_repeat の第2引数が繰り返しを許す最大文字数になり、substr の第3引数がパスワードの長さになります。

リファレンス

ファイルパスから、各要素に分解してくれる便利関数 pathinfo ですが、マニュアルによると結果の連想配列に filename が戻るのは PHP5.2.0 以降なようです。

知っていないとデバッグも苦労しそうなので、開発環境とリリース環境が違う場合や、オープンソースなどのプロジェクトでは使用を控えたほうが良さそうです。実際、これに気づくのに30分を要してしまいました。代わりの関数を、文字列操作関数などでライブラリ化しておくと良いと思います。

コメント取得用関数 obj_description がありますが、マニュアルにはテーブル名としか書いてありません。しかし、ビューに対しても取得できるようです。

select obj_description(19921009,'pg_class');

ここで第1パラメータで与える objectOID ですが、結局 pg_catalog.pg_class より自分で調べて来なくてはならず、何のために用意されているのか分からないような関数となっております。pg_catalog より、テーブル名やビュー名から、コメントを取得するには、下記のような SQL 文を発行します。

select description
 from pg_catalog.pg_description
 where objoid=(select relfilenode from pg_catalog.pg_class where relname='テーブルまたはビューの名前')
   and classoid=(select relfilenode from pg_catalog.pg_class where relname='pg_class')
   and objsubid=0

条件の objsubid=0 は、カラムに付いたコメントの場合にその番号が入りますが、今回はテーブルまたはビュー自体に付いたコメントですので、常にゼロとなります。


ここにも星が。雲が少ない分、ずいぶんと冷え込んだ朝でした。

今日、あまり好きでない人から頼み事をされ、それも受け入れたくないものを、それで、あたふたどうしようかと考えているうちに「やっぱりいいや」ってことになり、内心は「セーフセーフ」ってほっとした自分。「そうですか、でもまた何か私にできることがあったら、遠慮なく言ってくださいね」と言いながら。

ん、どこかで聞いたことあるな、これ。心理学か何か。嫌いな人に好きになってもらうって、あれ。

今回の場合、ちょっとした(でも無いんだけど)頼み事をすることで、「何かをしてあげたんだから、それほど嫌いじゃないんだろう」とか、「今回は無理だけど次は協力してあげよう」というのを引き出して、ちょっと好きになる。

ググったら見つかりました「ベンジャミン・フランクリン効果(The Ben Franklin Effect)」

ちょっとした頼みごとで昨日の敵が今日の友に? 「ベンジャミン・フランクリン効果」とは?
http://www.lifehacker.jp/2011/10/111012hatersgonnafriends.html
これによると、他人に対する評価は自分の行動によって定まるものだとか。多くの場合、態度は行動から生じるものであり、行動は観察されるもの。そして、ヒトは自分の行動を観察するとき、その行動が道理にかなっていると思いたがります。ゆえに、信念と行動が一致しない場合は、過去の行動を振り返ったり、自分が今やっていることをよく調べて、信念を行動にあわせようとします。つまり、「何をするか」という行動が、「何を信じるか」という信念を創りあげるわけです。
なるほど、本意であれ建前であれ、行動によって評価の誘導(やらしい言い方ではあるが)がおこされるわけですね。これを狙ってできれば策士ですが。。。

12/14 某所にて
Canon PowerShot S100
HDR JPG×3→PhotomatixTpzAdjustPhotoshop
Tags #冬 #霜 #放射冷却
※この記事は「Yahoo!ブログ - HDRp」からの転載です

アイコンとテキストを並べた時、縦位置のずれが気になることがあります。画像に vertical-align:middle などと指定しても、どうしてもしっくりした位置に来ないと思いませんか? ちょっと冗長ですが、テーブルタグで囲んで、それぞれの td に vertical-align:middle を指定したときがいちばん自然な位置に来ます。が、やっぱり冗長過ぎるでしょってことで、試行錯誤してみました。

画像とテキストを並べただけ
にゃんこ
<img src="/images/icon/16x16/cat.png" />にゃんこ
画像に vertical-align:middle を指定
にゃんこ
<img style="vertical-align:middle;" src="/image/icon/16x16/cat.png" />にゃんこ
テーブルの td に vertical-align:middle を指定
にゃんこ
<table><tr>
  <td style="vertical-align:middle;"><img src="/images/icon/32x32/cat.png" /></td>
  <td style="vertical-align:middle;">にゃんこ</td>
</tr></table>
span で囲み display:inline-block、vertical-align:middle を指定
にゃんこ
<span style="display:inline-block;vertical-align:middle;"><img src="/image/icon/32x32/cat.png" /></span><span style="display:inline-block;vertical-align:middle;">にゃんこ</span>

という訳で、最後の inline-block を使用したものが最適という解を導きだしました。これを CSS で汎用的なクラスを定義しておけば、かなりスッキリとしたコードを書けると思います。

追記(2016-12-02)

アクセス解析から、久しぶりに見直していたら、どれも横に並んでいないことに気づきました。HTML5 / CSS3 にしたからなのか何なのか分かりませんが、これはマズイということで、改めて試行錯誤してみました。まだ、改良の余地があるかもしれません(画像の縦サイズをテキストの line-height に入れないといけないのが気に入らない)。

今のところの最適版
にゃんこ
<img style="vertical-align:top;" src="/images/icon/32x32/cat.png" /><span style="display:inline-block;line-height:32px;">にゃんこ</span>

いくつかありますが、1ファイルでこれ(lastRSS)がいちばん簡単でした。ただし、警告が出る場合(存在しない配列要素を参照する場合)があるので、気になる場合はコードを修正した方が良いでしょう。

Last RSS Simple yet powerful PHP RSS parser
http://lastrss.oslab.net/
サンプルコード
include_once('lastRSS.php');

$rss = new lastRSS;

$rss->cache_dir = './cache';
$rss->cache_time = 3600; // キャッシュの有効時間(単位:秒)

if ($rs = $rss->get('http://landhere.info/feed.php?type=blog')) {
    print_r($rs);
} else {
    die("RSSの取得に失敗しました");
}

見つけたフォームに片っ端からコメントスパムを投稿していくロボットへの対策ですが、単純な対策でかなり効果がありました。この手のスパムコメントは、ほとんど英文のやつで放っておくとすぐに、もの凄い数に上ってしまいます。

ロボットは、見つけたフォーム要素の種類(type="text" など)と名前(name="email" など)を頼りに書き込みを行います。そこで、ダミーの入力欄を設けてロボットを騙してやればロボットかどうか判定できると考えました。最初は、名前を日本語ローマ字(name="namae" とか)にしてみましたが、これは効果がありません。最終的に、非表示のフォーム要素を使う方法が、大いに効果ありました。

<input type="text" name="name" style="display:none;" />

このように、ブラウザに表示されないダミーのテキスト入力欄を設けます。このフォームの受け取り側では、この要素が空の場合のみ正しい処理をするようにします。たったこれだけですが、今のところロボットはうまく騙されてくれているようです。

正規表現で html を処理する下記のようなコード、一行コメントアウト(ダブルスラッシュ)でコメントアウトすると致命的なエラーになります。これ、何故だか分かりますか? 私はこれで小一時間ほど、悶々としていました。

preg_match('/<a.+?>(.+?)<\/a>/su',$html,$match);

これは一行コメントアウトが、それを書いた場所から改行コードまでをコメントアウトするもの、という認識でいる限り分かりません。正しくは「改行コードまたは PHP コードブロックの終わり」までをコメントアウトするもの(こちらのマニュアル参照)です。PHP コードブロックの終わりとは、すなわち「?>」のことであり、上記の正規表現内に文字の並びとして現れています。

結果、行末までのコメントアウトとならず、途中で PHP コードブロックから外れて直接ソースコードが出力されるばかりか、致命的な構文エラーの原因となってしまいます。このようなコードをコメントアウトしたい場合は、複数行コメント(「/*」と「*/」)で囲みます。

特に、今回のような html を処理する場合の正規表現式で出てきそうな、この形は注意したいところです。

Windows サーバーにリモートデスクトップ接続で作業しているときに、ネットワーク障害などで異常切断されてしまうと、今まで作業していたデスクトップに再接続できなくなることがあります。これは、今までの接続がゾンビになって裏で動いており、再接続で新しいデスクトップが生成されるためです。前のデスクトップでバッチ処理していたり、未保存のファイルがあるときに陥ると焦りますが、回復させる方法があります。

ゾンビ接続の回復方法
  1. 再接続して新しいデスクトップを開きます
  2. タスクマネージャーからユーザーのタブを開きます
  3. ゾンビになった接続と、再接続した接続のユーザーが表示されます
  4. ゾンビになった接続を選択し「切断」ボタンを押します
  5. 再接続したほうは、ログオフします
  6. もう一度、再接続すると、ゾンビになったほうに再接続されます
参考:タスクマネージャ

ゾンビを切断する際に誤って「ログオフ」を選んでしまうと、水の泡となりますので気をつけてください。また、どちらのユーザーか分かりにくいですが、上の方がゾンビと思って間違いないと思います。もし、違う方を切断してしまっても、自分の接続が切れるだけなので心配は要りません。