Browsed by
分类: 编程语言

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...
Android将允许纯C/C++开发应用

Android将允许纯C/C++开发应用

对于Android,长期以来,我一直有两件事搞不懂,

  • 一个是为什么Android要选用Java。对于嵌入式开发,CPU和内存都很宝贵,居然还使用Java。
  • 一个是为什么Android的开发站点要被墙。这只是一个技术网站啊。

最近,在一个Android开发人员的Blog上证实了在NDK r5使用C/C++进行开发。(以前,Android 对C/C++开发的支持仅限于用C/C++开发动态链接库,然后在Java中以JNI的形式来调用)现在,你可以用纯C/C++开发了(参看下面的程序代码)。还有一段完整的代码示例在这里(墙,还有XML的manifest,又见XML)。看来,Google终于明白为什么使用Android的手机(如:Moto, 三星、索爱和HTC)的触摸体验远远不及object C搞出来的iPhone。

void android_main(struct android_app* state) {
    // Make sure glue isn't stripped.
    app_dummy();

    // loop waiting for stuff to do.
    while (1) {
        // Read all pending events.
        int ident;
        int events;
        struct android_poll_source* source;

        // Read events and draw a frame of animation.
        if ((ident = ALooper_pollAll(0, NULL, &events,
                (void**)&source)) >= 0) {
            // Process this event.
            if (source != NULL) {
                source->process(state, source);
            }
        }
        // draw a frame of animation
        bringTheAwesome();
    }
}

我个人估计有两个原因为什么Google回头支持C/C++了,

  1. Google开始觉得自己整的JVM在性能上可以全面超越传统JVM,并接近C/C++,现在发现搞不定了。
  2. Google发现Java的程序员不像C/C++程序员那样注重程序的性能和效率,开发App太耗CPU和内存。

于是只好转回支持C/C++。本来就是用C/C++写出来的Android嘛,居然不能用C/C++而只能用Java,真是太侮辱C/C++了。最后,只希望Google并不是又整了一个C/C++版的Dalvik虚拟机,不然就真是侮辱到极点了。

——— 更新 2011/01/24 ————

谢谢大家对这篇文章的评论,挺有意思的,欢迎讨论,我把我的回复更新在下面。不一定对,仅供大家参考。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (38 人打了分,平均分: 4.39 )
Loading...
HTML5 logo 发布

HTML5 logo 发布

2011年1月19日,W3C发布了HTML5的log,打开W3C的页面,下在的图片印入眼前。我的第一感觉,就像是看到了小时候看的八一电影制片产的电影。这分明是号召全世界的无产Web程序员们团结起来,不畏艰难,不怕牺牲,一定要把HTML5的革命事业进行到底!

所以,请各位Web程序员不但在你们的HTML5的网页上加上下面的徽章(关于各个徽章的含义,请参看这里

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (6 人打了分,平均分: 2.33 )
Loading...
64位平台C/C++开发注意事项

64位平台C/C++开发注意事项

http://www.viva64.com/en/l/上例出了28个在64位平台上使用C/C++开发的注意事项,对于进入64位时代的程序员应该去看看这28个事项,这些英文读物对于有C/C++功底的朋友读起来应该并不难,我估计大约20-30分钟可以精读完一篇(或者更快),下面是这28个注意事项的列表。相信对大家一点有帮助。

  • Lesson 01. What 64-bit systems are.
  • Lesson 02. Support of 32-bit applications.
  • Lesson 03. Porting code to 64-bit systems. The pros and cons.
  • Lesson 04. Creating the 64-bit configuration.
  • Lesson 05. Building a 64-bit application.
  • Lesson 06. Errors in 64-bit code.
  • Lesson 07. The issues of detecting 64-bit errors.
  • Lesson 08. Static analysis for detecting 64-bit errors.
  • Lesson 09. Pattern 01. Magic numbers.
  • Lesson 10. Pattern 02. Functions with variable number of arguments.
  • Lesson 11. Pattern 03. Shift operations.
  • Lesson 12. Pattern 04. Virtual functions.
  • Lesson 13. Pattern 05. Address arithmetic.
  • Lesson 14. Pattern 06. Changing an array’s type.
  • Lesson 15. Pattern 07. Pointer packing.
  • Lesson 16. Pattern 08. Memsize-types in unions.
  • Lesson 17. Pattern 09. Mixed arithmetic.
  • Lesson 18. Pattern 10. Storage of integer values in double.
  • Lesson 19. Pattern 11. Serialization and data interchange.
  • Lesson 20. Pattern 12. Exceptions.
  • Lesson 21. Pattern 13. Data alignment.
  • Lesson 22. Pattern 14. Overloaded functions.
  • Lesson 23. Pattern 15. Growth of structures’ sizes.
  • Lesson 24. Phantom errors.
  • Lesson 25. Working with patterns of 64-bit errors in practice.
  • Lesson 26. Optimization of 64-bit programs.
  • Lesson 27. Peculiarities of creating installers for a 64-bit environment.
  • Lesson 28. Estimating the cost of 64-bit migration of C/C++ applications.
好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 4.00 )
Loading...
JS游戏引擎列表

JS游戏引擎列表

这里有一个网址收集了关于JS游戏引擎开发库的一个列表,转过来。关于使用JS和HTML5做的一些小游戏,可参见《HTML5 小游戏展示

游戏引擎

Name Latest Release License Type Notes
The Render Engine 1.5.3 MIT 跨浏览器; 大规模 API; 开源. 2
gameQuery 0.5.1 CC BY-SA 2.5 和 jQuery 一起使用
gTile 0.0.1 Tile based
Akihabara 1.3 GPL2/MIT Classic Repro 基于JS+HTML5的街机风格的游戏 3
The Javascript 2D Game Engine GPL 注重于重力、物理、碰撞检测方面,使用HTML5 Canvas 和IE的ExplorerCanvas 低CPU消耗. 4
The GMP Javascript Game Engine 1.7.4 (2010-10-31) GPL2/MIT 注重于数度的操作简化,”easy to learn and use” 5
Crafty 0.1 GPL/MIT 轻量级和模块化。 6
Effect Games
PropulsionJS 1.1 MIT 使用 HTML5 Canvas. 7
Flax Apache 2.0 还没有released。使用 GWT 和 HTML5。关注于Linux和Mac OS上的Web游戏开发。8
j5g3 GPLv3 还在开发过程中
cssgameengine 用于初学者。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (7 人打了分,平均分: 2.14 )
Loading...
一些有意思的网站和贴子

一些有意思的网站和贴子

各位朋友,又到了介绍各种杂项的时候了,正如以前的这篇这篇文章一样,本篇文章也给你介绍一些最近出现的一些有趣的东西。希望你能喜欢。

  • 首先是华尔街的一篇报道,2011年最好和最不好的工作,其引用了CareerCast.com的数据,其列出了100个工作种类,并根据薪资、工作环境、工作鸭梨、体力消耗和就业前景做了一个排序。结果排第一位的是“软件工程师”,其理由是:高科技产品的需求呈爆炸式增长,以及人们对iPod、平板电脑、和其它科技产品应用软件的喜好,软件工程师被评为最佳职业。软件工程师有弹性工作时间,可以在家办公,而且每个月都有猎头找来。而最差是的则是码头工人。
[bestjobspromo]
  • 接下来是一个叫“Java pass by value”的长贴,楼主说有一天在LinkedIn.com上看到了Java Group里有人讨论Java是pass by value的,长达240+贴子。贴子里说,如果你使用Java的原始类型如int, long,就是传值,如果你用object, array,其实传的是一个引用的拷贝,所以,Java是传值的。呵呵,你觉得有道理吗?于是,成就了这个大讨论战。reddit.com上也有N多的回贴。有空可以看看。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (10 人打了分,平均分: 3.50 )
Loading...
输出从1到1000的数

输出从1到1000的数

有这样一个面试题——请把从1到1000的数打印出来,但你不能使用任何的循环语句或是条件语句。更不能写1000个printf或是cout用C/C++语言

我相信,大多数人一开始你可能想到的是递归算法:

void f(int n){
    printf("%d\n",n);
    (1000-n) ? f(n+1) : exit(0) ;
}
int main(){
    f(1);
}

当然,题目中说了不能使用条件语句,所以,上面那种解法的不符合题意的,因为还是变向地使用了条件表达式。不过,我们可以用别的方法来让这个递归终止,比如:

除以零,当程序crash,呵呵。

void f(int n){
    printf("%d\n",n);
    n/(1000-n);
    f(n+1);
}

还有这样退出递归的:

阅读全文 Read More

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