2010/07/23

SQLServer compact 3.5

Visual Studio 2008 で開発するとき、何も考えずにホイホイとテーブル作って、データの読み書きしてと、便利な機能。でも VS2008 からだとデータベースのバックアップやリカバリが出来なくて、「なんじゃ、やっぱり使えないじゃん」となりかけていたところ、ありました。世の中にはちゃんとありました。探し方が悪かっただけです。

http://exportsqlce.codeplex.com/
とか、
http://erikej.blogspot.com/2009/04/sqlcecmd-tutorial-part-one-managing.html
とか。

えーごですが、簡単な表現です。ちゃんと読んでいくと色々なツールが用意されていて、便利この上なし。

コマンドラインツールなんか、普通のデータベースと同じような感覚で使うことができます。これで精神的にゆとりが出来ました。じっくりと使いこなしていこうかな。

こんな感じ

MyDatabase.sdf からエクスポート。スキーマとデータの sql 文が db.sql に書き出されます。
>ExportSqlCE.exe "Data Source=C:\tmp\MyDatabase.sdf;" db.sql

別のデータベース abc.sdf を作成
>SqlCeCmd.exe -d "Data Source=C:\tmp\abc.sdf" -e create

そこへ、さっき書き出した sql 文を流し込みます。
>SqlCeCmd.exe -d "Data Source=C:\tmp\abc.sdf" -i db.sql

2010/07/12

Windows のシリアルポートで、はまりまくり

Windows のシリアルポートは、機器を接続すると自動的に番号を割り当ててくれます。USBシリアル変換ケーブルなどを使用すると、USBのソケットを代えただけで別の新しい機器が接続されたと認識されて、またまた、番号を割り当ててくれます。

これが本当にありがた迷惑。

ついには30番を突破することに。どうも20番あたりから接続が怪しかったのですが、ここに来てどうにもこうにもならなくなりました。デバイスマネージャには、何も繋がっていないのに「COM○ 使用中」などと表示されてしまいます。

プロパティで、強制的に違う番号に変更できるのですが、それにも限界がありました。

で、悩むこと半日。

やっと見つけました。
http://social.answers.microsoft.com/Forums/ja-JP/xphardwareja/thread/32cd879a-a2e8-46d8-a877-6751792990f1/

----------引用ここから----------
「マイコンピュータ」を右クリック⇒「プロパティ」を選択⇒「詳細設定」タブ⇒「環境変数」ボタン⇒「システム環境変数」の「新規」ボタンとクリックし、変数名に「DEVMGR_SHOW_NONPRESENT_DEVICES」と入力。変数値欄に「1」と入力して再起動します。

デバイスマネージャにて「表示」⇒「非表示のデバイスの表示」と選択すると、過去にインストールした全てのドライバが灰色表示されます。ここで USBの灰色部分を右クリック⇒「削除」を選択して1つずつ削除します。
----------引用ここまで----------

これですっきりしました。

【追記】

と思っていたら、たいした解決に至っていませんでした。デバイスマネージャから、特定のシリアルポートのデバイスを選択して、プロパティでCOMポート番号を変更しようと、ドロップダウンリストを開いてみたら「キャーッ」なんと、「使用中」の表示がズラズラ。

根本解決していません。

レジストリはいじりたくないよーっ。

2010/04/12

Ruby on Rails と PostgreSQL

RoR と PostgreSQL の話題はいっぱいありますが、ラージオブジェクトを扱ったものが少ないなぁと。
特に PostgreSQL8.4.x は全然見つかりません。で、仕方なく8.3でやっつけています。

以下、覚書。

>ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

>rails -v
Rails 2.3.5

>gem list --local
:
ruby-postgres (0.7.1.2006.04.06)
:

>psql --version
psql (PostgreSQL) 8.3.10

この組み合わせだと、以下のような感じでラージオブジェクトを扱うことができます。

モデルの中で

def uploaded_picture_01=(picture_field)
@tmp_picture = picture_field
if @tmp_picture.original_filename != ""
@tmp_filename_01 = "#{RAILS_ROOT}/public/tmp/#{@tmp_picture.original_filename}"
File.open(@tmp_filename_01, "wb") do |f|
f.write(@tmp_picture.read)
end
@skip_upload_01 = false
else
@skip_upload_01 = true
end
end

def before_save
if @skip_upload_01 == false
conn = connection.raw_connection

# 古いイメージの削除
if self.image_field?
conn.exec("BEGIN")
conn.lounlink(self.image_field.to_i)
conn.exec("END")
end

# 新しいイメージの登録
conn.exec("BEGIN")
@tmp_lo = conn.loimport(@tmp_filename_01)
conn.exec("END")
self.image_field = @tmp_lo.oid
end
end

コントローラで

def show_image
base_x = 640.0
base_y = 480.0
ii = params[:id].to_i
if ii > 0
begin
conn = ActiveRecord::Base.connection.raw_connection

conn.exec("BEGIN")
@tmp_lo = conn.loopen(ii)

img = Magick::Image.from_blob(@tmp_lo.read).shift
new_img = img.resize_to_fit(params[:w], params[:h])
send_data(new_img.to_blob, :disposition => "inline", :type => "image/jpeg")

conn.exec("END")
rescue
end
else
end
end

引数には表示させたいイメージの oid を渡します。

PostgreSQL8.3.x ではこれでうまく動いているのですが、8.4.x にしたとたんに動かなくなります。
まず、gem の ruby-postgres が 8.4.x には対応していないようで WEBrick の起動時点でこけてしまいます。これを回避するために別の gem を入れたのですが、ラージオブジェクトの表示の部分で引っかかってしまいました。登録はできるんですが、表示の部分のロジックがうまいこと走りません。

一日かけてあれこれいじってみたのですが諦めて 8.3.x に戻してしまいました。

でも、いずれは 8.4.x に対応しないといけないので、調査継続ということでお茶を濁します。

2009/11/07

メーラ情報の共有

メーラには Thunderbird を使っています。基本的に作業はデスクトップマシンで行っていますので、メーラもこのマシンにインストールされています。普通に事務所で作業している時はこれで何の問題も無いのですが、たまにノートを持って長時間外出することもあります。問題はこの時です。

今までは、デスクトップマシンの設定ファイル一式を、外出のたびにノートにコピーしていました。出先でメールを読み書きしたら、帰ってきてから今度はノートの設定ファイルをデスクトップに戻します。たまにならいいのですが、これが頻繁になってくるとものすごく億劫になってきます。で、ときどきコピー間違いなんかして。

複数のマシンのメーラの設定ファイルを同期させる方法はいろいろあるみたいで、どれがいいかと思っていたら、こんなの見つけてしまいました。いまさらですが Dropbox です。

題して「2台のマシンの Thunderbird を Dropbox で同期させる」

1台目はデスクトップです。Windows Vista Bussines SP2、Thunderbird 2.0.0.23
2代目はノートで、Windows XP Professional SP3、Thunderbird 2.0.0.23

Vista 編


まずは Dropbox から必要なソフトをダウンロードして Vista へインストールします。
すると C:\Users\<ユーザ名>\Documents\My Dropbox のように「My Dropbox」というフォルダが生成されます。
このフォルダの中に C:\Users\<ユーザ名>\AppData\Roaming の中にある Thunderbird フォルダを移動します。
次に、もともとあった場所に Thunderbird フォルダがあるように見せかけるためにシンボリックリンクを張ります。

管理者権限でコマンドプロンプトを開き、mklink コマンドを実行します。

>mklink /D "C:\Users\<ユーザ名>\AppData\Roaming\Thunderbird" "C:\Users\<ユーザ名>\Documents\My Dropbox\Thunderbird"

C:\Users\<ユーザ名>\AppData\Roaming へ移動して dir コマンドで見るとこんな風になります。

2009/11/07 15:50 Thunderbird [C:\Users\<ユーザ名>\Documents\My Dropbox\Thunderbird]

Thunderbird を起動して動作確認をします。

XP 編


さてさてノートの方ですが、Dropbox からクライアントソフトをダウンロードしてきて、インストールするまでは同じです。ただし、今回は「アカウント取得済み」で進めます。

問題はシンボリックリンクです。XP には mklink コマンドがありません。linkd コマンドを使用しますが、これは標準では搭載されていません。Windows Server 2003 Resource Kit Tools をダウンロードしてきてインストールするとこの linkd コマンドが使用できるようになります。

管理者権限でコマンドプロンプトを開き、linkd コマンドを実行します。

>linkd "C:\Documents and Settings\<ユーザ名>\Application Data\Thunderbird" "C:\Documents and Settings\<ユーザ名>\My Documents\My Dropbox\Thunderbird"

起動確認をします。「同期、取れてる!!」です。

おわりに


XP でのシンボリックリンクですが、リンクを張ってくれるソフトの中には、リンクと称してショートカットを作るものがあります。エクスプローラで見ると区別がつかないのですが、コマンドプロンプトで見ると Thunderbird フォルダではなく Thunderbird.lnk とリンクファイルとなっています。このために Thunderbird を起動しても必要な情報が読み込めず、新規インストールと同じウィザードが起動してしまいます。

さて、2台のマシンの Thuderbird を同時に起動することは怖いのでやっていませんが、これでメールの環境が統一されました。

2009/10/25

IT総覧に掲載されます

毎年日経BP社が発行している「IT総覧」の2009年版に「個人データ管理システム Zebra」の広告が掲載されます。といっても一番小さな枠ですが。

日経コンピュータ、日経システムなどに同梱される予定です。業務アプリケーションの人事/給与のカテゴリに載っています。探してみてください。

2009/08/01

メールマガジンを始めました

自社で運営している「観光個人タクシー.NET」を紹介するメールマガジンの発行を始めました。

まぐまぐを利用しています。月刊ペースで発行の予定です。本当は2週間に一度くらいの間隔で出したいのですが、なにぶん「文才」がない物で…

よろしければ、読者登録をお願いします。

観光個人タクシー.NET
http://www.kanko-kojin-taxi.net/

まぐまぐ
http://www.mag2.com/

2009/07/07

Google Map マッシュアップ


「観光個人タクシー」
http://www.kanko-kojin-taxi.net/
のサイトに観光スポットの情報を追加しました。で、これをGoogleMap で表現してみました。
javascript がよく呑み込めてないのではまりまくってしまいましたが、どうにか動いています。サーバサイドは Ruby on Rails で作っているので xml データの吐き出しはものすごく簡単にできました。一番手間がかかったのは javascript の DOM 周りでした。

もっと精進しなければ…

2009/07/01

Javascript の練習で遊びで作ってみました。

「デンタク」です。
怒らないでください、あくまでも練習です。

http://www.shimamuraworks.com/computer/application/index.html

から、「デンタク」をクリック。

2009/06/15

サイトオープンのお知らせ


新しく「観光個人タクシー.NET」というサイトを立ち上げましたのでお知らせします。

http://www.kanko-kojin-taxi.net/



タクシーを観光にという使い方、皆さんご存知でしたか? 観光地では結構需要があります。貸切で行きたい所へ好きな時に。そんな観光に力を入れている個人タクシーの皆さんを紹介するサイトです。

まだまだ情報量も少なく、サイトの機能も限られていますが順次拡充していく予定です。みなさん、ぜひご利用ください。

企画・運営
島村製作所
http://www.shimamuraworks.com/

2009/06/01

サイト、リニューアル


オリジナルのサイトがリニューアルしました。


「中学.NET」
http://www.chugaku.net/

受験して進学する中学校の情報を取りまとめています。

学校で独自にサイトを開かれているところがほとんどですが、項目が違っていたり、表現が違っていたりで見比べるときに結構気を使います。それを一目でわかればいいなぁということでこのサイトを立ち上げました。情報はスタッフが順次登録しています。また、中学校にご協力を頂いて、写真なども順次掲載していきます。

皆さん、ご活用ください。
ご意見、ご希望などありましたら島村製作所までご連絡ください。
http://www.shimamuraworks.com/

2009/05/08

Ruby on Rails

やっと、サイトを一つ作りました。Ruby on Rails で。

レンタルサーバなので Ruby 1.8.4 Rails 1.1.6 のいまさらなバージョンなのですが、どうにかでっち上げました。勉強会にはこまめに出ていたのですが、やっぱり実際に利用するものを作ってみないとね。

今までネット関連はPHPが中心だったのですが、これで二刀流? になれるかな? java はまだちょっと…

http://www.kanko-kojin-taxi.net/

九州の観光個人タクシーを紹介するサイトです。さて、営業せねば。

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

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