Flickr related Tag Browser / imgSeek

Flickr related Tag Browser

Flickr Related Tag Browser

imgSeek

imgSeek

手書きの絵から近い画像を検索してくれるらしい。

最終更新時刻: 2008年10月24日

[PHP] PHP 4.3.xと4.4.xの互換性問題 / ThinkPad X31 再セットアップ

PHP 4.3.xと4.4.xの互換性問題

あと「[PHP-users 26144] Referenceの仕様変更」より

"string"

array('a','b')

の様に定義した場合、「定数」としてコンパイルされます。

return 定数;

とした場合、定数としてコンパイルされた値を参照できてしまったため メモリ破壊が発生していました。このバグを修正したのが今回の修正で す。

今までこの手のコードを書いた場合、メモリ破壊してそれっぽい動作をしてたけど、4.4.0からはエラーが出るようになったという話でいいのかな?

ThinkPad X31 再セットアップ

先日やったばかりだけど、どうにも調子が悪い。また初期状態に戻した。

最終更新時刻: 2008年11月08日

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」をインストール。

最終更新時刻: 2008年10月30日

容量が増えて中身も増えた / [programming]EPSファイルのTIFFプレビューを取り出す

容量が増えて中身も増えた

現在の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っていうのが気になる。最近のアプリケーションの肥大化は酷すぎると思う。

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);
}
最終更新時刻: 2008年10月31日

伝える能力 / [book][wish]ピープルウエア 第2版 − ヤル気こそプロジェクト成功の鍵 / Deskloops / HTMLでWYSIWYG / ギリシャ文字の筆順 / 4つ目の言語「FORTH」 / SFA、CRM

伝える能力

今日は普段あまりやらないことをやった。

  • プレゼン
  • 会議
  • 議事録

先週までにやってきたことを会議用の資料としてまとめて、それに沿って説明する。また、考えていることを発言して最後は議事録の作成。

それらを通して、今後の課題として一番大きいのは「伝える」能力の向上と改めて実感。「伝える」事に関して、文章にしても話にしても周りは目上の方ばかりだったので学ぶことが多かった。

自分の考えを、より「明快に」伝えることはこの職業(システム関係)にとって特に重要であると思う。

それは、システムという曖昧なものを、図や文章を使って文書化し様々な立場、知識レベルの人に説明せねばならないからだ。お客さんとエンジニアの間に入って仲介をする場合、お客さんには業務的な立場でユーザレベルの話をして、エンジニアには作る側の立場でシステムレベルの話をしなければならない。もちろん齟齬のないように。

そうなってくると、もうドキュメントなし(「すべては自分の頭の中にある」状態)の、口頭で意識合わせは絶対無理。正直ドキュメント作成は苦手だし嫌いではあるが、そういったドキュメントを作る能力は養っておきたい。それに会議や打ち合わせの際の説明力。

奇しくも参加者の一人が「ピープルウェア」を持ってきていた。それによると、「プロジェクトの問題の多くはコミュニケーション不全による」とか。今まではプログラマ視点の本しか読んでこなかったけど、これからはプロマネ/SE視点の読み物も読んだほうがいいかも。

ピープルウエア 第2版 − ヤル気こそプロジェクト成功の鍵

ピープルウエア 第2版 - ヤル気こそプロジェクト成功の鍵(トム・デマルコ/ティモシー・リスター/松原 友夫/山浦 恒央)

プロジェクトには、「人」「モノ」「金」「時間」が関わる。システムの定義は曖昧ではあるが、自分は「モノ」+「人」がシステムではないかと思う。「モノ」を細かくすると「ハードウェア」と「ソフトウェア」。

「金」と「時間」は今のところ自分が考える立場にいない。今まで「モノ」にべったりだった自分としては、「人」にフォーカスしたこの本は是非読みたい。

Deskloops

Deskloops

http://www.deskloops.com/

デスクトップ上のウィンドウを輪のように表示。

via 百式 - わかりやすい位置 (Deskloops.com)

HTMLでWYSIWYG

FCKeditor - The text editor for Internet

昔見たときは、「IEでしか動かないんじゃないの?」と思っていたんだけど、こいつはIE,Geckoで動くらしい。

ギリシャ文字の筆順

Gallery of Mathematics

4つ目の言語「FORTH」

PostScriptの名前の由来について話をしていたときに出てきた言語。

PostScriptは言語が後置記法であるため、そう名づけられたらしい。同じ後置記法の言語(スタック言語)としてはFORTHがある。これらスタック言語は、構文解析が必要ないため処理系の実装がシンプルで高速。そのため組み込み用途に向いている。

FORTH - Wikipedia

恥ずかしながら初めて聞く言語の名前。「forthの名の由来はアセンブラ、FORTRAN、BASIC に続く4番目の言語」であるらしいが、言語の系統樹や年表にも出てこないことが多いのではないだろうか。

SFA、CRM

SFAは営業支援ツール、CRMは顧客管理システム、でいいのかな。いわゆる業務システムに関わりそうなのでメモ。

最終更新時刻: 2008年11月05日

Visual C++ 2005 Express Editionをセットアップ / メモを取る

Visual C++ 2005 Express Editionをセットアップ

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

メモを取る

最近あちこちに移動したり予定が入ったりで、覚えることが多くなってきた。

いつ何をするのか、メモを取ることを習慣づけないと。

最終更新時刻: 2008年10月27日


オープンソースソフトウェアにとっての出版業界への参入機会 / Analog インストールメモ(Debian GNU/Linux)

オープンソースソフトウェアにとっての出版業界への参入機会

japan.linux.com | オープンソースソフトウェアにとっての出版業界への参入機会

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
最終更新時刻: 2008年10月31日

TOMOYO Linuxの作者の方が/.Jに降臨してる / Google Analyticsに申し込んだ / 1つのファイルを複数コピー

TOMOYO Linuxの作者の方が/.Jに降臨してる

スラッシュドット ジャパン | TOMOYO Linux Ver.1.0 Released

WindKnightさんの

担当者の名前が「原田」なのだから、もう一つ納得できますね。(笑)

を読んだ後、その下のharadatsさんの書き込み

TOMOYO Linuxの実装上の最大のポイントはLinuxのtask構造体を活用している点にあります。

....以下略

ん?中の人?IDもharadatsさんだし...と思ってharadatsさんのユーザー情報を見たらやっぱりそうでした。

Google Analyticsに申し込んだ

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

窓の杜 - 【今日のお気に入り】ファイルのクローンを一括作成「RenameCopyTool」v1.0.0

最終更新時刻: 2008年09月02日

Google Analytics(2) / PS, EPS, AI, PDFの関係

Google Analytics(2)

レポート

レポートが表示された。

グラフがFlashで表示されたりして面白い。

PS, EPS, AI, PDFの関係

PostScript, EPS, PDF, AI ... ahhhh, what's the difference? -- The PowerPoint FAQ

PostScriptフォーマットの亜種であるEPS、AI、PDFのそれぞれのフォーマットについて特徴と違いがまとめられている。

最終更新時刻: 2008年10月30日

「無理言わない上司」ってホントにやさしくて人気者?

「無理言わない上司」ってホントにやさしくて人気者?/Tech総研

「オレはやさしいから」なんていって、納期の設定を避ける上司さん。ひょっとするとそんな人は、そもそも作業量を正確に推し量ること自体ができない人なのかもしれません。しれません……というか、多いよね、こんな人。だから丸投げして「任せた」で済ませちゃうんだろうなぁ。

自分も作業分担して手伝ってもらうときには「任せた」になっちゃうことがある。忙しくて作業量を見積もる時間がなければ、まず相手に見積もってもらうのがベター。 その上で予想より大きくはずれる場合は再度検討。

最終更新時刻: 2008年04月25日

初心者にC言語を教える

バイトの学生にC言語を教えることになったので、役に立ちそうな書籍をメモ。

C for UNIX―システムコールの基礎と応用(小俣 光之)

エキスパートCプログラミング―知られざるCの深層 (Ascii books)(ピーター ヴァン・デ・リンデン/Peter van der Linden/梅原 系)

「エキスパートCプログラミング」は初心者には難しいかも知れないが、実際の業務では知ってないといけないことが書いてあるので紹介した。

「C for UNIX」はプログラミングの始め方から書いてあるので紹介する予定。順番が逆になってしまったが。

課題はごく簡単なラインエディタの実装。

最終更新時刻: 2008年11月09日

[profile] プログラミング言語 / GPL Ghostscript 8.15 解析開始

プログラミング言語

仕事で使える/使ったことがある。

  • 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
最終更新時刻: 2008年10月28日

Windows用のフォルダ同期ソフト RealSync

Windows版rsyncみたいなのを探していて教えてもらったソフト。

最終更新時刻: 2008年11月09日

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
最終更新時刻: 2008年07月14日

そうだ、京都へ行こう

京都に来ますた。

高速には乗らずにずっと下道で。

最終更新時刻: 2009年01月11日

京都嵐山散策 / お土産

京都嵐山散策

渡月橋(とげつきょう)

渡月橋

常寂光寺(じょうしゃくこうじ)

常寂光寺

最終更新時刻: 2008年07月15日

トランスルーセントカレンダーがたまに隠れる / 「太った?」

トランスルーセントカレンダーがたまに隠れる

トランスルーセントカレンダーを使っていると、たまに他のウインドウに隠れてしまうことがある。最近は手放せないツールになってきているので、作者の方に掲示板で質問した。

本来ならばトランスルーセントカレンダーはTopmostに設定されているはずだが、何らかの原因でTopmostでなくなってしまうらしい。

「画面・電源管理」のメニューから、「1分ごとに位置を記憶」にチェックマークをつけて有効にすることで、後ろに隠れても戻ってきてくれるようになる。

「太った?」

「太った?」と最近よく聞かれる。「丸くなった?」とか。

今日はほぼ1年ぶりに会った人から、先週はほぼ毎日顔をあわせている会社の先輩から、美容院へ行くと美容師の人から。

このまま忘年会シーズンに突入すると取り返しがつかなくなってしまう。また水泳始めよう。

最終更新時刻: 2007年04月20日