bianbian coding life

便便代码人生: 关注技术, 翻译文档, 偶尔动动手

bianbian.org

[原] 根据struct生成基于JSON-C的json_object代码(auto generate function of C struct to JSON)

Posted by bianbian on 2008-04-09 11:13


本文Tags: ,

上次讨论了C的struct结构体与JSON交互,并提出了能否自动把struct转为JSON的问题。
今天我总算解决了这个问题,虽然中间也想过传参数给一个函数集中处理,不过都是比较麻烦。我写了一个脚本,自动生成把struct的成员插入json_object的函数,底下页面有演示:auto generate function of C struct to JSON

标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in C/C++, Technology | 3 Comments »

[原] 关于web访问小百合BBS的脚本问题

Posted by bianbian on 2008-04-07 01:28


本文Tags: , , , ,

最近发现个别网友访问小百合BBS会出现如下提示:

见到此文字可能是由于浏览器禁用了活动脚本或者脚本有误
请启用脚本支持后刷新本页;若仍有问题,请点击这里提问

原理:使用Javascript动态输出框架结构(好处是能缓存静态化网页,区别guest用户和登录用户)。因此,一旦这步出现错误,框架结构未建立成功,那么就会显示body里的提示内容。

原因:
(1)浏览器版本不支持。目前小百合BBS支持IE5.5(不保证全部功能有效),完美支持IE6+、Firefox 2.0+、Opera 9+等。如果您的浏览器不在此列,并且测试正常,欢迎反馈。
(2)浏览器脚本引擎未启用。您可以点击这里测试:如果能弹出“脚本启用”,那说明这项没有问题;否则,请修改设置如下:
Firefox:firefox_script_enable.JPG IE:ie_script_enable.JPG
(3)脚本有误。可能性不是很大,除非刚好碰到更新的脚本确实存在错误。基本上我都会测试以后才放上去。不过万一你怀疑是这个问题,可以telnet方式到sysop版看看,如果其他人都没问题那基本就只是您的问题了。
(4)浏览器缓存内的脚本版本过旧。因为浏览器缓存脚本文件(这样不需要每次都下载,加快速度),如果服务器端已经更新了脚本文件,而您的浏览器缓存因为各种原因没有更新,可能也会导致这个问题。请清空浏览器缓存后刷新测试:
Firefox:firefox_del_temp.JPG IE:ie_del_temp.JPG
(5)校内用户访问BBS请关闭代理服务器。
(6)浏览器或系统部分DLL(动态链接库)功能因为病毒或木马的原因失效(Windows系统),请点此下载修复程序,保存后运行,然后重新打开浏览器测试。

如果还有问题,请留言将您的操作系统、浏览器(基本是IE出问题)及版本、杀毒软件等告知。另外推荐使用Firefox:

标签: , , , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in JavaScript, Technology | 28 Comments »

[原] BBS日志和点击率的优化方向及静态化

Posted by bianbian on 2008-04-06 16:01


本文Tags: , ,

尤其是点击率,是网站静态化最麻烦的地方之一:每个用户的每次点击都会改写.DIR文件,也是负担
而且除了看一眼没有其他用处,而且没有办法保证不作弊(blog点击率作弊尤其多)

我想了个办法:tmpfs+数据库(比如MySQL)
1)把所有点击率以日志的形式记录到tmpfs(ramdisk)某文件log.tmp(点一次存一行)
格式:bbs BoardName FileName UserId IP
blog BlogUserId FileName UserId IP
an Path UserId IP
因为是内存操作,非常快
2)10分钟crontab把log.tmp改名log.10,然后另外启动程序分析log.10
去除UserId和IP相同的重复记录(10分钟内同ip同id重复点击只算一次)
把结果一次insert到MySQL,因为是multi insert,即使log很大,其实是非常快的
3)进入数据库以后就好办了,可以出各种统计:
1小时内热门,12小时内热门,24小时内热门,本周热门。。。。。。
这块统计(数据挖掘)其实是目前基于文件系统的BBS最缺的地方,自己写会很辛苦
这块结果输出可以用memcached优化,10分钟从数据库跑一次SQL即可

这样.DIR就不需要改变,而且可以把.DIR部分cache到内存里,结合libevent,有数据改写reload一次

唯一的缺点是显示的时候要从数据库内取,必须memcached,而且10分钟才会更新一次
不过比起带来的好处来看,是微不足道的

针对其他日志的数据挖掘:除了能出各种统计图表外,对于遍历试密码的可以直接从iptables过滤
我准备等我忙完毕业的事情好好实现一下。

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Technology | No Comments »

[译] JavaScript (XMLHttpRequest) 读取二进制数据流

Posted by bianbian on 2008-04-06 13:36


本文Tags: , , , , ,

译者注:原来想用JS直接处理C丢过来的struct数据,具体可以查看:[原] C的struct和JSON交互
经过千辛万苦的查找,找到了这篇文章(作者应该比我更辛苦):Downloading Binary Streams with Javascript XMLHttpRequest
把关键点翻译如下(不过我还没有测试):
利用XMLHttpRequest的overrideMimeType方法设置charset为x-user-defined。

  1. //fetches BINARY FILES synchronously using XMLHttpRequest
  2. load_url = function(url) { 
  3.   netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
  4.   var req = new XMLHttpRequest();
  5.   req.open('GET',url,false);
  6.   //XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]
  7.   req.overrideMimeType('text/plain; charset=x-user-defined');
  8.   req.send(null);
  9.   if (req.status != 200) return '';
  10.   return req.responseText;
  11. }
  12.  
  13. var filestream = load_url(url);
  14. var abyte = filestream.charCodeAt(x) & 0xff;

IE不支持overrideMimeType方法,不过有评论者说VBScript可以实现:

  1. Dim xhr
  2. Set xhr = CreateObject("Microsoft.XMLHTTP")
  3. xhr.Open "GET", "folder.bin", False
  4. xhr.setRequestHeader "Accept-Charset", "x-user-defined"
  5. xhr.setRequestHeader "Content-Type", "application/pdf"
  6. xhr.send Null
标签: , , , , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in JavaScript, Technology | No Comments »

[原] 未来分布式BBS的可能实现架构

Posted by bianbian on 2008-04-04 14:22


本文Tags: ,

libevent
http://www.monkey.org/~provos/libevent/

memcached
http://www.danga.com/memcached

libmemcached
http://tangent.org/552/libmemcached.html

memcachedb (新浪博客技术团队,赞一个)
http://memcachedb.org/

ncache (同上)
http://code.google.com/p/ncache/

标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in C/C++, Technology | No Comments »