How to open an mdb exclusively opened by others

Do not be over excited – my solution is not about how to open an mdb which is truly exclusively opened by others, but to cope with the situation when you can not open the mdb over the network.

For example, from time to time, Actinic crashes. And sometimes after crash, you see this message:

There was a problem with the database

Operation: Opening the table

The Microsoft Jet database engine cannot open the file ‘\\(netbios name)\Actinic v8\Sites\Site1\ActinicCatalog.mdb’. It is already opened exclusively by another user, or you need permission to view its data.

Action: Contact your Actinic reseller or Actinic Support as appropriate

The problem is caused by mdb, not Actinic specific. You may have seen something similar.

microsoft jet database cannot open file
microsoft jet database cannot open file

If you are sure no one else has opened the mdb file, you know Access is talking nonsense. To solve the problem, copy this file, delete the source file (you may have to operate on the local computer), move the copied file to the original place, and that’s it.

Do not ask me why this kind of problem happens, or why an duplicated file can solve the problem. I don’t know. That is one of the reason I do not like microsoft – too many times I do not know where problems come, and where they go.

Fed up with Actinic

Actinic gave me some trouble this morning. I was reported that Actinic crashed when uploading. My close investigation found that Actinic crashed at the point of checking catalog. No error message was shown on screen. A Catalog_version_number_date_time.dmp was generated but that meant nothing to me.

Fortunately, there were not many catalogue changes since last successful upload. The cause of problem was quickly isolated to a change of product sequence in a section. As a quick solution, I created a new section, and all products underneath by copying and pasting contents. It was not a desirable way, but what else could I do other than keeping away from Actinic?

A late investigation when I had some more relax time found that shipping supplement, handling supplement and shipping quantity of the original products causing the crash were changed to some ridiculous figures. I am used to this kind of ridiculous behaviour of Actinic, so I am not keen on finding out the further reasons.

Generate a UTF-8 encoded Actinic site

I don’t like the way of Actinic tackle the problem. For example, if the web server set default charset as UTF-8, it will cause page rendering issue for Actinic. Especially for the pound sign. All the support knowledge from Actinic is redirecting people set the server using default chareset as ISO-8859-1. Then, my question is – why should I use ISO-8859-1 while UTF-8 has far better applicability, especially for multi-national sites?

Nevertheless, can Actinic generate an UTF-8 encoded site? The answer is yes and no.

Yes is because I have already achieved it; No is because Actinic can not make it happen for you (at least I won’t know how to control it), so you must do something outside Actinic. Here below is my detailed steps.

  • First, rewrite all requests to actinic generated files to index.php.
  • Second, create a bootscript, name it as index.php. This idea is inspired by Zend Framework. Make sure:
    1. The bootscript should be in utf-8 encode.
    2. The bootscript should be able to include actinic generate files according to request uri.
  • Third, in actinic templates, change meta tag charset to utf-8.
  • Last, at web server, adddefaultcharset utf-8.

The most tricky part is actinic upload its files in iso-8859-1 encoding, but bootscript is utf-8 encoded. A normal include or require by php will not render pound sign correctly. I use output buffer to hack the problem.

<?php
...
ob_start();
include($actinic);
$utf8out = utf8_encode(ob_get_contents());
ob_end_clean();
echo $utf8out;
?>

I can’t find a way to assign two handlers to a script

这可能是一个不可能实现的任务。

Actinic 的动态部分是 perl 写的,我不想触及 perl,陆陆续续做了很多 extensions,都是 php 写的。Actinic perl 有很多漏洞,其中一个就是会把我的 php 源码暴露。可能 Actinic 的目标用户都是 htmler,根本没指望 phper 会给它写 extensions(我也是没办法,早就不想干了)。我能做的,就是尽可能地调整 php 的代码方式,做到即使源码暴露了,也不包含机要信息。

我也不打算在 Actinic 浪费时间去研究怎么修改漏洞,只是最近把 apache module 研究了一遍,突然想重提这个历史遗留问题是否可以从 apache 方面给予弥补。漏洞的源头是 Actinic perl 读入我的 php script,当成 html 直接输出。如果能把 handler 再交给 php-cgi,那么 php tag 之间的内容就可以得到解析。

可是 apache 是以后缀推定 handler 的,那么某个后缀怎么可以有两个 cgi handlers?

Actinic discounts.fil is giving away secrets

I have many good reasons to dislike Actinic. One of the reasons is – as growing up to an Actinic expert, one can also be an Actinic hacker. In other words, Actinic is not nicely secured by the vendor. If an Actinic user wants enhanced security, he / she will work ten times harder to close the security hole.

For example, Actinic does not have online database. Actinic keeps most of data offline, but it must have some data at server side, so itstores data in various files. This is a very doubtful approach. Of course all database software have bugs, but could Actinic file-based data do better than mysql, etc?

Another example, I recently found Actinic stops recognising coupons after an update. During diagnosis, I found discounts.fil under acatalog folder serves as data file for coupon code etc. acatalog/discounts.fil can be accessed by public by default. All promotion secrets are exposed to competitors / customers by analysing this file. Coupon codes are hashed in discounts.fil, and hashing makes all original coupon codes not recognisable. The Actinic perl script does not compare hashed customer input coupon with hashed coupon code in discounts.fil. It compares raw customer input coupon with hashed coupon code in discounts.fil (of course they will not match). This is a bug in Actinic.

I think closing security hole is out of most Actinic users’ capability. What is the point for an advanced Actinic user working so hard on Actinic?

三人行,必有我师

Actinic是我们公司用了好多年的ecommerce系统,一直没有舍弃,我接触Actinic的日子久了,虽然不喜欢这套软件,但也玩转得很遛了。

我出了趟长差,回来发现有人在Actinic的产品描述里把原来简单的

Box of 500

改成了

!!<
Box of 500

<strong>Normal Price <strike>£29.99 </strike>

Now</strong>

>!!

我知道在我出差期间公司搞了个promotion,下调了几个产品的价格。但是是谁这么厉害,能写出这么厉害的代码?公司里除了我,没人懂html。就算html加粗标签和删除标签不怎么稀奇,稍作咨询就能知道用<strong><strike>,但 !!<和>!!配对声明html代码的开始和结束可是Actinic特有的,当年我是在Actinic专家稀缺的情况下,熟读了Actinic手册才知道的。所以在我想来,能在产品描述里用上 !!<>!!那就是很厉害了。我在Actinic其他地方也会用到!!<>!!,但我的同事不会去翻看前例,即使看到了,也不会明白 !!<>!!是干什么用的。

难道公司里隐藏了一个“高手”?

我问坐我对面的同事,“谁写出了这么复杂的带格式的描述?”

他不以为然,说,“你不在,我就动手改了,喏,这里不是有几个加粗等格式按钮嘛,我就象Word那样操作了一下而已。”

原来如此!我用Actinic这么久,都没注意到那几个格式按钮,所有格式都是我hardcode出来的。不懂Actinic的同事倒给我这个Actinic专家上了一课。