Windows 上の scp を使って,簡単にファイルを送る

  例えば,ある決まったディレクトリに定期的にファイルを scp する必要がある,
  つまりサイトの更新などでファイルを一定のディレクトリに scp する場合に
  WinSCP とか使っていちいち GUI でやるのが面倒な人むけ.

- まず,PuTTY のサイトから PSCP を落としてくる
  http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

  適当なディレクトリに,pscp.exe を展開しておく.

- バッチファイル (scp.bat)

@echo off

set pscp=c:\putty\pscp.exe
set user=username
set host=example.com
set dir=/home/username

:target
if ""%1""=="""" goto scp
set args=%args% %1
shift
goto target

:scp
%pscp% -l %user% %args% %host%:%dir%


  pscp のパス,ユーザ名,ホスト名,対象となるディレクトリ名を記入して保存する.

- 実行
  scp したいファイルをバッチファイルに,ドロップする.
  パスフレーズを求めるプロンプトがでるので,パスフレーズを入れると scp 開始.

 「送る」に入れておいてもいい.

- コマンドプロンプトが閉じてしまうのがいやだ
  このままだと scp が終わったときにコマンドプロンプトが閉じてしまうので,
  これがいやな場合は,上記バッチファイルの最終行を以下のように修正する

cmd /K %pscp% -l %user% %args% %host%:%dir%


- パスフレーズをいちいち打ち込むのが面倒
  -pw オプションをつけることで解決できますが,危ないので全くお勧めしません.

%pscp% -l %user% -pw passphrase %args% %host%:%dir%


- ちなみに UNIX 上ではというと
  csh/tcsh の場合は,以下のように alias を作っておくだけで OK.

alias   scpfoo  'scp !\* user@host:/path/to'


  bash/zsh の場合は,function とか作れば OK な気がする.

自サイトへのリンクをハイライトする Bookmarklet

javascript:(function(){var uri='http://cl.pocari.org/';var i,x;for(i=0;x=document.links[i];++i)if(x.href.indexOf(uri)==0)x.style.backgroundColor='yellow';})()


  自サイトへのリンクがどこにあるのか分からないときに.

- ref.: TokuLog!
  http://tokuhirom.dnsalias.org/~tokuhirom/tokulog/1071.html

Bookmarklet の文字数制限を無くす

  http://d.hatena.ne.jp/secondlife/20050503/1115085179

  Bookmarklet にはブラウザによって文字数制限があって,それを回避する方法.

javascript:(function(){var s=document.createElement("script");s.charset="UTF-8";
s.src="http://example.com/example.js";document.body.appendChild(s)})();


  これで,http://example.com/example.js を実行できる.すばらしい.
  問題は,リファラを送ってしまうことで,気にしなければ問題ない.

Sun(tm) Patch Check

  Patch Check で使う patchdiag.xref の場所が変わっていた

- patchdiag.xref
  http://patches.sun.com/reports/patchdiag.xref

- Sun(tm) Patch Check, Version 1.2
  http://jp.sunsolve.sun.com/pub-cgi/show.pl?target=patchk

- 下のようなスクリプトを書いてあげれば楽に使える.結果は result-{日時}.txt へ.

#!/bin/sh

# the OS version; this must be a SunOS number
os_ver=5.8

# the architecture of the system: sparc/i386
arch=i386

if [ -f patchdiag.xref ]
then
    rm patchdiag.xref
fi

wget http://patches.sun.com/reports/patchdiag.xref
showrev -p > showrev.txt
pkginfo -l > pkginfo.txt

now=`date '+%Y-%m-%d-%H-%M-%S'`
perl patchk.pl -x patchdiag.xref -p pkginfo.txt showrev.txt $os_ver $arch > result-$now.txt

PHP の sprintf() 関数の「引数の交換」と変換指定子の挙動

- フォーマット文字列を 2 重引用符 (") で指定した場合
  %1\$d のように「\」が必要

$format = "The %2\$s contains %1\$d monkeys";
printf($format, $num, $location);


- フォーマット文字列を「引用符 (')」で指定した場合
  %1$d のように「\」は不必要

$format = 'The %2$s contains %1$d monkeys';
printf($format, $num, $location);


- フォーマット文字列を「ヒアドキュメント」で指定した場合
  %1\$d のように「\」が必要

$format = <<<EOD
The %2\$s contains %1\$d monkeys
EOD;
printf($format, $num, $location);


- PHP: sprintf - Manual
  http://www.php.net/sprintf

preg_split について

- [PHP-users 24880] preg_splitについて
  http://ns1.php.gr.jp/pipermail/php-users/2005-March/025400.html

<?php
/*
* 前方に`\' が無い `,' で分割したい
*/
$dat = 'ab,cd,ef\,gh';

// OK
$dats = preg_split('/(?<!\x5C),/', $dat);
$dats = preg_split('/(?<!\\\\),/', $dat);
$dats = preg_split("/(?<!\\\\),/", $dat);

// NG - `Compilation failed: missing ) at offset'
$dats = preg_split('/(?<!\\),/', $dat);
$dats = preg_split("/(?<!\\),/", $dat);

print_r($dats); // 期待値: Array([0] => ab [1] => cd [2] => ef\,gh)
?>

CSS で印刷時に改ページする

- Paged media
  http://www.w3.org/TR/REC-CSS2/page.html#propdef-page-break-after

h1 { page-break-before: always; }


  とかやっておくと,H1 タグの前で改ページされる.

isset() は複数の引数を取れる

isset($a, $b, $c)


  と

isset($a) && isset($b) && isset($c)


  は等価.

  マニュアル見ると,

int isset ( mixed var )

  なるほど.知らなかった.
  ちなみに,unset() も複数の引数を取れるみたい.

- via: X *ole.net
  http://blog.xole.net/article.php?id=131

ChangeLog

  どうも,土曜日の更新が少ないような気がして調べてみた.
  ちなみに,chalow からソースぱくりまくり.

#!/usr/bin/env perl

use strict;
use Time::Local;

my $fname = shift;

open(F, $fname) || die "file open error $fname : $!";
binmode(F);
my %day;
while (<F>) {
    if (/^(\d{4}-\d\d-\d\d)/) {
        eval { $day{get_day_of_week($1)}++; };
    }
}
close F;

my @week = qw(Sun Mon Tue Wed Thu Fri Sat);
foreach (@week) {
    printf "%s (%d) %s\n", $_, $day{$_}, '*' x $day{$_};
}

sub get_day_of_week {
    my ($d, $m, $y) = @_;
    ($y, $m, $d) = split("-", $d) unless (defined $m);
    my $WEEKDAY = (localtime timelocal(0, 0, 0, $d, $m - 1, $y))[6];
    return qw(Sun Mon Tue Wed Thu Fri Sat)[$WEEKDAY];
}


- 結果: 予想通り

Sun (48) ************************************************
Mon (72) ************************************************************************
Tue (64) ****************************************************************
Wed (69) *********************************************************************
Thu (68) ********************************************************************
Fri (60) ************************************************************
Sat (30) ******************************

スタイルシートだけで,テーブルに Excel のようなスクロール機構を付加する

  http://d.hatena.ne.jp/hoso-kawa/20050115#1105797505

  テーブルを囲む div に

overflow: scroll;


  を設定して width,height で大きさを調節するだけ.なるほど.
  ヘッダもつける場合は,JavaScript で.

- via: cubic9.com
  http://cubic9.com/Blog/2005-01-19/#i22d59fb5