文章关键字 ‘计算’

hello Python world

2009年07月13日,星期一

最近在捣鼓Python(名词解释:英文版中文版)。语言简单了就是好,很快就能上手。按惯例新语言总要写个“hello world”祭刀,但是蟒蛇语言的“hello world”过于简单(就一句话:print ‘hello world’),所以总得整点什么有实用价值的来写着玩。

作下面这坨东西的需求是:我想让系统裸体快速启动,这样需要一个脚本把现在自动启动的所有进程都放进去——很像是bat干的事情。只可惜Windows的bat实在太弱,不仅是串行的,而且是阻塞的。只有某一行进程退出之后,才会运行下一行的进程。所以如果想同时启动两个以上进程,根本没戏。下面这段代码可以解决这个问题,一次启动一大堆,然后自己就滚蛋了。如果没心情往下看也没关系,猛击此处下载可执行程序,使用说明在readme.txt里面,拿去用就是。代码在python 2.5.2下编写通过,转换成windows下可独立运行的exe使用了py2exe这个扩展。

程序运行流程是:从命令行参数中读入一个文件名(L41~L44),打开这个文件(L22),将这个文件的每一行读出并取出“//”和”回车”之前的字符串头部(L27),然后把这段字符串作为命令行启动新进程(L15)——简而言之:替代系统的bat文件解释器,附带支持C++的行注释语法。里面有函数、类之类基本语法特性,好懂得很。实际上刚写完的时候只有十几行,全都在__main__里面。我为了玩一下函数调用和面向对象,故意把它拖得又臭又长。

mybat.py
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import subprocess # 井号开头表示注释
import sys # 这三个是加载的其他py文件,类似include。当前这个文件也能被其他py文件加载
import re

# 类定义
class mySubProcess(): # 所有的块级对象(class、def、if、for等等)都用冒号开始,用向后缩进表示包含关系!
    counter = 0 # 所谓的“类变量”,这个类的所有对象持有同一份

    def __init__(self, cmd_string = None): # 对象的构造器(constructor),self是当前对象,支持默认参数
        if cmd_string != None:
            self.cmd_string = cmd_string # 操作对象的私有变量self.cmd_string
            mySubProcess.counter += 1 # 操作类变量

    def run(self):
        subprocess.Popen(self.cmd_string)

    def printSummary(self):
        print 'processed num: %d' %mySubProcess.counter

# 函数定义
def processMybatFile(file_name):
    file_obj = open(file_name, 'r')
    try:
        linetail_pattern = re.compile('\s*\n.*|\s*//.*', re.S) # 正则表达式
        file_lines = file_obj.readlines()
        for line_str in file_lines:
            cmd_str = linetail_pattern.split(line_str.decode('gb2312'))[0].encode('gbk') # 转码
            if len(cmd_str) > 0:
                print '> ' + cmd_str
                a = mySubProcess(cmd_str) # 生成对象
                a.run() # 调用对象
    finally:
        file_obj.close()

    a = mySubProcess() # 使用默认参数生成对象
    a.printSummary()

# 程序入口
if __name__ == '__main__': # 这样写的话,这个块的内容就不会在当前文件被import的时候执行

    if len(sys.argv) == 2:
        cmdfile_name = sys.argv[1:][0]
    else:
        cmdfile_name = 'test.mybat'

    print 'load: ' + cmdfile_name
    processMybatFile(cmdfile_name) # 调用函数

语言本身,总的感觉是有点C++的味道。但是把C++里最晦涩的那坨都扔了。“类变量”比较有特点,用缩进表示block让人厥倒。另外没有变量定义,基本上是变量被赋值的时候决定它的类型,不小心的话,比较容易掉进陷阱。

这个语言很简单,半天时间绝对入门。用它来写写小东西很方便。推荐无聊geek们都来玩玩。


参考资料

Chrome OS?Google真能搞

2009年07月11日,星期六

本周最劲爆的业界新闻莫过于本周三(7月8日)Google公开了Google Chrome OS的项目计划(英文原版中文版):这款和M$ Windows在上网本市场直接竞争的轻量级操作系统产品将在今年年底开放源代码,预装Google Chrome OS的上网本将在明年下半年和消费者见面。新OS将基于Linux内核。Google方面宣称这款OS的卖点是:快(数秒内启动完毕)、安全(底层安全架构)、简单(不需要进行硬件配置,界面简洁),其中的大部分应用将基于浏览器(云计算、本地javascript、Flex大行其道)——听上去怎么有点像Ubuntu?

几个月之前,针对Chrome浏览器的野心,我曾经在某处论坛做过如下评价:

chrome(浏览器)根本就是google用来占领用户桌面的操作系统。google的理念是用浏览器搞定一切,所以他迫切需要一个够快的浏览器让他的桌面应用跑得和本地应用程序一样流畅。如果结合google gear的本地存储,能力就更强了(比如google docs的离线撰写)……说白了,google已经对microsoft在浏览器上不断搞小动作而不遵守W3C标准的猥琐行为忍无可忍了。所以可以说,chrome(浏览器)的竞争对手不是firefox也不是ie,而是Windows。这玩意儿就是拉Windows下马的,最终目的是一个让大家在多平台下(Windows / Mac / Linux / 手机)无差别使用google的服务

现在看来这个评价还是偏保守。Google已经不能满足在各个平台上用Google Gear小修小补。为了完善Android没有填满的产品线(Android更多面向手持设备,Chrome OS会跑在“更大”的机器上。微软的操作系统类似,也是一大一小两套产品线),Google终于决定沿着手机、移动上网设备(如MID)、上网本、笔记本、台式机、数字电视机顶盒等市场构成的的漫长战线,向M$发起面对面的全面进攻——而且可以说是以其人之道还治其人之身:十年前M$在操作系统里捆绑IE搞垮了Netscape,十年之后Chrome OS显然会以捆绑Chrome浏览器的方式直接向微软的最重要产品发起挑战。

Google和M$最近真是近身肉搏,6月3日M$推出Bing,把Google弄得很紧张;1个月之后Google宣称要和M$的核心业务展开直接竞争,不知道M$是否感受到了“盛夏的清凉”?水是越来越浑,好热闹。只要消费者买账,中关村的Lenovo们用免费的Chrome OS替换收费的Windows,上网本价格肯定大跌,于是M$也会被迫对Windows调价。反正最后肯定是消费者受益,就等着看好戏吧。

下图是一个挺搞笑的Google的营销链路手绘示意图,Google的小黑手已经染指了两条链路的粗体部分:

  • 信息链路:大脑 > 用户 > 浏览器 > 操作系统 > 电脑硬件 > ISP > 服务器 > Web应用 > 广告信息

  • 现金链路:用户 > 广告代理公司 > Google

传统上Google只在云里干活。现在它也不甘寂寞,离用户们越来越“近”越来越“亲密”了。不都是为了它的广告嘛!注意右下角气急败坏正在跺脚的M$ Monster,嘿嘿。这篇文章回顾了Google和M$之间的恩怨。WSJ记者Jessica E. Vascellaro和Don Clark撰稿。如能翻墙,值得看看。

X宣部你个婊子,操你大爷!

2009年06月25日,星期四

昨天21:30,google.com域整个被GFW屏蔽。所有Google.com的服务,包括gmail、gtalk、google reader等等,统统被阻断。FriendFeed上骂声震天、哀鸿遍野,不乏有准备去本市市中心散步的。有人传出话来说是Google技术调整中,然后旋即被证实是谣传。虽然23:00左右Google恢复服务,但是种种揣测仍然在坊间流传。这显然不是Google出问题了,因为出问题的两小时内,如果借助翻墙工具我是能够正常访问Google.com的,在中国以外的地区也并未传出Google.com全产品线出现故障的消息——除了GFW还能有谁。

进一步的消息传了过来,越发让人不安。原来是GFW这个大章鱼升级。升级以后上网速度不会更快,爬墙一定更难。在断网的这段时间内,我用Web Proxy做了测试,以往用base64编码的能够通过的“敏感”URL字串,包括”google.com”,这时统统被拦截。看来是新功能吧。新功能还包括对opendns等第三方dns的拦截,以便于GFW更有效的实施DNS劫持。下面这篇文章印证了我的猜测:

恭贺国家局域网正式建成
2009-06-24 22:12

2009年6月24日21点40分,这是一个历史性的时刻。在这一刻,中华人民共和国局域网正式建成,美帝国主义苦心经营多年妄图用来毒害我们的google.com终于彻底被干掉了。

两套DNS劫持,双保险。境外DNS彻底阻断,防侧漏。URL Base64解码,WEB Proxy照样识别。HTTP头彻底解码,Referer就不放过。还有许多贴心功能,只为你我健康上网。

至于Google,大概是被临时开刀做了测试吧,敲打敲打看看各方反应。最近X宣部对Google很不高兴,说Google传播色情小网站啥的。不过按网友们人肉搜索出来的消息,CCAV的报道是X宣部“做出来”的彻头彻尾的假新闻。不仅被采访的人是CCAV内部的工作人员冒充,而且这些关键词都是在短时间内用程序刷出来的(证据之一之二)。事实上由于心虚,上面这些的分析贴的来源“kenengba”也被相关部门打了招呼被迫删贴,所以原文没了,我只好放在google doc里共享。

只能说Google太老实,一味的标榜“不作恶”,维护所谓搜索引擎的公正性。政府让他删文、让他屏蔽关键词、让他把gmail的服务器放在国内好安装扫描软件,它就是扭扭捏捏、推三阻四。人家微软多配合啊,hotmail邮件能够直接成为审判政治犯的证据,live说删就删。Google呢?至今,youtube,就是不屏蔽那些让我党不爽的“历史视频”;gmail呢,启用https为邮件数据加密,分明在躲我国的过滤器嘛。想在中国混,不服“管”,能活命吗?

X宣部里是怎样的一伙人呢?嘴里吞粪了?脑子被驴踢了?大肠打结拉不出屎了?为啥做出来的事情都飘着粪臭这么恶心人呢?既要当婊子,制造大量的色情信息的关键词,并在电视台里公开教育全国民众如何搜索色情信息;又要立贞洁牌坊,一扭一扭的说“哎呀哎呀,好黄啊我好不爽”。这就好比警察A像贼一样把偷偷毒品塞进某人包里,然后警察B跳出来搜查说你咋能贩毒呢带回去把你给枪毙了吧……咋能这么无耻,这么下流呢?

没错,他们一贯无耻,一贯下流,几十年了从来没有变过。只不过这次被网友们抓了个现行。在互联网时代,造假变得更容易,其实也更不容易。想搞事,总会留下蛛丝马迹。一次又一次的脱衣舞表演,人民大众把这婊子那干干巴巴的几斤几两看得更清楚了而已。

再过几天XXXXX就要过节了,我的生日礼物是:

  • 一个手势——竖起中指
  • 一句话——操你大爷
  • 一份祝愿——早死早超生!



五石同学曾经翻墙过六一,那么我来个“翻墙过七一”吧。此方法官网在此,基于Firefox和Windows。我已经用了快一个月,蛮好用。看youtube是没问题的,看大X元等更不健康的,咳咳,也没问题。

本文将提供一种一劳永逸的翻墙方式(ssh -D),实施之后,那道墙——对你来说——将从此透明。

本文面向的用户:使用Windows作为操作系统并且使用Firefox作为常用浏览器。

第一步:免费获取拥有SSH权限的帐号和密码。

默认的免费获取方式:将本文转载到你自己的博客上,将转载后的文章网址发送到f.ckgfw#gmail.com

注意:转载前请先确认自己是(或曾是)一名blogger(博客),否则将会浪费彼此的时间。

转载方式:拷贝文章代码至博客后台HTML编辑器中,直接发布即可,文章标题自拟,可在前后文插入自己的评论。

经过人工审核,你将收到一封附有五个拥有SSH权限的帐号和密码的电子邮件,你可以将它们赠与你信任的人。

更多获取方式将在今后陆续激活,请关注我们的最新更新:https://friendfeed.com/fuckgfw

第二步:配置MyEnTunnel软件

下载并安装MyEnTunnel,该软件全名为My Encrypted Tunnel。

一键下载:https://dl.getdropbox.com/u/873345/download/myentunnel.exe

myentunnel

按照上图将第一步收到的帐号信息填写到相应的地方后,点击save按钮,再点击hide按钮。

第一次连接过程中会出现一个认证对话框,按照提示确认即可。以后的自动连接中将不再出现此认证对话框。

最后点击hide按钮,使对话框隐藏到系统任务栏中。

提示:

为MyEntunnel创建一个快捷方式,将其复制到系统的【启动】(C:\Documents and Settings\当前用户名(需要修改成你自己的)\「开始」菜单\程序\启动)文件夹中,今后开机便可自动启动软件,并自动连接服务器。

tray

绿色代表连接成功且稳定;黄色代表正在连接或重新连接;红色代表连接失败。

第三步:配置Firefox浏览器

假设你正使用Firefox浏览器阅读本文。

一键安装:http://autoproxy.mozdev.org/latest.xpi

xpi-offical

点击立即安装,安装后,重新启动Firefox。然后你会看到如下对话框,选择gfwlist (P.R.China)后,点击确定。

gfwlist

接着你会看到Firefox主界面右上角出现有一个“福”字图案,点击“福”。

fu

点击“代理服务器——编辑代理服务器”。

edit

随即出现如下画面,你会看到如GAppProxy、Tor和Your Freedom这样一系列代理服务器名称。

before

将GAppProxy一栏的参数修改为如下图所示。

after

修改完毕后,点击确定。至此配置已全部就绪。

获取更多帮助,请关注反馈中心:https://friendfeed.com/fuckgfw-feedback

Bernie:"Eat me!"

第四步:支持fuckGFW

  1. 如果您翻墙成功,请大笑一声并用充满磁性地低音说出:Hello, world!
  2. 如果由于线路原因,始终翻墙不成,不要气馁,给我们发Email,咱们一起解决问题。
  3. 假如哪天突然无法正常连接,请先到反馈中心汇报,我们会及时做出反应。
  4. 目前您有如下几种方式及时获取我们的最新动态:FriendFeed | Twitter | Blog
  5. 保持默契,我们相信您一定可以做到。

版权信息:您可以自由复制、传播、演绎本作品且无需署名、无需注明原始出处。

用U盘安装XP的方法

2009年03月4日,星期三

咨询某软件使用达人后的成果,待五石同学第一个吃螃蟹。

素材

  1. UltraISO 9.3.0+
  2. Windows XP安装盘ISO一个

步骤

  1. 启动UltraISO
  2. Bootable菜单Write Disk Image
  3. 选择写入的Drive,类型为USB-HDD+
  4. 点Write
  5. 重启,BIOS选USB启动
  6. 再次重启,事成!

我的blog目前的拓扑结构

2009年02月16日,星期一

前天把twitter账户架起来,很好玩。然后将它整合到friendfeed之后,从手机也可以向blog首页推送内容,对blog的内容发布和更新的可控性陡然增强了。

然后会发现我目前的blog已经杂糅了太多东西,所以有想把这些服务作张图的冲动。整理一下思路,也顺便给朋友们推介一下某些还不错的特色服务。拜ycool开放性极强的模板所赐,ycool支持在模板中插入除了iframe和一些危险的跨站ajax之外的任何事,所以大部分的javascript脚本都能很容易使用——而javascript是目前最常见的mashup的实现技术了——所谓“mashup”,简而言之就是内容聚合,将多种网络服务(或可称为API)作为我自己服务的数据源为我所用。每刷新一次我的blog首页,你看到的数据直接或间接的来自十个以上的网站。很好玩。请猛击这里这里,还有这里(不错的视频讲解),一探究竟。

解释一下这张图:整体是一个有向图,gtalk处存在环路;每一个节点代表一个数据源,可以是一个网站、一个程序(比如gtalk或者msn)、或者一个设备(比如手机);节点之间的弧代表数据的流动,其中红色的是需要人手工干预/提交的,蓝色的是程序在后台默默的干活——比如说你在Google Reader里面收藏了一篇好文章。收藏动作发生之后,Friendfeed不久即可获悉(通过定期轮询Google Reader的rss),这个post到Friendfeed的动作是不用用户人工参与的无缝连接。

乍一看确实有点乱,但实际上还是很有规律地。如果按数据流向,可以看到两个引力中心:Friendfeed和Ycool Blog。其中非常引人注目的是Friendfeed,它吸星大法般的读入一切更新,然后推向blog(正中心那条粗蓝线)。Ycool Blog作为个人的portal,主要是发布数据,所以引用了方方面面的东西——Dropbox存放多媒体数据;Google Maps提供地理信息;特别是包含了Friendfeed插件(本页面右上方的“我的最新动态”),形成了一条从手机,经过Twitter、Friendfeed直达blog首页最显眼位置的数据链。这样外出时候有什么第一现场的消息,用手机轻松发布之,几分钟后就同步上来了。

那么稍微解说一下这些服务吧,我挑一些比较重要的说说:

  1. Friendfeed:这个东西整合能力超强,能读入任何符合标准的rss输出,包括已经内置了数十种服务和任何blog的数据更新。我在上面这张图上已经展示了Friendfeed的一种典型用途,实际上他的主要用途是用来在朋友之间分享和讨论任何条目,包括把你的条目推送到公共讨论区,而且你还能在gtalk上收到更新通知。你可以把你的新blog,或者一篇好文章推送到某某人气旺盛的大厅里。或者至少能推到所有Friendfeed好友眼前。
  2. Google Reader:带有分享功能的在线rss阅读器。有它之后,似乎没必要再装任何离线rss阅读工具了,功能上强太多了。关键是它相当于替用户做了一个缓存,即使被和谐(比如韩寒的blog文章屡屡被和谐,但是Google Reader还是能看到全文)。所有被分享的文章除了在“Friends’ Shared Items”条目中被好友看到,被自动合并成一个blog模样的网页,还会被推送至Friendfeed
  3. Delicious:网络收藏夹服务,和Firefox整合得最好。这个是最重要的个人数据/知识仓库。所有delicious收藏的public的超链接和相应的评论会被推送至Friendfeed
  4. Twitter:微blog,一次最长140字的纯文本。适合发布突发新闻、旅途见闻或者短小得不足以写一篇“正式的”blog的灵感碎片,所以它和它的衍生网站提供了多种发布方式:Twitter主页、IM(gtalk、msn之类)、手机短信、手机WAP网站,目的只有一个:随时随地发布信息。Twitter官方网站搞不定国内的手机(其实说白了是搞不定中国移动),但由于Twitter开放了API让他的山寨版们可以和自己同步数据,所以替代方案出来了:发短信给Zuosa的客服号码,然后Zuosa帮你同-¥到Twitter。如果呆在PC桌面,懒得打开网页,那么有ping.fmZuosa的机器人帮你同步。你需要做的只是跟那个机器人说话。
  5. Dropbox:从前在blog上贴图,我常用flickr。后来Flickr老是被盾,只好忍。直到出现Dropbox这坨神器,不仅可以随便存放任何种类的文件,而且对分享和发布没有任何限制,管理方式和Windows系统无缝链接,简直就是网络活雷锋。所以现在逐渐把Flickr当作图片交流平台了。何况Flickr只能贴图。
  6. Google Maps个人地图:如果地理信息对你比较重要,这个是很好的记录工具。目前我的使用方式主要是链接引用。可惜Ycool不支持iframe啊,否则可以内嵌Google Maps并使用Google Maps API干出更花俏的东西,那才叫爽呆了。

按服务提供商划分也很有意思。目前看来google势头很猛,yahoo不可或缺,他们铺架了基础设施,而内容本身(比如我的两个blog)却往往放在其他人那里。很经典的mashup结构了:

  • google系:Google Maps、Google Analytics、Youtube、GTalk、Google Reader、FriendFeed(前Google员工??办)
  • yahoo系:Flickr、Delicious
  • 其他系:Dropbox、Ycool、Twitter、Douban、Cluster Map、ping.fm、zuosa、Nokia手机

当然我还省略了两条线——我的blog的rss,分别会输出到google reader和friendfeed,然后如果想往其他人的桌面push自己生产的内容,这算是一条捷径。

另,在这个GFW横行的年代,rss输出一定要全文,至少可以让Google Reader帮你做个缓存。否则很多时候哭都来不及。