2008年10月5日
条款06 :Explicitly disallow the use of compiler-generated functions you do not want.
实现 :通过继承一个类,该类把不想你不想要的函数设为private.
现状 :很少在设计类时控制一些方法不自动生成
条款08 :Prevent exceptions from leaving destructors.
实现 :不要把一些有可能出现异常的函数放在destructor中执行,最好再专门写一个函数以供用户来调用。
现状 :因为异常会影响程序执行效率,所以我们开发中没有使用。
2008年9月25日
摘要: 当前手机开发平台越来越多,最近android平台又被炒到空前的高度,大家都是怎么看待这些平台的,以下是我的一些想法。
最近几个博友bob,小舟,Yang Jungang,jawfneo都提了一些关于iphone开发的问题。但由于我最近一直都在忙工作的事,一直都没有回,也没有更新blog,请见谅。那么我再来说说关于SDK的事吧。 阅读全文
2008年4月1日
代码昨天release给客户,终于一个阶段结束了,将近三个月没写blog了,真的太忙了,除了忙于工作,生活以外,其实我还在研究Iphone的开发。
iphone入手已经两三个月了,从中我看到了iphone OS的很多优点,确实觉得这个手机不管从外形上还是内部application都是那么的完美,所以衍生了想在iphone os上开发的念头。
研习的cocoa的基本开发框架,学习了objective c的基本语法,在Iphone sdk发布的那天莫名的开心和激动,但是最后还是不能如愿以偿,只有一个破解的sdk toolchain编译过的hello world在Iphone上恶心得运行着。
iphone sdk要运行在基于intel 酷睿2,操作系统是Mac OS leopard 10.5.2以上的Mac上,尝试安装leopard在家的电脑和本子上都因各种原因而失败,那就算我有mac了,其实也不行,因为sdk写的代码只能在iphone 固件 2.0上运行, 2.0估计会在今年6月发布,所以一切都是那么的不确定,这也不断的打断我结束开发Iphone app的念头,但今天看到一个往日同窗的blog让我又重新燃起了奋斗之火。
现在我已经是某iphone开发群的群主,某网站也曾经让我加入他们将要成立的iphone专栏,认识了很多对Iphone开发狂热的技术人员, 其实我已经有一些结果了,我真的该把这件事做好!
2008年1月18日
2007年12月18日
摘要: 项目可能要加入Wimax了,我当先遣队,先调查一把。
WiMax简介:
WiMAX 的全名是微波存取全球互通(Worldwide Interoperability for Microwave Access),一种基于IEEE 802.16标准的宽带无线接入城域网技术。
目前所说的IEEE 802.16标准主要包括IEEE 802.16a、IEEE 802.16d和IEEE 802.16e三个标准。其中IEEE 802.16a和IEEE 802.16d是固定无线接入标准,也就是定点的用户端。而IEEE 802.16e的目标是在IEEE 802.16d固定无线接入标准的基础上加入了新的特性,主要是加入移动性还有如切换、安全等,该标准于2005年12月正式批准。
WiMAX将分三个阶段进行部署。第一阶段是通过室内天线来部署采用IEEE802.16d规范的WiMAX技术,目标用户是固定地点的已知订户。第二阶段会大量部署室内天线,将WiMAX技术的吸引力拓宽到寻求简化用户点 阅读全文
2007年12月14日
AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析。他们研究出了一种新的编程思想,借助这一思想或许可以通过减少代码重复模块从而帮助开发人员提高工作效率。随着研究的逐渐深入,AOP也逐渐发展成一套完整的程序设计思想,各种应用AOP的技术也应运而生。
AOP技术在Java平台下是最先得到应用的。就在PARC对于面向方面编程进行研究的同时,美国Northeastern University的博士生Cristina Lopes和其同事也开始了类似的思考。最终,美国国防先进技术研究计划署(Defense Advanced Research Projects Agency即DARPA)注意到了这项工作,并提供了科研经费,鼓励将二者的工作成果结合起来。他们通过定义一套Java语言的扩展系统,使开发者可以方便的进行面向方面的开发,这套扩展系统被称为AspectJ。之后,AspectJ在2002年被转让给Eclipse Foundation,从而成为在开源社区中AOP技术的先锋,也是目前最为流行的AOP工具。
那么对于C++技术来说,怎样来开展AOP呢,幸好有Olaf Spinczyk 这样的人存在,我们也有了aspect c++。它使用了插入代码的方法。一个典型的Aspect C++示例需要一个C++源文件(.cpp)、一个aspect C++源文件(.ah),通过ac++编译器把C++源文件和aspect C++源文件转换成混合的C++源文件(如果有头文件也会转换),最后通过普通的C++编译器编译出可执行文件。
那么我现在如果不想用第三方编译器,自己去实现AOP,不知道CPPBLOG里的大虾有什么想法?
2007年12月10日
关于这篇文章我一直想写,但每次总是没有一个闲下来的时间,现在试着挤每天的闲暇时间一点点完成。
一直以来我都想做一个软件架构师,所以我在平时的开发中除了保证写出高质量的代码外,还会从架构者的角度来仔细推敲整个应用。当然了这个架构主要是指的代码的架构,那么推敲的依据主要来自三个地方:
1.GRASP
每当遇到软件分层,类似于业务逻辑放在那个类哪个层等问题时,我通常都会参考GRASP,General Responsibility Assignment Software Pattern。包括以下几个原则:
A.Information Expert 信息专家
B.Creator 创建者
C.Low Coupling 低耦合
D.High Cohesion 高内聚
E.Controller 控制器
F.Polymorphism 多态
G.Pure Fabrication 纯虚构
H.Indirection 间接:避免对象间直接耦合,合理分配职责
G.Protected Variations 受保护变化:开闭原则。
虽说每个思想懂,但真正能用在实际开发中还是有一定难度的,具体的介绍可以参考大师CRAIG LARMAN的《UML与模式应用》。
2.Design Patterns
古人练剑分三层境界。第一层是每个招式都熟记于心, 没事就拿出来练练,比武时按照自己的套路出剑,第二层就是没有招式,只有思想,假如想解掉别人的剑,那目标就是解剑,随便出剑都可以做到。第三层就是人剑合一,这种境界就已经不依赖与剑了,身边的任何物体包括自己都可以是一把剑,都可以置对方于死地。
世间万物皆相通,我认为模式的学习也是有三种阶段,23种模式熟记于心,遇到具体项目套相对应的设计模式,虽然有点死板,但给软件的维护和扩展带来很大好处,这是学习设计模式的第一层。第二层就是大脑中已经没有具体的模式,只知道如果要解耦,那么就这样做,如果追求运行速度,就那样做,这就不一定是23种模式的一种了。如果已经有前两层的功力,那就要追求人设计模式合一,这时就有很多变化,创造模式,不会依赖与语言(C, C++, JAVA等等),各个领域的设计模式等等。估计Erich Gamma应该到了第三层境界了吧。
3. 我的前辈
他们在这方面很有经验,架构这个东西就是平时要积累丰富项目经验,看看国外的一个个大牛,都不是40多岁的人,所以我就很讨厌某些言论说软件是吃青春饭的…
在正常的情况,在我看来,现在的软件设计从大的角度来讲就是复用(Reuse),从小的角度来讲就是解耦(Decouple或者separate concern)。作为一名优秀的程序员,开发一个App,写一句代码都要考虑到你写的这个类与其它类的关系,是不是多余的依赖,适不适合扩展等等。由于这段时间工作的需要,我接连转了三个项目,目睹了每个项目架构的优缺点,加之前不久我又进行了IJC关于RUP的培训,与IJC的David和蒋胜老师深入的讨论了软件开发过程,所以我想把学到的一些设计方法举个例子来说明。
在进入主题之前我想先叙述一些概念。
概念1:由面向过程到面向对象绝对是一个质的飞跃,我认为OO最大的优点在于它的程序设计和现实世界是相对应的,从23种设计模式的名字上面也有体现。工厂,代理,适配器等等。
概念2:MVC(Model-View-Controller,模型—视图—控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型(英语:Model),视图(View)和控制(Controller)。视图(View)代表用户交互界面,控制(Controller)可以理解将模型与视图匹配在一起,共同完成用户的请求。模型主要是指业务流程的具体细节,整个过程如图1。那么其实在实际的开发中MVC还是有很多局限性的,后面会通过一个例子给出一个我的改进版。
图1
概念3:RUP
RUP(Rational Unified Process,统一软件开发过程,统一软件过程)是一个面向对象且基于网络的程序开发方法论。根据Rational(Rational Rose和统一建模语言的开发者)的说法,好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针,模版以及事例支持。 RUP和类似的产品--例如面向对象的软件过程(OOSP),以及OPEN Process都是理解性的软件工程工具--把开发中面向过程的方面(例如定义的阶段,技术和实践)和其他开发的组件(例如文档,模型,手册以及代码等等)整合在一个统一的框架内。
抓其精髓就是使整个开发过程统一,可管理。用例驱动,以架构为中心,增量与迭代,是RUP的主要思想。RUP是一个很复杂的过程,但好在它在每个项目中使用时可以因地制宜,有效的裁减可以使RUP在工程中发挥最大的威力。作为一个程序员,我首先要关心的是有关代码架构的问题,RUP有一个核心的思想Separate concern,也就是分离关注点。这也刚好体现了面向对象的一个思想:解耦。那么RUP中最能体现它Separate concern的应该就算它的Minimal和Extension了,当然还有一些其它的体现方式,我会在下篇实例中详细介绍。
简单来说Minimal指的是那些上不依赖于表现层,下不依赖于数据库,操作系统等,可以在任何环境下运行的纯业务逻辑程序,最主要的还是Minimal部分的代码可以复用。Extension包括Minimal,它依赖于某个特定的底层程序或者操作系统。Minimal和Extension类似于图2的关系。

图2
2007年11月19日
刚刚收到消息,下周UMLChina首席咨询师潘家宇来公司培训,各位博友如果有什么关于UML和软件过程管理的问题可以留言给我,我可以和潘老师深入讨论,其实国内做UML培训的就这家还可以了。
2007年11月9日
上面下指令说要做多国语言版的程序,这可是个不小的改动呀。于是我就拿当前的程序运行,一系列的问题随之出现了。
话分两头,先说跑在Windows上的,最基本的就是读各种语言的文件名,正常英文还是正常的,但遇到俄文,法文,德文时就出现问题,正常的字符都变成了"?",跟踪内存发现读入内存的字符已经变成了3f00,也就是"?"的unicode,可见是读入目录到内存的函数出了问题,如下代码:
long filehandle;
//the structure of file
struct _finddata_t entry;
//"*" means get all the file and directory
// Get the first file
if((filehandle = _findfirst( "*", &entry )) != -1) //-1 means the directory is null
{
tree* child;
do{
if(entry.attrib&FILE_ATTRIBUTE_DIRECTORY){
if ( strcmp("..", entry.name) != 0 && strcmp(".", entry.name) != 0){
//printf("%*s%s\\\n", depth, "", entry.name);
if(treenode)
{
char name[MAX_LOCALPATH_FOLDERNAME_LENGTH+1];
strncpy(name,entry.name,MAX_LOCALPATH_FOLDERNAME_LENGTH-1);
strcat(name,"\\");
child=new tree(name);
treenode->AddChild(child);
}
//Recursively processes directories
//printdir(entry.name, depth + 4,child);
}
} else{
//printf("%*s%s\n", depth, "", entry.name);
if(treenode)
{
child=new tree(entry.name);
treenode->AddChild(child);
}
}
}while( (_findnext(filehandle,&entry)) ==0 );
}
chdir("..");
_findclose(filehandle);
通过查证MSDN得知类似于_findfirst,findnext都是针对ASCII码的,要读unicode(windows默认字符集),就得用_wfindfirst,_wfindnext等读宽字符的操作函数,最终解决问题,但我没有松气,因为程序主要是运行在linux中的,Linux真不知道怎么整了。
Linux上读多国语言的文件和目录就需要对Linux系统深入了解,因为我要读的文件是usb上的文件,所以得先挂载到一个目录,
mount -t vfat /dev/sda1 /mnt/usb,然后readdir读入文件,与Windows上同样的错,读入的是"?",我想和windows一样去找一个类似wreaddir,但是没有。于是应该从挂载着手,目前在NTFS和FAT32/VFAT下的文件系统上都使用了Unicode,这就需要系统在读取这些文件名时动态将其转换为相应的语言编码,也就是说挂载的时候要把usb上的编码转化成16位的Unicode编码,改命令如下后成功。
mount -o iocharset = utf8 /dev/sda1 /mnt/usb.
Linux对iocharset的解释如下:
Character set to use for converting between 8 bit characters and 16 bit unicode charaters.The default is iso8859-1. Long filenames are stored on disk in Unicode format.
至此终于解决了多国语言的问题,接着我无法想象还有什么问题会出来,但我准备好了。
2007年10月25日
摘要: 测试说起来应该是测试人员的事情,但是基本的UT还是由我们开发人员来完成的,那么这次我接到了这个光荣而艰巨的任务。
阅读全文
2007年10月11日
摘要: const关键字可以说是用途广泛,从对变量的限定到对函数的限定,尤其是那个指向常量的指针(const int *p),指针常量(int * const p),指向常量的指针常量(const int* const p)更让初学者摸不到头脑。这里我主要想描述下最近项目中关于const的一个问题。其实有的时候还不能被表面现象迷惑了,简单代码如下 阅读全文
2007年9月18日
因今天晚上有台风,下班很早就回家了。这段时间忙于新项目,所以两周都没有写了,这两周最值得我说的就是SONY的新款MP3了。
当年索尼名为音质,实是为了保护唱片版权,赚更多的钱,推出MD,但还没等到大赚一笔,就被类似于APPLE,IRIVER 的MP3打败。之后虽说也推出了一些MP3,但是不管从外形还是音质上都不是很满意。就在我觉得MP3的战争中SONY可能只是一个匆匆过客的时候,发现了SONY在9月29日要上市的代号“Rolly”的MP3。

其实在SONY的爱宝机器狗问世时,我就在想既然SONY的AI技术这么成熟了,应该会出些其它的更接近生活的产品,但迟迟没有出现直到现在。那么这个会跳舞的MP3主要有一下的功能:
1 支持 MP3、ATRAC 和 AAC 档,并且内置有 1GB 的内存来存放音乐,或者也可以透过 A2DP / AVRCP 蓝牙将音乐传送给它
2 藏在盖子底下的确实是两个喇叭,清晰的音质。
3 拿起来将一个侧面朝上时,下面的盖子会盖起来。这时 Rolly 的其中一个「轮子」就成了歌曲选择器。
4 放在桌子上的时候推动它(也就是让轮子转)可以换音乐,原地旋转是调音量。 按下上面的按键,它就会开始随歌曲跳舞。
5 Rolly 可以透过 USB 联机到电脑上,还可以改程控它的动作。
6 充满电的话,它可以播 5 个小时的音乐、4 个小时的音乐加跳舞、3 个半小时的音乐加跳舞加蓝牙。
那么现在Rolly是以 ¥40,000(2,850 人民币)的价格上市,我觉得我又得赞钱了。
具体的视频官方网站:http://www.rolly-show.com。相信SONY要掀起MP3的台风了。
2007年9月9日
经过多次探讨,多次观察,CC终于定下来买Sony Ericsson Z610i,之前我还觉得不好看,但当我拿到真机的时候就感觉比较有气质,操作也很方便,当然了是i结尾的是sony Ericsson的水货了,就不知道坏了怎么办,不管了,CC不像我,她很爱惜东西,应该一两年不会坏,呵呵。
先看看图养养眼:手机1650 + 一年保修50 = 1700
|
| 产品名称 |
索尼爱立信 Z610i |
| 产品天线 |
内置 |
| 机身颜色 |
黑、蓝、粉 |
| 产品尺寸 |
94.5×49×20毫米 |
| 手机重量 |
110克 |
| 外观设计 |
翻盖 |
| 索尼爱立信 Z610i 基本性能 |
| 和弦铃声 |
72和弦 |
| 铃音描述 |
支持MP3及AAC格式的音乐文件 |
| 上市日期 |
2006年09月 |
| 屏幕色彩 |
26万色彩屏 |
| 屏幕材质 |
TFD |
| 主屏分辨率 |
可视面积为2.0英寸的26万色176×220分辨率TFD材质 |
| 外屏参数 |
单色128×36分辨率OLED材质 |
| 手机类型 |
3G手机 |
| 手机制式 |
3G |
| 支持频段 |
GSM/GPRS 900/1800/1900MHz三频,WCDMA 2100 |
| 网络连接 |
GPRS |
| 索尼爱立信 Z610i 通讯性能 |
| 短信功能 |
SMS短信 |
| EMS短信 |
支持 |
| 多媒体短信 |
支持 |
| E-Mail |
支持 Instant Messaging |
| 索尼爱立信 Z610i 娱乐性能 |
| 摄像功能 |
内置 |
| 摄像功能描述 |
最大可拍摄1600×1200分辨率的图片,支持2.5倍数码变焦及视频录制附摄头参数:10万像素图像浏览器、图片编辑器 |
| 数码相机像素 |
200 |
| WAP浏览器 |
WAP 2.0 |
| WWW浏览器 |
xHTML、HTML(NetFront)、RSS feeds |
| 收音机 |
不支持 |
| MP3功能 |
MP3、AAC、AAC+、eAAC+ |
| 索尼爱立信 Z610i 扩展存储性能 |
| 内存容量 |
16MB |
| 存储卡格式 |
M2卡(Memory Stick Micro),标配容量为64MB,最大支持1GB |
| Java扩展 |
MIDP 2.0环境 |
| 蓝牙接口 |
蓝牙v2.0(支持A2DP技术) |
| 数据线接口 |
USB 2.0数据线 |
那么之后就该给我买了,但不是现在。
这几天项目很紧,我周六,日还是去加班了,正式的工作开始了,适应是没问题了,但是现在感觉每天生活节奏太快,除了工作上的事以外基本没有自己的时间,所以这个问题要在这周好好考虑下。
2007年8月28日
本来想先给cc买手机的,但是因为一些原因,就先给我买了PSP,嘿嘿,终于买了,哈哈哈,先秀下:
主机一个(白色的多加50元),仿罗技盒,组装2G memory stick(1年包换),原装贴膜,1730元
现在就差一个好的耳塞,过几天再去sony专卖店看看。PSP有个不爽的就是它不能播放所有的mpeg4,要专门用相关的工具压缩才行,而且压缩速度很慢,一个DVD一个多小时,比较无语。这周信用卡应该就下来了,买Z610去。
这两天在索广培训的很有意思,学到了很多以前不知道的东西,还认识了其它部门的员工,很有趣的。
2007年8月25日
时间过得真快,转眼在上海呆了将近一年了,想起刚一起过来找房子,租房子,他们过来找工作,到现在的上海帮,真的是酸甜苦辣都经历了,现在终于稳定下来了,也算我们攀升team出校后有一个好的开始吧。
入职已经一个月了,算是没做什么正事吧,但确实很辛苦。公司送我们去上海著名的日语培训机构あさひ にほ語(朝日)学校培训日语,学校在松江的一个偏远小镇上,据校长说学校开在这有两个原因,成本低;有利于学习。由于没有基础,加上参加了雅各布森的培训,晚去了一周多,所以上课时完全跟不上,之后校方把我转到卢湾总部培训,在那边认识了一些一起培训的兄弟姐妹,还蛮开心,但是课程进度不快,所以没有在松江的同事学的多,但在总体上说还是很好的,起码现在自学起来没有问题了,也享受到了大公司给我们毕业生的待遇,那么我下个目标就是争取明年通过二级。
小灵通发了,可以乱打电话了,VAIO到手了,第一个梦想实现了,房子租了,安顿下了,下一个目标就是psp了,9月psp2要上市,但听销售商说要到中国,并能玩盗版游戏,还得一段时间,所以我先买一个吧,以后有好的了再买。CC的索爱手机也在这个时间搞定,唉,还有家具,灯,桌子,锅盆,粮食......估计又是月光,钱真是个好东西呀......
下周是去工厂实习,好好看看他们是怎么做的,哈哈哈,好好学学。