2009
10.20

诶,最近老在淘宝瞎转悠,买了N多东西。

首先是买了一套雷柏的无线键鼠套8100的,买回来感觉挺满意的。鼠标也没网上说的那些丢帧的情况,还有就是键盘左边宽了点,跟普通的键盘设计的有点区别,需要重新熟悉键盘。网上有人专门给他做了个解剖,点我

DSC03151DSC03152

DSC03154

完后,买了很多书,《把话说得滴水不漏》、《社会心理学》、《人力资源管理》、《人工智能》、《计算方法》。决定在工作之前把这几本书好好看看,咱也是要踏入社会的人了~

DSC03159

嗯,还有小乌龟,这不是网购的,是在武汉体院门口买的,只买了一只,别人都说两只一起好养活,不过我看他挺健康的,整天活蹦乱跳,精神头大的很……

DSC03143 DSC03145

  嗯,看来大家都注意了,那个x头很长……

2009
10.18

百度的罪证

嗯,留贴备用……

未命名

2009
10.08

我们寂寞的行走在这个世界。我们以为一直行走就能够到达天涯海角。抬头四十五度仰望窗外的世界,我们感觉到了九十度的寂寞。原来不只我们寂寞,这个世界也是寂寞的。 我们都是城市里的孩子。我们都有一颗寂寞的灵魂。某一天。我们的微笑也会偷偷的爬上嘴角。我们也可以勇敢的说爱。爱就想游城市。也爱上落寞。

——就想游城市零捌年序语

他们说。这是个能让声音和耳朵相恋的城市。有着城市的寂寞和娇媚的姿态。却带着火焰的炙热和冰川的严寒。无论是春夏还是秋冬。都将如同开在彼此心头永不凋零的花朵。这便是就想游城市。即便天空是寂寞的,即便云朵是灰白的。却能拥抱我们漂泊的身影。和温暖我们跋涉的脚步。我们轻轻的放飞手中的梦想。如同鸟儿展开自由的双翼永不疲倦的飞翔。只要你愿意。就想游城市愿成为你漂泊路上的一处栖所。跋涉途中的一个起点。

贰零零陆。贰零零柒。请相信这份缘分值得珍惜。伴着春的草长花开,他在柔和的阳光下安静踏着绿色的草坪露出惊喜的笑脸。经过夏的骄阳似火,他在空中一些似云非云,似雾非雾的灰气里憋红了骄嫩的脸颊。携着秋的天高云淡,他在澄清飘渺的光辉下发出柔和动听的歌唱。盼来冬的傲雪凌霜,他在许多人永无止境的深情凝望下悄然滑落欣慰的泪水。季节变迁,旅途上的艰辛坎坷造就了今天如此自信坚定的美丽,成全了今天如此骄傲从容的精彩。而厉经大雨洗礼和接受大风考验过后的容颜即便写满成熟的同时,也依旧犹如一枝含苞欲放的花朵给我们带来美丽心情。

灯火阑珊处,总有那么一个安逸的地方等待着我们回家;迷失两岸时,总有那么一盏微弱的灯光照亮我们脚下的路;绝望自卑时,总有那么一声柔美的声音提醒我们抬起头仰望明亮;生气埋怨中,总有那么一首婉转的旋律滋生我们最大限度的理解。用相同的姿势等待着它融入遥远的温情和理解。然后向着梦中纯净温暖的阳光大步大步走去。某月某日,游走的生命轨迹里总有那么一缕莫名的牵挂拾起我们往事的片段。

零零捌年。我们依旧长期的守侯着这座城市。固执的驻守着这里有关熟悉的画面和自己本质而纯粹的愿望。就是在这座城市。拥有一份属于自己的寂寞。在寂寞中享受幸福。习惯性的去追逐某些陌生而又熟悉的身影和微笑。不求拥有。不求有结果。只求在最绚烂的年华里。邂逅一场最美丽的际遇。

我们徘徊在就想游城市,走我们自己的路,唱我们自己的歌,寻找属于我们自己的故事。聆听来自城市的声音。寂寞却幸福。宁静的夜。我就站在它的中央。用有点温暖又有点疼痛的文字回首仰望曾经的忧伤和遇见的快乐。当季节不停的更迭,人流不停的走过。在这座寂寞的城市,留下的将又是哪些熟悉的面孔。想念那不经意的语言。依恋的或许是那份难舍的情怀。透过跳动的脉搏,我知道就想游城市一直存在。即便我在遥远的彼岸。它依旧近在我的心海。不是因为距离而陌生。不是因为白开水的平淡而选择恋上可乐的刺激。只要你愿意。就想游城市便与你同在。它便是你灵魂的靠岸。用你的文字。去诉说我们长久的故事。用你的耳朵。却聆听城市寂寞的声音。穿过往事的黑暗。看到明日的阳光。忘记疲惫的心态。体会与众不同的感动。

走进城市。感受寂寞中带着微微幸福的感觉。远离身边的喧嚣和漂浮的尘埃。在这里。留下你的足迹。记下你的心。尽情释放喜悦和忧愁。携手体会不一样的城市情感。让我们璀璨的青春在城市中宛若夏夜里芳香馥郁又独自妖娆的蔷薇花。让我们百转千回的情感在指尖上跳起欢快又纠结的音符。让我们眼神深处绽放又瞬间消失的烟花在掌心里幻化成连绵不绝的曲线。然后。我们面朝大海。等待春暖花开。 因为距离,我们衍生了期待。 因为期待,我们学会了珍惜。 因为珍惜,我们懂得了理解。

你说。你是喜欢这座城市的。因为你已经习惯聆听这里的声音。一如既往的仰望这片寂寞而灰白的天空。

你说。你不会离开。因为这里让你感觉到安宁与平静。你会永远驻守在这里。看着它经过雨水的冲洗而变得明亮。

你还说。你愿意为就想游城市努力做个温暖的孩子。嘴角洋溢着幸福对每个走进城市的人浅浅的微笑。轻轻的问候……

我们的青春。我们的年华。我们的笑颜。我们曾经的忧伤。我们遇见的快乐。如果可以。请允许我凝望你的双眼。将你的笑容刻在我的心田。如果可以。请允许我对你的问候透过指尖在键盘上柔柔的绽开。如果可以。我愿我们的相识是一种奇迹。在茫茫人海里将你我的名字相互依偎。那么现在。别离开。我们一起把爱绽放成最美丽的花朵。为这座城市点亮迷茫时的方向灯。它会让我在没有你的日子里,依然清晰记得属于我们共有的美好时光。

2009
10.04

无线输电技术是一种利用无线电技术传输电力能量的技术,目前尚在初步应用阶段。但是无线输电的提出最早要追溯到1889年尼古拉·特斯拉这位大师了。

尼古拉·特斯拉(Nikola Tesla,1856-1943)

1856年7月10日,他生于南斯拉夫克罗地亚的斯米良,他父亲是牧师,母亲是打蛋器的发明者。他一生的发明无数。1882年,他继爱迪生发明直流电(DC)后不久,发明了交流电(AC),并制造出世界上第一台交流发电机,并创立了多相电力传输技术。 1895年,他替美国尼亚加拉发电站制造发电机组,致使该发电站至今仍是世界著名水电站之一。 1897年,他使马可尼的无线电通信理论成为现实。 1898年,他制造出世界上第一艘无线电遥控船,无线电遥控技术取得专利(美国专利号#613.809)。 1899年,他发明了X光(X-Ray)摄影技术。其他发明包括:收音机、雷达、传真机、真空管、霓虹灯管、飞弹导航、星球防御系统等。甚至以他名字而命名的磁密度单位(1 Tesla = 10,000 Gause)更表明他在磁学上的贡献。

一个被世人所遗忘的巨人,而另一个发明家却被人津津乐道,那就是爱迪生(Thomas Edison)。但是这两个人并没有成为朋友,反而爱迪生经常性的打压特拉斯及其发明的交流电,因为直流电相对于交流电实在有太多的缺点和限制,从而威胁了爱迪生当时正在经营直流电生意。于是,基于利益上的冲突,爱迪生不得不打压特拉斯。

1889年特拉斯便发明了"无线传电方法"。于是在美国科罗拉多泉(Colorado Spring)建设实验室开发及研究此项"无线传电"技术,即是将当时的低频高压电流(5060Hz)转化为高频电流,然后再经由空气作为传送媒介来输电。此项"无线传电"技术不单省却了输电电缆的成本,更可以免去输电时因电阻所致的损耗。

技术上,无线输电技术与无线电通讯中所用发射与接收技术并无本质区别。但是前者着眼于传输能量,而非附载于能量之上的信息。无线输电技术的最大困难在于无线电波的弥散不期望的吸收与衰减。对于无线电通讯,无线电波的弥散问题甚至不一定是件坏事,但是却可能给无线输电带来严重的传输效率问题。一个办法是使用微波甚至激光传输,理论上,无线电波波长越短,其定向性越好,弥散越小。P.s: 微波的波长为1mm—1m,可见激光的波长为400nm-700nm,另外,所有的光都是电磁波。

以下信息来源Google资讯:

03年05月,《光明日报》转引了英国《新科学家》的一则报道说:英国通能公司新近发明了一种新颖的无线充电技术。此项技术是根据磁性诱导电力传输原理发展而成的,可为手机、笔记本电脑方便充电。无线充电垫子厚度还不到1毫米,价格在50美元左右。可惜的是,我竟然Google不到该公司的任何消息……

07年,中国网中国经济网等多家网站提到英国SplashPower公司2005年初上市的无线充电器Splash pads,就是变压器原理商业化的无线充电产品(未找到该产品资料)。并且在CES 2007上,WildCharge公司也推出了两款无线充电器产品WildCharger 和WildCharger-Mini。WildCharge的无线充电器与SpashPower公司的产品非常相似,也是垫子模样的东西,其中WildCharger功率较大,除了可以给手机和媒体播放器充电,还可以为笔记本电脑充电,而WildCharger-Mini只能给手机等小型设备充电。据称WildCharge公司已从2007年7月7日开始通过网上销售产品

07年06月,新华网发表了一篇名为"隔空"传电前景如何?我专家称:不太实用的文章中提到:美国麻省理工学院(MIT)的MIT的助理教授马林·索尔贾希克(Marin Soljacic)和他的研究小组在《科学》杂志上发表报告说,其试制的无线电力传输装置,向2米外的60瓦灯泡供电,并成功点亮了它,即使在电源与灯泡中间摆上木头、金属或其它电器,都不会影响灯泡发光。MIT的方案采用了磁场耦合共振器(Magnetically Coupled Resonators),其传输效率得到了大幅提升,在2米的距离达到了40%。但是遗憾的是,这项技术所产生的电磁辐射非常大,安全性太差,距离实用阶段还很远。

08年08月,Intel也不甘寂寞,在英特尔开发者论坛(IDF)的第三天,展示无线电力传输驱动60W灯泡。该项研究是由Intel西雅图实验室的Joshua R. Smith领导的,部分技术基于麻省理工学院物理学家Marin Soljacic的研究。可以在一米距离内无线给60W灯泡提供电力,值得注意的是其效率高达75%。

在08年09月,北美电力研讨会已经在美国内华达州的雷电实验室成功的将800W电力用无线的方式传输到5米远的距离。 可这些设备太巨大了,无法应用到家庭,办公室等小型场所。

Sony 也在今天(2009.10.04)发了一个新闻稿,说明他们在无线电力传输方面的进展。基本上他们已经可以传输 60W 的电力 50 公分的距离,虽然传输本身大约只耗损 20%,但从输电侧交流电转到无线传输,再到接收端换回交流电输出,大约会耗损 40% 的电力,可见索尼的技术还不过硬啊。

现如今无线充电技术应用已经很广泛了,在淘宝上搜索无线充电,在所有分类中共找到"无线充电 "宝贝2082件,从理发器,吸尘器,扫地机等生活电器到各种各样的无线充电器,应有尽有。

想象一下未来的家会是什么样子呢?只要在家里的天花板上安装一个高频发送端(XMTR),电流通过发送端产生一个强烈的电磁场,就可以为房间里面的所有电器供给电能。台灯不再需要电线,笔记本电脑不再需要电池,手机会自动充电……而且,不用在装修的时候就考虑如何布线,想把电器放哪就放哪。只是希望到了那个时候,邻居不要盗用了我付费的“无线电能”。

2009
09.30

其实我可以叫国庆的

嘿嘿O(∩_∩)O

2009
09.27

今天在天涯音乐上找到一个搞笑的歌,是翻唱曾哥的《最天使》,带了点美声唱法,美其名曰:不知所云版。试听如下:

感觉不错,想把他搞成MP3格式放到iPod里面慢慢听,由于是通过flash播放出来的,我第一想法就是录音。无奈我的集成声卡跟Windows 7闹了点小矛盾,用ARWizard竟然找不到录音设备,所以这个方案被我抛弃之。然后我就想到了提取Chrome的缓存,点遍了Chrome上面所有的按钮也没找见存放缓存的选项,只好求助于Google大大的搜索引擎了。

要想提取缓存,我最开始的想法是先找到存放缓存的目录。“开始”菜单–>运行–>输入“ %HOMEPATH%\Local Settings\Application Data\Google\Chrome\User Data\Default\Cache\ ”–>Enter之后,打开的就是Chrome的缓存文件夹了。无力的发现,缓存竟然是被压缩过的,传言是7z格式的,反正我用WinRAR是没打开。

是不是有专门查看缓存的软件呢?报着试一试的方法,Google了一下,还真让我找到一个名为ChromeCacheView.exe的查看器,喜滋滋的down下来。运行之后,搜索缓存,一切正常,就是结果不正常,除了文件大小和最后访问时间,其他都是空白。额,下载到目前最新版本1.20之后,发现,他可以正常导出了。只要在选定的文件上按下F4,选择导出的目录,就可以了。如下图所示:

image

有没有不用软件的方法呢?经过测试之后,发现的确有一种提取的方法。由于chrome的缓存机制,这个过程会非常快。

  1. 地址栏输入about:cache
  2. 按Ctrl+F,寻找你需要的文件
  3. 复制该文件的地址到地址栏,不是链接地址,不要复制错了哟
  4. 按Enter,那个文件就被你保存到默认的下载路径里面了
2009
09.23

开博有一年多了,PR值一直很稳定,嗯,其实2这个数字很吉利的。

咳,说说这个广告费吧,先后加入了Google AdSense和Alimama的广告联盟。Google的AdSense加入的比较早,2009年1月15日加入的,加入阿里妈妈就晚了差不多有一个月了,具体不记得了,反正第一个点击是在2009年2月17日。

下面这个是Google的收入:

项目 网页展示次数 点击次数 网页点击率 网页 eCPM 收入
内容广告 20,569 60 0.29% US$0.16 US$3.22
移动广告 2,620 12 0.46% US$0.10 US$0.27
总收入         US$3.49

下面的是Alimama的收入:

类型 收入金额(元) 支出金额(元)
按时长计费收入 2 0
技术服务费 0 0.06
按点击计费收入 2.75 0
余额(元)   4.69

阿里妈妈的广告都没几个人点,具体不清楚什么原因……要不是一个月前有个兄弟拍下了我的广告,现在应该还在2.xx徘徊。阿里妈妈还给我发了个邮件,现在都还保留着呢!

Alimama

话说,那个朋友花了2块钱,买到多少点击呢?答案就是

继续阅读全文 >>

2009
09.22

<1:一般情况下,源程序有效注释量必须在20%以上。

说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。

<2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。

示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。
/*************************************************
Copyright (C), 19xx-20xx, Company // 版权信息
File name: // 文件名
Author:       Version:       Date:       // 作者、版本及完成日期
Description: // 用于详细说明此程序文件完成的主要功能,与其他模块或函数的接口,输出值、取值范围、含义及参数间的控制、顺序、独立或依赖等关系
Others: // 其它内容的说明
Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明
       1. …
History: // 修改历史记录列表,每条修改记录应包括修改日期、修改
// 者及修改内容简述
       1. Date:
          Author:
          Modification:
       2. …
*************************************************/

<3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。

示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。
/************************************************************
Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.
FileName: test.cpp
Author:       Version :       Date:      
Description: // 模块描述
Version: // 版本信息
Function List: // 主要函数及其功能
       1. …
History: // 历史修改记录
       <author> <time> <version > <desc>
David 96/10/12 1.0 build this moudle
***********************************************************/

说明:Description一项描述本文件的内容、功能、内部各部分之间的关系及本文件与其它文件关系等。History是修改历史记录列表,每条修改记录应包括修改日期、修改者及修改内容简述。

<4:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。

示例:下面这段函数的注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。
/*************************************************
Function: // 函数名称
Description: // 函数功能、性能等的描述
Calls: // 被本函数调用的函数清单
Called By: // 调用本函数的函数清单
Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)
Input: // 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
Output: // 对输出参数的说明。
Return: // 函数返回值的说明
Others: // 其它说明
*************************************************/

<5:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

<6:注释的内容要清楚、明了,含义准确,防止注释二义性。

说明:错误的注释不但无益反而有害。

<7:避免在注释中使用缩写,特别是非常用缩写。

说明:在使用缩写时或之前,应对缩写进行必要的说明。

<8:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。

示例:如下例子不符合规范。
例1:
/* get replicate sub system index and net indicator */

repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;

例2:
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;
/* get replicate sub system index and net indicator */

应如下书写
/* get replicate sub system index and net indicator */
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;

<9:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。

示例:
/* active statistic task number */
#define MAX_ACT_TASK_NUMBER 1000

#define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */

<10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。

示例:可按如下形式说明枚举/数据/联合结构。
/* sccp interface with sccp user primitive message name */
enum SCCP_USER_PRIMITIVE
{
       N_UNITDATA_IND, /* sccp notify sccp user unit data come */
       N_NOTICE_IND, /* sccp notify user the No.7 network can not */
              /* transmission this message */
       N_UNITDATA_REQ, /* sccp user’s unit data transmission request*/
};

<11:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。

示例:
/* The ErrorCode when SCCP translate */
/* Global Title failure, as follows */ // 变量作用、含义
/* 0 - SUCCESS 1 - GT Table error */
/* 2 - GT error Others - no use */ // 变量取值范围
/* only function SCCPTranslate() in */
/* this modual can modify it, and other */
/* module can visit it through call */
/* the function GetGTTransErrorCode() */ // 使用方法
BYTE g_GTTranErrorCode;

<12:注释与所描述内容进行同样的缩排。

说明:可使程序排版整齐,并方便注释的阅读与理解。

示例:如下例子,排版不整齐,阅读稍感不方便。
void example_fun( void )
{
/* code one comments */
       CodeBlock One
              /* code two comments */
       CodeBlock Two
}
应改为如下布局。
void example_fun( void )
{
       /* code one comments */
       CodeBlock One

       /* code two comments */
       CodeBlock Two
}

<13:将注释与其上面的代码用空行隔开。

示例:如下例子,显得代码过于紧凑。
/* code one comments */
program code one
/* code two comments */
program code two
应如下书写
/* code one comments */
program code one

/* code two comments */
program code two

<14:对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。

说明:这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序,有时甚至优于看设计文档。

<15:对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。

说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句。

示例(注意斜体加粗部分):
case CMD_UP:
       ProcessUp();
       break;

case CMD_DOWN:
       ProcessDown();
       break;

case CMD_FWD:
       ProcessFwd();

if (…)
{
      
       break;
}
else
{
       ProcessCFW_B(); // now jump into case CMD_A
}

case CMD_A:
       ProcessA();
       break;

case CMD_B:
       ProcessB();
       break;

case CMD_C:
       ProcessC();
       break;

case CMD_D:
       ProcessD();
       break;

¤1:避免在一行代码或表达式的中间插入注释。

说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差。

¤2:通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。

说明:清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释。

¤3:在代码的功能、意图层次上进行注释,提供有用、额外的信息。

说明:注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息。

示例:如下注释意义不大。
/* if receive_flag is TRUE */
if (receive_flag)

而如下的注释则给出了额外有用的信息。
/* if mtp receive a message from links */
if (receive_flag)

¤4:在程序块的结束行右方加注释标记,以表明某程序块的结束。

说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。

示例:参见如下例子。
if (…)
{
       // program code

       while (index < MAX_INDEX)
       {
              // program code
       } /* end of while (index < MAX_INDEX) */ // 指明该条while语句结束
} /* end of if (…)*/ // 指明是哪条if语句结束

¤5:注释格式尽量统一,建议使用“/* …… */”。

¤6:注释应考虑程序易读及外观排版的因素,使用的语言若是中、英兼有的,建议多使用中文,除非能用非常流利准确的英文表达。

说明:注释语言不统一,影响程序易读性和外观排版,出于对维护人员的考虑,建议使用中文。

2009
09.18

<1:程序块要采用缩进风格编写,缩进的空格数为4个。

说明:
对于由开发工具自动生成的代码可以有不一致。

<2:相对独立的程序块之间、变量说明之后必须加空行。

示例:
如下例子不符合规范。
if (!valid_ni(ni))
{
       … // program code
}
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;
应如下书写 。
if (!valid_ni(ni))
{
       … // program code
}

repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;

<3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

示例:
perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN
       + STAT_SIZE_PER_FRAM * sizeof( _UL );
act_task_table[frame_id * STAT_TASK_CHECK_NUMBER + index].occupied
       = stat_poi[index].occupied;
act_task_table[taskno].duration_true_or_false
       = SYS_get_sccp_statistic_state( stat_item );
report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER)
       && (n7stat_stat_item_valid (stat_item))
       && (act_task_table[taskno].result_data != 0));

<4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。

示例:
if ((taskno < max_act_task_number)
       && (n7stat_stat_item_valid (stat_item)))
{
       … // program code
}
for (i = 0, j = 0; (i < BufferKeyword[word_index].word_length)
       && (j < NewKeyword.word_length); i++, j++)
{
       … // program code
}
for (i = 0, j = 0;
       (i < first_word_length) && (j < second_word_length);
       i++, j++)
{
       … // program code

<5:若函数或过程中的参数较长,则要进行适当的划分。

示例:
n7stat_str_compare((BYTE *) & stat_object,
       (BYTE *) & (act_task_table[taskno].stat_object),
       sizeof (_STAT_OBJECT));
n7stat_flash_act_duration( stat_item, frame_id *STAT_TASK_CHECK_NUMBER
       + index, stat_object );

<6:不允许把多个短语句写在一行中,即一行只写一条语句。

示例:
如下例子不符合规范。
rect.length = 0; rect.width = 0;
应如下书写 。
rect.length = 0;
rect.width = 0;

<7:if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。

示例:
如下例子不符合规范。
if (pUserCR == NULL) return;
应如下书写:
if (pUserCR == NULL)
{
       return;
}

<8:对齐只使用空格键,不使用TAB键。

<9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。

<10:程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

示例:
如下例子不符合规范。
for (…) {
       … // program code
}
if (…)
       {
       … // program code
       }
void example_fun( void )
       {
       … // program code
       }
应如下书写。
for (…)
{
       … // program code
}
if (…)
{
       … // program code
}
void example_fun( void )
{
       … // program code
}

<11:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。

说明:
采用这种松散方式编写代码的目的是使代码更加清晰。
由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C/C++语言中括号已经是最清晰的标志了。
在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。

示例:
(1) 逗号、分号只在后面加空格。
int a,b,c;
(2)比较操作符, 赋值操作符"="、 "+=",算术操作符"+"、"%",逻辑操作符"&&"、"&",位域操作符"<<"、"^"等双目操作符的前后加空格。
if (current_time >= MAX_TIME_VALUE)
a = b + c;
a *= 2;
a = b ^ 2;
(3)"!"、"~"、"++"、"–"、"&"(地址运算符)等单目操作符前后不加空格。
*p = ‘a’; // 内容操作"*"与内容之间
flag = !isEmpty; // 非操作"!"与内容之间
p = &mem; // 地址操作"&" 与内容之间
i++; // "++","–"与内容之间
(4)"->"、"."前后不加空格。
p->id = pid; // "->"指针前后不加空格
(5) if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。
if (a >= b && c > d);

<12:一行程序以小于80字符为宜,不要写得过长。

2009
09.12

Windows:

Mac (OS X):

Both Windows & Mac (OS X):

  • Ecto (号称Mac平台上最优秀的Blog离线编辑软件)
  • Flock (基于Mozilla Firefox的网页浏览器)
  • JBlogEditor
  • QTM (支持Blogger、WordPress、Movable Type等)
  • Qumana

Mac OS X Dashboard Widgets

Linux:

Web:

Firefox Extension:

P.s:Firefox和Web可运行于多种平台中,所以相对来说,他们的扩展也是可以运行于多种平台的。


J2ME Phones:

PalmOS:

iPhone:

Siemens Phones:

Nokia Phones (Symbian S60 based):