Connect to mdb under Linux

虽然没有实际意义,只想挑战一下自己,在 centos 下尝试连接 Access 数据库。装好了 unixodbc (原先就在 centos 里,可能是默认被安装的) 和 mdbtools、mdbtools-odbc,搞定了一切设置,可就是出不来。 我是用 php odbc_connect 去连接 ActinicCatalog.mdb,页面一片空白,连个错误提示也没有,刚开始我还以为 web server 出问题。折腾了好久,最后,自己新建了一个很简单的 mdb 文件,终于在页面上显示出来了。 总结经验,centos 连接 mdb 需要关闭 selinux,然后,如果页面空白(连跟数据库无关的内容也不显示)不要怪自己,要么怪 mdb 里的结构太复杂,要么怪 mdbtools 能力太弱,读不出来。 大概只有微软自己知道怎么连接 mdb,第三方是不可能完全读懂它的了。

Mybookworld is not safe

我的 Mybookworld samba service 建有若干用户,各自的目录是凭各自的密码访问。昨天发现,Mybookworld 竟然不再问密码,任由我畅行在各个用户目录。Mybookworld 有一个 ip address 和一个自称的 device name,还有一个路由器指派它的 device name。凭前二者访问仍然正常,只是凭路由器指派的 device name 访问时密码失效。 我刚开始还以为我上次误点了“记住密码”,运行 net use * /d Mybookworld 还是任由我畅通无阻。奇了怪了,难道 windows 有其他我不知道的地方记住了访问密码?转念一想,不是 windows 的原因,因为我不可能多次为多个用户误点“记住密码”。 于是重启 Mybookworld,问题依旧。正好有个 firmware 更新,更新后问题还是依旧。没辙了! 原本准备在 internet 上开放对 Mybookworld 的 ssh 访问,这下打消主意 —— Mybookworld 不够安全,samba 会出这等问题,保不准 ssh 也会出问题。 别说我是事后诸葛亮,刚拿到 Mybookworld 时,我看了一下它的配置,就觉得它很容易出现安全漏洞。举个例子:用 Mybookworld 自带的 web interface 创建的用户并不是 Linux 用户,这些用户属组全是… Continue reading Mybookworld is not safe

Avoid PEM pass phrase

我在制作 SSL key file 时输入了一个 pass phrase。CA 把 SSL 证书发给我后,我在 Nignx 试着加载 key 和 证书,发现每次重启 Nginx 时,都会被要求 Enter PEM pass phrase。岂不很烦,而且万一服务器重启,岂不还要人工干预才能重启 web server? 原本以为把 pass phrase 从 key 文件里拿掉后,要找 CA 重新制作证书,后来发现不用,证书跟 pass phrase 无关。Nginx 的文档没有提及,Apache 倒是有提: If necessary, you can also create a decrypted PEM version (not recommended) of this RSA private key with: openssl… Continue reading Avoid PEM pass phrase

It’s time to override Magento controller

I’m quite happy to override Magento models and blocks. Since overriding controllers is different from overriding models and blocks, I do not want to touch it until recently. What I was trying to achieve was a customised product view page which could show different content according to url parameters and login status. At first, it… Continue reading It’s time to override Magento controller

Godaddy has entered Europe

这个月定了 Godaddy 的一台 vps,发现 Account Type 那一栏跟上个月不一样——Virtual Dedicated – EU,多出一个 EU。 我想可能 Godaddy 在欧洲某国建了一个 data centre,或者合作搞了一个。查了一下分配给我的 IP,是荷兰的。 我经常抱怨 Godaddy 的网络慢,或许 Godaddy 也意识到了,或许 Godaddy 的网络在美国不慢,而在欧洲慢,Godaddy 想改善一下?

Zend_Form in Magento

我喜欢 Zend_Form 这个组件,为了在 Magento 里使用 Zend_Form,走了不少弯路,但最终方法是很简单的。 要在 Magento 里使用 Zend_Form 最关键的一点是明白 Zend_Form 依赖于 Zend_View,而 Magento 从头到尾都没有用到 Zend_View。如果使用 Zend Framework Bootstrap,它会搭建好 MVC,在你想到去用 Zend_View 之前,它就已经就位了,所以 Zend_Form 在真正的 Zend Framework 里是取之即用的。在 Magento 里,必须自己初始化一个 Zend_View,传递给 Zend_Form 的 $_view,或者用 setView()方法,否则你会得到一个错误提示:ViewHelper decorator cannot render without a registered view object。 我走的弯路是刻意在 Magento 里照搬 Zend Framework 里 Zend_Form 的输出。我专门建了 views 这个目录,在其下又建了scripts 目录(Magento 里最接近… Continue reading Zend_Form in Magento

Administrator name of Mybookworld to downloader area

如果要登录 Mybookworld downloader,在 Administrator name 那一栏里输入的竟然是 “downloader”。我试了好多次才试正确,每次输错后我气馁地认为 Mybookworld downloader 被 disable 了。我没读 WD 的说明书,这年头谁有耐心看说明书?再说像 network drive 这种东西本来就应该很直观地让人使用,而 Mybookworld 没有做到。 首先,用 admin 作用户名可以进入 network storage manager 和 copy manager,而进 downloader 非得用 downloader,没有统一规范,我不喜欢; 其次,downloader 的密码是用 admin 进入 network storage manager 进行修改的,修改完了还要退出 network storage manager 再进入 downloader,烦不烦? 最后,内置的 admin 和 downloader 用户名不能被修改或删除,给暴力破解提供了方便,安全堪忧。

Caveats of firmware upgrade of Mybookworld 1TB

买了 Mybookworld 2TB,按建议首先做了 firmware upgrade to newest version。 顺便把原来的 Mybookworld 1TB 也 upgrade firmware,没注意到 Mybookworld 1TB upgrade 以后有没有自启。接着我发现以下反常现象: 原先破解后的 sshd 也失效了,但能按老办法重新破解一遍。 原先注释了 moinet start script,被取消了注释,只好重新注释一遍。 原先修改了 root 的密码被擦除了,幸好 root 没有密码是无法登录的,其他用户的密码还在,赶紧再次修改 root 密码。提示说密码只能 5-8位,其实可以超过8位,把密码弄长一些吧,保险起见。 局域网内其他机子无法凭 netbios name 访问 Mybookworld 1TB,还是手动重启一下 Mybookworld 1TB,以期它能赢得主控浏览服务器选举。

Published
Categorized as 小小草 Tagged

负负得正

“负负得正”的英文该怎么说?Two negatives make a positive? 今天我整理供应商价格表倒发现了一个负负得正的有趣事。我们供应商的单价是随数量增加而递减的,而不知怎么搞的,数据录入时,25,000 数量那一行的单价错了,比20,000 数量那一行的单价还贵。而我们的售价是成本加成利润。理论上,错误的供应商的单价反向浮动会体现在我们的售价上。 可事实上,我们的售价一直随数量递减,并未在25,000那一行出现肉眼可见的错误。 于是,我逐行分析了程序,发现原意想让数量比较时 >= 条件成立跳出循环,却打成了 >。这样,20,000 再执行一次 + 5,000 的数量仍在循环之内,于是在 25,000 数量时,仍使用了20,000 的单价(因为两种情况下,后者总价低,程序另有各种情况下自动取最低值的算法)。也就是说,25,000 数量那一行的错误单价没有机会生效。 所以,我们的售价表未现反向浮动,但只有我心里知道,25,000 那一行的售价报高了。汗!