2005-11-03(Thu) [長年日記]
_ [PHP]PHP 4.3.xと4.4.xの互換性問題
あと「[PHP-users 26144] Referenceの仕様変更」より
"string"
array('a','b')
の様に定義した場合、「定数」としてコンパイルされます。
return 定数;
とした場合、定数としてコンパイルされた値を参照できてしまったため メモリ破壊が発生していました。このバグを修正したのが今回の修正で す。
今までこの手のコードを書いた場合、メモリ破壊してそれっぽい動作をしてたけど、4.4.0からはエラーが出るようになったという話でいいのかな?
_ ThinkPad X31 再セットアップ
先日やったばかりだけど、どうにも調子が悪い。また初期状態に戻した。
2005-11-06(Sun) [長年日記]
_ Microsoft Windows Platform SDK をインストール
先日セットアップし直したのでPlatform SDKも再インストールする。
の前にVisual Studioをインストール。
- Visual Studio 6.0
- Visual Studio .NET 2003
とりあえずVC .NET 2003で使う「XPSP2 PSDK - August 2004 Edition」をインストール。最新版は「Windows Server 2003 SP1 Platform SDK - April 2005 Edition」だと思う。
VC 6.0ではいずれも使えないので、ちょっと古めの「Windows Server 2003 PSDK - February 2003 Edition」をインストール。
2005-11-07(Mon) [長年日記]
_ 容量が増えて中身も増えた
現在のThinkPad X31のHDD空き容量。
- Cドライブ(39.6GB)
- 使用領域 24.1GB
- 空き領域 15.5GB
- Dドライブ(31.8GB)
- 使用領域 18.0GB
- 空き領域 13.8GB
- 合計(71.4GB)
- 使用領域 42.1GB
- 空き領域 29.3
ついこの間、40GBのHDDを80GBにしたばかりで、しかも再セットアップして5日しかたってないのに、もう合計使用領域は40GBを突破。
データドライブであるDドライブが大きくなるのはしょうがないとしても、システム領域のCドライブの空き領域の減り方はどうかと。
Cドライブの中でも特にProgram Filesで10GBっていうのが気になる。最近のアプリケーションの肥大化は酷すぎると思う。
_ [programming]EPSファイルのTIFFプレビューを取り出す
TIFFプレビューが存在するEPSファイルから、TIFFプレビューを取り出す。
#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
void error(const char*);
typedef unsigned char uchar;
typedef unsigned int uint32;
struct EPSBinaryHeader{
uchar header[4];
uint32 ps_pos;
uint32 ps_length;
uint32 meta_pos;
uint32 meta_length;
uint32 tiff_pos;
uint32 tiff_length;
uint32 check_sum;
};
int main(int argc, char* argv[])
{
FILE* fp = NULL;
size_t read_length = 0;
struct EPSBinaryHeader header = {0};
char* ps_buf = NULL;
void* tiff_buf = NULL;
FILE* wfp = NULL;
const static uchar magic_header[4] = {0xc5, 0xd0, 0xd3, 0xc6};
char tiff_filename[256] = "";
if(argc < 2){
error("no input files.");
goto end;
}
fp = fopen(argv[1], "rb");
if(fp == NULL){
error("file open error!");
goto end;
}
// read header.
read_length = fread(header.header,
sizeof(header.header[0]),
sizeof(header.header),
fp);
if(read_length != sizeof(header.header)){
error("file size error!\n");
goto end;
}
if(memcmp(header.header, magic_header, sizeof(header.header)) != 0){
error("file header error!\n");
goto end;
}
// read PostScript.
fseek(fp, 4, SEEK_SET);
if(fread(&header.ps_pos, sizeof(header.ps_pos), 1, fp) == 0){
error("file header error!\n");
goto end;
}
if(fread(&header.ps_length, sizeof(header.ps_length), 1, fp) == 0){
error("file header error!\n");
goto end;
}
ps_buf = (char*)malloc(header.ps_length);
if(ps_buf == NULL){
error("memory alloc error!\n");
goto end;
}
fseek(fp, header.ps_pos, SEEK_SET);
read_length = fread(ps_buf, sizeof(char), header.ps_length, fp);
if(read_length != header.ps_length){
error("read PostScript error!\n");
goto end;
}
// read TIFF.
fseek(fp, 20, SEEK_SET);
if(fread(&header.tiff_pos, sizeof(header.tiff_pos), 1, fp) == 0){
error("read TIFF error!\n");
goto end;
}
if(fread(&header.tiff_length, sizeof(header.tiff_length), 1, fp) == 0){
error("read TIFF error!\n");
goto end;
}
tiff_buf = malloc(header.tiff_length);
if(tiff_buf == NULL){
error("memory alloc error!\n");
goto end;
}
fseek(fp, header.tiff_pos, SEEK_SET);
read_length = fread(tiff_buf, 1, header.tiff_length, fp);
if(read_length != header.tiff_length){
error("read TIFF error!\n");
goto end;
}
#ifdef WRITE_PS
// write PostScript.
wfp = fopen("output.eps", "wb");
if(wfp == NULL){
error("write EPS error!\n");
goto end;
}
if(fwrite(ps_buf, sizeof(char), header.ps_length, wfp)
!= header.ps_length){
error("write EPS error!\n");
goto end;
}
fclose(wfp);
#endif // WRITE_PS
// write TIFF.
strcpy(tiff_filename, argv[1]);
strcat(tiff_filename, ".tiff");
wfp = fopen(tiff_filename, "wb");
if(wfp == NULL){
error("write TIFF error!\n");
goto end;
}
if(fwrite(tiff_buf, 1, header.tiff_length, wfp) != header.tiff_length){
error("write TIFF error!\n");
goto end;
}
fclose(wfp);
end:
if(wfp != NULL){
fclose(wfp);
wfp = NULL;
}
if(fp != NULL){
fclose(fp);
fp = NULL;
}
if(ps_buf != NULL){
free(ps_buf);
ps_buf = NULL;
}
if(tiff_buf != NULL){
free(tiff_buf);
tiff_buf = NULL;
}
return 0;
}
void error(const char* msg)
{
fprintf(stderr, msg);
}
2005-11-08(Tue) [長年日記]
_ 伝える能力
今日は普段あまりやらないことをやった。
- プレゼン
- 会議
- 議事録
先週までにやってきたことを会議用の資料としてまとめて、それに沿って説明する。また、考えていることを発言して最後は議事録の作成。
それらを通して、今後の課題として一番大きいのは「伝える」能力の向上と改めて実感。「伝える」事に関して、文章にしても話にしても周りは目上の方ばかりだったので学ぶことが多かった。
自分の考えを、より「明快に」伝えることはこの職業(システム関係)にとって特に重要であると思う。
それは、システムという曖昧なものを、図や文章を使って文書化し様々な立場、知識レベルの人に説明せねばならないからだ。お客さんとエンジニアの間に入って仲介をする場合、お客さんには業務的な立場でユーザレベルの話をして、エンジニアには作る側の立場でシステムレベルの話をしなければならない。もちろん齟齬のないように。
そうなってくると、もうドキュメントなし(「すべては自分の頭の中にある」状態)の、口頭で意識合わせは絶対無理。正直ドキュメント作成は苦手だし嫌いではあるが、そういったドキュメントを作る能力は養っておきたい。それに会議や打ち合わせの際の説明力。
奇しくも参加者の一人が「ピープルウェア」を持ってきていた。それによると、「プロジェクトの問題の多くはコミュニケーション不全による」とか。今まではプログラマ視点の本しか読んでこなかったけど、これからはプロマネ/SE視点の読み物も読んだほうがいいかも。
_ [book][wish]ピープルウエア 第2版 − ヤル気こそプロジェクト成功の鍵
ピープルウエア 第2版 - ヤル気こそプロジェクト成功の鍵(トム・デマルコ/ティモシー・リスター/松原 友夫/山浦 恒央)
プロジェクトには、「人」「モノ」「金」「時間」が関わる。システムの定義は曖昧ではあるが、自分は「モノ」+「人」がシステムではないかと思う。「モノ」を細かくすると「ハードウェア」と「ソフトウェア」。
「金」と「時間」は今のところ自分が考える立場にいない。今まで「モノ」にべったりだった自分としては、「人」にフォーカスしたこの本は是非読みたい。
_ Deskloops
Deskloops
デスクトップ上のウィンドウを輪のように表示。
_ HTMLでWYSIWYG
FCKeditor - The text editor for Internet
昔見たときは、「IEでしか動かないんじゃないの?」と思っていたんだけど、こいつはIE,Geckoで動くらしい。
_ ギリシャ文字の筆順
_ 4つ目の言語「FORTH」
PostScriptの名前の由来について話をしていたときに出てきた言語。
PostScriptは言語が後置記法であるため、そう名づけられたらしい。同じ後置記法の言語(スタック言語)としてはFORTHがある。これらスタック言語は、構文解析が必要ないため処理系の実装がシンプルで高速。そのため組み込み用途に向いている。
恥ずかしながら初めて聞く言語の名前。「forthの名の由来はアセンブラ、FORTRAN、BASIC に続く4番目の言語」であるらしいが、言語の系統樹や年表にも出てこないことが多いのではないだろうか。
_ SFA、CRM
SFAは営業支援ツール、CRMは顧客管理システム、でいいのかな。いわゆる業務システムに関わりそうなのでメモ。
2005-11-09(Wed) [長年日記]
_ Visual C++ 2005 Express Editionをセットアップ
流行モノなので。
これで愛機ThinkPad X31にはVisual Studio 6.0/.NET 2003/2005が共存することになった。
6.0と2003が共存できることはMSのFAQでも明らかだけど2005についても調べてみたところ、サポートしていることが判った。
15. Will the Visual Studio Express Editions install side-by-side with other versions of Visual Studio?
Yes, side-by-side compatibility with other versions of Visual Studio has been tested.
http://msdn.microsoft.com/vstudio/express/support/faq/#compat
2005-11-12(Sat) [長年日記]
_ オープンソースソフトウェアにとっての出版業界への参入機会
_ Analog インストールメモ(Debian GNU/Linux)
Analogをインストール
apt-get install analog
ログを分割していなかったので日別に分割した。
apt-get install cronolog cd /usr/local/apache2/logs cronosplit --template "access_log.%Y%m%d" access_log
画像をコピー
cp /var/www/analog/* /var/www/htdocs/report/
/etc/analog.cfgを編集
LANGUAGE JAPANESE LOGFORMAT COMBINED LOGFILE /usr/local/apache2/logs/access_log.200511* OUTFILE /var/www/htdocs/report/index.html IMAGEDIR /report/ REFERRER ON DAILYREP ON REFREPEXCLUDE http://www.example.com/* REFFLOOR -100r
2005-11-15(Tue) [長年日記]
_ TOMOYO Linuxの作者の方が/.Jに降臨してる
スラッシュドット ジャパン | TOMOYO Linux Ver.1.0 Released
WindKnightさんの
担当者の名前が「原田」なのだから、もう一つ納得できますね。(笑)
を読んだ後、その下のharadatsさんの書き込み
TOMOYO Linuxの実装上の最大のポイントはLinuxのtask構造体を活用している点にあります。
....以下略
ん?中の人?IDもharadatsさんだし...と思ってharadatsさんのユーザー情報を見たらやっぱりそうでした。
_ Google Analyticsに申し込んだ
最初のレポートは12時間後らしい。
けど、やっぱりこの手のレポートはアクセス数の多いサイトの方が面白い。今のところ自分が管理してるサイトはここだけなのが残念。
_ 1つのファイルを複数コピー
1つのファイルから、連番のファイル名でコピーしたい。ワンライナーでできそうだし、そういうコマンドもありそう。
perlを使おうと思ったらインストールされてなかった。仕方なくVBScriptでやる。スマートではない。
Dim fs
Dim src
Dim num
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
num = 0
If WScript.Arguments.Unnamed.Count < 2 Then
WScript.Echo "引数が足りません."
WScript.Quit
End If
src = WScript.Arguments.Unnamed(0)
num = WScript.Arguments.Unnamed(1)
WScript.Echo num
For i = 1 To num Step 1
fso.CopyFile src, fso.GetBaseName(src) & "_" & CStr(i) & _
"." & fso.GetExtensionName(src)
Next
しかも作った後にググったらソフトもあった...orz
2005-11-16(Wed) [長年日記]
_ PS, EPS, AI, PDFの関係
PostScript, EPS, PDF, AI ... ahhhh, what's the difference? -- The PowerPoint FAQ
PostScriptフォーマットの亜種であるEPS、AI、PDFのそれぞれのフォーマットについて特徴と違いがまとめられている。
2005-11-17(Thu) [長年日記]
_ 「無理言わない上司」ってホントにやさしくて人気者?
「無理言わない上司」ってホントにやさしくて人気者?/Tech総研
「オレはやさしいから」なんていって、納期の設定を避ける上司さん。ひょっとするとそんな人は、そもそも作業量を正確に推し量ること自体ができない人なのかもしれません。しれません……というか、多いよね、こんな人。だから丸投げして「任せた」で済ませちゃうんだろうなぁ。
自分も作業分担して手伝ってもらうときには「任せた」になっちゃうことがある。忙しくて作業量を見積もる時間がなければ、まず相手に見積もってもらうのがベター。 その上で予想より大きくはずれる場合は再度検討。
2005-11-18(Fri) [長年日記]
_ 初心者にC言語を教える
バイトの学生にC言語を教えることになったので、役に立ちそうな書籍をメモ。
C for UNIX―システムコールの基礎と応用(小俣 光之)
エキスパートCプログラミング―知られざるCの深層 (Ascii books)(ピーター ヴァン・デ・リンデン/Peter van der Linden/梅原 系)
「エキスパートCプログラミング」は初心者には難しいかも知れないが、実際の業務では知ってないといけないことが書いてあるので紹介した。
「C for UNIX」はプログラミングの始め方から書いてあるので紹介する予定。順番が逆になってしまったが。
課題はごく簡単なラインエディタの実装。
2005-11-19(Sat) [長年日記]
_ [profile]プログラミング言語
仕事で使える/使ったことがある。
- C
- C++
- perl
- PHP
- BASIC(VB, BHT-BASIC, N88-BASIC)
- SQL
- ECMAScript
(※HTMLは言語ではないので含めない)
趣味で読んだ、または書いたことがある。
- アセンブリ言語(Z80限定で読んだことがある)
- Ruby(簡単なソースを読んで大筋を理解することができる)
- Java(デザパタの本のサンプルくらいは読むことができる)
ならべてみると多くはないし、ミーハーなので有名どころの言語しか知らない。ただしJavaをやってない。昔の言語でいうとFORTRAN、COBOL、PL/Iはやる気もない。LISPは趣味でならやりたい。
_ GPL Ghostscript 8.15 解析開始
まずはMakefileから。
msvc32.makからincludeしている.mak
- version.mak
- msvccmd.mak
- gs.mak
- lib.mak
- jpeg.mak
- zlib.mak
- libpng.mak
- jbig2.mak
- icclib.mak
- ijs.mak
- devs.mak
- contrib.mak
- winplat.mak
- pcwin.mak
- winlib.mak
- msvctail.mak
- winint.mak
- int.mak
- cfonts.mak
2005-11-24(Thu) [長年日記]
_ Apache 2.0.55/PHP 5.05をWindows XPにインストール
20050710#p01を参考に。
httpd.confの設定
LoadModule php5_module "D:\usr\local\php\php5apache2.dll" DocumentRoot "D:\home\htdocs" AddType application/x-httpd-php .php
2005-11-30(Wed) [長年日記]
_ トランスルーセントカレンダーがたまに隠れる
トランスルーセントカレンダーを使っていると、たまに他のウインドウに隠れてしまうことがある。最近は手放せないツールになってきているので、作者の方に掲示板で質問した。
本来ならばトランスルーセントカレンダーはTopmostに設定されているはずだが、何らかの原因でTopmostでなくなってしまうらしい。
「画面・電源管理」のメニューから、「1分ごとに位置を記憶」にチェックマークをつけて有効にすることで、後ろに隠れても戻ってきてくれるようになる。
_ 「太った?」
「太った?」と最近よく聞かれる。「丸くなった?」とか。
今日はほぼ1年ぶりに会った人から、先週はほぼ毎日顔をあわせている会社の先輩から、美容院へ行くと美容師の人から。
このまま忘年会シーズンに突入すると取り返しがつかなくなってしまう。また水泳始めよう。





ツッコミを含む