欢迎攻击酷壳

欢迎攻击酷壳

相信大家都发现昨天下午2011年2月16日,下午从2点到6点,酷壳基本打不开。原因是服务器受到了黑客攻击。从互联网上几乎ping不通服务器(丢包率60%以上,ping时延巨大,是平时的10倍以上),我勉强登上服务器查看了系统负载,相当低,于是停止了Apache,发现网络ping马上恢复正常。于是,我启动Apache,再使用iftop查看了一下TCP链接的带宽消耗,发现有那么一两个链接把服务器带宽全部吃完,于是我记录了下IP地址。攻击在下午6点时准停止,就像我们正常下班一样。

酷壳受到很多攻击,不过,基本上都是一些注入式的攻击,都是想取得一些权限的攻击。这是第一次受到不以取得权限为目的,而只在以影响酷壳正常运转的攻击。

我不竟想到了几个问题:

  1. 为什么要攻击?这只是一个技术blog,这样的攻击目的是什么?
  2. 黑客攻击的背后总是有相关的利益冲突的,不会是没有动机的攻击。

所以,我一直在想,是什么样的利益冲突导到酷壳被攻击的?这个BLOG得罪了谁呢?我这个小小的个人的BLOG触动了谁的利益呢?任何事情总是有因果关系的,我很不自然地想到了最近我发布的几篇文章……

欢迎攻击酷壳!我很乐意看到某些人生气的样子。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (22 人打了分,平均分: 4.68 )
Loading...
Web开发人员速查卡

Web开发人员速查卡

无论你是多牛的程序员,你都无法记住所有的东西。而很多时候,查找某些知识又比较费事。所以,网上有很多Cheat Sheets,翻译成小抄也好 ,速查卡也好,总之就是帮你节省 时间的。之前给大家介绍过Web设计的速查卡25个jQuery的编程小抄,还有程序员小抄大全,今天转一篇开发人员的速查卡,源文在这里。下面的文章我就不翻译了。

HTML Cheat Sheet

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (10 人打了分,平均分: 4.90 )
Loading...
TDD并不是看上去的那么美

TDD并不是看上去的那么美

春节前的一篇那些炒作过度的技术和概念中对敏捷和中国ThoughtWorks的微辞引发了很多争议,也惊动了中国ThoughtWorks公司给我发来了邮件想来找我当面聊聊。对于Agile的Fans们,意料之中地也对我进行了很多质疑和批评。我也回复了许多评论。不过,我的那些回复都是关于中国ThoughtWorks咨询师以及其咨询的方法的。我对Agile方法论中的具体内容评价的不是很多,所以,我想不妨讨论一下Agile方法论中的具体的实践(以前本站也讨论过结对编程的利与弊)。

那么,这次就说说TDD吧,这是ThoughtWorks中国和Agile的Fans们最喜欢的东西了。我在原来的那篇文章中,我把TDD从过度炒作的技术剔除了出去,因为我还是觉得TDD有些道理的,不过,回顾我的经验,我也并不是很喜欢TDD。我这篇文章是想告诉大家,TDD并没有看上去的那么美,而且非常难以掌控,并且,这个方法是有悖论之处的

TDD简介

TDD全称Test Driven Development,是一种软件开发的流程,其由敏捷的“极限编程”引入。其开发过程是从功能需求的test case开始,先添加一个test case,然后运行所有的test case看看有没有问题,再实现test case所要测试的功能,然后再运行test case,查看是否有case失败,然后重构代码,再重复以上步骤。其理念主要是确保两件事:

  • 确保所有的需求都能被照顾到。
  • 在代码不断增加和重构的过程中,可以检查所有的功能是否正确。

我不否认TDD的一些有用的地方,如果我们以Test Case 开始,那么,我们就可以立刻知道我们的代码运行的情况是什么样的,这样可以让我们更早地得到我们实现思路的反馈,于是我们更会有信心去重构,去重新设计,从而可以让我们的代码更为正确。

不过,我想提醒的是,TDD和Unit Test是两码子事儿。有很多人可能混淆了自动化的Unit Test(如:XUnit系例)和TDD的软件开发过程。另外,可能还会有人向鼓吹“TDD让你进行自顶向下的设计方式”,对此,请参阅本站的《Richard Feynman, 挑战者号, 软件工程》——NASA的挑战者号告诉你自顶向下设计的危险性。

TDD的困难之处

下面是几个我认为TDD不容易掌控的地方,甚至就有些不可能(如果有某某TDD的Fans或是ThoughtWorks的咨询师和你鼓吹TDD,你可以问问他们下面这些问题)

  • 测试范围的确定。TDD开发流程,一般是先写Test Case。Test Case有很多种,有Functional的,有Unit的,有Integration的……,最难的是Test Case要写成什么样的程度呢。

    阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (26 人打了分,平均分: 4.50 )
Loading...
GDB中应该知道的几个调试方法

GDB中应该知道的几个调试方法

七、八年前写过一篇《用GDB调试程序》,于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题。这么多年来,有一些问题是大家反复在问的,一方面,我觉得我以前的文章可能没有说清楚,另一方面,我觉得大家常问的问题正是最有用的,所以,在这里罗列出来。希望大家补充。

一、多线程调试

多线程调试可能是问得最多的。其实,重要就是下面几个命令:

  • info thread 查看当前进程的线程。
  • thread <ID> 切换调试的线程为指定ID的线程。
  • break file.c:100 thread all  在file.c文件第100行处为所有经过这里的线程设置断点。
  • set scheduler-locking off|on|step,这个是问得最多的。在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。
    • off 不锁定任何线程,也就是所有线程都执行,这是默认值。
    • on 只有当前被调试程序会执行。
    • step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。

二、调试宏

这个问题超多。在GDB下,我们无法print宏定义,因为宏是预编译的。但是我们还是有办法来调试宏,这个需要GCC的配合。

在GCC编译程序的时候,加上-ggdb3参数,这样,你就可以调试宏了。

另外,你可以使用下述的GDB的宏调试命令 来查看相关的宏。

  • info macro – 你可以查看这个宏在哪些文件里被引用了,以及宏定义是什么样的。
  • macro – 你可以查看宏展开的样子。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (15 人打了分,平均分: 4.80 )
Loading...
Error handling in Egypt

Error handling in Egypt

以前发布过《C语言的错误处理》一文,不过今天想说的是Egypt的“错误处理”。埃及的事闹得挺大的,国外和中文twitter上更是炸了锅。不要以为程序员就只会写程序——看看程序员举出来的标语吧。呵呵。

Error handling in Egypt

当然,作为程序员来说,这段代码显然还需要重构:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (9 人打了分,平均分: 5.00 )
Loading...
那些炒作过度的技术和概念

那些炒作过度的技术和概念

StackExchange.com上有一个贴子在评论着最近20年来被炒作过度的技术,对于出现的结果,大多数赞同,也有一些不赞同。下面我从前15名挑了10个(Java的WORE我去掉了,TDD我也去掉了,因为我觉得他们应该没有炒作过度,而且都不错),按原贴的顺序罗列如下:(后面的一些评论是我加的,欢迎大家讨论)

Top 10 过度炒作的技术和概念

  • Unified Modeling Language (UML) – UML是一个程序员交流想法的不错的工具,但是他离程序员真正需要的设计工具还差得很远,比如:设计是否符合需求、架构设计、数据流等等。只有为数不多的程序员使用这个工具交流想法,而没有用在具体工作中。
  • Sharepoint – 现在N多的公司都在用微软的这个东西做公司内部的Intranet。不过安装和维护起来,代价相当的大。但是其市场做的很成功,不对技术上来说对技术人员来说,相当的蹩脚。Sharepoint的设计没有认真地分析过业务流程,仅仅是一个文档存储地。看上去我们似乎可以做任何的事,但是如果你要用其来管理你的项目和track你的项目问题,你会发现其是无比的难用。
  • eXtensible Mark-up Language (XML) –  XML嘛,以前说过很多了(XML1 XML2)我们用他来做和程序数据封装,用来做配置文件,用来做网络传输格式。我们的程序处理起XML来,又慢,又不经济,没有工具,几乎无法维护XML文件。XML用来做数据封包真是很不经济,Yaml和JSON那个不比它简单?用XML来做程序配置文件不知道是谁想出来的主意,相当的愚蠢,看看Unix/Linux下的配置文件,简单易读,相当容易维护。真是高科技啊。
  • SOAP, XML-RPC, WSDL 的 Web Services – 这个东西前几年炒的很凶。所有人都相信,这是程序员的未来。可惜的,其中的复杂和不一致,相当的令人恶心。SOAP的那个S居然还是Simple!看来,扯上XML的都不会是什么好的东东。不过,个人认为,CORBA比他更恶。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (25 人打了分,平均分: 4.24 )
Loading...
为什么中国的网页设计那么烂?

为什么中国的网页设计那么烂?

Nick Johnson,一个有12年经验的Web设计师在它的blog里写下了“Why is Chinese Web Design So Bad”,新浪,人人,百度,阿里巴巴,腾讯榜上有名。其中的观点相当的好,希望所有的中国人都读一下。我不全文翻译了,只是给大家看一些摘要。(保证不会像《环球时报》一样)

——————————

作者2005年的夏天来到中国,他说,他注意到了中国那复杂的文化和西方的有多么的不同。比如,语言,身体特征,政府的执政理念,等等,但是,有一些地方确是差别很少的,比如:幽默的sense,还有对艺术的表现形式的兴趣。很快,因为职业,他发现在中国的网站设计上完全没有引吸到他。于是他开始让身边的中国朋友尽可能多的给他推荐中国的网站,他觉得这个可以对他学习Web Design有帮助。

当他在评论起新浪,人人,百度,阿里巴巴,腾讯的时候,他说,百度和其它的不同,因为百度悍然地公开抄袭Google的Web Design(blatantly copied their design from Google),而人人则是很明显地抄袭facebook(clearly copied their design from Facebook)。而其它的多数的中国网站看上去有很多很多滑稽可笑的文本,一些网站在滥用图片,一些网站图片又不够。他感到很困扰,这样的网站都能被接受?这么多的东西,网民怎么可能看得过来啊?中国人怎么可能容忍这些。(注:他不知道我们中国人能承受的比这更多)

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (36 人打了分,平均分: 4.72 )
Loading...
如何“加密”你的email地址

如何“加密”你的email地址

现在在网上要小心,无论是保护好你的用户名和帐号,还是我们的电子邮件地址。在网上有很多爬虫程序专爬我们的电子邮件地址,一量被爬中了,那么你的邮箱里就是一堆又一堆的垃圾邮件,就好像我的haoel(at)hotmail.com一样,在7、8年前,每天几千封的垃圾邮件。现在hotmail的垃圾邮件过滤得好一些了,不过也有每天40封左右的垃圾邮件。但是我们在自己的网页上又需要发布自己的email地址。所以我们需要搞乱我们的邮件地址,就像那种非常规的搞乱代码一样。不过,我们还需要能认人读的出来。

一般来说,在网上现在很普遍的做法是——

  • 1)用图片,可以用PHP动态生成那个验证码式的。
  • 2)把@变成at,把点变成dot,如 haoel(at)hotmail(dot)com之类的。
  • 3)把a变成@,写成haoel@hotm@mail.com

不过这些还是能被爬到,用图片的方法不利于用户拷贝粘贴。下面介绍几种方法:

第一种:使用CSS样式

反转字序

span.codedirection { unicode-bidi:bidi-override; direction: rtl; }
<p><span>moc.liamtoh@leoah</span></p>

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (3 人打了分,平均分: 5.00 )
Loading...
SOAP的S是Simple

SOAP的S是Simple

曾经有一个争论,一边是站在SOAP这边的人,另一边则是其它人。 站在SOAP这边人,当他们在争论SOAP和Web Service框架的复杂度时,SOAP这边的人说,在引入那些WS-*东东之前,SOAP的确是简单的,这就是为什么SOAP的第一个字母S就是Simple。

在2000年的时候,有一个苦恼的程序员,

程序员: 不好意思,我的老板这周末去打高尔夫了,现在我不得不要搞一个SOAP的应用,但是我根本不知道什么是SOAP。SOAP专家,你能帮我吗?

SOAP专家: 当然可以。首先,我要告诉你,SOAP 就是 Simple Object Access Protocol.

程序员: 哦,那么说来,他是简单的罗?

SOAP专家: 简单的就像星期天一样,我的朋友。

程序员: OK,快跟我说说。

SOAP专家: 好,就像他的名字一样,SOAP用为远程对象访问。

程序员: 像CORBA一样?

SOAP专家: 正是如此,就是像 CORBA,只是更简单。不需要复杂的传输协议,还要设置防火墙,SOAP用的是HTTP。而且我们用的是XML作为传输数据格式而不是二进制。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (6 人打了分,平均分: 4.67 )
Loading...