andelf fledna Feather

2011年3月25日星期五

where is urldecode in python urllib?

Answer:

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 实现.

很多其他语言开发的网站程序需要整合到UCenter中,但是由于 UCenter 是使用
PHP开发的,很难移植。其中最难缠的 uc_authcode.
测试实现了 uc_authcode 函数。纯 python,无三方库。

Creative Commons License
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

Precedence Level Associates Operator Operand Types
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
--
__ _
/ ) / // /)
/--/ ____ __/ _ // //
/ (_/ / <_(_/_</_</_//_
/>
</

2010年10月7日星期四