21 六 2010
by 抽屉 in Endless Learning Tags: chrome , google , indianapolis , project
Well, some of you may know I ranged my personal projects by alphabetical, and suddenly I add one more rule: all projects named by US city name.
So, from Project:Austin,Boston,California… then finally I’ve created the folder Project:Indianapolis.
What is project Indianapolis? Actually, it will be a Google Chrome Extension.
What can Indianapolis do? Just a simply ToDo list…
Will Indianapolis it’s official name? Nop. It’s just a code name. It’s official name hasn’t been decided yet! I will let you know as soon as I got one.
30 三 2009
by 抽屉 in Endless Learning , Python Tags: error , Python
麻烦来了,随着继续看Byte-of-python 发现会遇到一些莫名其妙的问题:
class Robot:
'''Represents a robot, with a name.'''
population = 0
def __init__(self,name):
'''Initializes the data.'''
self.name = name
print('(Initializing{0})'.format(self.name))
Robot.population += 1
def __del__(self):
'''I am dying.'''
print('{0} is being destroyed!'.format(self.name))
Robot.population -= 1
if Robot.population == 0:
print('{0} was the last one.'.format(self.name))
else:
print('There are still {0:d} robots working'.format(Robot.population))
def sayHi(self):
'''Greeting by the robot
Yeah, they can do that.'''
print('Greetings, my masters call me {0}'.format(self.name))
def howMany(klass):
'''Prints the current population.'''
print('We have {0:d} robots'.format(Robot.population))
howMany = staticmethod(howMany)
droid1 = Robot('R2-D2')
droid1.sayHi()
Robot.howMany()
droid2 = Robot('C-3P0')
droid2.sayHi()
Robot.howMany()
print("\nRobots can do some work here.\n")
print("Robots have finished their work. So let's destory them.")
del droid1
del droid2
Robot.howMany() [code snippet: http://snipt.org/Pll ]
上面这段代码运行结果是:
Traceback (most recent call last):
File “F:\PJ\PythonPJ\objvar.py”, line 1, in <module>
class Robot:
File “F:\PJ\PythonPJ\objvar.py”, line 34, in Robot
droid1 = Robot(‘R2-D2′)
NameError: name ‘Robot’ is not defined
奇怪,只好再检查一次代码中有没有一些低级错误…暂时还没有什么发现…问题是拷贝PDF中提到的代码也是同样的错误…为什么Robot会没有define…
似乎是缩进的问题,调整了缩进之后的代码:
class Robot:
'''Represents a robot, with a name.'''
population = 0
def __init__(self,name):
'''Initializes the data.'''
self.name = name
print('(Initializing{0})'.format(self.name))
Robot.population += 1
def __del__(self):
'''I am dying.'''
print('{0} is being destroyed!'.format(self.name))
Robot.population -= 1
if Robot.population == 0:
print('{0} was the last one.'.format(self.name))
else:
print('There are still {0:d} robots working'.format(Robot.population))
def sayHi(self):
'''Greeting by the robot
Yeah, they can do that.'''
print('Greetings, my masters call me {0}'.format(self.name))
def howMany(klass):
'''Prints the current population.'''
print('We have {0:d} robots'.format(Robot.population))
howMany = staticmethod(howMany)
droid1 = Robot('R2-D2')
droid1.sayHi()
Robot.howMany()
droid2 = Robot('C-3P0')
droid2.sayHi()
Robot.howMany()
print("\nRobots can do some work here.\n")
print("Robots have finished their work. So let's destory them.")
del droid1
del droid2
Robot.howMany() [code snippet: http://snipt.org/Plm ]
这下可以initialize Robot了。可是问题又来,
(InitializingR2-D2)
Greetings, my masters call me R2-D2
Traceback (most recent call last):
File “F:\PJ\PythonPJ\objvar.py”, line 36, in <module>
Robot.howMany()
TypeError: howMany() takes exactly 1 positional argument (0 given)
**Note:本文中用Snipt.org输出的代码,在RSS阅读器中没法输出…
27 三 2009
by 抽屉 in Endless Learning , Python Tags: error , Python , question , zip
最近不知道为什么有回头开始看”Byte of Python V1.91″ 今天在读到72页“The solution”的时候遇到了一个问题。需要用python来写一段代码,备份系统的某个,或者某些文件夹。
原文的代码是这样的:
#!/usr/bin/python
# Filename: backup_ver1.py
import os
import time
# 1. The files and directories to be backed up are specified in a list.
source = ['"C:\\My Documents"', 'C:\\Code']
# Notice we had to use double quotes inside the string for names with
spaces in it.
# 2. The backup must be stored in a main backup directory
target_dir = 'E:\\Backup' # Remember to change this to what you will be
using
# 3. The files are backed up into a zip file.
# 4. The name of the zip archive is the current date and time
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'
# 5. We use the zip command to put the files in a zip archive
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))
# Run the backup
if os.system(zip_command) == 0:
print('Successful backup to', target)
else:
print('Backup FAILED') [code snippet: http://snipt.org/Ooi ]
我做了些许改动来符合我的现实状况:
import os
import time
source = 'F:\\PJ\PythonPJ'
target_dir = 'F:\\PJ\backup'
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'
zip_command = "zip -qr".format(target, ' '.join(source))
if os.system(zip_command) == 0:
print('Successful backup to', target)
else:
print('Backup FAILED') [code snippet: http://snipt.org/Ooh ]
可是,当我在Console中运行backup.py的时候,系统提示“zip I/O error: Invalid argument”… 奇怪了。Google得到的结果大多是当在压缩某个大文件的时候才出现这样的错误。而我的目标文件夹根本就只有5KB而已啊!
于是在“if os.system(zip_command) == 0:”之前加入了一句“print(zip_command)”看一下到底执行的zip命令是什么东西
import os
import time
source = ['F:\\PJ\PythonPJ']
target_dir = 'F:\\PJ\Backup'
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))
print(zip_command)
if os.system(zip_command) == 0:
print('Successful backup to', target)
else:
print('Backup FAILED') [code snippet: http://snipt.org/Ooj ]
终于,被我看到输出的命令是”zip -qr F:\PJackup\20090327162409.zip F:\PJ\PythonPJ” 我的目标路径变成了乱码…看来是“\b”被转义了…于是把backup变成了Backup。就没有问题啦。
另外,想如果下次还碰到这样的转义状况怎么办? 把路径改成 F:\\PJ\\backup也是一样OK哒
02 六 2008
by 抽屉 in Endless Learning , Vim study Tags: code complete , vim
好吧,我是一个懒人。
刚刚折腾完了Vim的配色我就想着要实现代码的自动补全了。一开始不知道需要添加什么插件,直到搜索了一下才知道原来VIm对代码补全的支持做的很好。
只需要在_vimrc中添加几行:
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascrīpt set omnifunc=javascrīptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete
这下,Vim就已经支持对python,javascript,html,css,xml,php和C的自动补全了,在写代码的时候按Ctrl+x和Ctrl+o就可以看到一个供选择的列表了。
爽。
02 六 2008
by 抽屉 in Endless Learning , Vim study Tags: colorscheme , vim
一直以来只是看到很多朋友向我推荐Vim说这是一款实用而且强大的编辑器。
但是,那个时候我一直觉得现有的编辑器已经够用,为什么要为了一个编辑器去记忆那么多快捷命令? 实在有些匪夷所思。
直到上星期五的时候,我决定还是体验一下Vim的强大好了,没想到,不用则已以用就发现我被折服了。果然Vim被这么多朋友爱戴不是没有道理的。
不过,默认的gVim实在是难看。我决定修改一下gVim的配色方案和字体。可是,我一直头疼在怎么保存设置。如果每次打开编辑器再修改也太麻烦了吧。
后来,终于被我发现,需要修改 $Vimruntime(这个代表你在磁盘上的安装路径)下的_vimrc这个文件。我这里用C:\Program Files\Vim 来表示。
首先用 :e c:\Program\Files\Vim\_vimrc 来打开这个文件
然后在最后的时候加上
colorscheme evening
set guifont=Lucida_Console
这么两句。按“ESC” 再:wq 保存退出就可以了。再次打开gVim的时候就是下图的样子啦。
很多人推荐torte这个配色方案。我个人觉得还是evening看着舒服些。同样,字体我比较推荐Lucida_Console,仁者见仁吧。
刚开始学习Vim,特地在这里记一笔。
19 三 2008
by 抽屉 in Endless Learning , MobileHI Guideline
iPhone Human Interface Guidelines
这部分内容是我在空余时间的翻译联系。中间可能存在一些翻译的不准确,如果您在阅读的过程中发现这类问题,请和我(chouti AT Gmail.com)取得联系。 当然这部分翻译内容请勿用作商业的使用。转载请注明来源和保留以上声明。
第一部分 计划你的iPhone软件产品
iPhone人机交互界面指导的这一部分描述了关于为iPhone操作系统设计和开发软件的想法,和表现了成为优秀的软件设计的基本原则。阅读这一个部分来学习你可以为iPhone操作系统开发的不同软件类型和你可以运用到你工作中的设计原则。你也可以学习到如何在你的程序的外观设计中如何运用这些原则,所以你可以创造一个顶级的产品提供直观的强制的用户界面。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ The iPhone OS Platform: Rich with Possibilities
iPhone的操作系统支持数目众多的软件,从用户在iPhone中内置的Safari浏览器浏览的网页,到原生的运行在基于iPhone操作系统移动设备的程序。本章主要讲述你可以为基于iPhone操作系统设备所开发的不同类型的软件解决方法。
如果你是这个平台的新手,那么请务必从“总览各个系统的不同”这个总结iPhone操作系统设备和电脑之间的不同这部分开始。虽然在这一节中的信息不是非常全面,但是它一针见血地指出了你在设计iPhone软件时需要注意的问题。
为了帮助人们计划一个iPhone程序,这一节描述了思考不同程序风格和定义他们的典型特征。这一节也描述了那些Mac OSX附带的软件是如何移植到iPhone操作系统上来的。如果你有一个想要移植到iPhone操作系统的Mac OSX软件,你关键需要理解这个步骤。
纵览各个系统的不同
一个基于iPhone操作系统的设备不是一个台式电脑或者笔记本电脑,所以iPhone程序也不是和台式机的程序一样的。虽然他们看起来只不过是通用的状态,虽然如此,至关重要的是去保持他们,就好比你在其他设备上开发软件一样容易上手。
============================================================================================ 注意:如果你只是需要为基于iPhone操作系统设备设计一个只有网上内容的程序,你可能已经对于不同的平台对你造成的影响非常熟悉了。如果不是,你可以在iPhone为Web程序的人机界面指导中得到更多的内容。这一个部分主要关注于不同的平台是如何对你开发那些原生的iPhone程序造成影响的。 =============================================================================================
为基于iPhone操作系统的设备设计软件需要它是不是可以成为你的第二天性这样的想法。详细点说,如果你的大量经验都是在开发桌面程序的话,你需要认识到在桌面电脑和移动平台上设计软件有那些重要的不同。
这一个部分总结了在你设计决定是有很高潜在影响的具体不同。对于如何来处理这些不同以及你iPhone程序开发过程中遇到的其他问题的具体信息,请参考iPhone操作系统编程指南 。
Technorati Tags: iphone , human interface , guideline , translate , chinese , iPhone OS
18 三 2008
by 抽屉 in Endless Learning , MobileHI Guideline
iPhone Human Interface Guidelines
这部分内容是我在空余时间的翻译联系。中间可能存在一些翻译的不准确,如果您在阅读的过程中发现这类问题,请和我(chouti AT Gmail.com)取得联系。 当然这部分翻译内容请勿用作商业的使用。转载请注明来源和保留以上声明。
Introduction ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 重要:这是一份对API或者开发中的技术的初步文档。虽然这份文档已经在技术的正确性上做过了检查,但这不是最终的检查。Apple提供这些信息来帮助你们计划采纳在这份文档中描述的技术和程序界面。这个信息是会被改动的,而且软件根据这份文档执行需要在最终的操作系统和最终的文档上来确认。这份文档将包含新的API和新的技术再发布。关于更新这份文档和其他开发文档的信息,请查看在后来的文档中侧边栏的New&Update。 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
iPhone和iPod touch 是在一个久经考验的设备(iPod)上整合了革命性的多点触控界面,这个界面具有很多强大特性,比如电子邮件和即时消息的能力,支持全部特性的浏览器,iPod,当然在iPhone中我们还加入了移动电话模块。iPhone操作系统是运行在iPhone和iPod Touch 上的系统软件。随着iPhone SDK的出现,这些强大的特性会被扩展成为开发者有意义的机会。更进一步,对创建基于iPhone操作系统的网络内容来说,开发者可以使用这个SDK来创建原生的程序,人们可以在他们的设备上直接使用和存储。
通过阅读这份文档学习你可以为iPhone操作系统开发的程序种类的范围和人机交互设计的原则,这些来自于其他所有优秀的程序的信息。在这份文档中,你也可以学习当你在设计一个程序时怎么来遵循这种顶级的用户界面和用户体验的原则。不管你是富有经验的计算机程序开发者,还是一个经验丰富的移动设备程序开发者,或者是这个领域的新手,这份指导会帮助你做出用户想要的iPhone程序。
Organization of This Document
iPhone 人机交互界面指导被分为两个部分,每个部分都包含了一个章节: - 第一部分,“计划你的iPhone软件产品”描述了iPhone操作系统环境和你能为它开发怎样的软件。它同样包含了从一切优秀的软件得到的用户界面的人机界面设计的基本原则,它还描述了如何去在你的iPhone程序上遵循这样的原则。 - 第二部分,“用iPhone操作系统用户界面元素进行设计”探究了你用来创建你iPhone程序的那些组件。它描述了你可以得到的多样的视图和控制方法,同样也提供了如何有效地使用他们的指导。
Technorati Tags: iPhone , gudieline , translate , Human interface , document
03 三 2008
by 抽屉 in Endless Learning , OSXHI Guideline , Scrap
注意:这个是我对OS X Human Interface
Guidelines的翻译练习。没有得到官方的授权,正式的文档可以在http://developer.apple.com
得到。请不要做商业性的转载。文中如果有什么不当的地方,还希望大家可以和我一起探讨。
What Are the Apple Human Interface Guidelines? 这份文档是Mac OS X主要的用户界面文档. 它提供了为Mac OS X 10.5的Aqua界面设计的详细参数,虽然一些信息可以使用在Mac OS X之前的版本上。
Aqua是Mac OS X的总的外观和行为。Aqua定义了像窗口,菜单和控制这些组件的用户界面的标准外观参数,还赋予了外观上不把文字和图像混淆,阴影,透明度,和慎重地使用色彩。Aqua传达了标准化了的统一的行为和促进通过动态通知,视觉效果等等来表达的清晰的沟通。遵循Aqua的标准来设计可以保证你提供最佳的用户体验给你的客户。
Aqua在Cocoa,Carbon和Java软件上都可以做到。对Cocoa和Carbon程序开发来讲,Interface Builder是一个开始打造Aqua标准图形用户界面的最好方式。如果你在把现有的Mac OS9的程序移植到Mac OS X上,请参照Carbon移植向导(Carbon Porting Guide)。Java开发者可以使用Swing工具包,这个包包含了Aqua界面看起来和Mac OS X一样。
Who Should Read This Document? 任何一个为Mac OS X开发程序的人需要阅读和对文档的内容变得熟悉。这个文档包含了在机械学中用软件设计的原则和信息来做方针的撬动Mac OS X技术的设计优秀的用户界面。
Organization of This Document 这个文档主要分成3个主要部分,每个部分都包含了几个章节: *第一部分,“程序设计方针”描述了纲要的设计原则在整个设计程序的过程中一直保持遵守。 *第二部分,“Macintosh体验”讨论了很多Mac OS X用户习惯使用的技术。你可以得到这些技术的更进一步信息来使你的开发进程变得合理化,保证你的程序在整个操作系统中有一个良好的表现。 *第三部分,“Aqua界面”描述了Mac OS X Aqua用户界面。它解释了你可以用到的特定用户界面组件和包含了广泛的怎么使用以及在你的程序上实现的指导。
一些这些地方你可以得到补充的信息: * 在“键盘快捷方式参考”中得到一个Mac OS X推荐的和保留的键盘快捷方式。 * 在“文档版本历史”中得到一个这份文档在这么多版本的转变中的一些变化。 * 在“词汇表”中得到一个在这份文档中使用的词汇和他们的定义。
Technorati Tags: Mac , OSX , Scrap , Guideline
09 一 2008
by 抽屉 in Endless Learning , Scrap
注:这一个系列是我在看原版的 The Art of Software Testing 时的一些翻译,因为没有得到作者和出版社的同意,这只是我自己的练习。请不要把本文中的内容用于商业用途。
测试的艺术第九章测试基于互联网的程序( The Art of Software Testing-Chapter9 Testing Internet Applications ) 2nd Edition 作者:GLENFORD J. MYERS Revised and updated by Tom Badgett and Todd M. Thomas with Corey Sandler
9.3.3.2 数据完整性 数据完整性测试是在你的数据库表中查找错误数据的过程。这个测试和你在测试商务层的时候进行的数据验证不同。数据验证主要是要找到在数据收集的时候有什么错误发生。数据完整性的检查是努力找到你存储数据过程中的错误。
很多因素会影响到你如何去存储数据。数据的类型和长度可能使得数据被截断或者损失精度。比如在日期和时间区域中,时区的问题就会发生。比方说,你存储时间基于客户端的本地时间,还是Web服务器,程序服务器还是RDBMS的本地时间?国际化和字符集可能也会影响到数据的完整性。比如,多字节的字符可能占去两倍的存储空间,另外他们也会导致查询时得到一些填充的无用数据。
你还应该调查一下你程序所使用到的查询/参考表格的数据准确性,比如消费税,邮编,还有时区信息。不只是你必须确保这些信息是对的,你还要保证他们能得到及时的更新。
9.3.3.3 容错和可恢复
如果你的电子商务站点依赖于RDBMS,那么这个系统必须一直开着保持运行。在这个方案中几乎没有可以停下来的时间。因此你必须测试你数据库系统的容错和可恢复性。
数据库操作的一个目标,通常来说就是把MTBF最大化和MTTR最小化。你应该在你电子商务站点的需求文档中找到标明的这些数值。你测试数据库系统的强壮程度的时候你的目标上就是要超过这些数值。
MTBF的最大化是依赖于你数据库的容错等级。你可能有一个可以让你在主系统发生问题时把主数据转移到一个新的数据库的容错转移结构。如果这样的话,你的顾客只是感觉到一个很短暂的服务停顿,但是系统还是可以用的。另外的方案就是你在你的程序中建立一个容错转移系统,当你的数据库当机的时候对系统的影响会很小。你的测试将会依赖于这个结构。
你还需要考虑数据库的恢复,这也相当重要。数据的恢复性测试的目的在于创造一个你无法恢复数据库系统的方案。在某些时候,你的数据库可能会崩溃,所以你必须有一个快速恢复它的步骤。恢复的计划,在开始需要包括一个对备份的验证。如果你不能在可恢复性测试时恢复数据库,他们你需要改变你的备份方案了。
-EOF-
Technorati Tags: Art of software testing , internet application test
08 一 2008
by 抽屉 in Endless Learning , Scrap
注:这一个系列是我在看原版的 The Art of Software Testing 时的一些翻译,因为没有得到作者和出版社的同意,这只是我自己的练习。请不要把本文中的内容用于商业用途。
测试的艺术第九章测试基于互联网的程序( The Art of Software Testing-Chapter9 Testing Internet Applications ) 2nd Edition 作者:GLENFORD J. MYERS Revised and updated by Tom Badgett and Todd M. Thomas with Corey Sandler
9.3.3 数据层的测试
一旦你的站点开始运行,你收集到的数据将会变得非常有价值。信用卡号码,支付信息,和用户资料是你开设你的电子商务站点时将会从用户哪里收集到的信息的一些例子。如果你丢失了这些数据,损失是非常惨重的,而且可能使你的业务变成残废。因此,你必须开发一个程序来保护你的数据存储系统。
测试你的数据层主要由测试你程序用来存储和检索信息的数据库管理系统所组成。小型的站点可能在文本文件中存储信息,但是大型的复杂的站点使用的是企业级的全面的数据库。根据你自己的需求,你可能这两者都会用到。
和测试这个层面相关的最大的挑战是重现产品的环境。你必须使用和现实一样的硬件和软件来验证测试。另外,一旦你得到了财务和人力的资源,你必须开发一个保持你的测试环境和产品环境相互同步的方法。
就像其他层一样,你必须在测试数据层的时候找到哪个特定的区域有错误。这些错误包括了下列的: .相应时间。DML(SQL INSERTs,UPDATEs,和 DELETEs)的定量完成时间,查询(SELECTs)和执行。 .数据完整性。验证数据正确的存储着。 .容错和可恢复性。MTBF的最大值和MTTR的最小值。
9.3.3.1 响应时间 慢速的电子商务程序会使得客户不愉快。因此,你应该想办法保证你的站点在用户需求和动作之后的相应时间。在这一层上测试的相应时间不包含页面的载入时间,但是主要专注于定义数据库操作是不是达到了性能标准。当测试数据层的相应时间时,你必须保证个体的数据库可以很快的操作,不会成为其他操作的瓶颈。
不管怎么说,你开始衡量数据库操作之前,你必须明白数据库由什么组成。就这个讨论来讲,数据库的操作包含了在RDBMS中对数据的插入,删除或者查询操作。衡量相应时间简单的是包括决定每个操作占用多长的时间。你不需要对衡量执行次数太过关心,因为他们可能包含在多数据库操作中。在测试商务层的时候外观的执行速度测试已经做过了。
因为你想要定位数据库的错误,你不想测试数据层的响应速度是衡量完成交易的速度。在整个执行的过程中,太多的因素会影响到测试的结果。比方说,如果用户试着取回自己资料的时候耽误了很长时间。你应该决定那个是操作中存在的瓶颈。是在SQL 声明中还是Web服务器还是防火墙中?如果单独测试数据库操作,使得你可以确认问题。在这个例子中,如果SQL声明写的很差,在你测试响应时间的时候它会自己显示出来。
数据层的响应时间测试是充满挑战的折磨。你必须有和你产品一样的测试环境。否则,你可能得到不正确的测试结果。同样,你必须对你数据库系统有一个直观的了解来确保它是正确地设置和高效地运行。你可以找到数据库运行低效的原因是因为RDBMS被不正确地配置。
通常来说,你对响应时间的测试大多数时候是用的黑盒方式进行测试。你所关心的是数据库执行所花去的时间。有很多工具可以做这个事情,或者你可以自己写一个。
Technorati Tags: Art of software testing , internet application test , data
Previous Older Entries
近期评论