2009/04/08

Zebra 6 発売開始

2009年3月31日から「個人データ管理システム Zebra 」のバージョン6の販売を開始しました。

今回のバージョンでは .NetFramework3.5 に対応し、Vista でも動作が可能になっています。また Microsoft Chart Controls を採用し、分析機能の見栄えも向上しています。

機能制限のない評価版を用意しています。この機会にぜひお試しください。

http://www.shimamuraworks.com/

2008/10/06

Windows PowerShell で vi

コマンドプロンプトじゃ、どうもいまいち。かと言ってUnix 系を立ち上げるのも面倒で・・・

Windows PowerShell をインストールしたんですが、エディタが無いということで Windows 用の vi を使えるようにしました。

ここから、Windows 用の Vim をダウンロード
http://www.kaoriya.net/

解凍して、適当な場所に配置。
C:\Program Files\vim71\vim.exe その他一式

設定ファイルの編集
C:\Documents and Settings\[ユーザ名]\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

このファイルに以下を追記
Set-Alias vi 'C:\Program Files\vim71\vim.exe'

Windows PowerShell の実行ポリシーを変更
Set-ExecutionPolicy RemoteSigned

最後のポリシー変更が分からなくてちょっと苦労しました。

2008/01/06

Apache vs Skype

開発環境をいじっていて思わぬところで躓いてしまいました。

PHP を 4 から 5 に上げよう。そうだ、Apache も 2.2 にしよう。と、あれこれいじりだしたのですが、Apache を入れなおしたところで Apache が起動しなくなってしまいました。

イベントを見てみると

(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。 : make_sock: could not bind to address 0.0.0.0:80

んーー、IIS は動いていないし・・・

コマンドプロンプトから netstat -a -b とかやってみると、ヲイヲイ、Skype が http を握っているではありませんか。

で、Skype のページで解説がありました。

http://support.skype.com/?_a=knowledgebase&_j=questiondetails&_i=528

ようは、Skype の設定変更で逃げられるよ、ということで。

2007/10/04

覚え書

忘れないために貼っておきます。


2007/09/08

Delphi for PHP

Borland ( CodeGear ) から Delphi for PHP が発売されています。 Update も 2 まで進んで動作もだいぶ安定してきました。ただ、まだ EUC-JP ではうまくコードが書けないみたいです。UTF-8 なら問題ないのですが過去のシステムに組み込むことができないのがちょっと残念です。

さて、久々にはまった問題は Delphi for PHP から。

ボタンをクリックして別のページを表示させるとき JavaScript で動作させたい場合は次のようになります。


function Button1JSClick($sender, $params)
{
if (extension_loaded("http"))
{
http_redirect('unit2.php');
}
else
{
?>
//document.forms[0].action = 'unit2.php';
//document.forms[0].submit;
window.open("unit2.php");
}
?>
//Add your javascript code here
}
}

これを「デバック付」で実行させると、ボタンをクリックして、次のページを表示した後、自分自身が空白のページになってしまいます。reload() を追加してみたり、あれこれしたのですがダメでした。で、ふと思って「デバッグなし」で実行させてみると、あら不思議、ちゃんと表示されています。

調べるパワーがない自分が情けないのですが、注意その一ということにしておきます。

2006/12/20

PHP file_exists() と is_file()

ファイルの存在確認には file_exists() を良く使います。が、これはファイル、もしくはディレクトリがあれば true を返すという関数です。で、またはまったのですが。

$chech_file = $my_dir . "/" . $my_file;
if (file_exists($check_file))....

とすると $my_file が指定されていなくても $my_dir は存在しているので答えは true になってしまいます。このときは

if (is_file($check_file))....

とすれば false が返ってきます。

2006/12/17

PHP mojavi + smarty + calendar

フレームワークの mojavi と、テンプレートの smarty、そして PEAR の Calendar を利用してカレンダーを書くことに挑戦。

ディレクトリは以下のようになります。

home_directory
+ mojavi
+ lib
+ opt
+ Calendar
+ Decorator
+ Engine
+ Month
+ Table
+ Util
+ smarty
+ internals
+ plugins
+ public_html
+ webapp
+ modules
+ MyCalender
+ actions
- YoteihyouAction.class.php
+ templates
- yoteihyou.tpl
+ views
- YoteihyouView_success.class.php

YoteihyouAction.class.php ファイル

<?php
require_once(OPT_DIR . 'Calendar/Month/Weekdays.php');
class YoteihyouAction extends Action
{
function execute (&$controller, &$request, &$user)
{
$year = 2006;
$month = 12;

$calendar = new Calendar_Month_Weekdays($year,$month,0);
$calendar->build();

$week = 0;
while ($day = $calendar->fetch()) {
$the_day = array();
$the_day['bgcolor'] = "#FFFFFF";
if ($day->isFirst()) {
$the_day['bgcolor'] = "#FFCCFF";
$week++;
} else if ($day->isLast()) {
$the_day['bgcolor'] = "#B3E7FF";
}

if ($day->isEmpty())
{
$the_day['day'] = " ";
} else {
$the_day['day'] = $day->thisDay();
}
$calendar_list[$week][$day->thisDay()] = $the_day;
}

$request->setAttribute('calendar_list', $calendar_list);
$request->setAttribute('year', $year);
$request->setAttribute('month', $month);

return VIEW_SUCCESS;
}
}
?>

YoteihyouView_success.class.php ファイル

<?php
require_once(LIB_DIR . 'CustomSmartyRenderer.class.php');
class YoteihyouView extends View
{
function & execute (&$controller, &$request, &$user)
{
$renderer =& new CustomSmartyRenderer ($controller, $request, $user);
$renderer->setTemplate('yoteihyou.tpl');
$renderer->setAttribute('year', $request->getAttribute('year'));
$renderer->setAttribute('month', $request->getAttribute('month'));
$renderer->setAttribute('calendar_list', $request->getAttribute('calendar_list'));

return $renderer;
}
}
?>

yoteihyou.tpl ファイル

<head>
<meta equiv="Content-Type" content="text/html; charset=euc-jp">
<meta equiv="Content-Language" content="ja">
<title>新しいページ</title>
</head>
<body>

<table border="0" cellpadding="2" cellspacing="0">
<caption>{$year} 年 {$month} 月</caption>
<tr>
<th align="center"><span style="color:#FF0000;">日</span></th>
<th align="center">月</th>
<th align="center">火</th>
<th align="center">水</th>
<th align="center">木</th>
<th align="center">金</th>
<th align="center"><span style="color:#0000FF;">土</span></th>
</tr>
{foreach from=$calendar_list key=week item=values}
<tr>
{foreach from=$values key=day item=the_day}
<td bgcolor="{$the_day.bgcolor}" align="right">
{$the_day.day}
</td>
{/foreach}
</tr>
{/foreach}
</table>

</body>
</html>

2006/11/21

日本PostgreSQLユーザ会九州支部セミナー

11月20日に久しぶりにセミナーが開かれることになり、私も参加してきました。

PostgreSQL のバージョン8.2のお披露目第一号になる予定だったそうですが、残念ながらリリースが延びてしまい、予告編と言うことになってしまいました。それでも新機能については「石井達夫」氏が自ら解説されて大変充実したものとなりました。

その後の懇親会も和気藹々とした雰囲気の中で、技術的な話から失敗談までいろいろな話題で盛り上がっていました。私はと言えば、頓珍漢なことを言ってせっかくの話に水をさしてばかりで、皆様には迷惑ばかりをかけていたようです。

ここしばらく、この手の集まりに参加してなかったのですがやっぱり良いものです。これからも積極的に参加していきたいと思っています。

2006/11/16

pgAdmin III を使っての作業

コマンドラインから、カチャカチャするのに比べたらものすごく楽です。

で、またハマッタ話。 (こればっかり)

pgAdmin III を立ち上げると、まずどのサーバに接続するかを選択します。このときにきちんと目的の利用者でオープンすれば何のことはないのですが、ついつい手を抜いてデータベース管理者の権限でオープンしてしまいます。同一サーバ内の別のデータベースが気軽にのぞけてしまうので、なかなかやめられません。

が、ここで「クエリーツール」を呼び出して create table とかをしてしまうと、テーブルの所有者がデータベース管理者になってしまいます。当然です。で、ここでアプリケーションから接続するとどうなるか。利用者が違うので当然今作ったテーブルにはアクセスできません。あ~~。しかしここであせってしまうわけです。プログラムを見直してもどこもおかしくないのに、テーブルからデータが取得できない・・・

半年ぐらい前にもハマッテしまったということは内緒です。

2006/10/27

GetShortPathName

長いファイル名を短いファイル名に変換します。

.Net にはこの変換手続きがないので kernel32.dll を使います。こんな感じ。

[DllImport("kernel32.dll")]
extern static int GetShortPathName(string s1, StringBuilder s2, int i1) ;

public static string Long2Short(string long_pass)
{
StringBuilder short_pass = new StringBuilder(260);
System.Diagnostics.Process process = new System.Diagnostics.Process();
GetShortPathName(long_pass, short_pass, short_pass.Capacity) ;

return short_pass.ToString();
}


で、戻り値に注意しないといけないのですが、実はこの関数は実在するファイル・ディレクトリしか変換してくれないんですね。ということは実在しないファイルを指定するとどうなるか、空が帰ってきます。

これで、はまってしまいました。 fileOpen のときは問題ないのですが fileSave のとき新規に保存しようとすると処理に失敗してしまいます。調べてみるとまだ存在しないファイルなので変換が行われずコケていたと言う落ちでした。

2006/09/29

買いたい本

ちょっと懐が、でも欲しい。
忘れないために張っておきます。

2006/09/19

Zebra5 機能限定版の公開開始

Zebra5 の機能限定版を新たに作りました。今までの Zebra5 を「フル機能版」と位置づけて、それに対して機能限定版とし、価格も大幅に引き下げてお求めやすい物としました。

小規模事業所などで Zebra5 を利用する人が限られているような場合や、運用で十分セキュリティを確保できるようなお客様に、簡単に設定できて簡単に運用できるようになりました。

基本構成は「 Zebra5 PostgreSQL Windows 版同梱」 と同じですが、Zebra5 にいくつかの機能制限が設けられています。
  • 利用者管理機能を省略
    利用者ごとにレベルわけをして閲覧・変更の権限を与える機能がなくなり、全ての利用者が全ての機能を利用できるようになりました。
  • ログ(操作記録)の作成を省略

  • 自由に設計できる表8枚を省略
    表名・項目名は自由に設定変更ができますので、未使用の項目があればそれを割り当てることができます。
  • 運用形態は Windows マシンに全てをインストールするスタイルのみ
    ネットワーク関連の設定が省略されています。

  • そのほかの機能(自由に設計できる帳票、全ての項目が対象となる検索機能、項目同士の四則演算機能、分析機能など)は、フル機能版と同様に利用することができます。

    価格は税込みで¥50,400です。

    島村製作所のホームページからダウンロードできます。
    http://www.shimamuraworks.com/

    2006/09/08

    Zebra5 PostgreSQL 同梱版の公開開始

    Zebra5 のインストールセットに PostgreSQL Windows 版を同梱したバージョンの公開を開始しました。


    今まではクライアントアプリケーションプログラムである Zebra5 と、データベースソフトである PostgreSQL を別々にダウンロードしてきて、別々にインストールする必要がありました。しかしこれではコンピュータに詳しくない方々にはちょっと敷居が高く感じられたようです。

    そこで、新しいバージョンからは今までどおりのインストール方法に加えて、PostgreSQL も同時にインストールでき、途中の設定を省いたバージョンを提供することになりました。これでインストールすれば今までの手間が大幅に省略できます。現場の担当者の方でも試しにインストールしてみることが簡単にできるようになりました。

    是非お試しください。

    ホームページ
    http://www.shimamuraworks.com/

    ダウンロードページ
    http://www.shimamuraworks.com/computer/application/zebra/download.html

    2006/08/11

    DataSet WriteXML ReadXML

    データベースにある特定のデータを自由に入れ替えできるようにと思い、DataSet の WriteXML と ReadXML を使ってあれこれしていたのですが、はまってしまいました。

    数字項目と、文字項目だけからなるテーブルであれば単純に

     dataSet1.WriteXml(filename);

    と、

     dataSet1.ReadXml(filename);
     dataAdapter1.Update(dataSet1);

    で読み書きができてしまいます。しかしこれに Boolean の項目が追加されたところでハマッテしまいました。タイミング悪くひとつの DataSet に複数のテーブルを登録した場合と被ってしまって、問題の切り分けに丸一日かかってしまいました。

    で、解決策は『「スキーマ」も一緒に書き出しておく』でした。書き出し時に

     dataSet1.WriteXml(filename, XmlWriteMode.WriteSchema);

    としておくことで、スキーマ情報が付加された XML ファイルが生成されます。これを読み込めば Boolean 項目があってもすんなりと通ります。

    2006/08/05

    Zebra5 Beta 公開開始

    オリジナルパッケージソフト「個人データ管理システム Zebra5」β版の公開を開始しました。

    今回のバージョンアップの目玉はなんと言っても .Net に対応したことと、データベースソフトを採用したことです。今まではコンピュータの性能などの理由でデータを独自に管理してきました。しかしコンピュータの性能も上がり、ネットワークが当たり前になり、フリーで高性能のデータベースが登場してきたからにはこれを採用しない手はありません。採用したデータベースは PostgreSQL です。 日本語環境での絶大な支持を得ています。Windows ネイティブで動作するバージョンも安定してきたので大丈夫だと思います。

    そしてなんといっても最大の変更点は .Net Framework に対応したことです。開発言語も思い切って C# で一から書き直しました。今までは Delphi を開発言語にしていましたが、ここ数年 Delphi はちょっと元気がありません。情報も不足気味です。C# はまだ生まれてから日が浅いですが、後発の利点でかなり使いやすくなっています。

    ちょっと言い訳。プログラムを一から書き直したので、旧バージョンの機能を完全にカバーし切れていません。これからどんどん追加していく予定です。基本機能(全ての項目で検索ができること、帳票が自由に設計できること)は、押さえていますので公開に踏み切りました。

    どうか試してみてください。

    http://www.shimamuraworks.com/

    2006/07/25

    イメージの表示

    C# で PostgreSQL にラージオブジェクトとしてイメージを登録・表示する方法です。

    Npgsql のヘルプにはファイルからイメージを読み取ってデータベースへ登録したり、データベースからファイルに書き出す方法は書いてありますが、データベースから直接 PictureBox にデータを流し込む方法が書いてありません。 以下のようにすると直接流し込めます。

    NpgsqlTransaction transaction = myConnection.BeginTransaction();
    LargeObjectManager lom = new LargeObjectManager(myConnection);

    LargeObject lo = lom.Open(oid, LargeObjectManager.READWRITE);

    Byte[] byteBLOBData = new Byte[0];
    byteBLOBData = lo.Read(lo.Size());
    MemoryStream stmBLOBData = new MemoryStream(byteBLOBData);
    this.pictureBox1.Image = Image.FromStream(stmBLOBData);

    lo.Close();
    transaction.Commit();

    2006/07/03

    Npgsql

    Windows 上の C# から PostgreSQL に接続する方法はいくつかありますが、そのうちのひとつです。

    いままでは PgsqlCom を使っていたのですが、Windows 版の PostgreSQL をインストールしたら Npgsql のセットが一式入っていたのでこれで試してみました。

    順調にいっていたのですが日本語データを扱うところで躓いてしまいました。最初にコネクションを張らないといけないのですが、ここで Encoding の指定をしないといけません。PgsqlCom と同じ接続文字列だと日本語のところでこけていて、エラーメッセージに EUC_JP なんたらと出てまきす。あれこれ調べて Encoding にたどり着きました。

    同時に読み込ませる文字列も Encoding にあわせておく必要があります。C# からデータを流し込むときは文字コードが UNICODE なのですが、メモ帳などで作っただけだと ANSI になっていますので、こちらも UNICODE にしておく必要があります。

    実際には以下のような感じ

    NpgsqlConnection con = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=myuser;Database=mydb;Encoding=UNICODE;Password=mypass");

    あとは、その他のデータプロバイダと同じ感覚で利用できるのでアプリケーション側のスタイルが統一されてプログラムの見通しがよくなるでしょう、使いこなせれば…

    この接続文字列の Server を 192.168.1.1 のようにするとほかのサーバ ( FreeBSD など ) で稼動している PostgreSQL にも繋ぐことができます。C# 側で変更は発生しません、これは便利。

    いつもお世話になっているサイト
    http://www.postgresql.jp/

    2006/06/13

    Google Earth (Release 4 - BETA)

    見えてしまいました、自宅が・・・

    バージョン3では、低解像度で住宅地そのものがぼんやり見えているだけでしたが、こんどのは見えてますね、かなりはっきりと。データ自体がちょっと古いのが気になりますが、それでもここまで見えればたいしたものです。各国政府がやきもきするのもうなずけます。

    ゆくゆくはリアルタイムという話になるのでしょうが、情報やインフラを誰が握るのかで意味が違ってくるでしょう。いい方向に進むことを願います。

    http://earth.google.com/earth4.html

    2006/06/12

    PrintPreviewDialog

    いまさらながらに恥ずかしい話ですが、Visual Studio .new ver 2003 の C# で、印刷プレビューを表示した後、そのまま続けてプレビューウィンドウの左上にある印刷ボタンをクリックしても何にも印刷されない現象が起こります。

    でも、PrintDocument.Print() ではきちんと印刷されます。

    ん~~なんで。

    ネットを徘徊してもなかなか対処法が見つかりません。え、これって常識なの? まともな対処法は既知のことなの? と落ち込むことしばらく。やっと英語のサイトで正解を見つけました。

    なんでも、印刷用のデータが最後まで参照されてしまったから出てこないんだよ、ということで、OnBeginPrint でデータをさしているポインタを元に戻せばいいんだよ。と書いてありました。

    え~~そういう仕様なの・・・

    で、BeginPrint のタイミングでデータカウンタを「0」に戻せば、きれいに出てきました。
    でもこれって、どうだかなぁ。と思う仕様ですね。

    2006/05/17

    FreeBSD 6.1 で ssl 接続

    データベースサーバマシンを構築する必要が出てきたので、インストールのテストをやり始めました。

    といっても、インストールマシンを一台用意して・・・という作業も今は昔。Microsoft Virtual PC 様さまです。iso イメージファイルを直接 CD ドライブとしてマウントできるので CD を焼く必要もありません。何度でも手軽にやり直すことができます。微妙に設定を変えたマシンを何台も用意することもできます。ありがたいものです。

    で、本題。

    リモートから UTF-8 TeraTerm Pro で接続しようとしたら、ログインのところで失敗してしまいます。FreeBSD 4.11 のときは素直にインストールして、どこも設定をいじらずにリモートから ssh ログインできていたのですが、今回は全然駄目です。あれこれ調べたら(本当は、聞いてまわったら) ssh の既定値が変わっているとのこと、早速教えてもらったとおりに変更したらすんなりと繋がりました。

    /etc/ssh/sshd_config ファイル中の PasswordAuthentication を yes にする。

    これで、今まで通りの接続ができます。

    また、この設定変更をしなくても TeraTerm の方でログインするときに
    Use plain password to log in
    ではなく
    Use challenge/response to log in(keyboard-interactive)
    を選択することでも接続することができます。

    が、知り合いからは PuTTY を使え!!とメールが来ました。ん~~、だって PuTTY 使ったことが無いんだもん・・・