<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated on Sat, 11 Feb 2012 22:56:00 -0800 -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://software.intel.com/zh-cn/articles/open-source/all/feed/" rel="self" type="application/rss+xml" />
    <title>英特尔软件网络 articles FEED</title>
    <link>http://software.intel.com/zh-cn/articles/open-source/all/</link>
    <description></description>
    <language>zh-cn</language>
    <item>
      <title>激发软件创新，迈向互联计算</title>
      <description><![CDATA[ <br />
<h2 align="center"><strong>MeeGo* 1.0核心软件平台和上网本用户体验版正式发布</strong></h2>
<br />
<p><strong>2010年5月27日</strong> — 面向英特尔“互联计算”（Continuum of Computing）愿景的开放式软件平台——MeeGo 1.0版本按计划于本周正式发布，它为开发者的应用程序开发提供一个稳定的核心基础，并带来丰富的上网本用户体验。按照MeeGo的发布计划，此次率先亮相的为MeeGo上网本用户体验版，而MeeGo手机用户体验版将在6月份对开发者开放。</p>
<p>MeeGo是由英特尔的Moblin与诺基亚的Maemo整合而成、基于Linux系统的软件开发平台，它支持不同硬件架构的最广泛设备种类。对用户而言，MeeGo可以运行在多种设备类型上，从而丰富了消费者的选择。即使更换设备或是进行硬件升级，人们也可以不受限制地保留自己喜爱的应用程序。对开发者来讲，只需编写一次程序，MeeGo便可以让应用程序运行于不同的设备或平台上，这极大地扩展了开发者的市场机会。</p>
<p>在2010英特尔信息技术峰会（IDF）上，英特尔公司高级副总裁、软件与服务事业部总经理詹睿妮女士（Renee J. James）表示：“MeeGo项目完全开放源代码，为用户带来精彩纷呈的互联网、计算和通信操作体验，并拥有基于英特尔®凌动TM处理器的强大图形、多任务及多媒体功能。MeeGo将成为创新的首选，这个软件开发平台能够将服务、内容与用户体验相结合，并广泛应用于下一代智能手机、掌上电脑、通信、车载信息娱乐、电视以及媒体电话等设备。”</p>
<p>MeeGo的发布计划将保持6个月的周期——本周发布的MeeGo 1.0 版本是为上网本提供的。计划在今年第四季度发布的MeeGo 1.1版本，将支持触摸式设备，如手机、平板电脑、车载信息娱乐系统。MeeGo 1.1版开发树（development tree）现已开放，其多种组件也将陆续公布，包括在6月份开放手机用户体验版的开发。</p>
<p>随MeeGo 1.0版本同期发布的还有包括Qt 4.6的MeeGo应用程序编程接口、含有集成应用开发环境的MeeGo SDK和其它各种操作系统工具。目前，MeeGo SDK是专门针对上网本，而下一个MeeGo SDK版本将支持如手机和平板电脑等触摸式设备，将在6月份面向开发者公开。</p>
<br />
<h2>该MeeGo上网本用户体验版包括：</h2>
<ul>
<li>建构在最新开源技术之上的视频效果丰富的上网本用户体验；</li>
<li>通过主屏即时访问同步日历、任务、约会、最近使用的文件和实时社交网络更新的功能；</li>
<li>社交网络内容聚集功能——允许在一个屏幕上看到用户的社交网络活动，轻松实现与朋友互动，并更新自己的状态和站点信息；</li>
<li>面向快速而丰富的互联网体验，MeeGo上网本用户体验版集成了谷歌*浏览器Chrome（或者，如果你喜欢一个完全开源浏览器解决方案，MeeGo还提供了谷歌Chromium支持），不久后，随着MeeGo手机用户体验版发布，MeeGo还将支持Fennec Mozilla*浏览器；</li>
<li>易于使用的电子邮件、日历和媒体播放器应用程序；</li>
<li>高度优化的功耗和性能；</li>
<li>语言支持：日语、韩语、简体中文、繁体中文、瑞典语、波兰语、芬兰语、意大利语、巴西葡萄牙语、法语、德语、西班牙语、俄语、荷兰语、英语、英式英语。</li>
</ul>
<br />
<h2>MeeGo 1.0核心软件平台功能包括：</h2>
<ul>
<li>基于2.6.33内核；</li>
<li>与硬件设备进行交互的DeviceKit和udev；</li>
<li>流行的二维/三维图形堆栈，包括内核模式设置、非根X；</li>
<li>与Connman连接管理器、Ofono电话和BlueZ蓝牙之间的语音和数据连接；</li>
<li>Qt 4.6；</li>
<li>通用即插即用（gUPnP）；</li>
<li>媒体框架；</li>
<li>作为默认文件系统的下一代文件系统BTRFS。</li>
</ul>
<br />
<h2>下面是MeeGo 1.0版本下载地址：</h2>
<ul>
<li><a target="_blank" href="http://meego.com/downloads/releases/netbook">MeeGo v1.0上网本版</a> （<a target="_blank" href="http://meego.com/downloads/releases/netbook">http://meego.com/downloads/releases/netbook</a>,包含完整的MeeGo 1.0上网本用户体验版），支持基于英特尔®凌动™处理器的上网本。更多细节可登录<a target="_blank" href="http://meego.com/downloads/releases/1.0/meego-v1.0-netbooks-google-chrome-browser">上网本版说明</a>；</li>
<li>面向诺基亚*N900的MeeGo 1.0版核心软件平台，更多细节可登录<a target="_blank" href="http://meego.com/downloads/releases/meego-core-software-platform">核心软件平台说明</a>。</li>
<li>请访问 <a target="_blank" href="http://meego.csdn.net/">http://meego.csdn.net/</a> 了解更多有关 MeeGo的中文信息</li>
</ul> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/MeeGo-v1-officially-released/</link>
      <pubDate>Sun, 30 May 2010 06:00:00 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/MeeGo-v1-officially-released/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/MeeGo-v1-officially-released/</guid>
      <category>移动软件开发社区</category>
      <category>Open Source</category>
      <category>ISN General</category>
    </item>
    <item>
      <title>MeeGo在互联计算蓝海中快速崛起</title>
      <description><![CDATA[ <br />
<p><strong>作者：</strong>罗翠钦，行业分析高级顾问，长期关注并跟踪国内外电子、通信、计算机领域的动态及趋势。</p>
<br />
<p>在IDF2010诸多看点中，互联计算(Continuum of Computing)是一个重要概念，而MeeGo又成为互联计算最耀眼的热点。无论高峰会议主题演讲、还是记者专场，抑或一连串的站无立锥之地的MeeGo专题讲堂，以及MeeGo展示专区，都显见与会人员对MeeGo的热情参与和满怀期待。</p>
<p>在MeeGo展区聊访中，来自Linpus的资深人士称，英特尔和诺基亚在MeeGo上的携手合作是对Linux向前推进了一大步，MeeGo把我们OSV（操作系统供应商）的业务领域一下子拓宽了，把我们在原来上网本、笔记本的基础上带到更开阔的领域，公司的研发规划也将会积极进入到更多新的行业应用。</p>
<br />
<h2>跨越多个领域的MeeGo战略</h2>
<p>当有记者在媒体专场中提问，英特尔是否会借MeeGo的推出与ARM在移动通讯领域竞争？英特尔公司执行副总裁兼英特尔架构事业部总经理浦大地（David Perlmutter）明确表示，MeeGo要做的不是在移动领域这片红海中竞争，而是面向更宽阔的蓝海，开拓更广大的市场空间。MeeGo发展战略是跨越互联计算应用的多个领域，从传统电脑到智能手机、电视和汽车等，个性化互联网设备无处不在，所有这些设备都能实现无缝协作，提供出色性能、功效和个性化的内容和服务。</p>
<p>整合两大强大开源社区和应用生态系统的MeeGo，是一个跨领域的Linux操作系统平台，是为下一代计算设备打造的基于Linux的开源软件平台，适用于智能手机、上网本、平板电脑、联网电视、多媒体电话以及车载娱乐信息系统等，针对不同种类、不同屏幕等广泛应用。面朝大海，春暖花开。MeeGo对面是一片宽阔的蓝海，正赶上互联与计算融合的春天。</p>
<p>MeeGo作为基于Linux系统的开源软件平台，支持不同硬件架构的最广泛设备种类。对于开发者而言，这意味着只需编写一次程序，MeeGo便可以让应用程序运行于不同的设备或平台上，这极大地扩展了生态链企业与开发者的市场机会；而对于用户来说，MeeGo可以运行在多种设备类型上，不仅丰富了消费者的选择，即使更换设备或进行硬件升级，人们也可以不受限制地保留自己喜欢的应用程序。</p>
<p>东软作为软件解决方案提供商，致力于提供医疗产品、车载信息娱乐、移动终端、消费电子等多个领域的端到端解决方案，该公司的Widget引擎产品OWE已经成功移植到了MeeGo平台，东软将建立MeeGo能力中心（MeeGo Competency Center），不久会有一系列基于MeeGo的产品上市。东软集团高级副总裁兼首席技术官、首席知识官张霞博士表示：“MeeGo的优势在于快速启动、性能、用户界面和用户体验好，可使东软更专注于产品创新、加速产品的交付。MeeGo允许跨平台无缝的应用程序协同，可以提高软件在不同平台上的复用率，降低开发成本，提高产品竞争力。”</p>
<br />
<h2>加速壮大的MeeGo生态环境</h2>
<p>在IDF2010会场的MeeGo展区，我们看到与英特尔在Moblin时代就紧密合作的多家生态链厂商，如中科红旗、中标软件、Linpus、Novell、风河等，这几家都是Moblin的OSV厂商，如今又满载信心冲在MeeGo未来发展的最前沿。除此之外，还有众多的行业伙伴、应用集成商等庞大产业链阵营，在媒体专场分享了他们与英特尔基于MeeGo的合作进展及思路。</p>
<p>IDF期间，英特尔与腾讯科技签署了一项合作意向书。根据协议，在未来30个月，双方将整合资源，共同致力基于下一代移动互联平台MeeGo的联合创新，为国内用户带来集通信、互动及娱乐为一体的高品质移动体验。Novell在Moblin项目中扮演重要角色，并表示将对在基于英特尔®凌动™处理器的设备上运行的MeeGo提供一如既往的支持。</p>
<p>Linpus是一家来自中国台湾的开源软件供应商，与英特尔在Moblin的合作可追溯到其诞生伊始。在IDF2010的MeeGo展区，Linpus展出了最新版本的旗舰上网本产品以及针对上网应用的操作系统Linpus Lite。现场展示的一台Acer上网本就采用了最新研发的Linpus Lite操作系统，据现场技术人员介绍，目前这个版本的Linpus Lite已经无限接近于5月份即将登场的MeeGo v1.0正式版。</p>
<p>然而，行业玩家们在信心满满的同时，也不无忧虑。中标软件副总裁曹冬表示，做OSV的门槛越来越低了，谁都可以进入了，那么要在以后的竞争中胜出，我们拼得是什么？对于MeeGo生态系统厂商来说，有三个层次非常关键：产业链的和谐发展与共赢，这也是开源MeeGo的一大优势；企业研发要提供在市场竞争的子弹，产品质量要过硬；产品和应用要有创新，走在行业发展的前沿。</p>
<p>说到创新，在中标软件下乡电脑中，就将陆续有搭载MeeGo系统的方正、长城等品牌入市，结合农村具体情况、使用需求及项目所需软件，会大大加快了农村信息化建设的进程。使用MeeGo的好处，一来是降低了成本，二来是MeeGo之上丰富的应用也能满足农村消费者特性化需求与应用。</p>
<br />
<h2>MeeGo在垂直市场的创新应用</h2>
<p>互联网与移动终端日益紧密的结合，为中科红旗在移动互联网的市场上带来了新的机遇。3月底，中科红旗刚刚公布一款最新移动互联网设备操作系统InMimi尚巧版，该平台基于MeeGo，融合了Linux最新开源技术成果，可以应用于多媒体移动互联网设备，如上网本、云设备等。中科红旗总裁兼CEO贾栋表示：“红旗软件一直在移动互联网终端进行着各种创新，InMini尚巧版的发布，将进一步推动互联网移动设备的发展。它具备高度的可定制性，能满足业界厂商不同的多样性需求。” 目前，红旗InMini尚巧版已经逐步应用于一些知名移动终端制造商的产品中。</p>
<p>在计算和消费电子产品领域，上网本是最炙手可热的产品之一，2009年全球上网本出货量达3500万台，众多开发商和软件企业纷纷涉足这一极具吸引力的市场。据Novell现场工程师介绍，作为面向上网本的Moblin领先开发商，Novell推出了基于MeeGo的SUSE Moblin操作系统，使采用英特尔凌动处理器的上网本更受欢迎，为用户带来全新体验，将极为直观的用户界面与集成社交网络的强大功能与便携性完美结合。</p>
<p>车载娱乐信息系统是MeeGo的重要目标市场之一。以英特尔、华泰汽车、蓝星科技和红旗软件为代表的、分别处于汽车电子产业链各方的芯片供应商、整车制造商、硬件供应商和软件供应商等多家业内知名厂商携手，共同打造的首款搭载英特尔架构车载信娱乐系统的华泰元田B11已上市。为消费者提供丰富多彩的车载娱乐信息应用新体验，华泰元田B11不仅能为驾乘者提供实时导航、影音视听等常规功能，更可借助3G网络实现智能互联——用户可以实现网页浏览、邮件收发、移动办公、信息搜索、数字电视等全面、立体、实时的汽车数字生活体验。</p>
<p>中国导航应用的领先服务提供商凯立德也表示，看好MeeGo有充分的理由： MeeGo可以显着降低凯立德的开发成本，支持从手持到预装/后装车载信息娱乐市场中不同外形设计的设备。当具有位置感知能力的MeeGo插件工具发布时，凯立德致力使其旗舰导航产品提供相应服务，以更好地在中国提供其最先进的定位导航/服务产品。</p>
<br />
<h2>MeeGo未来发展前景及开发计划</h2>
<p>软件是充分发挥所有计算设备潜能的关键要素，英特尔拥有一套完整的软件战略，能够让软件公司和开发者驾驭英特尔设备的出色计算能力，同时为消费者和最终用户创造令人兴奋的应用模式。</p>
<p>IDF2010在软件和嵌入式创新机遇方面展示了激动人心的图景。英特尔公司高级副总裁兼软件与服务事业部总经理詹睿妮（Renee J. James）表示，MeeGo的首个版本将在2010年第二季度发布（5月份），未来MeeGo版本将半年进行一次更新，而基于MeeGo的设备将在2010年下半年亮相。现在，MeeGo的核心操作系统软件库提供了包括MeeGo操作系统、中间件等资源，可供开源社区下载、开发以及测试。</p>
<p>前几天，诺基亚和英特尔发布了 MeeGo 分布式基础结构和操作系统基础，包括内核，OS 基础结构和中间件。英特尔开源技术中心主管 Imad Sousou 在他的 MeeGo 博客上写道：“这是 Maemo 和 Moblin 全面结合的一步。我们很高兴打开这些资料库，并开放开发进展过程，正如我们一开始就做的那样。” 这些组件的版本可下载，安装在运行 x86 处理器的便携式设备和上网本或使用ARM处理器的便携式设备上，如诺基亚的 N900 智能手机。从MeeGo社区可以了解到，开发人员对新版MeeGo期待的心情。</p>
<p>詹睿妮还宣布，中国的独立软件开发商（ISV）和开发者现在可充分利用英特尔®凌动™开发者计划，并通过英特尔AppUpSM中心（测试版）提交应用程序进行销售。詹睿妮特别指出，英特尔AppUp中心（测试版）最近已推广到美国、加拿大和27个欧洲国家，可同时支持MeeGo和微软Windows。这一成长态势，使参与英特尔®凌动™开发者计划的中国应用程序开发者，有机会将面向基于英特尔凌动处理器设备的软件产品卖给全球顶级市场的消费者，并用美元、欧元和英镑进行交易结算。</p>
<p>MeeGo推出2个月来，其技术发展进程、生态系统迅速壮大和发展，大大增强了Linux行业人士和企业的信心，也给开源软件行业带了极大活力。在MeeGo v1.0版本即将正式公布之际，业界更是充满了期待。</p> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/MeeGo-rapid-rise/</link>
      <pubDate>Wed, 19 May 2010 06:00:00 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/MeeGo-rapid-rise/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/MeeGo-rapid-rise/</guid>
      <category>移动软件开发社区</category>
      <category>Open Source</category>
      <category>ISN General</category>
    </item>
    <item>
      <title>[Qt Topic] – 二维绘图研习，做一个简单批量水印工具</title>
      <description><![CDATA[ [Qt Topic] – 二维绘图研习，做一个简单批量水印工具<br />作者：Jason Lee<br />日期：2010-05-02<br />平台：Qt SDK v2010.02.1 + Windows Xp<br />声明：文章作者仅在Intel软件网络和CSDN博客发表本文，如有转载，请注明出处<br /><br />[1]二维绘图概览<br />Qt 中的二维绘图是基于QPainter、QPaintEngine和QPaintDevice机制的：以QPaintEngine作为中间接口，使用 QPainter在不同绘图设备上进行绘图操作，而QPaintDevice就是可使用QPainter进行绘图的二维空间。<br />使用QPainter可以在绘图设备上进行绘制以下类的实例：QImage、QBitmap、QIcon、QPixmap、QPicture等各种图像和QPoint、QLine、QPolygon等各种图形以及其它许多，难以列举。<br />目前QPaintDevice的子类有QWidget、QGLWidget、QImage、QPixmap、QGLPixelBuffer、 QGLFrameBufferObject、QPicture、QPrinter。也就是说，可以使用QPainter对这些类的实例进行绘图操作。<br /><br />[2]批量水印工具简单设想<br />第一，既然是批量处理，那么第一个要求是能够打开多个文件。在这里，我将之处理为打开一个文件夹下面所有可支持的图片，但并未继续递归深入地读取子文件夹。<br />第二，要有水印功能，就要求工具能够对打开的图片进行绘图操作。这一点比较简单，就是以上提到的使用QPainter在绘图设备上（比如QImage）进行绘图操作。针对这项功能，我只是简单地提供一个行文本框以输入要水印的文字。<br />第三，因为只是一个简单的、练手的小工具，所以我真的十分简单地实现了它的界面、功能。<br />第四，可以稍微讨论的扩展有：不只是可以用文本进行水印，也可以用图片，原理基本一致；可以继续递归地打开子文件夹中的图像；可以对QListWidget中的项进行右键处理，比如从列表中移除；其它……<br /><br />[3]简单水印工具的实现<br />首先是布局代码。我简单地将界面分为3列：第一列用来打开目标文件夹，进而对里面的图片进行处理；第二列是图片列表，可以切换着观察图片；第三列就是图片浏览区域。以下是部分代码：<br />
<pre name="code" class="cpp">QLabel *markLabel;
QLineEdit *markText;
QHBoxLayout *markLayout;
QLabel *folderLabel;
QLineEdit *folderEdit;
QPushButton *openFolderBtn;
QHBoxLayout *folderLayout;
QPushButton *applyBtn;
QVBoxLayout *leftLayout;
QListWidget *filesList;
QLabel *imageLabel;
QScrollArea *scrollArea;
QHBoxLayout *mainLayout;</pre>
<br />接着是打开目标文件夹，<br />
<pre name="code" class="cpp">connect(openFolderBtn, SIGNAL(clicked()), this, SLOT(slotOpenFolder()));
dirPath = QFileDialog::getExistingDirectory(this, tr("Please Select a Directory"), "",
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
folderEdit-&gt;setText(dirPath);
QDir dir(dirPath);</pre>
<br />然后读取该目录下所有可支持的图片：<br />
<pre name="code" class="cpp">QStringList filters;
foreach (QByteArray format, QImageReader::supportedImageFormats())
filters += "*." + format;

foreach (QString file, dir.entryList(filters, QDir::Files)){
files.append(file);
filesList-&gt;addItem(file);
}</pre>
<br />并且浏览第一张图片：<br />
<pre name="code" class="cpp">if(!files.isEmpty()){
QImage image(dirPath + '/' + files.at(0));
imageLabel-&gt;setPixmap(QPixmap::fromImage(image));
imageLabel-&gt;adjustSize();
}</pre>
<br />到这里，我们实现了打开目标文件夹并将目录下所有图像文件添加进来的功能。<br /><br />为了实现点击不同的图片Item能达到切换图片进行观看的功能，首先连接信号和槽：<br />
<pre name="code" class="cpp">connect(filesList, SIGNAL(currentRowChanged(int)), this, SLOT(slotChangeImage(int)));</pre>
通过QListWidget当前Item的切换信号连接到切换图像的槽，具体代码如下：<br />
<pre name="code" class="cpp">void Topic::slotChangeImage(int i){
if(-1 == i) return;

if(!files.isEmpty()){
QImage image(dirPath + '/' + files.at(i));
imageLabel-&gt;setPixmap(QPixmap::fromImage(image));
imageLabel-&gt;adjustSize();
}
}</pre>
<br />这就达到了切换浏览图片的目的了。<br /><br />最后就是对所有图片进行水印处理了。<br />首先，要确保有用来水印的文字，markText就是此用途：<br />
<pre name="code" class="cpp">if(markText-&gt;text() == ""){
QMessageBox::warning(this, tr("Warning"), tr("No text for marking"));
return;
}</pre>
<br />在有水印文本的条件下，使用QPainter对象来对QImage这个QPaintDevice的子类的实例进行绘图，本质就是简单地使用一下drawText成员函数：<br /><br />
<pre name="code" class="cpp">for(int i=0; i&lt;files.size(); ++i){
QImage image(dirPath + '/' + files.at(i));
QPainter painter(ℑ);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(Qt::blue, 20, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
painter.drawText(10, 10, markText-&gt;text());
image.save(dirPath + '/' + files.at(i));
}
imageLabel-&gt;setPixmap(QPixmap::fromImage(QImage(dirPath + '/' + files.at(0))));
imageLabel-&gt;adjustSize();</pre>
<br />在上面代码中，每次处理完一张图片都立即保存，而如果需要的话可以稍微改动下仅仅实现预览功能，待用户确认后再进行应用以及保存。<br /><img src="http://hi.csdn.net/attachment/201005/2/0_1272815571cWCH.gif" width="172" height="228" /><br />由于本次的代码挺简单的，就不特地做上传了。<br />各位晚安！<br /> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/jasonlee20100502/</link>
      <pubDate>Fri, 30 Apr 2010 06:00:00 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/jasonlee20100502/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/jasonlee20100502/</guid>
      <category>Open Source</category>
      <category>英特尔(R) 软件网络</category>
    </item>
    <item>
      <title>[Qt Topic] – 全局热键、托盘功能和随机启动</title>
      <description><![CDATA[ [Qt Topic] – 全局热键、托盘功能和随机启动<br />作者：Jason Lee<br />日期：2010-04-24<br />平台：Qt SDK v2010.02.1 + Windows Xp<br />声明：文章作者仅在<a href="http://software.intel.com/zh-cn/articles/jason_lee20100430/">Intel软件网络</a>和<a href="http://blog.csdn.net/jasonblog">CSDN博客</a>发表本文，如有转载，请注明出处<br /><br />[1]全局热键<br />Qt事件模型提供了这么一个功能：在一个QObject实例遇到属于它的事件之前，可以通过设置另外一个QObject实例来监视（过滤）这些事件。我们称监视事件的对象为事件过滤器，即eventFilter。<br />通过QObject的eventFilter和installEventFilter两个函数可以实现事件过滤的功能。前者的原型如下：<br /><br />
<pre name="code" class="cpp">bool QObject::eventFilter(QObject *watched, QEvent *event)</pre>
<br /><br /><br />该函数是一个虚函数，所以应该由子类（即用户自定义的继承于QObject类）来重新实现。实现了该虚函数的对象可以作为一个事件过滤器被安装到指定对象上，目标对象通过使用installEventFilter来安装事件过滤器：<br /><br />
<pre name="code" class="cpp">void QObject::installEventFilter(QObject *filterObj)</pre>
<br /><br /><br />上述是一段引言，现在回到全局热键的问题。<br />要在windows下实现捕获全局热键的功能，自然免不了调用windows API，我们首先通过调用API向系统注册全局热键，然后通过事件过滤器来处理热键消息。<br />注册全局热键的API如下：<br /><br />
<pre name="code" class="cpp">BOOL RegisterHotKey(
__in HWND hWnd,
__in int id,
__in UINT fsModifiers,
__in UINT vk
);</pre>
<br /><br /><br />第一个参数是用来接收热键消息的窗体句柄，我们将其设置为Qt中窗口ID；第二个参数是要设置的热键标识；第三个参数代表组合键；第四个参数是热键的虚拟键值。更详细的信息可参阅MSDN。<br />当向系统注册热键成功后，就需要事件过滤器的功能了。由于这里的事件是来自于windows，所以相应的事件过滤器就有点不同——需要使用winEventFilter：<br /><br />
<pre name="code" class="cpp">bool QCoreApplication::winEventFilter(MSG *msg long *result)</pre>
<br /><br /><br />该成员函数也是一个虚函数，通过该过滤器可以处理Qt外部的消息。并且由于该函数是QCoreApplication的成员，要重写该虚函数就要求我们自定义一个QCoreApplication的子类：<br /><br />
<pre name="code" class="cpp">#ifndef QTAPP_H
#define QTAPP_H

#include &lt;QApplication&gt;
#include &lt;windows.h&gt;

class MyApp : public QApplication{
Q_OBJECT
public:
MyApp(int &amp;argc, char **argv);
~MyApp();

virtual bool winEventFilter(MSG *msg, long *result);

signals:
void getF10HotKey();
void getF11HotKey();
};

#endif // QTAPP_H</pre>
<br /><br /><br />最后我们在winEventFilter中处理热键消息，并通过自定义的热键信号来连接目标槽。在本实例中，通过热键F10和F11来切换一个checkBox的选中状态。并且因为是全局热键，所以即便程序失去焦点，也可以响应到热键消息。<br /><br />[2]托盘功能<br />Qt中的托盘功能是通过QSystemTrayIcon类实现的。同时，该类还可以通过setContextMenu成员函数与QMenu类结合来产生一个上下文菜单。以下是一段具体代码：<br /><br />
<pre name="code" class="cpp">trayIcon = new QSystemTrayIcon(this);
trayIcon-&gt;setIcon(QIcon(":/images/star.png"));
trayMenu = new QMenu(this);
showAct = new QAction(tr("Show"), this);
hideAct = new QAction(tr("Hide"), this);
exitAct = new QAction(tr("Exit"), this);
trayMenu-&gt;addAction(showAct);
trayMenu-&gt;addAction(hideAct);
trayMenu-&gt;addSeparator();
trayMenu-&gt;addAction(exitAct);
connect(showAct, SIGNAL(triggered()), this, SLOT(slotShowAct()));
connect(hideAct, SIGNAL(triggered()), this, SLOT(slotHideAct()));
connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
trayIcon-&gt;setContextMenu(trayMenu);
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(trayActived(QSystemTrayIcon::ActivationReason)));
trayIcon-&gt;show();</pre>
<br /><br /><br />系统托盘通过设置上下文菜单后，可以添加各种动作，从而产生一些指定行为。除此之外，如果我们要更生动地实现系统托盘图标的显隐，比如点击关闭或者最小化按钮后将程序隐藏到系统托盘中，而非实际关闭应用程序，可以通过结合closeEvent或者结合changeEvent来判断 windowState来重写当用户点击关闭或者最小化按钮时的处理代码。<br />另外，托盘图标可以做到的更生动的事是当有需要的时候可以弹出一个气泡消息提示用户，比如告知用户某项下载任务已经完成。该功能则可以通过QSystemTrayIcon的成员函数showMessage来实现。<br />托盘功能的效果图如下：<br /><img src="http://hi.csdn.net/attachment/201004/24/0_12721305833CFC.gif" width="71" height="66" /><br /><br />[3]随机启动<br />在Windows下实现随机启动的功能，一般都是通过操作注册表来实现的。我们可以考虑的API函数有：<br /><br />
<pre name="code" class="cpp">LONG WINAPI RegCreateKeyEx(
__in HKEY hKey,
__in LPCTSTR lpSubKey,
__reserved DWORD Reserved,
__in_opt LPTSTR lpClass,
__in DWORD dwOptions,
__in REGSAM samDesired,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
__out PHKEY phkResult,
__out_opt LPDWORD lpdwDisposition
);</pre>
<br /><br /><br />可以通过结合第一个参数hKey和第二个参数lpSubKey来指定要在注册表哪个位置上创建一个新项，并且由倒数第二个参数phkResult来指向获得的项。其它的具体参数含义详见MSDN。（项的解释，来源于中文版的windows操作系统中的注册表）<br /><br />
<pre name="code" class="cpp">LONG WINAPI RegOpenKeyEx(
__in HKEY hKey,
__in_opt LPCTSTR lpSubKey,
__reserved DWORD ulOptions,
__in REGSAM samDesired,
__out PHKEY phkResult
);</pre>
<br /><br /><br />显然，同样是通过hKey和lpSubKey来指定路径，然后通过phkResult来指向获得的项。<br /><br />
<pre name="code" class="cpp">LONG WINAPI RegSetValueEx(
__in HKEY hKey,
__in_opt LPCTSTR lpValueName,
__reserved DWORD Reserved,
__in DWORD dwType,
__in_opt const BYTE *lpData,
__in DWORD cbData
);</pre>
<br /><br /><br />当我们打开一个项时，我们就获得了该项的句柄。接着对该项进行操作时，比如修改某个值的内容，就需要该项的句柄作为第一个参数hKey。第二个参数是值名，如果项中不存在该值名则以改名添加一个新值到该项中。结合图说明可以更加具体：<br /><img src="http://hi.csdn.net/attachment/201004/24/0_12721305943C0Z.gif" width="569" height="26" /><br />截止到Run是随机启动项在注册表中所处的位置。<br /><img src="http://hi.csdn.net/attachment/201004/24/0_12721306008DrI.gif" width="204" height="84" />而新建项就是左边这般模样。<br /><br /><img src="http://hi.csdn.net/attachment/201004/24/0_1272130606ySYS.gif" width="389" height="139" /><br />以上就是项中的值，有多种类型。我们可以通过往Run项添加新值来新增一个自启动项目。<br /><br />
<pre name="code" class="cpp">LONG WINAPI RegCloseKey(
__in HKEY hKey
);
</pre>
<br /><br />操作结束后，需要记得关闭该项。<br /><br />[后记]我本来的预想示例程序是通过热键来切换checkBox的选中状态，进而控制程序是否随机启动，并且实现下系统托盘的简单功能。但写到这里才发现已经凌晨，明天又有事情，所以目前只实现了全局热键和系统托盘的功能，而对于随机启动，只放了两个空函数在代码中还没来得及写，只是对相关API进行了一番粗略概览。<br />希望大家不吝赐教。晚安 &amp; 早安！<br />本实例源码请见：<a href="http://download.csdn.net/source/2281281">http://download.csdn.net/source/2281281</a><br /> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/jason_lee20100430/</link>
      <pubDate>Tue, 27 Apr 2010 06:00:00 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/jason_lee20100430/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/jason_lee20100430/</guid>
      <category>Open Source</category>
      <category>英特尔(R) 软件网络</category>
    </item>
    <item>
      <title>[Qt Topic] – 中文化研习，做一个多语言的简易天气预报器 </title>
      <description><![CDATA[ [Qt Topic] – 中文化研习，做一个多语言的简易天气预报器<br /><br />作者： Jason Lee<br /><br />日期： 2010-04-01 -- 2010-04-02<br /><br />平台： Qt SDK v2010.02.1 + Windows Xp<br /><br />声明： 文章作者仅在<a href="http://software.intel.com/zh-cn/articles/jason_lee/">Intel软件网络</a>和<a href="http://blog.csdn.net/jasonblog">CSDN博客</a>发表本文，如有转载，请注明出处。<br /><br /><br />[1] 简单地使用 QTextCodec 和 tr 配合<br /><br />在默认情况下，我们直接在源码中使用中文，比如 setWindowTitle(tr(" 中文化研习 ")); ，则会在运行界面发现中文乱码。遇到这种问题，如果无需考虑国际化，则可以直接使用 QTextCodec 设置编码方式：<br />
<pre name="code" class="cpp">QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));</pre>
<br />该语句需要包含头文件 #include &lt;QTextCodec&gt; 。<br /><br />选择 GB18030 而不是 GBK 或者 GB2312 是因为前者的汉字收录更丰富，并向下兼容了后两者。但是在嵌入式设备上，如手机或 MP3 ，并不一定支持 GB18030 。<br /><br />而既然是 setCodecForTr ，那么就应该在第一次对 tr() 的调用之前设置编码方式，一般应该在 main() 函数中紧接 Qapplication 对象创建后设置。 tr() 用来返回一个翻译过的文本版本，在编写代码的过程中，对每一个用户可见的文本都应该加上该函数。<br /><br />这样设置了以后，基本的中文显示，如按钮文本、窗口标题以及文本编辑区域，都可以得到良好的显示。<br /><br />值得一提的是，如果出现的不是乱码，而是问号，则可能是字符编码内无该字的编码。另外一种问题是，如果出现的是方框（正方形），而不是乱码，则可能是无该指定字体，可以通过设置 QFont 尝试解决该问题。<br /><br /> <br /><br />[2] 关于使用 QString 来显示中文<br /><br />一是使用 toLocal8Bit 和 fromLocal8Bit 。比如下述代码就可以良好地显示中文：<br /><br />
<pre name="code" class="cpp">QString gbText;<br />gbText = gbText.fromLocal8Bit("汉化");<br />btn = new QPushButton(gbText);<br /></pre>
<br /><br />通过这种方式可以使用系统的本地 8 位编码格式。<br /><br />二是通过 QString 和 QTextCodec 结合，设置在 const char * 和 Qstring 之间转换时使用的编码格式，比如下述代码也可以使得汉字良好显示：<br /><br />
<pre name="code" class="cpp">QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB18030"));<br />QString str = "汉化";<br />textEdit-&gt;append(str);<br /></pre>
<br /><br />[3] 使用 Qt 翻译家<br /><br />Qt 提供了外部的翻译文件，只要对需要进行翻译的文本使用 tr() 函数，然后在 .pro 工程文件中添加 TRANSLATIONS = localizer.ts ，这里的文件名自然要根据具体需要设置。之后使用 lupdate 命令，如 lupdate localizer.pro ，生成 localizer.ts 。接着用 linguist 打开 localizer.ts ，并在文件里面进行相应文本的翻译，保存后发布，生成 localizer.qm 。<br /><br />至此，在包含了头文件 #include &lt;QTranslator&gt; 后，即可以安装翻译家，将相应的文本进行翻译：<br /><br />
<pre name="code" class="cpp">QTranslator translator;<br />translator.load(":/localizer");<br />app.installTranslator(&amp;translator)</pre>
<br /><br />此时再运行程序，则可以发现界面上的文本已经得到翻译了。<br /><br />补充：在上述代码中， localizer.qm 是由 qrc 文件指定位置的，本例中 localizer.qm 相对于 qrc 文件的位置是“ /localizer.qm ”，所以添加的时候使用“ :/localizer ”。而如果 qm 文件相对于 qrc 文件的位置是“ /translator/localizer.qm ”，则需要指定为“ :/translator/localizer.qm ”。<br /><br /> <br /><br />[4] 文件读写中的中文<br /><br />这里以读取 Google 的天气 API 为例。<br /><br />Google 的中文天气 API 为 http://www.google.com/ig/api?hl=zh_cn&amp;weather= ，等号后面加城市名，比如“ beijing ”或者“ hongkong ”。<br /><br />该 API 是以 XML 格式给出信息，而如果我们不加以修饰地直接读取该 XML 文件的话，则会出现如“ é£ åï ¼ ä ¸åã é£ é ”之类的乱码。<br /><br />针对这种情况，可以先使用（不一定必须使用） QString 存放信息，因为可以用 QTextCodec 对 QString 进行编码格式的设置：<br /><br />
<pre name="code" class="cpp">QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));</pre>
<br /><br />这样的话就可以以相应的编码格式进行文件读取。运行后，可以看到中文显示正常。<br /><br />同样地，使用其它方式进行文件读取的话也可以使用类似设置编码格式的方法。比如，使用 QTextStream 时，如果希望使用特定的编码进行读写，则可以使用该类的成员函数 setCodec() 。<br /><br /> <br /><br />[5] 可动态切换语言的天气预报器<br /><br /> 关于这个话题可以精炼成以下几点（具体的完整代码将会在后面给出）：<br /><br />1 、动态的语言切换的实现是通过在运行时，用户进行语言选择时触发的信号引起相应槽的运作。比如可以设置一个语言菜单供用户选择语言，我在这里只设置了英语和中文。当用户点击菜单选项的时候，利用 QTranslator 进行不同 qm 文件的重新载入，然后再重绘可见文本。所以这就要求：一是用户可见的文本应该用 tr() 函数处理，毕竟这不是一样很大的负担，最好将其养成习惯；二是生成用户可见文本的代码最好放在一个函数里，为了取名有意义可以取做 retranslateUi() 。<br /><br />
<pre name="code" class="cpp">void QWR::retranslateUi(){<br />  enAct-&gt;setText(tr("&amp;English"));<br />  cnAct-&gt;setText(tr("&amp;Chinese"));<br />  languageMenu-&gt;setTitle(tr("&amp;Language"));<br />  cityLabel-&gt;setText(tr("City"));<br />  runBtn-&gt;setText(tr("&amp;Run"));<br />  setWindowTitle(tr("QWeatherReporter"));<br />}<br /></pre>
<br /><br />2 、天气预报的功能是通过调用 Google API 实现的，需要注意的是温度单位在国内外的不同。如果当前用户选择英文，就选择英文 API ，同样的，如果用户选择中文，就设置 URL 为中文 API 地址。这就需要在编码的时候进行判断，判断的方式有多种。<br /><br />
<pre name="code" class="cpp">QString url;<br />if(cnAct-&gt;isChecked()){<br />  url = "http://www.google.com/ig/api?hl=zh_cn&amp;weather=";<br />  url.append(cityBox-&gt;text());<br />}else{<br />  url = "http://www.google.com/ig/api?hl=en&amp;weather=";<br />  url.append(cityBox-&gt;text());<br />}<br />request.setUrl(QUrl(url));<br /></pre>
<br /><br />3 、 Google 天气 API 给的结果是 XML 格式的，所以参考 [4] 中提到的，要设置编码格式。正确读取 XML 数据后，再根据结点名称获取具体的天气数据，如最高温、最低温以及日期等。<br /><br />
<pre name="code" class="cpp">QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));<br />QString xmlFile = reply-&gt;readAll();<br />if(xmlFile.size() &lt; 1000){ //Error city information<br />  resultBox-&gt;setText("No Such City!");<br />  return ;<br />}<br /></pre>
<br /><br />4 、最后就是将天气预报的结果呈现出来。<br /><img src="http://qwr.sourceforge.net/images/qwr3.jpg" width="256" height="236" /><img src="http://qwr.sourceforge.net/images/qwr4.jpg" width="257" height="234" /><br /> <br /><br />[ 结语 ] 这个小程序我给放到了 http://qwr.sf.net ，各位如果有兴趣去可以下载完整源码。由于陆续有朋友邮件我说需要源码（其实sf.net上有），所以我给放到了CSDN资源上，地址为：http://download.csdn.net/source/2231965<br /><br /><br />[补充]后来，我在写一个程序的时候发现使用GB18030（或者GBK、GB2312也一样）在我的机子上运行是OK的，但是拿到其他机子（同样的系统）却出现了乱码，这令我很是惊讶。不过后来还是寻求了一个解决方案，就是设置当前编码为本地编码：<br /><br />
<pre name="code" class="cpp">QTextCodec::setCodecForTr(QTextCodec::codecForLocale());<br />QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());</pre>
<br /> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/jason_lee/</link>
      <pubDate>Sun, 25 Apr 2010 06:00:00 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/jason_lee/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/jason_lee/</guid>
      <category>Open Source</category>
      <category>英特尔(R) 软件网络</category>
    </item>
    <item>
      <title>Linux 操作系统新贵 MeeGo 的前世与今生</title>
      <description><![CDATA[ <br />
<p><strong>作者：</strong>罗翠钦，行业分析高级顾问，长期关注并跟踪国内外电子、通信、计算机领域的动态及趋势。</p>
<br />
<p>在刚刚结束的巴塞罗那 2010 世界移动大会上，Linux 智能操作系统家族两股势力合并，即英特尔的 Moblin 与诺基亚的 Maemo，合并后启用新名 MeeGo，并交由 Linux 基金会管理。</p>
<p>MeeGo 问世新闻一出就如猛虎下山，引发业界广泛关注和热议。谁说英雄不问出处？先不论未来是否三分天下而得其一，正是因为其出身显贵，MeeGo 才吸引了众多技术人员、分析人士以及媒体记者，在从来就不缺乏竞争和热闹的移动计算领域，受到格外眷顾。</p>
<p><img src="http://software.intel.com/file/25762" /></p>
<p>很显然，MeeGo 是肩负使命和承载冀望而来。从产业角度的解释，其使命是促使家庭、车载、办公室和便携式等多种设备之间进行无缝通信，广泛应用于便携式笔记本电脑、上网本、平板电脑、多媒体电话、联网电视机和车载信息娱乐系统等；从两家合作者的角度，无疑是英特尔和诺基亚想在 iPhone、Android 风光无限之时夺得自己的一片领地。不仅英特尔和诺基亚，有如此志愿的还有微软，寄望 Windows Phone 7 打个翻身仗。</p>
<p>然而，MeeGo 背后有怎样的故事？MeeGo 究竟为何物？其因何而来，又向谁而去？本文将与您一道探讨。</p>
 <br />
<h2>Linux 操作系统新贵 MeeGo 问世</h2>
<p>MeeGo 出生原因，说来简单，英特尔和诺基亚要合力专注于一个共同的平台，携手谋求更大的事业，而不是单独煞费心神地烹调两份的羹汤。</p>
<table>
<tbody>
<tr>
<td><img src="http://software.intel.com/file/25885" /></td>
<td width="15"></td>
<td>
<p>Forrester 分析师 Ian Fogg 指出，两者确实有很多共同点：同样是基于 Linux；同样都是主攻移动设备；同样的致力于提供杰出丰富的消费者互联网体验。此外，IT 界有部分观点认为，两家的 Linux 系统 Moblin 和 Maemo 之前发展速度都让巨头们有些失望，缺乏手机厂商的支持，诺基亚和英特尔急需转身求变。</p>
<p>连诺基亚自己都承认，从 Maemo 第一个版本面世到搭载到第一款智能手机 N900，时隔有五年。英特尔的 Moblin 可以让开发人员快速开发相关设备驱动及 UI，其 Moblin 社区也一直很活跃，但是基于 Linux 的内核似乎没有什么特别优势，遗憾是，目前还没有智能手机硬件厂商支持 Moblin，这对于在计算设备领域前呼后拥的英特尔而言，显然是亟待解决的问题。</p>
</td>
</tr>
</tbody>
</table>
<p>时间到了 2009 年 6 月，两家联手共书大计昭示天下，声明战略合作关系。双方宣布结成长期合作伙伴，研发下一代基于英特尔架构的无线计算设备和芯片组架构，以及 Linux 项目的合作，英特尔还将获得在未来产品中使用诺基亚 HSPA/3G 调制解调器的许可。</p>
<p>融合后的 MeeGo 问世，应该算是行动上迈出的重要一步。</p>
<br />
<h2>从 Moblin 和 Maemo 看 MeeGo</h2>
<p>MeeGo 继承了分别掌握底层架构和终端设备优势的两大巨头的优秀基因，该操作系统整合了两家各自的 Linux 运算环境（英特尔 Moblin 与诺基亚 Maemo），针对多种计算设备的硬件平台而设计，包括便携式笔记本电脑、上网本、平板电脑、多媒体电话、联网电视机和车载信息娱乐系统等，志在挑战抢尽风头的 Google、Apple 等终端平台及操作系统。</p>
<p>据称 MeeGo 融合了 Maemo 和 Moblin 两者优势，是面向多种处理器架构的开放式平台，MeeGo 保留了 Moblin 核心操作系统的能力，支持广泛的设备类别和丰富用户体验，并结合了 Maemo 在移动产业的影响力，以及已被软件开发人员广泛采用的 Qt 应用和用户界面框架。开发人员现在就可以用 Qt 编写 MeeGo 应用程序，而 MeeGo 的首个版本将在 2010 年第二季度发布。</p>
<p>针对部分厂商担心的诺基亚和英特尔将通过 MeeGo 在未来移动互联网时代获得的控制力和影响力，英特尔曾强调，MeeGo 非英特尔和诺基亚独有，而是定位在开源软件，敞开大门广迎宾友。原 Maemo 社区委员会主席 Valério D Valério 在谈到这个问题时也表示称，"鉴于 Linux 基金会将领导这次合并，而且他们过去的表现已经证明了自己，我想这问题应该也不太需要担心"。</p>
<p>从MeeGo的架构图和相关资料来看，MeeGo分为三层：由Moblin的内核为主的操作系统基础层， MeeGo UI 框架和其他服务构成的中间层，以及针对不同设备的用户体验参考设计。</p>
<p>MeeGo 的应用方面会有飞跃，原有的 Moblin 和 Maemo 应用都可以直接运行在 MeeGo 上，近千个基于 MeeGo Qt, Webkit 的开发应用，多个 Runtime 之上的应用等。同时业内分析人士称，从硬件芯片的角度来看，合并后的 MeeGo 不仅支持基于英特尔架构的芯片（这是在笔记本、上网本、MID 等领域得到广发应用的处理器），也支持 ARM 芯片，而 ARM 芯片广泛应用于智能手机中。这将为 MeeGo 增加一份独特吸引力。</p>
<p>再来看看搭载 MeeGo 操作系统的终端设备开发进度。诺基亚、英特尔两家宣称 MeeGo 将由 Linux 基金会管理，遵循开源开发模式的最佳实践，首个版本将在 2010 年第二季度发布，而 MeeGo 设备将在 2010 年下半年亮相。计划终归是计划，合并后的 MeeGo 在终端的进展如何，还要看这两个玩家的决心和努力程度，让我们拭目以待。</p>
<br />
<h2>MeeGo 引发智能操作系统新竞争</h2>
<p>这个强强联手的故事，貌似也是一个无奈之举，iPhone 大概是其直接促成者。</p>
<p>在北美市场，让诺基亚遭受重挫的，那就是 iPhone。Forrester 分析师 Ian Fogg 在博客中提到，这一合并是"勇敢的玩法"，将使 MeeGo 赢得与 Android、iPhone OS、Chrome、Palm WebOS、Windows Phone 甚至 Ubuntu 桌面平台竞争的优势。但他同时也认为，诺基亚需要一个快速调整，从"说"到"做"甚至跑起来，否则欧洲高端市场也将如北美市场一样成为其他手机厂商的领地。</p>
<p>在智能终端的操作系统竞争中，除了 iPhone OS，当然还有风头正劲的 Android，以及因为大幅改进的新版本而正在恢复竞争力的 Windows Phone。微软与英特尔、诺基亚在操作系统的新姿态，将为其赢得新的竞争优势。J.Gold Associates 分析师 Jack Gold 撰文称，"对于微软、英特尔和诺基亚来说，这确实是一个重新开始，不过微软在更为不利的一个位置，要从更陡的道路上爬回竞争轨道。"</p>
<p>Android 有其优势：合作伙伴多、品牌效应好，是支持ARM芯片架构的 Linux 操作系统，平台公布一年后即取得了智能操作系统 3% 的市场份额，甚至媒体更积极的报道称是 7%。但 Android 也不是无可挑剔，例如，缺乏像苹果、诺基亚那样的品牌影响力，使用者抱怨操作界面和方式都不够友好。</p>
<p>另外，从开发人员的角度，"Android 系统局限很大，开发者无法进入被 Google 牢牢控制的底层，这有点吓人。" Maemo 社区委员会主席 Valério 在比较 Maemo 和 Android 时有如此陈述。在他看来，Maemo（以及 Moblin 和 MeeGo）基于 Linux，有无限的可能性，使用的自由度更大，可以支持整个设备，而 Android 的开放还不够透明。</p>
<br />
<h2>MeeGo 平台改写未来格局？</h2>
<p>无疑，MeeGo 平台将成为一股新势力，加入到智能终端操作系统的激烈竞争中，其未来发展留有极大想象空间。改写智能操作系统格局？一切皆有可能。</p>
<p>分析师 Ian Fogg 给出建议，MeeGo 不应该一下子把注意力放在过于广泛的设备上，如车载信息娱乐、智能手机、上网本、平板电脑等等，而应该集中在一个领域如移动市场取得快速进展。</p>
<table>
<tbody>
<tr>
<td><img height="95" width="78" src="http://software.intel.com/file/25886" /></td>
<td width="15"></td>
<td>最新消息对 MeeGo 是乐观的。就在 MeeGo 问世两周多后，法国电信运营商 Orange 便与英特尔签署了一项战略合作协议，双方携手计划推出配置英特尔<sup>®</sup> 凌动<sup>TM</sup>处理器并运行新的 MeeGo 平台的移动电话和上网本，两家公司还表示，会在 MeeGo 设备上为用户提供类似 Orange 地图和 Orange 电视等多媒体服务。</td>
</tr>
</tbody>
</table>
<p>Orange 是第一个正式宣布支持 MeeGo 的电信运营商，紧接着又引来第二家运营商关注，即意大利电信。意大利电信与英特尔将合作开发运行 MeeGo 系统的下一代互联网和网络电视服务，这一合作的目标是通过结合网络电视、视频点播以及基于网络的更多服务，使多媒体内容的发送和接受更方便、更有吸引力。两家公司还透露，第一款运行 MeeGo 的产品名称为 CuboVision，采用凌动 CE4150 处理器，这款新的多媒体宽带设备将通过数字地面频道带给消费者免费和收费的电视内容。CuboVision 不仅提供来自数字地面电视、网络电视、视频点播及在线游戏等娱乐内容，还支持电子政务、电子医疗、电视商务、家庭自动化、远程教育和远程视频监控等应用。</p>
<p>不过，长期发展关键还要看执行，评论者的担心就在于英特尔和诺基亚的行动能否跟得上计划，足够快速且卓有成效。分析人士称，如果英特尔和诺基亚打算认真建立一个移动平台，应该可以办到，未来发展事实将会证实一切。</p>
<br /> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/Moblin-and-Maemo/</link>
      <pubDate>Sun, 28 Feb 2010 09:00:00 -0800</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/Moblin-and-Maemo/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/Moblin-and-Maemo/</guid>
      <category>移动软件开发社区</category>
      <category>Open Source</category>
      <category>ISN General</category>
    </item>
    <item>
      <title>关于英特尔编译器与GCC编译器在栈内存分配方面的比较( Memory allocation method in stack--Comparison between Intel and GCC compilers)</title>
      <description><![CDATA[ <strong>摘要(Abstract)：</strong><br />      将Linux/Unix程序移植到Windows是一个软件开发的趋势，应用程序能够从丰富的、健壮的Linux/Unix开发库中获取足够的给养，大大缩短了程序的开发周期并提供了优良的程序质量。本篇文章以此为基础，探索了流行的交叉编译器的函数调用规范，结合典型的应用实例逐步分解说明。通过分析函数调用规范中的栈分配策略，论述了它们之间的主要差异和缘由。对使用MMX、SSEX甚至是AVX指令的代码移植工作，具有重要的参考价值，并在此基础上也提出了如何解决问题的两套方案，具有非常高的实践价值。<br />      This paper explores the calling convention of popular compilers by analyzing the simple source codes of demonstration and provides simple and efficient solutions to iron issues out when SSEx instruction set is adopted in applications. It is very worth referring to its thought for migrating Unix/Linux applications to Microsoft Windows platform.<br /><br /><br /><span class="sectionHeadingText">作者简介(Author Bio)：<br /><img height="115" width="90" src="http://software.intel.com/file/27662" alt="1.jpg" title="1.jpg" /><br /><br /></span>      王燕青先生毕业于上海交通大学通信与信息系统专业，并获得硕士学位。他现任在英特尔®公司开发者关系部应用工程师，专职视频、图像和英特尔新技术的咨询和优化工作。他在项目管理、嵌入式系统、图形图像和数字电视有丰富的经验，并曾就职于ATI和三星。<br /><span class="sectionBodyText"><br /><br /><strong>点击</strong><a href="http://software.intel.com/file/28436"><strong>此处</strong></a><strong>下载关于英特尔编译器与GCC编译器在栈内存分配方面的比较.pdf ( Memory allocation method in stack--Comparison between Intel and GCC compilers).</strong><a href="http://software.intel.com/file/27668"><br /></a></span>
			 ]]></description>
      <link>http://software.intel.com/zh-cn/articles/YanqingWang/</link>
      <pubDate>Fri, 27 Nov 2009 06:00:00 -0800</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/YanqingWang/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/YanqingWang/</guid>
      <category>移动软件开发社区</category>
      <category>可管理性软件开发社区</category>
      <category>Open Source</category>
      <category>ISN General</category>
      <category>Tools</category>
      <category>大学项目</category>
      <category>英特尔(R) 软件网络</category>
      <category>英特尔® 学术社区</category>
      <category>Developer Training</category>
      <category>英特尔(R) 软件学院</category>
    </item>
    <item>
      <title>英特尔®软件、技术使机器人汽车在沙漠公路上疾驶</title>
      <description><![CDATA[ <div class="sectionHeading">简介</div>
<div class="sectionBody"><em>如果没有英特尔&reg; 性能库，斯坦福机器人汽车的导航软件将不能达到&ldquo;DARPA 无人驾驶挑战赛&rdquo;的速度。</em><br />
<br />
<strong>作者：Geoff Koch</strong><br />
<br />
2005 年 7 月盛夏的一天，英特尔软件工程师 Bob Davies 正在休假，这是公司为工作每满 7 年的所有英特尔员工提供的为期两个月的长假。然而，Davies 放弃了在热带海滩上放松身心、享受清凉海风和畅饮太阳伞下冰爽饮料的假期，而选择了前往 120 华氏度高温的<a target="_blank" href="http://en.wikipedia.org/wiki/Mojave_Desert">莫哈韦沙漠</a>*。<br />
<br />
Davies 与几位英特尔同事和斯坦福大学的教授与研究生正在北美洲最炎热的地区为名为&ldquo;Stanley（斯坦利）&rdquo;的机器人汽车进行路试，该款汽车将在几个月后<a target="_blank" href="http://news-service.stanford.edu/news/2005/october12/stanleyfinish-100905.html">创造历史</a>*。然而，那一天他们唯一的希望只是能够安然无恙地从沙漠开回宾馆。<br />
<br />
大众途锐 R5*（Volkswagen Touareg R5*）的发动机已经过热，使沸腾的机油溢出了发动机盖。虽然它们因安装了计算机和其它科技装置显得负荷略重，但是斯坦利的驾驶团队已经改进了散热装置，以降低发动机的发热量。<br />
<br />
Davies 说：&ldquo;我们浑身是汗地坐在途锐车座里，忍受着颠簸和沙漠中阵阵热浪的冲击。在电脑的控制下，汽车转向、越野行驶、越过障碍甚至跃起。车上以及在后追赶的车上的每个人都显得异常兴奋。它赋予了&lsquo;调试软件&rsquo;这一术语全新的含义。&rdquo;<br />
<br />
经过几周的调整和调试后，斯坦利和斯坦福赛车队于 10 月 9 日获得了 2 百万美元的奖金，因为它成功地完成了美国国防部高级研究计划局（DARPA）组织的<a target="_blank" href="http://www.grandchallenge.org">大挑战赛</a>* 中的 132 英里赛程，并一举夺魁。斯坦利以 6 小时 54 分的出色成绩完成了比赛，此次比赛旨在促进自动车辆的研究与开发工作。<br />
<br />
与莱特兄弟的<a target="_blank" href="http://www.time.com/time/time100/scientist/profile/wright.html">历史性成就</a>* 相比，斯坦福团队的成功要归功于教授与研究生数百小时的辛勤工作以及其它公司的大力支持。此外，它还得益于采用英特尔软件专业知识和工具的汽车视觉系统，该系统帮助斯坦利以飞快的速度驰骋赛场。<br />
<br />
</div>
<!--page break--><hr />
<div class="sectionHeading">在迷雾中行驶</div>
<div class="sectionBody">斯坦利的顶部安装了能够立即扫描到车道上障碍物的激光设备。但是激光设备仅能扫描到汽车前方几个车身的距离。正如在浓雾中驾驶的司机需要减速慢行，以免发生意外一样，斯坦利如果仅依靠一个激光设备来辨别前方路况，那么它也必须小心前行。<br />
<br />
因此，研发团队采用了摄像系统来进一步探测沙漠路线。照相系统安装于挡风窗内，以防止莫哈维沙尘的污染。照相系统能够捕捉前保险杠前起伏不定的高分辨率路面图像。一款复杂的软件程序将图像、激光装置数据以及车载 GPR 传感器融为一体，从而能够绘制地形，并规划出斯坦利的最佳路线。<br />
<br />
英特尔软件工程师 Adrian Kaehler 与其他几位英特尔和斯坦福的合作者编写的视觉系统内核在比赛当天发挥了作用。Kaehler 对英特尔开放源码计算机视觉库（或称为 <a href="http://www.intel.com/technology/computing/opencv/index.htm">OpenCV</a>）给予了高度评价，这是用于构建通用图像算法的一系列高度优化的规则。<br />
<br />
Kaehle 谈到：&ldquo;OpenCV 将整个流程提升了一个级别，使我们无需再担心与视频和图像工作相关的硬件细节问题。&rdquo;<br />
<br />
Kaehler 在加利福尼亚州圣克拉拉市工作，他不惜牺牲夜晚与周末的休息时间而潜心致力于该项目的研究。他与几名斯坦福大学的研究生共同合作。斯坦福研究生编写了接口层，斯坦利的软件智能系统的其它部分提供视频信息，该系统运行在车厢中七个基于英特尔&reg; 奔腾&reg; M 处理器的计算机上。<br />
<br />
斯坦福大学一位参与该项目的二年级计算机科学博士 Hendrik Dahlkamp 表示：&ldquo;照相系统为系统中提供了大量数据。针对 SSE（SIMD 流指令扩展指令集）和英特尔&reg; Wireless MMX&trade; 技术进行了优化的 OpenCV 使代码能够以前所未有的速度运行。&rdquo;<br />
<br />
除 OpenCV 外，为实现清晰、高效的代码库提供帮助的其它英特尔&reg;软件产品还包括<a href="http://software.intel.com/cd/software/products/apac/zho/vtune/index.htm">英特尔&reg; VTune&trade; 可视化性能分析器</a>。为避免导致系统故障或不稳定性，团队没有做过度的调试，但是 Kaehler 表示：&ldquo;在考虑视觉系统内核中的性能问题时，英特尔&reg; VTune&trade; 可视化性能分析器可使我保持头脑清晰&rdquo;。<br />
<br />
开发过程中还使用了<a href="http://software.intel.com/cd/software/products/apac/zho/perflib/ipp/index.htm">英特尔&reg; 高性能多媒体函数库（英特尔&reg; IPP）</a>和<a href="http://software.intel.com/cd/software/products/asmo-na/eng/compilers/219762.htm">英特尔&reg; 编译器</a>，大多数开发工作在 Windows* 环境下进行，但斯坦利的计算机运行的是 Linux* 操作系统。英特尔软件可运行于两种环境中，从而使研发团队能够更加轻松地跨平台工作。<br />
<br />
Dahlkamp 谈到：&ldquo;英特尔软件充分利用强大的 Windows 开发环境具有重要意义，尽管构建工作机器人有多种定制要求，但采用 Linux 仍是部署的明智之选。&rdquo;<br />
<br />
</div>
<!--page break--><hr />
<div class="sectionHeading">下一步：从旧金山到洛杉矶</div>
<div class="sectionBody">归根结底，紧凑高效的代码为取得成功奠定了坚实基础。平均时速 19.1 英里的斯坦利遥遥领先于取得第二和第三名的卡耐基梅隆大学的 Sandstorm 与 H1lander 机器人汽车，它们的平均时速分别为 18.6 和 18.2 英里。<br />
<br />
计算机科学副教授、斯坦福赛车队的领导者 Sebastian Thrun 对这一成绩感到非常吃惊。<br />
<br />
Thrun 表示：&ldquo;OpenCV 和英特尔&reg; IPP为开发斯坦利的图像算法以及赢得这场历史性的竞赛做出了巨大的贡献；如果没有英特尔性能库的支持，我们的导航软件速度将无法满足苛刻的应用需求。而斯坦利所实现的驾驶速度很大程度上得益于采用了具有图像处理能力突出的 OpenCV。&rdquo;<br />
<br />
成功完成&ldquo;大挑战赛&rdquo;的各个团队所进行的创新将帮助美国国防部高级研究计划局实现由美国国会设立的目标，即到 2015 年可实现支持机器人军事汽车舰队。除了军事应用之外，这些技术还具有重要的、具有长远意义的商业潜力。<br />
<br />
例如：驾驶员辅助特性能够减少人为疏忽或破坏所引起的汽车事故――如驾驶员俯身调整音响或酒后驾驶所引起的事故，从而每年能够挽救数万人的生命。<br />
<br />
Thrun 被许多人称为&ldquo;四处奔波的梦想家&rdquo;，他的下一步目标是希望采用相似的技术来缔造一部能够从旧金山开到洛杉机的汽车。<br />
<br />
Davies 已结束休假，返回到了他安全、清凉、舒适的英特尔工作区。对于将来，他怀揣着更多切实的目标。他准备利用在沙漠中挤出时间所学到的知识来增强英特尔&reg; VTune&trade; 可视化性能分析器的性能――这是一款他十几年前帮助编写的产品。<br />
<br />
Davies 说：&ldquo;我将应用我利用整个夏天进行试验的机器学习算法，来实现一部分性能分析和处理器设计工作的自动化。所以，机器人汽车不会在短时间内上路，我们的工作还在继续。&rdquo;<br />
<br />
</div>
<!--page break--><hr />
<div class="sectionHeading">其它资料</div>
<div class="sectionBody">如欲了解有关 OpenCV 的更多信息（包括加入雅虎* OpenCV 组织的说明、链接 OpenCV 的创建者与英特尔研究员 Gary Bradski 在 2000 年 11 月《Dr. Dobbs Journal》中所撰写的文章），请点击<a href="http://software.intel.com/cd/software/products/apac/zho/vtune/index.htm">此处</a>。<br />
<br />
如欲了解关于英特尔&reg; VTune&trade; 可视化性能分析器、英特尔&reg; 高性能多媒体函数库、英特尔编译器以及其它产品和服务的更多信息，请访问<a href="http://software.intel.com/cd/software/products/apac/zho/index.htm">英特尔&reg; 软件开发产品网站</a>。<br />
<br />
《斯坦福新闻服务》（Stanford News Service）提供了有关斯坦福赛车队赢得 2 百万美元奖金的全面<a target="_blank" href="http://news-service.stanford.edu/news/2005/october12/stanleyfinish-100905.html">报道</a>*，包括照片和视频资料。欲了解更多信息与视频资料，请访问：<a target="_blank" href="http://www.stanfordracing.org">www.stanfordracing.org</a>* 和 <a target="_blank" href="http://www.grandchallenge.org">www.grandchallenge.org</a>。*<br />
<br />
<ul>
    <li><a href="http://software.intel.com/cd/ids/developer/apac/zho/dc/enterprise/index.htm">企业技术内容</a> </li>
    <li><a href="http://software.intel.com/cd/ids/developer/apac/zho/dc/pentium4/index.htm">英特尔&reg;软件网络&mdash;开发商园地--英特尔&reg; 奔腾&reg; 4 处理器</a> </li>
    <li><a href="http://software.intel.com/cd/ids/developer/apac/zho/strategy/opensource/index.htm">英特尔&reg;软件网络&mdash;开发商园地--开放源代码</a> </li>
    <li><a href="http://www.intel.com/cd/ids/developer/asmo-na/eng/">英特尔&reg;软件网络&mdash;技术参考信息与产品</a> </li>
</ul>
</div>
<!--page break--><hr />
<div class="sectionHeading">关于作者</div>
<div class="sectionBody">Geoff Koch 曾任英特尔编辑，于 2004 年获得斯坦福大学通信学硕士学位。目前，他在密歇根州兰辛市从而科学与软件事业。阅读他在斯坦福大学所撰写的关于汽车的其它文章请点击此处，为其留言请发送电子邮件至 <a href="http://software.intel.commailto:gkoch@stanfordalumni.org">gkoch@stanfordalumni.org</a>。<br />
<br />
</div>
<!--page break--><hr /> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/32032/</link>
      <pubDate>Sun, 11 May 2008 20:40:23 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/32032/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/32032/</guid>
      <category>Open Source</category>
    </item>
  </channel></rss>
