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 周りでした。

もっと精進しなければ…