2010年03月存档文章

OpenSSL 1.0.0

今天发布个新闻,OpenSSL 1.0正式发布,OpenSSL对于搞程序和系统管理的人一定知道,它给了我们安全的通讯通道,它支持着数以万计的金融、交易、安全性网站的运行,它的功劳无法用简单的话去评说,现在终于迎来了他的1.0版,就像linux 1.0发布时,是个里程性质的事件
下面是新闻内容
OpenSSL是著名的 SSL 的开源实现,是用 C 语言实现的。由于其中实现了为 SSL 所用的各种加密算法,因此 OpenSSL 也是被广泛使用的加密函数库。
该项目于1998年12月23日正式启动,经过11年的开发,期间发布了数十个测试版本之后,终于正式宣布发布OpenSSL 1.0.0版

OpenSSL 的前身是 SSLeay ,一个由 Eric Young 开发的 SSL 的开源实现,支持 SSLv2/v3 和 TLSv1 。

伴随着 SSL 协议的普及应用, OpenSSL 被广泛应用在基于 TCP/Socket 的网络程序中,尤其是 OpenSSL 和 Apache 相结合,是很多电子商务网站服务器的典型配置。

1.0.0版本新改进:

RFC3280 path validation: sufficient to process PKITS tests.
Integrated support for PVK files and keyblobs.
Change default private key format to PKCS#8.
CMS [...]

More »

flash builder 4

开心农场等现在非常热门、非常赚钱的sns网络游戏都是用什么来做的呢?flash! 现在一个重量级的flash开发工具登场了- Flash Builder 4
在Flash Builder 4之前adobe的flash开发工具叫Flex Builder,这个搞过flash开发的肯定比较熟悉,它是和微软的那个Silverlight 对着来的,都是为快速构建富 Internet 应用程序而搞的东西。可能是因为Flex Builder名字让人感到不舒服,所以又改回来Flash Builder,以字达意,这才是正解
老纪对flash开发还不太熟、留着做个纪念,Flash Builder 4可以免费下载
给个Flash Builder 4 正式版的注册码:Flash Builder 4 sn : 1424-4008-9664-3602-3439-1711

More »

梦想永远都不会实现,因为你根本没有去尝试

昨天看了个片子叫做《借刀杀人》,里面的几句台词可以摘出来和大家共勉

午夜梦回,你会发觉从来都没发生
一切都与你擦肩而过
梦想永远不会实现,突然你就垂垂老矣
什么都没发生,永远也不会
因为你根本没有去尝试
你只是把它存放在记忆里
躺在躺椅的时候释放出来
余生中为日间电视所痴迷

字幕翻译的不知道能不能表达出杀手文森所要表达的意思,但是在这段话中多多少少能映射出我们生活中的一些事实、岁月蹉跎、十年后的今天想想以前我们的梦想是否实现少许、是否我们为了自己的梦想去做、去拼?如果我们做了,付出的是100%的努力还是偶尔的一时兴起?
看多了别人的成功、但是没有看清他们成功背后付出的努力。以前可以用10年为一个计量单位让时间去流逝,现在还能有这样的时间去浪费吗?抓住现在,just do it!

More »

简单的c++ xml解析器 tinyxml

tinyxml作为一个解析xml文件的小而精致的工具,在项目中常用到,用它的目的就是保存具有树状结构的工程配置文件。因为它的小所以用起来很方便,不占内存速度快。

TiXmlDocument doc(strPath);
doc.LoadFile(TIXML_ENCODING_LEGACY);
TiXmlElement* project = doc.FirstChildElement("project");
CString strName = project->Attribute("name")

就是这么简单!

More »

用qtcreator构建复杂应用

用qtcreator构建复杂的QT应用最终归结到用QMake构建复杂的QT应用,可能有点绕口,但是这是表现和原理的关系,这两天老纪研究了一下QMake,而能够构建复杂应用的语句只有主要的两个,一个就是TEMPLATE = subdirs, 另外一个就是include函数
可能看到这里大家还是一头雾水,但是这篇文章是给那些研究了QMake的朋友看的,如果你想构建一个由多个组件(每个组件就是一个dll)的工程A,那么每个组件(A1、A2、A3…)就需要用一个pro进行描述,怎么去组织这个工程结构呢,subdirs就派上了用场,在A目录定义一个pro文件,它只包含这样的内容即可

TEMPLATE = subdirs
CONFIG += ordered
 
SUBDIRS = A1 A2 A3 …

接下来在An的目录下定义pro文件,其内容大致如下

TEMPLATE = app
TARGET = A1.exe
SOURCES += main.cpp

TEMPLATE = lib
TARGET = A2.dll
SOURCES += a2.cpp

而include的作用就是引入在这个被包含的pri(包含文件后缀)文件中所定义的公共参数、公用函数什么的,思想和PHP的require一样,pro文件通过qmake编译时就把include进行展开而构成一个唯一描述当前工程的QMake文件
不知道说清楚了吗,反正就到这了

More »

linode长时间运行稳定

老纪2009年7月18日购买linode的vps,是那种最低配置的Linode 360,现在运行了3个网站和一个vpn,头一个月处于摸索阶段,配置、部署、再配置、在部署,直到2009年8月18日就再也没动过,到现在稳定运行了7个月,没有重启一次机,对于防火墙配置也是简单的过滤了一下,所以总体来说还是比较满意的,值得向朋友们推荐,不过linode vps还是有些贵,每个月20$,到月底时就有点割肉的感觉,呵呵。总想弄个站保持一下平衡,但是一是懒二是精力不济,所以一直没有充分利用vps的资源,以后慢慢压榨它。
贴个图为证

More »

HTML5抵挡不住的诱惑

网上看的,没想到新的标准能够实现这么美的东西
Sergey Chikuyonok 使用HTML5+Canvas整了一个让你感觉起来在影院里面看片的效果,注意,没有使用flash呦。

重要实现代码如下:

function getMidColors(side) {
var w = buffer.width,
h = buffer.height,
lamps = getOption(’lamps’),
[...]

More »

iPhone 4.0多任务手机操作系统

iphone目前的操作时任务独占,也就是不能同时运行多个任务,这样就不可能实现一边放音乐一边玩游戏等这样的功能,iphone4.0即将支持多任务处理,这无疑能够更进一步提高iphone、ipad的市场占有率。
知情人士向专门关注苹果产 品发展动向的美国科技博客网站AppleInsider透露,苹果公司已经研发出基于iPhone操作系统上的多任务处理“全面解决方案” iPhone 4.0软件。但该知情人士并未透露iPhone 4.0软件是否可以在优化资源保护及提高电池寿命方面使iPhone利用可以得到有效提高。如今iPhone上运行的iPhone 3.x软件属于完全抢占式操作系统。这种运行方式限制了应用程序在后台的执行速度。
知情人士透露,iPhone 4.0版苹果可以允许第三方程序(诸如邮件、短信、iPod、语音备忘录等)可以同时在后台运行。
在此之前,iPhone各操作系统并未提供多任务处理的主要原因在于之前版本的 iPhone操作系统未能给用户提供用户交互界面,这使得iPhone 4.0版需要增加新用户交互界面机制,使得用户不用经过太过复杂的操作就可以完成应用程序之间切换。苹果公司研发iPhone 操作系统的初衷是使得用户更加方便的使用手机,而不是将其变为个人电脑操作系统的手机版。在发行iPhone 2.0时,苹果公司称Windows Mobile中的任务管理器功能对用户来说过于复杂。iPhone 3.x操作系统在屏幕顶端增加了一项工具条,可以使得用户可以转换后台运行的程序。但iPhone 3.x仍属于完全抢占式操作,并不属于多程序同时运行的多功能同时处理方式。
另外,知情人士透露,iPhone 4.0版将增加新的图形界面切换功能。这样第三方应用程序可以在后台彼此沟通,并排列资源利用的优先次序。iPhone 和iPod 触屏被客户称为优秀的移动游戏平台的主要原因就在于其操作系统具有的单程序操作功能。在客户利用iPhone 和iPod 触屏玩游戏时,游戏程序完全占用系统资源,这使得iPhone 和iPod 触屏上的游戏可以比市场上的同类产品具有更高的可玩性。
但iPhone 4.0版在后台运行多功能处理不可避免的对电池寿命和功能提出更高的要求。所以,为iPhone提供多功能处理也给苹果公司带来了许多需要解决的“隐性” 问题。如缩短iPhone电池使用时间、消耗更多处理器资源以及应用程序运行速度更慢等等。其潜在的解决方案是削减iPhone上可运行的应用程序范围, 并将可运行程序的数量限制在电池可以承受的范围之内,并同时实现前台和后台应用程序之间的快速切换。

More »

c++中的汇编语言

好长时间没有摸汇编了,也是,现在的高级语言这么多,而且机器速度这么快,程序的开发主要面向的是业务,玩汇编这玩意的不是搞破解的就是搞安全的,不过时不时感觉一下它的魅力还是比较舒服的,汇编的最大好处就是速度快!今天验证了用汇编访问C++的实例变量的方法。
首先定义类的实例的地址,在类成员函数中就是this,如果是定义的类指针,如:A *p, 那么就是p, 如果定义的是类实例,如:A a,那么就是&a,但是这些东西在汇编中怎么体现呢,而且是一种比较通用的方法呢?举例说明

class A
{
public:
int x, y;
};
 
class B
{
int x, y;
public:
virtual void a() { printf("a: %d, %d\n", x, y); }
virtual void b() { printf("b: %d, %d\n", x, y); }
};
 
int main(int argc, char* argv[])
{
printf("Hello World!\n");
B a;
_asm {
lea ecx, [a];
mov [ecx]B.x, 20;
mov [ecx]B.y, 10;
}
a.a();
a.b();
return 0;
}

这段代码完全能正常运行,且对于B中的虚函数处理的也非常正常,为什么用包含虚函数的类呢?就是看看B.x,B.y在汇编后的偏移是否正常,是否避开了指向虚函数表的指针。
再说说在汇编中定位类实例地址的方法

在类成员函数中

_asm{
mov ecx, this;
}

类实例指针,如A *p

_asm{
mov ecx, p;
}

类实例,如A a

_asm{
lea ecx, [a];
}

汇编不是很难,了解了指令集,了解了一些规范,了解了寻址方式,基本也就对汇编掌握了十七大八了

More »

setjmp和longjmp

setjmp和longjmp以前玩C的时候看过,但是没留意,因为对他没什么需求,不过心里还是存在着一个阴影,感觉是一个很深奥的东西,今天不留意看了看,原来是个在C中实现异常处理的机制,而且估计比较轻量
大家都知道在C中对返回值进行判断我们都要用if else else if,也不知道哪个老哥说的最好不要使用goto,有时候写的东西真的是一层套一层,套到他姥姥家了,呵呵,所以有的时候适当的用goto还是可以让代码更简洁,速度也会很快的。
但是有了goto还不行,因为goto只能在函数体内使用,这样就限制了他的用途,而我们怎么才能得到C++的那种异常处理机制呢,这时候setjmp和longjmp就派上了用场,setjmp设定转跳点,其唯一参数是jmp_buf类型,保存转跳点的机器快照,当在需要从发生异常的地方回到转跳点时只需longjmp就行,其参数是不为0的任何值
一直说他们的好了,还没说坏话呢, 为什么有的人说不要C++中贸然使用他们呢,主要是因为C++是面向对象的,里面重要一点是在堆栈上分配的对象一定会析构的(除非强行杀死进程),但是在一个类中实现的东西太多了,比如内存分配,而setjmp、longjmp组合只是简单的保留转跳点信息,不做任何其他处理,所以在C++中使用他们很容易发生内出泄露等等问题,老纪写了段代码印证了这些

#include <setjmp.h>
#incude <stdlib.h>
#include <stdio.h>
 
class A {
public :
A () { printf("a\n"); }
~A() { printf("~a\n"); }
};
 
class B {
public :
B () { printf("b\n"); }
~B() { printf("~b\n"); }
};
 
int main(void)
{
jmp_buf aa;
int ii = setjmp(aa);
if (ii == 0) {
A a;
longjmp(aa, 1);
} else if (ii == 1) {
B b;
printf("ddddd\n");
longjmp(aa, 2);
} else if (ii == 2) {
printf("eeeee\n");
}
return 0;
 
}

A a;没析构
至此,对C没有什么顾忌了,呵呵

More »