http://os.51cto.com/art/200909/149391.htm
andelf fledna Feather
2011年4月16日星期六
2011年3月25日星期五
where is urldecode in python urllib?
refer to cgi module.
cgi.parse_qs
cgi.parse_qsl
Why:
because urllib is used to make request, while cgi is used to receive request.
uc_authcode 函数的 Python 实现.
PHP开发的,很难移植。其中最难缠的 uc_authcode.
测试实现了 uc_authcode 函数。纯 python,无三方库。
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
#!/usr/bin/env python # -*- coding: utf-8 -*- # FileName : uc_authcode.py # Author : Feather.et.ELF# Created : Fri Mar 25 00:11:57 2011 by Feather.et.ELF # Copyright : Feather Workshop (c) 2011 # Description : uc_authcode in python # Time-stamp: <2011-03-25 00:12:13 andelf> def uc_authcode(string, op='DECODE', key='', expiry=0): import time as t import base64 import hashlib md5 = lambda s: hashlib.md5(s).hexdigest() microtime = lambda : str(t.time()) time = lambda : int(t.time()) ckey_length = 4 key = md5(key) # or use key = md5(key or UC_KEY) keya = md5(key[:16]) keyb = md5(key[16:]) if op == 'DECODE': keyc = string[:ckey_length] else: keyc = md5(microtime())[-ckey_length:] cryptkey = keya + md5(keya + keyc) key_length = len(cryptkey) if op == 'DECODE': string = base64.b64decode(string[ckey_length:]) else: string = ('%010d' % (expiry + time() if expiry else 0)) + \ md5(string + keyb)[:16] + string string_length = len(string) result = '' box = range(256) rndkey = [ord(cryptkey[i % key_length]) for i in xrange(256)] j = 0 for i in xrange(256): j = (j + box[i] + rndkey[i]) % 256 box[i], box[j] = box[j], box[i] a = j = 0 for i in xrange(string_length): a = (a + 1) % 256 j = (j + box[a]) % 256 box[a], box[j] = box[j], box[a] result += chr(ord(string[i]) ^ (box[(box[a] + box[j]) % 256])) if op == 'DECODE': try: # use assert to catch misc case assert (int(result[:10])== 0) or (int(result[:10]) - time()> 0) if result[10:26] == md5(result[26:] + keyb)[:16]: return result[26:] else: return '' except: return '' else: return keyc + base64.b64encode(result).replace('=', '') def test(): APP_KEY = 'x2ta5X12oTz75gbRTMB6gY6thZ7D83' text = 'this_is_the_string_to_be_encrypted' print 'text=', text e = uc_authcode(text, "ENCODE", APP_KEY) print 'e=', e e += '='*(len(e) % 4) # must fix padding assert uc_authcode(e, "DECODE", APP_KEY) == text print 'rslt=', uc_authcode(e, "DECODE", APP_KEY) if __name__ == '__main__': test()
2010年12月9日星期四
DirectoryStorage 中 “No module named lock_file” 处理
Log message for revision 92364: Removed the ZODB.lock_file module. Now depend on zc.lockfile instead.
源代码中把所有的 ZODB.lock_file 改成 zc.lockfile 即可。
然后执行
G:\Plone>.\python\python.exe .\temp\DirectoryStorage_1_1_19\mkds.py .\var\direct orystorage Full bushy
然后Add ZODB Mount Point 即可。。。
2010年10月26日星期二
mysql命令行不执行和命令行中文乱码的解决
1:Mysql 命令不可以执行
原因 :呵呵 比如 show databases 的命令 ,执行完之后 啥也没有 ,仔细 找了原因 ,Oh my god 少了 分号。
应写成:show databases;
2:命令行中文乱码问题
现象:mysql的默认编码设置为utf-8,页面以utf-8的编码方式写入到数据库。用工具查看一切正常,但从mysql的命令行读数据出来总是乱码。
原因:mysql的客户端根本无法以utf-8的形式返回数据,解决如下:
set names gb2312;
2010年10月16日星期六
JavaScript Operator Precedence
Operation Performed
1 Left [] MemberExp Expression
Left . MemberExp Identifier
Right new MemberExp Arguments
2 Left ( ) CallExpression Arguments Function Call
Left [] CallExpression Expression
Left . CallExpression Identifier
3 n/a ++ LeftHandSideExp PostfixIncrement
n/a -- LeftHandSideExp PostfixDecrement
4 Right delete UnaryExp
Call Delete Method
Right void UnaryExp Eval and Return undefined
Right typeof UnaryExp Return Type of an Object
Right ++ UnaryExp PrefixIncrement
Right -- UnaryExp PrefixDecrement
Right + UnaryExp UnaryPlus
Right - UnaryExp UnaryMinus
Right ~ UnaryExp BitwiseNot
Right ! UnaryExp LogicalNot
5 Left * MultExp UnaryExp
Multiplication
Left / MultExp UnaryExp Division
Left % MultExp UnaryExp Remainder
6 Left + AddExp MultExp Addition
Left - AddExp MultExp Subtraction
7 Left << ShiftExp AddExp BitwiseLeftShift
Left >> ShiftExp AddExp SignedRightShift
Left >>> ShiftExp AddExp UnsignedRightShift
8 Left < RelExp ShiftExp LessThanComparison
Left > RelExp ShiftExp GreaterThanComparison
Left <= RelExp ShiftExp LessThanOrEqualComparison
Left >= RelExp ShiftExp GreaterThanOrEqualComparison
Left instanceof RelExp ShiftExp Call HasInstance Method
Left in RelExp ShiftExp Call HasProperty Method
9 Left == EqualExp RelExp IsEqual
Left != EqualExp RelExp IsNotEqual
Left === EqualExp RelExp IsStrictlyEqual
Left !== EqualExp RelExp IsStrictlyNotEqual
10 Left & BitwiseAndExp EqualExp BitwiseAnd
11 Left ^ BitwiseXorExp EqualExp Bitwise Xor
12 Left | BitwiseOrExp EqualExp BitwiseOr
13 Left && LogicalAndExp BitwiseOrExp
LogicalAnd
14 Left || LogicalOrExp LogicalAndExp
LogicalOr
15 Right ? : LogicalOrExp AssignExp AssignExp
ConditionalExpression
16 Right = LeftHandSideExp AssignExp
AssignmentExpression
Right *= LeftHandSideExp AssignExp
AssignmentWithMultiplication
Right /= LeftHandSideExp AssignExp AssignmentWithDivision
Right %= LeftHandSideExp AssignExp AssignmentWithRemainder
Right += LeftHandSideExp AssignExp AssignmentWithAddition
Right -= LeftHandSideExp AssignExp
AssignmentWithSubtraction
Right <<= LeftHandSideExp AssignExp
AssignmentWithBitwiseLeftShift
Right >>= LeftHandSideExp AssignExp
AssignmentWithSignedRightShift
Right >>>= LeftHandSideExp AssignExp
AssignmentWithUnsignedRightShift
Right &= LeftHandSideExp AssignExp AssignmentWithBitwiseAnd
Right ^= LeftHandSideExp AssignExp AssignmentWithBitwiseOr
Right |= LeftHandSideExp AssignExp AssignmentWithLogicalNot
17 Left , Expression AssignExp SequentialEvaluation
--
__ _
/ ) / // /)
/--/ ____ __/ _ // //
/ (_/ / <_(_/_</_</_//_
/>
</
