本站动态:
正则表达式工具更新,支持使用替换函数
作者:shosh 日期:2009-08-06
shoColorCode代码加亮程序更新记录
作者:shosh 日期:2008-07-18
代码排版中的缩进和行长
作者:shosh 日期:2010-04-25
代码的缩进主要使用两个字符:tab键的缩进(\t)和空格。而对于到底使用tab还是空格,目前基本上没有形成统一的说法。使用tab的好处是需要缩进的时候,程序员只要敲一下tab键即可,而且多数程序员(包括我)都比较习惯使用tab。缺点是:tab的宽度是可变的。正常情况下,一个tab的长度是8个普通字符的宽度,而习惯上,我们认为用4个普通字符的宽度作为tab的长度是比较理想的,大多数代码编辑器都可以设定tab的长度。而空格除了缩进比较麻烦(得敲多个空格键),在对齐上比较容易。
另外还有一个问题,如果使用tab,在不同的编辑下显示的效果不同。比如在VC下排版得很好,可是用source insight或者Clear Case里的Merge工具打开,发现排列不整齐了。这个事情真的很头疼,所以有人(公司)就直接规定不许使用tab,只使用空格缩进。不过这样做对开发者来说确实是烦人的事情。
MainMenuWidget简介
作者:shosh 日期:2010-04-23
之前开发了一个MainMenuWidget,主要用于主菜单的12宫格。它具有以下功能:
1、宫格数可以由用户确定,最大宫格数由宏由MW_ITEM_ROW_MAX_NUM和MW_ITEM_COL_MAX_NUM控制。工程中使用的MainMenuWidget支持n * m宫格(n <= MW_ITEM_ROW_MAX_NUM && m <= MW_ITEM_COL_MAX_NUM)的任意组合。
2、任意一个宫格都可以设置是否支持可选中状态。
3、可以有动画移动效果,也可以关闭动画移动效果。
4、每个选中的宫格都支持animation动画,也可以关闭该功能。各个宫格的动画帧数可以不一致,也可以设置animation动画的播放次数(0次到无限)
RFID代码编写问题汇总
作者:shosh 日期:2010-04-02
OEM层的作用主要是实现IRFID接口,该接口主要通过调用驱动提供的函数读取芯片里的数据。驱动在收到请求后做出处理,最后通过回调的方式将请求结果发还给OEMRfid,OEMRfid再通知上层Applet将数据显示到界面上。
OEM向Applet发送请求结果的方式,当时主要考虑了回调的方式、ISHELL_SendEvent和ISHELL_PostEvent。因为可选的方式较多,所以当初在设计的时候定义了一个宏来向Applet发送结果,这样一来可以简化代码,看上去更简洁,二是如果想选择另外的方式,不需要到处修改代码,而只需要将这个宏的定义调整一下就好。
copydir.bat: 拷贝目录及各级子目录下的文件到一个目录的工具
作者:shosh 日期:2010-03-14
背景:工作中,UI工程师提供图片资源是分目录放置的,可是提交给CM的时候却需要在一个目录下的,如果手动拷贝非常麻烦,而如果直接用COPY 或 XCOPY命令把文件从A目录拷贝到B目录,B目录还是会维持A目录的目录结构。昨天晚上手动写了一根批处理工具,正是用来解决该问题的。具体用法代码中也有,这里不赘述。
copydir.bat代码如下:
- :: Auther: Shosh
- :: Site: http://www.wscxy.com
- :: Date: 2010.03.13
- :: This bat copies all the files under a directory and all levels of subdirectories to another folder(no subfolder)
- @ECHO OFF
- SET DefSrcRootDir=.
- SET DefDestDir=.
- :FunBegin
- SET bConfirm=NO
- IF "%1" == "/?" GOTO FunUsage
- SET bHaveOption=FALSE
- IF "%1" == "/c" SET bHaveOption=TRUE
- IF "%1" == "/C" SET bHaveOption=TRUE
- IF "%1" == "-c" SET bHaveOption=TRUE
- IF "%1" == "-C" SET bHaveOption=TRUE
- IF bHaveOption == TRUE (
- SET bConfirm=YES
- IF "%2" == "" (
- SET srcRootDir=%DefSrcRootDir%
- SET destDir=%DefDestDir%
- ) ELSE (
- IF NOT "%4" == "" GOTO FunErrorUsing
- SET srcRootDir=%2
- SET destDir=%3
- )
- ) ELSE (
- SET bConfirm=NO
- IF "%1" == "" (
- SET srcRootDir=%DefSrcRootDir%
- SET destDir=%DefDestDir%
- ) ELSE (
- IF NOT "%3" == "" GOTO FunErrorUsing
- SET srcRootDir=%1
- SET destDir=%2
- )
- )
- IF "%destDir%" == "" GOTO FunErrorUsing
- ::confirm settings
- ECHO ================================================================
- ECHO Source Root Dir: %srcRootDir%
- ECHO Dest Dir: %destDir%
- ECHO Overwrite Confirm: %bConfirm%
- ECHO ================================================================
- SET /P choice=Start executing? [Y/N]
- if NOT %choice% == Y (
- if NOT %choice% == y GOTO FunCancel
- )
- ::check input directories settings
- IF NOT EXIST %srcRootDir% ECHO [%srcRootDir%] not found!!!
- IF NOT EXIST %destDir% ECHO [%destDir%] not found, we will create it.
- ::check source root dir before starting coping
- IF NOT EXIST %srcRootDir% GOTO FunPause
- IF %bConfirm% == YES (
- :: confirm overwriting
- FOR /R %srcRootDir% %%i IN (.) DO XCOPY "%%i" "%destDir%" /-Y /V /F /I /K
- ) ELSE (
- :: no confirm
- FOR /R %srcRootDir% %%i IN (.) DO XCOPY "%%i" "%destDir%" /Y /V /F /I /K
- )
- ECHO ================================================================
- ECHO Finish!!!
- ECHO Thank you for using copydir.bat written by Shosh!!!
- ECHO Welcome to visit my website http://www.wscxy.com
- GOTO FunPause
- :FunErrorUsing
- ECHO !!! Error using copydir.bat !!!
- GOTO FunUsage
- :FunUsage
- ECHO USAGE: copydir [/C] [source root dir] [dest dir]
- ECHO [/C] Confirm if a file needs overwriting. if not set, it will overwrite without confirm.
- ECHO If set both src root dir and dest dir to ., that means all the files in all levels of subfolders will be copied to the current folder.
- goto FunPause
- :FunCancel
- ECHO You've canceled executing.
- GOTO FunPause
- :FunPause
- ECHO ================================================================
- SET /P a=Press ENTER key to continue...
头文件的部分规则:重定义相关
作者: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.









