MobiNav

All Things Mobility

octobre 31st, 2006

Registry tweaks(should work for most devices using WM5)

 (Source: IndiPPC thanks Mally) 

Disable menu animations
To disable menu animations (sliding in/out) and speed up performance of the UI a bit:
HKLM\SYSTEM\GWE\Menu\AniType = 0 (DWORD decimal)
To change it back to the default:
HKLM\SYSTEM\GWE\Menu\AniType = 6 (DWORD decimal)

Disable window animations
To disable window animations (minimizing/maximizing) and speed up performance of the UI a bit:
HKLM\SYSTEM\GWE\Animate = 0 (DWORD decimal)
And to switch them back on:
HKLM\SYSTEM\GWE\Animate = 1 (DWORD decimal)

Read the rest of this entry »

octobre 30th, 2006

what stands for « C4ISTR »

C4ISTR stands for commands, control, computers and communications, intelligence, surveillance, reconnaissance, and targeting — features at the heart of Network-Centric Warfare.

The common variations for Command, Control and Communications are:

  • C²/C&C (Command and Control)
  • C²IS (Command and Control Information Systems)
  • C³ (Command, Control and Communications)
  • C³I (Command, Control, Communications and Information)
  • C4 (Command, Control, Communications and Computers)
  • C4I (Command, Control, Communications, Computers and Information)
  • C4I² (Command, Control, Communications, Computers, Information and Interoperability)
  • C5I(Command, Control, Communications, Computers, Combat systems and Intelligence)

Variations for Intelligence, Survillance, Reconnaissance and targeting ares:

  • I (Intelligence)
  • S&R (Surveillance and Reconnaissance)
  • RSTA (Reconnaissance, Surveillance and Target Acquisition)
  • STA (Surveillance and Target Acquisition)
  • STAR(Surveillance, Target Acquisition and Reconnaissance)
  • ERSTA (Electro-Optical Reconnaissance, Surveillance and Target Acquisition)
  • STANO (Surveillance, Target Acquisition and Night Observation)
  • ISR (Intelligence, Surveillance and Reconnaissance)
  • ISTAR(Intelligence, Surveillance, Target Acquisition and Reconnaissance)

(Source:解放军报)C4IRS系统有一个从简到繁的发展演变过程。50年代美军最早建立了指挥(Command)与控制(Control)系统,称为C2系统。到60年代加人了通信(Communication)要素,成为C3系统。1977年美军首次把情报(Intelligence)作为指挥自动化不可或缺的要素,并与C3系统结合,成为C3I系统。1989年有专家指出,在C3I系统中,计算机(Computer)也是一个独立的要素,这一意见被广泛地接受,故C3I系统也称C4I系统。进人90年代后期,又加入了侦察(Reconnais-sance)、预警(Surveillance)两个要素,发展成当前的C4IRS系统。今后,这一系统的要素还有可能再增加。C4IRS系统是以电子计算机网络为核心,集指挥、控制、通信、情报、侦察、预警功能于一身,技术设备与指挥人员相结合,对部队和武器系统实施自动化指挥的作战系统。这一系统有战略、战役、战术级别之分,下一级的C4IRS系统是上一级C4IRS系统的子系统,同级的C4IRS系统之间实行互联网,以此达到快速反应、信息共享、协同作战的目的。C4IRS系统现在己成为现代化军队的基本装备和重要标志,发达国家军队和发展中国家军队都相继建立了这种系统,但功能差别很大,不可同日而语。功能最先进的当属美军的C4IRS系统,已普遍装备到营一级部队。支撑该系统的有数以百计的军用卫星,数量可观的预警飞机,遍布全球的通信网站,对来袭的战略核导弹的反应时间仅为5分钟,若总统直接下达命令给一线部队则只需1-3分钟,确实已发展到了令人吃惊的水平。在海湾战争中,由44个国家组成的多国部队70余万兵力、9个航母战斗群计250余艘舰艇、3500余架飞机、数百辆坦克,从空中、海上、地面像施工作业一样有条不紊地对伊拉克军队实施暴风雨般的军事打击,取得了巨大的胜利,靠人工指挥是根本做不到的,在很大程度上要归功于美军的C4IRS系统。多国部队统帅施瓦茨科普夫骄傲地将C4IRS系统称为力量倍增器。除美国外,俄、英、法、德、日、以色列等国的C4IRS系统也相当成熟。目前,C4IRS系统的结构正由集中式向分布式体制发展。这是因为C4IRS系统是军队的 »神经中枢 »,集中式结构的C4IRS系统在战争中一旦遭到破坏,将使全军陷于瘫痪,隐患很大。而分布式结构的C4IRS系统即使一部分受到破坏,未遭破坏的部分仍能照常运转,生存能力显著增强。此外,C4IRS系统的情报、预警、侦察等 »触角 »要素正朝着多层次、全方位的方向发展,以提高捕捉地面、水下、低空、高空和外层空间信息的能力,使整个系统更加耳聪目明、灵活高效。

octobre 27th, 2006

在C#程序中实现插件架构

 [source: 51cto] 

在.NET框架下的C#语言,和其他。NET语言一样提供了很多强大的特性和机制。其中一些是全新的,而有些则是从以前的语言和平台上照搬过来的。然而,这种巧妙的结合产生了一些有趣的方法可以用来解决我们的问题。这篇文章将讲述如何利用这些奇妙的特性,用插件(plug-ins)机制建立可扩展的解决方案。后面也将提供一个简要的例子,你甚至可以用这个东西来替换那些已经在很多系统中广泛使用的独立的程序。在一个系统中,可能有很多程序经常需要进行数据处理。可能其中有一个程序用于处理雇员的信息,而另一个用来管理客户关系。

在大多数情况下,系统总是被设计为很多个独立的程序,他们之间很少有交互,经常使用复制代码的办法来共享。而实际上这样的情况可以把那些程序设计为插件,再用一个单一的程序来管理这些插件。这种设计可以让我们更好的在不同的解决方案中共享公用的方法,提供统一的感观。

图片一是一个例子程序的截图。用户界面和其他常见的程序没有什么不同。整个窗体被垂直的分割为两块。左边的窗格是个树形菜单,用于显示插件列表,在每个插件的分支下面,列出了这个插件所管理的数据。而右边的窗格则用于编辑左边被选中的插件的数据。各个插件提供各自的编辑数据的界面。图片一展示了一个精巧的工作区。

开始

那么,主程序必须能够加载插件,然后和这些插件进行通信,这样才能实现我们的设计.所有这些的实现可以有很多不同的方法,仅取决于开发者选择的语言和平台.如果选择的是C#和.NET,那么反射(reflection)机制可以用来加载插件,并且其接口和抽象类可以用于和插件通信.

为了更好的理解主程序和插件之间的通信,可以先了解一下设计模式.设计模式最早由Erich Gamma提出1,它利用架构和对象思想来实现通用的通信模型.不管组件是否具有不同的输入和输出,只要他们有相似的结构.设计模式可以帮助开发者利用广受证明的面向对象理论来解决问题.事实上它就是描述解决方案的语言,而不用管问题的具体细节或者编程语言的细节.设计模式策略的关键点在于如何把整个解决方案根据功能来分解,这种分解是通过把主程序的不同功能分开执行而完成的.这样主程序和子程序之间的通信可以通过设计良好的接口来完成.通过这种分解我们立即可以得到这两个好处:第一,软件项目被分成较小的不相干的单位,工作流程的设计可以更容易,而较小的代码片断意味着代码更容易建立和维护.第二个好处在于改变程序行为的时候并不会关系到主程序的运行,主程序不用关心子程序如何,他们之间只要有通用的通讯机制就足够了.

建立接口

在C#程序中,接口是用来定义一个类的功能的.接口定义了预期的方法,属性,事件信息.为了使用接口,每个具体的函数必须严格按照接口的定义完成所描述的功能.列表一展示了上面例子程序的接口:IPlug.这个接口定义了四个方法:GetData,GetEditControl,Save和Print.这四个定义并没有描述具体是怎么完成的,但是他们保证了这个类支持IPlug接口,也就是保证支持这些方法的调用.

定制属性

在查看代码之前,讨论总是先得转移到属性定制上面.属性定制是.NET提供的一个非常棒的新特性之一,属性对于所有的编程语言都是一种通用的结构.举个例子,一个函数用于标识可访问权限的public,private,或者protect标志就是这个函数的一个属性.属性定制之所以如此让人兴奋,那是因为编程人员将不再只能从语言本身提供的有限的属性集中选择.一个定制的属性其实也是一个类,它从System.Attribute继承,它的代码被允许是自我描述的.属性定制可以应用于绝大多数结构中,包括C#里面的类,方法,事件,域和属性等等.示例代码片断定义了两个定制的属性:PlugDisplayNameAttribute和PlugDescriptionAttribute,所有的插件内部的类必须支持这两个属性.列表二是用于定义PlugDisplayNameAttribute的类.这个属性用于显示插件节点的内容.在程序运行的时候,主程序将可以利用反射(reflection)来取得属性值.

插件(Plug-Ins)

上面的示例程序包括了两个插件的执行.这些插件在EmployeePlug.cs和CustomerPlug.cs中定义.列表三展示了EmployeePlug类的部分定义.下面是一些关键点.

1.这个类实现了IPlug接口.由于主程序根本不会知道插件内部的类是如何定义的,这非常匾?主程序需要使用IPlug接口和各个插件通信.这种设计利用了面向对象概念里面的 »多态性 ».多态性允许运行时,可以通过指向基类的引用,来调用实现派生类中的方法.

2.这个类被两个属性标识,这样主程序可以判断这个插件是不是有效的.在C#中,要给一个类标识一个属性,你得在类的定义之前声明属性,内容附在括号内.

3.简明起见,例子只是使用了直接写入代码的数据.而如果这个插件是个正式的产品,那么数据总是应该放在数据库中或者文件中,各自所有的数据都应该仅仅由插件本身来管理.EmployeePlug类的数据在这里用EmployeeData对象来存储,那也是一个类型并且实现了IPlugData接口.IPlugData接口在IPlugData.cs中定义,它提供了最基础的数据交换功能,用于主程序和插件之间的通讯.所有支持IPlugData接口的对象在下层数据变化的时候将提供一个通知.这个通知实际上就是DataChanged事件的发生.

4.当主程序需要显示某个插件所含数据列表的时候,它会调用GetData方法.这个方法返回IPlugData对象的一个数组.这样主程序就可以对数组中的每个对象使用ToString方法得到数据以建立树的各个节点.ToString方法是EmployeeData类的一个重载,用于显示雇员的名字.

5.IPlug接口也定义了Save和Print方法.定义这两个方法的目的在于当有需要打印或者保存数据的时候,要通知一个插件.EmployeePlug类就是用于实现打印和保存数据的功能的.在使用Save方法的时候,需要保存数据的位置将会在方法调用的时候提供.这里假设主程序会向用户查询路径等信息.路径信息的查询是主程序提供给各个插件的服务.对于Print方法,主程序将把选项和内容传递到System.Drawing.Printing.PrintDocument类的实例.这两种情况下,和用户的交互操作都是一致的由主程序提供的.

反射(Reflection)

在一个插件定义好之后,下一步要做的就是查看主程序是怎么加载插件的.为了实现这个目标,主程序使用了反射机制.反射是.NET中用于运行时查看类型信息的.在反射机制的帮助下,类型信息将被加载和查看.这样就可以通过检查这个类型以判断插件是否有效.如果类型通过了检查,那么插件就可以被添加到主程序的界面中,就可以被用户操作.

示例程序使用了.NET框架的三个内置类来使用反射:System.Reflection.Assembly,System.Type,和System.Activator.

System.Reflection.Assembly类描述了.NET的程序集.在.NET中,程序集是配置单元.对于一个典型的Windows程序,程序集被配置为单一的Win32可执行文件,并且带有特定的附加信息,使之适应.NET运行环境.程序集也可以配置为Win32的DLL(动态链接库),同样需要带有.NET需要的附加信息.System.Reflection.Assembly类可以在运行的时候取得程序集的信息.这些信息包括程序集包含的类型信息.

System.Type类描述了类型定义.一个类型声明可以是一个类,接口,数组,结构体,或者枚举.在加载了一个类之后,System.Type类可以被用于枚举该类支持的方法,属性,事件和接口.

System.Activator类用于创建一个类的实例.

加载插件

列表四展示了LoadPlugs方法.LoadPlugs方法在HostForm.cs中定义,是HostForm类的一个private的非静态方法.LoadPlugs方法使用.NET的反射机制来加载可用的插件文件,并且验证它们是否符合被主程序使用的要求,然后把它们添加到主程序的树形显示区中.这个方法包含了下面几个步骤:

1.通过使用System.IO.Directory类,我们的代码可以用通配符来查找所有的以.plug为扩展名的文件.而Directory类的静态方法GetFiles能够返回一个System.String类型的数组,以得到每个符合要求的文件的物理路径.

2.在得到路径字符串数组之后,就可以开始把文件加载到System.Reflection.Assembly实例中了.建立Asdsembly对象的代码使用了try/catch代码块,这样如果某个文件并不是一个有效地.NET程序集,就会抛出异常,程序此时将弹出一个MessageBox对话框,告诉用户无法加载该文件.循环一直进行直到所有文件都已遍历完成.

3.在一个程序集加载之后,代码将遍历所有可访问到的类型信息,检查是否支持了HostCommon.IPlug接口.

4.如果所有类型都支持HostCommon.IPlug接口,那么代码继续验证这些类型,检查是否支持那些已预先为插件定义好的属性.如果没有支持,那么一个HostCommon.PlugNotValidException类型的异常将会被抛出,同样,主程序将会弹出一个MessageBox,告诉用户出错的具体信息.循环一直进行直到所有文件都已遍历完成.

5.最后,如果这些类型支持HostCommon.IPlug接口,也已定义了所有需要定义的属性,那么它将被包装为一个PlugTreeNode实例.这个实例就会被添加到主程序的树形显示区.

实现

主程序框架被设计为两个程序集.第一个程序集是Host.exe,它提供了主程序的Windows窗体界面.第二个程序集是HostCommon.dll,它提供了主程序和插件之间进行通信所需的所有类型定义.比如,IPlug接口就是在HostCommon.dll里面配置的,这样它可以被主程序和插件等价的访问.这两个程序集在一个文件夹内,同样的,附加的作为插件的程序集也需要被配置在一起.那些程序集被配置在plugs文件夹内(主程序目录的一个子文件夹).EmployeePlug类在Employee.plug程序集中定义,而CustomerPlug类在Customer.plug程序集中定义.这个例子指定插件文件以.plug为扩展名.事实上这些插件就是个普通的.NET类库文件,只是通常库文件使用.dll扩展名,这里用.plug罢了.特殊的扩展名对于程序运行是完全没有影响的,但是它可以让用户更明确的知道这是个插件文件.

设计的比较

并不是一定要像例子程序这样设计才算正确的.比如,在开发一个带有插件的C#程序时,并不一定需要使用属性.例子里使用了两个自定义的属性,其实也可以新定义两个IPlug接口的参数来实现.这里选择用属性,是因为插件的名字和它的描述在本质上确实就是一个事物的属性,符合规范.当然了,使用属性会造成主程序需要更多的关于反射的代码.对于不同的需求,设计者总是需要做出合理的决定.

总结

示例程序被设计为尽量的简单,以帮助理解主程序和插件之间的通信.在实际做产品的时候,可以做很多的改进以满足实用要求.比如:

1.通过对IPlug接口增加更多的方法,属性,事件,可以增加主程序和插件之间的通信点.两者间的更多的交互操作使得插件可以做更多的事情.

2.可以允许用户主动选择需要加载的插件.

octobre 16th, 2006

Map Server For Windows(MS4W)

MS4W is to allow all levels of MapServer users to quickly install a working environment for MapServer development on Windows. It is also an environment for packaging and distributing MapServer applications.

Contents

The basic MS4W package installs a preconfigured Web Server environment that includes the following components:

  • Apache HTTP server version 2.2.3
  • PHP version 5.1.6 or 4.4.4
  • MapScript 4.10.0(C#, Java, PHP, Python)
  • Includes support for Oracle 10g, and SDE 9.1 data(if you have associated client/dlls)
  • MrSID support built-in
  • GDAL/OGR utilities
  • MapServer Utilities
  • PROJ Utilities
  • Shapelib Utilities
  • Shp2Tile Utility
  • OGR/PHP Extension 1.0.0
  • OWTChart 1.2.0
octobre 16th, 2006

Ka-Map

Ka-Map is an open source project that is aimed at providing a javascript API for developing highly interactive web-mapping interfaces using features availiable in modern web browsers.

octobre 16th, 2006

AJAX在Web-GIS中的运用

[Source:中国城市规划行业信息网]

摘要:随着Web平台越来越成熟,我们可以发现有越来越多的令人兴奋的技术出现,这些技术使地理信息系统(GIS)的显示应用达到了一个功能强大且应用广泛的新高度,通过把最新的功能强大的技术整合到GIS系统中去,我们得到了高效率执行的结果,随之赋予了更多的功能。在目前基于浏览器应用程序的开发技术中,AJAX(Asynchronous JavaScript and XML)无疑是最新的技术。在本文中,我们介绍了一个通用的,高效的架构,这个架构把AJAX模型整合到了GIS Web Services显示系统中。
  Read the rest of this entry »

octobre 14th, 2006

Map server

Mapserver a été développé par la University of Minnesota dans le cadre du projet ForNet en coopération avec la NASA et le minnesota Departement of Natural Resources. 

Mapserver est un enviroonement de développement Open Source permettant de construire des applications internet à référence spatiale. MapServer excelle à afficher vos données spatiales sur le web(cartes, images, et données vectorielles)

MapServer vous permet de créer des « cartes interactives », c’est-à-dire, des cartes qui peuvent guider l’utilisateur ver un contenu.

octobre 12th, 2006

Virtual Terrain Project

Virtual Terrain Project (http://vterrain.org/) is to foster the creation of tools foreasily constructing any part of the real world in interactive, 3D digital form. The tools and their source code are freely shared.

octobre 12th, 2006

GéoPortail en 3D

[Source : Zorgloob

Nasa World Wind (http://worldwind.arc.nasa.gov/) est l’équivalent Open Source de Google Earth. Un développeur, Guilhem Vellut (http://thepochisuperstarmegashow.com/), a développé un plug-in pour le logiciel Nasa World Wind. Ce plug-in récupère les photos du Géoportail (http://www.geoportail.fr/index.php?action=&langue=fr&event=VisitorConnected) de l’IGN pour les superposer en streaming sur le relief de la Nasa World Wind.

L’installation qui explique comment installer le plug-in se trouve ici (en anglais) : (http://thepochisuperstarmegashow.com/2006/08/14/ign-geportail-in-3d-with-world-wind/)

Le rendu est magnifique. Après avoir installé le logiciel Nasa World Wind (http://worldwind.arc.nasa.gov/download.html), vous devrez télécharger le plug-in (http://thepochisuperstarmegashow.com/wp-content/geoportailpluginWW.zip) faisant la connexion avec GéoPortail. Le fichier téléchargé devra être dézippé à la racine du répertoire de Nasa World Wind. A l’ouverture du logiciel de la Nasa, cliquez sur Plug-In > Load/Unload > Sélectionnez Geoportail plugin > puis cliquez sur le bouton Load. (Extrait de la page géolocalisation
(http://www.premiumwanadoo.com/rochesaintsecret/geolocaliser.php3) du site Loupiage.org (http://www.loupiage.org).

octobre 12th, 2006

Google Maps vs MSN Virtual Earth

Voici un site qui nous permet facilement de voir GGMaps et Virtual Earth en même temps:

 http://www.jonasson.org/maps/

|