PHP の str_replace() の技

  こういうことが出来たらしい

$str = str_replace(array("\r", "\n", "\r\n"), "", $str);

コマンドライン引数をクリップボードに格納するツール

急に必要になったから,作ってみた.

#include <windows.h>

#pragma comment(lib, "user32.lib")
#pragma comment(linker, "/opt:nowin98")

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

    HGLOBAL hText;
    int iLength = strlen(lpCmdLine);
    char *pText;
    
    if (iLength == 0) {
        return 0;
    }
    
    hText = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, iLength + 1);
    if (hText) {
        pText = GlobalLock(hText);
        if (pText) {
            OpenClipboard(NULL);
            EmptyClipboard();
            
            lstrcpy(pText, lpCmdLine);
            GlobalUnlock(hText);
            
            SetClipboardData(CF_TEXT, hText);
            CloseClipboard();
        }
    }
    GlobalFree(hText);
    
    return 0;
}

genfeed - 汎用 RSS ジェネレータ

  http://blog.bulknews.net/cookbook/blosxom/rss/genfeed.html

  非常に便利

  このままだと title および description で日本語が通らなかったので,定義ファイルを
  EUC-JP で書くとして,サブルーチン load_site を以下のように修正.
  要は,euc-jp に変換してあげているだけ.

sub load_site {
    my($dir, $file) = @_;
    my $fh = FileHandle->new("$dir/$file") or die "$dir/$file: $!";
    my %param;
    while (<$fh>) {
        chomp;
        last if /^$/;
        /^(\S+): (.*)$/ and $param{$1} = decode("euc-jp", $2);
    }
    $param{match} = [ split / /, $param{match} ];
    $param{pattern} = decode("euc-jp", do { local $/; <$fh> });
    $param{filename} = $file;
    return \%param;
}


- 帝国データバンクの倒産情報を取得する場合の定義ファイル

title: 帝国データバンク倒産情報
link: http://www.tdb.co.jp/
crawl: http://www.tdb.co.jp/tosan/main.html
description: 帝国データバンク倒産情報
match: link title

<p><a href=(syosai/\d+?\.html)>(.*?)</a>

- やじうま Watch の場合

title: やじうま Watch
link: http://internet.watch.impress.co.jp/
crawl: http://internet.watch.impress.co.jp/static/yajiuma/
description: やじうま Watch
match: title

<P><B>■ (.*?)</B>

- hard で loxse な 日々 さんのところの場合.

title: hard で loxse な 日々
link: http://papalagi.org/diary/
description: hard で loxse な 日々
match: title

■(.*?)<br>

  参考までに以下の方法もかなり使える.

- NDO::Weblog: Template::Extract + XML::RSS でRSS 生成
  http://naoya.dyndns.org/~naoya/mt/archives/000833.html

サブウインドウを開く弊害と対策

  http://allabout.co.jp/computer/hpcreate/closeup/CU20040118A/index2.htm

<a href="abc.htm" onClick="window.open('abc.htm','subwin','width=300,height=300'); return false;">サブウインドウ</a>


o リンク先がどこなのか,ステータスバーで分かる.
o ユーザが望めば,別ウインドウでも開ける.
o JavaScript が OFF でも,リンク先を閲覧できる.

  これは使えるかも.

ラジオボタンの命中率を格段に UP

  http://allabout.co.jp/career/html/closeup/CU20031102A/

<input type="radio" id="id1" name="name" value="1"><label for="id1">ラジオボタン</label>

簡易テンプレート for PHP

<!-- templates.html -->
<html>
<body>
<h1>{$a}</h1>
{$b}
</body>
</html>

<?php

// テンプレート中の変数
$a = '見出し';
$b = '本文';

// テンプレートを読み込む
$html = implode('', file('templates.html'));
// eval (PHP コードとして評価) するための準備
$html = str_replace('"', '\"', $html); // " をエスケープ
// 文字列 ($html) を PHP コードとして評価し,変数 ($output) に代入
eval ("\$output = \"$html\";");
// 結果を出力
print $output;
?>

mysql_connect() で UNIX Socket でも接続できる

mysql_connect('localhost:/tmp/mysql.sock', 'userid', 'password');

PHP で echo() と print() の違い

  両方とも実際には関数ではなく言語構造ということでは同じ.
  echo は,1 つ以上の引数を取れる
  print は,1 つしか引数を取れない

echo 'a', 'b', 'c'; // OK
print 'a', 'b', 'c'; // NG: PHP Parse error:  parse error, unexpected ','...


  補足トリビア

<?= 'a', 'b', 'c' ?>

  これもいける

- echo - 1 つ以上の文字列を出力する

void echo ( string arg1 [, string argn...] )

  http://www.php.net/echo

- print - 文字列を出力する

print ( string arg )

  http://lu.php.net/print

接続を切られてしまうのを防ぐ

  何故か,外部のサーバに接続しっぱなしだと接続を切られてしまうので.
  Solaris 用

#!/bin/sh
# 接続を切られないように 30 秒おきに date を発行

date

while [ 1 ]
do
    echo "\r`date`  Type ^C to resume: \c"
    sleep 30
done

ISBN をアマゾンの本の画像にリンクする chalow プラグイン簡易版

  (ISBN を引数として渡す)
  ただし不完全.邦書は,これでほぼいけそう.洋書は第 2 引数に 01 (この数字以外にも) を指定する可能性.
  ちなみに著作権上の問題はグレーかも.

sub isbn_image {
    my ($k, $c) = @_;
    if ($c eq '') {
        $c = '09';
    }
    my $o = $k;
    $k =~ s/[^0-9a-zA-Z]//g;
    return qq(<img src="http://images-jp.amazon.com/images/P/$k.$c.MZZZZZZZ.jpg" />);
}