bianbian coding life

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

Archive for the 'Technology' Category

IT

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

Posted by bianbian on 2008-04-04 02: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 »

[原] 保留数据表内最后N条记录的SQL语句

Posted by bianbian on 2008-04-02 09:16


本文Tags: ,

SQL语句的需求真是无止境,今天又有一个:需要保留数据表内最后N条记录。
这个需求还是经常碰到的:
比如实时更新的滚动新闻,只需要保留最后的N条,过期的就删除;或者临时上载文件存放表,每天只允许保留N个文件,过期的就连文件一起删除(数据库存放文件路径方式,除了删除记录,还要删除文件——意味着需要取出将被删除的过期记录)。
因为事先不知道总记录长度,常规做法应该select count(*)一遍,然后获得要删除的记录条数。
不过为了提高数据库性能,应尽量减少查询结果返回次数——其实就是能不能一句SQL搞定?

  1. //删除记录,假设N100
  2. DELETE FROM table WHERE id NOT IN ( SELECT id FROM table ORDER BY id DESC LIMIT 100 );
  3.  
  4. //取出过期记录
  5. SELECT * FROM  table WHERE id NOT IN ( SELECT id FROM table ORDER BY id DESC LIMIT 100 );
标签: ,

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

相关日志

Posted in Database, Technology | No Comments »

[原] 支持IE和Firefox的鼠标滚轮事件JavaScript代码

Posted by bianbian on 2008-03-31 10:09


本文Tags: , , , , ,

滚轮IE和Firefox的代码不一样:
IE是mousewheel事件,Firefox是DOMMouseScroll事件
事件属性,IE是event.wheelDelta,Firefox是event.detail
属性的方向值也不一样,IE向上滚 > 0,Firefox向下滚 > 0

  1. //滚轮放大或缩小,基于Prototype 1.6
  2. var scrollfunc = function(event) {
  3.         var direct = 0;
  4.         if (event.wheelDelta) {
  5.                 direct = event.wheelDelta > 0 ? 1 : -1;
  6.         } else if (event.detail) {
  7.                 direct = event.detail < 0 ? 1 : -1;
  8.         }
  9.         zoom(direct);
  10. };
  11. Event.observe(document, 'mousewheel', scrollfunc);
  12. Event.observe(document, 'DOMMouseScroll', scrollfunc); //firefox
标签: , , , , ,

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

相关日志

Posted in JavaScript, Technology | No Comments »

[原] IDL剪贴板绘图在其他语言调用下失效的bug

Posted by bianbian on 2008-03-26 02:32


本文Tags: , , ,

经过运行剪贴板监视器程序,我确认这是IDL的bug:如果用VC等其他语言调用IDL绘图,IDL并不能通过IDLgrClipboard对象将绘图结果保存到系统剪贴板(而在IDL的编辑器环境下运行,剪贴板是能得到绘图结果的)。
下面是英文描述:
IDLgrClipboard not works in callable mode (I use VC++ to execute IDL procedure to draw some plots, and copy the result to system clipboard). After running a system-clipboard-viewer-tool, I conclude it must be a bug (I tested with IDL6.2, IDL7.0).

oClipbrd = OBJ_NEW(’IDLgrClipboard’, DIMENSIONS=windowSize)
oClipbrd->Draw, oView

It works well under IDL-workbench, but when call from VC++, everything else goes OK except clipboard is empty.

解决办法:只好制定FILENAME参数,将结果保存到文件:
Finally, I have no choise but to save the drawing to a file, and it works:

oClipbrd->Draw, oView, FILENAME=’tempout.bmp’

标签: , , ,

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

相关日志

Posted in C/C++, ENVI & IDL, Technology | No Comments »

[原] 模仿Google Map的FY2C实时云图平台上线~

Posted by bianbian on 2008-03-25 10:03


本文Tags: ,

模仿Google Map(图片切片载入在此平台不需要实现):

支持IE、Firefox等,支持鼠标移动、鼠标双击放大(左键)缩小(右键)、鼠标滚轮放大缩小

云图实时处理和发布(因为在学校内网,实时版本大家不能看到啦)

这里贴下演示地址(只有最后两个时次的图片):FY2C实时云图平台演示

标签: ,

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

相关日志

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

[原] 关于Javascript的this关键字答网友问

Posted by bianbian on 2008-03-25 01:57


本文Tags: , ,

发信人: Net (BBS上没有什么事情是bg不能解决的), 信区: WebDesign
标 题: Re: Javascript问题
发信站: 南京大学小百合站 (Tue Mar 25 01:16:03 2008)

Javascript里的this和其他OO语言不一样
Javascript其实并不适合做OO,其实OO也并不适合Javascript
扯远了。。。。。。
this你就当“执行函数的宿主”理解。因此在一串函数的执行过程中,this不停地在变。

  1. A = {
  2.     member: "OK",
  3.     method: function () {
  4.         alert(this.member);
  5.     }
  6. };
  7. B = A.method;
  8.  
  9. A.method(); //弹出"OK". A是宿主,this.member == A.member
  10. B();        //弹出undefined. window(缺省)是宿主,this.member == window.member

为了解决这个问题,很多框架对此进行了包装。
比如Prototype,用bind,实际是动态生成一个function,把宿主作为动态function的执行者,这样对用户来说,this似乎没有变化。

  1. bind: function() {
  2.     if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
  3.     var __method = this, args = $A(arguments), object = args.shift();
  4.     return function() {
  5.       return __method.apply(object, args.concat($A(arguments)));
  6.     }
  7.   }

实际只要明白this是执行者的指针,一切都可迎刃而解。

标签: , ,

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

相关日志

Posted in JavaScript, Technology | No Comments »

[原] IE模拟鼠标右键双击事件

Posted by bianbian on 2008-03-25 01:10


本文Tags: , , ,

IE实在太垃圾了,再鄙视一次。。。鼠标右键双击居然没有。。。。
只好用onmouseup事件模拟一个(基于Prototype 1.6):

  1. if (Prototype.Browser.IE) {
  2.     mouseCount = 0;
  3.     Event.observe(document, 'mouseup', function(event) {
  4.         if (Event.isRightClick(event)) {
  5.             if (++mouseCount > 1) {
  6.                 mouseCount = 0;
  7.                 var pxy = Event.pointer(event);
  8.                 alert("right mouse double click on: " + pxy.x + ", " + pxy.y);
  9.             } else {
  10.                 setTimeout("mouseCount = 0", 1000);
  11.             }
  12.         }
  13.     });
  14. }
标签: , , ,

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

相关日志

Posted in JavaScript, Technology | 1 Comment »

[原] 自定义IDL调色板指南

Posted by bianbian on 2008-03-21 12:06


本文Tags: , ,

IDL的调色板功能很好很强大,以至于我还没琢磨透到底怎么调。。。。

不过一般都是用自己定义的调色板,就讲讲怎么往IDL里加入自己的调色板:
(加了以后在系统内LOADCT的时候,就能直接读取自定义的调色板,非常方便)

IDL提供了 MODIFYCT 命令用来更改或加入系统的预定义调色板:

MODIFYCT, Itab, Name, R, G, B [, FILE=filename]

Itab是索引值,0-40是系统的,一般都要41开始
Name是命名,32个字符内
R、G、B就是256长度的BYTE(单字节正数)数组
File是文件名,如果不制定就操作默认的(resouce目录的color1.tbl)

实际发现File指定了其他文件名,MODIFYCT会出错。看了源码,发现
MODIFYCT并没有处理文件读取错误(不存在)的异常。(不知道是不是IDL7.0的问题)

IDL也没有公开colortable的文件格式。不过我把MODIFYCT的源码结合color1.tbl
分析了一下,得到IDL的colortable文件格式:

总数 + R 256 + G 256 + B 256 + …. + 32长度名称(在文件末尾)

例(如果有两个表):[2][R..R][G..G][B..B][R..R][G..G][B..B][名称1][名称2]

这样就可以自己输出调色板文件了,不需要用IDL的默认文件(防止多用户冲突)。
之后可以用 LOADCT, 0, FILE=’mytable.tbl’ 动态载入

附C语言输出调色板文件代码:

  1. FILE *fp = fopen(file, "wb");
  2. BYTE n = 1;
  3. fwrite(&n, 1, 1, fp);
  4. fwrite(m_byteRGB, 1, 256 * 3, fp);
  5. fprintf(fp, "%-32s", "bianbian Default Table");
  6. fclose(fp);
标签: , ,

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

相关日志

Posted in C/C++, ENVI & IDL, Technology | 2 Comments »

[原] IDL的数组存储是行顺序,下标引用是列在前

Posted by bianbian on 2008-03-17 01:29


本文Tags: , , ,

IDL的数组在内存中存储还是以行顺序的,只是多维下标引用的时候列为先。即:
A=
[r r r]
[g g g]
[b b b]
在内存中是 rrrgggbbb(和C是一样的!fortran是rgbrgbrgb)

而引用的时候列在前:(C是行在前!)
A[0,0] A[1,0] A[2,0]
A[0,1] A[1,1] A[2,1]
A[0,2] A[1,2] A[2,2]

三维的情况和C也一样(注意,IDL和C唯一的差别就是IDL的下标列在前,然后是行);存储结构一致也就意味着C里的多维数组内存块可以直接丢到IDL里处理。其实我觉得IDL在下标上太小白了,干嘛不和C保持一致?某IDL大牛说:之所以下标在前,是为了更直观的知道X方向上有几个、Y方向上有几个。比如:A[3, 2],X方向有3个,Y方向有2个(2行3列):Is IDL column-major or row-major?

某本书(似乎国内的书都不认真写 - -)说IDL是列顺序的,这是不对的。可以拿三维数据做简单试验(也便于对下标引用理解):

IDL> a=bindgen(3,3,3)
IDL> print,a
   0   1   2
   3   4   5
   6   7   8

   9  10  11
  12  13  14
  15  16  17

  18  19  20
  21  22  23
  24  25  26
IDL> print,a[1,0,*]
   1

  10

  19
IDL> print,a[*,1,1]
  12  13  14
标签: , , ,

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

相关日志

Posted in C/C++, ENVI & IDL, Technology | 1 Comment »

[原] 减小nginx编译后的文件大小 (Reduce file size of nginx)

Posted by bianbian on 2008-03-13 10:21


本文Tags: , , ,

默认的nginx编译选项里居然是用debug模式(-g)的(debug模式会插入很多跟踪和ASSERT之类),编译以后一个nginx有好几兆。
去掉nginx的debug模式编译,编译以后只有375K(nginx-0.5.33, gcc4)。
在 auto/cc/gcc,最后几行有:
# debug
CFLAGS=”$CFLAGS -g”
注释掉或删掉这几行,重新编译即可。-g参数用法详见这篇blog:[原]Linux下的c/c++ GDB调试

Nginx uses debug mode (-g) in compiling by default, which result in several MB of it’s size.
After debug disabled, the file size of nginx reduced to 375K (nginx-0.5.33, gcc4).
open auto/cc/gcc, find this at last several lines:
# debug
CFLAGS=”$CFLAGS -g”
delete it, and recompile. More of -g: Linux c/c++ GDB debug

标签: , , ,

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

相关日志

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

[原] 也许是prototype框架的bug

Posted by bianbian on 2008-03-08 08:03


本文Tags: , , , ,

不知道怎么给prototype提交bug report,就写在这里吧:
其实我没有测试过,只是看prototype源码的时候,觉得是个bug:
对String的原型(prototype)添加toJSON()函数只是转义了引号,未转义”\”:

  1. if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
  2. return "'" + escapedString.replace(/'/g, '\\\'') + "'";

如果用户在input里输入\\,转成string应该是”\\\\”,如果没有转义,再写回去的时候就丢了一个\
应该在转义引号前先转义\:

  1. .replace(/\\/g, '\\\\').replace(/"/g, '\\"')
标签: , , , ,

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

相关日志

Posted in JavaScript, Technology | No Comments »

[原] IDL 7.0测试截图

Posted by bianbian on 2008-03-08 06:35


本文Tags: , ,

IDL的功能非常强大(尤其是画三维图上,等我文章出来再帖过),支持多操作系统。
Grads可以实现的IDL都能实现,IDL能实现的Grads不一定能。
只不过我们系里熟悉Grads的多一些,如果想用IDL,可能自己要多费点力气。
IDL7.0的编辑器基于eclipse,如果写过java的应该非常熟悉这个编辑器。比IDL6自带的编辑器好多了,确实非常方便。
下面是我简单的测试截图(为了图小一点,编辑器拖得比较小):

Splash画面:
idl_0.jpg
欢迎画面:
idl_1.jpg
编辑器(有语法提示,按F1可在IDE里嵌入帮助,见下图):
idl_2.jpg
测试plot(右侧是嵌入的帮助)。中间是plot的默认结果,支持很多参数,效果可以改:
idl_3.jpg
标签: , ,

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

相关日志

Posted in ENVI & IDL, Meteorology, Technology | No Comments »

[原] SSH端口转发(SSH Port Forwarding)太爽了啊

Posted by bianbian on 2008-03-07 04:14


本文Tags: , ,

试过就知道,贴相关的几个网址:
http://staff.washington.edu/corey/fw/ssh-port-forwarding.html
http://sshwindows.sourceforge.net/
http://www.inet.no/dante/
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

标签: , ,

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

相关日志

Posted in Technology | 2 Comments »

[原] 整理了BBS的Javascript脚本,注意关键字

Posted by bianbian on 2008-02-29 12:56


本文Tags: , ,

随着脚本越来越大,原有的funtion式已经不利于维护。
正好凑着有兴致,一个通宵把Net库完善了一下,Net.Dom, Net.Event, Net.Drag, Net.Dialog, Net.Ajax等,应该能满足日常需要。
另外把BBS的脚本分类到Net.BBS, Net.BBS.Html等命名空间下。
现在pack了以后约50K,以后会更大一点。
有兴趣的可以提意见:http://bbs.nju.cn/jssrc/bbs.full.js
另外谢谢oznyang@Lilybbs指出,Javascript关键字在IE里要小心,其实IE也该聪明一点,很显然是个属性嘛:

  1. addComm: function (id) {
  2.   var url = Net.Util.toQuery("pntcomm", {board: G.c.Brd, "id": id, do: "add"});
  3.   //上句do是关键字,在IE里会报错“缺少标识符、字符串或数字”,应该"do"引起来
  4.   var div = $("pntcomm" + id); //评论div
  5.  }

人累了确实会变笨,这么低级的错误debug了我几个小时。哎。。。更关键的是IE这个SX报错不准确,再度鄙视

标签: , ,

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

相关日志

Posted in JavaScript, Technology | 2 Comments »

[荐] 网游《征途》:金钱铸就的通往奴役之路

Posted by bianbian on 2008-02-23 04:49


本文Tags: ,

我对网游没兴趣,不过今天偶然看到一篇好文,推荐如下:
首先把精彩评论转载:
这绝对不是所谓的“大家都是成年人,没有人逼你玩,也没有人逼你花钱。”这么简单的问题。而是一件事/一个游戏的价值取向问题。如果一个游戏本身的价值取向有争议,就应该被讨论,如果价值取向被证明是错误的,就应该被限制。
例如,两个成年人,一个愿意被另一个杀死然后被吃掉,另一个也同意杀死他并且吃掉他,这样的双方都同意的行为就应该存在吗?当然不。应该这样的行为的价值取向是错误的,是反人性的。
我希望游戏的开发者要适度考虑自己的社会责任,要开发价值取向正确的游戏,有助于游戏玩家适度的娱乐,而不是只会挑起仇恨,使玩家沉溺其中,无法自拔。
魔和神的区别是,魔会利用人的弱点,让人仇视和自相残杀。而神会告诉人人性的弱点,要人类学会克制自己的弱点,要学会宽容,要学会有节制的竞争和学会合作。

原文地址:网游《征途》:金钱铸就的通往奴役之路

编者按:
在一款同时在线人数超过百万、全部玩家加起来可以组成一个超级城市的网络游戏中,它的游戏精神是指向乐趣,还是指向权力和金钱?它的社会规则是新世界的开放自由,还是率土之滨莫非王臣?这不只是对某一款游戏的追问,甚至也不只是对韩式网游的价值观的追问,而是对人与游戏、人与人的关系的追问。虚拟世界是现实世界的一部分,也有着人们必须捍卫的准则。

在当下中国最火的一款网络游戏中,玩家们遭遇到一个“系统”,它正在施行一种充满诱惑力的统治。这个“系统”隐匿无踪,却无处不在。它是一位虚拟却真实的垄断者。“如果没有我的允许,这个国家的一片叶子也不能动。”这是智利前独裁者皮诺切特的声音,悄然回响在这个虚拟世界之中。

标签: ,

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

相关日志

Posted in Other, Technology | 1 Comment »