半冷半暖秋天

2009-05-21

IE插件还是得装

Filed under: C/C++ — sunu @ 17:56:30

有个B/S系统,一些任务页面上实在做不了,借助于本地客户端。ActiveX控件难写,也怕写得不稳定,于是就向操作注册自己的协议。

比如在地址栏或者“运行”里输入 http://tes.com就会打开网页浏览(不一定是IE,视系统设置),telnet://xxx.com就会打开telnet。那只要注册自己的协议,就可以页面上点击超链接打开自己的程序了。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\MoMo]
@="某某协议"
"URL Protocol"=hex(2):00,00
[HKEY_CLASSES_ROOT\MoMo\DefaultIcon]
@=" C:\\WINDOWS\\system32\\cmd.exe,0"
[HKEY_CLASSES_ROOT\MoMo\shell]
[HKEY_CLASSES_ROOT\MoMo\shell\open]
[HKEY_CLASSES_ROOT\MoMo\shell\open\command]
@="\"C:\\Program Files\\MoMoMo\\MoMo.exe\" \"%1\""

把上面的内容保存为x.reg,双击导入注册表就可以让系统在碰到MoMo://这关变态的地址时去打开MoMo.exe,并将整个MoMo://xxxx字符串传为命令行参数传递给MoMo.exe,如果是C语言写的,那就是argv[1]。

这样一来确实不错,“不需要装IE插件,不需要装Firefox插件”,就可以实现任务强大的功能。

但还是会有一个问题,这得在用户导入上面那个注册表,并且要下载那个可执行程序才行。并且,如果用户没有注册过这种协议,那访问这些MoMo://地址时就会是空白页面。

如何才能知道用户没有装过客户端(就是导入那注册表,下载那个MoMo.exe程序)呢?只有通过插件+Javascript了。

拿IE来说,

<script type="text/javascript">
  var checker;
  try {
    checker=new ActiveXObject("HelloWorld.MoMo");
  }catch(e){
  }
  //判断是否安装控件
  if(checker==null)
  {
    document.write("<p style=\"color:red;background-color:yellow;font-weight:bold;\">请<a href=\"/client.exe\">点击这里</a>安装/升级客户端!</p>");
  }
</script>

可以写一个空的IE ActiveX插件,什么功能也没有,什么事也不做,放在安装包client.exe里。页面上放上上面这段Javascript代码。 如果发同这个什么事也不做的ActiveX实例化失败,则说明用户没有装过客户端。这个时候可以把那些MoMo://链接的地址换成空的或者提示页面。

像下面的代码实现的效果就是,如果插件未装,就让用户在点击这些MoMo://链接的时候弹出提示框。(以下的语句需要JQuery的支持。)

//判断是否安装控件
if(checker==null)
{
  $("#xxx_Link_id").attr("href","javascript:;");
  $("#xxx_Link_id").click(function(){ alert("请下载并安装客户端.") });
  $("#xxx_Link_id").click(function(){  alert("请下载并安装客户端.") });
}

这样基本上满足当前需求了。

2009-05-18

远程更新Linux服务器简单方法

Filed under: linux相关 — sunu @ 10:48:00

需要的工具:

plink.exe 用于远程执行命令.

pscp.exe用于传送文件。

Update.bat 调用这些工具的脚本。

更新步骤很简单:

1. 复制本地目录data至远程服务器临时目录。

2. 登陆远程主机刚上传的目录,执行目录中的bash脚本。

完整的工具及脚本传上来备用。

update.zip

2009-05-15

再次被临时文件搞死

Filed under: 文档及资源 — sunu @ 20:35:45

一个程序,在某台机子上运行,一到某个步骤就停住了,即不是“失去响映”也不是抛出错误,但在其它机器上跑得挺正常。

后来一步步地打印消息,发现是写临时文件的时候死活写不进去。一看临时目录。。。。一万多个临时文件占着,目录打开都困难!

以前遇到过,但是没彻底解决,现在又来搞我一把,NNGX。

2009-05-13

让apache爽快地支持cgi

Filed under: linux相关 — sunu @ 01:31:15

仅作记录。

1. 加载cgi模块

LoadModule cgi_module libexec/apache/mod_cgi.so

mod_cgi.so路径可能稍有不同。

2. 在apache配置文件中添加
<Directory "/var/www/htdocs/my_bin_dir">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
AddHandler cgi-script .cgi .xxx
</Directory>

虽然修改php配置也可以“支持上传超大文件”,但是实际使用中发现内存占用非常厉害(应该是PHP在接受文件时先保存在内存中,尽量多地使用掉可用内存。),并且大文件在文件数据传输完毕后会有一段很长时间用来写到磁盘上,这就造成了上传大文件的时时“上传过程挺正常,但传完是很卡,甚至造成Falsh上传程序假死。”。 如果使用cgi来接收大文件(比如大于2G),因为接收代码是自己可以控的,就不会有问题了。及时地把接收的数据写回硬盘,就不会占用太大内存,并且上传过程中不会有突然卡住的感觉,虽然上传速度可能会有一点点降低。

2009-05-10

开源全文检索系统收集

Filed under: 文档及资源 — sunu @ 15:27:26

Sphinx Search

Sphinx Search 是由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。

中文支持:http://www.coreseek.com/index.php?page=Sphinx

Hyper Estraier

Hyper Estraier是一个用C语言开发的全文检索引擎,他是由一位日本人开发的.

Hyper的特性:
高速度,高稳定性,高可扩展性、P2P架构、自带Web Crawler、文档权重排序、良好的多字节支持、简单实用的API、短语,正则表达式搜索、结构化文档搜索能力。

http://hyperestraier.sourceforge.net

收集中。。。

Powered by WordPress