你会问问题吗?
在工作和生活中,总是会有很多人问题我很多技术方面的问题。有一些时候,问问题的和答问题的总是会有一些不爽的事情发生。如下面的几种情况:
比如:“我的电脑老是蓝屏,怎么办?”,通常这样的问题90%以上的回答是:“重装吧”。这让问问题的人感到很沮丧,但你不能不承认那不是答案。而且有时候让人无法解答,比如:“我的makefiel出错了,你帮我看看我的makfile”,我通常会非反问,报了什么错吗?
另一种情况是,回答问题的人首先先对问问题的人的抱怨,你问的问题就不对,或是,你问的这个问题是什么意思,而导致问问题的人却在不停地解释,结果花了好长时间来讨论问题本身是什么。
还有一种情况是,问的问题太简单了甚至太白痴了,比如你自己试一试或是读读文档就知道了的问题,或是问这个问题直接表明了你的无知或是懒惰。这种问题会相当影响别人对你的印象。
第四种情况是,提问者滔滔不绝,扯这扯那,讲了一大堆,听得听累了。最后都不知道你要干什么。
所以,怎么去问问题,怎么问一个好的问题,是一个很重要的事。你提问的技术直接关系到了你是否能够很快得到你满意的答案。
这里有一篇文章推荐给大家《How To As ...
提高编程技能最有效的方法
StackExchange.com上有两个贴子(贴子一,贴子二),贴子名叫“What is the single most effective thing you did to improve your programming skills?” – 对你的编程技术提高最有效的一件事是什么?回复的人中给了很多很不错的建议,我把他们总结了一下,十条,相信一定会对你有用。(注意:顺序是我自己按我的个人经验排的)
和比自己聪明的能力比自己强的人工作。学习他们的代码,他们的做事方法,看一看那些人是怎么处理错误的。
总是倾听别人怎么说,无论那个的资历和职位是什么样的。
实践,实践,实践,总是不满意于一开始出来的事。
多问问自己,现在在写什么代码?为什么要这样写成这样?还有没有更好的方法?
学习多样的技术,多多比较他们,并一定要了解各种技术的优缺点。
总是问别人问好的问题。
多回头看看走过的路,做过的事,写过的程序,感觉一下他们有多烂。
多读读那些大师写的书。
不要总坐在电脑前编程序,多做做运动,多到户外走走,和非技术人多接触,向他们学习。
...
欢迎攻击酷壳
相信大家都发现昨天下午2011年2月16日,下午从2点到6点,酷壳基本打不开。原因是服务器受到了黑客攻击。从互联网上几乎ping不通服务器(丢包率60%以上,ping时延巨大,是平时的10倍以上),我勉强登上服务器查看了系统负载,相当低,于是停止了Apache,发现网络ping马上恢复正常。于是,我启动Apache,再使用iftop查看了一下TCP链接的带宽消耗,发现有那么一两个链接把服务器带宽全部吃完,于是我记录了下IP地址。攻击在下午6点时准停止,就像我们正常下班一样。
酷壳受到很多攻击,不过,基本上都是一些注入式的攻击,都是想取得一些权限的攻击。这是第一次受到不以取得权限为目的,而只在以影响酷壳正常运转的攻击。
我不竟想到了几个问题:
为什么要攻击?这只是一个技术blog,这样的攻击目的是什么?
黑客攻击的背后总是有相关的利益冲突的,不会是没有动机的攻击。
所以,我一直在想,是什么样的利益冲突导到酷壳被攻击的?这个BLOG得罪了谁呢?我这个小小的个人的BLOG触动了谁的利益呢?任何事情总是有因果关系的,我很不自然地想到了最近我发布的几篇文章……
欢迎攻击酷壳!我很乐意看 ...
为啥搞电脑的会有这么多空闲时间?
解释一下:
Web程序员—— “正在上传中……”
系统管理员——“正在启动中……”
黑客——“黑客脚本放出去了……”
3D动画制作——“正在渲染中……”
咨询顾问——“现在是你的问题了……”
程序员——“正在编译中……”
Error handling in Egypt
以前发布过《C语言的错误处理》一文,不过今天想说的是Egypt的“错误处理”。埃及的事闹得挺大的,国外和中文twitter上更是炸了锅。不要以为程序员就只会写程序——看看程序员举出来的标语吧。呵呵。
Error handling in Egypt
当然,作为程序员来说,这段代码显然还需要重构:
try{
elections(free,fare);
} catch(DemocracyNotFoundException){
System.err.println("Time for Mubarak to leave");
}
也有的程序员说,System.err.println不是处理错误的最好方法,正确的方法应该是:
try {
elections(free,fair);
} catch (DemocracyNotFoundException e) {
throw new MubarakDepartureParty(e);
}
最后,我们希望Egypt不要出现:
...
finally {
Security.shootProte ...
食客还是大厨
(请勿将本文用于商业用途,转载时注明作者和出处)
昨天我在文章《Android将允许纯C/C++开发应用》中发表了一些“很不中听”的观点,在我早晨上班刚打开电脑的时候,Gtalk上同学就发来了一条信息“android 为啥不用C/C++的原因是,android是开放式系统,为了能够跨平台。如果整回C/C++,那么windows mobile就是前车之鉴。”,于是和同学展了争论,同学的意思是Java是正确的,在硬件上的表现也将是很出色的,而且准入门槛低,最重要的是跨平台,跨平台是恶梦,而硬件上性能的问题在未来不是问题。iPhone是单一平台,所以不需要考虑跨平台。
而在我的博文后面上也有许多的讨论,在CSDN上也有一些,大家可以去看看。很多朋友都谈了谈为什么Java要比C++要好的理由,很多很多,大家可以去看看,我觉得挺好的。不过后来,我更新了一下我的文章,留下了几个让大家思考的问题,我希望大家都看看。
在这里,我想和大家说说技术之上的东西。
——————————————正文分割线——————————————
在绝大多数的评论中,我看到了大家都是站在技术开发者的角度在讨论。我想这和Go ...
Linux的cycle日历(你懂的)
这是一个开源项目:http://cycle.sourceforge.net/,其是用python写的。在项目的主页上说,这是一个给妇女用的日历程序,叫cycle,周期,给妇女的,我不多说了,你懂的。下面是一些介绍(请大家注意学习相关的英文单词)
当然,这个小程序不单单只是查看妇女的“周期”(menstruation),其还提供了以下的功能:
第一次的周期 – 在日历上显示为粉色。menstruation周期长度由用户输入的六次周期取平均值确定。
排卵期(Ovulation day)- 在日历上显示为亮绿色,
受精期 (Fertile period)- 在日历上显示为绿色
安全期(Safe Sex)
预产期(Date of birth)
还允许你记一些notes – 医生建议你服用一些荷尔蒙避孕药(hormonal contraceptive)
下面是屏幕截图 ——
注意以下的免责条款:
本程序并不能成为一种避孕的方法。
本程序也不能阻止各种性传染病,如:AIDS
本程序更不能取代你的妇科医生。
一些杂项资源
以前给大家介绍过一些非常有意思的杂项资源,今天再给大家介绍一些。(虽然没有上次的多,也算是一个新年礼物吧)
首先,如果你想在你的web页上做一个小提示,你不妨到http://projects.nickstakenburg.com/tipped上看看,各种各样的提示风格,很不错。而且兼容于四大主流浏览器——Chrome, Firefox, IE, Safari。
如果你想让Java变成一个动态语言,你可以试试这个开源项目:http://code.google.com/p/ductilej/
如果你想把你的Windows蓝屏改成红屏或是绿屏,你可以看看这篇教程:http://blogs.technet.com/b/markrussinovich/archive/2010/12/14/3374820.aspx,还是挺Cool的。
如果你想使用HTML5+Javascript做一个游戏,就像制作这些HTML5的小游戏一样,你不妨考虑使用一下这个游戏框架:http://www.propulsionjs.com/
如果你想学习Emacs,而又不害怕这样的学习曲线,那 ...
流体力学的演示
某人用Java搞了一个流体力学的演示。
http://grantkot.com/MPM/Liquid.html
不过,这仅仅是个开始。某同学将其发布上了reddit.com,于是,全世界的同学们开始给力了——
Flash的开发者首先不服,搞了个 flash版(带源码):
http://wonderfl.net/c/yxe9
看到了Flash版,Javascript+HTML5的同学们也不干了,于是出现HTML5版(带源码):
http://www.music.mcgill.ca/~sinclair/content/blog/liquid_simulator_ported_to_canvas
不过性能慢了很多,所以,又有人优化了一下HTML5版的程序:
http://jsbin.com/unovo4
SVG的同学们也不甘寂寞,不过,那真叫一个慢啊。
http://ulo.pe/js-liquid-svg/
这个时候,C/C++同学出来了,使用SDL库也搞了一个:
http://q3k.org/fluidsim.zip
——————
短短几天里,被人重写成各种语言。这个程序写起来真的 ...
Facebook全球关系网
Paul Butler 是Facebook的Data Infrastructure Engineering Team的一个实习生,他把Facebook 5亿用户的人际关系网给图示了出来(见下图,源图片)挺赞的。从中我们可以看到,某些地方是一片漆黑……
Facebook全球关系网
(点击看大图,3.8M)
关于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/
Groovy是怎么实现createArray的
Groovy是一个基于 Java虚拟机的敏捷 动态语言。构建在强大的Java语言之上 并 添加了从Python,Ruby和Smalltalk等语言中学到的 诸多特征。为Java开发者提供了 现代最流行的编程语言特性,而且学习成本很低(几乎为零)。在以前的酷壳的五大基于JVM的脚本语言中也介绍过它。
下面,让我们看看他的一个createArray的实现,请大家前去围观下面的Groovy的trunk上的源码吧。真是很好很强大。
http://svn.codehaus.org/groovy/trunk/groovy/groovy-core/src/main/org/codehaus/groovy/runtime/ArrayUtil.java
这里摘上前几个createArray重载函数让大家看看,(一共有250个重载函数)
public class ArrayUtil {
... ...
... ...
public static Object[] createArray(Object arg0, Object arg1) ...
用Google Translate玩转beat box
在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出现在最前面的搜索结果中。
Jeff Dean的Stanford演讲
Google 公司的 Jeff Dean 在Stanford大学做了一个非常 精彩的演讲(视频未墙)。我觉得我们每一个人都应该去看一看这个视频,当然,没有字幕,需要不错的听力,当然,我不可能全部翻译出来,因为我也不是完全能听懂,下面是一些相关的Notes,供你参夸,并欢迎牛人指证。
比较了从1999年到2010年十年来的搜索量的变化。搜索量增加了 1000 倍,而搜索速度快了5 倍。1999年,一个网页的更新最多需要一个月到两个月,而今天,只需要几秒钟,足足加快了5w倍。
一开始,这些大量的查询产生了大约30GB的I/O量。2004年,他们考虑过全部重写infrastructure。
讨论了一些关于变量长度字节对齐的东西。
今天的MapReduce 有400万个作业,处理将近1000PB的数据,130PB的中间数据,还有45PB的输出数据。(1PB =1024TB)关于 MapReduce (Google云计算的精髓) 的一些统计,见下图:
现在Jeff正在做一个叫Spanner的项目,这是一个跨多个数据中心的项目。在后来的Q&A中, ...
版本管理器的发展史
以前本站发布过编程语言进化,Windows的达尔文进化图,今天在网上看到版本管理器的进化图,转过来,源文链接如下:
http://codicesoftware.blogspot.com/2010/11/version-control-timeline.html (墙)
这张图上分成了四个时期:
史前时期:1982年的RCS。现在你可能还能在Unix的发布包中找到它。
古典时期:1990年的CVS(经典的SCM管理器,可惜不能track目录和文件名的改变,今天这个东西已经过时了),1985年的PVCS,1992年的clearcase(价格贵,功能复杂,当然,今天也有很多公司在用),微软的VSS(Welcome to Hell),90年代中期的Perforce(P4,这个工具今天都还在被广泛地使用,尤其是那些中等大小却有着大量开发团队的公司,现在是Google内部最大的代码管理器)。
中世纪时期:SVN(Linus很不喜欢SVN,2006年引入了Git),AccuRev(强力支持branch和merge,其扮演了一个很重要角色帮助社区脱离clearcase和CVS),
文艺复兴时期: ...
架构师给程序员的一封信
下面的邮件是某Architect发给他的Engineering团队的(来源),我觉得挺不错的,翻译过来,我相信我们所有的程序员都能从中学到很多东西。下面是这封邮件——
每次当我开始做新的东西是我就会很兴奋。就算在软件圈里做了20年以后,每当开始新的旅程里,我都觉得我心中有一些东西不吐不快。这是我们大家一起的旅程。我强烈地相信我们详细规划的过程是很有乐趣的,富有挑战的和丰富多彩的。我想让这个旅程让你们难忘,并且能增添你们所有人的阅历。
这看起来有些唯心主义,不过,我想制订我的工作日程,我们的技术策略,以及你们密切合作的进度。这样一来,当你们做了什么相当不错的事,我们所有人都可以受益。我相当的尊重第一个工程师和他们的代码。
1. 代码是王。文档仅随其后 。所以,代码一定要和文档一致,并可以正确执行。
2. 测试,测试,测试。
3. 单元测试非常关键 。每一个在单元测试之后发现的bug需要开发人员双倍的开销。记住,我宁可增加你的薪水,也不愿意把这些钱发给另一个QA团队然后你再修正bug。因此,如果你的代码满是bug的话,我不得不把钱付给更多的人,而你也只能分得很小的一块饼。
...
一个人脸识别的Javascript
这里有一个人脸识别的Javascript,感觉挺酷的。识别的还是很不错的,网友们在做了很多的测试,对于动画片里的人员很不准,而且,照片质量要好一点的会准一点。下面是一些识别结果:
一个递归式的图
不过,好像只能识别白人
大家可以去试试。
你和你的工作
源文:http://youtheuser.com/2010/10/04/you-and-your-job/,有人说下面的这个文章太过Crazy,有人说下面的这个文章是猎头的软文,你换工作换得越多,他们才能越挣钱。我的观点的,先别否定他的观点,试着去理解一下为什么他要这么说,你会发现还有一些道理的。然后,想一想,自己需要的是什么?一份工作?还是一份经历?还是不断的自我挑战?相信你会有知道该怎么去做的。当然,“离职”是最后一步棋,在此前,我更希望你能尝试地在你现在工作环境下去改变去影响。
“The role of a manager should be to ensure that those that work for him/her eventually leave and go onto bigger and better things” — Mark Plant
如果你对你的工作不高兴——离开,如果每天早上你对你的工作没有激情——无论你在干什么你都要停下来。
因为这就是我们赖以生存的东西。
如果你的工作没有挑战性 – leave.
如果你在混你的工作 – ...
在线作图编辑服务
以前向大家介绍过在线的IDE,还有在线的编译器,还有 在线的画UML图的网站,在这篇文章里还介绍了一个在线的CSS制作服务,今天给大家介绍两个在线的作图编辑服务。
一个看似就是Web版的Photoshop:http://pixlr.com/editor/ (用Flash做的)
Photo Editor Online 在线服务
—–
一个是作矢量图的,叫SVG Editor:
http://svg-edit.googlecode.com/svn-history/r1771/trunk/editor/svg-editor.html
SVG Editor 矢量图编辑
Eclipse和Vim快捷键桌面
点击图片看大图
Eclipse 快捷键桌面
vim 移动快捷键桌面