Archive for category 技术笔记

Python 的十关,Matlab,数列百科全书

今天继续谈论 Python. 通过这几天的学习,我感到 Python 之所以强大,其简洁的语法和方便的面向对象结构固然是一个原因,但更重要的是它有极其丰富的库函数。

Python 从一开始就是开源的语言,网友共同开发,不属于任何私人公司,可以说出身绝对是根正苗红。可能正是因为这个原因,很多人乐于给 Python 贡献各种库函数。

这就好比 Firefox 一样:我们离不开 Firefox, 这个浏览器本身性能当然也不错,但更重要的是 Firefox 有各种开放的扩展 (Add-ons)。比如我最常用的 Firefox 扩展包括 Greasemonkey, Scrapbook 等等。这些扩展都是由第三方开发,而跟 Firefox 可能一点利益关系也没有。现在 Google 开发了 Chrome, 也可能比 Firefox 性能更好,但我首先问的问题是你 Chrome 也有这么多扩展么?

有了这么多库函数之后,Python 就几乎什么都能干了。在为了过第7关学习 Python 处理图形的过程中,我发现了一个很不错的画图函数库,matplotlib:
http://matplotlib.sourceforge.net/
这个库可以使用 Python 方便地画达到出版标准的数据图!我下载试用了一下,感到其在画图方面基本上可以取代 Matlab 了。

Python 用于科学计算的最重要函数库应该是 NumPy,这个大名鼎鼎我就不必说了。

使用这些库的一个另一个好处是这些库大多是用 C 写的,这就确保了他们的运算速度,而运算速度是 Python 最大的(也可能是惟一的)缺点。

几天前,我说我想不出 Python 对我有什么真正的用处,而现在我想到了很多用处。其实我可以在工作中用 Python 做很多实际事情!

我的 Python Challenge 过了10关,目前在第11关。第8到第10关非常简单,有可能需要时不时搜索一下某些奇怪字符串的意思,但由于在第7关下了功夫学习图形,这时候真正的编程都不需要很多的特别学习了。

过了一关之后可以看到这一关的答案。这些答案里边有时候会提供一些额外有用的信息。我得知了两个重要的网站:

- http://www.amiga-stuff.com/crunchers-id.html
这个网页提供各种文件格式的开头字符。这样如果我们以后看到一个奇怪的文件,也许可以用这个东西查到这是什么文件。不过也许 Linux 下的 file 命令完全可以做同样的事清。

- “数列百科全书”:
http://www.research.att.com/~njas/sequences/index.html
以后再有人考你”已知一个数列的前几项是…,请问他的下一项是什么?” 这种问题,你所要做的就是把那前几项输入这个百科全书查找。它包含所有的著名数列。…

Python 的六关

本文推荐一个网站:The Python Challenge。如果有谁想快速掌握 Python (编程语言),我建议前往这个网站开始过关游戏。

我的工作不是程序员,我目前想象不出在近期的任何事情可能会用到 Python,而且我以前对Python 语言的了解基本上是零。这两天我满脑子想的都是 Python。

我不知道我是为了学 Python 才玩游戏过关,还是为了过关才学 Python。所以如果你只是想找个好游戏玩打发时间,我推荐你学 Python.

每一关题目都设计都非常精巧。以下我尽可能良性地剧透一下:)

第0关是让你计算2的35次方。根据以前 C 和 Fortran 的经验,我感到这么大的整数肯定不能直接算,必须写一段程序,每算出来一位就存入数组。。。不过我还是直接用 Mathematica 算出了答案。

到第1关,要求破译一段密码,我想这时候得正经编程了。结果找来一本书《Learning Python》一看,原来 Python 支持任意长度的整数!也就是说第0关的正确过法是
Print 2**38
就这么简单!这个事实使我对 Python 的好感增大了十倍。那本书里面并没有说 Python 是怎么做到这一点的,也没说为什么会提供这个功能。感觉这个功能似乎并不特别实用,但是我想所有人都特别喜欢这个功能。

继续看书,我发现Python 语言更像是 Mathematica 和 Matlab。变量不用事先定义,极其灵活的数组,丰富的函数库。还有一个好处是它是一种 script 式的解释性(严格的讲并非完全如此)的语言,你可以在命令行一条命令一条命令的执行。这种做法不仅保证了学习过程中真正的即时反馈,更提供了一个可以边尝 试边编程的工作过程。

我写了人生第一个 Python 程序,破译了密码,过了第1关。结果破译出来的文本说,推荐使用xx(此处不透露)函数,而这个函数,我那本《Learning Python》里面没有!结果上网搜索到这个函数的用法,重新写了一个版本。

第2和第3关都很简单。把第1关里学会的那个函数用上的话,第2关会更简单。我不熟悉正则表达式,就算用最一般的方法做,程序也不会超过15行。

第4关学到的东西是 Python 有个简单的库函数,可以作为一个自动抓取或者读取网页的机器人。

第5关问我 “Peak Hell” 的读音像什么?我猜了一个 pickle,结果一搜索,Python 还真有个pickle。但是 pickle 什么?反复把题目页面 html 代码读了好几遍,终于悟出…..
pickle 之后的东西我仍然没法直接读。开始猜测是某种编码,反复试了ord 和chr 结果不对。然后猜到了。

这些题目的设计都有这个特点:不直接告诉你让你干什么,不知道从哪入手,一切都得猜。我发现真正的编程时间可能只占解题时间的一半。

第6关我做出了前半部分,然后实在想不出”Collect the comments”这句话到底是什么意思。我一开始猜测是不是需要在上网,从某个网页的注释中获得答案。我用上网机器人按照第4关的办法抓取了网页(事实 证明第4关的做法不行,因为现在有了一个循环指向)寻找注释,结果所有网页内都没有注释。

我本来在想不搜索答案的情况下过所有的关,这一次没挺住。有一个网页给了点提示:原来zip文件也带注释啊!我这才知道 Python 可以处理 zip。

目前我在第7关。没有任何文字,就是一张有点怪的 png 图。看来 Python 可以处理图形。

每一关都能学到一点新的东西,发现原来 Python 还能做这个。 《Learning Python》这本书的作用仅限于入门,那些有意思的函数的用法都得上网查。目前为止所有问题的解决代码都很短,我不知道最后会不会让我们写一个大点的程序。

据说这个网站2005年就有了,非常遗憾一直到现在才听人说。这种现学现用,即时反馈的的学法很可能是学好一门语言的最佳方法。我感到这些题目就算是一个中学生也能做出来,如果我上中学的时候有这个网站,生活该多么美好啊。…

火星登陆器的意境

凤凰号探测器着陆火星北极,所有媒体都要报道一下,就好像汶川地震,所有公众人物都要表个态一样。说到科学报道,我觉得至少存在三个层次。

第一个层次是”知道不知道”。也就是说这个科学事件发生了,你们报纸,或者你们网站,报道了没有。这个追求是对广度的追求。现在国内很多媒体都有了专门 的科学版,报道一些最新的科学发现,而不像以前所谓的科学报道都成了(主要跟健康有关的)科普报道,或者UFO什么的。

第二个层次是”理解不理解”。也就是说光报道不行,你得能把事情说清楚,至少要说对。现在的科学记者越来越专业化,很多都是原本学科学的出身,再加上专业选手偶而客串,在这一点上也是越来越有进步了。这个追求是对深度的追求。

第三个层次是”好看不好看”。说了,说对了,还不够。还得说的好看。好看才有读者。在这一点上国内尚有欠缺之处,国外的,纽约时报等等的报道就很通俗易懂,而且能把最有意思的思想传达出来,让读者看完产生智力上升的感觉(或者错觉)。这个追求是对浅出的追求。

时代周刊,每周一期,它不可能跟人比科学报道的广度。等读者拿到杂志,可能早在网上看过这个探测器着陆的新闻了。作为薄薄的一本综合性杂志,它也不可能追求报道的深度,要看深度报道不如去看专业杂志。

时代周刊对火星探测器着陆的这篇报道,已经达到了对意境的追求。

这篇短文出现在简报板块,副标题是『A thrilling landing on Martian ice that was over before it began』,在开始之前就已经结束的刺激登陆。整个着陆过程只有7,8分钟,但信号从火星传递到地球需要15分20秒,也就是说地面人员只能在”事后”了解情况,而无法做到真正的”现场直播”。

作者把这个事件报道的令人充满遐想。文章一开头就说,宇宙空间没有什么”breaking news”,因为所有事件信号到达地球的时候,该事件可能早就在几百万年以前发生了。地面人员看探测器着陆,就好像看录像播出的已经结束的足球比赛一样。 整个文章的主题似乎不是在说火星探测,而是在说一种新时期的新行为中的新艺术感。

每个现代人都知道并理解其中光速有限信号传递的原理,但是经此文一说,真的去体会一下这种”意境”,似乎另有一番味道一般。

看时代周刊的人,正如路上来去匆匆的所有人一样,其中绝大多数对探测器的事情并不十分关心,也许其中很多人甚至以为人类已经去过火星。然而这个”即使从最好的角度讲也只能事后知道探测器干了什么”的事实,对人们来说不失为一个新奇的体验。

新闻报道写成这样,很有意思。它令我们相信,杂志并不是一个过时的媒体。

—-
原文:

Cosmic News
Thursday, May. 29, 2008 By JEFFREY KLUGER

There’s no such thing as breaking news when it comes to us from space. It’s not enough for an event to occur; word of it must then travel to Earth across the vast ocean of the cosmos. The dispatch may move at the speed of light, but the journey can still take hours, years, epochs–turning current events into history long before we ever learn of them. Signals from the Cassini spacecraft, currently studying Saturn’s moons, take 84 min. to reach us; the supernova whose cataclysmic birth astronomers observed earlier this year was already fading millions of years ago.
Never was the oddly ex post facto quality of celestial news more surreally on display than on May 25, when the Phoenix spacecraft touched down on Mars, the first landing ever in the Red Planet’s polar region. In order to arrive at its destination in one piece, Phoenix had to cap its sleepy 10-month journey with a fiery 7-min. plunge through the atmosphere, during which it opened its parachutes, jettisoned its heat shield, fired its engines and decelerated from a blistering 12,700 m.p.h. (20,400 km/h) to a toe-in-the-dust touchdown speed of a few feet per second. With Mars and Earth currently 171 million miles (275 million km) apart, however, signals from the ship need a full 15 min. 20 sec. to get here, meaning NASA did not confirm the 7-min. plunge until 8 min. after it ended. If the ship had crashed, the stream of incoming data would have been nothing more than an electromagnetic message from the grave.

In the era of TiVo, the nail-biting scene at NASA as controllers watched the descent had a curious familiarity to it. Engineers whooped at every milestone just as football fans cheer every pass in a prerecorded game–even though in both instances they know the end of the tale is already writ.

In Phoenix’s case, another tale is just beginning. The ship will soon start to sample the frozen soil of the Martian pole, where a possible abundance of ice indicates a possible abundance of water and could–in theory–mean a little bit of life. If such a discovery is made, that news too will reach us 15 min. later–though odds are, no one will gripe about the wait.