More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  钻进瓶子的生活(技术版)PhotosProfileFriendsBlog Tools Explore the Spaces community

Blog

8/1/2008

Free Sync,信息时代的基础

  电脑、网络发展普及到现阶段,基本上处于需要变革的临界点了,所谓信息时代,也就是这么个意思,当然,目前国内大众主流用户的电脑网络应用思维还停留在上世纪——网页、网游、电影音乐、聊天……这与国内IT企业不敢做出头鸟还是非常非常非常有关系的,而国外作为技术思想创新高地的高校,在国内却也变质为考研机器或者比赛专业户,不敢指望了:)

  想出头,是要有资本的,要创建标准,不过目前国内出的几个强制标准无非是被少数特权企业握在手里向国家索要项目基金和政策保护伞的筹码,离全球化标准甚至是国内的工业级标准还有好长长长长长长长长长……的路要走,等着吃国家政策性救济粮和扶植性采购的标准,一点经不起市场的选择,普通用户只会跟风选择好用的产品,动不动拿民族主义大帽子扣在市场中的产品上,有点过份了~~

  信息时代最值钱的是信息,说白点就是数据,电脑里的、手机里的、PDA里的……而不是硬件和软件,所以现在微软面对Google有困惑Vista推不起来,性能那么差的EeePC卖的那么火,Linux和Firefox接受度越来越高……
  但目前就是有好么些个人,只看到一点皮毛就开始以为自己开窍了,大呼云计算云服务Web 2.0,于是从博客开始,国内一窝蜂的上马博客,播客,视频共享,仿Digg,仿Twitter,仿Facebook,Myspace,仿Ajax做Web2.0,还有就是铺天盖地的软文,今天那个概念明天那个盈利模式……
  结果死字怎么写不知道,这些目前国内推广的热火朝天的Web2.0应用,在国外基本都找的到模板,而且是比较成功的——当然也有一些原创性的,但受观注度和资金问题就比较大头了:)
  当然,目前也有许多在BS这些Web2.0业务的,一般都是从技术角度和发展钱景在讨论,从技术角度来看,这些各种新名词的框架和协议标准,都是建立在N久前的Javascript、Html和XML基础上的再次封装,的确是没什么高深之处,而这些应用的基础就是数据与业务与平台的分离,数据完全独立共享,所以,按之前的观念,用一个网站吸引流量和访问量来赚钱的商业模式被打破了,所以也没钱景了,于是——
  国人的聪明才智开始发挥作用了,打着Web2.0旗号下的各大应用,数据却是封锁不开放了,以把用户锁定在自己网站上为自己创建流量访问量赚取广告费为前提,得,所以我说目前主流应用还停留在上世纪——虽然这些网站肯定不承受,它们肯定都在宣传我是Web2.0 ^_^

  于是,信息时代的到来又因为商业利益被人为推迟了,因为数据的自由传输共享被限制了,你可以看到国内仿国外的一些在线应用,比如在线图片,文件,博客之类的,这些应用中本该独立于业务、厂家、平台,能自由转移的数据,被人为限制只允许本地使用,不能自由转移——比如网易的网盘相册只能登录后使用,腾讯的博客甚至只支持Windows和IE,更不用说转移博客了,而且还天才地发明了空间增值服务收费了,呵呵,老外笨,当然想不到还能这么玩哈 ^_^

  而同阶段老外不赚钱在烧钱干什么呢?Google,Apple,Microsoft三个大佬在干嘛呢?
  M$一直在宣传Live概念,不过目前在国内推出的业务里还看不出个名堂,特别是一些业务只是界面翻译成中文,使用方式还是老美的,国人绝对不适应哈~~
  Google,一系列的在线业务,在拼命做在线应用,宣传云计算搞Andriod开放手机平台~~
  Apple,iPhone之后玩MobileMe云服务,大推AppStore~~

  综合起来看一下,其实在做的都是一件事情——虽然目前从非技术角度可能还看不出头绪——把数据独立出来,在线化,无缝传输同步:
  Apple的Mobile最直观了,宣传里说的很清楚,让你的邮件,联系人,日程,照片,文档文件实时在你的多台电脑手机间共享同步;
  Live在M$在推出这个概念之前就说过了,操作系统网络化,N年前说的了吧,当时SUN在搞硬件平台无关性时M$就说了,搞什么软件跨平台,直接软件数据全部网络化不就得了,呵呵,不过换了领导人,说法也一直在变也没人记得了,.net大家应该知道吧,当时宣传时就那个意思,不过大家现在只知道Windows在搞垄断,其实M$还是在秘密研发,只不过大家不知道,Vista只不过是个半成品没搞成,当然,WM虽然速度慢的让人发疯,不过为了与Windows协同,M$也只能做到那样了~~
  Google现在的Web应用够多了吧,为虾米搞手机开放平台?和Apple一样的想法而已,要做到数据的无缝共享同步~~
  这么说完,可以看出来了吧,三家都准备要有自己的PC(终端)、服务器(远端)、手机(移动终端)操作系统和软件平台(Google一直和开源关系不错,Linux也是它一手扶持着的,可以算是它家的,呵呵),再加上三家一直在推广的各种标准化协议,也就是说,它们任一家如果做大做成,那就是覆盖了五年、十年后你家里车里的电脑、手机、家电等等所有数字终端甚至是你身体上植入的数字芯片的一切,当然,只限于标准,我从来不怀疑国人在国际标准下研发的产品的质量,但人,国人将继传统工业标准、旧的信息技术标准之后,再次丢掉了新的信息技术标准。

  在PC x86架构,网络互连标准等信息技术的基础层面丢掉了话语权,如果在应用层面也丢掉了,那在信息时代,国人只能是照搬别人的标准,跟在别人后面跑了~~
  搞技术的国人同行,如果还抱着我的技术你别用,你用我就不用的观念,成天在那自创“标准”——其实就是把真正的国际标准改一点并且不让别人知道让别人和你互通不了,就开始宣传自主创新了,那永远都只是IT小作坊,成不了气候——当然,这与国内的法律不健全,对自主创新的技术保护不力打击真正的创新积极性也是有着巨大的关系的,但是如果脑子里连一点意识都没有,那就悲哀了~~

要搞清楚几点:

  • 博客不是个人主页,数据要可移动——随时随地可书写读取推荐
  • 播客不是盗版电影电视集散地,要与各种终端互动——包括制作和使用
  • 网络存储不是就存个文件就完整了——要方便地在多种终端间同步
  • 在线应用不是把桌面应用搬到Web上用Ajax做的好看就完事了——里面的数据要兼容在线和终端  

原则上就是,当PC机能做到大型机能做的工作时,电脑时代就到来了,当随时随地在不同的PC不同的数字终端上能做在一直蹲在PC上做的事情的时候,信息时候也就真正到来了——
当然,要方便易用才行,B/S应用早就出来了,但只有Ajax应用人家才叫它Web2.0,Web应用程序,典型的我正在用的例子:

  因为Hotmail和Live Messenger能做到实时Push Mail和所有WM终端上能用而且功能不缺失,我才会去选择Windows Mobile手机和Windows Live服务而不是Sybian手机和网易邮箱或Gmail——虽然WM手机慢的我想砸它,Hotmail慢有时还不能访问;
  因为Picasa能做到客户端与Web应用无缝照片同步,Web浏览与桌面软件浏览、手机浏览操作习惯一致,我才会用它而不是用网易相册或其它的一大堆在线相册网站——虽然它们容量更多更快速更漂亮;
  因为Google日历Live日历能做到任何电脑或手机都能随时维护数据且操作界面比桌面软件还要方便,并且能使用LiveMessenger或邮件进行提示,这里又要提到前面说的Hotmail的PushMail实时邮件接收,所以也能做到了日历事件的实时提醒,这就是我为什么不用Outlook的日历或其它的一大堆桌面日历软件的原因——虽然它们可能还更漂亮;
  因为Google Reader能在Iphone,WM手机上IE上Firefox上不同的电脑上都保持漂亮的RSS阅读界面和一样的数据内容,所以我不用其它的RSS软件或模仿跟风的网易QQ和Yahoo的订阅服务——虽然现在从邮件客户端到各种浏览器以及插件包括一大堆独立的软件,都提供RSS订阅功能;
  ……

  随着技术的进步,你的电脑会越来越多,拥有“电脑”功能的终端也会越来越多,传统的Windows操作系统加本地磁盘使用软件的方式会慢慢被各种灵活的终端上灵活的“软件”替代,所以强劲的电脑配置和Windows操作系统不再是必须的了,定制的Linux包括其它嵌入式操作系统甚至直接就是一个嵌入式软件,共享你的全部数据,在合适的终端上处理合适的数据但随处都可以查看使用是趋势——
  理想的情况会是,你在路上用手机或更先进的终端生成文字、图片、声音的数据,回家后用PC上的软件进行处理,你可以在电视上,路上,朋友家中随时查看分享它们,在游戏机上没玩结束的游戏,在路上能进行简单的任务查看和简单游戏数据的维护和分享,协助正在游戏的朋友,使用身边的便携终端临时处理手机上收到的通知里描述的工作任务,取出几天前在公司时未处理完的一个文件进行处理更新,并找到家里几天前打的一个电话号码进行联系,回家后能对录音进行回顾处理……
  ^_^ 其实上面这些以目前的技术手段完全可以实现了,但需要众多厂家的技术的协同工作以及基础设施的进一步进步,所以,需要象当年的M$一样的领袖:)

7/8/2008

目前超值的EeePC 2G surf及Netbook简单分析

  注:仅针对特定用户有参考价值,购物时无主见者、购买后由于应用定位不准或期望过高乱拍砖者、以及某些职业枪手请绕道。

  截止到发文时间,Eee PC 2g surf目前行货价格两千左右(某宝上的华硕旗舰店是2099,其它比它高点低点的店铺都有,不过实体卖场里应该都清货见不着了,只能网购,比4G surf的两千五,带头的两千七八左右的价位还是低了一点的哈,虽然不多,但因为偶本来是考虑入Atom 8.9屏的,但各厂家一直不大量出货,出货的价位一直稳定在四千以上甚至近五千且短期内不会落,SO先入个便宜的,越便宜越好的用着先,看看用着适不适应,以免浪费哈,而且偶也不想改装,所以它适合我,但不一定适合其它人了哈);

  2G surf的型号是700,不是701(4g,4g surf,702是8g的),且只有surf系列有彩色外壳(偶入了个蓝色的,其实绿色的更PP但基本上被抢光了),内存听说是512M焊在主板上的(未验证),CPU是800M的,并且锁在571M上且EeeCtl不能用,SetFSB也不能用,就是说不能超频(已验证),对于某些想买来改装升级的,基本上可以不用考虑它了哈,除非操起电烙铁:)

  自带的Linux不太好用(开机一二十秒,精简版Win则大概是四五十秒),速度有点慢且占了近乎全部的空间,不太符合Linux轻巧快速的传统,花了一百左右入了个4G宇瞻Class6的SDHC(8g的贵一倍半,偶也不用着这么大,多媒体用ipod~~),考虑有时间换成Ubuntu用,先换上深度的精简系统,网上的一些Ghost完整系统不能直接用(一般这些Ghost文件里的分区信息都是4G适用的,且数据描述超过2G,目标磁盘因为只有2G不让恢复),浪费了不少时间下那个五六百M的文件,后来换用那个Ghost的精简系统安装镜象(两百多M,下载比较方便了哈)恢复到磁盘后(几分钟),自动重启开始在磁盘上进行安装(速度当然就慢了,用SDHC大概三四十分钟),装完关掉休眠和交换文件占用900M左右~~

  有人可能怀疑571Mhz的CPU和512M的内存能不能正常用Windows,几天用下来,常用软件基本上没问题的,这CPU毕竟不是当年的赛扬,现在还用CPU频率高低来比较电脑速度已经不合时宜了(想当年用一台40M内存,1.5g硬盘的586学编程,Win98下,VC6和Apache+Php+mysql还不是跑的满骝的哈,SO,大家要有耐心,没耐心的人,酷睿双核都觉着慢^_^),解压输入法及Eeepc专用的一些基础软件(用了雅黑字体,宋体在小屏下累眼的)和驱动就不多说了(只说那个声音管理软件,可以从启动里把它关掉,占资源不说,默认打开的EQ导致播放音乐破音严重,嘿嘿,自带的音箱用来放网络视频还是不错的,应该大多数人还能接受),主要是装了几类软件:

  浏览器(IE6没动,Maxthon,Firefox3,Opera9.51)
  播放器(暴风3,千千)
  杀毒安全(Avast,360)
  网络通讯(MSN8.5,TM2008,迅雷,迷你快车,Bitcomet,eMule)
  日常工具(Xnview,WPS,UltraEdit,SecurCRT) 

  这种硬件条件下,Maxthon使用正常不过不太好用,Firefox3和Opera9.5要快点且更好用(关掉它们的磁盘缓存,全部由内存处理会更快些,不过其它软件就不要开了以免内存不足,不过至少偶还没出现过内存不足现象^_^,常用软件尽量装在磁盘上,SDHC卡速度始终不行的,只适合存文件,),其中 Firefox的自动记忆网页缩放和Foxmarks同步收藏夹比较爽,Opera的速度和自适应网页大小也不错(就是Google和其它的一些网络应用显示会错乱。。。)

  迅雷如果是由浏览器调用,在下载的时候自动关联并运行会很卡,如果要用的话最好是开在那吧,迷你快车还没用,不过启动速度应该会快的多,毕竟界面小没广告,BT和电驴理论上和CPU和内存没什么关系,用来通宵往大的SD卡里下文件应该还是不错的,毕竟功耗低又安静哈,台机和大本子的风扇绝对晚上吵死人~~

  MSN还行,速度能接受,不过QQ就不行了(用精简版应该可以),卡的很,换成TM,能接受,两个一起开再开浏览器,能接受~~

  Avast免费中文口碑还行,特别是它的网页监控有特色,不象其它的杀毒软件拖慢浏览器速度,用着还行,360大家都知道了,不开Win的更新,用它杀杀流氓和装补丁,至于一些常驻的功能全部关掉,嘿嘿~~

  WPS,占不到100M空间,免费功能全速度快,日常文档编辑查看完全够用(不能自动适应屏幕宽度有点不爽)

  千千听歌,要的就是占用资源少,比较开心的是,用暴风,移动硬盘里的所有视频都能正常看,甚至是从emule上下的HR-HD,HDrip都能正常放(虽然系统会卡其它都不能操作了,但视频还是流畅的),至于VGA级别和其它普及分辨率的RMVB,WMV,AVI就更不用说了,比同样要两千多的MP4要好多了哈(创新Mp4的预算可以省了^_^,创新哭吧~~)

  总结:

  日常网页浏览床头机,外出MSN,QQ(TM)以及文档处理,途中视频音乐图片娱乐、相机数码伴侣,适用。

  至于其它用处,各人看着办,能用鼓掌开心,不能用也不用急,就当是买了个带Wifi的Mp4,再说了,功能比那个要强多了吧;

  另外个人意见,目前8.9的性价比太差,至于10寸的,个人感觉太大了,接近12寸标准机了,重量上虽然从1.0kg以下到 1.2甚至1.4从数字上看变化似乎并不大,但要知道,你的手机多少克重的?下面我不说大家应该明白我的意思了,当然,喜欢带一大包数码东西的玩家不会介意的:)

  Atom或Puma甚至VIA的新处理器,功耗低,8.9寸,重量加电池控制在1.2以下,丰富的SSD磁盘大小对应多种型号供选择,价位在3500以下是合适的。

  PS:和iPhone或iPod Touch对比来看,IP(T)的缺点是不支持主流的在线Flv播放,IE专门网页支持问题无法解决,打开类似Taobao首页之类的大页面会自动退出,视频只支持少量格式,文档只能查看不能编辑,且稍大些的文档就慢,另外,8G的IPT的价位也在2500左右,而它们的优点是,随身网络终端,类似 Google的定制的网络应用程序和普通的新闻资讯网页查看流畅方便,PodCast很不错,音视频播放的用户体验感觉很好(某达拼命出新机型MP3旧机子不更新软件,连个不能真正随机播放的Bug都不修正,放Rmvb跳帧且色块严重画质差,图片浏览卡的很,只能说够用,用户体验真的没有——不是差);
  定位是:IP(T)随身多媒体和网络应用终端,EeePC(Netbook)便携数据处理和网络接入终端;

  从这种意义上来说,带普通大容量硬盘和上了10寸的Netbook,定位就错了,比如,我所有资料都在主PC或移动硬盘上,IP(T)可以用 iTunes来同步音视频外出欣赏,自带的浏览器只支持同步收藏夹而不支持文件和图片的保存就是出于它只是个浏览终端的原因,而Netbook,安装的一些浏览器都能支持收藏夹网络同步,用U盘SD卡或移动硬盘或直接用网络传输一些文档或少量音视频欣赏,如果它自己带了大容量硬盘,空着肯定浪费,但如果大量数据存在里面,让它与主PC或移动硬盘同步又是个麻烦,如今大空间一般是用来存储多媒体,作为备用便携机,就算需要,平时也只会存少量多媒体,5G足已,SO,用大容量普通硬盘只是途增重量热量价格以及使用时的不便(用来作特定人群的便携式主PC还是可以的,不过市场规模就小了)。

5/23/2008

IE7乱弹IE6空白窗口问题解决方法

  某天莫名其妙Maxthon假死之后,突然发现Live Messenger(MSN)里的共享空间、在线收藏夹、照片等等调用浏览器打开的链接全部异常,都是先弹出一个IE6的空白页面,死在那,然后打开一个IE7或Maxthon、又或者Firefox的页面(取决与设了哪个是默认浏览器),先后试过卸载、重装、修复等等方法,期间又被若干牛皮冲天的所谓IE修复“专业级”的软件把系统差点整死掉(强烈建议系统出问题时千万不要乱找所谓的修复软件来用,有些软件真是太弱智又霸道——比如,某某某IE修改软件,安装完成后先是弹出,你的机子扫描到了病毒,但需要注册后才能杀毒。。。偶的ESET都没报呢,你倒挺有能耐嘛。。。。然后点IE修复,得,没有任何提示,直接把偶的Explorer进程给关了,然后一看,我所有的开机加载项全部被清空!我XXXXXXXX,表不懂装懂,好象你这软件天下无敌超级智能了咧,自作主张的也太过份了点!!!!)
  期间也试过N多目前主流的安全工具的IE修复功能,但无一例外,全部无能!Google、Baidu查询多日全无结果,以本文标题作为关键字的搜索结果无一例外都是问题报告或入门级的解决方案——无非是重装、设置IE为默认浏览器、使用偶试过的一堆IE修复工具去反复修、反复用N多安全工具去查杀病毒和流氓软件之类——当然,也不是说上面做法没用,但上面做法仅限于安装了异常软件或关闭了杀毒软件后系统出现异常时才有用,对于系统好好的用着或者在系统未中任何病毒或流氓软件干扰情况下,上述办法全部无用,因为这个问题是由于微软的Windows操作系统的IE浏览器的内核同时也是操作系统的关键内核组件,出现系统问题时,往往会影响IE的正常使用,这也是为什么偶强烈建议机子上一定要装一个非IE内核的浏览器以便在系统故障不能用IE上网时(同时Maxthon,TT,The World之类所有用IE内核的浏览器也会一同失效)有一个上网查询解决办法的工具,比如Firefox、Opera……
  失败多次后回归原点,手工处理,在文件夹选项的文件类型和协议关联部分试验多次,发现修改了HTTP协议、Internet快捷方式、Html、Htm之类的关联之后,某些情况下IE是正常了,比如打开IE快捷方式时可以直接在设置的关联默认浏览器中打开了,但软件界面的链接仍然出错,还是会打开IE6的空白页面之后再在默认浏览器中打开,这包括MSN、QQ的弹出新闻首页和迅雷之类软件界面中的链接,怀疑是直接调用了rundll32.exe ieframe.dll调用API去打开的浏览器导致的问题,查看进程管理器,果然打开这样的IE6空白页时,进程中并没有iexplorer.exe,而关掉explorer.exe时,这个窗口也消失了,故障应该是由于explorer.exe打开http协议时处理异常超成的,使用这个关键字去查找,果然发现一个有价值的文章,即,为什么系统总是用Explorer.exe去浏览网页而不是iexplorer.exe,这也解释了为什么这是一个IE6的样式,但其版本却是ie7,因为它是Explorer.exe调用了ie7的浏览器内核去打开网页,但XP的资源管理器浏览网页时的样式是IE6的,因为xp发布时只有IE6,如果系统设置了某些情况下不去开IE而是直接自己显示网页(比如Windows帮助系统里显示网页),那么样式就应该是IE6式的,要解决这个问题,就是强制让网页在IE7(或默认浏览器)中打开(当然,微软肯定考虑到这方面问题,但可能某些细节没处理好),照原文作者说明,这个注册表键位是在:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\
Explorer\BrowseNewProcess,把这个值从No改为Yes,即强制网页在新的浏览器中打开,保存关闭注册表管理器,一切恢复正常:)

4/22/2008

电脑手绘软件推荐

电脑手绘软件推荐下载(注意:只提供正版及官方授权合法软件!)

首先声明,本目录内所有软件均为官方正版或官方授权合法版本,其中:
----------------------------------------------------------------------------
ArtRage 2.1为Wacom硬件捆绑官方中文版(http://www.artrage.com/),有Wacom板子软件授权的可以下载使用,为全功能版本,官方最新版本为2.5英文版,需自行购买不能直接升级,但提供免费的2.5 Stater版本供试用,基本功能都有,但部分画笔、新增的蒙板功能等高级功能不能使用;

Corel Painter Essential 3为Wacom硬件捆绑官方中文版(http://www.corel.com.cn/),有Wacom板子软件授权的可以下载使用,软件及帮助文档均为中文,是最著名的电脑手绘软件Painter在IX版本基础上的精简版,更适合入门和普通用户使用(全功能的Painter可能会让初学者望而却步,所以不必一味追求最新最强大的版本);

ArtWeaver 0.5为自由软件,可以免费自由分发和使用,有官方中文版本提供(http://www.artweaver.de),其界面为模仿Painter和PhotoShop并实现了其大部分功能,非常专业,作为免费软件非常值得尝试;

SmoothDraw 2.6为国产软件(http://www.smoothdraw.com),官方免费提供中文的2.6版本(全功能,但界面不是一般的丑,国产软件的通病,呵呵),3.0为中英双语言共享版本(未注册版本绝大部分功能都能使用,但不能保存文件,够狠,呵呵,界面比原来好看了一点,如果你舍不得三百多RMB,用2.6够了,作者主要是想赚美元^_^)。

Colors 1.0.6h为NDSL(任天堂的掌上游戏机,GBA的后继机种,双屏幕支持触摸笔,售价一千多……好象说太多了,呵呵)上运行的一个免费的自制程序(http://www.collectingsmiles.com/colors/),支持压感笔和绘画过程录象回放功能,功能比较简单没什么画笔的概念,但画出来的水墨风格的画还是不错的,适合外出时画草图或练手,关键是比专业的支持压感笔的笔记本或手持终端要便宜多了哈,还能玩玩游戏,HOHO,好象比较超值^__^

简单介绍和推荐:
----------------------------------------------------------------------------
  前言:你能看到这些文字,说明你是一个对电脑绘画感兴趣,或者是之前有纸上作画经验的人,你到这里是想找到或者下载一个“最好”的电脑绘画软件,事实是,有一个好的工具会让你的电脑绘画经历更有趣,对着Windows的画图板,相信没几个人有想动手画画的激情,但你的绘画成果不会与你的软件有多高级而成正比,相反,你还要背负着使用盗版软件的不爽、面对着复杂的软件界面和吓人的软件使用教程,所以,本着够用的原则这里简单介绍一下上面的这几个电脑绘画的软件——当然,如果你有多的花不完的钱或者用不完的空闲时间,把别人推荐的“最好”的软件各买一份或盗版一份都试用一遍,偶们也没权利干涉:)
  前言二:想在电脑上画画,不管你水平多高,或者你的鼠标多高级定位有多准,还是老老实实去买一个支持压感笔的数位板的好,当然,同上道理,不要以为板子的价钱和档次高低和你的绘画成果是成正比的,还是本着够用就好的原则。

  ArtRage和SmoothDraw都是适合只有一些简单的绘画经验或者是小孩、时尚白领、涂鸦爱好者等不想深入钻研绘画软件的人士使用,它们的特点是所有的功能一目了然,不象某些专业绘画软件需要进到一层层的菜单下面去或配置一堆参数;
  特别是ArtRage,可以说是将软件界面的简约发挥到极致,全屏的软件界面风格让你感觉就是在一个真实的画板上作画而不象是在使用软件,不过简单也代表着不能面面俱到,它似乎更适合于画铅笔素描或者油画之类的粗风格的画作,也适合小孩画蜡笔画之类的,总之如果你想画精细风格的画时,比如日式漫画、时尚插画等,可能有点不太方便掌控;
  而SmoothDraw可以作为补充,这是一款国产软件,能有这样的功能性和易用性还是非常不错的(很多国产软件要么一味追求技术至上,要么整个花里糊哨的软件界面来骗钱),但如果要求要高一点来评价的话,它的界面布局和风格设计怎么也说不上美观,特别是它的目标用户是对界面很在意的年轻人,可能会因为它的界面带来很大的推广阻力,作者可能需要一个美工的协助(艺术软件没有艺术细胞,有点讽刺哈),特别是2.6版本,甚至让人没有提笔的兴趣,呵呵,3.0版本稍好一些,相比于ArtRage而言,它更适合年轻人用来进行生活、时尚风格的涂鸦和画卡通漫画,它的一字排开的画笔和主界面提供的功能,可以说就是国内网络上的大量手绘教程常用的工具的集合——铅笔、钢笔、喷枪、网点、涂抹等等,包括了打底稿、描线、上色、修饰等等功能的全套工具,充分体现了够用就好的原则,虽然软件功能上说不上专业,但对于非专业的涂鸦、手绘绝对够用了,可以说是针对网络涂鸦漫画绘画风格而推出的大众化绘画软件;

  Painter Essential作为Painter的精简版本,功能还是很强大的,先说下它的照片仿制功能,可能和手绘没什么关系,但去看下中文的帮助文档,可能你会觉得那比绘画能更快地带给你乐趣,建议尝试一下;而它的绘画功能,是基于Painter IX版本的,一些常用的铅笔喷枪水彩等都是有的,而且它的画笔的手感和绘画表现效果也不是其它厂商那么容易模仿的,个人除了对它没有钢笔和图层叠加效果表示不满外,其它方面还是比较满意的;
  基本上能熟练使用上面的软件,并经常练习练习的话,你的电脑绘画也算是入门了,有空再补补绘画的基础知识,一些简单的涂鸦和绘画应该难不倒你了,如果你想转专业职业化或准专业去了,有了Painter Essential的经验,大部分公司内部都提供的Painter工具你也应该很快能上手,而如果没机会用到正版 Painter又想更进一步更专业点,ArtWeaver这个免费的软件可能是个很好的过渡产品,虽然它还只是0.5 版本,但功能已经很强大了,Painter、Photoshop手绘相关的以及滤镜处理等功能它都实现了,而且它 支持插件和画笔导入等扩展功能,可以说是挺专业的,唯一用着感觉不爽的是似乎软件速度和画笔效果还 不太好,不过相信你可能现在还用不到它,而它也在不断加强改进,相信会是一个不错的软件。

  补充一下,上面的软件都是在Windows下的,部分也有Mac版本,但如果是在Linux下,因为Linux更偏向于计算机专业领域,一般用来作为软件开发平台或服务器平台,不太适合作为平面图形处理系统,非要用的话,可以用Wine模拟上面的软件,或者,可以试下GIMP这个一般系统里都装好的图形处理软件,作为和Linux操作系统图形系统底层核心关系紧密的软件,加上这么多年的发展,功能上还是很不错的,一般人把它当Linux下的Photoshop使用,不过它也支持基本的绘画功能,聊胜于无吧^_^

  再PS一下:强烈推荐想学水墨或油画风格绘画的,对照着NDSL上的Colors软件的好看的画的录象回放,在上面说到的软件里参考学习临摹一遍,或者也可以在外时乱画画玩,对你的软件手绘能力提高很有帮助~~

3/24/2008

浅谈Adobe AIR战略及Web 2.0离线应用思想

  Ajax也火了两年多了,慢慢的热点转到离线Web2.0应用上来了,毕竟有时一些小的应用还要打开浏览器去收藏夹里访问一个网站麻烦了点,Adobe自从收购了Macromedia有了Flash和它的RIA解决方案之后,野心大了不少,它至少是想要和Google,微软的竟争中占一席之地,甚至是想集两家之长取而代之——Web+软件=融合,所以,它最近两年不停地放出一些开源的工具和解决方案,直到推出了AIR1.0版本。
  试用了一下,有点想法,简单分享一下:
  先说下AIR到底是什么东西吧,这么说,Ajax目前从界面上看,已经可以做到和标准的软件没什么差别了,甚至于象ExtJS之类框架的IDE环境出来以后,可以象写标准软件一样去写WEB应用了——拖一个控件,为事件填充一下处理函数,呵呵,这也许是M$培养出来的开发习惯吧,虽然很多资深软件开发人员对此很不屑,不过对于不想深究技术,只想做业务逻辑的软件人员来说,这的确很方便。
  但Ajax目前最大的问题是,受标准限制和浏览器的实现规范,Javascript不能操作本地电脑的资源、有跨站资源调用的限制,这些都限制了Ajax成为真正的“软件”。
  而AIR的基本概念就是,让Flash、HTML、Javascript、CSS等等WEB应用,能以标准软件的形式来运行,比如:本地文件读写、本地软件的界面、菜单,安装卸载过程、开机自动运行等等……
  安装了AIR运行时环境,AIR SDK后,试验了Sample程序查看了一下官方手册,想了一下,发现,这不就是Firefox之前提出过的理念嘛,不象Firefox的插件,只是为WEB浏览服务,Firefox提出过一个理念是,在浏览器里运行WEB软件——无论在线离线,只不过它还是在浏览器里面跑,所以给人印象不是太大——比如偶,连它的名字也没记住,呵呵,而AIR比较聪明,它淡化了浏览器的概念,突出了离线运行(其实就是浏览)跨平台的概念,按道理,AIR应该第一个支持的是Linux或Windows平台,因为开源社区在这方面的工作比较多可以参考,或者在Windows上开发更快一些,因为这两个平台有着Firefox的核心Gecko可以使用,IE的内核Trident比较被开发人员熟悉,但可能出于商业利益,Adobe肯定不会用微软的IE内核,Firefox太自由了,结果Adobe用了苹果的safari浏览器的内核webkit,这个浏览器内核目前只在苹果机子上和Iphone,IpodTouch上有主流应用,Windows平台上刚刚试水,虽然其内核WebKit也是Linux开源社区的(好象基于KHTML内核),但类似于MaxOS是基于Unix内核一样,苹果公司总是喜欢有它自己的一套商业思想,估计Adobe和Apple两个老A有了某些协议,最终它们联手了,这就是为什么AIR1.0先支持了Win和Mac,而许多Web设计人员试用时,一些经过IE和Firefox测试过的网页显示在AIR里又出现CSS样式错乱的原因了。
  熟悉了AIR的框架之后发现,其实AIR的核心就是一个定制版的没有标准浏览器界面的浏览器——虚拟机,该虚拟机通过读取xml配置文件来决定界面显示,通过AIR提供的JS文件来进行该浏览器(AIR虚拟机)的API的调用,而这些API就是标准浏览器和标准Javascript框架下没有提供的一些本地资源的调用方法,同时该浏览器去掉了一些Web访问的权限限制使得它更象是一个Client应用软件,同时Adobe也没忘了将它自家的Flash和Pdf的支持功能加进去^_^

  综合目前的Web2.0大环境,AIR还是有一席之地的,比如在线收藏夹、在线的词事本等需要方便地与服务器同步少量数据的WEB2.0程序,或者象Google地图、邮件等程序功能就是查看服务器上的数据的软件,如果要用C/C++之类去开发,工作量是非常大的,而AIR只需要象写网页一样写界面,在服务器上提供一个Ajax的业务接口,或者直接使用现有的WEB网站稍加整理,只要是在浏览器里能使用的应用,都能用AIR封装成一个软件分发给用户使用。
  但是,如果它目前的推广方式不改变的话,那么将很可能落得和Java的Applet小程序一样的下场,因为用户要使用AIR的应用程序,先要下载安装一个十几M大小的AIR运行时环境,而SDK为了跨平台,需要Java虚拟机支持(某种意义上来说,喜欢Java的不想AIR占了自己的地盘,不喜欢Java的不喜欢需要Java才能开始工作,呵呵),这些问题将很大程度上限制AIR的普及,建议Adobe学下微软推广.net framework的方式——虽然偶不喜欢,在用户安装某些微软的软件时,不知不觉装上了.net运行时环境,推广了微软家的.net,呵呵,Adobe可以发动它的社区追随者,开发类似Yahoo或Vista的边栏小工具,在用户下载安装使用某个喜欢的小工具时,不知不觉安装上了AIR的运行时环境,方便后继的推广——虽然这很不道德,但微软就是这么发家的^_^

  说下题外话,随着Google和IPhone调动起来的将Web2.0离线化的口号,传统软件必定是要退居二线,就象当年的汇编让位于C/C++一样,今后的软件必定是通过类似XML的描述语言来描述界面,网络化的业务接口提供处理能力和数据交互,不管终端是个人PC还是手持设备,只需要提供一个访问操作界面和网络接入,而不再需要不停更新硬件性能,而这必要需要一个类似当年统一WEB的HTML一样的标准来统一Web化的应用软件的标准,AIR先行一步,虽然还有很多限制和问题,Google、Mozilla、Microsoft、Yahoo、IBM等等行业的巨头也没闲着,而国内完全可以使用Firefox的内核开发出一套类似的平台框架,而且先期可以专注与Ajax而不象AIR想要包揽Ajax,Html,Flash,Pdf等等东西,由于跨国公司和利益团体不考虑亚洲国家利益,强制推广的Unicoe、UTF-8之类标准在亚洲本土支持很不好,但AIR却只支持UTF-8让很多国内Web2.0应用采用GB2312或GBK时不能使用AIR(很不友好地直接提示不支持编码GB2312、GBK),至于后期后继开发,可以参考微软当年提出的WEB就是软件的思想,借Web新标准改朝换代的时机,提出Ajax的替代解决方案,也就是Web3.0,网络分布式的无终端限制的软件,那么就领先了不只一点点了,HOHO~~ $_$  

Add:080325
  Firefox3快出来了,查了下资料,上面说的Mozilla搞的类似AIR的那套的东西叫XUL——精确地说应该叫XULRunner:)

  因为XUL是Mozilla推的一套界面描述语言,XML的,类似AIR的那个软件界面描述XML文件,不过不同于Adobe的使用现有的Web元素来构建应用程序,Mozilla走了另一条路,扩展了一些类似HTML的描述语言来描述标准的软件界面控件——因为现有的Web元素要实现软件界面控件是用Javascript加上CSS样式模拟出来的,效率和兼容性是一个大的问题,而Mozilla则开辟另一片战场,直接在它的Firefox的核心里面扩展了XUL的支持,即,用Firefox打开.xul文件时,能自动读取里面的描述语言标记由操作系统直接生成原生的菜单、工具栏之类的软件界面控件,软件打包方面和AIR的思想差不多,也是把一些Js、css、xul(区别与AIR的HTML)文件之类的打包,然后用浏览器的内核(AIR用的苹果的浏览器内核Firefox用的Mozilla自己家的)来读取显示出来,比如Firefox的一些扩展插件软件,都是用XUL实现的,甚至Firefox自己,也是用Gecko核心读取XUL生成出来的界面哈~~

  说到这里,可能有人会说,AIR是打包后生成独立的Exe程序了啊,XUL是在Firefox里运行的啊?是的,但这只是目前的情况,正在开发中的XULRunner就能做到让XUL以Exe程序的方式来运行,比如,Firefox和Thundbird软件就是最好的XUL程序的示例程序,只不过XULRunner还处于开发阶段,不能方便地将XUL打包成象Firefox这样的应用软件,它目前只能提供命令行工具,你可以通过CMD命令行来启动XUL程序,执行后的效果和AIR的效果是一样的,标准的原生的操作系统软件,标准的Windows或Linux或Mac应用程序运行在对应的操作系统平台上,而效率绝对比AIR高,就象空白的Firefox软件要比打开几个网页的浏览器要更流畅一样效果哈:)

  所以可以说,AIR是简化了开发人员的工作,直接打包整个网站(看起来不错),而XUL相对来说开发人员的工作要多一点,但效率更高也更灵活:
  因为,AIR必须要用户再安装单独的AIR平台运行时环境,AIR程序要使用网页一样的方式来生成界面,对现有的网站的WEB页面的界面来直接打包可能比较方便,但新的界面仍用JS来实现效率太低也较麻烦,传统客户端软件开发人员可能不能接受这种方式;而XUL虽然开发人员要多学一点XUL的标记符和用法,但界面生成非常方便,原生的界面执行效率比JS模拟实现要高的多,既可以在目前已经推广较普及的Firefox浏览器里运行(相对AIR的运行时环境的推广普及度,特别是国外Firefox非常高的使用率),又可以象AIR一样以标准应用程序的方式来运行(XULRunner正式版本最终效果),与AIR相比同样跨平台开发速度快,甚至它可以作为libxul嵌入其它软件中用来生成界面,应用的场景可能较AIR更广泛一些,也更容易被传统客户端软件开发人员接受和学习,AIR在这里输在了它想大包干,把所有细节都包揽了,有好处当然也有坏处了,WEB开发人员会比较喜欢它入门也更快,但传统软件开发人员可能更喜欢XUL灵活的实现方式;

  个人更看好Mozilla的XUL实现方案,但有竞争是好事可以相互促进,AIR适用于将WEB2.0网站的某些容易分离的功能离线和应用程序化,避免重复的界面实现工作,效率很高;而XUL适用于将以前基于Java Applet或传统C/S架构的客户端软件进行B/S或者称之为Web2.0化时全新开发时使用(当然,这里有个问题是IE不支持,但Firefox同样是浏览器,而且可以跨操作系统,并且这类软件一般是企业用户,统一部署加装一个新的浏览器也是容易接受的,比Java小程序在不同机器不同操作系统下执行效率不同,客户端软件在不同机子上非常容易出现安装和运行问题容易受机器上其它软件影响稳定性要更容易解决,至少Firefox在主流甚至低端机器上运行非常快速稳定,而且最重要的是IE和Firefox都是浏览器,B/S或Web应用程序的特点是不会受影响的),现在知道为什么Adobe用的苹果浏览器的核心了,因为Firefox的概念和它的有冲突,呵呵,并且两家实现思路不同,商业模式也不同,但它们的目标都是将应用软件网络化,因为无论PC、手持终端还是智能家电,它们最终的定位是应用软件界面的显示和原始数据、目标数据的存储,而不再是应用软件的执行平台,操作系统也将退回它原有的功能定位——硬件资源的调度管理,到时,不管是Web2.0还是3.0,都将是软件企业的春天,不用再担心盗版软件的问题了,但业务不再是靠卖软件拷贝和授权来赚钱,而是提供软件在线服务。

  杀毒软件?操作系统都固化了,本地全是纯数据无应用程序,哪来的病毒?呵呵

  如此这般,老百姓也就舒坦了,象用家电一样使用电脑和网络,只需要一个接入授权,所有能连网的智能终端均可以使用到适应它的终端软件服务了——空调自动根据天气预报设置开关机、电视自动下载个人的日程表给出提示和电视录象等等智能化的功能,数据可以存储在远程也可以下载到本地,而用户也不再需要学习电脑安装软件维护升级硬件之类的不应该让普通用户参与的工作,电脑到时也会变成一个家电控制中心和存储中心,免维护^_^

PS:
  上面说的只限于普通电脑用户,不是说所有电脑用户,比如航空航天科学实验机械工程专业图形图象多媒体设计之类的软件,那还是得在本地开发成专用软件来使用哈,但偶的观点就是,电脑不只是用来工作的,也是用来娱乐的,更多时候是要能用来作为智能控制中心的,以后使用电脑更多的是普通大众,没经过培训的普通大众——你看到谁用家电还要上培训班的?用电脑不能用到最后被电脑玩了,而是要电脑主动地智能地服务,所以针对于普通电脑用户,软件设计开发人员不能当老古董,凡是能让用户感到方便的技术都可以去大胆应用,而不能总是一味地跟在别人PP后面张望,软件业的春天不是等来的,套用一句话——你把用户放在心上,用户才能让你坐在钱堆上^_^

3/7/2008

Flex(flash)及本地HTML Ajax方式远程调用PHP时的Session问题

  做了个PHP的图片验证码实现,采用一次性Session方式保存在服务器端,客户端提交验证码与其对比来实现验证机制,客户端直接使用<img src=http://xxxxx/xxx.php>格式调用,在普通HTML页面上测试一切正常,但后来将该实现使用到Flex中时,出现Flex的httpservice调用的php获取不到该验证码图片的session设置的验证码,多次测试比对后,发现HTML中如果文件是在本机上也会有此问题,但上传到Web服务器上之后则正常;

  经过跟踪调试发现,出现问题时,验证码图片生成php文件的session和提交处理的php文件使用了不同的session ID,所以不能互相获取 session内容,有了这个发现,解决方法就是让这两个PHP文件使用同一个session id,在PHP的概念里,这就表示使用同一个Session了(其它语言可以参考);

  解决方法一:
  如果Swf文件显示页面是在服务器上动态输出的,可以在输出swf嵌入代码时,用xxx.swf?sid=<?=session_id()?>的方式嵌入,在Flex代码中,以

var param:Object = root.loaderInfo.parameters;
if(param["sid"] != null)
{
    sid = param["sid"];
}       

方式取出sid;

  解决方法二:
  如果swf是外链嵌在第三方网站或静态页面中时,可以变通一下,在Flex中增加一个HttpService,例如:

<mx:HTTPService id="sid_get" url=http://xxxxxx/get_sip.php method="GET">

sid_get.send之后取出返回值就是sid,因为该PHP内容就是echo session_id(),输出sid;

然后,在所有调用远程服务的PHP地址后面均加上这个sid,例如前文说到的验证码生成php和数据提交处理php,均增加该字段;

在验证码生成PHP和提交数据处理页面前,增加:

session_start();
if(isset($_GET['sid']))
{
    session_id($_GET['sid']);
}

表示强制使Flex不同组件不同时候提交的HTTP请求均使用由sid指定的同一个session,而这个session就是flex通过上述两种方法获取到的,当然,也可以自己Hash出一个sid,或获取、输出sid时进行必要的加密、解密操作以增加安全性防止session绑架式攻击。

注:本地HTML Ajax方式遇到类似Session问题时,完全可以通过前述方法二来解决该问题,例如在软件界面中嵌入HTML网页需要获取远程Session数据和提交数据到远程页面这种应用时。

2/1/2008

金山词霸类翻译软件的即指即译功能的改进建议

  目前的翻译软件都提供了即指即译功能,但这项功能在诞生了好几年之后,仍没有改进,依然只有鼠标即指即译,按鼠标中键翻译,或加上按Ctrl,Shift之类再鼠标取词等方式,但日常使用下来,无论是哪种方式,都会经常在我们不想翻译的时候翻译框突然弹出来,而一怒之下关掉即指即译功能后,又在某个关键时候想翻译某个词时发现即指即译功能没打开,这都是源于翻译软件不能准确识别用户的翻译请求的原因,来得影响使用者感受,在金山词霸放出2008版本公开征求意见时,提出了下面的建议:
  个人结合日常鼠标使用习惯认为,作为定位设备,一般鼠标是不停在动,或移到某个位置后,要么静止不动,要么点击某个鼠标按键,同时伴随着键盘的操作,这里唯一没有用到的一种用户人机交互输入识别方式就是鼠标在“小范围内”的不停移动一段时间或一定次数。
  故个人建议,可以为词霸的取词方式增加一种——“智能鼠标取词”,即,在这种方式下,只有用户的鼠标持续地在某个中英文字词上移动,例如划圈或左右来回移动一定次数(例如圈两下,来回移两次)或时间(参考原有的鼠标停留一断时间方式),才触发取词事件,这也成功解决了如何去准确识别一个长串的字符的难点问题,即,用户可以在例如This is a test的This上划圈或在T和s字母之间左右范围内来回移动,表示要翻译This的意思,而如果是在整句上划圈或在T和t字母之间左右来回移动表示要翻译整句,这会非常方便并准确地识别用户的真实的翻译意图,而不用由于日常的鼠标移动操作或其它软件的快捷键操作引发错误的操作请求,极大改进用户体验。

1/31/2008

OSIP协议栈使用入门(续一:纯协议栈逻辑分析)

  (CopyLeft by Meineson | www.mbstudio.cn,原创文章,欢迎转载,但请保留出处说明!)


  很长时间之前,简单粗略地看了下Osip,eXosip,ortp等并快速“封装”了一个Windows下的基于VC6的MFC的SIP软电话(全部源代码VC6工程文件及Lib库可在本Blog共享文件夹找到),由于时间限制,只能是一知半解地纯“应用”式地分析了一下osip,eXosip等开发库的代码,作为兴趣爱好者参考了解下SIP电话工作原理还可以,但作为商用产品开发参考则还是太浅显了些:)
  最近扩展嵌入式Linux平台上的SIP功能模块(基于OSIP),由于使用的Osip不包括Call Transfer相关字段(Refer,Notify等)的解析和状态机控制(最近的Osip版本是否有扩展未查看)不能支持呼叫转接,需要手工扩展,有机会对Osip的主要事务状态机、解析库等部分稍有了些较深入的了解,结合SIP RFC总结分享如下。

  (注:下文假设阅读者已经大概了解SIP协议的简单呼叫流程,会使用Ethereal等抓包工具分析SIP消息结构,对C语言的指针、链表、内存控制及状态机等概念有足够的认识。)

  要应用Osip到我们的程序中去,首先要看官方文档,文档中对Osip协议栈提供的各个功能部件如何使用都有比较详细的描述,但未进行整体性的分析,某些中文的指导文档也都停留在对其简单的翻译,不能为不熟悉该协议栈使用的用户快速参考使用,本文档不按照Osip的代码进行按功能分块说明,而是根据实际使用时的代码使用顺序来对主要逻辑流程进行分析,并适当对流程中使用到的功能部件进行说明,具体更详细的功能说明或疑问可直接查看官方文档对应部分的解释或直接查看功能函数源代码即可解决。

  • 准备工作
      先认识几个结构体:osip_t,osip_message_t,osip_dialog_t,osip_transaction_t;
      osip_t是一个全局变量,所有要使用Osip协议栈的事务处理能力的程序都要第一步就初始化它(相对应于只使用osipparser库进行SIP消息字段解析的应用来说,如果只使用parser库到自己的程序中,想必对SIP协议栈已经很熟悉了,不需再往下看了^_^),它内部主要是定义了Osip协议栈的四个主要事务链表、消息实际发送函数及状态机各状态事件下的回调函数等;
      osip_message_t是SIP消息的C语言结构体存储空间,收到SIP消息解析后存在该结构中方便程序使用接收到的消息中的指定的字段,发送消息前为方便设置要发送的字段值,将要发送的内容存在该结构中等发送时转为字符串;
      osip_dialog_t则是SIP RFC中的dialog或叫call leg的定义,它标识了uac和uas的一对关系,并一直保持到会话(session)结束,一个完整的dialog主要包括from,to,callid,fromtag,totag,state等(可查看源码),其中fromtag,totag,callid在一个dialog成功建立后才完整,体现在SIP消息中,就是From、To的tag,Call-id字段的值相同时,这些消息是属于它们对应的一个Dialog的,例如将要发起invite时,只有fromtag,callid填充有值,在收到to远端的响应时,收到totag填充到dialog中,建立成功一个dialog,后继的逻辑均是使用这个dialog进行处理(如transaction事务处理),state表示本dialog的状态,与transaction的state有很大的关联,共用由Enum结构state_t定义;
        osip_transaction_t则是RFC中的事务的定义,它表示的是一个会话的某个Dialog之间的某一次消息发送及其完整的响应,例如invite-100-180-200-ack这是一个完整的事务,bye-200这也是一个完整的事务,体现在SIP消息中,就是Via中的branch的值相同表示属于一个事务的消息(当然,事务是在Dialog中的,所以From、To的tag,Call-id值也是相同的),事务对于UAC,UAS的终端类型不同及消息的不同,分为四类,前面说的invite的事务,主叫uac中会关联一个ict事务,被叫uas会关联一个ist事务,而除了invite之外,都归类定义主叫nict,被叫nist,在Osip中,它是靠有限状态机来实现的上述四种事务(osip_fsm_type_t中定义)的,它的主要属性值有callid,transactionid,分别来标识dialog和transaction,其中还有一个时间戳birth_time标识事务创建时间,可由超时处理函数用来判断和决定超时情况下的事务的进行和销毁,而它的state属性是非常重要的,根据上述的事务类型不同,其值也不同,它是前面提到的状态机的“状态”,在实际状态机的逻辑执行中是一个关键值;
  • Osip初始化
      提到osip的初始化,可能大家都看过官方文档里第一页的代码,首先就是osip_init(&osip)初始化了全局的osip_t结构体,然后对它的回调函数进行设置,很多人估计就是一看到这密密麻麻的一页多的call_back设置被吓到了,但结合前面分析的三个结构体的含义,这里的含义就很清晰了:
      osip_t中有一个cb_send_message函数指针,它是Osip最终与外界网络交互的接口,它的参数有( osip_transaction_t * trn,    /*本消息所属的事务*/
            osip_message_t * sipmsg, /*待发送的消息结构体*/
            char *dest_socket_str,     /*目标地址*/
            int32_t dest_port,            /*目标端口*/
            int32_t send_sock)    /*用来发送消息的socket*/
      其中trn传入主要是为了方便获取事务的上下文数据,它有一个void指针your_instance,可以用来传入更多数据方便发送消息时参考,例如将该事务所属的dialog指针传入;
      而sipmsg则是我们要发送的SIP消息的C结构体,使用osip_message_to_str将其按RFC文档格式转换为一个字符串(osip中的parser模块的主要功能),再通过任意你自己的网络数据发送函数使用send_sock发送给dest_socket_str和dest_port指定的目标,当然,要记得使用osip_free释放刚才发送出去的字符串占用的内存,Osip中很多osipparser提供的消息解析处理函数都是动态内存分配的,使用完毕后需要及时释放;
      使用osip_set_cb_send_message成功设置回调函数,我们的SIP消息就有了出口了,下面继续分析(当然,了解到了上面的流程,也可以手工指定了)。

      下面的回调函数分为三类,分别是普通事务消息(osip_message_callback_type_t中定义)的处理回调函数、事务销毁事件(osip_kill_callback_type_t中定义)的清理回调函数以及事务执行过程中的错误事件(osip_transport_error_callback_type_t中定义)处理回调函数:
      先说简单的,事务销毁事件,事务正常结束(成功完成状态机流程)或由超时处理函数强制终结等情况下均调用了这些回调函数,一般就是释放事务结构体,为ICT,NICT,IST,NIST各设置或共用一个回调函数均可,只要正确释放不再使用的内存即可;
      错误处理函数则是在整个状态机执行过程中发生的任何错误的出口,一般用来安插log函数方便调试,也可以直接设为空函数;
      而最关键的就是正常消息的处理回调函数了,其量是非常大的,但仔细分下类,也和上面的回调函数一样,也是分为四类,我们可有根据实际程序的需要来进行设置,例如,SIP电话机就不需要处理OSIP_NIST_REGISTER_RECEIVED这个SIP注册服务器才需要处理的Register消息事件了,精简一下,如果只是要做一个只需要实现主叫功能且不考虑错误情况的UAC的Demo软电话程序,则只需要设置如下几个事件的回调函数:
      OSIP_ICT_INVITE_SENT 发出Invite开始呼叫
      OSIP_ICT_STATUS_1XX_RECEIVED 收到180
      OSIP_ICT_STATUS_2XX_RECEIVED 收到200
      OSIP_ICT_ACK_SENT  发出ack确定呼叫
      OSIP_NICT_BYE_SENT  发出bye结束呼叫
      OSIP_NICT_STATUS_2XX_RECEIVED 收到200确认结束呼叫
      OSIP_NIST_BYE_RECEIVED 收到bye结束呼叫
      OSIP_NIST_STATUS_2XX_SENT 发出 200确定结束呼叫
    而要增加接受呼叫的被叫UAS功能,则只需要增加如下事件:
      OSIP_IST_INVITE_RECEIVED 收到invite开始呼叫
      OSIP_IST_STATUS_1XX_SENT 发出180
      OSIP_IST_STATUS_2XX_SENT 发出200
      OSIP_IST_ACK_RECEIVED  收到ack确认呼叫
    具体的函数定义,则直接参考osip_message_cb_t,osip_kill_transaction_cb_t,osip_transport_error_cb_t即可,回调函数的设置同上可以手工设置,也可以使用Osip提供的对应的osip_set_xxx_callback函数;
  • 发出SIP消息
      
    要发送SIP消息,从上面的分析可知有几个必要的条件,osip_messag_t结构的待发送消息,osip_dialog_t结构体的dialog以及osip_transaction_t的事务;
      首先osip_malloc新分配一个dialog,使用osip_to_init,osip_to_parse,osip_to_free这类parser函数功能函数按RFC设置call-id,from,to,local_cseq等必要字段(原则是:后面生成实际SIP消息结构体要用到的字段就需要设置),使用osip_message_init初始化一个sipmsg,根据dialog来填充该结构体(不同的消息填充的数据是不同的,没有捷径可走,只能看RFC根据需要填充字段),如果要给SIP消息添加Body例如SDP段,需要使用osip_message_set_body,osip_message_set_content_type函数,设置的值是纯文本,如果是SDP,Osip有提供简单的解析和生成便捷函数例如sdp_message_to_str,sdp_message_a_attribute_add,但只是简单的字符操作,要填充合法的字段需要自己参考SDP的RFC文档,同样没捷径可走。
      现在我们有了两个必要条件了,还有最后一个也是最关键的部件,就是事务的创建和触发,
    int osip_transaction_init(
            osip_transaction_t ** transaction,  /*返回的事务结构体指针*/
            osip_fsm_type_t ctx_type, /*事务类型ICT/NICT/IST/NIST*/
            osip_t * osip,  /*前文说的全局变量*/
            osip_message_t * request) /*前面生成的sipmsg*/
      创建了一个新的事务,并自动根据事务类型、dialog和sipmsg进行了初始化,最重要的是它使用了__osip_add_ict等函数,将本事务插入到全局的osip_t结构体的全局FIFO链表中去了,不同的事务类型对应不同的FIFO,由前文可知,本类函数有四个,FIFO也有四个,对应ICT,NICT,IST,NIST,注意这个这里使用osip_transaction_set_out_socket把发送sip消息的socket接口配给该事务,方便自动调用前面设置的发送消息回调函数使用它自动发送消息;
      前文提到了transaction里的state作为状态机的“状态”,要执行状态机,就需要有“事件”来触发,事件结构体osip_event_t需要使用osip_new_outgoing_sipmessage来对sipmsg进行探测生成,设置正确的事件值,省却了我们手工设置的工作,它调用evt_set_type_outgoing_sipmessage来设置“事件”type_t,并将sipmsg挂到事件结构体的sip属性值上,有了根据消息分析出的事件后,使用osip_fifo_add(trn->transactionff, ev)将事件插入到事务的事件FIFO中,即transactionff属性;
      
      有了上面的发送消息的必要条件了,消息是如何实际出发的呢?上面提到了,SIP消息的发送和响应是一个事务,不能隔离开来,即消息的发送需要事务状态机来控制,我们上面设置了状态机的状态和事件,要触发它,就是要执行状态机了:
      osip_ict_execute
      osip_nict_execute
      osip_ist_execute
      osip_nist_execute
      分别用来遍历前面提到的四个事务FIFO,取出事务,再依次取出事务内的事件FIFO上的事件,使用osip_transaction_execute依次执行(有兴趣的可以更深一步去查看,可以看到它最终就是调用了我们前面设置的消息回调函数,至于具体调用哪个,这就是OSIP协议栈内部帮我们做的大量的工作了^_^);
      如果某个事务不能正常终结怎么办呢?例如发出了Invite没有收到任何响应,按RFC定义,不同的事务有不同的超时时间,osip_timers_ict[nict|ist|nist]_execute这些函数就是来根据取出的事务的时间戳与当前时间取差后与规定的超时时间比对,如果超时,就自动设置了超时“事件”并将事务“状态”设为终结,使用前面设定的消息超时事件回调函数处理即可(如果设置了);
      如果网络质量不稳定,经常丢失消息,需要使用osip_retransmissions_execute函数来自动重发消息而不是等待超时;
      为了即时响应SIP消息的处理推动状态机,上述的九个函数需要不停执行,可以将它放入单独线程中。
  • 收到SIP消息
      
    有了前面的发送SIP消息的理解,接收消息的处理就方便理解了,收到SIP消息,使用osip_parse进行解析,得到一个osip_message_t的sipmsg,使用evt_set_type_incoming_sipmessage得到事务的“事件”,并同上将sipmsg挂到事件结构体的sip字段,随后立即使用osip_find_transaction_and_add_event来根据“事件”查找事务(有兴趣可以深入看一下,事务的查找是通过SIP消息Via中的branch来匹配的),否则新建事务,然后推动状态机执行。
  • 状态机内部逻辑
      弄清了上面的状态机的大概逻辑,设置正确完备的回调函数,就可以正确使用Osip来进行工作了,如果要进一步深入Osip,比如要扩展Osip的状态机处理自定义的消息字段和实现新的事务逻辑来生成新业务时,就需要对状态机的内部逻辑有一定的了解;
      前面一再强调,Osip内部的几个重要的数据结构osip_message_t,osip_dialog_t,osip_transaction_t,其中面向用户的主要是前后两个,而中间的dialog则很多时候是在状态机内部使用的,例如:收到消息,解析到sipmsg中,查找transaction并进行驱动,随后找到它关联的dialog(或者新生成)解析填充要发送的消息结构体sipmsg,再次根据dialog和sipmsg查找或生成transaction。
      如果要扩展Osip,要做工作主要有:
      扩展osip_message_t,增加要解析的字段或消息头,并参考原Osip函数生成对应的SIP字符串生成和解析函数;
      扩展osip_dialog_t,增加新的属性,对应osip_message_t的新增内容;
      扩展状态机的事件和状态类型,设置对应的回调函数,并关联新增事件和状态类型到osip_message_t的解析函数或osip_dialog_t的初始化函数中,而osip_transaction_t大多数时候不需要扩展,只要在对应的事务类型(大多数时候是NICT、NIST)处理逻辑中,增加对新增事件和状态类型的判断和调用回调函数的逻辑即可。

(不定期更新补充中……)

  (CopyLeft by Meineson | www.mbstudio.cn,原创文章,欢迎转载,但请保留出处说明!)

1/3/2008

君正JZ4730[40/20]RMVB华飞芯视频MP3机初探(第三方软件或操作系统可行)

  元旦前入了一个能直放RMVB的视频mp3——不应该叫mp4,因为屏幕实在是小,呵呵,2.8QVGA的,昂达VX868+,和它的989+,979+是一个系列一个内核的,从最近的一次同时发布1.21版本固件可以看出来,想要了解一下它的内部到底是虾米东东,这么快把ADI和瑞芯搞的很郁闷,查到了它的官方网站——华飞芯不说了,它只是打包一个解决方案顺便解决版权问题,真正的核心研发还是君正方面处理,偶猜的:)
  上了君正的网站,www.ingenic.cn,可以看的出,最近风头比较劲,相关的开发资源也一股脑打包送上来了,开发论坛估计是刚上,还不能访问,一看就知道了,Mips的针对多媒体优化的处理器,借用Linux强大的开源资源,优化了全能播放器Mplayer,400mhz的处理器加上屏幕比较小,各类音视频全吃当然不在话下了哈,还是要谢谢GNU的力量!
  看了下官方的rootfs——因为下面的MP3厂家包括华飞芯估计在Linux操作系统这块不会去做更改,只是在这个平台上开发应用而已,所以君正提供的资源有可看性哈:)

#!/bin/sh
# mount filesystems
/bin/mount -o loop /proc
/bin/mount -t devpts /dev/pts
# turn on swap
/sbin/swapon -a
# set the system time from the hardware clock
/sbin/hwclock -s
# networking
/sbin/ifconfig lo 127.0.0.1 up
# telnet server
/sbin/telnetd &
# NFS mounting
/sbin/portmap
# mixer volume
#/usr/bin/mixer vol 100 > /dev/null 2>&1
# mount SD card
#/bin/mount -t vfat /dev/mmca1 /mnt/mmc
# insmod usb gadget
#/sbin/insmod /lib/modules/jz4740_udc.o
#/sbin/insmod /lib/modules/g_file_storage.o file=/dev/mtdblock5,/dev/mmca
# start DPM
#/usr/local/bin/dpm_init
#/usr/local/sbin/dpmd &
# run qtopia
#/usr/bin/runqpe

  上面都没什么参考价值,只是看倒数第二条,Qtopia,查了下,是一个专门提供手持设备的操作UI的软件包,Qt,看前两个字母,呵呵~~而最后一条runqpe则是一个脚本:

#!/bin/sh
QTOPIADIR=/opt/Qtopia
export HOME=/root
export QPEDIR=$QTOPIADIR
export QTDIR=$QTOPIADIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
#export QWS_MOUSE_PROTO=USB:/dev/input/mice
export QWS_MOUSE_PROTO=TPanel:/dev/ts
export QWS_KEYBOARD=TTY:/dev/tty0
$QPEDIR/bin/qpe > /dev/null 2>&1

  在上面脚本里提到的/opt/Qtopia的apps目录里,可以看到许多应用程序和游戏,例如地址本时钟计算器……
  而在君正的rootfs里,可以看到在mipsroot/usr/bin下有mplayer30/40,包括网站上放出的优化的Mplayer源代码~~

  展望:
  有了标准Linux的操作系统加上400Mhz的处理器能力,加上能运行Mplayer和顺利播放RMVB可知其内存也不低(君正的Demo包里JDI烧录配置文件里看到写的是用了64M内存,不小了哈),小小的VX868+或989+979+完全可以作为一个掌上操作系统来使用,为其开发应用程序也完全可行,只不过偶不是搞硬件开发的,更没有开发板,这机子壳子也没个螺丝打不开,暂时不知道怎样进入机子的Consle,不过从君正的官方资料搭一个软件开发环境还是没有问题的,希望有硬件研发的兄弟提供方法,能移植点应用程序啥的到上面哈,啥UMPC?咱这个理论上也行 ^_^

Add:070108 已找到Usbboot模式开关,正在寻找进入引导系统中的方法:)
image
image

ADD:080110,分析Onda和驰为的机子固件升级文件包,发现都华飞芯的标识在里面,应该是统一的,而且在里面发现有完整的中文字库和各种图