极客式童话——Android婚礼

Android婚礼
很多人喜欢Android机器人,Android是安迪和凯利的共同喜好,同时他们彼此深爱着对方。因此他们决定在婚礼上用Android的主题蛋糕来纪念这个有意义的时刻。安迪,一个很大众化的名字,她在LG公司工作,而凯利则是T—Mobile公司的雇员。他们觉得婚礼的主题蛋糕一定要是Android的模样,婚礼的菜单也都是以Android为主题。

我不知道他们是否还供应杯型蛋糕(Cupcake)、甜甜圈(Donut)、法式长泡芙(Éclair)、冰冻酸奶(Froyo)。还有其他人举办过Android婚礼吗?

通过Python得到一张图片或logo的主要颜色

看到一篇博客Pick the dominant colour from a logo using Python,一段代码实现了该功能, 效果还不错, 我把代码稍微完善了一下, 方便测试 🙂

python pick_dominant_color.py -f xxx.gif

[cc lang=”python”]#!/usr/bin/env python
# -*- coding: utf-8 -*-

import colorsys
from PIL import Image
import optparse

def get_dominant_color(image):
“””
Find a PIL image’s dominant color, returning an (r, g, b) tuple.
“””

image = image.convert(‘RGBA’)

# Shrink the image, so we don’t spend too long analysing color
# frequencies. We’re not interpolating so should be quick.
image.thumbnail((200, 200))

max_score = None
dominant_color = None

for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):
# Skip 100% transparent pixels
if a == 0:
continue

# Get color saturation, 0-1
saturation = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)[1]

# Calculate luminance – integer YUV conversion from
# http://en.wikipedia.org/wiki/YUV
y = min(abs(r * 2104 + g * 4130 + b * 802 + 4096 + 131072) >> 13, 235)

# Rescale luminance from 16-235 to 0-1
y = (y – 16.0) / (235 – 16)

# Ignore the brightest colors
if y > 0.9:
continue

# Calculate the score, preferring highly saturated colors.
# Add 0.1 to the saturation so we don’t completely ignore grayscale
# colors by multiplying the count by zero, but still give them a low
# weight.
score = (saturation + 0.1) * count

if score > max_score:
max_score = score
dominant_color = (r, g, b)

return dominant_color

def main():
usage = ‘usage: %prog -f filepath’
parser = optparse.OptionParser(usage)
parser.add_option(‘-f’, ‘–filepath’, dest=’filepath’, help=’-f filepath’, type=’string’)
(options, args) = parser.parse_args()
if options.filepath == None:
parser.error(‘must has -f option!’)
try:
img = Image.open(options.filepath)
except:
print(“can not open the file”)
return

print ‘#%02x%02x%02x’ % get_dominant_color(img)

if __name__ == ‘__main__’:
main()[/cc]

35 个你也许不知道的 Google 开源项目

Google是支持开源运动的最大公司之一,它们现在总共发布有超过500个的开源项目(大部分都是利用它们的API来完成),本文将列举一些有趣的开源项目,其中很可能有不少你不知道的哦。

文本文件处理:

Google CRUSH (Custom Reporting Utilities for SHell)

CRUSH是为命令行或shell scripts处理特定文字数据而制作的一系列工具,这里有指南

C++库和源代码:

Google Breakpad

一个开源的多平台崩溃报告系统。

Google GFlags

Gflags是一个命令行标记的处理库,它可以替代“getopt()”,其内置对C++的支持比如string。指南在此

Google Glog

Glog库可执行应用级的日志,提供基于C++式的日志API,可用于Linux、BSD和Windows。指南见此

Google PerfTools

这个工具可让开发创建更强大的应用程序,特别是那些用C++模版开发的多线程应用程序,包括TCMalloc, heap-checker, heap-profiler 和cpu-profiler。指南见此还有这里

Google Sparse Hash

非常节省内存的hash-map。指南见此

Omaha – Google Update

Omaha,也就是Google Update,它可以保证你的软件随时升级到最新版本,目前很多Windows下的Google软件都是用Omaha升级的,包括Google Chrome和Google Earth,当然你也可以用于自己的应用程序。指南看这里还有这里

Protocol Buffers

Protocol Buffers是一种可扩展编码序列数据的方式,Google在几乎所有内部RPC协议和文件格式都使用了Protocol Buffers。指南见此它可以用于很多语言而且被一些IDE所支持,比如NetBeans

互联网:

Google Code Pretiffy

这是一个Javascript模块和CSS文件,它可以让HTML页面里的部分源码高亮显示,支持C/C++, Java, Python, Ruby, PHP, VisualBasic, AWK, Bash, SQL, HTML, XML, CSS, JavaScript, Makefiles和部分Perl,不支持Smalltalk和所有的CAML。例子见此

SpriteMe – easy “CSS spirtes”

SpriteMe使你可以更轻松的创造CSS Sprites(俗称雪碧……)就是把网站要用到的图片都堆在一张图片里,用CSS控制调用哪个区域。它有一个自己的官网在这里

Redacisaurus

Reducisaurus是一个压缩CSS和JS文件的网络服务,基于YUI压缩算法,运行于App Engine。

JaikuEngine

JaikuEngine是一个运行于App Engine的微博系统,由jaiku.com运营。要查看移动客户端的源码可以看这里这里还有介绍

Selector Shell

Selector Shell是一个基于浏览器的测试工具,它可以让你看到CSS在不同浏览器里的样式,用Javascript写的,你可以在这里测试

Google Feed Server

Google Feed Server是一个开源Atom发布协议服务,基于Apache Abdera框架,允许开发者快速为当前数据源(比如数据库)配置feed。指南见这里这里

Melange, the Spice of Creation

这个项目的目标是创建出一个适合开源贡献流程的框架,比如Google Summer of Code TM (GSoC)项目。使用这个框架你就可以用Google App Engine来运行Google Summer of Code项目,和其它类似项目比如Google Highly Open Participation TM Contest和GHOP。指南见此

NameBench

它可以查找最快的DNS服务器给你的电脑用,在Mac OS X、Windows和UNIX系统下都有命令行也有用户界面可以帮你测试,这是Google工程师用20%自由时间写出来的。

Rat Proxy

一个半自动化的大型被动网络应用安全审查工具,专为精确的探测而优化,文档在此

TopDraw

Top Draw是一个图形生成程序,使用简单的文字脚本,基于JavaScript编程语言,Top Draw可以创造出非常复杂和有趣的图形。支持Mac OS 10.5以上系统,使用XCode开发。

etherpad

开源的EtherPad,这是一个基于网络的实时合作文档编辑器,这个项目主要是为了演示代码而开发,帮助那些想在自己服务器部署Etherpad的人使用,这里有如何安装的指南。EtherPad使用JavaScript、Java和Comet服务器来建造实时协作服务。

Chromium

Chromium是开源版的Chrome浏览器,Chromium的目标是建立一个新一代的强大网络应用程序,它与Chrome有很多不同之处。这里有指导如何在Linux上编译Chromium

V8 Google’s open source JavaScript engine

V8是Google的开源JavaScript引擎,用C++写成,用于Chrome浏览器之上。V8使用ECMAScript的ECMA-262 第三版可运行于Windows XP、Vista、Mac OS 10.5和使用IA-32或ARM处理器的Linux。V8可独立运行也可嵌入到任何C++程序里使用,这里有指南

Chromium OS

Chromium OS是开源版的Chrome OS操作系统,提供快速、简单而安全的网络体验,源码在此

Android

Android是第一个免费、开源而且可完全自定义的移动平台,提供完整的堆栈:一个操作系统、中间件和重要的一用应用,它包含丰富的API可以让第三方开发者开发出强大的应用程序。

MySQL工具:

Google MySQL Tools

各种管理、维护和改进MySQL数据库性能的工具,由Google编写,包括:

  • mypgrep.py:一个类似pgrep的工具来管理MySQL连接
  • compact_innodb.py:可导出和重载所有表格的密集型innodb数据文件

Google mMAIM

mMAIM的目标是对MySQL的监控和分析更简单,且可以和任何环境整合使用。它可显示主/从同步状态,一些性能状态,可以返回大量“show”命令的状态等等。

其它:

Stressful Application Test (stressapptest)

Stressful Application Test试图让来自处理器和I/O到内存的数据尽量随机化,以创造出模拟现实的环境来测试现在的硬件设备是否稳定,Google就在使用它,现在是Apache 2.0许可,这里有介绍安装向导指南

Pop and IMAP Troubleshooter

它用于诊断并解决客户端到邮件服务器的连接问题。

OpenDuckBill

Openduckbill是一个Linux下简单的命令行备份工具,可用于监视文件/目录在有变化后是否标记为备份,并传输这些变化到本地备份目录、远程NFS导出分卷或是用rsync命令导出到远程SSH服务器。见安装向导

ZXing

ZXing(发音类似Zebra crossing)是Java的开源多格式1D/2D条码图像处理库,目的是使用内置在手机上的摄像头拍照并对条码进行解码,而不必与服务器通讯,它被用于Android系统。这里有向导支持的设备列表

Tesseract OCR Engine

Tesseract OCR引擎是1995年UNLV Accuracy测试的前三名之一,在1995和2006年之间它的进展不大,但依然是当前精度最高的OCR引擎。这个源码可读取二进制、灰阶或彩色图片 并输出文字,内置一个TIFF阅读器可读取非压缩的TIFF文件,增加libtiff后也可读取压缩图片。指南问答

Neatx – Open Source NX server

Neatx是一个开源NX服务,类似NoMachine公司商业的NX服务。NX协议比VNX更强大,它们的区别主要在:

  • NX是X11客户端所以不会发送位图
  • NX可兼容X、VNC和Windows版的Remote Desktop
  • NX可缓存数据
  • NX安装简单

另外一个可选的项目可以看看Google的FreeNx

PSVM

它是这个文件的代码,这是一个SVM的“支持所有核心”的版本,可多机并行运行,实例见此

GO

Google开发的新编程语言,谷奥有报道

The Google Collections Library for Java

这是一系列与Java 5以及更高版本有关的库,Google花钱给买过来了。

Google styleguide

每个主流的开源项目都有它自己的向导形式,比如一系列的演示代码。如果这些代码都按照“Style”的形式来演示,会更友好。

via http://www.guao.hk/posts/35-google-open-source-projects-you-probably-do-not-know.html

用意念发微博

2009年的愚人节,在著名的微博客网站twitter上,一个叫做uwbci的ID发了一条很短的讯息:USING EEG TO SEND TWEET。翻译过来就是“使用脑电图来发送微博”。很不起眼,甚至有点不完整,但这个句子的出现却是意义非凡。它意味着发送这条简讯的人并没有使用他的手指,而是全凭着脑子“想”,就把一句话送到了互联网上让大家都看到。玄乎吗?呵呵,可这真不是愚人节的玩笑。

这个网名叫uwbci的小伙子是美国威斯康辛大学的一个博士生,专业是研究大脑和计算机的接口。“接口”的意思,就是一个转换渠道,把大脑的活动探测出来并转换成计算机能够处理的信息。这是一项很新的技术,顾名思义,可以通俗地理解成“读脑”。这同时也是综合性很高的一个交叉学科,因为无论是对大脑活动的探测,还是用计算机来进行数据分析,背后的原理都艰深复杂,需要各个领域的杰出智慧进行通力合作。

脑电波本身算不上很神秘的东西。上上个世纪,人们就知道大脑中的神经元是会放电的。这些电和爱迪生用来点灯的电从物理学上看并没有本质区别,但是用处却大 相径庭。平日里发电厂制造的是一种能源,我们用它来做饭、洗衣、听歌、打游戏,大夏天的把温度降低。可是大自然在我们脑子里铺设的神经元“电网”,却不是为了提供能量——靠电池翻跟头的那是限量版变形金刚。我们脑中的电流是用来传递信息的,脑电波就是不同大脑区域进行对话的语言。电信号从一个神经元流向另一个神经元,千变万化却又有章可循;神经元和神经元之间还经常合作,激发出电流同步震荡。从单个神经元的对话,到神经元小团体的协调,再到大片的脑区活动,个中机制和细节,组成了一片最美的科学迷雾。我们的各种感觉:看见的、听见的、触到的,都转换成电信号的形式被大脑所理解、分析,然后再生成指挥我们运动的电信号,让我们的机体对外界做出反应。听懂大脑的语言,就懂了灵魂的秘密。

于是研究大脑就是一组非常有挑战性的解码游戏,不想赢的科学家不是好科学家。在近百年的历程中,人们靠着杰出的智慧和想象力设计了各种 实验,一点一点地摸索挖掘。早期被拿来开刀的是猴子,从它们身上人类学到了感官系统运作的许多基本原理。后来技术发展了,可以在人类的头皮上布置灵敏的电极,用无伤害的方法捕捉传到头皮表面的信号。更晚一些出现了磁共振这 个时髦玩意儿,不用开颅就可以定位活跃的脑区。时至今日,人们已经可以利用电场和磁场来准确追踪神经活动在时空上的变化。这样我们就能对高级的意识活动, 比如记忆、情感、注意力以及数学能力等等进行探索。那我们快掌握大脑的编码方式了么?坦白从宽,与其说当下的各种测量方法有助于解开谜底,倒不如说它们更好地帮助我们理解 了谜面儿,这是通向谜底的第一步。密码的“相貌”日渐清晰,啼竹琴音已然奏响,只可惜俞伯牙还在路上。

而工程师们早就坐不住了,跳出来 说,缺了俞伯牙咱就不开演唱会了吗?呵呵——这,就是工程师的可爱之处。和穷究“为什么”的科学家不同,他们更关心的是“怎么样”。在这场解码大战中,有 人敏锐地嗅到了人脑控制电脑的可行性方案。其中的逻辑是简单又直白:某个现象若高度重复就成为一条规律,应用这些规律就能实现很多发明,即使背后的原因不 明。这就像是我扔一万对铁球,它们全都同时落地,那么第一万零一对铁球也很有可能同时落地。虽然我不知道它们为什么同时落地,但实验显示这是一条可高度重 复的自然规律。那么下次看见别人扔铁球,我就敢朝他大喊,它们肯定同时落地!

遵循着这个逻辑,一些能够进行信号整理比对的脑机接口出现了。早期的时候人们尝试在一些脑部创伤的病人体内植入电极,然后在电极上连接电子芯片。首先让病人努力的“想”一件具体的任务,比如让屏幕上的小箭头移到特定的位置去。这时电极所处的脑区就会放电,放电的信号特征被记录下来,输送给电脑。电脑上的程序就指挥屏幕上的小箭头移到想要的位置。

在进行了上述的训练之后,电脑中保留了病人的脑电记录。在平时的生活中,病人可以想各种各样的事情,但那些电信号和电脑记录的都不匹配,所以电脑不会做出任何反应。而一旦病人想要移动屏幕上的小箭头了,就出现了匹配的信号,电脑就被“激活”,指挥小箭头开始移动。

电极上连接的芯片使这一过程更加“智能化”。它可以对信号进行一定的分析,同时经过与病人配合训练,使分析的准确度达到一定水准,就能够识别病人的意图。这一类电极加芯片的界面通常放置在大脑运动皮层上面,使得脊髓或脑干受损的病人能够直接向芯片发出运动指令,指挥外接的机器臂或者轮椅完成任务。

到了电脑的计算能力大幅提高的今天,非植入性的脑机接口也开始蓬勃发展。开头提到的威尔森用来发微博的脑电图就是其中一种。这一类界面不需要往大脑内部插电极,是完全无创伤型的,在普通人身上也可以使用。它的原理是根据在人头皮附近探测到的电场或磁场的变化来对人的大脑活动进行整体判断。这种判断也是通过信号匹配来进行的,但不像芯片类接口那么直接。它是先采集了各个探头的数据,然后把它们整合,经过抽象的数学处理提取出有意义的部分。计算机用来比对的,就是抽象之后的这部分数据。这对数据的分析量要求更高一些。这么说吧,脑电图一秒钟内记录的数据量以兆字节来计算,而一部电影DVD也就700兆左右。就是说,两小时电影的数据量只够脑电图来记录上700秒的——那才够发几条微博啊?

没关系,要不怎么说脑机界面靠的是交叉学科的威力呢。脑科学家遇到的瓶颈,计算机人士负责解决。威尔森在他的微博上也介绍了他们在使用的最新计算设备——图形处理器(GPU)。这是个时髦玩意儿,平时人们最常听见的电脑里边管计算的部件叫做CPU,中央处理器。而GPU的前身是管图像显示的,俗称显卡的部件。近年有公司前瞻性地看到了GPU具有的计算潜能,投资开发出可以编程的显卡,并把它和CPU关联起来,成为了一种特殊的GPU计算模式。利用这种模式,威尔森他们得以高效率大规模地分析头皮表面各个位置传来的数据,使大脑和电脑的实时互动成为可能。

脑机接口最早和最直接的受益者当属那些失去了运动能力的病人。脑干中风、肌肉萎缩性侧面硬化病(ALS,就是霍金得的那种病)等等,都有可能导致患者丧失一切和外界交流的能力。话不能说,身体不能动,但脑子却还是清醒得可怕。就算是为了拯救一个被封锁的灵魂,脑机接口的研究也是值得的。

好在事实并非全都那么沉重。已经有公司开发出了基于非植入式脑机接口的游戏,在脑门上绑一条带子,你就可以控制桌上的小球来回滚动,还可以和同伴展开“意念大战”。此外也有研究小组邀请小学低年级的同学走进磁共振实验室,利用脑机接口来帮助那些静不下来的孩子学习集中注意力。老师们应该对这个项目举双手支持吧!至于要到哪天,屏幕前的你才能像威尔森那样用意念来上网,我相信不会太久。如果要加上一个期限,我希望是……十年,好不好啊?

转自:http://songshuhui.net/archives/44787.html

Ruby on Rails创始人David Heinemeier Hansson

丹麦的哥本哈根,一个诞生软件天才的地方(北欧的其它的城市也同样诞生了好多天才)。20年前,一位天才在这里开发了自己的pascal编译器(后来这个编译器成了turbo pascal的前身),随后这位天才在美国开发出了turbo pascal、delphi、C#这样的重量级产品。快20年后的2003年,同样在丹麦的哥本哈根,历史似乎正要在重演。

然而,如果有人在2003年前看到这个小伙子,也许没人想到他会是天才。他的高中数学成绩考过F,他当过丹麦一个著名游戏网站的记者,他到了21岁才进入哥本哈根商学院读大学本科,他甚至在20岁前没有写过程序。这一切的一切似乎没有任何地方会将他与程序天才挂起钩来。

不过现在,他显得很兴奋,因为他刚接到遥远的大洋彼岸—美国的芝加哥,他两年多的合作伙伴37signals的电话。37signals是一家世界级的小公司(将世界级与小联系在一起真件有趣的事,到了2006年整个公司只有7个人),他们给他们的客户开发好多的Web应用,但是现在他们决定要拥有自己的产品了。这个产品的名字叫basecamp,这是一个小型的项目管理和交流软件,他们有两位很好的设计师,但是他们却只有一个程序员——来自大洋彼岸的还在哥本哈根商学院读大三的David Heinemeier Hansson。

David Heinemeier Hansson显得很兴奋,因为这是一个很有挑战性的项目,尽管他的PHP经验只有两年多,尽管他只在学校的毕设项目里用过J2EE,但是他显得很自信,他知道也许自己没有数学天赋,也许没有能力解决的难题,但是他对他的开发实力和理解力很自信,因为他知道他有另外一种能力——他能将简单的事情变得更简化。在使用了PHP的时候,他就开发了一套自己的framework,使PHP的开发变得更简单。

然而真正令David Heinemeier Hansson兴奋的原因却不仅在这里,他决定使用一种新的语言—ruby。事实上他对于ruby的经验只有几天,他只是觉得PHP的语法和设计令他无法忍受了,尽管PHP的开发速度很快,尽管PHP存在着好多的优点,但是语言的天生缺陷令他决定放弃PHP,他在朋友的怂恿下开始看ruby 了,pragmatic programmer一直是他的偶象和目标,而由pragmatic programmer所写的programming ruby也确实令人兴奋,尽管受过些挫折,但是他觉得应该用ruby试试,于是他开始写一套以前用PHP写过的framework。

一周以后,事情的发展变得令人吃惊,Oops,ruby的开发效率实在是太惊人了,而且更重要的是的它的语法是如此的美丽优雅,David Heinemeier Hansson看着他自己一周之内开发出了以前用PHP要一个多月的东西,再加上它把J2EE开发中的学到的一些东西用上去,一切竟会如此简单。他兴奋地报告了美国总部:我要用ruby开发basecamp。与任何大型、官僚的公司与机构不同,37signals甚至没有做任何考虑就答应了。

两个月后,David Heinemeier Hansson开发出了自己的framework,再过了两个月,整个BaseCamp的产品竟然已经完成了。David Heinemeier Hansson看着自己写的代码兴奋异常,然而更兴奋的事还在后面,BaseCamp一发布就引起了轰动,全世界40多个国家的人值得开始使用,有人认为它是世界是最好的Web应用程序。

然而更令人轰动的则是架构BaseCamp的framework,David决定将这个framework从basecamp中剥离出,并取名叫ruby on rails,他觉得既然rails能让自己这么兴奋,开发的效率如此之高,那么rails也应该让别人感到快乐,也许会引起轰动。

2004年7月,rails终于发布了,David Heinemeier Hansson盯着下载的流量,第一周2000次,这是一个不错的成绩,第二周下载量翻了好几倍,一个月、两个月整个社区似乎都在为ruby on rails的诞生而兴奋!随后,他收到了他的偶像pragmatic programmer之一的Dave Thomas的信,Dave决定写一本关于ruby on rails的书,David Heinemeier Hansson也被邀请作为第二作者完成了其中的一章和很多脚注,当2005年这本agile web development with rails诞生后的几周,它登上amazon书店计算机书籍排行榜榜首。甚至反过来,rails也大大影响了ruby的地位,ruby让rails成功,rails使ruby书籍的销售量比2004年翻了10几倍,使ruby成为2005年最受观注的语言,amazing。

ruby on rails的成功让全世界都震惊了,很多人对它喜欢狂热,很多人怀疑,很多人恐慌,不管ruby on rails能走多远,不管ruby on rails会不会代替J2EE,他的创新精神和他的简化开发的思想都将永存。他被评为Google/O’Reilly’s Best Hacker of ’05,他甚至成为OSCON和好多会议的keynote speaker。

2005年10月,David在众多大牌(Tim O’Reilly, Martin Fowler, Sam Ruby, Bruce Perens, Jeffrey Zeldman, Richard Bird)的推荐下,拿到绿卡正式移居美国芝加哥,与37signals总部的同志们会合了。在ruby on rails的网站上还有他所做讲座的视频。

Python编程语言的创始人Guido van Rossum

  Guido van Rossum是Python编程语言的创始人,从2005年开始就职于Google公司。

  Python是线上和线下的一种重要的编程语言。Python社区的人赋予他“仁慈大君” 的称号,这一称号直接来自英国肥皂剧《Monty Python飞行马戏团》。Guido当初之所以选中Python作为程序的名字,是因为他太喜欢这部肥皂剧了。

  Guido原居荷兰,1995移居到美国,并遇到了他现在的妻子。在2003年初,Guido 和他的家人,包括他2001年出生的儿子Orlijn一直居住在华盛顿洲北弗吉尼亚的郊区。随后他们搬迁到硅谷,现在Guido在为Google工作(其中有一半时间是花在Python上)。

  Guido在1982年获得阿姆斯特丹大学的数学和计算机科学的硕士学位,并于同年加入一个多媒体组织CWI,做调研员。1989年,他创立了Python语言。