移动书店

参加了MOTOROLA的新亮点挑战赛,没有入围,还是写出来吧,算对自己有个交待。 做<移动书店>的主要原因是为移动拍卖平台做准备,现在这个也没法做了,唉。这个系统是spring+hibernate+j2me,数据库 用的是大象PostgreSQL 8.1,开始时候用的mysql,结果到最后出现BUG,郁闷了我好几天,还好大象能用。从33月份开始做,到5月末基本结束,6月看了个世界杯,到7月 实在不爱弄了,随便测试了几下,弄点测试用例,文档都是抓图。在整个过程中有几个难点的地方,大概1个是hibernate颗粒度和j2me的一致性问 题,1个是j2me做缓存于分页时的问题。隔太久想不起来了,边写边想吧。

首先这个软件要完成的功能是网上买书,类似在线购书的功能基本 上都可以实现,用户可以通过手机而不用电脑可以查书,买书,评书,可以下订单,查询订单,基本上满足了用户需要,完成度还是比较高的。没有对安全性做过多 的处理,1方面需要加密的数据十分少,2来做https的协议怕时间上完不成,本来想做完有时间就试试,结果赶上万恶的世界杯。。。开发环境是 eclipse,虽然官方要求用NetBeans,可没用过也不爱用,eclipse+eclipseMe+MyEclipse,myeclipse不知 道用到多少功能,用着用着就不好事了,后来都是ant解决的。

首先这是开始菜单,没工夫做9宫图,用个list了事,一样方便。
开始菜单
这里基本上是按照SmartTicket的套路,MVC,多线程,查询表,想必这些都已经是J2ME做软件的经典套路了。进入之后是两个进程,一个用Gauge显示进度,另1个做网络通讯获取数据。这里测试用例很简单,只分了几个类:

别看少,手工输入起来够我受的,各种数据。。。
然后得到图书列表,懒得找书,就用了一个原是数据做了循环

这个列表做了缓存。只在第一次访问时候到服务器取,后来都是到RMS。
选择一本书进入:

这里只选取了典型数据,像什么“字数”的就懒得做了。每本书都做了缓存。由于屏幕有限,所以书的信息可以做成用户定制,只选取用户关心的数据。这里没有实现这个功能,有所保留。

然后是详细的信息:

显示封面有些问题,下面再说。书评,勘误,打分,基本满足需要吧。

然后是查书:

挺好用的。当然可以做的更复杂,我这里做的不好,耦合太多,因为闲麻烦,针对hibernate翻页传递了几个参数,不通用,如果后台换掉hibernate,这里就不好弄了,下次改进,如果有下次的话。

购物车:

购物车里的项显示起来比较别扭,当买了几本书的时候,名字又长,数量和价钱就会显的很乱,用ChoiceGroup也没有更多的办法。

查询订单:

自己YY的订单形状,可能这些信息够用了吧。买过的书也都有记录,可以查询,跟这个类似,就不贴图了。

书店信息:

把 焦点放在电话号码上理论上是可以拨号的,不过模拟器不支持,不知道烧到手机中能行不。用了缓存,因为想到用户如果是到银行汇款,那么打开手机查看书店帐号 的时候,如果需要上网可能没有信号,所以做成脱机的,可脱机的不知道书店什么时候会更新导致数据不一致,所以加了一个“更新”按钮,手动更新。由于 http连接没有推技术,不能自己更新,只好这么做,当然要用注册机的话比较先进,可我费劲。要说可以用注册机的地方多了去了,书店发货的时候可以发一条 通知手机开机,要不发短信也行。如果现实应用的话,很多地方还值得推敲。

书店新闻系统和系统属性:

做的很简单,要复杂的可以用走马灯在顶上做广播,属性也可以做得细点,包括上面说得用户定制书目信息。

用户注册和登陆窗口:

注 册的邮编地址什么的在提交表单的时候会自动填入,在涉及到个人信息的时候都会要求先登陆。这里如果不是自动登陆,那么手机不会保存任何用户信息,所以说是 非常安全的,除非你刚登陆手机就被人抢了。如果是自动登陆,当手机丢失的之后就处于不设防状态,个人信息,电话,住址什么的都是存在服务器端,但这时密码 还是安全的,得不到密码只能使用也不能更改,如果有个GPS什么的就好了,可以把小偷的位置传到服务器,没准还能抓到。当然要改进这个也非常容易。比如加 开机密码,到服务器端验证,那么即使别人捡到手机,也进不去。所以这个系统没有做本地加密,因为我找不到需要加密的数据。要说不安全,只有连接不安全,用 https就好多了。计算方式这里比较模糊,如果是传统的到邮局到银行汇款那么没有任何问题,如果是直接通过手机进行银行转账那么就需要很小心,这里我没 有做这些东西,因为我不清楚到底会是怎么转。如果把个人信用卡存在本地,那么会危险一些,即使加密了;存在服务器端用户自己不放心,书店也不放心,所以这 个基本不存在可能。所以我试想会不会有种手机钱包什么的,对应到手机上,然后让客户输入手机银行的密码进行转账,这样可能安全些,但具体是什么样我也不清 楚,就想象了一个“手机转账”。平时没消费的习惯,对这些不了解,可能已经有一些合理科学的方式存在吧,呵呵,当然一切都是建立在连接安全上。

j2me本身很简单,这里看图就可以知道大部分情况,里面复杂的地方就是缓存。如果只是单独做一下缓冲那么很容易,但为了保持数据的一致性使事情复杂起 来,有些时候不禁要问,这个到底用不用缓冲。开始的时候觉得可以为用户省钱,什么都 缓冲,后来考虑分页的时候,对缓冲的算法提出了更高的要求。首先很多活动使需要验证用户是否登陆,这里又分成几个步骤,首先在一个全局变量中判断是否登 陆,如果没有登陆在系统属性里找到是否自动登陆,如果是自动登陆那么需要到RMS中找到相应的位置,提取用户名和密码,那么还要判断这个用户名和密码是否 有效,如果无效则转到登陆界面,重新登陆;有效就用这个在背景里练到服务器验证。如果 没有登陆还需要注册那么就先注册再登陆,然后再回到原始菜单,这里有个栈记录窗口顺序,为了可复用性这里需要很好的设计每个窗口。这里懒得用UML图了, 因为我可能转行了,连程序都不写了。不行,有MM上线了,有时间接着写吧。

谁杀害了马里奥

最近复古风行,接二连三玩了大把上世纪90年代的游戏,不禁让朕心中澎湃。想起来小时候最看不起的小游戏“超级马力”竟然一度是最佳。我总是站错阵营,初 3时候我郑重其事的跟同学说,JEFF的《梦想》这张专辑最难听,后来有了INTERNET知道了原来这个是最好听的。大学时候煞有其事的跟别人说, SERVLET太垃圾,现在明白了,它是最重要的。这次看来我又站到了真理对面。可我不禁要问,谁他娘的杀害了马里奥?
别人不知道,小时候在我们的那个圈子里,谁玩“超级马力”谁就丢份,让人知道了出门都不好意思跟人打招呼。为什么?因为那是“小”游戏,不懂游戏没玩过游戏的小孩崽子和丫头片子才玩。上世纪80年代是个缺乏物质的年代,我上2年级买的“小霸王”游戏机,即使到它阵亡那天,伴随它饱经沧桑的一生也只有2盘带。第1个是买游戏机带的“9999合1”,另1个是“20人街霸”,“快打3人组”和一个拳击格斗游戏的3 IN 1。我曾无数次的想央求父母,再给我买1个吧,我期末真能考第1,可鼓足勇气仅有的几次却别拒绝了,我心里知道这事本来就没有悬念,“有1个玩的得被, 100多挺贵的”。当时我国尚处于具有中国特色的社会主义初级阶段,不可否认周围的儿女没几个家境富的可以要什么买什么。不过这个社会给了我无法代替的礼物,亲密玩伴。大家几个人互相借着玩,要是听说谁谁不知道从哪哪弄来了新卡,也甭管多远,当日肯定是要造访的,一般情况是自己没玩热乎呢,先得拿去给兄弟爆机。可大部分时间我们都是仅有的几盘卡翻来覆去的玩。我们最喜欢的是4合1,因为多半是新鲜的或不新鲜的大作。这种说法似乎又是从现在的角度来评价,那个年代像样点的都是大作,当然除了9999 IN 1。其实本来我最看中的是单卡,我认为游戏的质量跟一卡中带的游戏数量成反比,只有单卡才是独一无二的宏篇巨制。可没办法,现实生活不容许任何超越现实的幻想存在,同样的价钱,谁也不想只买1个游戏,最理想的选择就是“4和1”,即不是 3 IN 1 也不是5 IN 1。那会不知道谁开始传的谣言,说集齐100张红屁股的金丝猴奶糖糖纸就会换1盘“4IN1”的游戏带。买不起1毛钱的糖,我和我的一个叫”王强 “的哥们放学就到处溜达去拣别人吃完的糖纸,记得每天回家都很晚,手上充满了泥土和各种气味,可我每天都要和王强讨论一下这4个游戏都会是什么,有意思的是几乎每天都不重样。这事开始就是扯淡自然也不会有什么结果。总之,当时大家再怎么穷困潦倒也没有人去借9999 IN 1,因为大多数儿女买机器的时候自己都会带,没有的也通过各种渠道玩过,之后再也没有兴趣了,呵呵,很不幸马里奥每每就在其中。9999 IN 1,几乎每10个游戏就有1个马里奥,小时候我不明白为什么要有这么多马里奥,真的好烦,留1个把那些重复的都换成不一样的9999 IN 1该多好。第1个马里奥是从第一关开始,第2个马里奥是从第2关开始。。。。。。最后我也弄不明白几00个马里奥怎么安排的。即使这样,这游戏我也从来没有爆过。要说游戏难归难,可其实那个年代是不怕难游戏的,我们爆的就是难游戏,你不行了游戏卡赶紧换我,每次1听说谁谁先把什么游戏爆了,在我们圈子里就牛B烘烘。可据我所知,周围的人没有爆过马里奥的,根本就不屑于去玩它。听到谁谁家长只玩这个还挺厉害,能到哪哪关,我们都付之一笑,完事拉倒。可要是你把“变形坦克”爆了,你就牛B大了,因为这游戏当时在我们那流传时,每人只能留1天。可今天都给马里奥叫好,我就有点蒙灯了,这世界怎么了,难道我们都 SB了那么多年么?
现在我想,如果当时马里奥不是在 9999 IN 1里,如果它跟“变形坦克”换换,结果可能就不一样了。要是这游戏不泛滥,要是这游戏只有单卡,要是每人只能留半天,大家可能就会钻研了。什么东西再好,如果不去了解它,那么等待它的只有傲慢与偏见。我想只要大家认真玩了,就会被它超高的游戏性所吸引。小时候我常能听到周围会有人把哪个游戏说的神乎其神,就因为他这辈子只摸过那么两下,而我们更是谁也没玩过。其实呢,游戏本身可能并不近如人意,只是因为那个缺乏物质的年代,一个年代的一种精神。这不像现在,什么游戏是好是坏,大家每个人都可以花几两银子买张D盘,或者直接DOWN一个,盘都省了,都可以自己尝尝梨子的味道,是酸是甜谁也唬不住我。可同样是这个物欲横流的时代,3分钟,我只给你3分钟,没感觉就TM给我靠边站,换盘!浅尝则止不求甚解可能又是这个时代的游戏精神。没有重度,游戏的难度被永无休止的升级来代替。以前玩ACT,玩的是那种瞬间出手的判断,成王败寇决定于转瞬之间,稍有怠慢满盘皆输功亏一篑从头再来,那种不屈不挠那种大彻大悟的狂悲狂喜都随上个世纪滚蛋了。现在我看见人们玩动作类游戏随意的蹦达,甚至有的游戏闭上眼睛狂按一个钮都能过关,完全不在乎生命值,冲了1会觉得单调没劲骂了几句娘之后换盘。这似乎又不光是玩家自己的情绪,游戏设计者也逃不了干系。
如果说以前是D版商杀害了马里奥,可以说是其名头太大,怎么不是ZELDA?当时中国就做马里奥。可现在D盘在杀害谁,谁在杀害游戏。我不知道,我还是那么穷,我买不起PS2,XB,GC更别提将来的什么 3,什么360度1圈,什么革命了。我玩的游戏是越来越少了,可能更多是因为亲密玩伴的消失。现在玩90年代那没有华丽CG包装的游戏,仍然感觉得到精良的制作,时而还会回忆起当时和小哥们的故事。只是,当初的感觉确是渐行渐远终不可见了。也许,我的圈子只是一个缩影,也许别人的圈子里只玩马里奥,也许马里奥只是在我的圈子里被杀害了。可一切真相终不可知,毕竟那都是别人的圈子。