2010年9月26日星期日
adobe melrose
写给迷茫而兴奋的程序员――从需求来开始自己的项目
有时有些迷茫而兴奋的程序员会发布这样的消息:
大家好!我刚学会Erlang/Haskell/Python,现在想找个大项目练练手。如果你有什么好主意,一定要告诉我!
或
我喜欢Linux和开源,想开发一个项目为社区做点贡献。有没有这样一个重要的程序,它只有Windows版,而你想开发Linux版呢?
这些错误的请求方式令人困惑。焦点都放在了程序语言、操作系统和软件许可上。根本没考虑到解决问题,有用性,或者程序跟最初信息发布者之间的关系。你会相信一个不懂音乐的人开发的音符软件吗?你会相信一个从未用过Photoshop的人开发的Photoshop复制品吗?
这些人不妨看看以下建议:
静下心来,想想你的个人兴趣,然后解决和你的个人兴趣相关的一个简单问题。比如我跟着一个打鼓机学吉他,但我想给鼓添加点人性化元素,比如自动填写等功能。于是我写了一个打鼓测序程序,没有图形用户界面,试了试效果。我还拍了很多照片,并使用了一个标签方案(tagging scheme)。这事很简单,我一个下午就搞定了。
关键有两点:(1)简单,(2)开发点你会真正使用的东西。
取得初步成功之后,你就可以开发一系列改进版本。不要急于求成,一下子拿个公测版出来,只需检查现有程序,不断改进就好。我可以给自己的图片标签器添加一个HTML5前端界面吗?
如果坚持重复几次,你就会成为一个专家,或许这个专家仅限于解决你的个人问题,但别拿豆包不当干粮。成为一个专家还有一个好处:你可以尝试以前看似神秘甚至不可能实现的改进和功能。正是这些改进和功能有可能突然之间让你的程序一炮走红。
swf文件研究
看onLive服务
2010年9月16日星期四
2010年9月14日星期二
2010年9月5日星期日
关注一下chrome OS
2010年9月1日星期三
Simple way to execute multiple process in parallel « Python recipes « ActiveState Code
---
This message was sent by fancle.zhang@gmail.com via http://addthis.com. Please note that AddThis does not verify email addresses.
Make sharing easier with the AddThis Toolbar: http://www.addthis.com/go/toolbar-em
python的函数修饰符
def require_int (func):
def wrapper (arg):
assert isinstance(arg, int)
return func(arg)
return wrapper
@require_int
def p1 (arg):
print arg
其中@require_int就是一个函数修饰符了,本质上函数修饰符就是一个函数,只是对定义在它下面的函数进行一次修改,如上面的例子,应用函数修饰符原理是这么执行的:
p1 = require_int(p1)
这里这个修饰符的功能是检查函数的参数类型是否为整数
更高级一点是函数修饰符可以也可以带参数的,看下面这个例子:
def synchronized(lock):
""" Synchronization decorator. """
def wrap(f):
def newFunction(*args, **kw):
lock.acquire()
try:
return f(*args, **kw)
finally:
lock.release()
return newFunction
return wrap
if __name__ == '__main__':
from threading import Thread, Lock
import time
import os
myLock = Lock()
class MyThread(Thread):
def __init__(self, n):
Thread.__init__(self)
self.n = n
@synchronized(myLock)
def run(self):
""" Print out some stuff.
The method sleeps for a second each iteration. If another thread
were running, it would execute then.
But since the only active threads are all synchronized on the same
lock, no other thread will run.
"""
for i in range(5):
print 'Thread %d: Start %d...' % (self.n, i),
time.sleep(1)
print '...Thread %d: Stop [%d].' % (self.n, i)
threads = [MyThread(i) for i in range(2)]
for t in threads:
t.start()
for t in threads:
t.join()
os.system("PAUSE")
这里他的原理上是这么执行的:
temp = synchronized(lock)
run = temp(run)