Archive

Archive for June, 2006

Windows和Linux下连接Sybase数据库的一点小区别

June 17th, 2006 Fwolf No comments

首先说明一下我的应用环境,免得误会: 服务器:win2000、sybase 11.92(cp936字符集)、apache2、php5。 开发环境:ubuntu linux、apache2、php5,数据库直接连接服务器。

以前使用winxp的时候,在php中连接sybase数据库非常方便,再加上使用adodb类库,就更爽了,唯一的一点麻烦就是由于cp936不是sybase 11.92标准的字符集,是硬从sybase 12里面套过来的,所以在连接数据库,执行connect方法的时候也许会有一个warning警告,不过不影响使用,在connect前面加上@屏蔽掉即可(注意,这也是我在遇到本文所述问题时,花了很大时间都找不到问题的直接原因,罪过啊)。

但是,在系统切换到ubuntu下之后,突然发现一个连接sybase数据库的php程序不能用了,错误信息为:

[17-Jun-2006 01:35:48] PHP Fatal error: Uncaught exception ‘ADODB_Exception’ with message ‘sybase error: [0: ] in EXECUTE(“select count(1) as c from icktz where datepart(yy, blrq) = 2006 and blxz like “�°�%”") ‘ in /media/hdd5/php_includes/adodb/adodb-exceptions.inc.php:76 Stack trace: #0 /media/hdd5/php_includes/adodb/adodb.inc.php(879): adodb_throw(‘sybase’, ‘EXECUTE’, 0, ”, ‘select count(1)…’, false, Object(ADODB_sybase)) #1 /media/hdd5/php_includes/adodb/adodb.inc.php(854): ADOConnection->_Execute(‘select count(1)…’, false) #2 /media/hdd6/websoft/fwolfweb/tools/work_stat/work_stat.php(396): ADOConnection->Execute(‘select count(1)…’) #3 /media/hdd6/websoft/fwolfweb/tools/work_stat/work_stat.php(659): WorkStat->Rsql(‘select count(1)…’, ‘jygl’) #4 /media/hdd6/websoft/fwolfweb/tools/work_stat/work_stat.php(241): WorkStat->StatXysc() #5 /media/hdd6/websoft/fwolfweb/tools/work_stat/index.php(32): WorkStat->GenerateCache() #6 {main} thrown in /media/hdd5/php_includes/adodb/adodb-exceptions.inc.php on line 76

注意其中有一处为乱码“�°�%”,于是怀疑是编码的问题。这个程序中涉及到编码和字符集的地方,是由于php源码使用的都是utf8编码,而sybase使用cp936编码,所以执行sql的时候要转换为gbk,执行结果要显示的时候又要转换为utf8编码。但是反复检查、增删编码处理部分,除了错误信息由乱码变为正常汉字之外,没有任何进展。

没办法,重新写一段最简单的数据库连接程序测试一下:

< ?php require_once('adodb/adodb.inc.php'); $db = &ADONewConnection('sybase'); $db->Connect(‘server3′, ‘sa’, ”, ‘dbname’); $rs = $db->Execute(‘select 1′); ?>

运行错误如下:

Warning: sybase_connect(): Sybase: Unable to connect in /media/hdd5/php_includes/adodb/drivers/adodb-sybase.inc.php on line 126

这才恍然大悟,原来根本就没有连接上数据库,自然在执行sql的时候出错。要问刚才为什么没有发现,我不是加上@屏蔽了错误信息嘛。继续分析,上面这段代码原来在winxp客户端调试的时候是绝对能够连上服务器的,怎么在linux下就不行呢,又将服务器名更换为ip地址:端口,就成功了。

可能是由于linux下没有netbios(正如linux无法使用“ping 机器名”命令一样),还可能是linux下没有安装sybase open client,设置dsedit,总之,在linux下连接sybase服务器,只能使用“机器名:端口号”作为hostname,无法直接使用主机名。

于是,在程序中增加一部分字段判断主机操作系统,对hostname进行赋值的语句,问题顺利解决:

if (‘/’ == $_SERVER["SCRIPT_FILENAME"]{0}) $host_srv = ’192.168.0.1:5000′; else $host_srv = ‘server3′; $server[0]['dbtype'] = ‘sybase’; $server[0]['host'] = $host_srv; ……

Related posts

Categories: Linux Tags:

Inside man/局内人

June 12th, 2006 Fwolf No comments

这是一部关于银行抢劫的电影,但是抢匪却没有抢走一毛现金;也是一部警察和抢匪的博弈,却没有人受伤,开枪之处不是打的橡皮子弹,就是假戏真做;片中揭露了一名二战暴发户,但也只是透着窗户纸模糊得看见。这是一部很含蓄但又不平静的电影,不会让人犯困的。

片头Owen在小黑屋里讲述的场景,不禁给人一种他已经入狱的错觉,但直到结束前5分钟,他走出这个预先埋伏的小黑屋,观众才恍然大悟,全片的精彩尽显于此。可惜我看之前没有注意到英文名,看得时候光盯着“局内人”琢磨了,瞎猜到底谁置身局外?早知道看看英文名,就不会满腹狐疑了。

Related posts

Categories: Movie Tags:

DBDesigner的安装

June 11th, 2006 Fwolf 4 comments

以前使用Widnows的时候,进行数据库建模都是使用PowerDesigner,这个东西是在是方便,不仅可以进行设计和建模,最大的方便之处在于能够在保留数据的情况下变更数据库结构。现在使用Ubuntu,似乎目前最好的替代工具就是DBDesigner了,mysql官方也有一个workbench,但是还没有正式发布,我下载了一个beta也没有安装上(没有安装,下载下来就是二进制文件,执行出错,没办法)。

DBDesigner好像使用borland在linux下的kylix开发的,大体安装步骤如下(版本4.0.5.4):

  • 下载DBDesigner4的rpm包,然后转换为deb包。
  • 安装libxft1(apt-get install libxft1)
  • 安装deb包:dpkg -i dbdesigner4_0.5.4-1_i386.deb
  • 下载kylix运行包libborqt,地址:http://rpmfind.net/linux/rpm2html/search.php?query=libborqt,下载后同样转换为deb包。
  • 安装libborqt包:dpkg -i libborqt_6.9.0-3_i386.deb

现在DBDesigner应该就可以运行了,不过要连接mysql库,还需要解决找不到libsqlmy.so的问题。到crlab下载一个dbExpress driver for MySQL, Linux version,然后解压缩,并且将其中的libsqlmda.so.3.00文件ln到lib目录下。

ln -s /home/fwolf/tools/DbxMda/libsqlmda.so.3.00 /usr/lib/libsqlmy.so

别着急,还有一个小错误需要改,启动DBDesigner后,打开”Database”->”Connect to Database”菜单,进入选择数据库连接窗口,然后选下面的“New Database Connection”创建一个新的数据库连接(直接使用列表中的无法修改选项,所以要新建),在新建数据库连接窗口的高级选项页,修改GetDriverFunc这一项,预设值应该是getSQLDriverMYSQL,将其改为getSQLDriverMySQL,区别在哪儿?就是mysql的“Y”从大写改成了小写,然后照样填写其他数据库连接信息,确认保存后就可以正常连接数据库了。

DBDesigner需要修改的一个小地方

我是下载DBDesigner的rpm包然后转成deb安装,这样比较省事。强烈建议参考下文:http://wiki.splitbrain.org/dbdesigner

update @ 2006-6-19 后来又尝试了一下,在libxft1、libborqt、libsqlmy.so都设定好了的情况下,直接下载tar.gz包,解压缩,就可以直接使用DBDesigner4启动程序了,但是startdbd却不行。

update @ 2006-6-26 感觉DBDesigner还是不好用,无奈,还得回到windows下使用powerdesigner去,哪位路过的大侠知道linux下有好用的数据库建模工具,麻烦告知一下(侧重于物理模型)。

Related posts

Categories: Tools Tags:

无法娱乐也许是另外一种商业需求

June 11th, 2006 Fwolf 4 comments

受了幸福大手的蛊惑,忍不住想到Pogo游戏一番去,但是Ubuntu+Firefox的出身却被残酷得拒之门外:

点击这里(暂不支持Firefox)申请测试帐号,抢鲜享受Pogo™的乐趣!

遗憾之余,突然感觉这也许是另外一种商业需求,当一个老板成天抱怨手下没事就玩网络游戏、聊天泡mm、不务正业的时候,当然会希望员工们只能干活,无法娱乐,然而计算机已经成为当今很多工作的标配工具,加上使用极其方便自由的Windows的普及,打造一台“无法娱乐”的计算机真的很容易么?

记者抓拍庭审现场却曝出惊人一幕!!!

一方面,Linux经过在服务器软件市场的成功,正杀气腾腾的向桌面应用进军,另外一方面,瘦客户端的应用越来越多,浏览器恐怕要占据人们越来越多的时间。这样,只要有熟悉一些的linux管理人员,打造一批“无法娱乐”的计算机岂不容易?且不说linux平台下的娱乐应用本就不多,linux方便的网络管理方式和权限管理机制能够让网管更加方便的“合理限制”用户对计算机的使用,我想,这也许是linux进军桌面应用的一条小路。

当然,上面说的那些在Windows下也都可以直接活间接的实现,只不过,如果只想要一张免费的真皮座椅,你会去买一辆昂贵的宝马么?

现实的例子在我们身边也许已经存在很久了——每当我去银行办理业务的时候,都能隐约看到高高的柜台和厚厚的玻璃后面,营业员对着黑白的字符界面操作着。如果没有猜错的话,那有可能是novell+ucdos,但决不会是windows吧?难以想像银行营业员一边玩着“连连看”一边为我办理存款业务的情形……会不会把我的帐号和哪位富翁的连起来呢??

Related posts

Categories: Linux, Thinks Tags:

Google Browser Sync 同步你的FireFox

June 9th, 2006 Fwolf 1 comment

众所周知,Firefox是一款优秀的浏览器,而google则是最喜欢奉献免费服务的公司了。现在,如果你想在使用不同的计算机的时候,能够拥有同样的收藏夹,能够记住自己曾经登录过的网站状态,那你就应该试试新鲜出炉的Google Browser Sync

Google Browser Sync是google在2006年6月7日新推出的一款Firefox扩展(extension),和其他extension一样,安装很方便,在安装页面同意协议,并且设置firefox允许安装即可。

Google Browser Sync-install

安装完成之后,重新启动firefox,会首先进行Google Browser Sync的安装和设置,最开始是一个警告信息:

Google Browser Sync Signup警告信息

看清楚了,在设置好之后,所有使用这台计算机的人都能够使用到你同步的内容!因为firefox的profile没有密码保护,如果你使用的是公用计算机的话,就不要安装Google Browser Sync了,即使你不怕自己的隐私泄露,别人随便的修改设置、登录网站也会同步到你的帐号资料当中,这是对双方都有侵害的!

接下来会提示输入google帐号信息: Google Browser Sync Signup设置帐号和pin Google Browser Sync Signup设置帐号和pin

服务器验证之后会出现一个要同步的内容选择页面: Google Browser Sync Signup  选择要同步的内容

可以看到,共有cookie(记录网站登录、设置状态)、Saved Passwords(保存的密码)、Bookmarks(书签,收藏夹)、History(浏览过的网站记录)、Tabs and Windows(当前打开的窗口和tab页)可以进行同步,其中cookie和passwords是必须要进行加密的,其他的可以选择加密。出于谨慎的目的,还是设置全部加密好了。继续,下一步是设置pin:

Google Browser Sync Signup 设置pin

这里设置的pin是用于加密同步数据的,但是注意pin在以后是可以查看到的,并且如果要更改的话,只能删除掉google accounts信息中的Google Browser Sync数据,重新开始同步,比较麻烦,所以一定要选择一个相对安全、并且和重要密码不一样的pin。

pin设置好以后,就开始连接服务器等若干事务了,这个时间稍微长一些,但只需一次即可,下次使用就快了。如果本机的firefox保存的密码设置了加密保护,那么还要输入这个加密密码,毕竟google也不知道你本机保护密码的口令嘛,这个操作同样只需一次即可。这些都完成之后,会显示一个完成页面,点击finish,就正式启动了firefox正常工作,并且右上角出现了Google Browser Sync的内容:

Google Browser Sync 运行图标

点开之后还可以进行设置:

Google Browser Sync Settings

设置界面中显示了当前在使用哪个google帐号同步,pin是多少(可以显示出来,不可修改),Full Refresh是强制全部和服务端进行同步,有可能耗时较长,不着急的话还是让它在后台慢慢同步吧。

可以感觉到,Google Browser Sync既满足了在不同的机器之间同步书签、密码、等信息的需求,又充分考虑到了个人隐私的保护,还是非常值得使用的。当然google不是神,并不能同步所有firefox的设置,比如菜单布局、插件设置等,因此本机的firefox最好还是通过firefox –profilemanager设置一个profile,把个人设置单独保存的好,多一份总比少一份强。

update @ 20060610: 经过两天的使用,感觉Google Browser Sync会拖慢Firefox,使其经常产生停顿,网上看到别人也遇到一些麻烦,证明Google Browser Sync还不是特别成熟,预使用者请参考,建议等待google改进后再使用。

update @ 20060710 Google Browser Sync大概在6月30号有一个升级版,现在已经不存在上述的问题了,诸位可以放心使用!

Related posts

Categories: Tools Tags: