人気ブログランキング |


rubyで[BUG] Segmentation fault

rubyを始めた。
とりあえず勉強中。

データベース連携をしたいので、MYsql/rubyとruby-pgをインストールしてRUBY/DBIの環境を作ろうとした。
rubyはruby-186-26.exeのone-click-installer版
MYSQLはVer5.0.37
>gem install mysql --no-rdoc
>gem install dbd-mysql
で何とか入ったみたいだ。
「[ruby]Ruby/DBIでMySQLドライバを使うとSegmentation faultになる」という情報があるが、今のところ
大丈夫そう。

問題はruby-pg
「http://kamoland.com/wiki/wiki.cgi?Ruby1.9%A4%AB%A4%E9DBI%A4%C7PostgreSQL%A4%CB%C0%DC%C2%B3」
にそって
* ruby-pg-0.7.9.2008.10.13.tar.gz
* ruby-pg用パッチ - fileruby-pg-0.7.9_pg.c.patch
* dbd-pg-0.3.7.tar.gz
* dbi-0.4.1.tar.gz
を入手

C:\ruby\lib\ruby\1.8\i386-mswin32\config.h
の頭を編集
#if _MSC_VER != 1200
 ↓
#if _MSC_VER < 1200
それと
C:\ruby\lib\ruby\1.8\i386-mswin32\rbconfig.rb

CONFIG["DLDFLAGS"] の「-debug」を「-release」に
CONFIG["LIBRUBY_A"]を「=""」にして

tar zxf ruby-pg-0.7.9.2008.10.13.tar.gz
cd ruby-pg\ext
patch pg.c < ruby-pg-0.7.9_pg.c.patch
ruby extconf.rb
nmake
mt.exe -manifest pg.so.manifest -outputresource:pg.so;2
nmake install

DBD:Pgをインストール

tar zxf dbd-pg-0.3.7.tar.gz
cd dbd-pg-0.3.7
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

DBIをインストール

tar zxf dbi-0.4.1.tar.gz
cd dbi-0.4.1
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

ところが問題が二つ
require 'pg'
conn = PGconn.connect("localhost",5432,"","","postgres","root","xxx")

とやっても

require 'dbi'
conn = DBI.connect("dbi:pg:postgres:localhost","root","xxx")

とやっても「[BUG] Segmentation fault」が表示され停止してしまうそれもVISTAだけXP Proは問題な
く動いてくれるのだ。
何故だー!


ちなみに
require 'pg'
conn = PGconn.connect("host=localhost dbname=postgres user=root password=xxx")

だと問題なく動いてくれる。
とりあえず、postgresでruby/dbiはVISTAでは無理っぽい。

 
# by nora1962 | 2009-03-21 23:15 | PC

postgresql8.3.6にplperlを追加

centos5.2上のpostgresql8.3.6にplperlを追加。
ちと古いが
http://ml.postgresql.jp/pipermail/pgsql-jp/2002-November/011581.html
の記述に沿って作業を進める。
$./configure
$make
#make install

しかし
$createlangが通らない。「$libdir/plperlが存在しない」というようなエラーメッセージだ。
すったもんだやっているうちに「plpgsql」は「createlang」で通ることが分かった。

そこで、plpgsql.soの存在チェックをやったらひっそりと「/usr/lib/pgsql」にも隠れているではないか。
失敗覚悟で「usr/local/pgsql/lib/plperl.so」を上記のディレクトリにコピー。
「createlang plperl template1」で成功しました。
# by nora1962 | 2009-02-26 00:31 | PC

かな文字の小文字→大文字変換

tr/ァィゥェォャュョッァィゥェォッャュョヮヵヶぁぃぅぇぉ/アイウエオヤユヨツアイウエオツヤユヨワカケあいうえお/を実行するのにどのようにすれば速いか。(VBAで)

ネットで
http://pxp.seesaa.net/article/7500794.html
を見つけた。文字列サーチして変換する王道だろう。

一方、思いついたのはBASP21を使う手抜き。

Function Z(S)
Dim BOBJ As Object
dim i as long
Set BOBJ = CreateObject("basp21")
I = BOBJ.TRANSLATE("tr/ァィゥェォャュョッァィゥェォッャュョヮヵヶぁぃぅぇぉ/アイウエオヤユヨツアイウエオツヤユヨワカケあいうえお/k", S, Z)
End Function

これで比較したところ面白いことが分かった。
変換する文字列が短いうちは文字列サーチのほうが速い。
しかし、文字列長が長くなっていくと、その差は縮まり、20文字程度で逆転してしまう。
ネイティブコンパイル、中間コードに落とせる環境ならば違った結果が出るのだろうが、VBAではループ、文字列サーチは結構荷が重い処理なのだろう。

しかし、逆転するとはいえ20文字程度の変換ならば百万回のループ処理で15~30秒程度だから、実質上ボトルネックになることはないと思われる。
# by nora1962 | 2009-02-25 07:48 | PC

fastcgi

WindowsXPにApache2.2を入れて遊んでいた。
Fastcgiというのに興味を引かれて挑戦してみたけど、これがどっぷりはまってしまいました。

Windows環境でのFastcgi構築はネットで検索しても、どれも中途半端なものが多く、例示通りやってみてもApacheが起動しなくなったり、スクリプトが「Internal Server Error」を起こしてくれるようなもが多く完全に途方にくれてた。
そんな中でのトライアンドエラーでうまくいったのが
http://d.hatena.ne.jp/h4y/20080225/1203946284
を参考にしたやつ。
http://www.fastcgi.com/ から mod_fastcgi-2.4.6-AP22.dll をダウンロードして
名前mod_fastcgi.dllに変更して$Apache/moduesフォルダにコピー。
後はhttpd.confの編集。

LoadModule fastcgi_module modules/mod_fastcgi.so

<Location /fastcgi>
SetHandler fastcgi-script
Options ExecCGI
</location>
あとは適当に
<IfModule fastcgi_module>
FastCGIConfig -autoUpdate -idle-timeout 120 -killInterval 3600 -maxClassProcesses 3 -maxProcesses 15 -startDelay 30
</IfModule>
を指定しておいた。
# by nora1962 | 2008-12-24 04:56 | PC

秋の新宿御苑

新宿御苑行ってきました。山茶花、秋バラ、ジュウガツザクラを見てきました。
a0075219_0475394.jpg
# by nora1962 | 2008-10-22 00:48

ExcelのODBC接続にバグ?

仕事で頼まれて、数十枚のシートをACCESSのテーブルにinsertするこんなコードを書いたのだが、

Dim db As DAO.Database

Set db = OpenDatabase("scott.mdb")
Dim s As Object
For Each s In Sheets
s.Activate
ActiveWorkbook.Names.Add Name:="data", _
RefersToR1C1:="=" & s.Name & "!R1C1:R2C3"
db.Execute "insert into test select name,address,saraly from " & _
[excel 8.0;database=test.xls].[data]"
Next

「オブジェクト data が見つからない」というエラーメッセージを出してdb.executeで止まって
しまう。
いろいろ試したところでは、シート名の最初の一文字が全角数字だとこのエラーが出る模様。
仕方がないのでとりあえず、strconvで全角数字を半角数字に変換してからinsertすること
にした。全角のかな・カナや英字も変換されてしまうが、今回の場合はExcelのブック自体、
ワークファイルだったのでこれでいいだろうと見切りをつけた。

なお、ACCESS側にクエリを作ってそれを実行することでも回避できそう。
# by nora1962 | 2007-12-04 23:58

結局 openrowset 関数

SQLServerからDB2 express-cへリンクサーバーを張って見たのはいいのでけれど、decimal、numericの扱いで問題が発覚。
どうやら、IBMDADB2がテーブル定義の問い合わせに対してはこれらの属性についてadDecimal(=14)を返すのに、実行時にはadNumeric(=131)を返すせいのようだ。

いろいろ調べて見たが、打開策が見つからず。結局openrowset関数で逃げることにして
みたらこれは通るみたいだ。
# by nora1962 | 2007-04-21 20:37 | PC

'IBMDADB'でリンクサーバー

DB2 express-cをダウンロードして見た。
OracleやSQLServerと比べると、結構構成が違う。純然たる趣味なのでまあ、ぼちぼちやっていこうと思う。
困った事にWindws XP Proにインストールしたのだが、インストールユーザー以外のユーザーでログインすると何故かWindowsインストーラが立ち上がってしまう。これは仕様なのだろうか?

で、本題SQLServerからDB2 express-cへリンクサーバーを張って見たのだが「インスタンスが作成できません」というエラーが出てしまう。OPENROWSETでも駄目。ネットで検索しても日本語サイトでは「sp_addlinkedserver ibmdadb2」ではヒットしない。
結局、駄目もとで
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\Providers
に「IBMDADB2」のキーをつくり「DisallowAdhocAccess」をdword値で「1」に設定したら、通るようになった。
# by nora1962 | 2007-04-19 08:49 | PC

柚子餅

道明寺粉を使った柚子餅です
・道明寺粉     250g
・水          400cc
・砂糖        80g
・白餡        400g
・白味噌       大匙2
・柚子        1個(皮のみすりおろして置く)
・黄色の着色料  適宜(少量の水で溶いておく))
・シロップ      砂糖+お湯(適宜)

柚子味噌餡をつくる。鍋で白餡を加熱して温まったら、味噌と柚子の皮のすりおろしを加えてよく混ぜ合わせる。混ざったらバットなどに取り分けて冷ます。
耐熱容器で沸かしてお湯に黄色の着色料を溶かし込む。
道明寺粉を入れて軽くかき混ぜる。火を止めてラップして5分程度蒸らす。
そのままレンジ(500~600W)で5~6分程度加熱してそのまま10分程度蒸らす。
道明寺の生地に砂糖を混ぜ込む。切るように混ぜ込んで徐々に大きく混ぜあわせる。

柚子味噌餡を20gずつとりわけて丸めておく
手にシロップをつけながら道明寺生地を35g程度に取り分け、柚子味噌餡を包み込む
# by nora1962 | 2007-03-17 04:16 | 菓子

何ももらわなったけどホワイトデー

職場では義理チョコさえ貰えなかったが、ホワイトデーというわけで、抹茶・小豆の生チョコを作ってみた。
・ホワイト製菓用チョコレート 400g(削っておく)
・生クリーム           200cc
・無塩バター           50g
・抹茶               大匙1
・甘納豆             100g
・まぶしよう抹茶         適宜

生クリームを火にかけ、ふつふつと沸いて来たら、チョコレートを投入し、火を止める。
4~5分そのままにして、よくかき混ぜてチョコレートを溶かす。完全に溶けないときは湯煎にかける
バターを加えて溶かす
甘納豆は熱湯をかけて、周りの砂糖をとかしておき、抹茶と甘納豆を生地に混ぜ込む。
型にラップをしいて、生地を流し込む
荒熱がとれたら、冷蔵庫に入れて一晩寝かせる
固まったら、ラップごと取り出して、ひっくり返してオーブンシートの上に乗せる。
好みの大きさで切り分けて抹茶を全面にまぶす。

・ホワイトチョコレートが甘いと味がくどくなります。できれば甘さ控えめのものを選んでください。
・やわらかいので要冷蔵
# by nora1962 | 2007-03-17 03:32 | 菓子