程序员的圣诞节
程序员Román Cortés用1021个字节写了一个3D 的圣诞树,很强大。(请使用Chrome浏览器查看),还记得本站介绍的那个叫js1k.com的网站吗?
其原理如下所示:
程序员Román Cortés用1021个字节写了一个3D 的圣诞树,很强大。(请使用Chrome浏览器查看),还记得本站介绍的那个叫js1k.com的网站吗?
其原理如下所示:
某人用Java搞了一个流体力学的演示。
http://grantkot.com/MPM/Liquid.html
不过,这仅仅是个开始。某同学将其发布上了reddit.com,于是,全世界的同学们开始给力了——
本文译自美国时代(time.com)的《The Men Who Stole the World》,原作者:Lev Grossman。相当有传奇色彩,读起来很爽,翻译过来。译得不好,还请大家指正。本中的四个程序员可能并不是那么声名显赫,而且也很不老实,或许算不上成功,不过他们的确改变了世界。而本文有分析了互联网上P2P的那些事,相当的有参考价值。
2010年12月17日更新:修改了一些错误,理顺了一些语句。
2010年12月19日更新:增加了一些插图。
————————正文————————
十年前,有四个年轻人改变了这个世界的运作方式。他们使用的并不是法律或是武器或是金钱,而是使用软件来改变世界。他们当时有着激进和极具破坏性的想法,并把这些想法付诸于代码,在Internet上以免费自由方式发布。这四个人,没有一个完成了大学学业,却奠定了今天我们习惯的数字媒体环境的基础。然后,因为各种原因,他们也迅速地消失在公众视野中。
1999年,美国东北大学的一个叫Shawn Fanning的一年级新生开发Napster,从此,成为了P2P文件共享和不需要大型机构或零售商就可以获得音乐的先锋和范例。《时代周刊》和《财富》把他放上了封面。那时,他在19岁。
就在同一年,一个挪威的只有十几岁的年轻人 Jon Lech Johansen,他和另两个今天都不为人知的程序员,写下了一个程序解密了商业的DVD,而他成为了全球盛名的“ DVD Jon.”,那年,他只有15岁。
而在1997年,Justin Frankel,一个亚利桑那州塞多纳的18岁的黑客,开发了一个免费的MP3播放器——WinAmp,其成为了Windows操作系统上装机必备的软件,并造就了主流数字音乐的革命。在他发布的第18个月内,1500万人下载了这个软件。而三年后,Frankel 开发了 Gnutella,一个P2P的文件共享协议,没有中心结点,不像 Napster,其不可能被关闭。目前有上百万人还在使用它。
2001年,Bram Cohen, 当年 26 岁,开发了一个P2P的文件传输共享协议—— BitTorrent,其以全新一流的架构全面优化了网络上大文件的共享和传输效率。 BitTorrent 也变成了整个Internet上发布大数据和文件的一个标准。
Paul Butler 是Facebook的Data Infrastructure Engineering Team的一个实习生,他把Facebook 5亿用户的人际关系网给图示了出来(见下图,源图片)挺赞的。从中我们可以看到,某些地方是一片漆黑……
关于Paul是如何产生这个图的,你可以参看:http://www.facebook.com/notes/facebook-engineering/visualizing-friendships/469716398919 (墙)
下面是一个关于编程语言流行度的图(以前本站也有一篇编程语言流行度的文章)。其X轴是从Github中取来的数据(项目数),而Y轴是从StackOverflow取来的(tag数)。注意:Github提供了语言流行度:https://github.com/languages,而本图的原始数据在这里。
来源:http://www.dataists.com/2010/12/ranking-the-popularity-of-programming-langauges/
在网上看到一篇文章介绍五个免费开源的数据挖掘软件,转过来。
Orange 是一个基于组件的数据挖掘和机器学习软件套装,它的功能即友好,又很强大,快速而又多功能的可视化编程前端,以便浏览数据分析和可视化,基绑定了Python以进行脚本开发。它包含了完整的一系列的组件以进行数据预处理,并提供了数据帐目,过渡,建模,模式评估和勘探的功能。其由C++ 和 Python开发,它的图形库是由跨平台的Qt框架开发。
RapidMiner, 以前叫 YALE (Yet Another Learning Environment), 其是一个给机器学习和数据挖掘和分析的试验环境,同时用于研究了真实世界数据挖掘。它提供的实验由大量的算子组成,而这些算子由详细的XML 文件记录,并被RapidMiner图形化的用户接口表现出来。RapidMiner为主要的机器学习过程提供了超过500算子,并且,其结合了学习方案和Weka学习环境的属性评估器。它是一个独立的工具可以用来做数据分析,同样也是一个数据挖掘引擎可以用来集成到你的产品中。
来源:http://blog.seattleinterviewcoach.com/2009/02/140-google-interview-questions.html(墙)
这篇Blog例举了Google用来面试下面这几个职位的面试题。很多不是很容易回答,不过都比较经典与变态,是Google,Microsoft,Amazon之类的公司的风格。对于本文,我没有翻译,因为我相信,英文问题是最好的。不过对于有些问题,我做了一些注释,不一定对,但希望对你有帮助启发。对于一些问题,如果你百思不得其解,可以Google一下,StackOverflow或是Wikipedia上可能会给你非常全面的答案。
Groovy是一个基于 Java虚拟机的敏捷 动态语言。构建在强大的Java语言之上 并 添加了从Python,Ruby和Smalltalk等语言中学到的 诸多特征。为Java开发者提供了 现代最流行的编程语言特性,而且学习成本很低(几乎为零)。在以前的酷壳的五大基于JVM的脚本语言中也介绍过它。
下面,让我们看看他的一个createArray的实现,请大家前去围观下面的Groovy的trunk上的源码吧。真是很好很强大。
这里摘上前几个createArray重载函数让大家看看,(一共有250个重载函数)
public class ArrayUtil { ... ... ... ... public static Object[] createArray(Object arg0, Object arg1) { return new Object[]{ arg0, arg1}; } public static Object[] createArray(Object arg0, Object arg1, Object arg2) { return new Object[]{ arg0, arg1, arg2}; } public static Object[] createArray(Object arg0, Object arg1, Object arg2, Object arg3) { return new Object[]{ arg0, arg1, arg2, arg3}; } public static Object[] createArray(Object arg0, Object arg1, Object arg2, Object arg3, Object arg4) { return new Object[]{ arg0, arg1, arg2, arg3, arg4}; } public static Object[] createArray(Object arg0, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) { return new Object[]{ arg0, arg1, arg2, arg3, arg4, arg5}; } ... ... ... ... }
这里给了一些解释:
在Reddit上有人发布了怎么使用Google的翻译来玩beat box,很有趣,转过来。
下面是相关步骤:
1) Go to Google Translate
2) 把翻译语言设置成从 German 翻译到 German。(德语)
3) 拷贝粘贴这个字符串到translate中:
pv zk pv pv zk pv zk kz zk pv pv pv zk pv zk zk pzk pzk pvzkpkzvpvzk kkkkkk bsch
4) 把声音开大,点击“朗读”,
另,如果你在Google里以 “Google beatbox” 作为关键词搜索,你会看到 Google Translate出现在最前面的搜索结果中。
下面是JDK中有关23个经典设计模式的示例,在stakeoverflow也有相应的讨论:
http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns
Bridge:
把抽象和实现解藕,于是接口和实现可在完全独立开来。
Composite:
让使用者把单独的对象和组合对象混用。