开源许可证的区别图示

看了阮一峰的一片关于开源许可证的文章《如何选择开源许可证?》,感觉里面这个图还有改进的余地,因此在他这个图的基础上作了一点改动。所有的许可证从左至右是从限制较多到限制较少的进行排列。如下图所示:

开源许可证

Chrome扩展更新:Smart RSS Subscriber for Google Reader™(v0.1.5)

就是原先的Google Reader RSS Subscriber,因为google的品牌政策,所以修改了扩展名称,另做了少量修改和修复。扩展地址为: https://chrome.google.com/webstore/detail/ngjinemddlnikfdlbnbdbajdhagbcjmg

用VBScript实现生成目录树以Excel格式保存

帮朋友实现这个功能,本想采用Python,熟门熟路的,但是朋友机器可能没有安装。对于小白,担心他会有更多的麻烦,只好试试好久没用的VBScript了。保存为Excel格式其实偷了懒,保存的是HTML格式,不过可以很容易的转到Excel中。实现代码如下:

''''''''''''''''''''''''''''''''''''
' Copyright (C) 2011
' Author: Lunny Xiao
' Email: xiaolunwen@gmail.com
' Date: 2011-7-1
' Description: traversing directory and building directory tree as html file format. If you want excel format,
'    you can open the html, select all content and paste to a new excel file. That's all.
''''''''''''''''''''''''''''''''''''

'Option Explicit

set fso = createobject("scripting.filesystemobject")

Sub TraverFolder(fd, folder, level)
    Set f = fso.GetFolder(folder)
    Set files = f.Files
    Set sfs = f.SubFolders
    dim i
    dim j
    i = 0
    For Each a in sfs
        fd.write("\n")
        For j = 1 To level
            fd.write("\n\n")
        Next
        fd.write("\n" & a.name & "\n\n")
        TraverFolder fd, a.Path, (level+1)
    Next

    i = 0
    For Each b In files
        fd.write("\n")
        For j = 1 To level
            fd.write("\n\n")
        Next
        fd.write("\n" & b.name & "\n\n")
    Next
    If i = 0 Then
        fd.write(vbcrlf)
    End If
End Sub

msg="请输入根目录:"
dir=Inputbox(msg, "根目录")  

set ts = fso.opentextfile("d:\\res.html", 2, true)
ts.write("\n")
TraverFolder ts, dir, 0
ts.write("\n")
ts.close()
  • 使用方法

将上述代码保存为一个.vbs文件,直接双击该文件,会弹出框询问根目录(可从资源管理器复制粘贴)。点击确定,会在D盘根目录生成一个res.html文件。打开该文件,全选,复制,粘贴到一个新的Excel文件即可。

Python实现图书10位ISBN号转换为13位

ISBN是图书的一个国际通用编号,详细信息可参考维基百科中的词条:http://zh.wikipedia.org/wiki/ISBN

ISBN在07年前使用的是10位编号,07年后并入国际货品编号,升级为13位,以下为将10位编号转换为13位编号的Python代码:

def isbn10to13(isbn):
    if len(isbn) != 10:
        return None
    isbn = "978"+isbn[:-1]
    sum = 0
    for i, b in enumerate(isbn):
        sum += (1 if i % 2 == 0 else 3) * int(b)
    return "%s%d" % (isbn, (10 - sum % 10) % 10)

输入内容为10位的ISBN号去除连接符“-”的字符串,输出内容为13位的ISBN号去除连接符“-”的字符串。主要的工作在于计算出最后一位的校验码。