本站动态:
正则表达式工具更新,支持使用替换函数
作者:shosh 日期:2009-08-06
shoColorCode代码加亮程序更新记录
作者:shosh 日期:2008-07-18
头文件的部分规则:重定义相关
作者:shosh 日期:2010-01-28
Site: http://www.wscxy.com
RULE1: 每个头文件都用以下宏包起来,防止被其他文件多次包含。
#ifndef __FILENAME_H__
#define __FILENAME_H__
杂谈:Brew上的应用开发
作者:shosh 日期:2010-01-24
Author: Shosh
Site: http://www.wscxy.com
对于MMI工程师在BREW上的开发需求,往往是以Applet为单位的。Brew上的Applet就是一个应用程序,和Application的概念类似。
大多数Applet都需要UI界面(Daemon程序的需求往往很少),他们往往需要完成一定的功能,所以有逻辑的部分,如计算器程序,就是要处理用户输入的数据并给出计算结果;另外,我们需要提供显示界面和用户进行交互,越是动感越是绚丽的界面效果越能赢得用户的喜爱。话说回来,MMI层次上开发的应用,逻辑上大多比较简单,不需要复杂的算法。开发者不必了解太多的底层知识和硬件知识,只要有扎实的程序语言开发功底(BREW上多数用C,也有用C++的),基本上都能写出一般的应用来。另外,逻辑部分的代码变动性不强,而界面效果在不同的工程间则可以相差很大,还是拿计算器程序来举例,我们在不同的手机上看到的计算器程序,有的界面效果看上去很一般,而有的则很漂亮,但是他们完成的功能是差不多的。而对于一个公司来讲,他们往往希望同一套代码能够适应不同工程项目上的需求,这样可以在很大程度上减少工作量。其实这是客制化的一部分,最理想的客制化是不需要修改代码,只要替换图片资源、字符串资源和其他一些资源如音频资源即可达到目的。但是如果差异较大,光靠资源的替换是很难满足需求的,还是需要修改到代码的。我们会希望尽量少地改动到逻辑代码,最好是只需要修改到一些数据,而不用去修改实质性的代码,而功能逻辑上的一致性给了我们一定的可能。说了这么多,其实是说:我们在设计的时候尽量考虑通用性,以提高代码的复用率以及风格变换的简易性。
目前,在Brew上开发界面,主要使用BUIW。在BUIW中,主要有Form, RootForm, Container, Widget, Decorator, Model等概念。下面简单介绍一下这些基本概念:
Model:其实Model是一个用来存放数据的结构。它提供专门的接口让用户设置Model的值或得到Model的值。另外Model还负责维护Listener List,并提供接口允许对象监听它(将Listener加入到Listener List中)。当用户通过Model提供的设置数据的接口改变Model的值的时候,Model就会逐个给监听它的Listener对象发送消息(实际上是直接调用Listener注册的回调函数),监听的对象再做出相应的动作,如使用新设置进来的数据更新画面等。其实这里应用了设计模式中的观察者模式(Abserver Pattern)。Model分很多种,比较常用的有Value Model, Interface Model, Vector Model等,不同种类的Model存放的数据类型不同。一般情况下,一个Widget会关联上一种Model,并监听Model数据的改动。
最新Android SDK 地址
作者:shosh 日期:2009-12-11
以前在国内这个地址好像是打不开的,不过现在可以了。
Android快速起步(搭建Android环境)
Quick Start:
The steps below provide an overview of how to get started with the Android SDK. For detailed instructions, start with the Installing guide.
第三章: 进程同步机制
作者:shosh 日期:2009-11-15
第二章: 进程概念
作者:shosh 日期:2009-11-14
第一章: 操作系统引论
作者:shosh 日期:2009-11-13
都是概念性的东西,稍微了解下即可。
操作系统的功能:
- 存储器管理
- 内存分配
- 地址映射:把逻辑地址映射为内存的物理地址
- 内存保护:各程序之间的内存如何做到不冲突
- 内存扩充:提供虚拟内存
- 处理机管理
- 作业调度
- 进程调度
- 进程控制
- 进程通信
- 设备管理
- 缓冲区管理
- 设备分配
- 设备驱动
- 设备无关性:方便编程使用
- 文件管理
- 文件存储空间管理
- 文件操作
- 目录管理
- 读写管理和存取控制
- 用户接口
- 命令界面
- 程序界面
- 图形界面
操作系统的特点:
- 并发(宏观上的,与并行相区分)
- 共享
- 异步
操作系统的类型:
- 批处理系统:单道+多道(作业)批处理系统
- 多道批处理系统虽然多个作业成批进行,但是缺乏与用户的交互性
- 分时系统
- 分时:若干并发程序对CPU时间的共享
- 多个用户终端共用主机
- 特点:
- 同时性:多个用户同时使用
- 交互:用户可控制程序的运行
- 独立:用户感觉不到其它用户的存在,感觉自己在独立使用计算机
- 及时:计算机对命令及时响应
- 实时系统
- 响应时间更短,比分时系统的“及时”更为“及时”
- 特点:
- 专用
- 实时
- 高可靠
- 个人机系统
- 分类
- 单用户操作系统
- 多用户操作系统
- 分类
- 网络操作系统
- 多个主机通过网络互联
- 特征
- 分布式
- 自治性:各台主机可自行运行
- 互连性
- 可见性:知道对方计算机地址
- 分布式操作系统
- 特征
- 分布式处理
- 模块化结构
- 利用信息通信
- 实施整体控制
- 特点
- 透明:不知道资源位于何处
- 灵活:得益于模块化结构,系统的修改很方便
- 可靠:一部分发生故障并不影响整体的使用
- 高性能
- 可扩充
- 特征
win7下同步播放麦克风声音
作者:shosh 日期:2009-11-13
在windows 7 下,如何让麦克风的声音直接从电脑上的扬声器输出呢?
右击任务栏角上的小喇叭,选择Recording devices(录音设备),可以看到下图窗口:
如果不能看不到上图中的麦克风和立体声混音,在窗口内部空白处右击,在弹出的右键菜单中选中"Show Disconnected Devices(显示未连接设备)"即可。
以下几张图是麦克风的属性设置:

此处关键,usage必须选中“Use this device (enable)”(使用此设备)

此处关键,必须选中“Listen to this device(监听此设备)”。其实原理就是监听麦克风的输入,通过回放设备(扬声器)进行播放。以后要不要播放麦克风的声音,就是在这里控制切换的。


如果按照以上设置,你就可以对这麦克风说话,你的声音就直接从扬声器上播出了。只不过效果肯定没KTV的好,它会有一定的滞后(不过不怎么严重),用来说话扩音是没有问题的,如果是K歌的话,可能会影响你的发挥。
再说strcpy + 面试中的算法题笔试
作者:shosh 日期:2009-11-06
strcpy这个函数是很考验一个人的,其实很早(大二的时候)就看过林锐的《高质量C/C++代码》,里面对strcpy做了很详细的分析,以及哪些需要注意的地方。
其实C语言课上的时候,老师也分析过strcpy,甚至老师将该函数体的循环部分简化为一个语句。另外,本人也一直对自己的编码风格、C语言和一些比较常见的算法都很自信的,不过今天自己写了strcpy()这个函数,回来后发现自己还是载在了这个上面(其实也不是太影响面试结果)。反省一下!
当时写strcpy函数的时候,有几个没有记清的地方的:
1、strcpy会不会主动给strDest的末尾加上'\0',当时当成不加了来处理。
2、参数是否该去检测NULL,因为strcpy作为比较常用的库函数,感觉程序员理应为主动为其保证正确性(现在想起来林锐当时好像用的是assert),不过我们写嵌入式的好像不怎么习惯用assert,也可能是我个人的情况。),即使可以保证指针为有效的地址值,也无法保证strDest分配的空间是足够的。不过这个判断语句还是写上了,因为写上去至少不会说是错。
3、其他错误(如果调试运行一下就可以发现)。
不怕丢脸,贴出我写的那个错误版本的strcpy函数:
- char* strcpy(char *strDest, const char *strSrc)
- {
- char *p = strSrc;
- if (NULL == strDest || NULL == strSrc)
- return NULL;
- while ('\0' != *p)
- {
- *strDest = *p;
- strDest++;
- p++;
- }
- return strDest;
- }
函数中申请了临时变量p,不过没有用它来存放strDest。当初只想着把传入的strDest返回去就好了,结果忽略了过程中把它移动了。所以,其实这个是最大的错误,但是调试运行一下是很容易发现的。当时给strSrc设置了个变量的原因是因为const,其实我知道这里const修饰的是char*,也就是说地址strSrc指向的那片空间的数据在本函数中是不可以去修改的。但是当时也是为了“双保险”,就来了个char* p = strSrc; 。实际上这句话是有warning的,如果当时调试了,估计就把它删除掉了(因为我更讨厌强转,且这句话是非必须的)。









