十二 20
Digg
Stumbleupon
Technorati
Delicious

HTML5未来发展的六大趋势

HTML5从根本上改变了开发商开发Web应用的方式,从桌面浏览器到移动应用,这种语言和标准都正在影响并将继续影响着各种操作平台。

在移动领域,大家争论不休的一个问题就是开发Web应用还是原生应用?而随着HTML5标准的发展,两者之间的差异已经逐渐变得模糊,今天各大媒体都争相报道与HTML5有关的东西,那么,HTML5未来的发展趋势到底是什么?

  1) 移动优先

前天,appMobi获选ReadWriterWeb2012最具前途的的公司,作为一家初创公司,这个奖公司首先专注于在移动平台上如何实现HTML5的简单易用和无处不在。

从如今层出不穷的移动应用就知道,在这个智能手机和将平板电脑大爆炸的时代,移动优先已成趋势,不管是开发什么,都以移动为主。

如上文所说,此前一直困扰移动领域的问题就是开发Web应用还是原生应用。而如今,我们看见一些大型企业如《金融时报》在冲着HTM L5进军移动市场过程中,从App Store撤掉iPad原生应用而开发Web应用,同样表现出色。

许多游戏开发商也将在移动Web应用中扮演中重要角色,移动Web应用优先的趋势将会持续到移动设备统治信息处理领域。其实用户根本不在乎你用什么工具开发了什么应用,不管是Web应用还是原生应用,只要好用就可以了。

  2) 游戏开发者领衔“主演”

其实移动游戏开发商是从HTML5获益最多的一方,他们可利用这个平台逃脱付费游戏须向苹果支付的30%提成。在某种程度上,游戏就是移动平台销量最好的应用,也是吸引人们购买移动设备的一个重要因素。

许多游戏开发商都被Facebook或者Zynga推动着发展,而未来的Facebook应用生态系统是基于HTML5的,尽管在HTML 5平台开发出游戏非常困难,但游戏开发商却都愿意那么做。通过PhoneGap及appmobi的XDK将Web应用游戏打包整合到原生应用中也是一种方式,Facebook差不多就这么干的——基于Web应用及浏览器,但却将之打包整合进原生应用。

  3) 响应式设计&自动变化的屏幕尺寸

在HTML5真的改变移动开发平台之前,必须要迈出重要一步,那就是“响应式设计”,也就是屏幕可以根据内容而自动调整大小。

响应式设计最好的一个例子就是今年上线的BostonGlobe.com(观看视频),其屏幕能够根据任何内容而调整尺寸大小,在访问过其开发商Filament Group后才了解到,响应式设计也并非易事,一些基本概念设计必须从头开始,比如处理媒体库的RespondJS,而且处理来自第三方的图片和广告也是恼人的问题。

要想做好响应式设计,就必须洞悉内容与屏幕之间的反馈关系,一家来自硅谷的响应式设计公司ZURB称,其实在过去的16年中,开发商就意识到响应式设计就要完全离开“流”,转而注重内容是如何在网页和移动设备中被处理的,这一过程还在继续,HTML5会让它最终成为可能。

  4 )设备访问

消除Web应用与原生应用界限的最大障碍就是浏览器访问移动设备基本特性的能力,比如照相机,通讯录,日历,加速器等,利用HTML5实现此能力方面,上文中提到的appMobi算是行业翘楚,在感恩节后开源了所有API。Mozilla也一直在努力通过移动浏览器Fennec来将强设备访问能力。

对许多移动开发商来说,提高设备访问能力是HTML5最令人激动的革新,这意味着Web应用能够登陆移动设备而无需做任何PhoneGap式打包,游戏开发商当然最开心,因为某些特性对他们来说是封锁的,比如能整合到游戏中的加速器。

这就开启了另一个可能的世界,比如能与云更好地整合(这有利于应用内购买,消息推送等)并提高游戏可玩性,有了HTML5这个平台,开发商可以不再依赖于Java语言,CSS3,HTML及其它程序语言。

  5) 离线缓存

这个概念相当新潮,离线情况下,app也能照常运作,算是HTML5充满魔力的一面,今年最好的离线缓存例子就是亚马逊Kindle的云阅读器,可以通过Firefox6以上版本,Chrome11以上版本,Safari5以上版本及iOS4以上版本浏览器将内容同步到所有Kindle系列设备,并能记忆用户在kindle图书馆的一切。

亚马逊就这么实现了离线使用Web应用,许多专家人声称原生应用的末日即将到来,因为Web应用的使用变得简单,无摩擦,适用于任何一个平台或者无需平台。当然Mozilla的触角也伸到了这里,实际上,Mozilla想涉足任何一个HTML5能渗透的领域,从Mozilla的移动蓝图,可以了解更多。

  6) 开发工具的成熟

  • 在今年八月份,Brian Fling曾写过一篇博文叫HTML5 Web应用开发剖析,提出了几点建议供从事HTML5应用的开发者参考:
  •   要耐心,HTML5项目可能比开发其他任何项目好是都要长
  •   做好预算,这不像建网站那么简单,可能会耗费你大量资金
  •   找对开发者,你要记住,这对许多经验丰富的专家来说都非常难的事,那么你的团队也会觉得困难,所以一定要找对人,找到正确的方向
  •   要自食其力,你要知道,开发HTML5项目,许多工具都要自制,不是现成的
  •   在技术界,按部就班的教条风格在这里行不通,会花掉许多不必要的资金,在移动领域,没有对与错,只有是否适合,一切以用户体验为重。

在工具方面,除了appMobi提供的工具以外,还有Sencha及Appcelerator提供的框架及IDE供应用开发商们使用,虽然这些工具现在算不上成熟,也不如Android和iOS上的开发商框架及工具那般简单强大,但至少它们在演进,将会变得越来越好用。

  总结

HTML 5的其它功能,如表单和新标准还在快速演进,而随着标准化工作的进行,HTML5有可能变回HTML。HTML5开发领域的领军人物包括Sencha,Adobe,Appcelerator,appMobi及Facebook,亚马逊,Google三大巨头。

不管你是想开发出新型视频应用的开发商如Brightcover还是想开发新型音频应用的开发商如Soundcloud,不论是桌面应用还是移动应用,HTML5都是创新的主旋律。

英文原文:RWW:Top 6 Trends In HTML5 In 2011

 

 


Author: jianyun
十二 14
Digg
Stumbleupon
Technorati
Delicious

[VSTO] 区分MailItem的attachment是真正的附件还是内嵌资源

在遍历MailItem的Attachments集合的时候发现,不管是真正的附件还是内嵌资源,比如邮件内容中内嵌的图片(Embedded Image),都是Attachments集合的元素,通过查看attachment元素的属性,并没有发现可以区分它们的方法。

其实如果是Outlook2007及以上的话,可以通过MAPI Attachment Reference for PropertyAcessor取得attachment的ContentID来判断。

比较靠谱的判断方法是,

1)先看attachment的Type属性是不是OlAttachmentType.olByValue,如果不是那么它是内嵌的

2)再通过PropertyAccessor.GetProperty的方法看ContentID(http://schemas.microsoft.com/mapi/proptag/0x3712001E)和ContentLocation(http://schemas.microsoft.com/mapi/proptag/0x3713001E)是不是空的,如果是不为空的字符串,那么它是内嵌的

通常做1)和2)的check就行了,但某些情况下,这样还不保险,可以继续下面的check

3)通过PropertyAccessor.GetProperty的方法看METHOD属性(http://schemas.microsoft.com/mapi/proptag/0×37050003)的值是不是6,类型应该是int,如果是那么它是内嵌的

4)通过PropertyAccessor.GetProperty的方法看FLAGS属性(http://schemas.microsoft.com/mapi/proptag/0×37140003)的值是不是4,类型应该是int,如果是那么它是内嵌的

 

下面是代码判断:

private bool isEmbeddedAttachment(Outlook.Attachment attachment)
{
     if(attachment.Type != Outlook.OlAttachmentType.olByValue)
     {
          return true;
     }

     string ATTACH_CONTENT_ID =
              @"http://schemas.microsoft.com/mapi/proptag/0x3712001E";
     string ATTACH_CONTENT_LOCATION =
              @"http://schemas.microsoft.com/mapi/proptag/0x3713001E";
     if(attachment.PropertyAccessor.GetProperty(ATTACH_CONTENT_ID).ToString()
           != string.Empty ||
        attachment.PropertyAccessor.GetProperty(ATTACH_CONTENT_LOCATION).ToString()
           != string.Empty)
     {
          return true;
     }

     string ATTACH_METHOD =
              @"http://schemas.microsoft.com/mapi/proptag/0x37050003";
     if((int)attachment.PropertyAccessor.GetProperty(ATTACH_METHOD) == 6)
     {
          return true;
     }

     string ATTACH_FLAGS =
              @"http://schemas.microsoft.com/mapi/proptag/0x37140003";
     if((int)attachment.PropertyAccessor.GetProperty(ATTACH_FLAGS) == 4)
     {
         return true;
     }

     return false;
}

 

int count = item.Attachments.Count;
//删除邮件中的附件,保留内嵌资源
for(int i = count; i > 0; i--)
{
    if(!isEmbeddedAttachment(item.Attachments[i]))
    {
        item.Attachments[i].Delete();
    }
}

 

 

 


Author: jianyun
十一 28
Digg
Stumbleupon
Technorati
Delicious

每天两分钟 远离电脑病

在电脑前待久了,常常会导致脖子和肩膀僵硬,而且还会产生一些慢性病。当你感觉身体僵硬的时候,做做这些伸展运动吧!放一份在抽屉里,并且在起身在办公室周围散步的时候想到动动胳膊转转身体,你一定会感觉好起来!其实算下来,这个电脑操每次只要两分钟,不少网友转发并收藏该帖子。“没事练练不错啊”、“经常忙到连厕所都忘记上啊”、“最近天天脖子痛,转给各位苦呆的办公族”。具体步骤如何呢?

动作1:十指交叉前平举

动作要领:坐直,收腹挺胸,十指交叉,目视前方,双手与肩同高向前探出,自然呼吸。保持这个动作10-20秒。

功效:拉伸整个手臂和肩部的肌肉,起到放松、缓解疲劳的效果。

动作2、4:十指交叉头上举

动作要领:坐直,收腹挺胸,十指交叉,目视前方,双手伸直上举,直至与身体为一条直线,维持这个动作10-15秒。

功效:拉伸手臂的肌肉、脊柱以及两侧的竖脊肌,防止腰肌劳损和肩颈酸痛。

动作3:背后拉伸侧颈

动作要领:站姿,双腿开立,与肩同宽,向左侧运动时,左手从后面抓住右手肘关节,向左侧施力,同时头部向左侧下方运动。保持8-10秒,还原,换方向。

功效:拉伸肩颈肌肉、斜方肌,起到放松效果,防止肩周炎等肩颈疾病。

动作5:双肩上耸

动作要领:站姿,双手自然下垂,两肩向上耸起,再放松,在3-5秒的时间里持续3次。

功效:放松肩部肌肉,防止肌肉僵硬等肩部疾病。

动作6:站姿侧腰

动作要领:如图所示,向右侧腰时,两腿开立与肩同宽,收腹挺胸,右手主动施力拉左手手臂,方向是右侧下方。弯下去后保持10-12秒,还原,向左侧腰,同右。

功效:拉伸肩颈部肌肉以及腹侧外肌,起到放松提神的效果,可预防肩部酸痛以及腰肌劳损。

动作7、8:合十屈腕挤压

动作要领:手指朝上时,五指并拢,双手合十,保持双掌相贴不分的情况下,腕关节同时向对方施力,保持10秒,还原;手指朝下时动作要领与朝上时相同。

功效:可锻炼腕关节和肘关节,防止“鼠标手”。

动作9:坐姿直臂振肩

动作要领:坐姿,收腹挺胸,双腿并拢,右手伸直上举至耳际,左手伸直向后伸。动作保持8-10秒,还原,换手。

功效:主要拉伸肩关节的肌肉与韧带,可预防肩周炎。

动作10:叠腿转腰

动作要领:如图所示,坐姿,收腹挺胸,向左侧转腰时,左手绕过背部,抓住固定物,向左侧施力;左腿放于右腿之上,右手扶住左腿膝关节处,向右施力;同时转头,腰部主动向左旋转;保持动作8-10秒,还原。向右时与左相反。

功效:拉伸手臂、腰部、臀部等肌肉,可让血液加速循环,提高身体的免疫能力,预防办公室各种关节疾病。

动作11:坐姿推腰

动作要领:坐姿,收腹挺胸,双手虎口向下放于腰部,主动施力于腰部,使得腰部肌肉拉伸收紧,保持施力过程10-15秒,做2-3组。

功效:可防止腰肌劳损,纠正腰椎等。

动作12:摆动双手

动作要领:这个动作好简单,站立,收腹挺胸,双手自然下垂,摆动两手,保持施力过程8-10秒。

功效:锻炼肘关节,防止“鼠标手”。

科普一下 “电脑病”

职业病专家指出,记者、网络设计师、游戏玩家等长期以电脑为主要工具,堪称“电脑病”的“高危人群”。医学界长期进行电脑操作造成的这种眼、手、腕功能性损伤,称为反复紧张性损伤症又称计算机键盘疲劳综合征。从病因来看,长时间注视荧光屏上的绿色画面,一旦视线离开荧光屏,常能把白色的墙壁看成粉红色。如机房空气中正负离子失去平衡,可使人体内生理活性物质受到影响,进而造成精神活动障碍。室内照光和集光不良,操作时姿势不良,工作时间过久,可导致眼睛疲劳,手、腕、臂、肩功能性损伤。此外,有人深更半夜还挂在网上看视频上微博,其实是患上了“贪网症”,彻夜不眠,白昼长睡不醒或无精打采,睡意绵绵,性情也变得暴躁而阴沉。

其实,预防计算机症候群的关键,是在用计算机时保持计算机屏幕、键盘及人体成一条直线。此外,每次工作一段时间后,应站起来活动片刻。不妨做做这套职场最流行的电脑操。此外,上班族预防电脑病要注意劳逸结合,防止肌腱劳损。注意用眼卫生,多吃新鲜蔬菜和水果;喝绿茶防辐射等等。


Author: jianyun
十一 25
Digg
Stumbleupon
Technorati
Delicious

Oracle中RAW(16)与.Net中GUID字符串的转换

平常从来都没碰到过RAW类型的字段,最近碰到一个需求,就是我们数据库中保存了一个VARCHAR类型的GUID字符串,这个是调用FileNet API保存文档到FileNet Content Engine后返回的一个document id。

现在要利用这个document id直接去FileNet的数据库更新一些数据,经过查看和测试发现DOCVERSION这个表应该就是存储文档的信息的表,进一步发现Object_id应该就对应document id,但是这个字段的类型是RAW(16),初步看并不匹配。

在网上查了下发现 http://www.robobunny.com/cgi-bin/guid 解释了Oracle 用RAW(16)来表示GUID,而且这个页面提供了RAW(16)和普通的GUID字符串之间的转换。

后来发现RAW(16)和普通的GUID字符串之间的转换可以用如下方法:

Oracle中:

select * from docversion where substr(object_id,7,2) ||
substr(object_id,5,2) ||
substr(object_id,3,2) ||
substr(object_id,1,2) || ‘-’ ||
substr(object_id,11,2) ||
substr(object_id,9,2) || ‘-’ ||
substr(object_id,15,2) ||
substr(object_id,13,2) || ‘-’ ||
substr(object_id,17,4) || ‘-’ ||
substr(object_id,21,12) = ’64908CFC-2D78-4EC6-A5EF-6AC42B1D3454′

 

.Net中:

        static string DotNetToOracle(string text)
        {
            Guid guid = new Guid(text);
            return BitConverter.ToString(guid.ToByteArray()).Replace("-", "");
        }

        static string OracleToDotNet(string text)
        {
            byte[] bytes = ParseHex(text);
            Guid guid = new Guid(bytes);
            return guid.ToString().ToUpperInvariant();
        }

        static byte[] ParseHex(string text)
        {
            byte[] ret = new byte[text.Length / 2];
            for (int i = 0; i < ret.Length; i++)
            {
                ret[i] = Convert.ToByte(text.Substring(i * 2, 2), 16);
            }
            return ret;
        }

Author: jianyun