
<div style="background-color: red" id="name" onclick="alert('');">
Jim
</div>
<div id="name" class="name" onclick="alert('');">
Jim
</div>
<div id="na
[……]阅读全文
一个纯正程序员的啰嗦

<div style="background-color: red" id="name" onclick="alert('');">
Jim
</div>
<div id="name" class="name" onclick="alert('');">
Jim
</div>
<div id="na
[……]阅读全文
[……]阅读全文
Alternatives to Mason: Embperl
[……]阅读全文
不同的公司和人,有不同的面试策略,有的考察视野、有的深入细节、有的则是评估解决问题的能力。我经历了一些有意思的面试,在各大城市和不同写字楼之间往返,有因为面试而让我尊敬的公司,也有让我喷饭和无可奈何的故事。朋友们和我开玩笑的时候说:“你就是爱折腾,不同地点之间、不同领域之间,说,2011 年最后两个月里,多少钱捐给铁道部了?”
下面叙述的,来自我自己的经历,或者是朋友告诉我的他/她的亲身经历。(出于保密和尊重,隐去任何公司信息)
第一个故事,记一次面试对话:
面试官:你为什么转向互联网行业?
我:我喜欢互联网,这是这两年逐渐认识到的。
面试官:你是一个目的性很强的人,
[……]阅读全文
近接触到了 Mason,并且了解到了它基础之上的一个 MVC 框架实现,随即联想到做网站以来接触到的各种各样的页面聚合的场景,颇有意思。
页面聚合本身是一种 “分而治之” 的思想,把复杂的页面分割成可以被重用和独立维护的部分,这些部分的来源灵活,可以来自同一个 web app 中,也可以来自不同的域;可以聚合独立的子页面(页面集成),也可以聚合数据(数据集成),甚至可以聚合子呈现(模板集成)。
客户端聚合
这种聚合的最大好处在于把聚合的工作分散到如今越来越强势的客户端,减轻了服务端的压力;另一方面,也从一定程度上简化了服务端的设计。客户端聚合在互联网初期比较少见,如今随着客户端性能越来越优秀,客户端聚合的优
[……]阅读全文
首先来看一段 Google 在愚人节送上的宣传视频,Google 地图八位版:《Introducing Google Maps 8-bit》
如果你和我一样,曾经在红白机的世界里折腾过童年时光,那么你应该和我一样怀旧一笑。是勇者斗恶龙还是最终幻想?Google 专门找来了日本 Google 的工程师来介绍它。特别是片中在插卡接触不良造成的花屏出现时,拔出卡带,用嘴轻吹(谁告诉我迷过红白机但没还做过这事?呵呵);之后,看到卡带上接上了上网线,亲,可那是电话线啊;再来,红白机支持语音了,地名变成了语音输入,语音开关在手柄上 -_-~|||……这些细节都让我联想,如果不是愚人节,这样的东西真可以吸引不少眼
[……]阅读全文
单例模式还是静态类,这是一个老话题了,从我刚开始接触 Java 的时候就看到这样的讨论。在这里我总结一下,也添加一点点新东西。
首先要澄清和区别一些概念,“静态类” 和 “所有方法皆为静态方法的类”。
严格说来,Java 中的静态类,指的是 “static class” 这样修饰的类定义,语法上的要求,使得这样的类一定是内部类,换言之,“静态内部类” 是对它的完整定义。静态内部类最大的好处在于可以隐藏自己(只让自己被所在外层的类用到),同时又可以访问到所在外层类的属性。和 “非静态” 的内部类相比,它可以放置一些静态的成员变量和方法定义,而非静态类不可以;而且,静态内部类不能访问外层类非静态的属性。
但是,通常
[……]阅读全文
老实说,之前我对 CommonJS 也是一无所知,直到不久前 Node.js 火起来,我去研究它,才了解到 Node.js 其实是 CommonJS 的一个部分实现,我才关注起 CommonJS 来。
以前我们说起 HTML,我们说起 JavaScript,大家的印象似乎都停留在了 “网页” 上面,从 2005 年开始,因为 Ajax 的缘故,有一种叫做 “前端程序员” 的新型物种诞生了。
可是现在,前端程序员不甘心自己的一亩三分地了,他们要越权,看看 HTML 5 的 API 吧,它是要吃了 Flash 啊,连 Adobe 都倒向 HTML 5 了,它的 API 可以做各种各样的事情,要绘图、操作文件、客户端数据库、摄像头、重力感应……这些特性,怎么
[……]阅读全文
这个话题是从我对 Amazon 云平台的工作流框架 AWS Flow Framework 的使用研究中想到的,对于一个工作流引擎来说,一个完整工作流的某个阶段完成后,当前阶段的状态必须要被存储下来。
Workflow(Decider) 来决定任务的执行流程,Activity 来执行实际的任务,二者都封装在相应的 Worker 中执行,但不直接交互,而是通过 SWF 管理起来。不过,除了 SWF 的日志,它们都不记录任何当前任务执行状态的信息,即所有的任务执行情况只能从 SWF 的日志中找到。譬如一个 Workflow 由 Activity1 和 Activity2 组成,在执行完 Activity
[……]阅读全文
我的一位同事,他带他读小学的孩子去学钢琴,通过关系找了一位有点名气的退休的老教师,学费不菲。他说其实他并不知道为什么要学,但是看到那么多孩子都在学钢琴,他想,他的孩子不能落后。一个月之后,他去问钢琴老师,对孩子的学习有什么建议没有。钢琴老师用尽了委婉的表达,最后说:
“ 对于你的孩子在学音乐方面,我最大的建议,就是你的孩子最好别学音乐”。
什么?!
这位同事听了当然恼怒,但是转念一想,老师未尝不是负责任的。通常这样的老师,赚钱之心,都会忽悠家长,或者好话歹说,很少有说“ 不” 的。但是真话就是这么犀利。
他说:“ 我们平时并不容易听
[……]阅读全文
Perl 是什么?用 Larry Wall 自己的话说,Perl 是借取了 C、sed、awk、shell scripting 以及很多其他程序语言的特性的一种语言。你可以说它是 “实用报表提取语言”(Practical Extraction and Report Language),也可以叫它 “病态折中垃圾列表器”(Pathologically Eclectic Rubbish Lister),Larry 说:“OK,我都承认”。
最近机缘巧合,有幸接触了一把 Perl,以及它的模板引擎 Mason(我是这么理解的)。我用过 Java、C#、C++等等传统高级语言,也研究过 Groovy、JavaScript 之类
[……]阅读全文
这篇文字是我好久以来的想法,有一些感悟,有一些激烈的言辞,我很自豪我就是一名程序员,我希望给程序员或者前程序员们带来一点启发。也许你认可我的言辞,也许你不屑我的观点,无论如何,欢迎谈谈你的看法。
让程序员做更多种类的事
为什么有人说小公司锻炼人?在小公司,条件并不那么齐备,很多事情都需要程序员自己做,自己去澄清需求、自己做设计、自己搭建环境、自己测试,甚至自己上线、自己维护(这件事情在我们团队被称为 “自己吃自己狗食”)。
然而到了某些公司,在一些正规的流程下,“人” 反而显得不那么重要了:一个完、整的流程被切分成若干环节,程序员只能负责那小小的一环,更严重的是,他们显示出消极和片
[……]阅读全文
云平台的工作流框架 AWS Flow Framework 给我带来的另一个有所感触的话题是“ 异步”:
这个框架把异步的行为划分为 Workflow 端执行的部分和 Activity 端执行的部分,Workflow 控制工作流程,Activity 执行具体的工作流 task,二者都以 poll 的模式不断从中心 SWF 去获取任务。对于开发者来说,用类似这样简单的代码,就完成了整个工作流任务的部署,框架为开发人员隐藏了大部分实现细节:
@Workflow
public interface CalculateWorkflow
{
@Execute
pu
[……]阅读全文
这个故事最初是来自和发哥的一次聊天,他说了一些面向对象设计方面挺有意思的事情,包括 Double Dispatch(下面会提到),我根据我自己的体会和思考,把这些零散的片段重新整理成一个小故事,欢迎感兴趣的同学一起讨论。
有一个苦逼的程序员,叫做小 P。
有一天,老板给他传达了这样一个需求,根据用户不同的图像绘制事件,画出一个圆或者是画出一个方块来。
老板传达的图像绘制事件是这样的:
interface DrawEvent {
}
class RoundDrawEvent implements DrawEvent {
}
class RectangleDrawEvent
[……]阅读全文
Corporate culture is not only a concept that a company uses to attract talents, but also a spirit and method running through the management. Here, I'll talk about the process, which reflects the characteristics and culture of a company as well.
As we all know, a small company cannot handle com
[……]阅读全文
这篇文章是对这个帖子的汇总,帖子里的答复都很有意思,真希望 ITEye 多一些这样的帖子,少一些浮躁和毫无意义的争论。
我把帖子汇总贴在下面:
Write a function that takes as input list of words and prints out groups of words with exactly the same letters, one group per line.
For example,
Given the list:
hat, top, potter, pot, pier, ripe
It would print:
hat
top, pot
pot
[……]阅读全文
在这篇文章里,我们可以见到许多有意思的编程风格,又没有精神为之一振的感觉,仿佛里面的例子就在自己身上,或者离自己很近。其实,对于文档、代码的评审,也是有诸多风格可言的,我这里列举一些有意思的典型:
一坨屎型评审
阅读文档、代码的时候,这些东西在自己眼里就是一坨屎:“我这么高智商的人都看不懂,明显是你有问题!”。
这样的人有一个他自己相当认可的世界观,凡是和这个世界观相冲突的无论对错的事务,必须强力排斥。这样的人眼中容不下复杂的东西,复杂对他的智商而言是一种侮辱,他会选择下结论的方式来拒绝自己对文档或代码的进一步阅读;对于和自己预期不一致的设计和实现,必须升级为人身攻击,挥舞狼牙
[……]阅读全文
在前期发现问题,提高软件质量,降低软件成本。
事实上,代码评审的好处远不止这些。有些项目经理或者开发人员不愿意多提评审,Coding 的过程包含的内容非常丰富,如果只把一个字符一个字符地敲代码叫做 Coding,未免悲哀了一点。优秀的项目,编码阶段实际敲代码的时间不会很长;优秀的程序员,大部分时间都用来思考了。
我来说说代码评审其它鲜为人知的好处,兴许能改变某些同学的看法呢。
增加阅历,学习别人代码的可贵之处
和英语学习是一个道理,如果只听一种纯正口音的英语,英文反而不容易学好,我们需要阅读各种营养的代码,广泛阅读能帮助开阔眼界,积累一些好的
[……]阅读全文
这个故事我早就想说了,可能是在好多个月前,只是一直不知道怎么说才能说合适,现在我重新整理了一下,讲述给大家。
这个故事是从下面这样一个对外暴露接口的调用开始的。
QueryUserEvent event = new QueryUserEvent(); event.setName(name); event.setAge(18); event.setType(QueryUserEvent.TYPE_NORMAL); event.setSex(QueryUserEvent.SEX_MALE); …… List<User> userList = userServic
[……]阅读全文