Browsed by
分类: 轶事趣闻

敏捷水管工

敏捷水管工

本文来自Terazen Technology Inc的创始人+CTO的 David Ing的《Agile Plumbers》(这也墙?),我的其文中的这个帮事翻译过来(和前些天发的SOAP的S是Simple异曲同工)。

也许你会觉得这个比喻不恰当。但我想告诉你的是,这个故事告诉我们,教条主义和以方法论为中心的危险。十条不错的编程观点中第一条—— The only “best practice” you should be using all the time is “Use Your Brain”.

————————————————————

(门铃响……)

事主:啊, Agile 水管工吗? 请进,感谢谢你们这么快就来了——这的确很紧急,我这真是很乱。

水管工1: 先生,没问题,我们就是敏捷的。在我给你做Presentation前,我先给你介绍一下我的两个同事。

事主:Presentation?啊,我们有时间吗?这的水已经流得到处都是了……

水管工1:……先生,我们必需坚持这个。我们只是想保证你能成为动态搜寻解决方法的一份子。你是我们的 champion sponsor,也就是我们团队内的 consultant!你可以提供一个白板给我们使用吗?

事主:我没听懂,你们不觉得这变复杂了吗?我觉得我应该告诉你们这水是从房子哪儿流出来的,就是那……

水管工2:你这有让我脱衣服的地儿吗?

事主:什么?

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (20 人打了分,平均分: 3.40 )
Loading...
WordPress是怎么赢的?

WordPress是怎么赢的?

一个以前在Six Apart工作4年的产品经理Byrne Reese发布了一篇文章阐述为什么WordPress成为了赢家。其在文章中比较了WordPress和其主要竞争对手产品Movable Type。我觉得其中有可取之处,本想全文翻译的,后来觉得文章太长,翻译太花时间,所以,我把文章中的观点总结如下。

作者例举了如下为什么WordPress会赢的理由:

一、Movable Type许可证,而WordPress是开源的

2004年,Movable Type修改了其许可证,这一举动激怒了所有Movable Type的用户,于是大家纷纷转投Wordpress,这是WordPress最终成为赢家最大的原因。就算是Movable Type有着优越的设计,优越的功能,还有优越的技术支持,但是面对的是一个完全免费的产品也没有办法。因为WordPress是开源的,开源就意味着完全免费,而Movable Type一开始也是免费的,但是其许可证策略有着很不确定的因素。(注:2007年Movable Type发布了开源版本)

二、WordPress很容易安装

WordPress的安装过程很简单,只需要不到5分钟,比起Movable Type来说,这太受用户和推广商欢迎,你几乎不需要去碰后台的那些Web设置。(注:不仅如此,WordPress的升级和安装插件和风格的用户体验也是非常的不错)这就是为什么大家都喜欢WordPress的原因,就算是其功能比Movable Type少了又少。

阅读全文 Read More

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

Error handling in Egypt

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

Error handling in Egypt

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

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 4.00 )
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

好烂啊有点差凑合看看还不错很精彩 (44 人打了分,平均分: 4.48 )
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

好烂啊有点差凑合看看还不错很精彩 (10 人打了分,平均分: 3.60 )
Loading...
C语言函数实现的另类方法

C语言函数实现的另类方法

在前面看过那个BT的Javascript程序后,我们来看一个C语言的,相信大家还记得输出从1到1000的数最后的那个示例,本站还有很多这样的示例,如:变态的hello word如何教新手编程还有恐怖的C++,在下面这个示例面前,神马都是浮云。

下面这个示例向你展示了如何写一个swap()函数(把两个值交换),这段代码在我的Linux下的 gcc v4.1.1下可以正确编译通过,连一个Warning都没有,而且可以正确工作。我能说什么?!C语言并不疯狂,疯狂的是程序员。

#include <stdio.h>
void(*swap)() = (void(*)()) "\x8b\x44\x24\x04\x8b\x5c\x24\x08\x8b\x00\x8b\x1b\x31\xc3\x31\xd8\x31\xc3\x8b\x4c\x24\x04\x89\x01\x8b\x4c\x24\x08\x89\x19\xc3";

int main(){ // works on GCC 3+4
        int a = 37, b = 13;
        swap(&a, &b);

        printf("%d %d\n",a,b);
}

其实,这种用字符串来实现函数的方法,在原理上是很好理解的。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (7 人打了分,平均分: 3.29 )
Loading...
一段Javascript的代码

一段Javascript的代码

我们先看一段Javascript的代码,如下所示:(你能看出来这是干什么的?)

[javascript]($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+
($$=($_=!”+$)[_/_]+$_[+$])])()[__[_/_]+__
[_+~$]+$_[_]+$$](_/_)[/javascript]

这段代码来自BlackHat DC 2011((黑帽安全大会,全世界最大两个黑客大会之一,另一个是Defcon)中的一个叫Ryan Barnett黑客做的XSS Street-Fight!的演讲(XSS是Web上比较经典的跨站式攻击,操作起来也有些复杂),一共69页,基本上都是一些比较枯燥的Javascript,不过这段代码挺有意思的,如果上面这段代码换个样子:

[javascript]($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+
($$=($_=!”+$)[_/_]+$_[+$])])()[__[_/_]+__
[_+~$]+$_[_]+$$](document.cookie)[/javascript]

你看到了document.cookie,于是你可能会想到这是偷用户帐号免登录cookie的。是的,就是这样。答案是,这代码等价于alert(document.cookie),而最上面的那个代码等价于alert(1)——当然,还不仅仅只是alert。看到这里,你可能会想起变态的C语言Hello World程序,以及如何加密/混乱C源代码,是的,这回的这个是Javascript版的,混乱Javascript的会比混乱C的更难懂,因为Javascript的变量类型是可以乱用的。

好,下面让我们来对这个代码做个解析。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (13 人打了分,平均分: 3.15 )
Loading...
Google 需要性爱

Google 需要性爱

看到一篇趣文Google Needs Sex,翻译过来。

Brad DeLong 给我们写了 两篇关于“Google遇到的麻烦”的文章(墙),这两篇文章基本上是说, 制造网络欺诈和网络垃圾信息的人会尽其一切努力来和搜索引擎进行博弈,这样一来,其会让搜索到的结果对我们越来越没有帮助(译注:百度的竞价排名成为了制造网络欺诈和网络垃圾信息甚至洗脑的温床)。于是,人们开始去使用其它一些影响地较少的搜索引擎,准确的说,是那些垃圾信息和欺诈信息的东西还不适应于这些搜索引擎。

这让我想到了Sex。

如果你查看一下进化论,你就会知道为什么有性繁殖是有进化性的,是有可持续性的,而进化也是需要巨大的成本的。

为什么自然界不用克隆来繁殖呢?我所理解的最有说服力的答案是—— 防御寄生生物。如果每一代的生物体都和上一代完全的一样,寄生生物就总有一天可以破解生物体的防御,就是为什么!如果我们的某个香蕉园里种植着“克隆香焦” ,那么一旦某种病菌传播开来,那么我们整个香蕉园里的全部香蕉将毁于一旦。所以,混杂基因的模式会让寄生生物或病毒更难破坏我们的防御。

因此,Google的这些欺诈信息和垃圾信息就像是寄生在人体上的寄生体一样,它们已经非常适应Google的搜索引擎。(译注:百度上的寄生体则像是百度自己养的宠物)

我不知道“搜索引擎的性爱”会是什么样的,但是很明显,Google需要一些。

(全文完)

好烂啊有点差凑合看看还不错很精彩 (15 人打了分,平均分: 3.40 )
Loading...
信XML,得自信

信XML,得自信

XML可能是计算有史以来最NB的发明了,以至于我们以没有XML的程序是难登大堂的程序,不用XML,你都不好意思当程序员。于是,我们看到了很多很雷人的用法(《信XML,得永生》),当然一些朋友当时并没有看懂,不过我不怪大家,因为我们依然深信使用XML可以让你有强大的Zhuangbility,于是我们有下面这两种相当Geiliable的用法。

一、XML中的XML

这个例子是某公司的一个SOAP实现——我们的Webservice需要返回一个XML字符串,这怎么办呢?其实很容易,因为——XML是无所不能的,那怕是封装自己。

<!-- ED: soap envelope omitted for readability -->
<string xmlns="urn:Initech.Global.Services">
  &lt;CompanyGetConnector&gt;
    &lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;
      &lt;xs:element name="InitechGetConnector"&gt;
        &lt;xs:complexType&gt;
          &lt;xs:choice maxOccurs="unbounded"&gt;
            &lt;xs:element name="employees"&gt;
              &lt;xs:complexType&gt;
                &lt;xs:sequence&gt;
                  &lt;xs:element name="EmployerName" type="xs:string" minOccurs="0"/&gt;
                  &lt;xs:element name="Employee" type="xs:string" minOccurs="0"/&gt;
                  &lt;xs:element name="Firstname" type="xs:string" minOccurs="0"/&gt;
                  &lt;xs:element name="Prefix" type="xs:string" minOccurs="0"/&gt;
                  &lt;xs:element name="Lastname" type="xs:string" minOccurs="0"/&gt;
                  &lt;xs:element name="Org._unit" type="xs:string" minOccurs="0"/&gt;
                  &lt;xs:element name="Function" type="xs:string" minOccurs="0"/&gt;
                  &lt;xs:element name="E-mail_work" type="xs:string" minOccurs="0"/&gt;
                  &lt;xs:element name="Telephone_work" type="xs:string" minOccurs="0"/&gt;
                  &lt;xs:element name="Mobile_work" type="xs:string" minOccurs="0"/&gt;
                  &lt;xs:element name="Birthdate" type="xs:date" minOccurs="0"/&gt;
                  &lt;xs:element name="Hired_since__irt._yearsemployed_" type="xs:date" minOccurs="0"/&gt;
                  &lt;xs:element name="Image" type="xs:base64Binary" minOccurs="0"/&gt;
                &lt;/xs:sequence&gt;
              &lt;/xs:complexType&gt;
            &lt;/xs:element&gt;
          &lt;/xs:choice&gt;
        &lt;/xs:complexType&gt;
      &lt;/xs:element&gt;
    &lt;/xs:schema&gt;

    &lt;employees&gt;
      &lt;EmployerName&gt;
        My Client
      &lt;/EmployerName&gt;
      &lt;Employee&gt;
        100001
      &lt;/Employee&gt;
    &lt;/employees&gt;
  &lt;/CompanyGetConnector&gt;
</string>

阅读全文 Read More

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