PyS60 in Emulator

最近在看Symbian的一些资料,目前可以在Symbian平台上使用C, C++,Java和Python进行开发。在使用Symbian在运行Python的脚本程序时需要安装PyS60这个程序。在使用C++和Java进行开发的时候,可以使用Symbian SDK中提供模拟器进行测试,PyS60同样也可以,这里介绍一下PyS60在Symbian模拟器的安装方法。

首先,需要下载PyS60,下载时需要注意选择和Symbian SDK相同版本的PyS60安装包,我使用的是Symbian SDK第五版,目前在Sourceforge上找不到针对这版SDK的PyS60,可以使用第三版的代替。我下载的版本是PythonForS60_1_4_5_SDK_3rdEd

image image image

下载完PyS60的软件包后,将其解压到SDK的epoc32目录中,启动模拟器既可以使用模拟器对Python进行测试了,这里值得提到是,我们可将已经写好的Python脚本复制到\epoc32\winscw\c\python目录下,这样就可以在Python的Run Script中找到需要测试的Python脚本。

RP开始爆发

这两天RP大有爆发的迹象,昨晚上跟朋友刷YX塞泰克乌鸦坐骑,很是意外的刷出来了,这也算是弥补近60次刷DK马未果的一点点补偿吧,这里特别感谢我的战友,老泡,穆和秦宏伟。

1075397_40596796

昨天的好运气今天还在延续,上月向修改GPRS套餐,登录移动自服务站点,但是由于资费问题没有修改,今天收到移动的中奖短信,中了二等奖40元,哈哈,有点歪打正着的感觉。

BREW的客户端昨天也写完了,第一个完整的手机客户端,很开心。

2008记忆

2008年还剩下几个小时了,这一年发生了很多值得记下来的事情。

记得2007年对2008年展望有将mSpaces做好,的确我们尽力了,但是在完成一期的任务后,我部门不得不将即将得到的胜利拱手让于他人,现在心中还有种种不甘。

2008年要说最震惊的事情就是5.12大地震,当时我正在办公室处理mSpaces位数不多的几个MR,突然觉得头晕目眩,开始以为自己的身体出现了问题,大概过了10秒钟,才意识到是地震。慌忙的跑到安全通道,但此时安全通道已经堵得水泄不通,还好北京不是地震的中心,否则这个安全通道将会变成最“惨烈”的地方。再次为地震遇难的同胞默哀。

2008年5月27日,这天终于和GG正式注册成为合法夫妻,那天去大兴的渔公渔婆吃过饭后,GG便和我分开了,在车上看着他的车渐渐驶出我的视线,心中些许酸楚,呵呵,现在我们天天在一起。

2008年6月27日,早上怀着兴奋的心情去收房,盼了一年的新房终于可以堂堂正正的进去了,呵呵(之前我们都是越窗而入)。房子收了紧接着就是紧张的2个月装修,那时候天天盼着房子能早点装好,每个周末都去看工程的进展,真是傲人呀,还好2个月后我们新房终于搞定,哈哈!

2008年10月26日,我们的婚礼,那天过的很轻松,也许是之前准备的比较充分,我和GG表现都不错。第二天我们便飞往三亚,在三亚度过炎热,幸福的5天时光。有机会还要去,菠萝蜜,我的最爱,哈哈!

2008年12月16日,这天是我觉全年最不爽的一天,早上开会宣布部门要裁员,大家回到自己位子上等着“死刑”的宣判,一个又一个的战友相继离去,心情差到了极点。三年的时光,我们共同“战斗”过,项目的失败不应该用这样的方式解决,因为大家都努力过了,奋斗过了。

当然2008年还有奥运会,虽然轰动世界,但我觉的只是一场秀,一个全民体育的国家和一个精英体育国际,还存在很大的差距,奥运会我觉的是不过好似一场显示精英体育的秀。

2008过去就过去,不管是快乐的,还是悲伤的,我想相信希望永远都在未来,而我也会为了自己的理想继续奋斗到底。2009我准备好!

生活渐入正轨

前一段时间可谓忙上加忙,完成了自己的终身大事,去了祖国大陆最南端,可谓算生活慢慢进入正轨。

昨天发起了我们暗影之月爆裂军团后宫队的第一次线下活动,第一次看见老泡,没见老泡之时,他给我的印象就是那个高瘦高瘦的暗影精灵的形象,想不到初次见面和想想中完全不一样,很敦实很憨厚,呵呵!血云雨也比想像的要胖很多,呵呵!不过还好大家玩的聊得比较开心,希望以后还能有这样的机会。

SNC16197

今天陪岳母大人来后海这边做体检,老婆没怎么来过后海这边,正好有机会带她逛逛。地安门的秋栗香还是异常的火爆,早上就要排长队购买,索性一次买了4斤一次吃个够,哈哈!

从模拟器到Moto A860

《Hello Brew!》中介绍如何创建一个简单的Brew应用程序,并在模拟器上运行测试的过程。这篇文章介绍如何将Hello Brew这个程序运行在手机上。首先介绍一下所需要的软件:

  1. Visual C++
  2. GNU ARM编译器
  3. BREW Tool Suite

首先,安装GNU ARM编译器,安装好后需要配置环境变量GCCHOME和GCCLIBPATH。

GCCHOME = C:\GNUDE

GCCLIBPATH = C:\GNUDE\LIB\GCC-LIB\ARM-ELF\3.3.1

然后需要将C:\GNUDE\bin, C:\GNUDE\ARM-ELF\bin,C:\GNUDE\LIB\GCC-LIB\ARM-ELF\3.3.1加入到PATH变量中,因为还需要使用到NMAKE,所以PATH也必须包含NMAKE的路径,通常NMAKE的所在目录是C:\Program Files\Microsoft Visual Studio\VC98\Bin。

在配置完环境变量以后,我需要通过BREW SDK TOOLS生成Makefile,这一部非常简单在VC环境下调出BREW SDK TOOLS菜单, 单击GNU MAK按钮,这样我们就会在Hello Brew工程目录中创建HelloBrew.mak文件。

image

使用NMAKE进行编译,在进入到HelloBrew工程的目录中,使用

nmake -f HelloBrew.mak

进行编译,编译成功后可以生成HelloBrew.mod文件。

我们需要吧HelloBrew.mod,HelloBrew.mif文件复制到一个单独的目录中备用。接下来是要在高通的网站申请一个测试用的签名,请申请签名前需要成为高通认证的开发者,申请地址:https://brewx.qualcomm.com/testsig/testsig.jsp

测试签名会和测试的设备绑定所以需要提供测试设备的ESN或者IMEI或者MEID,我们这里使用ESN,Moto A860的ESN可以在系统信息中找到,输入ESN时需要在前面添加0x,如下图:

image

输入Application Name和ESN后,点击Generate,这是会提示下载sig文件。下载的sig文件名默认为HelloBrew_esn.sig,将其和HelloBrew.mod,HelloBrew.mif文件放在同一个目录中,并将HelloBrew_esn.sig的文件名修改为HelloBrew.sig。至此我们的程序已经准备好了,接下来是将程序上传到手机。

上传手机的这个步让我折腾了很久,开始使用三星的一款W569的手机,驱动程序安装后发现无法使用Brew Tool suite上传应用程序,后来得知该款手机的Apploader端口被封掉了。

在一个朋友的指点下我们选择了Moto A860这款手机的Apploader端口是开放的,安装好驱动后还需要将A860的测试模式打开,打开测试模式需要通过一个特殊指令才能进入,进入方法:

menu+073887* 密码000000

注意这些键位要连续按,进入预设菜单后找到Get It Now配置,进入后里面有一个测试的选项,将其设置为已启动状态,这样BREW的测试模式就已经打开了,要是没有打开BREW的测试模式,我们的上传程序并重新开机后,上传的程序会消失。

手机设置好后,就可以使用BREW TOOL SUITE中的Apploader上传程序了,手机和电脑正确连接后,打开Apploader,选择对应的通信端口和手机BREW的版本点击ok,Apploader就会自动的读取手机EFS上的BREW目录,我们可以通过Module菜单中的New选项上传我们的应用,如下图:

image

通过Browse选择HelloBrew.mif, HelloBrew.mod和HelloBrew.sig所在的目录,然后在Specify Module Name to Persist on的输入框中数据程序的名称,我们输入HelloBrew,然后点击ok,Apploader会将我们的程序上传到手机上。关闭Apploader,断开手机的数据线,重新启动手机,然后进入神奇宝典菜单,这时你就会发现HelloBrew这个应用程序,点击ok既可以运行。

即此我们便完成了从模拟器到真实手机的一直过程,在这里要特别感谢xiehaiduo同学给予我的大力帮助。

Hello Brew!

看了很多天BREW的教程,今天发一个BREW中最简单的实例Hello Brew。要想成功编译和运行这个例子,需要如下软件。

  1. Visual C++ 6.0
  2. BREW SDK
  3. BREW SDK TOOLS

BREW SDK TOOLS提供了一个VC环境下的插件,可以生成BREW相应的骨架代码。安装顺序先安装VC6,然后是SDK,最后是SDK TOOLS。

完毕后进入VC,新建一个工程,工程类型选择BREW Application Wizard,然后在Project name中填写HelloBrew,单击OK。

image

接下来我们需要选择BREW程序需要用到的功能,这些功能包括File,Network,Database, TAPI/SMS,Sound,选择这些相应的功能后,BREW Application Wizard会在生成的代码中增加相对应的头文件。

image

接下来一步是创建mif文件,每一个Brew应用程序都需要一个mif文件,这个文件是BREW应用程序的入口,在mif文件中包括应用程序的表述信息如ClassID,图标,权限,作者等等。我们可以在下一个窗口中启动mif Editor。

image

在Mif Editor中点击新建小程序按钮,创建HelloBrew需要的应用程序。

image

单击新建小程序按钮后,我们需要创建ClassID。每一个BREW应用程序都会有一个唯一ClassID, ClassID是由高通公司统一负责分配的,我们需要向高通公司申请,申请之前我们需要成为高通认证BREW开发者,这个资格在国内可以向联通博路提交申请,既可以免费获得。若是还没有成为认证的BREW开发者,我们可以在选择本地手工输入一个ClassID,但是程序正式提交之前必须使用高通公司分配的ClassID,否则你的应用程序无法提交测试。

image

我这里使用从BREW Web站点获取ClassID的方式,在名称中填写HelloBrew,选择从Brew web站点,点击生成后,系统会自动启动浏览器,并打开ClassID Generator的页面,输入BREW开发者用户名密码后,进入如下页面:

image

输入ClassName,点击Submit,会提示下载一个名为HELLOBREW.BID的文件,我们将该文件保存在刚刚创建的VC工程目录中备用。然后回到Mif Editor窗口,单击搜索BID文件按钮,在弹出窗口中选择刚刚下载的BID文件。然后,在名称中输入HelloBrew,然后保存,文件名为HelloBrew,这里要注意文件名字要和工程名一致,这样在模拟器中才可以正常运行。退出Mif Editor,回到BREW Application Wizard,然后单击Finish。这时Wizard会自动创建骨架代码。

我打开HelloBrew.c文件,添加如下代码:

#include “HELLOBREW.bid”

typedef struct hellobrew_s
{
    AEEApplet a;
} hellobrew_t;

这个文件中定义了ClassID。然后再找到

int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
   *ppObj = NULL;
   if(ClsId == AEECLSID_HELLOBREW){
      if(AEEApplet_New(sizeof(AEEApplet), ClsId, pIShell,po,(IApplet**)ppObj,
         (AEEHANDLER)HelloBrew_HandleEvent,NULL)
         == TRUE)
      {
         // Add your code here .....

         return (AEE_SUCCESS);
      }
   }
    return (EFAILED);
}

将其修改为

int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
   *ppObj = NULL;
   if(ClsId == AEECLSID_HELLOBREW){
      if(AEEApplet_New(sizeof(hellobrew_t), ClsId, pIShell,po,(IApplet**)ppObj,
         (AEEHANDLER)HelloBrew_HandleEvent,NULL)
         == TRUE)
      {
         // Add your code here .....

         return (AEE_SUCCESS);
      }
   }
    return (EFAILED);
}

在HelloWorld_HandleEvent添加如下黑体字代码,

static boolean HelloWorld_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)

   hellobrew_t *pApp = (hellobrew_t *)pi;
    AEEApplet *pMe = &pApp->a;
    AECHAR szBuf[] = {'h','e','l','l','o',' ','b', 'r','e', 'w', '\0'};
    switch (eCode)
    {
      case EVT_APP_START:                       
            IDISPLAY_ClearScreen(pMe->m_pIDisplay);
            IDISPLAY_DrawText(pMe->m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0,0,0,IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
            IDISPLAY_Update(pMe->m_pIDisplay);

              return(TRUE);
      case EVT_APP_STOP:

         return TRUE;
      default:
         break;
   }
   return FALSE;
}

这样HelloBrew的程序就已经修改完成编译无错后,需要在模拟器中运行该程序。编译后会生成hellobrew.dll,这个就是我们的程序,接下来我们需要在将hellobrew.dll复制到一个名为HelloBrew的目录中,并将刚才生成的mif文件复制到和HelloBrew目录同级的目录中,文件结构如下:

│  HelloBrew.mif

└─HelloBrew
        HelloBrew.dll

启动Brew模拟器,在工具菜单中选择设置,然后选择mif所在的目录,单击确定,选择HelloBrew启动应用程序,如下图:

image

至此我们第一个Brew应用程序创建完成。

98分通过杀手学院第一次考试

昨天复习交规到今天早上3点,我采用的方法就是题海战术,一遍又一遍在网上做模拟考试,最后在把教材重头在开一次,再一次进行模拟考试破天荒的考到一个98分,看看表已经是凌晨3点了,虽然还有些不牢靠的地方,但是实在忍不住了,早上6点起床又从头看了一遍出发去往驾校。

考试前心理很是忐忑,生怕不能通过。大概9:10进入考场输入身份证和指纹,考试题出现了,一上来就是一个考罚款的题目,心想不是这么背吧,这可以是我最薄弱的环节,深吸一口气,选择了答案,然后一道一道回答,慢慢进入了答题状态,心情也越来越舒缓,大概12分钟后100道题已经全部做完,很想马上交卷,但是出于稳妥期间又倒着检查了一遍确认没有问题了,按下交卷按钮,98分!平了我跟人最好成绩,比较满意,当时真想大叫一声又怕惊扰了警察叔叔,强忍着兴奋出了考场。

杀手培训第一门考试顺利通过了,后面还有3次考试,我即将可以开车上路了,哈哈!

考试的感觉

记得上次参加考试还是2005年,那是每逢考试我都会秉灯夜读,暴补那些平时没要好好学,又不经常用的考试知识。本以为不会再有这样的事情,但是因为学车要考交规,这样的事情又发生。其实这次不应该怪我,主要是因为学校安排的时间太紧了,9章交规2天学完,而且考试定在4天后,还要上班,真不知道能不能把《安全法》消化干净,不过我自认为是一个谨慎的人(估计是因为胆子小),在没有充分领会《安全法》之前我是不会开车上路的。

说道这回考试,我在网上找了一些模拟考试的软件,这些软件大部分都是收费的,不过确实用起来比较方便,要是能有免费的就更好了,而且这些软件都需安装,有点不爽。考虑考完试后做一个基于Web的交规模拟系统,正好用这个小项目联系一下Python的开发,不说了,我接着去看书了。

8月22日辣界麻辣香锅

View Album

时间:2008年8月22日晚19点
地点:鼓楼辣界麻辣香锅
参与人员:荣荣,高珊,王伟,徐小静,徐晓冬,孙翔宇,孙哲,张良,郭宇,庞磊

日落

SNC14804

SNC14802

SNC14811

每天上班下班很久都没有看到这样的画面了。

PS:GG的NV10又把日期打印在上面了,不过我已经偷偷把这个功能关闭掉,下次就不会这么土,把日期打印在上面了

聚合内容