bianbian coding life

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

Archive for October, 2007

[嗯]新增小百合文档网域名

Posted by bianbian on 2007-10-31 11:28


本文Tags:

lilydoc.net
准备放小百合(LILYBBS)内的优秀文档,否则淹没在一片水中太可惜了。
现在也增加了BT服务器(拿我那台破机器做的,仅供校内访问):bt.lilydoc.net

标签:

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

相关日志

Posted in Uncategorized | No Comments »

[原]一种blog日历的JSON压缩输出算法

Posted by bianbian on 2007-10-17 11:56


本文Tags: , , ,

一般高效的blog日历会将所有发表日期单独存储到js中,由客户端脚本负责输出日历链接。
以前都是按yyyymmdd输出blog日历的,如果发文多的话会特别长(特别是几年下来)。
最近用JSON输出blog日历的时候,发现一种更简单、更高效、更省数据量的方法:

{
"年份":["一月天", "二月天", ...., "五月天", .... , "十二月天"]
}

即年份作为JSON属性,值是十二个月天数构成的数组(五月天纯粹是增加关键字 - -)。
一个月最多有31天,如果用数字表示得用62个长度的字符。我决定用单个可打印字符的ASCII码代替。
在ASCII表里找了一段:从61-91(”=>?@ABCDEF……UVWXYZ[”)满足要求(刚好是天数+60)
于是,原来比如2006每个月各发表1篇blog的数据从:

"20060111,20060212,20060313,20060414,20060515,20060616,20060717,20060818,20060919,20061020,20061121,20061222"

就可以压缩到(106是linux下struct tm的year,是1900+的,106+1900=2006):

{"106":["G","H","I","J","K","L","M","N","O","P","Q","R"]}

当然这只是一个特殊例子,实际上用户写blog都有一段时间的连续性。用这种办法输出的日历数据在
数据量大的情况下会更加省空间。(显然原来的方法重复了很多年份、月份数据)。
下面是一个勤劳用户从04到07年的blog日历(几乎天天有文章更新):
总数据量1K不到,如果用yyyymmdd的方法估计要是这个的5-6倍

b_date={"104":["=@DEGJO[","?CGHLP","BDEHIPTUY[","?ELNOPQRSUVZ","?ABGIKLMOPSTZ[",">CHIJLMNOPSUX",">AFGNT[",">GNOPQV","DUWZ","BDGHKNOQR","=?CDFLNOSTUVXYZ","=>?@BCDEFIJOPQSTWXYZ["],
"105":["?@BCEFGHIJMNOPQSTUV[","=>?@ABCGIJKLMNOPQRSTUVWX","=>?@ABCDEFGHIJKLMNOP","VWXYZ","=>ABCDEFGHIJLMN","BCDEFIJKLMOPQRSUWXYZ","=?@BCDEFGHIJNOPQRUVWY","=>BNRSUVWZ",">ABCDFGHIJKMOQTVWYZ","DEFGHIJLNOPQRUVW[","=>?@BCDEFGHIJKLQSTWXZ","=>@AHIJKNOPQRSVYZ"],
"106":["@ABFILMOPSTU",">DEFGIJKMNPQ",">BCDEFGHIJKOPQSTWXYZ","=?@ABEFGHIJLMNOPQRSTUVWX","DFLNORY[",">ABEFGHIJLOPQSUVWZ","=>ABCEFIJMNQUVW[","=>CEIJORSTUXYZ[","=>ACEGHKOPQRTUVWX","?@BDEFGHIJLNOPQSTUVWX","=>?AFHIJOPQSTWXYZ","=ABCGJNORUV["],
"107":[">@JKLNOPQRSTUVWXY[","=>?BDFGIKLSTUVWX",">@ABCEGHIKOPQRUVWXY[","=ABEFGHIKLMOPQSUVWXZ","?CDFHIJKLMNOQRSTUVWYZ","=?@ABCDEFGHIKLMNOPQRUWY","=?ADFGHIKMNOPSUWZ[","=>?@ABCDFGHIKLMNOPRSVWXY",">?@ABCDEFGIJKMNPQRTVXY",">ACDEGHJKL","",""]
}

用客户端Javascript解析的时候也比原来方便直接。原来需要split然后循环判断(如果排序了可以用二分法)。而JSON不需要这种解析,直接可以拿来用:使用String.fromCharCode(60+天)获得某天的字符,然后在当月中查找一下:

  1. //b_date={}
  2. function HasPost(Y, M, D)
  3. {
  4.     if (!b_date)
  5.         return false;
  6.     if (!b_date[Y])
  7.         return false;
  8.     var ds = b_date[Y][M];
  9.     return (ds.indexOf(String.fromCharCode(60+D)) > -1);
  10. }

(当然,如果要更省空间,甚至可以把各月的数据用一个字符串表示、用逗号隔开;不过这样就得在客户端split然后再解析了。我认为这是不必要的:每年只省下22个字节而已)

标签: , , ,

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

相关日志

Posted in JavaScript, Technology | 1 Comment »

[晕] nginx的internal属性的bug

Posted by bianbian on 2007-10-16 02:17


本文Tags: , ,

文档上说,internal用来禁止用户直接通过地址访问。
syntax: internal
default: no
context: location

internal indicates that the matching location can be used only for so called “internal” requests.
For external requests it will return the error “Not found” (404).
Internal requests are the following:
1) requests redirected by the instruction error_page
2) subrequests created by the command include virtual of the “ngx_http_ssi_module” module
3) requests changed by the instruction rewrite of the “ngx_http_rewrite_module” module

An example to prevent clients fetching error pages directly:

  1. error_page   404   /404.html;
  2. location  /404.html {
  3.     internal;
  4. }

实际发现,rewrite的用internal修饰后就挂了。像下面这个配置,如果/realpath/设了internal,用/proxypath/访问就是404。
这个跟本意是违背的(本意只能通过/proxypath/访问,而隐藏/realpath/),应该是nginx的bug(我的版本0.5.32)

  1. location /proxypath/ {
  2.    root     /realpathroot;
  3.    rewrite ^/proxypath/(.+)$  /realpath/$1? last;
  4. }
  5. location /realpath/ {
  6.   internal;
  7. }
标签: , ,

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

相关日志

Posted in Linux, Technology | No Comments »

[转]帝国时代2端口映射

Posted by bianbian on 2007-10-04 07:43


本文Tags: ,

备忘:
http://www.game5i.com/aoc/xueyuan/faq/200308/308.html
疯子微软了,同样是即时战略游戏,星际只用了两个端口,而帝国却用了N个,你知道N等于几吗? N=201 !!!天啊201个端口,真不知道 那帮编游戏的疯子是怎么想的。下面给出帝国要用到的具体的端口。
TCP:2300-2400 ,47624
UDP:2300-2400

标签: ,

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

相关日志

Posted in Entertainment, Not IT | No Comments »

[原]用AutoIt完成CCProxy的代理切换

Posted by bianbian on 2007-10-03 01:50


本文Tags: ,

南大的VPN,进校以后访问外网就必须用代理。
这样各个软件切换代理特别麻烦,比如浏览器、QQ、MSN、旺旺、BT、FlashGet得改代理吧。
我用AutoIt3写了一个软件,能自动切换CCProxy的代理(就是使不使用二级代理)。这样,把其他软件的代理都设为127.0.0.1:8080,就是用CCProxy作为其他软件的代理服务器,然后用程序切换CCProxy的二级代理状态即可。
不用VPN的时候不使用二级代理,用了VPN的时候只要运行一下程序,把CCProxy的二级代理状态打开,其他软件就不需要切换代理了。反之也一样。非常方便。
下面是源码:

  1. #cs ------------------------------------------------
  2.  
  3.  AutoIt Version: 3.2.8.1
  4.  Author:         http://bianbian.sunshow.net
  5.  
  6.  Script Function:
  7.     切换CCProxy的代理(是否使用二级代理).
  8.  
  9. #ce ------------------------------------------------
  10.  
  11. $PATH = @ProgramFilesDir & "\CCProxy"
  12. $EXE = $PATH & "\" & "CCProxy.exe"
  13. $INI = $PATH & "\" & "CCProxy.ini"
  14. $TT = "CCProxy 6."
  15. $TX = "Youngzsoft"
  16.  
  17. ; check running
  18. If Not ProcessExists("CCProxy.exe") Then
  19.     MsgBox(0, "Error", "CCProxy未运行!")
  20.     Exit
  21. EndIf
  22.  
  23. ; run it! so activate the already-running one!
  24. RunWait($EXE, $PATH)
  25.  
  26. ; try kill it!
  27. WinClose($TT, $TX)
  28. WinWait("CCProxy", "是否真的关闭代理服务器")
  29. ControlClick("CCProxy", "是否真的关闭代理服务器", "Button1")
  30.  
  31. ; change PROXY setting
  32. $set = IniRead($INI, "system", "CascadingProxy", 0)
  33. If $set = 0 Then
  34.     $set = 1
  35. Else
  36.     $set = 0
  37. EndIf
  38. IniWrite($INI, "system", "CascadingProxy", $set)
  39.  
  40. ; done! restart it!
  41. Run($EXE, $PATH)
  42. ?>
标签: ,

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

相关日志

Posted in AutoIt3, Technology | 1 Comment »

[呜]硬盘坏掉真是太郁闷了

Posted by bianbian on 2007-10-01 01:41


本文Tags:

尝试各种办法都没办法恢复我的那么多代码了,唉。
太郁闷了~~~~~~~~~~~~~太痛苦了~~~~~~~
虽然有些代码到处都有备份,不过是比较老的版本。
尤其是最近写的那些个淘宝工具丢了,,,,唉,,,,,
看来以前说的3月刻一次文档盘还是得执行下去。

标签:

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

相关日志

Posted in Uncategorized | No Comments »