Skip to content

在你心中有这样的一个人吗

在你心中有这样的一个人吗?

你们可能相爱过,你们也可能喜欢着彼此,
但是,为了什么原因你们没能在一起?
也许她为了朋友之间的义气,不能答应你。
也许为了顾及家人的意见 ,你们没有在一起。

也许为了出国深造,她没有要你等她。
也许你们相遇太早,还不懂得珍惜对方。
也许你们相遇太晚,你们身边已经有了另一个人。
也许你回头太迟,对方已不再等待。
也许你们彼此在捉摸对方的心,而迟迟无法跨出界线。

不过即使你们没在一起,你们还是保持了朋友的关系。但是你们心底清楚,对这个人,你比朋友还多了一份关心。即使不能跟她名正言顺的牵着手逛街,你们还是可以做无所不谈的朋友。她有喜欢的人,你口头上会帮她追,心里却不是很清楚你是不是真的希望她追到。

她遇到困难时,你会尽你所能的帮她,不会计较谁又欠了谁。男女朋友吃醋了,你会安抚她们说你和她只是朋友,但你心中会有那么一丝的不确定。每个人这辈子,心中都有过这幺一个特别的朋友,很矛盾的行为。一开始你不甘心只做朋友的,但久了,突然发现这样最好。
你宁愿这样关心她, 总好过你们在一起而有天会分手。
你宁愿做她的朋友,彼此不会吃醋,才可以真的无所不谈。
特别是这样,你还是知道,她永远会关心你的。做不成男女朋友,当她那个特别的朋友,有什么不好呢?

你心中的这个特别的朋友…? 是谁呢?

很多的感情,都因为一厢情愿,最后连朋友都当不成了,常常觉得惋惜,可惜一些本来很好的友情,最后却因为对方的一句喜欢你,如果你没有反应,这一段友情似乎也难以维持下去,这也难怪有些人会因此不肯踏出这一步。

因为这就像是一场赌注,表白了之后不是成了男女朋友,要不就连朋友都当不成了。有些事不是你能预料的,或许对方不在意,你们还可以是朋友,但却已经不如从前的好。也是可惜,也是遗憾!但还有没有可能是另一种情况,你可能永远都不甘心只是朋友. . . . .

培养自信,重新开始

1. 培养耐心

自信确实需要培养,所谓的“培养”,即是说并非朝夕可达。所以,培养自信的最重要前提就是要具备耐心,如若缺乏耐心就要培养耐心。没有耐心的话就什么都做不成,更别提什么“自信了”。有所成就,就会伴随着自信的增长,而一事无成的人穿得再整齐也只不过草包一个。

2. 习得并精通一种技能

具 备学习能力的人通常都很自信,反过来也一样,真正自信的人通常是因为相信自己的学习能力。所以面对挑战的时候他们不会怕,不会心虚,因为他们知道“大不了 去学么”。自学能力的基础是耐心,而习得任何一种技能都会让人更加懂得耐心的重要,并且同时因为具备耐心与学习能力而更加自信。只要花时间真正精通了一种 技能,那么学会其他一种技能的时候就会变得更轻松——这是良性循环。

3. 相信积累的力量

再 大的石头也无法阻挡种子发芽,只因为种子一旦开始发芽,那细胞的分裂尽管速度不快但却不见天日永不终止。滴水可以穿石的道理谁都懂但又好像谁都不相信—— 处于起点的人就好像是一粒细胞或者一滴水,但大多数人却误以为或者希望自己在起点上就强大锋利犹如一束激光,但这不现实。要通过学习培养耐心,运用耐心去 等待长期积累之后可以获得的难以想象的好处与力量。

4. 了解自己的局限

没 有人无所不能。就算拥有真正强大学习能力的人也无法做到无所不能——因为时间不够。有些领域确实必需天分。在自己确实不擅长的地方该自卑就要自卑——这没 有什么不好意思的。该自卑的时候不自卑,就多了一个心理负担——并且还是永远摆脱不掉的负担,最终,肯定会拖累自信。凡事儿做得好必然容易自信,做得不好 就很难自信,但是还没上阵呢,就背着一个又一个的包袱,能走多远?能做多好?

5. 凡事儿都要提前做足功课

大 声说话也好,穿着正式也罢,最多只能让一个人“显得”自信,而非真正自信。“坐在第一排”可能是因为近视,“快速走路”往往是因为时间观念不强——这些都 与自信没关系。做任何事情,提前做足了功课,想不自信都难。自信不等于自以为是,自以为是的人最终都会被现实砸烂。中国人说“成事在天,谋事在人”,西方 人说“上帝的归上帝,凯撒的归凯撒”,某个层面上都是一回事儿:不要理会运气(该来的时候它自然会来),重要的是专心做好功课。

6. 注意细节

俗 话说,“行家看门道,外行看热闹”。当我们关注一样东西足够久的之后,就会发现自己犹如“开了天眼”一般,能够看到的,看清楚的越来越多。在自己必须做的 事情上,一定要保持专注;不仅要专注,还要专注很长时间。只有这样,才有能力看到更多的细节,才有能力做足功课,才有能力处变不惊。很多时候,所谓“成功 ”只不过是一个中间状态,“更大的成功”才是挑战。忽视细节的人都并非故意,只是因为功夫未到;功夫未到,“中间状态”之后就是更大的失败。

7. 培养从容的态度

走 路慢一点,姿态自然从容;说话慢一点,声音小一点别人也能挺清楚。但这些都是形式而已,关键在于脑子不能慢。动作太快往往只是因为脑子太慢所以想得太少不 够周到。有演讲经验的人都知道,说话太快实际上更可能是因为紧张。越有能力的人越容易从容,因为他们的能力足以使他们掌控局面。从容不是能够模仿的,是养 出来的——靠实力。

8. 关心身边的人

谁 都需要身边的人的支持与关心,正如身边的人也需要他支持、他关心一样。与很多人相信的相反,朋友太多,不见得一定是好事儿。因为关心一个人支持一个人都是 需要花费时间,而每个人不可逾越的终极限制只有一样东西——时间。小心选择朋友,因为你将与他们分享你的生命。没有这样的态度,就不会有真正的朋友。有那 么三两个真正朋友的人,都会比较自信。

9. 不要轻易追求完美

完 美总是好的,但并不总是能够做到。事事追求完美的下场只有一个:标准越来越低。生活着这样的例子比比皆是,很多圣男圣女(剩男剩女)就是这样炼成的。学会 在这个不完美的世界里不完美地生存,是一种难得的智慧。深刻理解“不完美才是常态”的人才可能做到“不会无谓地自卑”。凭借耐心,相信积累,再加上正常的 智商,就算做不到最好,也能做到更好,何必过分强求?

10. 尽量独立,承担必要的责任

有 位哲人这样说过:“一个人的幸福程度取决与他能够在多大程度上独立于这个世界”。这句话包含着深刻的智慧。很多的时候,独立意味着完整地承担必要的责任; 能够运用自己的能力承担必要责任的人必然相对更加自信。一个人不能够独立,往往就会沦为他人的负担,没有人不讨厌负担,而被讨厌的人怎么可能自信呢?自信 的人都知道一个简单的道理,自己是自己,别人是别人;自己的事情自己完成,自己的责任自己承担。

gzip 与 deflate 续

新公司上班,公司在双井地铁站附近的九龙花园居民区里,住则住在百子湾家园,一个只有一条路通向外面的封闭地方。每天上下班由小蔡接送,除了车子不密封,早晚稍微有点冷以外,一切都还好。

继续为 nginx 增加 deflate 压缩支持。公司居然用的是 nginx 0.7.33 的最新开发版本,虽然不时的有 502 bad gateway 出现,但老高不以为然。打开0.7.33 代码一看,比 0.6 版本的整洁了许多,gzip 添加头,尾的动作都被封装到了单独的函数中了,再也不是一个大函数从头写到尾了,有进步。

起初是想为 deflate 压缩单独写一个与 gzip 平行的模块,拿原先 gzip 模块的 c 文件(src/http/modules/ngx_http_gzip_filter_module.c)一通 “搜索”-“替换”,编译通过了,但新模块死活没有被调用。想想也是,http 请求头的处理不在这个 c 文件里面,只改这个文件,当然不会有效果了。

接下来就把原来的 gzip c 文件一通猛改,添加头的函数直接 return,添加尾的函数也去掉具体添加的动作,最后再把 Content-Encoding 改过来,一测试,呵呵,还真的省下来 18 个字节!

但这样以来 gzip 就不支持了。更严重的是,如果(虽然可能性比较小),一个客户端只支持 gzip,不支持 deflate,那么它就无法解析请求的结果。在查看 src/http/ngx_http_core_module.c 里的 ngx_http_gzip_ok 函数的时候,终于发现了对于客户端提交的 header 里面的 accept encoding 的判断处理:

ngx_strcasestrn(r->headers_in.accept_encoding->value.data,
“gzip”, 4 – 1) == NULL

而 ngx_http_request_t *r 几乎在每一个函数里都是可用的。为了尽量减少改动的文件数量和代码处,也是为了尽量保险起见,我选择了在 src/http/modules/ngx_http_gzip_filter_module.c 文件里每一个改动的地方都做一次这样的判断:客户端是否支持 deflate,如果支持,则按 deflate 的做法进行修改,如果不支持,则保持原来 gzip 的样子。

编译,测试,ubuntu 8.10 + firefox 3.0.4 ,httpfox 下测试通过。

patch: http://code.google.com/p/fulin/source/browse/C%2B%2B/nginx/nginx0.7.33.deflate.patch

效果:
浏览器 Accept-Encoding:
gzip:使用 gzip
deflate:使用 deflate
gzip,deflate:使用 deflate
无:不压缩

nginx 版本:nginx-0.7.33
patch 使用方法:将 patch 文件放置于与 nginx-0.7.33 目录同级的地方,使用命令:
patch -p0 < nginx.deflate.patch
然后按正常流程 configure,make,make install

PS. 元宵节,外面鞭炮此起彼伏,而屋里此时就我一个人,alone,lonely。春节结束了,新的,漫长的一年又开始了。祝所有我爱的和爱我的人节日快乐!

gzip 与 deflate

新东家还没有报道,就安排先做一个小任务:把 nginx 的 gzip 换成 deflate ,问为什么,老大说能省 18 个字节。

在baidu上搜了好久,搜到的中文基本上都是讲 apache 的 gzip(apache 1.3) 和 deflate(apache 2.x)的配置的,仅有的几个跟 nginx 相关的,也逃不出配置文件的范畴。至于原理,算法等等,只有去 Google 英文资料了。

换了关键词,直接搜 zlib ,终于找到一些有用的东西,在 http://www.cppblog.com/jinq0123/archive/2007/07/09/HttpCompressConv.html 处看到这样一段话:

deflate与gzip解压的代码几乎相同,应该可以合成一块代码。
区别仅有:

  1. deflate使用inflateInit(),而gzip使用inflateInit2()进行初始化,比 inflateInit()多一个参数: -MAX_WBITS,表示处理raw deflate数据。因为gzip数据中的zlib压缩数据块没有zlib header的两个字节。使用inflateInit2时要求zlib库忽略zlib header。在zlib手册中要求windowBits为8..15,但是实际上其它范围的数据有特殊作用,见zlib.h中的注释,如负数表示raw deflate。
  2. Apache的deflate变种可能也没有zlib header,需要添加假头后处理。即MS的错误deflate (raw deflate).zlib头第1字节一般是0×78, 第2字节与第一字节合起来的双字节应能被31整除,详见rfc1950。例如Firefox的zlib假头为0×7801,python zlib.compress()结果头部为0x789c。

再去检查 zlib.h 中的注释说明,在 zlib-1.2.3/zlib.h Line 500 的地方发现这样一段话:

The windowBits parameter is the base two logarithm of the window size
(the size of the history buffer). It should be in the range 8..15 for this
version of the library. Larger values of this parameter result in better
compression at the expense of memory usage. The default value is 15 if
deflateInit is used instead.

windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
determines the window size. deflate() will then generate raw deflate data
with no zlib header or trailer, and will not compute an adler32 check value.

windowBits can also be greater than 15 for optional gzip encoding. Add
16 to windowBits to write a simple gzip header and trailer around the
compressed data instead of a zlib wrapper. The gzip header will have no
file name, no extra data, no comment, no modification time (set to zero),
no header crc, and the operating system will be set to 255 (unknown).  If a
gzip stream is being written, strm->adler is a crc32 instead of an adler32.

回过头来看 nginx 和 apache 的实现:

 nginx-0.6.34/src/http/modules/ngx_http_gzip_filter_module.c Line 335:

rc = deflateInit2(&ctx->zstream, (int) conf->level, Z_DEFLATED,
-wbits, memlevel, Z_DEFAULT_STRATEGY);

httpd-2.0.63/modules/filters/mod_deflate.c Line 374:

zRC = deflateInit2(&ctx->stream, c->compressionlevel, Z_DEFLATED,
c->windowSize, c->memlevel,
Z_DEFAULT_STRATEGY);

(Line 153: c->windowSize = i * -1; )

也就是说,nginx 和 apache 在程序里处理的都是 raw deflate data ,windowBits 都是负数,那为什么 Content-Encoding 都写的是 gzip 而不是 deflate 呢?

在 apache 的 mod_deflate.c 里,首先发现了这样一个写入 gzip header 的动作:

       /* RFC 1952 Section 2.3 dictates the gzip header:
*
* +—+—+—+—+—+—+—+—+—+—+
* |ID1|ID2|CM |FLG|     MTIME     |XFL|OS |
* +—+—+—+—+—+—+—+—+—+—+
*
* If we wish to populate in MTIME (as hinted in RFC 1952), do:
* putLong(date_array, apr_time_now() / APR_USEC_PER_SEC);
* where date_array is a char[4] and then print date_array in the
* MTIME position.  WARNING: ENDIANNESS ISSUE HERE.
*/
buf = apr_psprintf(r->pool, “%c%c%c%c%c%c%c%c%c%c”, deflate_magic[0],
deflate_magic[1], Z_DEFLATED, 0 /* flags */,
0, 0, 0, 0 /* 4 chars for mtime */,
0 /* xflags */, OS_CODE);

deflate_magic 是这样定义的:

/* magic header */
static char deflate_magic[2] = { ‘\037′, ‘\213′ };

而 OS_CODE 是在 zutil.h 里定义的,AMIGA 是 1,VAXC 是 2,OS2 是 6,WIN32 是 11,默认 unix 是 3(从这个顺序也可以看出操作系统的发展历史了)

数一下,10个字节,再联想到老大说的 18 个字节,仔细找找,终于在 Line 462 里发现这样一个附加 tail 的动作:

buf = apr_palloc(r->pool, 8);
putLong((unsigned char *)&buf[0], ctx->crc);
putLong((unsigned char *)&buf[4], ctx->stream.total_in);

b = apr_bucket_pool_create(buf, 8, r->pool, f->c->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(ctx->bb, b);

不多不少,8个字节。10个字节的头加上 8 个字节的尾巴,就是老大说的多出来的 18 个字节。apache 调用 zlib 的接口产生了 raw defalte 的数据,然后手工的添加了 gzip 头和尾。

同样的,在 nginx 的 ngx_http_gzip_filter_module.c 首先在 Line 179看到 Igor Sysoev 同学很不负责任的定义了这样一个 gzip header:

static u_char  gzheader[10] = { 0x1f, 0x8b, Z_DEFLATED, 0, 0, 0, 0, 0, 0, 3 };

仔细看最后一位!居然直接写了一个 3 !这会不会导致 windows 上编译的 nginx 在输出 gzip 压缩过的页面的时候,客户端解压不正常?回头有空再去看看 zlib 里关于解压的算法代码中,对于这个 OS_CODE 是怎么处理的吧。

继续寻找,在 Line 351 的地方,作者还写了一段注释(虽然我越看越不明白他在试图表达什么意思):

        b->memory = 1;
b->pos = gzheader;
b->last = b->pos + 10;

out.buf = b;
out.next = NULL;

/*
* We pass the gzheader to the next filter now to avoid its linking
* to the ctx->busy chain.  zlib does not usually output the compressed
* data in the initial iterations, so the gzheader that was linked
* to the ctx->busy chain would be flushed by ngx_http_write_filter().
*/

大致是说把 gzheader 传给下一个 filter 去处理,这个 filter 只出来 raw deflate 数据,以及附加的 tail 吧。在 Line 605 的地方:

#if (NGX_HAVE_LITTLE_ENDIAN && NGX_HAVE_NONALIGNED)

trailer->crc32 = ctx->crc32;
trailer->zlen = ctx->zin;

#else
trailer->crc32[0] = (u_char) (ctx->crc32 & 0xff);
trailer->crc32[1] = (u_char) ((ctx->crc32 >> 8) & 0xff);
trailer->crc32[2] = (u_char) ((ctx->crc32 >> 16) & 0xff);
trailer->crc32[3] = (u_char) ((ctx->crc32 >> 24) & 0xff);

trailer->zlen[0] = (u_char) (ctx->zin & 0xff);
trailer->zlen[1] = (u_char) ((ctx->zin >> 8) & 0xff);
trailer->zlen[2] = (u_char) ((ctx->zin >> 16) & 0xff);
trailer->zlen[3] = (u_char) ((ctx->zin >> 24) & 0xff);
#endif

幸亏有 IBM MOTOROLA  们造了 Big Endian 机器,这样一来,这段代码的意思再明白不过了。

连上网搜资料加读代码,一共花了大约3个小时,到现在,大约清楚了这么几个问题:

  1. deflate 是最基础的算法,在 zlib 里面有实现
  2. gzip 在 deflate 的 raw data 前增加了 10 个字节的 gzheader,尾部添加了 8 个字节的校验字节(可选 crc32 和 adler32) 和长度标识字节,gzip 的 magic number 是 0x1f, 0x8b
  3. zlib 自己也有 header 和尾部校验的数据,如果使用 deflateInit 而不是 deflateInit2,或者 windowBits 设置为正数8~15的话
  4. zlib windowBits 设置为 16 第4位设置为1(即在原来值的基础上加16,感谢 antonio 同学的更正)的时候,zlib 自己会产生一个 gzip 的头和尾,这种情况下 OS_CODE 被设置为 255(unknown),尾部校验使用 crc32 。问题是,既然 zlib 本身就提供了这种功能,为什么 apache 和 nginx 不用,反而都选择手工添加呢?
  5. 为 nginx 添加 deflate 支持,只需要把输出中的头,尾去掉,并把 Content-Encoding 改为 deflate 即可。18 个字节,就这样省下来了。

参考资料:

PS,在腾讯最后一天上班,并祝所有爱我的和我爱的人小年快乐!大年也快乐!

我的2008

月圆了,戊子年最后一次月圆,鼠年最后一次月圆。帽子说10号晚上7点的月亮是12年来离地球最近的一次,但抬头看看,似乎也没有比平常更大或更亮。

 许是每年都回家过年的缘故,从来都以为春节后才是新年。至于元旦,只是一个普通的节日罢了。所以所有的回顾,展望,总是要等到临回家了,才想起来写。

 10号,11号考研考试。帽子考的似乎还不错,打电话过去把她从美梦中吵醒,她居然还笑着,难道是梦见自己被录取了,还是梦见大年夜里好吃的了?唐智星同学的情况就不是那么乐观了,已经在开始准备简历,准备找工作,另外还要抽空准备毕业论文。旭林还没有说,不过估计情况也不咋的。

 见了君正,说着别扭的土话,一起打乒乓球。掐指算算,三年没有打乒乓球了,如果再算上跟君正打,那居然是8年以前的事情了。8年,抗战都胜利了,在自己身上,居然是如此的一晃而逝。云也来了,打台球,shopping,大约是最后一次了罢。

确定了20号离职,然后回家过年,年后直接回北京。又一次的动荡也可以算是尘埃落定了。很多东西,包括机会,都是失去了才知道应该珍惜。新浪的薪资很低,可是工作环境,氛围,其实都挺好的。腾讯的薪资很高,可是工作内容不对口,深圳环境不喜欢,部门的氛围也不太适合自己。手机之家又会是什么样子呢? Tom 又会是什么样子呢?进去了,或者离开时,才会看得清吧。

 见到君正,又想起了初中时曾有过的理想。那时年少,什么都可以想。可是现在,却什么都没有实现,甚至都不敢想了。我究竟想要什么,我今年要达到什么目标?明年呢?五年后的我希望成为一个什么样子的人?十年后的我又希望有哪些成就?我的未来,在哪里?

2009的每一天,都是新的。 所以,每一天,都要过的快乐,充实。先过好眼前的每一天,再去想那些年少时立下的远大的理想吧。

新年第一帖:扫盲!

回 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!!!

囙 拼音:yīn 古同“因”。

囜 拼音:nín ◎ 贤。

囝 拼音:jiǎn nān ◎ 方言,儿子。◎ 同“囡”。

囟 拼音:xìn ◎ 〔~门〕婴儿头顶骨未合缝的地方。亦称“囟脑门儿”、“顶门儿”。

因 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

囡 拼音:nān  ◎ 方言,小孩儿:小~。阿~。~~(对小孩儿的亲热称呼)。

団 拼音:tuán ◎ 同“团”(日本汉字)。BS ~~~小日本

囤 拼音:dùn tún ◎ 用竹篾、荆条等编织成的或用席箔等围成的存放粮食等农产品的器物

囥 拼音:kàng ◎ 藏。

囦 拼音:yuān ◎ 古同“渊”。

囧 jiǒng ◎ 囧囧:明亮貌。江淹《孙廷尉绰杂述》诗:“囧囧秋月明”。

囨 拼音:piān ◎ 唾弃和斥责声,相当于“呸”。

囩 拼音:yùn yún ◎ 回旋。◎ 古代土地面积单位,十二顷。

囱 拼音:chuāng ◎ 炉灶出烟的通路。 还有一个读法,不认识可以去死了。

囫 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

囮 拼音:é yóu ◎ 用来诱捕同类鸟的鸟,称“囮子”。◎ 媒介。◎ 化,化生。

国 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

困 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

囲 拼音:wéi ◎ 古同“围”。

図 拼音:tú ◎ 同“图”(日本汉字)。

囵 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

囶 囶 拼音:guó ◎ 古同“国”。

囷 拼音:qūn ◎ 古代一种圆形谷仓◎ 样子像囷仓的事物◎ 积聚;聚拢。

囸 拼音:rì◎ 古同“日”。

囹 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

囻 拼音:guó ◎ 古同“国”。

囼 拼音:tāi ◎ 古同“胎”。

图 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

囿 拼音:yòu◎ 养动物的园子◎ 局限,被限制◎ 借指事物萃聚之处

圀 拼音:guó◎ 古同“国”。

圁 拼音:yín ◎ 〔~水〕古水名,上游即今中国内蒙古自治区的乌兰木伦河,下游即今中国陕西省的窟野河。

圂 拼音:hùn hǔn ◎ 同“溷”。 溷 拼音:hún hùn hǔn 

圃 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

圄 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

圅 拼音:hán ◎ 同“函”。

圆 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

圈 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

圉 拼音:yǔ ◎ 养马的地方◎ 边陲◎ 同“圄”。◎ 古代乐器名。

圊 拼音:qīng◎ 厕所

国 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

圌 拼音:chuán chuí◎ 一种类似囤的盛粮器具。◎ 〔~山〕山名,在中国江苏省镇江市东。

围 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

圎 拼音:yuán ◎ 古同“圆”。

圏 拼音:quān ◎ 同“圈”(日本汉字)。

圐 拼音:kū ◎ 〔~圙〕蒙古语“库伦”的旧译,指围起来的草场,多用于村镇名。

圑 拼音:fù pǔ ◎ 古同“圃”。

园 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

圆 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

圔 拼音:è yà ◎ 〔窳(yǔ ㄩˇ)~〕(音乐声)低回。

圕 拼音:tuān◎ “图书馆”三字的缩写。

图 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

圗 拼音:tú ◎ 古同“图”。

团 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

圙 拼音:lüè ◎ 〔圐~〕见“圐”。

圚 拼音:huì ◎ 门闠◎ 圈套

圛 拼音:yì ◎ (云气)连接不断。

圜 拼音:huán yuán ◎ 围绕◎ 同“圆”。◎ 指天体

圝 拼音:luán◎ 古同“圞”。

圞 luán ◎ 〔团~〕a.形容圆,如“明月~~”;b.团聚;团圆,如“可唤儿辈来,作~~之会。”

囚 不认识这个字的找BZ要板砖,使劲往自己脑袋上砸!

来源:太极刘的博客 http://liu123liu123.home.news.cn/blog/a/01010000CDAE05168CC3DE0A.html

2008年中國大事回顧

转自  加成社區 (哥哥工作的地方) http://jiachen.kmip.net/discuz/viewthread.php?tid=1970
1.元月全国性雪灾,造成107人死亡,8人失踪

2.西藏314事件

3. 手足口病:3-5月,全国多省区出现手足口病疫情(截止到5月10日,已有34人死亡)

4. 火车相撞:4月28日胶济铁路火车相撞 ,72人死亡

5.CPI高涨,4月份8.5%

6. 汶川地震5月12日四川汶川发生7.8级强震 8万人死亡

7.人民币汇率“破七”“奔六”: 2008年5月12日银行间外汇市场美元等货币对人民币汇率的中间价为:1美元对人民币6.9820元

8.南方水災:5月-8月,南方各省大水, 截止到8月1日, 436人死亡,失踪113人

9. 许霆案:5月23日,许霆案维持原判(5年)

10. 翁安事件:6月28日,贵州省翁安县1万多人聚集闹事,发生打、砸、抢、烧事件,县委、县政府、县公安局办公楼和10多辆警车被烧毁,150多人受伤。背后深层次的原因是瓮安县在矿产资源开发,移民安置,建筑拆迁等工作中没侵犯群众利益

11.楊佳襲警:7月1日,一名北京来沪无业人员突然持刀闯入闸北区一综合办公楼内,连续捅伤多名公安民警和一名保安,造成5名民警死亡,4人受伤。

12.中国金融第一案: 7月8日,海南华银金融巨案主人公石长雪贪污公款2.6亿元,挪用公款近1.2亿元,另伪造金融凭证企图诈骗央行14亿元,非法集资24亿元,却只判死缓,创造了“贪官不死”与司法量刑“通货膨胀”的最新记录

13. 李家洼矿難:7月14日,河北省蔚县李家洼煤矿新井发生特别重大炸药燃烧爆炸,死亡50人。当地政府瞒报2个月,

14.昆明“7•21爆炸案”:两起爆炸案共造成3死14伤

15.北京奧運:8月中国举办奥运,4月火炬在国外(主要是法国)传递遭到破坏,4月15日国内爱国人士掀起抵制法国家乐福运动. 而本届奥运会,中国代表团取得了51枚金牌、21枚银牌、28枚铜牌(共100枚奖牌)的优异成绩,第一次名列奥运会金牌榜首位

16. 喀什袭警:8月4日喀什市的暴力恐怖袭警事件。致15人死亡

17. 三鹿奶粉事件:9月份開始的三鹿奶粉事件, 至今异常的患儿已達29万余人

18.股市暴跌:9月17跌破2000点

19. 襄汾溃坝:9月8日,山西襄汾县新塔矿业公司发生特大矿库溃坝责任事故,254人死亡。

20.深圳火灾。9月20日,深圳龙岗区舞王俱乐部发生火灾,造成43人死亡。

21.鹤岗煤矿火灾。9月20日,黑龙江省鹤岗市富华煤矿发生火灾,31人死亡

22. 登封“9 .21”矿难。9月21日,河南省登封市发生矿难,37人死亡

23.神七飞天:神舟七号飞船9月25日发射成功. 翟志刚完成太空行走.

24.海南霍乱。10月18日起,海南省出现30例霍乱病例,疑似病例300人,一名女童死亡。绝迹多年的霍乱疫情再次在中国出现。

25. 广元柑橘生蛆事件: 10月20日四川广元发生柑橘生蛆事伯,橘农损失可能高达15亿元

26. 深圳高官门事件: 10月29日深圳海事局党组书记、副局长林嘉祥将一名女童拖进洗手间内猥亵。当女孩父母找到该男子讲理时,男子竟叫嚣:“我是交通部派来的,级别和你们市长一样高,敢跟我斗!你们这些人算个屁呀!”案件最终以高官无罪告终.

27. 出租车罢运:11月3日重庆市出租车集体罢运:政府不作为,百姓无奈何. 事件之后,甘肃永登,海南三亚,广州汕头等地也相继出现出租车停运事件。

28. 校园火灾:11月14日6时左右,上海商学院女生宿舍确实发生火灾。4名女学生从6楼跳下逃生,当场身亡,酿成近年来最为惨烈的校园事故

29.同三公路交通事故:11月15日,同江至三亚高速公路哈尔滨依兰段发生11人死亡、39人受伤的重大交通事故。

30.杭州地铁塌陷: (同在11月15日)遇难人员已达7人,另有14人失踪。

31.“虎照事件”尘埃落定: 11月17日“华南虎”假照案二审判决周正龙有期徒刑两年六个月,缓刑考验期3年

32. 七台河“11 .30”矿难:11月30日,黑龙江省七台河市新兴区昌隆煤矿發生瓦斯爆炸事故,15名工人遇难。在救援过程中,发生大面积冒顶次生事故,又造成3名救护队员遇难死亡。

33.新疆特大交通事故:12月2日,新疆库车县境内发生一起特大交通事故,已造成22人死亡,

34.两岸大三通:12月15日

35.大熊猫“团团”、“圆圆”赴台:12月23日.

沉默

不知道那里是疲累的尽头
不知道有没有离开的时候
不知道为什麽忙碌的追求为了什麽理由
谁知道有什麽成就会不朽
谁知道有什麽爱情最温柔
谁知道拥有了这一切算不算梦寐以求
只知道不开心忍不住流泪
只知道不惬意免不了喝酒
不知道一个人这麽样算不算无药可救
我知道迷茫的脆弱的烦恼的寂寞的压抑的感受谁都有
不知道是不是只有我痛苦的矛盾的独自承受
明知到放弃了才想保留
明知到过去了才要补救
我知道满足的快乐的完美的依恋的事情都难以长久
告诉我是不是每个人都看不透
谁能够?

生命中,不断地有人离开或进入。于是,看见的,看不见的;记住的,遗忘了的。生命中,不断地有得到和失落。于是,看不见的,看见了;遗忘的,记住了。然而,看不见的,是不是就等于不存在?记住的,是不是永远不会消失?我们确实活得艰难,一要承受种种外部的压力,更要面对自己内心的困惑。在苦苦挣扎中,如果能有人投以理解的目光,我们就会感到一种生命的暖意,或许仅有短暂的一瞥,就足以让我们感恩不已。

[C/C++]指针详解

复杂数据类型与指针

一、复杂类型说明

要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:

从变量名处起,根据运算符优先级结合,一步一步分析.

下面让我们先从简单的类型开始慢慢分析吧:

int p; //这是一个普通的整型变量

int *p; //首先从P 处开始,先与*结合,所以说明P 是一

//个指针,然后再与int 结合,说明指针所指向

//的内容的类型为int 型.所以P 是一个返回整

//型数据的指针

int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数

//组,然后与int 结合,说明数组里的元素是整

//型的,所以P 是一个由整型数据组成的数组

int *p[3]; //首先从P 处开始,先与[]结合,因为其优先级

//比*高,所以P 是一个数组,然后再与*结合,说明

//数组里的元素是指针类型,然后再与int 结合,

//说明指针所指向的内容的类型是整型的,所以

//P 是一个由返回整型数据的指针所组成的数组

int (*p)[3]; //首先从P 处开始,先与*结合,说明P 是一个指针

//然后再与[]结合(与”()”这步可以忽略,只是为

//了改变优先级),说明指针所指向的内容是一个

//数组,然后再与int 结合,说明数组里的元素是

//整型的.所以P 是一个指向由整型数据组成的数

//组的指针

int **p; //首先从P 开始,先与*结合,说是P 是一个指针,然

//后再与*结合,说明指针所指向的元素是指针,然

//后再与int 结合,说明该指针所指向的元素是整

//型数据.由于二级指针以及更高级的指针极少用

//在复杂的类型中,所以后面更复杂的类型我们就

//不考虑多级指针了,最多只考虑一级指针.

int p(int); //从P 处起,先与()结合,说明P 是一个函数,然后进入

//()里分析,说明该函数有一个整型变量的参数

//然后再与外面的int 结合,说明函数的返回值是

//一个整型数据

Int (*p)(int); //从P 处开始,先与指针结合,说明P 是一个指针,然后与

//()结合,说明指针指向的是一个函数,然后再与()里的

//int 结合,说明函数有一个int 型的参数,再与最外层的

//int 结合,说明函数的返回类型是整型,所以P 是一个指

//向有一个整型参数且返回类型为整型的函数的指针

int *(*p(int))[3]; //可以先跳过,不看这个类型,过于复杂

//从P 开始,先与()结合,说明P 是一个函数,然后进

//入()里面,与int 结合,说明函数有一个整型变量

//参数,然后再与外面的*结合,说明函数返回的是

//一个指针,,然后到最外面一层,先与[]结合,说明

//返回的指针指向的是一个数组,然后再与*结合,说

//明数组里的元素是指针,然后再与int 结合,说明指

//针指向的内容是整型数据.所以P 是一个参数为一个

//整数据且返回一个指向由整型指针变量组成的数组

//的指针变量的函数.

说到这里也就差不多了,我们的任务也就这么多,理解了这几个类型,其它的类型对我们来说也是小菜了,不过我们一般不会用太复杂的类型,那样会大大减小程序的可读性,请慎用,这上面的几种类型已经足够我们用了.

 

指针简析:

 

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。让我们分别说明。

先声明几个指针放着做例子:

例一:

(1)int*ptr;

(2)char*ptr;

(3)int**ptr;

(4)int(*ptr)[3];

(5)int*(*ptr)[4];

1.指针的类型

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:

(1)int*ptr;//指针的类型是int*

(2)char*ptr;//指针的类型是char*

(3)int**ptr;//指针的类型是int**

(4)int(*ptr)[3];//指针的类型是int(*)[3]

(5)int*(*ptr)[4];//指针的类型是int*(*)[4]

怎么样?找出指针的类型的方法是不是很简单?

2.指针所指向的类型

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:

(1)int*ptr; //指针所指向的类型是int

(2)char*ptr; //指针所指向的的类型是char

(3)int**ptr; //指针所指向的的类型是int*

(4)int(*ptr)[3]; //指针所指向的的类型是int()[3]

(5)int*(*ptr)[4]; //指针所指向的的类型是int*()[4]

在指针的算术运算中,指针所指向的类型有很大的作用。指针的类型 (即指针本身的类型)和指针所指向的类型是两个概念。当你对C 越来越熟悉时,你会发现,把与指针搅和在一起的”类型”这个概念分成”指针的类型”和”指针所指向的类型”两个概念,是精通指针的关键点之一。我看了不少 书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起书来前后矛盾,越看越糊涂。

3.指针的值—-或者叫指针所指向的内存区或地址

指针的值是指针本身存储的数值,这个值将被编译器当作一个地址, 而不是一个一般的数值。在32 位程序里,所有类型的指针的值都是一个32 位整数,因为32 位程序里内存地址全都是32 位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX 为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。指针所指向的内存区和指针所指向的类型是两个 完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。以后,每遇到一个指 针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里?(重点注意)

4 指针本身所占据的内存区

指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32 位平台里,指针本身占据了4 个字节的长度。指针本身占据的内存这个概念在判断一个指针表达式(后面会解释)是否是左值时很有用。

 

指针运算与运算符

 

一、指针的算术运算
指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的,以单元为单位。例如:
例二:
char a[20];
int *ptr=(int *)a; //
强制类型转换并不会改变a 的类型
ptr++;

在上例中,指针ptr 的类型是int*,它指向的类型是int,它被初始化为指向整型变量a。接下来的第3 句中,指针ptr 被加了1,编译器是这样处理的:它把指针ptr 的值加上了sizeof(int),在32 位程序中,是被加上了4,因为在32 位程序中,int 占4 个字节。由于地址是用字节做单位的,故ptr 所指向的地址由原来的变量a 的地址向高地址方向增加了4 个字节。由于char 类型的长度是一个字节,所以,原来ptr 是指向数组a 的第0 号元开始的四个字节,此时指向了数组a 中从第4 号单元开始的四个字节。我们可以用一个指针和一个循环来遍历一个数组,看例子:
例三:
int array[20]={0};
int *ptr=array;
for(i=0;i<20;i++)
{
(*ptr)++;
ptr++;
}

这个例子将整型数组中各个单元的值加1。由于每次循环都将指针ptr加1 个单元,所以每次循环都能访问数组的下一个单元。
再看例子:
例四:
char a[20]=”You_are_a_girl”;
int *ptr=(int *)a;
ptr+=5;

在这个例子中,ptr 被加上了5,编译器是这样处理的:将指针ptr 的值加上5 乘sizeof(int),在32 位程序中就是加上了5 乘4=20。由于地址的单位是字节,故现在的ptr 所指向的地址比起加5 后的ptr 所指向的地址来说,向高地址方向移动了20 个字节。在这个例子中,没加5 前的ptr 指向数组a 的第0 号单元开始的四个字节,加5 后,ptr 已经指向了数组a 的
合法范围之外了。虽然这种情况在应用上会出问题,但在语法上却是可以的。这也体现出了指针的灵活性。如果上例中,ptr 是被减去5,那么处理过程大同小异,只不过ptr 的值是被减去5 乘sizeof(int),新的ptr 指向的地址将比原来的ptr 所指向的地址向低地址方向移动了20 个字节。
下面请允许我再举一个例子:(一个误区)
例五:
#include


int main()
{
char a[20]=” You_are_a_girl”;
char *p=a;
char **ptr=&p;
//printf(”p=%d\n”,p);
//printf(”ptr=%d\n”,ptr);
//printf(”*ptr=%d\n”,*ptr);
printf(”**ptr=%c\n”,**ptr);
ptr++;
//printf(”ptr=%d\n”,ptr);
//printf(”*ptr=%d\n”,*ptr);
printf(”**ptr=%c\n”,**ptr);
}

误区一、输出答案为Y 和o
误解:ptr 是一个char 的二级指针,当执行ptr++;时,会使指针加一个sizeof(char),所以输出如上结果,这个可能只是少部分人的结果.

误区二、输出答案为Y 和a
误解:ptr 指向的是一个char *类型,当执行ptr++;时,会使指针加一个sizeof(char *)(有可能会有人认为这个值为1,那就会得到误区一的答案,这个值应该是4,参考前面内容), 即&p+4; 那进行一次取值运算不就指向数组中的第五个元素了吗?那输出的结果不就是数组中第五个元素了吗?答案是否定的.正解: ptr 的类型是char **,指向的类型是一个char *类型,该指向的
地址就是p的地址(&p),当执行ptr++;时,会使指针加一个sizeof(char*),即&p+4;那*(&p+4)指向哪呢,这个你去问上帝吧,或者他会告诉你在哪?所以最后的输出会是一个随机的值,或许是一个非法操作.
总结一下:
一个指针ptrold 加(减)一个整数n 后,结果是一个新的指针ptrnew,ptrnew 的类型和ptrold 的类型相同,ptrnew 所指向的类型和ptrold所指向的类型也相同。ptrnew 的值将比ptrold 的值增加(减少)了n 乘sizeof(ptrold 所指向的类型)个字节。就是说,ptrnew 所指向的内存区将比ptrold 所指向的内存区向高(低)地址方向移动了n 乘sizeof(ptrold 所指向的类型)个字节。

指针和指针进行加减:
两个指针不能进行加法运算,这是非法操作,因为进行加法后,得到的结果指向一个不知所向的地方,而且毫无意义。两个指针可以进行减法操作,但必须类型相同,一般用在数组方面,不多说了。

二、取地址运算符&和间接运算符*
这里&是取地址运算符,*是间接运算符。&a 的运算结果是一个指针,指针的类型是a 的类型加个*,指针所指向的类型是a 的类型,指针所指向的地址嘛,那就是a 的地址。*p 的运算结果就五花八门了。总之*p 的结果是p 所指向的东西,这个东西有这些特点:它的类型是p 指向的类型,它所占用的地址是p所指向的地址。

例六:
int a=12; int b; int *p; int **ptr;
p=&a; //&a 的结果是一个指针,类型是int*,指向的类型是
//int,指向的地址是a 的地址。
*p=24; //*p 的结果,在这里它的类型是int,它所占用的地址是
//p 所指向的地址,显然,*p 就是变量a。
ptr=&p; //&p 的结果是个指针,该指针的类型是p 的类型加个*,
//在这里是int **。该指针所指向的类型是p 的类型,这
//里是int*。该指针所指向的地址就是指针p 自己的地址。
*ptr=&b; //*ptr 是个指针,&b 的结果也是个指针,且这两个指针
//的类型和所指向的类型是一样的,所以用&b 来给*ptr 赋
//值就是毫无问题的了。
**ptr=34; //*ptr 的结果是ptr 所指向的东西,在这里是一个指针,
//对这个指针再做一次*运算,结果是一个int 类型的变量。

 

人生若只如初见

人生若只如初见,纵然有擦肩而过的那份惊悸,可会有花谢花开花满天的胜景?人生若只如初见,纵然有六宫粉黛无颜色的回眸一笑,可会有情难却情相牵,只羡鸳鸯不羡仙的千年缘?

可是,假如人生若只如初见。。。。。

如流星般陨落的泪滴,不知跌碎了谁的思念。今生缘,来生缘,又不知因谁难分难解?

恩,情如风,情如烟。在商女的一曲琵琶中悠悠岁月已过千年。好像是在转眼之间,隔世的爱恋却只能追忆昨日缱绻。。。。送君明珠还有泪,很不相逢未嫁时,是 么?对月形单望相互,只羡鸳鸯不羡仙。是么?金风玉露一相逢,便胜确人生无数。是么?唉,挥手间,沧海桑田已成流年。

人生若只如初见,还会有人在梦中为君流连么?人生若只如初见,还会有斩不断理还乱的情思么?绾青丝,挽情思,任风雨飘摇,人生不惧。  

浮生一梦醉眼看,海如波,心如昊月,雪似天赐。你自妖娆,我自伴。永不相弃。呵。。。。

一生匆匆一生梦,无奈尽头却成空。 红尘往事难割舍, 奈何桥上一碗终。无奈?有点。任你爱的水深火热惊天动地,可是,你没了以后呢?好吧,我们只注重过程,爱过就够了。是么?

有时候,我情愿相信有轮回。因为来世还可以把你寻找,哪怕今生入的是地狱,我不在乎。

天路遥,人世远,凝眸处,沧海桑田。
波光滟,意阑珊,曾几时,海枯石烂。
天路遥,人未远,凝眸时,未与君绝。
波光艳,意阑珊,忆君处,泪满为患。
梦中,你的容颜已模糊。曾经笑红尘,画朱颜,可是,往事随风,浮云翩纤,不是么?是么?呵。。。知我者慰我心伤,不知我者谓我疯狂。