Memo
出典: やる気向上作戦
CPANによるoutdatedパッケージのアップデート
perl -MCPAN -e 'CPAN::Shell->install(CPAN::Shell->r)'
(61)Connection refused: connect to listener on 0.0.0.0:80
Apach2のログファイルに、こんなエラーが大量出現。 httpd.confの
Listen 80
を
Listen globalIPAddress:80
に変更することで解決。Jail環境特有の問題か?
nucleus on PHP5.0.5
- BLOG.php
- ADMIN.php
- install.php
に、Fatal error: Only variables can be passed by referenceを起こす場所が存在。
http://forum.nucleuscms.org/viewtopic.php?t=7772&sid=3dc22c296ca6b43f3101b47684b8562f を参照。
PHP5.1, PHP5.0.5, PHP4.4.0 へのアップグレード時の注意点
- Fatal error: Only variables can be passed by reference が頻発!
- 引数参照渡しの関数に、別の関数の出力をそのまま渡したりすると起こる。
- 解決方法は、値を一旦変数に格納してから、引数参照渡しの関数に与えること。
MySQL4.1覚書
- client, mysqld, mysql, mysqldumpそれぞれに、default-chracter-set=utf8追加。
- 既存アプリとの互換性のために、mysqldに、init-connect=SET NAMES utf8追加。
NetGenesis OPTG5に割り当てられたWAN側IPアドレスを取得するスクリプト
#!/bin/sh
STATUSPAGE=`curl -s -s --user ユーザ名:パスワード http://192.168.0.1/jp/jp-pppoecontrol.html | nkf -e`
echo -n $STATUSPAGE | sed -e "s/.*取得した自IPアドレス<\/TD><TD>:<\/TD><TD>
\([[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\)<\/TD><\/TR>.*/\1/"
Antのxsltで「javax.xml.transform.TransformerConfigurationException: translet クラスXXXをロードできませんでした」なるエラーが出る場合
Xalan-JをダウンロードしてCLASSPATHを通す。
StreamTranscoderでcircular bufferがunderflowする場合
src/libtranscoder/transcurl.cppを修正。
cbuffer_init(XXX, chunkSize * 20); cbuffer_init(XXX, 8192 * 20);
と記述されている部分を探し(複数存在)、第二引数をより大きな値に変更 (chunkSize * 100など)。
Debian Sarge上のDCCホームディレクトリ
/var/lib/dccがホームディレクトリ。
spamassassinと併用する場合、/etc/spamassassin/local.cfに
dcc_home /var/lib/dcc
と記述
SQLite3.1.3をWindowsでコンパイル
コンパイルエラーはstrcasecmp()のせい。
if( strcasecmp(zTable,"sqlite_sequence")!=0 ){
fprintf(p->out, "%s;\n", zSql);
} else {
fprintf(p->out, "DELETE FROM sqlite_sequence;\n");
}
を
if( _stricmp(zTable,"sqlite_sequence")!=0 ){
fprintf(p->out, "%s;\n", zSql);
} else {
fprintf(p->out, "DELETE FROM sqlite_sequence;\n");
}
に(VCの場合)。_stricmp()がない場合はsqlite3StrICmpを参考にするべし
スレッドセーフなUTCとローカル時刻の差(バイアス)の取得
UN*Xでは一般に、以下のようなテクニックが知られている。
time_t t;
struct tm tmlocal, tmutc;
time(&t);
return (
(long long)mktime(gmtime_r(&t, &tmutc))
- (long long)mktime(localtime_r(&t, &tmlocal))
);
ところが、Windowsではgmtime、localtimeのスレッドセーフ版がないため、上記テクニックを使えない。
※ 2005/2/15追記 上は全くの嘘です。少なくとも、VCのマルチスレッド版ランタイムを リンクすれば、localtimeもgmtimeもスレッドセーフ版の関数にすりかわります。
Win32APIを叩けばこんな感じで算出可能。
TIME_ZONE_INFORMATION tzinfo;
memset(&tzinfo, 0, sizeof(tzinfo));
DWORD dwResult = GetTimeZoneInformation(&tzinfo);
if (TIME_ZONE_ID_DAYLIGHT == dwResult) {
return (long long)(tzinfo.Bias+tzinfo.DaylightBias) * 60;
} else {
return (long long)(tzinfo.Bias+tzinfo.StandardBias) * 60;
}
lvをServices for UN*X 3.5でビルド
- ./configure
- MakefileのCFLAGSから、-DHAVE_SIGVEC を削除
- console.c の、line 425~427をさっくり削除。具体的には以下三行
ttyNew.c_cc[ VDISCARD ] = -1; ttyNew.c_cc[ VMIN ] = 1; ttyNew.c_cc[ VTIME ] = 0;
- make
SFUのLANGは標準的な形式でないため、lvが漢字をまともに表示してくれない。
alias lv='LANG=ja_JP.SJIS lv -Os'
なるエイリアスを定義しておくと便利。
Content-EncodingがgzipのHTTPメッセージボディを、Zlibでデコードする手順
gzio.c内に参考となるコードあり。 大まかな手順としては、
- zipのヘッダをスキップ(gzio.cのcheck_header参照)
- inflateInit2のwindowBitsに負の値を与えて呼び出す(deflateヘッダのパースをスキップする)
- は普通にinflateでデコード
プログラム内から起動したプロセスのstdinにデータを流す手順
- STARTUPINFOに、STARTF_USESTDHANDLESを指定する
- CreatePipeで作成するプロセスのstdout, stderr, stdinに接続するパイプを作る
- STARTUPINFOの、hStdInput, hStdOutput, hStdErrorに上記ハンドルを入れる。
- CreateProcess関数を、bInheritHandles=TRUEで呼び出す
- パイプを使って、入出力を行う
- (重要)nkfやchasenなどの標準入力をバイナリモードに切り替えずに読み込むフィルタプログラムを起動する場合、必ず相手の標準入力に接続されたパイプに、0x1a(EOFコード)を書き込まなければならない。これをしないと、相手は入力の終端を検出できず、いつまでたっても終了しない。
- FlushFileBuffers関数を使って、バッファリングされているデータをフラッシュ
- DisconnectNamedPipeを呼び出し、パイプの接続を解除する
- CloseHandleでハンドルを後始末
MPEG4ip 0.9.9をWindowsでコンパイルする際の注意点-もう1.0がリリースされてるっての
- 開けないdspは改行文字がLF。CRLFに直すと開ける。
- VC6からVC7以降のプロジェクトファイルに変換した場合、Xvid_stに含まれるasmファイルのカスタムビルドステップコマンドラインが不正になる。-o の後のダブルクォーテーションを修正せよ。また、nasm.exeにオプション→VC++ディレクトリ→実行可能ファイルでパスを通せ。
- SDLのdx5audio.cに、パッチマージ時のゴミが一箇所ある。エラー行の末尾の+以降。消すべきなのかどうかは判断つかず。
- ISO MPEG4エンコーダのストリーム関連ヘッダが古い形式。#include <iostream.h>等を#include <iostream> に変更し、using namespace std;を追加すべし。
TCHARと_TCHARについて
TCHARは、windows.hで定義され、プリプロセッサシンボル UNICODE が定義されている場合は WCHAR, 定義されていない場合は CHAR にマップされる。 同じく window.h にて、LPCTSTR, LPTSTR が、それぞれ const TCHAR*, TCHAR* として定義されている。
一方_TCHARは tchar.h で定義され、プリプロセッサシンボル _UNICODE が定義されている場合は wchar_t, 定義されていない場合は char にマップされる。
一般に TCHAR はWin32 APIで用いられ、_TCHARは Microsoft C Runtime Libraryで用いられることに注意。プログラムをユニコード環境でコンパイルする場合は、あらかじめ文字型をWCHAR, wchar_tに統一するか、あるいは UNICODE, _UNICODEの両方を定義することが望ましい。
