<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1951542926024108564</id><updated>2012-01-27T12:59:53.321+11:00</updated><category term='MapGuide'/><category term='Visual Studio'/><category term='FDO'/><category term='other'/><category term='AutoCAD Map'/><category term='phliosophical'/><category term='AutoCAD'/><category term='Fusion'/><category term='Maestro'/><category term='never gonna give you up'/><category term='SharpMap'/><category term='OSGeo'/><category term='OpenLayers'/><category term='FOSS4G'/><category term='WPF'/><category term='Autodesk'/><title type='text'>The Map Guy(de)</title><subtitle type='html'>Need directions?</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default?start-index=101&amp;max-results=100'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>165</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-1947398866050064712</id><published>2012-01-24T00:55:00.002+11:00</published><updated>2012-01-24T00:57:14.596+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><title type='text'>Updated OSGeo Nabble archive link</title><content type='html'>Those of you who prefer a forum-based frontend to the mapguide-users and other OSGeo mailing lists probably had warning about the migration of the OSGeo mailing list archives by nabble.&lt;br /&gt;&lt;br /&gt;Well, in addition to breaking every existing mailing list link (I bet you all the nabble posts I've linked from this blog are completely broken now!), the old archive no longer gives you the link to the new archive location.&amp;nbsp;Real smart move by Nabble!&lt;br /&gt;&lt;br /&gt;Well in case anyone is wondering, here's the new link before nabble took it down along with the old archive:&amp;nbsp;&lt;a href="http://osgeo-org.1560.n6.nabble.com/"&gt;http://osgeo-org.1560.n6.nabble.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What's even funny is the notice at the top of the new archive location&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;We have moved the OSGeo.org archives to this location. Please update your bookmarks.&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;And just who is going to be able to read that? Certainly not the people who have been inconvenienced by this ill-thought out move!&lt;br /&gt;&lt;br /&gt;/rant&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-1947398866050064712?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/1947398866050064712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=1947398866050064712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/1947398866050064712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/1947398866050064712'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2012/01/updated-osgeo-nabble-archive-link.html' title='Updated OSGeo Nabble archive link'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-4591226262195400889</id><published>2012-01-23T23:49:00.001+11:00</published><updated>2012-01-23T23:49:27.861+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><title type='text'>How to: Use mg-desktop in your own .net applications</title><content type='html'>&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #a31515; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;Here I am, talking about &lt;a href="http://themapguyde.blogspot.com/2011/09/taking-mapguide-beyond-server-and-web.html"&gt;mg-desktop&lt;/a&gt;&amp;nbsp;and how it's the next best thing since sliced bread,&amp;nbsp;but I haven't even explained how you can go about using it in your own .net applications! This post aims to rectify this problem.&lt;br /&gt;&lt;br /&gt;This post will aim to show you how to create a simple .net WinForms application that displays a map from the Sheboygan sample data set with a basic selection handler. The final application will look like so:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mAFeRALEchU/Tx1Kta813DI/AAAAAAAAAlU/6mpqpSm2nWs/s1600/20.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="292" src="http://1.bp.blogspot.com/-mAFeRALEchU/Tx1Kta813DI/AAAAAAAAAlU/6mpqpSm2nWs/s320/20.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Before we get started, make sure you have the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Visual Studio 2008 or newer (I'm using the express edition for this post)&lt;/li&gt;&lt;li&gt;The latest binary release of &lt;a href="http://code.google.com/p/mg-desktop/downloads/list"&gt;mg-desktop&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Knowledge of the official MapGuide .net API is also assumed here because most of what you know about the official API is equally applicable to mg-desktop.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So fire up Visual Studio and let's get started!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;1. Download mg-desktop&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Download the &lt;a href="http://code.google.com/p/mg-desktop/downloads/detail?name=mg-desktop-160112.zip&amp;amp;can=2&amp;amp;q=#makechanges"&gt;latest binary release&lt;/a&gt; of mg-desktop and extract this archive to a directory of your choice. We will be referring to files in this location for the rest of this post.&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;2. Set up the Visual Studio Toolbox&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;In order to facilitate drag-and-drop of the map viewer component, we need to register the mg-desktop viewer component into the Visual Studio Toolbox. To do this, right click the toolbox and select &lt;b&gt;Choose Items&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ESCpYH2SrC4/Tx0yO6W4AGI/AAAAAAAAAic/Gn9t-iqlQKQ/s1600/01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-ESCpYH2SrC4/Tx0yO6W4AGI/AAAAAAAAAic/Gn9t-iqlQKQ/s320/01.png" width="222" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This will bring up the &lt;b&gt;Choose Toolbox Items&lt;/b&gt; dialog, click the browse button&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-BGcTn8nMtUs/Tx0ySwd82mI/AAAAAAAAAik/K1dK-7IkVnQ/s1600/02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="217" src="http://4.bp.blogspot.com/-BGcTn8nMtUs/Tx0ySwd82mI/AAAAAAAAAik/K1dK-7IkVnQ/s320/02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Browse to the directory you extracted mg-desktop into and select the OSGeo.MapGuide.Viewer.dll assembly. This will add our viewer components to the list of available components.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The components for reference, are:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;MgMapViewer&lt;/b&gt; - This is the map viewer component&lt;/li&gt;&lt;li&gt;&lt;b&gt;MgLegend&lt;/b&gt; - This is the legend component which can control the display and visibility of layers in the map viewer. This component is optional&lt;/li&gt;&lt;li&gt;&lt;b&gt;MgPropertyPane&lt;/b&gt; - This is the component for displaying attributes of selected features on the map viewer. This component is optional&lt;/li&gt;&lt;li&gt;&lt;b&gt;MgDefaultToolbar&lt;/b&gt; - This is a component containing a common list of functions for interacting with the map viewer (zoom, pan, select, etc). This component is optional. You can roll your own map viewer toolbar, but that requires a lot of boilerplate to set up. This component is provided for convenience.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ygQaXl30ewQ/Tx0yfxodKlI/AAAAAAAAAis/4hL26PIqJtY/s1600/03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="http://3.bp.blogspot.com/-ygQaXl30ewQ/Tx0yfxodKlI/AAAAAAAAAis/4hL26PIqJtY/s320/03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ensure these components are ticked and click &lt;b&gt;OK&lt;/b&gt;&amp;nbsp;to add these components to the Visual Studio Toolbox.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;3. Create a new WinForms project&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;NOTE:&lt;/b&gt;&amp;nbsp;The mg-desktop map viewer is a WinForms component. You can technically use this component in a WPF application using the WPF-WinForms interop libraries, but that is beyond the scope of this tutorial.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we create our WinForms application. Select &lt;b&gt;File - New Project&lt;/b&gt;&amp;nbsp;and select the &lt;b&gt;Windows Forms Application&lt;/b&gt;&amp;nbsp;template.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KcIJ-tOop9I/Tx0ylQbx2FI/AAAAAAAAAi0/wrInRIHHv0k/s1600/04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://1.bp.blogspot.com/-KcIJ-tOop9I/Tx0ylQbx2FI/AAAAAAAAAi0/wrInRIHHv0k/s320/04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;4. Build our main form&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;If you look at the Visual Studio Toolbox, your components should now be visible whenever the WinForms designer is active&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-w8TS0Eup1J8/Tx0ypzAnpsI/AAAAAAAAAi8/IYnvY0QavQU/s1600/05.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://1.bp.blogspot.com/-w8TS0Eup1J8/Tx0ypzAnpsI/AAAAAAAAAi8/IYnvY0QavQU/s320/05.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Drag and drop the &lt;b&gt;MgDefaultToolbar&lt;/b&gt; component into the main form&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-36k6fCcollY/Tx0yup2c13I/AAAAAAAAAjE/YGwv66PJmY0/s1600/06.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="301" src="http://1.bp.blogspot.com/-36k6fCcollY/Tx0yup2c13I/AAAAAAAAAjE/YGwv66PJmY0/s320/06.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now drag and drop a &lt;b&gt;StatusStrip&lt;/b&gt; component into the main form.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-7fDu5s99aFk/Tx0y0Y-dxhI/AAAAAAAAAjM/njCjpWzsqGA/s1600/07.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-7fDu5s99aFk/Tx0y0Y-dxhI/AAAAAAAAAjM/njCjpWzsqGA/s320/07.PNG" width="318" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Add 4 labels to this status strip. These labels will be used to show the following:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;The current mouse coordinates&lt;/li&gt;&lt;li&gt;Any status messages sent by the viewer&lt;/li&gt;&lt;li&gt;The current scale&lt;/li&gt;&lt;li&gt;The size of the map&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-zACPpxlR1yA/Tx03dw5Y3WI/AAAAAAAAAkE/Xs0hkvO8suw/s1600/08.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-zACPpxlR1yA/Tx03dw5Y3WI/AAAAAAAAAkE/Xs0hkvO8suw/s320/08.PNG" width="296" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now add a &lt;b&gt;SplitContainer&lt;/b&gt;&amp;nbsp;to the main part of the form&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ldTgco9XW5g/Tx03hpm9qqI/AAAAAAAAAkM/9dOoD60oAAY/s1600/09.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-ldTgco9XW5g/Tx03hpm9qqI/AAAAAAAAAkM/9dOoD60oAAY/s320/09.PNG" width="284" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Add a second &lt;b&gt;SplitContainer &lt;/b&gt;to the left side of this form with horizontal orientation&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-c1aoMRXMR7c/Tx03lNPLU-I/AAAAAAAAAkU/OobqVaYK-UY/s1600/10.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-c1aoMRXMR7c/Tx03lNPLU-I/AAAAAAAAAkU/OobqVaYK-UY/s320/10.PNG" width="293" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now we can drag and drop the remaining components. Set all components to Dock = Fill to occupy the full space of its container&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Drag and Drop the &lt;b&gt;MgLegend&lt;/b&gt; to the top-left panel&lt;/li&gt;&lt;li&gt;Drag and Drop the &lt;b&gt;MgPropertyPane&lt;/b&gt; to the bottom-left panel&lt;/li&gt;&lt;li&gt;Finally, drag and drop the &lt;b&gt;MgMapViewer&lt;/b&gt; to the main panel&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-AIoTgndpnnA/Tx03pY3i26I/AAAAAAAAAkc/GlAxB1B--2Y/s1600/11.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-AIoTgndpnnA/Tx03pY3i26I/AAAAAAAAAkc/GlAxB1B--2Y/s320/11.PNG" width="293" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Modify the properties of the &lt;b&gt;lblMessage&lt;/b&gt;&amp;nbsp;label as such:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Spring = true&lt;/li&gt;&lt;li&gt;TextAlign = MiddleLeft&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;This will ensure this label takes the maximum space in the status bar&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-7YWpMBKvGIQ/Tx03sdpEOGI/AAAAAAAAAkk/XrxDICbVeKA/s1600/13.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-7YWpMBKvGIQ/Tx03sdpEOGI/AAAAAAAAAkk/XrxDICbVeKA/s320/13.PNG" width="302" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we need to write some code.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;5. Wire-up the viewer components&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Now switch to the code view for Form1. Start by adding importing the &lt;b&gt;OSGeo.MapGuide.Viewer&lt;/b&gt; namespace&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; OSGeo.MapGuide.Viewer;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;To show map viewer status messages, we need this form to implement the &lt;b&gt;IMapStatusBar&lt;/b&gt;&amp;nbsp;interface. This adds the following methods to our form&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetCursorPositionMessage(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetFeatureSelectedMessage(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetMapScaleMessage(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetMapSizeMessage(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;These methods should be self explanatory. Simply connect the &lt;b&gt;message&lt;/b&gt; parameter to its respective label&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetCursorPositionMessage(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    lblCoordinates.Text = message;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetFeatureSelectedMessage(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    lblMessage.Text = message;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetMapScaleMessage(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    lblScale.Text = message;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetMapSizeMessage(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    lblSize.Text = message;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Now how do we tie all of these components (viewer, toolbar, legend, property pane) together? We use a &lt;b&gt;MapViewerController&lt;/b&gt; to do this. Override the &lt;b&gt;OnLoad&lt;/b&gt; method like so:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnLoad(EventArgs e)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; MapViewerController(mgMapViewer1,          &lt;span class="rem"&gt;//The MgMapViewer&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                            mgLegend1,             &lt;span class="rem"&gt;//The MgLegend&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                            &lt;span class="kwrd"&gt;this&lt;/span&gt;,                  &lt;span class="rem"&gt;//The IMapStatusBar&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                            mgPropertyPane1,       &lt;span class="rem"&gt;//The MgPropertyPane&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                            mgDefaultToolbar1);    &lt;span class="rem"&gt;//The MgDefaultToolbar&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That one line (5 if you want to be pedantic), magically ties all our viewer components together. The &lt;b&gt;MapViewerController&lt;/b&gt; basically handles all the plumbing so that your viewer components will properly communicate with each other. Some examples, include:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Selecting an object in the &lt;b&gt;MgMapViewer&lt;/b&gt; will populate the &lt;b&gt;MgPropertyPane&lt;/b&gt; with attributes of the selected feature&lt;/li&gt;&lt;li&gt;Ticking a layer on/off in the &lt;b&gt;MgLegend&lt;/b&gt; will trigger a refresh of the &lt;b&gt;MgMapViewer&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The &lt;b&gt;MapViewerController&lt;/b&gt; automagically sets up all of this for you.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we have a viewer that's all set up, now to load some data into it.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;6. Code - Initialization&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Before we show you how to do this, let's take a segway for a moment. Because we need to cover an important aspect of the mg-desktop API.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Like the official API, the mg-desktop API is driven by service classes. In mg-desktop, the following services are provided:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;MgdResourceService&lt;/b&gt; (inherits from &lt;b&gt;MgResourceService&lt;/b&gt;)&lt;/li&gt;&lt;li&gt;&lt;b&gt;MgdFeatureService&lt;/b&gt; (inherits from &lt;b&gt;MgFeatureService&lt;/b&gt;)&lt;/li&gt;&lt;li&gt;&lt;b&gt;MgRenderingService&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;MgDrawingService&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;MgTileService&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;In the official API, you would access these services via a &lt;b&gt;MgSiteConnection&lt;/b&gt; object. For mg-desktop we use the &lt;b&gt;MgServiceFactory&lt;/b&gt;&amp;nbsp;class to create instances of these services. For example, here's how you would create an instance of &lt;b&gt;MgdFeatureService&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;MgServiceFactory factory = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgServiceFactory();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;MgdFeatureService featureService = (MgdFeatureService)factory.CreateService(MgServiceType.FeatureService);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Other service classes are created in a similar fashion. You would then use these service classes in the same fashion as you would with the official API.&lt;br /&gt;&lt;br /&gt;Also like the official API, we need to initialize the whole thing through a config file first before we can use any of the classes in the API. In our case, the file is &lt;b&gt;Platform.ini&lt;/b&gt;, and we initialize like so:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;MgPlatform.Initialize(&lt;span class="str"&gt;"Platform.ini"&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;With that out of the way, we can start writing some code. First we need to add some references to the project. Add the following references from your mg-desktop directory&lt;br /&gt;&lt;ul&gt;&lt;li&gt;OSGeo.MapGuide.Foundation.dll&lt;/li&gt;&lt;li&gt;OSGeo.MapGuide.Geometry.dll&lt;/li&gt;&lt;li&gt;OSGeo.MapGuide.PlatformBase.dll&lt;/li&gt;&lt;li&gt;OSGeo.MapGuide.Desktop.dll&lt;/li&gt;&lt;li&gt;OSGeo.MapGuide.Viewer.Desktop.dll&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Be sure to set these references (and OSGeo.MapGuide.Viewer) to (&lt;b&gt;Copy Local&lt;/b&gt; = false)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now in our application's entry point, insert our call to&amp;nbsp;initialize&amp;nbsp;the API. Also hook the application's exit event to &lt;b&gt;MgPlatform.Terminate()&lt;/b&gt;, which does some library cleanup. Program.cs should look like this&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; OSGeo.MapGuide;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; MgDesktopSample&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="rem"&gt;/// The main entry point for the application.&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        [STAThread]&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            MgPlatform.Initialize(&lt;span class="str"&gt;"Platform.ini"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            Application.ApplicationExit += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(OnApplicationExit);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            Application.EnableVisualStyles();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            Application.SetCompatibleTextRenderingDefault(&lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;            Application.Run(&lt;span class="kwrd"&gt;new&lt;/span&gt; Form1());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnApplicationExit(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            MgPlatform.Terminate();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;7. Code - Load a package and map&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Now back in our main form, we modify the overridden OnLoad to do the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Check the existence of the map we want to load - &amp;nbsp;&lt;b&gt;Library://Samples/Sheboygan/Maps/Sheboygan.MapDefinition&lt;/b&gt;&lt;/li&gt;&lt;li&gt;If it doesn't exist, prompt the user for the Sheboygan.mgp package and load this package&lt;/li&gt;&lt;/ul&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;MgServiceFactory factory = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgServiceFactory();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;MgdResourceService resSvc = (MgdResourceService)factory.CreateService(MgServiceType.ResourceService);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;MgResourceIdentifier mapDefId = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgResourceIdentifier(&lt;span class="str"&gt;"Library://Samples/Sheboygan/Maps/Sheboygan.MapDefinition"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="rem"&gt;//If this map definition doesn't exist, we ask the user to&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="rem"&gt;//load the Sheboygan package&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (!resSvc.ResourceExists(mapDefId))&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (OpenFileDialog diag = &lt;span class="kwrd"&gt;new&lt;/span&gt; OpenFileDialog())&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        diag.Filter = &lt;span class="str"&gt;"MapGuide Packages (*.mgp)|*.mgp"&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (diag.ShowDialog() == DialogResult.OK)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            MgByteSource source = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgByteSource(diag.FileName);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            MgByteReader reader = source.GetReader();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            resSvc.ApplyResourcePackage(reader);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            &lt;span class="rem"&gt;//No map, nothing to do here&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            Application.Exit();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;At this point, the map definition exists. So we can create a runtime map and load it into the viewer like so:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;//Create our runtime map&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;MgdMap map = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgdMap(mapDefId);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt;//We need a rendering service instance&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;MgRenderingService renderSvc = (MgRenderingService)factory.CreateService(MgServiceType.RenderingService);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="rem"&gt;//Create our viewer provider&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;MgMapViewerProvider provider = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgDesktopMapViewerProvider(map, resSvc, renderSvc);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="rem"&gt;//Initialize our viewer with this provider&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;mgMapViewer1.Init(provider);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The final &lt;b&gt;OnLoad&lt;/b&gt; method for our form looks like so:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnLoad(EventArgs e)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; MapViewerController(mgMapViewer1,          &lt;span class="rem"&gt;//The MgMapViewer&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                            mgLegend1,             &lt;span class="rem"&gt;//The MgLegend&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                            &lt;span class="kwrd"&gt;this&lt;/span&gt;,                  &lt;span class="rem"&gt;//The IMapStatusBar&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                            mgPropertyPane1,       &lt;span class="rem"&gt;//The MgPropertyPane&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                            mgDefaultToolbar1);    &lt;span class="rem"&gt;//The MgDefaultToolbar&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    MgServiceFactory factory = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgServiceFactory();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    MgdResourceService resSvc = (MgdResourceService)factory.CreateService(MgServiceType.ResourceService);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    MgResourceIdentifier mapDefId = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgResourceIdentifier(&lt;span class="str"&gt;"Library://Samples/Sheboygan/Maps/Sheboygan.MapDefinition"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="rem"&gt;//If this map definition doesn't exist, we ask the user to&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="rem"&gt;//load the Sheboygan package&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!resSvc.ResourceExists(mapDefId))&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;using&lt;/span&gt; (OpenFileDialog diag = &lt;span class="kwrd"&gt;new&lt;/span&gt; OpenFileDialog())&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            diag.Filter = &lt;span class="str"&gt;"MapGuide Packages (*.mgp)|*.mgp"&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (diag.ShowDialog() == DialogResult.OK)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                MgByteSource source = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgByteSource(diag.FileName);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                MgByteReader reader = source.GetReader();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                resSvc.ApplyResourcePackage(reader);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                &lt;span class="rem"&gt;//No map, nothing to do here&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                Application.Exit();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;    &lt;span class="rem"&gt;//Create our runtime map&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;    MgdMap map = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgdMap(mapDefId);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;    &lt;span class="rem"&gt;//We need a rendering service instance&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;    MgRenderingService renderSvc = (MgRenderingService)factory.CreateService(MgServiceType.RenderingService);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;    &lt;span class="rem"&gt;//Create our viewer provider&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    MgMapViewerProvider provider = &lt;span class="kwrd"&gt;new&lt;/span&gt; MgDesktopMapViewerProvider(map, resSvc, renderSvc);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    &lt;span class="rem"&gt;//Initialize our viewer with this provider&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;    mgMapViewer1.Init(provider);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;7. Set up post-build and other loose ends&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Now if you've worked with the official MapGuide .net API (and this whole post assumes you do), you know that referencing the MapGuide .net assemblies does not instantly give you a working MapGuide application. That's because those .net assemblies are managed wrappers around unmanaged dlls, so you need them as well. So for the official API, you would copy all the dlls from mapviewernet into your application's output directory so that all dependencies are met.&lt;br /&gt;&lt;br /&gt;For mg-desktop, we pretty much do the same thing, we copy everything from our mg-desktop directory to our application's output directory. Or to automate this, include an xcopy command as part of your project's post build event. Assuming you extracted the mg-desktop binaries to &lt;b&gt;C:\mg-desktop&lt;/b&gt;, and example post build command would be like so:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-gWS6dZYLTW8/Tx1IJXiOXkI/AAAAAAAAAlM/L74raGitXEo/s1600/19.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="260" src="http://4.bp.blogspot.com/-gWS6dZYLTW8/Tx1IJXiOXkI/AAAAAAAAAlM/L74raGitXEo/s320/19.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This will copy all mg-desktop files (dlls, FDO, CS-Map dictionaries, etc, etc) to your application's output directory with the source directory structure intact, which is important because the default paths in Platform.ini are all relative.&lt;br /&gt;&lt;br /&gt;If you are on a 64-bit machine, you will also need to explicitly set the CPU type of the application to &lt;b&gt;x86&lt;/b&gt;&amp;nbsp;instead of &lt;b&gt;Any CPU&lt;/b&gt;. If you don't do this, you will get a &lt;a href="http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx"&gt;BadImageFormatException&lt;/a&gt; thrown at your face as your executable will default to 64-bit and will attempt to load a 32-bit assembly. Actually, you should do this anyway to ensure the application works on both 32-bit and 64-bit windows.&lt;br /&gt;&lt;br /&gt;Once this is all set up, you can compile and run your application!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mAFeRALEchU/Tx1Kta813DI/AAAAAAAAAlU/6mpqpSm2nWs/s1600/20.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://1.bp.blogspot.com/-mAFeRALEchU/Tx1Kta813DI/AAAAAAAAAlU/6mpqpSm2nWs/s320/20.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Go on. Have a play around. It is now a fully functional map viewer application!&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;8. Custom selection handling&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;One of the things you would probably want to do in your application is to listen for selection changes and run code in response to such changes. The &lt;b&gt;MgMapViewer&lt;/b&gt; component exposes a &lt;b&gt;SelectionChanged&lt;/b&gt; event for this very purpose.&lt;br /&gt;&lt;br /&gt;So to display the address of a selected parcel, the event handler code would look like this:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; mgMapViewer1_SelectionChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    MgSelectionBase selection = mgMapViewer1.GetSelection();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    MgReadOnlyLayerCollection layers = selection.GetLayers();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (layers != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; layers.GetCount(); i++)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            MgLayerBase layer = layers.GetItem(i);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (layer.Name == &lt;span class="str"&gt;"Parcels"&lt;/span&gt;) &lt;span class="rem"&gt;//The selected layer is parcels&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                &lt;span class="rem"&gt;//Check that we only have one selected object&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                &lt;span class="kwrd"&gt;int&lt;/span&gt; count = selection.GetSelectedFeaturesCount(layer, layer.FeatureClassName);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (count == 1)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                    MgFeatureReader reader = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                        reader = selection.GetSelectedFeatures(layer, layer.&lt;span style="background-color: white;"&gt;FeatureClassName&lt;/span&gt;&lt;span style="background-color: transparent;"&gt;, &lt;/span&gt;&lt;span class="kwrd" style="background-color: transparent;"&gt;false&lt;/span&gt;&lt;span style="background-color: transparent;"&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.ReadNext())&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                            &lt;span class="rem"&gt;//Address is in the RPROPAD property&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                            &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.IsNull(&lt;span class="str"&gt;"RPROPAD"&lt;/span&gt;))&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                                MessageBox.Show(&lt;span class="str"&gt;"Selected parcel has no address"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                                MessageBox.Show(&lt;span class="str"&gt;"Address: "&lt;/span&gt; + reader.GetString(&lt;span class="str"&gt;"RPROPAD"&lt;/span&gt;));&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;finally&lt;/span&gt; &lt;span class="rem"&gt;//You must always close all readers, otherwise connections will leak&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                        reader.Close();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                    MessageBox.Show(&lt;span class="str"&gt;"Please select only one parcel"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Which would result in this behaviour when selecting a parcel&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--xyR76W2K5c/Tx1Qht8FxmI/AAAAAAAAAlc/abKQBn_NO9U/s1600/21.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://2.bp.blogspot.com/--xyR76W2K5c/Tx1Qht8FxmI/AAAAAAAAAlc/abKQBn_NO9U/s320/21.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Selecting multiple parcels gives you the following:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-rMKRVynD6gg/Tx1Q1BuAqWI/AAAAAAAAAlk/6Hvn92lf5_4/s1600/22.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="299" src="http://4.bp.blogspot.com/-rMKRVynD6gg/Tx1Q1BuAqWI/AAAAAAAAAlk/6Hvn92lf5_4/s320/22.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Wrapping up&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Hopefully this should give you a comfortable introduction to mg-desktop and its viewer component. Where you go from here is completely up to you.&lt;br /&gt;&lt;br /&gt;The source code for this example is available for download &lt;a href="http://code.google.com/p/mg-desktop/downloads/detail?name=MgDesktopSample.zip&amp;amp;can=2&amp;amp;q="&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-4591226262195400889?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/4591226262195400889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=4591226262195400889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/4591226262195400889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/4591226262195400889'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2012/01/how-to-use-mg-desktop-in-your-own-net.html' title='How to: Use mg-desktop in your own .net applications'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-mAFeRALEchU/Tx1Kta813DI/AAAAAAAAAlU/6mpqpSm2nWs/s72-c/20.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-8995525990620125924</id><published>2012-01-19T04:53:00.000+11:00</published><updated>2012-01-19T04:53:45.951+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><title type='text'>mg-desktop has moved</title><content type='html'>With the implementation of &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc117"&gt;MapGuide RFC117&lt;/a&gt;, I have finally migrated the source code for mg-desktop from its current home at &lt;a href="http://code.google.com/p/mg-desktop/"&gt;Google Code&lt;/a&gt; to the official &lt;a href="http://trac.osgeo.org/mapguide"&gt;MapGuide Subversion repository&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This migration allows for the mg-desktop codebase to better integrate with the MapGuide source that it builds on top of, and allows mg-desktop to receive upstream component fixes and updates much faster and allows for sharing of component dlls with future releases of MapGuide.&lt;br /&gt;&lt;br /&gt;Also with everything together in one place, I can finally tackle some of the more interesting things like 64-bit and Linux builds and support for the VS2010 compiler.&lt;br /&gt;&lt;br /&gt;The existing Google Code site will remain for archival purposes, but all mg-desktop development will now take place on the official MapGuide repo.&lt;br /&gt;&lt;br /&gt;Since we're on the subject of mg-desktop, I might as well show you a visual changelog of the changes and features added to mg-desktop since &lt;a href="http://themapguyde.blogspot.com/2011/09/taking-mapguide-beyond-server-and-web.html"&gt;I first announced it&lt;/a&gt;. Most of these changes I am showing in this post are centered on the map viewer component (otherwise there wouldn't be much to show :-)). So without much further ado:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;Tooltip queries can slow down map interaction, so the default viewer toolbar now includes a command allowing you to toggle display of feature tooltips.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-AfAFBEDZw5M/Txb8Eige-iI/AAAAAAAAAhk/eyGl26rXyCU/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://4.bp.blogspot.com/-AfAFBEDZw5M/Txb8Eige-iI/AAAAAAAAAhk/eyGl26rXyCU/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;2. The viewer supports customizable selection color&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-yukC5R2RqaM/Txb9KJazJqI/AAAAAAAAAhs/ouLANbzrRkU/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="303" src="http://4.bp.blogspot.com/-yukC5R2RqaM/Txb9KJazJqI/AAAAAAAAAhs/ouLANbzrRkU/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;3. To&amp;nbsp;facilitate rapid development, the viewer component works with the Visual Studio designer infrastructure. Viewer properties and&amp;nbsp;behaviour&amp;nbsp;can be modified like you would any other form or control. The OSGeo.MapGuide.Viewer.dll must be registered with the Visual Studio Toolbox to support this workflow.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ShCsiOyqm0s/Txb_S50xwWI/AAAAAAAAAh0/cB6LT4YFH6Y/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://4.bp.blogspot.com/-ShCsiOyqm0s/Txb_S50xwWI/AAAAAAAAAh0/cB6LT4YFH6Y/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;4. The default viewer toolbar has more useful commands such as:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Copying the current view of the map to the clipboard (as an image)&lt;/li&gt;&lt;li&gt;Selecting by radius and polygon&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zPgHBLtcBc0/TxcABjwYpUI/AAAAAAAAAh8/5BVjf-wSk4Q/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="18" src="http://4.bp.blogspot.com/-zPgHBLtcBc0/TxcABjwYpUI/AAAAAAAAAh8/5BVjf-wSk4Q/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;5. The legend control now functions like the one in the AJAX or Fusion viewer. Supporting display of themes, and having the ability to apply theme compression (because it too has &lt;a href="http://themapguyde.blogspot.com/2011/12/fusion-is-actually-usable-now.html"&gt;problems with processing ridiculously large themes&lt;/a&gt;)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-07lzoTvdA4I/TxcBvDForWI/AAAAAAAAAiE/zmrY650P7qI/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://1.bp.blogspot.com/-07lzoTvdA4I/TxcBvDForWI/AAAAAAAAAiE/zmrY650P7qI/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;6. Layer and Group items in the legend control can have context menus attached to them&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-3ZVoXxxArW4/TxcCbutH77I/AAAAAAAAAiM/DV9uk-TYpBs/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://2.bp.blogspot.com/-3ZVoXxxArW4/TxcCbutH77I/AAAAAAAAAiM/DV9uk-TYpBs/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;7. Like the AJAX and Fusion viewers, the property pane supports scrolling through the results of a selection set and zooming into individual results&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-H3UX3IjX77I/TxcDdYj87tI/AAAAAAAAAiU/9didh66hfn4/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="258" src="http://3.bp.blogspot.com/-H3UX3IjX77I/TxcDdYj87tI/AAAAAAAAAiU/9didh66hfn4/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;At this point we have something approaching 90% of the functionality of the AJAX and Fusion viewers. The missing 10% are apparent once you see it:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No support for tiled maps. The viewer control has a property that allows tiled maps to be treated as regular groups of dynamic layers as a workaround. The math to calculate what tiles to fetch escapes me right now.&lt;/li&gt;&lt;li&gt;No mouse wheel zoom. The math to do this also escapes me right now.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;If these items aren't dealbreakers for you, then mg-desktop is a more than suitable platform for building disconnected desktop mapping applications using the same MapGuide and FDO technology that you are all familiar with.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-8995525990620125924?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/8995525990620125924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=8995525990620125924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/8995525990620125924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/8995525990620125924'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2012/01/mg-desktop-has-moved.html' title='mg-desktop has moved'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-AfAFBEDZw5M/Txb8Eige-iI/AAAAAAAAAhk/eyGl26rXyCU/s72-c/Capture.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-5817328239853476754</id><published>2012-01-19T03:47:00.001+11:00</published><updated>2012-01-19T03:47:54.372+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Some useful tools for debugging your MapGuide Applications</title><content type='html'>A common problem with MapGuide development is trying to dig into the state of the runtime map, especially when trying to figure out why the new layer you've added to your runtime map is not showing. Here's some useful tools to help you peek into the runtime map.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;1. mapinfo.aspx&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Get the script &lt;a href="http://trac.osgeo.org/mapguide/browser/trunk/MgDev/Doc/samples/dotnetsamples/common/mapinfo.aspx"&gt;here&lt;/a&gt;&amp;nbsp;(you will also need the supporting &lt;a href="http://trac.osgeo.org/mapguide/browser/trunk/MgDev/Doc/samples/dotnetsamples/common/viewresourcecontent.aspx"&gt;viewresourcecontent.aspx&lt;/a&gt; script as well)&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;This was a script I wrote while porting over the MapGuide Developer's Guide samples to .net (which will be bundled with the next MapGuide Open Source release in *all* languages, instead of just PHP) to help me debug a mysterious bug where newly added layers are shown on the map, but not in the viewer legend. The script accepts two URL parameters:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MAPNAME - The name of the runtime map&lt;/li&gt;&lt;li&gt;SESSION - The current session id&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Invoking this script, gives you a nice detailed view about the state of the given runtime map&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-b1wi0AWqhG8/Txbz8qfD7zI/AAAAAAAAAhU/amcWxqgGho8/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-b1wi0AWqhG8/Txbz8qfD7zI/AAAAAAAAAhU/amcWxqgGho8/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;You'll notice that the resource ids are hyperlinked. These links call into &lt;b&gt;viewresourcecontent.aspx&lt;/b&gt;, which basically shows you the resource content of the hyperlinked resource id.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To set this up, drop &lt;b&gt;mapinfo.aspx&lt;/b&gt; and &lt;b&gt;viewresourcecontent.aspx&lt;/b&gt; into a directory of your choice. Set this directory up as an application in IIS, then create a bin directory and drop in the MapGuide dlls from your mapviewernet directory.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then to invoke this script, enter http://&lt;b&gt;url-to-your-directory&lt;/b&gt;/mapinfo.aspx?MAPNAME=&lt;b&gt;theMapName&lt;/b&gt;&amp;amp;SESSION=&lt;b&gt;your-mapguide-session-id&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Because this script takes a MAPNAME and a SESSION parameter. It can automatically be used as an Invoke URL command in your Web Layout. Just create an Invoke URL command that points to mapinfo.aspx, attach it to a toolbar or menu and it is ready to be used in your Web Layout for instant debugging!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;2. Runtime Map Inspector&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Coming in the next release of Maestro, is a Runtime Map Inspector tool which&amp;nbsp;fulfils the same purpose as mapinfo.aspx. Invoking the tool will bring up the familiar Maestro login (which you are &lt;b&gt;advised&lt;/b&gt;&amp;nbsp;to use the Administrator login as that can peek into any user's session repository). Once logged in, a new window will appear where you can fill in the required &lt;b&gt;Map Name&lt;/b&gt;&amp;nbsp;and &lt;b&gt;Session ID&lt;/b&gt;&amp;nbsp;and then click the &lt;b&gt;Load Map&lt;/b&gt;&amp;nbsp;button to bring up the runtime map.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-H-VmZUFHODo/Txb3Fx1V1MI/AAAAAAAAAhc/Y5jdnOz4btQ/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://3.bp.blogspot.com/-H-VmZUFHODo/Txb3Fx1V1MI/AAAAAAAAAhc/Y5jdnOz4btQ/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Runtime Map Inspector will be available in the next release under &lt;b&gt;Tools&lt;/b&gt;&amp;nbsp;- &lt;b&gt;Runtime Map Inspector&lt;/b&gt;, or by running the RtMapInspector.exe&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hopefully, these new tools will make your MapGuide development experience that much more simpler (if it isn't already!)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-5817328239853476754?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/5817328239853476754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=5817328239853476754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/5817328239853476754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/5817328239853476754'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2012/01/some-useful-tools-for-debugging-your.html' title='Some useful tools for debugging your MapGuide Applications'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-b1wi0AWqhG8/Txbz8qfD7zI/AAAAAAAAAhU/amcWxqgGho8/s72-c/Capture.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-4655952568253251696</id><published>2011-12-31T16:42:00.003+11:00</published><updated>2012-01-03T18:56:33.507+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='FDO'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><title type='text'>My MapGuide/FDO wishlist for 2012</title><content type='html'>Might as well get this in before the last day of the year ticks over&lt;br /&gt;&lt;br /&gt;Here's a list of what I'm hoping for MapGuide/FDO in 2012 (or is this my personal to-do list? :-)).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;FDO&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Raster support for the PostGIS provider&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://postgis.refractions.net/"&gt;The best open source spatial extension&lt;/a&gt; just recently had &lt;a href="http://trac.osgeo.org/postgis/wiki/WKTRaster"&gt;support for raster imagery&lt;/a&gt;. Wouldn't it be nice, to have all your vector and raster data in one centralised database that is accessible via FDO?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. A more FDO-capable OGR provider&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Like the ODBC provider, the OGR provider is a quick and easy way to tap into the vast array of data formats out there which do not have a dedicated FDO provider (most notably, MapInfo). However the OGR provider itself could do with some improvements to better support the FDO-isms like:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Supporting the ability to create data stores (ie. Mapping FdoICreateDataStore to OGR's &lt;a href="http://www.gdal.org/ogr/classOGRSFDriver.html#4339101b2d0851e788b6bcfd248780f6"&gt;CreateDataSource&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Ability to sort. The OGR SQL dialect supports ORDER BY clauses, so this should be possible. Sortability &lt;a href="http://themapguyde.blogspot.com/2011/12/improving-feature-join-experience-or.html"&gt;greatly improves Feature Join performance&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://trac.osgeo.org/fdo/wiki/FDORfc50"&gt;FDO Join&lt;/a&gt; support. The OGR SQL dialect supports JOIN statements as well (only LEFT JOIN, but still a FDO supported join type)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;3. FDO Join support for other FDO RDBMS providers&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;For the best Feature Join performance &lt;a href="http://themapguyde.blogspot.com/2011/11/improving-feature-join-experience.html"&gt;scenarios&lt;/a&gt;, all RDBMS-based providers should support this new API. Given the SQL Server provider (which supports FDO joins) is derived from a &lt;a href="http://fdo.osgeo.org/fdordbms/index.html"&gt;common base&lt;/a&gt; that all other FDO RDBMS providers come from, I'd gather that adding support for would be a case of flipping a few bits here and there.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;MapGuide&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Improve MapGuide's standing as a geospatial services platform&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Or to put it in one word: Interoperability. Currently, MapGuide has excellent data interoperability (due to FDO) but has weak service interoperability. It only does WFS/WMS and not much else. Talking to a MapGuide Server and tapping into the services available still requires specialized and dedicated client code or software and not something that can work via one or more &lt;a href="http://www.opengeospatial.org/standards"&gt;OGC standards&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;OGC standards is the glue by which geospatial software and services (Closed or Open Source) can talk to each other. So we should support as many of them as we can! Here's a few worth supporting:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;WFS-T&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opengeospatial.org/standards/ct"&gt;Coordinate Transformation Service&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opengeospatial.org/standards/wmts"&gt;Web Map Tile Service (WMTS)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opengeospatial.org/standards/sld"&gt;Styled Layer Descriptors (SLD)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;2. Native support for PDF output&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Let's face it, nobody really plots to DWF. Everybody wants PDF, and it's easier to tell users to download/install a 5MB PDF reader application instead of &lt;a href="http://usa.autodesk.com/design-review/"&gt;Autodesk Design Review&lt;/a&gt;. The &lt;a href="http://trac.osgeo.org/mapguide/wiki/CodeSamples/ASP.Net/ScribbleApp"&gt;current solutions&lt;/a&gt; that are out there only embed an rendered map image to the PDF instead of rendering directly to the PDF. The easiest way to implement such support would be to implement a new MapGuide renderer with a &lt;a href="http://www.cairographics.org/"&gt;Cairo&lt;/a&gt; backend. The upside of using Cairo is that it supports &lt;a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics"&gt;SVG&lt;/a&gt; output as well, so we can support an additional output format for free!&lt;br /&gt;&lt;br /&gt;So there you have it, a much shorter list this time round because from an internal perspective, MapGuide has reached a point where it is a solid web mapping platform on most fronts. However if you take an outsider's perspective, there's still room for improvement.&lt;br /&gt;&lt;br /&gt;Happy New Year everybody. Here's to a wonderful 2012!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;New Year's Edit: Inflated the list slightly.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-4655952568253251696?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/4655952568253251696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=4655952568253251696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/4655952568253251696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/4655952568253251696'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/12/my-mapguidefdo-wishlist-for-2012.html' title='My MapGuide/FDO wishlist for 2012'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-242605885463130936</id><published>2011-12-23T17:58:00.001+11:00</published><updated>2011-12-23T17:58:25.630+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Announcing: MapGuide Maestro 4.0 Final + SDK</title><content type='html'>I'm pleased to announce the availability of MapGuide Maestro 4.0 and SDK, just in time for Christmas!&lt;br /&gt;&lt;br /&gt;Here's a rundown of the major changes since &lt;a href="http://themapguyde.blogspot.com/2011/08/announcing-mapguide-maestro-35-final.html"&gt;Maestro 3.5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://themapguyde.blogspot.com/2011/08/something-revolutionary-this-way-comes.html"&gt;You can now work with multiple site connections in the same application&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://themapguyde.blogspot.com/2011/08/something-even-more-revolutionary-this.html"&gt;A new local connection mode&lt;/a&gt;, backed by the new&amp;nbsp;&lt;a href="http://themapguyde.blogspot.com/2011/09/taking-mapguide-beyond-server-and-web.html"&gt;mg-desktop&lt;/a&gt; library&lt;/li&gt;&lt;li&gt;&lt;a href="http://themapguyde.blogspot.com/2011/09/introducing-non-transactional-package.html"&gt;A new way to load really large package files&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://themapguyde.blogspot.com/2011/12/mapguide-maestro.html"&gt;An easy way to translate your MapGuide applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Brought back the Package Editor, missing since &lt;a href="http://themapguyde.blogspot.com/2010/06/mapguide-maestro-21.html"&gt;Maestro 2.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;A whole load of bugfixes and minor enhancements since Maestro 3.5 (all of which you can find in changelog.txt in your Maestro installation)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The Maestro API has also undergone some major changes, bringing back some of the niceties that have been missing since Maestro 2.1. A special thanks goes out to the following people who've helped make the Maestro API into a more developer-friendly experience:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Hans Milling&lt;/li&gt;&lt;li&gt;Gunter Becker&lt;/li&gt;&lt;li&gt;Crispin Hoult&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The job's not finished on this front. There is still many things that can be done to improve the Maestro API developer experience even further. We'll leave that for next year :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro/Downloads"&gt;Download&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-242605885463130936?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/242605885463130936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=242605885463130936' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/242605885463130936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/242605885463130936'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/12/announcing-mapguide-maestro-40-final.html' title='Announcing: MapGuide Maestro 4.0 Final + SDK'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-6449483752816208189</id><published>2011-12-15T03:56:00.000+11:00</published><updated>2011-12-15T03:56:02.480+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><title type='text'>Improving the Feature Join Experience (or: Sort all the things!)</title><content type='html'>Remember this screenshot?&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-HLFOrzMNjfU/TujNASeDtII/AAAAAAAAAg8/m8gkri89A8w/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://1.bp.blogspot.com/-HLFOrzMNjfU/TujNASeDtII/AAAAAAAAAg8/m8gkri89A8w/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here's the current numbers as of right now&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-QVmGfnWBpL4/TujNVtCL32I/AAAAAAAAAhE/FMzbYI3xLp4/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="257" src="http://2.bp.blogspot.com/-QVmGfnWBpL4/TujNVtCL32I/AAAAAAAAAhE/FMzbYI3xLp4/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;How did we achieve such godly performance numbers from a provider (SDF) that cannot take advantage of the recently implemented &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc123"&gt;Feature Join optimization shortcut&lt;/a&gt;&amp;nbsp;yet produces numbers just a tad higher than the new shortcut?&lt;br /&gt;&lt;br /&gt;The answer: The existing Feature Join engine can actually perform well, it just picked the absolutely wrong join algorithm to do the join!&lt;br /&gt;&lt;br /&gt;As explained &lt;a href="http://themapguyde.blogspot.com/2011/11/improving-feature-join-experience.html"&gt;previously&lt;/a&gt;, the GWS Query Engine "joins" two input feature readers (from both sides of the join) and returns a merged feature reader. Depending on the capabilities of both sides of the join, the following join algorithms are employed:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Nested_loop_join"&gt;Nested Loops&lt;/a&gt; (both sides do not support ordering)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Block_nested_loop"&gt;Nested block join and sorted block&lt;/a&gt; (left side supports ordering, right side does not)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Sort-merge_join"&gt;Sort-Merge&lt;/a&gt; (both sides support ordering)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Block_nested_loop"&gt;Batch Sorted block&lt;/a&gt; (left side does not support ordering, right side does)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Sort-Merge is the best algorithm of the lot here because it does not need to re-iterate any side of the join to process all the results. The new performance numbers in the second screenshot is due to the use of the Sort-Merge algorithm.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The reason we got such terrible numbers in the first screenshot is because Nested Loops was the algorithm chosen by the GWS Query Engine. It chose this algorithm because it determined that the SDF provider could not support ordered results.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is actually incorrect because both SDF and SHP can actually &lt;a href="http://trac.osgeo.org/fdo/wiki/FDORfc26"&gt;produce sorted results&lt;/a&gt;, but can only sort on a single property (which I would wager is the standard Feature Join use case. Joining on multiple properties would be quite uncommon). It turns out that the GWS Query Engine fails to notice this when selecting the join algorithm to use.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So after tweaking the sortability check in the&amp;nbsp;GWS Query Engine, the existing Feature Join performs slightly slower than the optimization shortcut, which brings up another interesting point:&amp;nbsp;Aside from some obscure providers (OGR, WFS), nearly all the vector FDO providers support ordering, meaning now there is a very high chance that the feature joins you set up will have both sides as sortable, and thus the most optimal join algorithm (Sort-Merge) will almost always be used.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So with Sort-Merge being the most likely algorithm being used with this new modification, performance then boils down to how fast we can read the rows of data and in this arena, SQLite is the king. Another reason why SQLite should be the default format of choice for your spatial data.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So in summary: For best feature join performance, use SQLite or data formats that can be sorted by MapGuide (which will be nearly everything &lt;a href="http://trac.osgeo.org/mapguide/ticket/1888"&gt;with this patch&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-6449483752816208189?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/6449483752816208189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=6449483752816208189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/6449483752816208189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/6449483752816208189'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/12/improving-feature-join-experience-or.html' title='Improving the Feature Join Experience (or: Sort all the things!)'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-HLFOrzMNjfU/TujNASeDtII/AAAAAAAAAg8/m8gkri89A8w/s72-c/Capture.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-6346088023975228983</id><published>2011-12-14T22:56:00.000+11:00</published><updated>2011-12-15T03:19:20.085+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='FDO'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><title type='text'>My 2010 MapGuide/FDO Wishlist: Revisited</title><content type='html'>Around this same time last year, I made a wishlist for &lt;a href="http://themapguyde.blogspot.com/2010/12/my-mapguide-wishlist.html"&gt;MapGuide&lt;/a&gt; and &lt;a href="http://themapguyde.blogspot.com/2010/12/my-fdo-wishlist.html"&gt;FDO&lt;/a&gt;. As this year has passed along, that wishlist somehow slowly transformed into my personal&amp;nbsp;to-do&amp;nbsp;list :P So how did things turn out 365 days later?&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;MapGuide&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;1. A desktop-based variant of the Geospatial Platform API&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Yep, and &lt;a href="http://code.google.com/p/mg-desktop/"&gt;mg-desktop&lt;/a&gt; is it's name. Last year, I had a faint idea of how this would flesh out. Now it's fully realized.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. A HTML5/Flash/Silverlight vector viewer with offline support&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;My desire for this type of viewer at the time was predicated on the lack of a viewer like in MapGuide 6.5 that can operate with limited to no MapGuide Server connectivity. &lt;a href="http://mg-desktop.googlecode.com/"&gt;mg-desktop&lt;/a&gt; has solved this particular need for me, so my desire for such a viewer is no longer there.&lt;br /&gt;&lt;br /&gt;Still if we want to have a HTML5 viewer, &lt;a href="https://github.com/RandomEtc/shapefile-js"&gt;this&lt;/a&gt; may be a good starting point. The examples work on local SHP files (Sheboygan Parcels actually renders quite snappy), but this can probably be extended to a common feature model (allowing support for other spatial data formats) and then start trickling in support for MapGuide's rendering/stylization rules.&lt;br /&gt;&lt;br /&gt;As for Flash or Sliverlight, I'm not even gonna go there. HTML5 is capable enough IMO. A plugin-free world is a beautiful one.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;3. A scalable Fusion Legend widget&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Yep, &lt;a href="http://themapguyde.blogspot.com/2011/12/fusion-is-actually-usable-now.html"&gt;Fusion no longer sucks&lt;/a&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;4. A way to preserve tile sets&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Still not there, but anyone affected by this problem knows about it and has probably come to accept it as a minor inconvenience.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;5. Feature Write capabilities for the mapagent&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.georest.org/"&gt;GeoREST&lt;/a&gt; is still the way to go here. Given this is part of &lt;a href="http://usa.autodesk.com/adsk/servlet/pc/index?id=16505474&amp;amp;siteID=123112"&gt;AIMS 2012&lt;/a&gt; as a technology preview, perhaps this &amp;nbsp;will be integrated into MapGuide proper in the future?&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;6. A DWG FDO Provider&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Still nothing here sadly.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;FDO&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;1. A way to use the FDO API in languages other than C++/.net in a multi-platform manner&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;In my current line of thinking, mg-desktop is the way to go. It already uses/wraps FDO and is already developed in a way that facilitates easy generation of SWIG bindings. I just have to overcome my fear of gcc and automake and their cryptic error messages :P&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. Champion SQLite as the goto flat-file format for FDO&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;An emphatic yes on this one. The SQLite FDO provider is getting all the new FDO goodies nowadays. It was the first provider to get the new &lt;a href="http://trac.osgeo.org/fdo/wiki/FDORfc50"&gt;FDO Join APIs&lt;/a&gt;, thus allowing the &lt;a href="http://themapguyde.blogspot.com/2011/11/improving-feature-join-experience.html"&gt;Feature Join optimization shortcut&lt;/a&gt; to become possible.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;3. A FDO provider for MapGuide&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Nothing's changed here.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;4. Consistent Schema Naming Conventions&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;This &lt;a href="http://en.wikipedia.org/wiki/Leaky_abstraction"&gt;leaky abstraction&lt;/a&gt; is a small annoyance for anyone who wants to write provider independent code. If you have to write provider-specific code paths (&lt;a href="http://fdotoolbox.googlecode.com/"&gt;FDO Toolbox&lt;/a&gt; had to employ quite a few), it just highlights some of the failings of FDO as an abstraction layer for spatial data access. Sadly, nothing's changed here.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;5. Parametric Capabilities&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Still nothing's changed here. Of course if ODBC and OGR don't expose capabilities of their own that are translatable to FDO's capabilities, then this leaky abstraction is one we'll just have to live with.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;6. Android/iPhone support&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Given Autodesk's recent focus on having &lt;a href="http://www.autocadws.com/"&gt;mobile&lt;/a&gt; &lt;a href="https://market.android.com/details?id=com.sketchbook"&gt;versions&lt;/a&gt; &lt;a href="https://market.android.com/details?id=com.autodesk.Fysc"&gt;of&lt;/a&gt; &lt;a href="https://market.android.com/details?id=pixlr.OMatic#?t=W251bGwsMSwxLDIxMiwicGl4bHIuT01hdGljIl0."&gt;everything&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=4&amp;amp;ved=0CEcQFjAD&amp;amp;url=http%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fdesign-review-mobile%2Fid459112753%3Fmt%3D8&amp;amp;ei=YoroTu6WHYKOiAeZt8zECA&amp;amp;usg=AFQjCNHAQhcmNnw3tyDVy939CHDpj9l6mA&amp;amp;sig2=PhmPZSKFBI6VTmzdMJQRGg"&gt;known&lt;/a&gt; &lt;a href="http://labs.autodesk.com/utilities/project_galileo_online/"&gt;to man&lt;/a&gt;, this may look like a possibility. But you know Autodesk, I'm just staring at an opaque crystal ball here :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-6346088023975228983?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/6346088023975228983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=6346088023975228983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/6346088023975228983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/6346088023975228983'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/12/my-2010-mapguidefdo-wishlist-revisited.html' title='My 2010 MapGuide/FDO Wishlist: Revisited'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-110179509341466189</id><published>2011-12-06T21:28:00.001+11:00</published><updated>2011-12-06T21:40:51.654+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='FDO'/><title type='text'>FDO Toolbox 1.0 (yes that's right!)</title><content type='html'>3 years and 1251 revisions in the making. The 1.0 final version of &lt;a href="http://fdotoolbox.googlecode.com/"&gt;FDO Toolbox&lt;/a&gt; is finally here.&lt;br /&gt;&lt;br /&gt;This release includes some small bugfixes from 1.0 RC1&lt;br /&gt; &lt;br /&gt; &lt;a href="http://code.google.com/p/fdotoolbox/downloads/list"&gt;Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Is this be the end of FDO Toolbox as I proclaimed &lt;a href="http://themapguyde.blogspot.com/2010/04/fdo-toolbox-is-dead-long-live-fdo.html"&gt;some time ago&lt;/a&gt;? Probably.&lt;br /&gt;&lt;br /&gt;I'll still probably put out occasional releases to coincide with newer versions of &lt;a href="http://fdo.osgeo.org/"&gt;FDO&lt;/a&gt; but other than that, FDO Toolbox has fulfilled all my needs (and I'm sure many of your needs as well). So I'll guess it's time to put this project into semi-retirement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-110179509341466189?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/110179509341466189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=110179509341466189' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/110179509341466189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/110179509341466189'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/12/fdo-toolbox-10-yes-thats-right.html' title='FDO Toolbox 1.0 (yes that&apos;s right!)'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-2369510803613669223</id><published>2011-12-06T02:42:00.001+11:00</published><updated>2011-12-06T03:44:47.235+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Fusion'/><title type='text'>Fusion is actually usable now</title><content type='html'>I am going to call it right now. If you've been holding back from moving to &lt;a href="http://trac.osgeo.org/fusion"&gt;Fusion&lt;/a&gt; due to the assortment of bugs and performance problems, then the version of Fusion that will appear in the next version of &lt;a href="http://mapguide.osgeo.org/"&gt;MapGuide Open Source&lt;/a&gt; and &lt;a href="http://usa.autodesk.com/adsk/servlet/pc/index?id=16505474&amp;amp;siteID=123112"&gt;Autodesk Infrastructure Map Server&lt;/a&gt; will be the one which will finally sway you across.&lt;br /&gt;&lt;br /&gt;Thanks to funding from &lt;a href="http://www.hume.vic.gov.au/"&gt;Hume City Council&lt;/a&gt;, we have finally tackled most of the deal-breaking issues which have made Fusion unsuitable for production use for many years ... Until now.&lt;br /&gt;&lt;br /&gt;What issues in particular? Read on below.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Legend Performance&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This is the number one showstopper to wider adoption. The root problem with the legend widget performance is that each icon in the legend requires an individual http GETLEGENDIMAGE icon request to the mapagent. Now suppose you have &lt;a href="http://trac.osgeo.org/fusion/ticket/400"&gt;a layer with a 900-rule theme&lt;/a&gt;, attempting to preview this layer will grind your browser and the MapGuide Server to 100% CPU usage, because it will fire off 900 individual icon requests (yes you heard that right!). And that's just for one single user!&lt;br /&gt;&lt;br /&gt;We solved this problem through a multi-pronged approach:&lt;br /&gt;&lt;br /&gt;1. To speed up the server-side initialization, we use the new &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc73"&gt;GetResourceContents API&lt;/a&gt; introduced in MapGuide Open Source 2.2 to fetch all our required layer definitions in a single batch. Performance gains will be readily apparent for really chunky Map Definitions with lots (in the 100s) of layers&lt;br /&gt;&lt;br /&gt;2. We exploit the &lt;a href="http://en.wikipedia.org/wiki/Data_Uri"&gt;data URI&lt;/a&gt; feature that supported by most modern browsers. We pre-cache icons by generating the legend icons server-side and embedding them as base64 encoded data URIs as part of the json content that is returned to the legend widget for initialization. Each legend icon represented as a data URI will eliminate a mapagent icon request that would have to be executed. We use a metric of pre-caching 25 layer icons per scale range. For an average Map Definition (like the Sheboygan sample data set) no icon requests are ever made through this optimization. Now for those primitive browsers from Redmond that don't support data URIs, have no fear. Because there is also the next optimization.&lt;br /&gt;&lt;br /&gt;3. The theme compression logic that is used by the AJAX viewer now also exists in Fusion. We use that same number (25) to determine the number of style rules that must be exceeded for a theme to be compressed. Compressed themes in Fusion look like so:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Fxuj9ZefuMs/TtztRkXb-AI/AAAAAAAAAg0/8a8WNm8kIaU/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-Fxuj9ZefuMs/TtztRkXb-AI/AAAAAAAAAg0/8a8WNm8kIaU/s1600/Capture.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And like the AJAX viewer, you have the option of expanding compressed themes. To avoid unnecessarily expanding say: a 900-rule themed layer, we prompt for confirmation. So the choice to flood a mapguide server with icon requests will be yours and yours alone to make ;-). Even if your browser doesn't support data URIs (It means you are using IE6/7. Don't deny it!), the theme compression means that icon requests will be capped at a certain level by default, just like the AJAX viewer.&lt;br /&gt;&lt;br /&gt;So with these changes, our map with the 900-rule themed layer now loads just slightly slower than the AJAX viewer, which is a major improvment from never.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Support for Map Definitions with Tiled and Dynamic Layers&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This one wasn't our doing, but Autodesk themselves have finally addressed the other long-standing complaint of not being able to view a map that contains a combination of tiled and dynamic layers.&lt;br /&gt;&lt;br /&gt;And as an added bonus, if you are using commerical underlays your tiles can also line up with the Google/Bing/Yahoo/OSM tiles if your Map Definition uses a Google-compatible finite scale list (and is using the WGS84.PseudoMercator coordinate system of course). In anticipation of supporting this new feature, I've added support for generating this Google-compatible scale list in the final release of MapGuide Maestro 4.0 which will be coming out soon.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-2g8AtIJL8TQ/TtzsJ9Qm4TI/AAAAAAAAAgs/dx9Vr1b7smo/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://2.bp.blogspot.com/-2g8AtIJL8TQ/TtzsJ9Qm4TI/AAAAAAAAAgs/dx9Vr1b7smo/s400/Capture.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Redlining&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ever used the Fusion redline widget? Me neither. &lt;br /&gt;So what do you do with the downloaded redline GML file? Hell if I know!&lt;br /&gt;What about if I want to plot the map with the redlines? Dream on. You can't do that!&lt;br /&gt;&lt;br /&gt;When the redline widget was first introduced with the query and theme widgets, I was personally surpised that they didn't base the redline widget from the same sample the query and theme widgets were derived from: &lt;a href="http://data.mapguide.com/mapguide/phpgenerictasks/index.php"&gt;The Generic Tasks AJAX viewer sample&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So we've thrown out this useless widget and replaced it with one based from the Generic Tasks sample, giving us a redline widget that is much more powerful and useful:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-Z6iI1Vzq01E/TtzrQfxH7tI/AAAAAAAAAgU/4UZ3_ToakSM/s1600/redline1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-Z6iI1Vzq01E/TtzrQfxH7tI/AAAAAAAAAgU/4UZ3_ToakSM/s320/redline1.PNG" width="105" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-bvboN2PESdo/TtzrRXGVXlI/AAAAAAAAAgc/XSA-uiF61d4/s1600/redline2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-bvboN2PESdo/TtzrRXGVXlI/AAAAAAAAAgc/XSA-uiF61d4/s320/redline2.PNG" width="104" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-bYhFt5WG1oI/TtzrTYz1CKI/AAAAAAAAAgk/bAWr86It3lk/s1600/redline3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-bYhFt5WG1oI/TtzrTYz1CKI/AAAAAAAAAgk/bAWr86It3lk/s320/redline3.PNG" width="104" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you've used the Generic Tasks markup sample, this redline widget functions almost the same. For those unfamiliar with the Generic Tasks markup sample, here's what the new Redline widget can do:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Configure redline layers with support for labels using the same MapGuide stylization rules&lt;/li&gt;&lt;li&gt;Add, Create, Remove and Manage redline layers with respect to the current map&lt;/li&gt;&lt;li&gt;Draw geometries using the same digitizing tools provided by &lt;a href="http://www.openlayers.org/"&gt;OpenLayers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Your redlines will be part of the whatever plotting or rendering operation you do on the current map.&lt;/li&gt;&lt;li&gt;Redline feature sources can be downloaded as SDF files, allowing for overlaying in &lt;a href="http://usa.autodesk.com/autocad-map-3d/"&gt;AutoCAD Map3D&lt;/a&gt; and other Autodesk Geospatial products. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Quick Plot&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=1951542926024108564" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=1951542926024108564" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=1951542926024108564" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=1951542926024108564" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;The Quick Plot widget has improved reliability. This is due to the widget now using the actual MapGuide Rendering APIs to grab the initial un-rotated image and dumping that to a temp file, where the PHP gd library is then used to rotate the image and outputted back to the user. This approach is a more memory efficient use of the PHP gd library, and as a result should result in significantly less occurrences of this useless message:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CMfO89AMLZQ/TtzoDj8NjWI/AAAAAAAAAgM/rz20PoxerE4/s1600/Capture.PNG" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-CMfO89AMLZQ/TtzoDj8NjWI/AAAAAAAAAgM/rz20PoxerE4/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;ProTip: If you get this message, it's due to a failure of some sort in GeneratePicture.php. Inspecting the GeneratePicture.php request in Firebug should give you more information. As there was no mechanism in place to propagate back error messages, GeneratePicture.php fails silently at least from a user perspective. The QuickPlot changes improve memory efficiency and should result in signifcantly reduced (can we say no?) occurrences of this message.&lt;br /&gt;&lt;br /&gt;The widget itself can now also have customizable paper and scale lists, which will require hacking the widget's extension XML element.&lt;br /&gt;&lt;br /&gt;One small note: If you planning to wedge fusion trunk into an existing MGOS 2.2 installation, this widget will break because it uses APIs introduced in the next version of MGOS/AIMS. Other widgets should work just fine.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;General Usability&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Having tackled the major showstoppers, I became comfortable enough with the fusion framework to address a whole bunch of bugs and usability issues with other widgets. The Search, Measure and Query widgets have gotten a bunch of bugfixes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Wrapping things up&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;All these changes have already landed in Fusion trunk (some have for quite some time now). Given this is usually branched off at some point, where it is then used by the Open and Commerical versions of MapGuide, you can expect these drastic Fusion improvements to a MapGuide release near you.&lt;br /&gt;&lt;br /&gt;As a small aside. Many thanks to &lt;a href="http://www.hume.vic.gov.au/"&gt;Hume City Council&lt;/a&gt; for providing the funding for us to implement these long overdue improvements. If you went to &lt;a href="http://au.autodesk.com/"&gt;AU 2011&lt;/a&gt;, you may have seen some of our handiwork on display (including our Fusion work) &lt;a href="http://au.autodesk.com/?nd=event_class&amp;amp;session_id=8966&amp;amp;jid=1748465"&gt;in this presentation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As a second small aside, if you &lt;b&gt;have&lt;/b&gt; to use Internet Explorer, use Internet Explorer 9. Fusion absolutely &lt;b&gt;FLIES&lt;/b&gt; in IE9 and even outperforms Firefox/Chrome in some cases! (yes, I am shocked)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-2369510803613669223?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/2369510803613669223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=2369510803613669223' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/2369510803613669223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/2369510803613669223'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/12/fusion-is-actually-usable-now.html' title='Fusion is actually usable now'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Fxuj9ZefuMs/TtztRkXb-AI/AAAAAAAAAg0/8a8WNm8kIaU/s72-c/Capture.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-7218434380481081413</id><published>2011-12-01T00:58:00.001+11:00</published><updated>2011-12-01T01:15:03.421+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>轻松翻译使用 MapGuide Maestro *</title><content type='html'>* I trust &lt;a href="http://translate.google.com/"&gt;Google Translate&lt;/a&gt; translated the above blog title correctly :D&lt;br /&gt;&lt;br /&gt;Not everyone speaks English, so neither should your MapGuide Applications.&lt;br /&gt;&lt;br /&gt;Currently, the process of translating your MapGuide Application is to hunt down all the english strings in your Basic or Flexible Web Layout XML document and manually replace each string with your translations. This is a slow and painstaking process. &lt;br /&gt;&lt;br /&gt;The final release of MapGuide Maestro 4.0 will include a new convenient command to assist with the translation of Basic and Flexible Web Layouts.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-BhPdsKbHwpU/TtY4KLeMthI/AAAAAAAAAgE/HbxeUQ87oYA/s1600/Capture4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="26" src="http://4.bp.blogspot.com/-BhPdsKbHwpU/TtY4KLeMthI/AAAAAAAAAgE/HbxeUQ87oYA/s400/Capture4.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Clicking the &lt;b&gt;Translate&lt;/b&gt; button will bring up a dialog containing all the localizable strings (Maestro searches for all known XML elements that can contain localizable text). From here, tick the strings that require translation and give your provided translation. I did a quick and dirty french translation via Google Translate for this example.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-yCM6-TzT70A/TtY3WuJf_YI/AAAAAAAAAfs/bQiI7INJHUc/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="336" src="http://4.bp.blogspot.com/-yCM6-TzT70A/TtY3WuJf_YI/AAAAAAAAAfs/bQiI7INJHUc/s400/Capture.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Once you have completed your translation, click &lt;b&gt;Apply&lt;/b&gt; to apply these translations to the affected strings. The editor will reload itself with the translated strings. Previewing the layout will show your translated layout.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FisEIchRksM/TtY3YwO0ArI/AAAAAAAAAf0/KVIQAM4UxlQ/s1600/Capture2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="285" src="http://3.bp.blogspot.com/-FisEIchRksM/TtY3YwO0ArI/AAAAAAAAAf0/KVIQAM4UxlQ/s400/Capture2.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The final release of MapGuide Maestro 4.0 (which will include this feature) will be arriving shortly. Doing a lot of API cleanup and documentation.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-7218434380481081413?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/7218434380481081413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=7218434380481081413' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/7218434380481081413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/7218434380481081413'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/12/mapguide-maestro.html' title='轻松翻译使用 MapGuide Maestro *'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-BhPdsKbHwpU/TtY4KLeMthI/AAAAAAAAAgE/HbxeUQ87oYA/s72-c/Capture4.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-6134765314476148557</id><published>2011-11-21T22:59:00.001+11:00</published><updated>2011-11-22T00:43:41.892+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='FDO'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><title type='text'>Improving the Feature Join experience</title><content type='html'>So what was &lt;a href="http://themapguyde.blogspot.com/2011/10/screenshot-to-tide-you-over.html"&gt;this screenshot&lt;/a&gt; all about?&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UqP27SgUD4k/Tso9I8xpHEI/AAAAAAAAAfk/lwx4jQ4rQ7Y/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="303" src="http://3.bp.blogspot.com/-UqP27SgUD4k/Tso9I8xpHEI/AAAAAAAAAfk/lwx4jQ4rQ7Y/s400/Capture.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Time for an explanation. This screenshot was the result of an experimental &lt;a href="http://code.google.com/p/mg-desktop"&gt;mg-desktop&lt;/a&gt; addition to make feature joins perform much faster (around 100 times faster as evidenced by the screenshot), by taking advantage of new &lt;a href="http://trac.osgeo.org/fdo/wiki/FDORfc50"&gt;FDO Join APIs&lt;/a&gt; that were recently introduced with the 3.6 release. Why does the FDO Join APIs perform so much faster? Time for a little backstory...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Why Feature Joins suck (performance wise)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Feature Joins are performed by the GWS Query Engine component of MapGuide. From a high-level overview, this component takes two input iterators (with interfaces similar to a FDO/MG Feature Reader), and depending on the capabilities of the left and right sides of the join a &lt;/span&gt;"merged" feature reader is returned that will loop the two iterators in the following fashion:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Nested_loop_join"&gt;Nested Loops&lt;/a&gt; (both sides do not support ordering)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Block_nested_loop"&gt;Nested block join and sorted block&lt;/a&gt; (left side supports ordering, right side doesn't)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Sort-merge_join"&gt;Sort-Merge&lt;/a&gt; (both sides support ordering)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Block_nested_loop"&gt;Batch Sorted Block&lt;/a&gt; (left side does not support ordering, right side doesn't)&lt;/li&gt;&lt;/ul&gt;Now these join algorithms themselves are also sensitive to the data you're working with. For example, any sorted block algorithm is going to perform bad on datasets with high-spread of join key values (low-spread of join keys means lots of sorted duplicate joins values which can be skipped). Sort merge has issues regarding case-sensitivity of key values (though this &lt;a href="http://trac.osgeo.org/mapguide/ticket/502"&gt;may be a bug in the implementation&lt;/a&gt;). Nested Loops is obviously terrible if both sides are large (as is the case of a SDF to SDF join as per the above screenshot)&lt;br /&gt;&lt;br /&gt;MapGuide in its current form is not aware of join factors which impact performance:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The size of both sides of the join (Nested loops is obviously bad, but the inability to determine size means this can't be avoided if this is the designated algorithm)&lt;/li&gt;&lt;li&gt;The spread of join key values (Sorted blocks work best on lookup-value type spreads not foreign-key type spreads)&lt;/li&gt;&lt;/ul&gt;It is all of the above factors which make having good performing feature joins a difficult proposition. ^ &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The FDO Join API (or: Let the data store figure it out)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So it's clear that MapGuide does a terrible and/or erratic job as a query optimizer, so assuming we want respectable performance of joined data, you would've probably avoided Feature Joins altogether and have the bits you want to join in question residing in the same centralised RDBMS, do the joins at the database level and wrap the result in a database view.&lt;br /&gt;&lt;br /&gt;This approach is a good solution in terms of performance because figuring out the best way to join data is now a data store responsibility, and you can apply a whole assortment of indexes and other DBMS performance improvements that MapGuide is not aware of. From MapGuide's perspective all it sees is a table/view and it just queries that. But this approach presents its own problems:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The need for metadata hacks for views to be properly recognised as a feature class (eg. SDO_GEOM_METADATA in Oracle)&lt;/li&gt;&lt;li&gt;The type of view affecting selectability (eg. SQL Server, which requires &lt;a href="http://themapguyde.blogspot.com/2010/08/using-fdo-schema-overrides.html"&gt;schema overrides&lt;/a&gt; to work around)&lt;/li&gt;&lt;/ul&gt;With the introduction of &lt;a href="http://trac.osgeo.org/fdo/wiki/FDORfc50"&gt;FDO Join APIs&lt;/a&gt;, it allows us to do these type of joins in an ad-hoc fashion &lt;b&gt;without&lt;/b&gt; needing to wrap our joined data into database views. Joining data with the FDO Join APIs is basically the equivalent of doing a SQL SELECT query with &lt;inner etc="" left="" outer="" right=""&gt; JOIN clauses. In other words, the FDO Join APIs lets you delegate join optimization to the data store and let it figure out the best performing way to do it.&lt;/inner&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Taking advantage of FDO Joins in MapGuide (with &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc123"&gt;RFC123&lt;/a&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So as already explained, work on bringing support for this into MapGuide started with &lt;a href="http://code.google.com/p/mg-desktop"&gt;mg-desktop&lt;/a&gt;. Being essentially a self-contained version of MapGuide meant that mg-desktop was a nice sandbox for playing and experimenting with new features. So once support was built into mg-desktop, bringing it over to MapGuide proper was quite an easy affair.&lt;br /&gt;&lt;br /&gt;So how does mg-desktop and MapGuide take advantage of FDO Joins?&lt;br /&gt;&lt;br /&gt;We use the existing &lt;b&gt;Extended Feature Class&lt;/b&gt; mechanism to construct an equivalent FDO Join select query, applying the proper property/class aliasing to ensure that the reader that is returned presents the same property list as a default feature join query.&lt;br /&gt;&lt;br /&gt;When querying an Extended Feature Class, MapGuide does several checks to see if the FDO Join optimization path can be taken. These checks include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Does the underlying FDO provider for the Feature Source support FDO Joins? (obvious one!)&lt;/li&gt;&lt;li&gt;Does the primary and joined feature classes of this Extended Feature Class originate from the same feature source? (this is important, because FDO Joins work within the context of the same connection, thus the classes we are joining must come from the same source)&lt;/li&gt;&lt;li&gt;A whole bunch of other minor conditions which your Extended Feature Class will most likely satisfy (&lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc123"&gt;detailed in the RFC&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;If the Extended Feature Class being queried passes the above checks, MapGuide takes the FDO Join path, which as seen from the screenshot above, can be up to &lt;b&gt;100 times faster&lt;/b&gt; than the regular Feature Join approach.&lt;br /&gt;&lt;br /&gt;Additionally, Extended Feature Classes also double up as the metadata. You don't need to do SDO_GEOM_METADATA hacks or FDO Schema Overrides for these classes to be recognised. Because MapGuide already understands these elements out of the box! &lt;br /&gt;&lt;br /&gt;Also, in case you're wondering, the performance numbers in MapGuide are even better than mg-desktop (up to 1s faster than the numbers in the above screenshot) due to connection pooling and object caching mechanisms present in the MapGuide Server code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Conditions Apply&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now as you can see, only certain Extended Feature Classes can take advantage of this optimization. The other limitation is FDO provider support. As of writing this post, the following providers implement the FDO Join APIs:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQL Server&lt;/li&gt;&lt;li&gt;SQLite&lt;/li&gt;&lt;/ul&gt;Given the high usage of these providers (you are using SQLite for all your spatial data aren't you?), there is a good chance of this optimization path being used.&lt;br /&gt;&lt;br /&gt;The beauty of FDO is that as soon as an FDO provider implements the FDO Join APIs (like &lt;a href="http://sl-king.com/fdooracle/"&gt;King.Oracle&lt;/a&gt; wink, wink, nudge, nudge), such configured Extended Feature Classes in MapGuide can automatically take advantage of this optimization path.&lt;br /&gt;&lt;br /&gt;So there you have it. 100x faster feature joins if your data ticks all the boxes.&lt;br /&gt;&lt;br /&gt;^ There is a 5th type of join algorithm that is (suprisingly) not implemented by the GWS Query Engine: &lt;a href="http://en.wikipedia.org/wiki/Hash_join"&gt;Hash Joins&lt;/a&gt;. Though probably the most memory intensive join algorithm (due to needing to store one side of the join in a hash-table), this should always perform better than the default nested loops. Anyway, it's 2011. Memory is cheap! Having this join type implemented should improve the Feature Join user story even further. Guess that's another item on the TODO list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-6134765314476148557?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/6134765314476148557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=6134765314476148557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/6134765314476148557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/6134765314476148557'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/11/improving-feature-join-experience.html' title='Improving the Feature Join experience'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-UqP27SgUD4k/Tso9I8xpHEI/AAAAAAAAAfk/lwx4jQ4rQ7Y/s72-c/Capture.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-6364886888550810269</id><published>2011-11-11T12:59:00.001+11:00</published><updated>2011-11-11T21:26:14.019+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Announcing: A fixed installer for MapGuide Maestro 4.0 RC1</title><content type='html'>&lt;div&gt;Oops!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;It turns out that as far back as the first beta release of &lt;a href="http://themapguyde.blogspot.com/2011/03/announcing-mapguide-maestro-30-beta-1.html"&gt;Maestro 3.0&lt;/a&gt;, that the window installers I've been making did not include the XML schema files required for validating XML content.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I've posted an updated 4.0 RC1 installer with the missing XML schema files. Note that this is only applicable if you've been downloading the windows installer package. If you have been using the zip packages, the XML schema files have always been in there, so everything's ok on that front.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To make sure that the XML schema files are properly set up, go to &lt;b&gt;Tools&lt;/b&gt;&amp;nbsp;- &lt;b&gt;Options&lt;/b&gt;&amp;nbsp;and check that the XML schema path is configured to point to the &lt;b&gt;Schemas&lt;/b&gt;&amp;nbsp;directory under your MapGuide Maestro installation directory&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-rW4wh4dEw_k/TryC_OgOtVI/AAAAAAAAAfU/HZueaQiXa20/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="275" src="http://2.bp.blogspot.com/-rW4wh4dEw_k/TryC_OgOtVI/AAAAAAAAAfU/HZueaQiXa20/s400/Capture.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Or, you can click &lt;b&gt;Reset&lt;/b&gt;&amp;nbsp;and Maestro will reset all preferences to default values and auto-discover all the required paths.&lt;br /&gt;&lt;br /&gt;Update: OSGeo is back in order. So the fixed 4.0 RC1 installer is available for download &lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro/Downloads"&gt;from here&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-6364886888550810269?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/6364886888550810269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=6364886888550810269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/6364886888550810269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/6364886888550810269'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/11/announcing-fixed-installer-for-mapguide.html' title='Announcing: A fixed installer for MapGuide Maestro 4.0 RC1'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-rW4wh4dEw_k/TryC_OgOtVI/AAAAAAAAAfU/HZueaQiXa20/s72-c/Capture.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-515115470499514687</id><published>2011-11-09T03:27:00.000+11:00</published><updated>2011-11-11T14:38:13.459+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Announcing: MapGuide Maestro 4.0 RC1</title><content type='html'>Here's another RC coming your way.&lt;br /&gt;&lt;br /&gt;This release re-introduces the Package Editor feature, which has been missing since Maestro 2.1 and includes a big bucket of fixes and small improvements since beta 2.&lt;br /&gt;&lt;br /&gt;One particular improvement which I'm proud of finally implementing can be summarised with this screenshot:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DMgA8KfmYOY/TrlXbwLHRjI/AAAAAAAAAfI/TzW0eS-VdcE/s1600/capture.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://2.bp.blogspot.com/-DMgA8KfmYOY/TrlXbwLHRjI/AAAAAAAAAfI/TzW0eS-VdcE/s400/capture.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Yep, I finally figured out how do do it!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro/Downloads"&gt;Download&lt;/a&gt; (back at OSGeo)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-515115470499514687?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/515115470499514687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=515115470499514687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/515115470499514687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/515115470499514687'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/11/announcing-mapguide-maestro-40-rc1.html' title='Announcing: MapGuide Maestro 4.0 RC1'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-DMgA8KfmYOY/TrlXbwLHRjI/AAAAAAAAAfI/TzW0eS-VdcE/s72-c/capture.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-2585230277040666520</id><published>2011-10-26T23:51:00.000+11:00</published><updated>2011-10-26T23:51:43.249+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='FDO'/><title type='text'>Announcing: FDO Toolbox 1.0 RC1</title><content type='html'>About time I started to get this thing to the 1.0 final release.&lt;br /&gt;&lt;br /&gt;New Features&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Now using FDO 3.6.0 final release.&lt;/li&gt;&lt;li&gt;Data Preview now supports the new FDO Join APIs&lt;/li&gt;&lt;li&gt;You can now dump the contents of a Feature Class in the Object Explorer to SDF/SQLite via the context menu.&lt;/li&gt;&lt;/ul&gt;Also included is plenty of bug fixes and small improvments&lt;br /&gt; &lt;br /&gt; &lt;a href="http://code.google.com/p/fdotoolbox/downloads/list"&gt;Come and get it&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/fdotoolbox/issues/list"&gt;Report Issues/Enhancements&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-2585230277040666520?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/2585230277040666520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=2585230277040666520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/2585230277040666520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/2585230277040666520'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/10/announcing-fdo-toolbox-10-rc1.html' title='Announcing: FDO Toolbox 1.0 RC1'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-8758114315251803237</id><published>2011-10-21T03:04:00.001+11:00</published><updated>2011-10-21T03:04:47.605+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='FDO'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><title type='text'>A screenshot to tide you over</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-B1pFwWTQY5Y/TqBGXY4TcjI/AAAAAAAAAe4/66D0DH3b-2w/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="303" src="http://2.bp.blogspot.com/-B1pFwWTQY5Y/TqBGXY4TcjI/AAAAAAAAAe4/66D0DH3b-2w/s400/Capture.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Stay tuned for more information :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-8758114315251803237?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/8758114315251803237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=8758114315251803237' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/8758114315251803237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/8758114315251803237'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/10/screenshot-to-tide-you-over.html' title='A screenshot to tide you over'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-B1pFwWTQY5Y/TqBGXY4TcjI/AAAAAAAAAe4/66D0DH3b-2w/s72-c/Capture.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-2080588885097136265</id><published>2011-09-21T02:40:00.000+10:00</published><updated>2011-09-22T02:43:48.325+10:00</updated><title type='text'>Announcing: MapGuide Maestro 4.0 beta 2</title><content type='html'>I am happy to announce the 2nd beta of MapGuide Maestro 4.0&lt;br /&gt;&lt;br /&gt;The major new feature of this release is &lt;a href="http://themapguyde.blogspot.com/2011/09/introducing-non-transactional-package.html"&gt;non-transactional package loading&lt;/a&gt;, which greatly improves the reliability of loading very large package files, at the small cost of losing the repository &lt;a href="http://en.wikipedia.org/wiki/ACID"&gt;ACID&lt;/a&gt;-ity of the official approach. Should you encounter any failed operations during the package loading, Maestro will give you the ability to retry these failed operations until all failed operations are accounted for, or you choose to abort yourself.&lt;br /&gt;&lt;br /&gt;Also included in this release is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fixes for defects brought on by the new &lt;a href="http://themapguyde.blogspot.com/2011/08/something-revolutionary-this-way-comes.html"&gt;multi-site support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Editor support for FDO expressions in color editor properties&lt;/li&gt;&lt;li&gt;Updated to the latest &lt;a href="http://themapguyde.blogspot.com/2011/09/taking-mapguide-beyond-server-and-web.html"&gt;mg-desktop&lt;/a&gt; binaries for Local Connection mode&lt;/li&gt;&lt;/ul&gt;Once again, this beta is available in the fat NSIS installer or the lean zip package (which excludes local connection mode). Users of non-windows operating systems will have to download the zip package.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/mg-desktop/downloads/list"&gt;Download&lt;/a&gt; (temporarily hosted on the mg-desktop site)&lt;br /&gt;&lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro/Downloads"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-2080588885097136265?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/2080588885097136265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=2080588885097136265' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/2080588885097136265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/2080588885097136265'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/09/announcing-mapguide-maestro-40-beta-2.html' title='Announcing: MapGuide Maestro 4.0 beta 2'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-3130729179350869712</id><published>2011-09-16T03:57:00.001+10:00</published><updated>2011-09-16T03:57:42.779+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Introducing non-transactional package loading</title><content type='html'>The next beta of MapGuide Maestro 4.0 will feature a new way of loading packages which I call "non-transactional" package loading.&lt;br /&gt;&lt;br /&gt;Normally the package loading process in Maestro is as follows.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Select the package file&lt;/li&gt;&lt;li&gt;Maestro invokes APPLYRESOURCEPACKAGE on the MapGuide Server and uploads the package file&lt;/li&gt;&lt;li&gt;Twiddle your thumbs, because there is no way to know how long this operation will take&lt;/li&gt;&lt;li&gt;The operation being transactional means that the operation will wholly suceeed or wholly fail.&lt;/li&gt;&lt;/ol&gt;Loading a package several hundred MBs in size only to be told that the entire operation failed at the end is needless to say, a very frustrating experience.&lt;br /&gt;&lt;br /&gt;Non-transactional package takes a different approach. It eschews using the APPLYRESOURCEPACKAGE API (the cause of the thumb twiddling and waiting because there is no way to track progress) for an approach that allows progress to be measured. At the heart of a MapGuide Package is the &lt;b&gt;resource package manifest&lt;/b&gt;, which is simply a list of resource service operations to execute on the MapGuide Server, which are generally a mixture of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SETRESOURCE&lt;/li&gt;&lt;li&gt;SETRESOURCEDATA&lt;/li&gt;&lt;li&gt;DELETERESOURCE&lt;/li&gt;&lt;/ul&gt;The existing approach executes all these operations on the server-side under one big transaction, the new approach executes all these operations one at a time &lt;b&gt;from the client side&lt;/b&gt; and because we know how many operations need to be executed, we can measure the entire progress of the package loading operation.&lt;br /&gt;&lt;br /&gt;Now when you load a package, you will be asked to choose the method of uploading:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-yh3FjGWH4HQ/TnI3CPHI6AI/AAAAAAAAAew/-bVGRxbbzaU/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-yh3FjGWH4HQ/TnI3CPHI6AI/AAAAAAAAAew/-bVGRxbbzaU/s1600/Capture.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Choosing the Transactional method will load the package in the existing fashion. Choosing the other option will use the non-transactional method and because this approach is measurable, we get a nice meaningful progress dialog to relay the upload progress.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9tfoZhZ7MkM/TnI47nblINI/AAAAAAAAAe0/mSTk0qsDrfE/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="151" src="http://4.bp.blogspot.com/-9tfoZhZ7MkM/TnI47nblINI/AAAAAAAAAe0/mSTk0qsDrfE/s400/Capture.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So in what cases would you use non-transactional package loading over the default transactional one? Here's a few I've thought of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The package file is several hundred MBs in size&lt;/li&gt;&lt;li&gt; The package file contains hundreds of resources to be loaded&lt;/li&gt;&lt;li&gt;The package file is not loadable via the transactional method, which is generally the result of any of the above items. &lt;/li&gt;&lt;/ul&gt;Finally, because it's non-transactional if one operation fails it will keep continuing with the upload of the others, failed operations are logged. As a result, the upload can partially succeed and fail. Should the operation partially fail, it is planned to re-use the list of failed operations to allow you to re-run the package upload, but to skip all the successful operations, thus turning a partially failed upload to a fully successful one.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;I've received some test packages which completely failed to load under the official package loading methods. These packages loaded without issues in the non-transactional mode. So no matter low large or small your data packages are, Maestro can upload it for you. One way or another.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-3130729179350869712?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/3130729179350869712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=3130729179350869712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/3130729179350869712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/3130729179350869712'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/09/introducing-non-transactional-package.html' title='Introducing non-transactional package loading'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-yh3FjGWH4HQ/TnI3CPHI6AI/AAAAAAAAAew/-bVGRxbbzaU/s72-c/Capture.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-5503238191468663893</id><published>2011-09-08T09:32:00.000+10:00</published><updated>2011-09-08T09:32:39.903+10:00</updated><title type='text'>Announcing: MapGuide Maestro 4.0 beta 1</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;I'm happy to announce the first beta release of MapGuide Maestro 4.0&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;This first beta contains 2 new groundbreaking features, which have already been covered previously:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://themapguyde.blogspot.com/2011/08/something-revolutionary-this-way-comes.html"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Support for connecting to multiple sites&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;a href="http://themapguyde.blogspot.com/2011/08/something-even-more-revolutionary-this.html"&gt;Support for a new connection type&lt;/a&gt; backed by &lt;a href="http://themapguyde.blogspot.com/2011/09/taking-mapguide-beyond-server-and-web.html"&gt;the new mg-desktop library&lt;/a&gt;. Unfortunately, this feature is windows only and thus is only included in the windows installer. This feature is omitted from the zip distribution.&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;The multi-site feature majorly affects most workflows in Maestro and as a result of the yet-to-be-stabilized nature of this new feature, I will only recommend you download this release &lt;b&gt;for testing and feedback purposes only&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;You may also notice a significant increase in the windows installer size (84MB). This is due to the inclusion of the full set of CS-Map coordinate system dictionary files that is required by the new local connection mode feature. I wish CS-Map stored its thousands of coordinate systems in a more space-efficient manner! Anyway, I am pondering whether to offer the new local connection feature as a separate download or keep it bundled it with the NSIS installer as I have done for this beta release. Let me know what you think.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;This beta can reside side-by-side with older versions. The new local connection mode also shouldn't conflict or clash with any existing MapGuide Open Source or AIMS installations&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro/Downloads"&gt;Download&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-5503238191468663893?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/5503238191468663893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=5503238191468663893' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/5503238191468663893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/5503238191468663893'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/09/announcing-mapguide-maestro-40-beta-1.html' title='Announcing: MapGuide Maestro 4.0 beta 1'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-9191975592334662914</id><published>2011-09-05T01:15:00.000+10:00</published><updated>2011-09-05T11:05:47.259+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='FDO'/><category scheme='http://www.blogger.com/atom/ns#' term='Autodesk'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='AutoCAD Map'/><title type='text'>Taking MapGuide beyond the Server and Web right into your desktop</title><content type='html'>&lt;b&gt;&lt;u&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"&gt;Previously, I briefly mentioned how the new &lt;a href="http://themapguyde.blogspot.com/2011/08/something-even-more-revolutionary-this.html"&gt;&lt;b&gt;Local Connection mode&lt;/b&gt;&lt;/a&gt; in the next release of Maestro was backed by a new desktop implementation of the MapGuide API. This (lengthy) post covers this &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-size: large;"&gt;Preface&lt;/span&gt;&lt;/u&gt;&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Let's start with a little personal backstory of mine.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Remember this software?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-fH0i2j_qrac/TmCxaqBDRqI/AAAAAAAAAdk/lSVmP3FBq2I/s1600/77_screenshot_viewer_1_big.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="356" src="http://4.bp.blogspot.com/-fH0i2j_qrac/TmCxaqBDRqI/AAAAAAAAAdk/lSVmP3FBq2I/s640/77_screenshot_viewer_1_big.gif" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="tr-caption"&gt;The MapGuide ActiveX viewer (source: &lt;a href="http://www.directionsmag.com/articles/working-with-autodesk-mapguide/124165"&gt;Directions Magazine&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Now truth be told. I was &lt;b&gt;&lt;u&gt;not&lt;/u&gt;&lt;/b&gt; a major fan of Autodesk MapGuide 6.5. I guess that could be attributed to the following:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;I was just getting started not only with Autodesk products and technologies, but also on the basic concepts, practices and workflows of GIS systems. So for all intents and purposes, I was a total noob at the time.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Windows only. Ewwwwww!&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;The viewer is an ActiveX control that can only be embedded in Internet Explorer. Ewwwwwww!&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Now the first time I got acquainted with MapGuide was in 2005 with the 6.5 version. It was also the time at my first &lt;a href="http://usa.autodesk.com/adsk/servlet/index?siteID=123112&amp;amp;id=723353"&gt;ADN&lt;/a&gt; event when I heard about Autodesk's next version of MapGuide. Seeing the demos of this next version in action was quite a mind-blowing experience, given my not-so-positive experience with MapGuide 6.x.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;The AJAX-based viewer, multi-platform support, purty looking maps, flexible data access through this mysterious &lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;(at the time, to me)&lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt; FDO technology and the list goes on. It just ticked all the boxes of what a modern, open-ended web mapping system should be. But then came the biggest bomb-shell of them all: &lt;b&gt;It will all be open source!*&lt;/b&gt; So then several months later, the very first version of MapGuide Open Source was released and the rest (as they say) was history.^&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Now despite my less-than-flattering opinion about MapGuide 6.x. It did have some very unique qualities to it that has yet to be replicated in MGOS/AIMS. Its map viewer, due to being based on ActiveX meant it could be embedded into .net applications. The second quality was that MWF files can contain static layers. This combination meant that it was possible to build &lt;b&gt;mobile and&lt;/b&gt; &lt;b&gt;disconnected&lt;/b&gt; MapGuide applications in .net or any other windows technology that supports COM (Component Object Model)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;And it is in this respect that MGOS/AIMS has nothing comparable in its technological offerings.&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Disconnected? Not a chance! Client applications &lt;b&gt;must be connected at all times&lt;/b&gt;. No server connectivity = no maps for you! Even the latest mobile extension for AIMS still requires constant connectivity.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Mobility? You could have a full blown MGOS/AIMS installation on localhost, which your windows application can communicate via an embedded Internet Explorer. A functional, but very inelegant configuration. Nothing approaches the simplicity of a windows application + static MWF + 3mb ActiveX control configuration that was possible with MapGuide 6.x&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;So while MGOS/AIMS does most things leaps and bounds better than MapGuide 6.x, there are some other things where it pales in comparison.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Enter the &lt;a href="http://code.google.com/p/mg-desktop/"&gt;MapGuide Desktop API&lt;/a&gt; (hereby known as mg-desktop for the rest of this post). mg-desktop is a &lt;b&gt;desktop implementation&lt;/b&gt; of the MapGuide &lt;b&gt;Platform API&lt;/b&gt; allowing for the same feature data access, map rendering/stylization functionality as the MapGuide Server, but &lt;b&gt;without needing a MapGuide Server installed on your machine!&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;u&gt;&lt;b&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Genesis&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;The seeds of the MapGuide Desktop API were planted with this &lt;a href="http://au.autodesk.com/?nd=class&amp;amp;session_id=5241"&gt;groundbreaking AU 2009 presentation&lt;/a&gt;. This presentation, for those unable to access that link showed how MapGuide Open Source actually has lots of shared components that can actually be re-used &lt;b&gt;outside&lt;/b&gt; of the MapGuide Server and Web tiers.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;The main example from that presentation was a simple snapshot application that can produce a rendered map image or DWF file from a list of named Layer Definition documents &lt;b&gt;without ever needing to contact a MapGuide Server ever!&lt;/b&gt; The first thought I had after seeing that presentation, was simply: Can't we just use a Map Definition to drive all this?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;The second thought was, that AutoCAD Map already proved that the MapGuide API can be taken in a different direction, away from the MapGuide Server/Web Tier to become a API inside AutoCAD Map&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-zq1TpiRAoRc/TmDc2CkhWvI/AAAAAAAAAeE/TFpZ9j98QSI/s1600/Untitleddrawing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-zq1TpiRAoRc/TmDc2CkhWvI/AAAAAAAAAeE/TFpZ9j98QSI/s400/Untitleddrawing.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-uuujs4Mwhho/TmDLgU3zT7I/AAAAAAAAAdo/vlHsx3HUHas/s1600/Untitleddrawing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;So couldn't we have another implementation that makes it a fully self-contained framework that is usable by any desktop application, taking the concepts proven feasible by that AU presentation to its logical conclusion? mg-desktop is my answer to that question.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;mg-desktop is a &lt;b&gt;desktop implementation&lt;/b&gt; of the &lt;b&gt;Geospatial Platform API&lt;/b&gt;, with its own implementation of the core platform classes, as shown below:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-iJkzo6wLztE/TmDc_W_AB-I/AAAAAAAAAeI/AMU7deLgbf0/s1600/Untitleddrawing2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-iJkzo6wLztE/TmDc_W_AB-I/AAAAAAAAAeI/AMU7deLgbf0/s400/Untitleddrawing2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-owDdhPhyShA/TmDMgTLyOaI/AAAAAAAAAds/iB-4lfLzzfg/s1600/Untitleddrawing2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Where the &lt;b&gt;MapGuide API&lt;/b&gt; operates in the context of the &lt;b&gt;MapGuide Server/Web Tier&lt;/b&gt; and the &lt;b&gt;AutoCAD Map Platform API&lt;/b&gt; operates in the context of inside &lt;b&gt;AutoCAD Map&lt;/b&gt;, &lt;b&gt;mg-desktop&lt;/b&gt; operates in a &lt;b&gt;standalone&lt;/b&gt; context, with no dependencies on any particular application. It provides a suitable foundation for creating your own desktop-based MapGuide application.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;In addition to implementing the core classes and services of the &lt;b&gt;Geospatial Platform API&lt;/b&gt;, it also includes some of the additional service APIs provided by the MapGuide API, such as:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;MgRenderingService&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;MgDrawingService&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;MgTileService&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;mg-desktop also supports loading of MapGuide Packages (*.mgp). So you can transfer data and resources from a MapGuide Server to an mg-desktop installation.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;&lt;b&gt;Key Differences from the MapGuide API&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Because mg-desktop is a desktop implementation of the &lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Geospatial Platform API&lt;/b&gt;, some concepts which were applicable in MapGuide and/or AutoCAD Map no longer apply in mg-desktop:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;There is no session expiry :D Session resources still exist as a way to have temporary resources&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;There is no resource security model&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;On the same subject, there is no authentication required for access to services. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;There is no need to open/save runtime map state. Everything operates off of the current state of the runtime map in memory.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;The mg-desktop implementation of &lt;b&gt;MgResourceService&lt;/b&gt; wraps a pre-defined directory on the file system. Folders and resources in the mg-desktop repository conceptually map to files and folders in the file system.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;The mg-desktop implementation of &lt;b&gt;MgFeatureService&lt;/b&gt; is a thin wrapper around FDO. Each service API maps to a corresponding FDO command. All FDO types that would be returned are wrapped up and/or converted to their corresponding Mg* counterparts.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Aside from these differences, it's the same MapGuide API that you've come to know all along.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&lt;u&gt;&lt;b&gt;Unique APIs&lt;/b&gt;&lt;/u&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;mg-desktop not only just implements the abstract classes in the &lt;b&gt;Geospatial Platform API&lt;/b&gt;, but extends them with our own additional APIs to correct my perceived shortcomings of the current MapGuide APIs. Here's an overview of the unique APIs of mg-desktop.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;u&gt;MgdFeatureService&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;MgdFeatureService&lt;/b&gt; is the desktop implementation of &lt;b&gt;MgFeatureService&lt;/b&gt; and includes the following extra methods:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;RegisterProvider - Registers a new FDO provider into the provider registry by its library path&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;UnregisterProvider - Removes a registered FDO provider from the provider registry by its provider name&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;InsertFeatures - Allows for individual insertion of features into a feature class, instead of having to use the monolithic &lt;b&gt;UpdateFeatures&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;DeleteFeatures - Allows for individual deletion of features in a feature class, instead of having to use the monolithic &lt;b&gt;UpdateFeatures&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;UpdateFeatures - Although it unfortunately shares the same name as the monolithic method it's trying to replace, this allows for individual updates of features in a feature class.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;SelectFeaturesExtended - Almost identical to SelectFeatures, except this returns a scrollable feature reader that behaves similarly to the &lt;a href="http://trac.osgeo.org/fdo/wiki/FDORfc26"&gt;FDO scrollable feature reader&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;&lt;b&gt;MgdLayer&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;MgdLayer&lt;/b&gt; is the desktop implementation of &lt;b&gt;MgLayerBase&lt;/b&gt; which adds extra convenience methods, allowing you to operate on the layer itself instead of needing to obtain an &lt;b&gt;MgFeatureService&lt;/b&gt; reference and the layer's feature source id and class name:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;BeginTransaction - Convenience form of MgFeatureService.BeginTransaction&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;SelectFeaturesExtended - Convenience form of MgdFeatureService.SelectFeaturesExtended&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;InsertFeatures - Convenience form of MgdFeatureService.InsertFeatures&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;DeleteFeatures - Convenience form of MgdFeatureService.DeleteFeatures&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;UpdateFeatures - Convenience form of MgdFeatureService.UpdateFeatures&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&lt;u&gt;&lt;b&gt;The Map Viewer Component&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&lt;u&gt;&lt;b&gt; &lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;So having a reusable library to build your own geospatial applications is good and all, but is there something out-of-the-box like a map viewer that we can embed in a .net application? The answer is an emphatic yes. mg-desktop includes an embeddable map viewer component! &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-hmYecq4Sdv8/TmDTzEhrt0I/AAAAAAAAAdw/d-cLmBsofzg/s1600/desktopviewer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="346" src="http://1.bp.blogspot.com/-hmYecq4Sdv8/TmDTzEhrt0I/AAAAAAAAAdw/d-cLmBsofzg/s400/desktopviewer.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;This is not some trick of embedding a web browser to use the AJAX viewer to talk to a local or remote MapGuide Server, this is all native .net WinForms controls and using the same self-contained MapGuide rendering and stylization services provided by the mg-desktop library and it does pretty much everything you can do in the AJAX/Fusion viewer.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;What about more complex stuff like digitizing and redlining? No problem. It can do that too!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9cVR9Lh5JPY/TmDYI1qP3fI/AAAAAAAAAeA/hxKV0AYPF7o/s1600/redlining.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-dd5DSMw7p8c/TmDYHGoWI7I/AAAAAAAAAd8/av780MjO5Po/s1600/digitizing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="293" src="http://2.bp.blogspot.com/-dd5DSMw7p8c/TmDYHGoWI7I/AAAAAAAAAd8/av780MjO5Po/s400/digitizing.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9cVR9Lh5JPY/TmDYI1qP3fI/AAAAAAAAAeA/hxKV0AYPF7o/s1600/redlining.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="301" src="http://1.bp.blogspot.com/-9cVR9Lh5JPY/TmDYI1qP3fI/AAAAAAAAAeA/hxKV0AYPF7o/s400/redlining.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;And all of this is functionality is contained in one single sub-100kb dll! (OSGeo.MapGuide.Viewer.dll). The next release of Maestro will be using this viewer component for previewing Feature Sources, Layer Defintions, Watermarks and Map Definitions in the new &lt;a href="http://themapguyde.blogspot.com/2011/08/something-even-more-revolutionary-this.html"&gt;&lt;b&gt;Local Connection mode&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&lt;u&gt;&lt;b&gt;In Closing...&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;I have submitted a &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc117"&gt;pending RFC&lt;/a&gt; to have this included in the official MapGuide source tree, which would greatly improve integration, code re-use and ability to receive fixes and enhancements to upstream components.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;The source and binaries# for the mg-desktop library (and map viewer) are available from the &lt;a href="http://code.google.com/p/mg-desktop/"&gt;Google Code&lt;/a&gt; project home page. Note that FDO that is included with the binaries is a partial distribution (because I lack the ability to build certain FDO providers). You will need a &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial client&lt;/a&gt; to checkout the source code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;If you want to build the source, you will need to do a full svn checkout of MapGuide Open Source and FDO trunk. Then you will need to build FDO and the MapGuide Oem components first before you can finally build mg-desktop. The hg clone needs to reside in a Desktop subdirectory under MgDev in your MapGuide svn working copy. There is currently no 64-bit or Linux targets yet, so feel free to submit any patches.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;* Let's give credit where it's due here. &lt;a href="http://code.google.com/p/mg-desktop/"&gt;mg-desktop&lt;/a&gt;, &lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro"&gt;Maestro&lt;/a&gt; and &lt;a href="http://code.google.com/p/fdotoolbox"&gt;FDO Toolbox&lt;/a&gt; would not exist if it weren't for Autodesk open sourcing the MapGuide product and FDO technology. Similarly, my knowledge of MapGuide and FDO wouldn't have reached encyclopedic levels that they are today if these technologies were not open sourced.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;^ As most of us found out, v1.0.0 of MapGuide Open Source turned out to be pretty rough round the edges and performance of Feature Joins (which 6.x handled brilliantly) was absolutely woeful and buggy, which sadly is still applicable to this very day. But this is a known problem with a known workaround, which is to have all the data in a centralised, spatially-enabled RDBMS, which you should be already doing in the first place.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;# To reduce download size, mg-desktop contains a reduced distribution of &lt;a href="http://trac.osgeo.org/csmap/timeline"&gt;CS-Map&lt;/a&gt;. If there are problems due to missing coordinate systems, download the country-specific grid files &lt;a href="http://trac.osgeo.org/csmap/browser/trunk/CsMapDev/Dictionaries"&gt;here&lt;/a&gt; and drop them into the Dictionaries directory.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-9191975592334662914?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/9191975592334662914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=9191975592334662914' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/9191975592334662914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/9191975592334662914'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/09/taking-mapguide-beyond-server-and-web.html' title='Taking MapGuide beyond the Server and Web right into your desktop'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-fH0i2j_qrac/TmCxaqBDRqI/AAAAAAAAAdk/lSVmP3FBq2I/s72-c/77_screenshot_viewer_1_big.gif' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-3682983500943186573</id><published>2011-08-25T03:12:00.006+10:00</published><updated>2011-08-25T04:15:01.730+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Something (even more) revolutionary this way comes</title><content type='html'>When I announced that Maestro 4.0 &lt;a href="http://themapguyde.blogspot.com/2011/08/something-revolutionary-this-way-comes.html"&gt;would give you the revolutionary ability to connect to multiple sites at the same time&lt;/a&gt;, there was actually a reason for that. Because also coming in Maestro 4.0 is an entirely new way of managing and authoring your MapGuide resources.&lt;br /&gt;&lt;br /&gt;Introducing the &lt;strong&gt;Local Connection Mode&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-6J2ZYiPTzVo/TlUyF0U3IzI/AAAAAAAAAdQ/wxxEpRfqJ1Y/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 302px;" src="http://2.bp.blogspot.com/-6J2ZYiPTzVo/TlUyF0U3IzI/AAAAAAAAAdQ/wxxEpRfqJ1Y/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5644472783505662770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When you click &lt;span style="font-weight:bold;"&gt;Connect Locally&lt;/span&gt;, you still have to supply a configuration file as you would a &lt;strong&gt;TCP/IP&lt;/strong&gt; connection, exception this file will be provided by the Maestro installation.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-PX8bvRQs6IY/TlUyWp9vUHI/AAAAAAAAAdY/cT0L9sm-x1U/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 304px;" src="http://1.bp.blogspot.com/-PX8bvRQs6IY/TlUyWp9vUHI/AAAAAAAAAdY/cT0L9sm-x1U/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5644473072782102642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And it functions and operates like any other connection&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-dXySOHBtKtg/TlUzECLN5EI/AAAAAAAAAdg/TJNK_mkC700/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 301px;" src="http://1.bp.blogspot.com/-dXySOHBtKtg/TlUzECLN5EI/AAAAAAAAAdg/TJNK_mkC700/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5644473852375196738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But here's the main difference. Unlike the &lt;strong&gt;TCP/IP connection&lt;/strong&gt;, which &lt;a href="http://themapguyde.blogspot.com/2010/05/webtier-less-editing-with-maestro.html"&gt;is just a wrapper around the official MapGuide API&lt;/a&gt;, and thus requires a connection to the MapGuide Server and a &lt;a href="http://themapguyde.blogspot.com/2010/10/using-maestro-in-native-mode-with.html"&gt;cumbersome assembly signing&lt;/a&gt; process to properly set up, the Local Connection &lt;strong&gt;does not require any MapGuide Server&lt;/strong&gt; at all!&lt;br /&gt;&lt;br /&gt;This is because the Local Connection wraps &lt;a href="http://code.google.com/p/mg-desktop/"&gt;our very own implementation of the MapGuide API, which runs entirely on the desktop&lt;/a&gt; allowing for fully client-side spatial data access and map rendering/stylization.&lt;br /&gt;&lt;br /&gt;With the Local Connection mode, you can completely author up a whole bunch of Maps completely disconnected from any MapGuide Server and when you're done, use the magic of packages to instantly load this onto a given MapGuide Server &lt;a href="http://themapguyde.blogspot.com/2011/08/something-revolutionary-this-way-comes.html"&gt;without having to leave the application at all!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Because the MapGuide API uses FDO, we have the (near) full capabilities of FDO available to us, allowing my grand vision of &lt;a href="http://themapguyde.blogspot.com/2010/04/fdo-toolbox-is-dead-long-live-fdo.html"&gt;merging FDO Toolbox together with Maestro&lt;/a&gt; to finally become reality. Here's some ideas that are possible with Local Connection mode:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Bulk Copying of feature source data &lt;strong&gt;with support for re-projecting features provided by the MgCoordinateSystem API&lt;/strong&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;On a similar theme: Creating optimized datasets from Feature Sources containing Feature Joins&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Supporting the &lt;strong&gt;Convert to SDF&lt;/strong&gt; and &lt;strong&gt;Generalize Data&lt;/strong&gt; options of Load Procedures&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fully client-side previewing of Maps, Layers and Feature Sources with the &lt;strong&gt;exact rendering/stylization engine&lt;/strong&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Every other conceivable feature that currently exists in FDO Toolbox, but not in Maestro&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Super blazing fast localized tile-generation^&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Now sadly, this groundbreaking new feature has one small caveat just like FDO Toolbox. It will be windows-only :( Because even though the MapGuide Desktop API itself was written in the most portable fashion of C++, it is the glue libraries that allow a .net application like Maestro to interop with it that are not compatible with Mono in Linux/Mac. But hey, having one revolutionary new feature is just as good as two revolutionary new features is it not?&lt;br /&gt;&lt;br /&gt;Stay tuned for a more in-depth overview of the Desktop implementation of the MapGuide API that powers this new feature.&lt;br /&gt;&lt;br /&gt;^ This idea is predicated on the fact that the Desktop implementation of the Tile Service APIs is nearly identical to the MapGuide Server, thus it would be theoretically possible to generate the tile cache client-side and copy the tile cache directory over to its corresponding directory in the MapGuide Server installation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-3682983500943186573?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/3682983500943186573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=3682983500943186573' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/3682983500943186573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/3682983500943186573'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/08/something-even-more-revolutionary-this.html' title='Something (even more) revolutionary this way comes'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-6J2ZYiPTzVo/TlUyF0U3IzI/AAAAAAAAAdQ/wxxEpRfqJ1Y/s72-c/Capture.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-5123090346481988545</id><published>2011-08-16T21:42:00.005+10:00</published><updated>2011-08-16T21:56:59.753+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Something revolutionary this way comes</title><content type='html'>Each release of Maestro until now has brought with it a series of enhancements that are mostly incremental and evolutionary in nature that improves your MapGuide authoring productivity.&lt;br /&gt;&lt;br /&gt;Coming to the next release of Maestro (4.0) is a new feature which I can safely say will be nothing but &lt;strong&gt;revolutionary&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-JSVu84D5oMQ/TkpaJG8y-bI/AAAAAAAAAdI/d-EGDYJ438A/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 335px;" src="http://3.bp.blogspot.com/-JSVu84D5oMQ/TkpaJG8y-bI/AAAAAAAAAdI/d-EGDYJ438A/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5641420595765901746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That's right! Maestro 4.0 will let you connect to and work with multiple sites &lt;strong&gt;at the same time&lt;/strong&gt;! Can you imagine the possibilities?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-5123090346481988545?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/5123090346481988545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=5123090346481988545' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/5123090346481988545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/5123090346481988545'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/08/something-revolutionary-this-way-comes.html' title='Something revolutionary this way comes'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-JSVu84D5oMQ/TkpaJG8y-bI/AAAAAAAAAdI/d-EGDYJ438A/s72-c/Capture.PNG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-4263994224903354020</id><published>2011-08-15T21:42:00.002+10:00</published><updated>2011-08-15T21:50:48.979+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Announcing: MapGuide Maestro 3.5 final + SDK</title><content type='html'>I'm happy to announce the final release of MapGuide Maestro 3.5 and SDK&lt;br /&gt;&lt;br /&gt;New Features from 3.5 beta 2:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Layer editor now supports multiple composite styles per scale range&lt;/li&gt;&lt;br /&gt;&lt;li&gt;New informative progress dialog for map definition extent calculation&lt;/li&gt;&lt;br /&gt;&lt;li&gt;New "Copy Resource IDs to clipboard" context menu command&lt;/li&gt;&lt;br /&gt;&lt;li&gt;New Symbol Definition Validation rules&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Client-side support for transforming coordinates to WGS84.PseudoMercator. It should now be possible to change your Map Definition coordinate system to WGS84.PseudoMercator, and have the extents automatically transformed to match, and immediately usable in a Fusion Application Definition with a Google/Yahoo/Bing backdrop&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;New in the SDK is a new sample: StandaloneWebLayoutEditor. This sample illustrates how to use the Maestro.Editors library to re-use the Maestro resource editors from &lt;strong&gt;outside&lt;/strong&gt; of MapGuide Maestro.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro/Downloads"&gt;Download&lt;/a&gt;&lt;br /&gt;&lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro/SDK"&gt;Download SDK&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-4263994224903354020?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/4263994224903354020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=4263994224903354020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/4263994224903354020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/4263994224903354020'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/08/announcing-mapguide-maestro-35-final.html' title='Announcing: MapGuide Maestro 3.5 final + SDK'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-6860069800922369884</id><published>2011-08-06T00:30:00.007+10:00</published><updated>2011-08-06T21:11:22.638+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Announcing: MapGuide Maestro 3.5 beta 2</title><content type='html'>I'm happy to announce the second beta release of MapGuide Maestro 3.5&lt;br /&gt;&lt;br /&gt;One of the interesting new features is in-place upgrading of resources to the latest schema version. You know that pale yellow bar at the top with that upgrade button that's always disabled?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-_CRJwa57jAg/Tjv_GBtsVmI/AAAAAAAAAco/vZ5Hiqz8mT0/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 198px;" src="http://2.bp.blogspot.com/-_CRJwa57jAg/Tjv_GBtsVmI/AAAAAAAAAco/vZ5Hiqz8mT0/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5637379837588690530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's now enabled, and when you click it it will upgrade the edited resource to the latest schema version supported by the MapGuide Server you're connected to.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-e3onLryVNIY/Tjv_R5N-JsI/AAAAAAAAAcw/xZTeZmXDNXo/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 286px; height: 153px;" src="http://3.bp.blogspot.com/-e3onLryVNIY/Tjv_R5N-JsI/AAAAAAAAAcw/xZTeZmXDNXo/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5637380041466586818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once upgraded, the editor refreshes itself and the new editor features for that schema version become activated.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-7-1CpGWfS_Q/Tjv_jSNV1NI/AAAAAAAAAc4/DWXCp_msem0/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 139px;" src="http://4.bp.blogspot.com/-7-1CpGWfS_Q/Tjv_jSNV1NI/AAAAAAAAAc4/DWXCp_msem0/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5637380340232606930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is supported for all resource editors. Currently the conversion is one-way (always to the latest schema version. I may look at converting to a specific version in a future release.&lt;br /&gt;&lt;br /&gt;Other new features and changes include&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Enhanced Autodesk Infrastructure Map Server 2012 support&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Previewing is now enabled for Watermark Definitions&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Map Definition support for re-ordering layer groups&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Layer Definition editor now supports inline symbol definitions for composite symbolization&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A whole bunch of assorted productivity improvements (too many to detail, but you'll recognise it when you see it)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The usual assortment of bugfixes&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;This is the last beta release before the final 3.5 release&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro/Downloads"&gt;Download&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-6860069800922369884?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/6860069800922369884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=6860069800922369884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/6860069800922369884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/6860069800922369884'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/08/announcing-mapguide-maestro-35-beta-2.html' title='Announcing: MapGuide Maestro 3.5 beta 2'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-_CRJwa57jAg/Tjv_GBtsVmI/AAAAAAAAAco/vZ5Hiqz8mT0/s72-c/Capture.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-8616269609779760531</id><published>2011-08-05T20:37:00.008+10:00</published><updated>2011-08-05T21:08:14.601+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Maestro API: 3 ways to create and work with resources</title><content type='html'>As &lt;a href="http://themapguyde.blogspot.com/2011/06/introducing-re-vamped-maestro-api-part.html"&gt;explained previously&lt;/a&gt;, the Maestro API allows you to work with MapGuide resources in an object-oriented manner, completely avoiding the need to work with raw XML content (although the Maestro API provides such facilities should you require them)&lt;br /&gt;&lt;br /&gt;What I didn't fully explain was how one actually can create retrieve and work with these objects. In the Maestro API, there are 3 ways to do this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;First way: Using the ObjectFactory class&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;ObjectFactory&lt;/strong&gt; class allows you to create resource objects &lt;strong&gt;from scratch&lt;/strong&gt;. This method was available in the previous version of the Maestro API, but because you were working with generated classes, there was a very high chance of NullReferenceExceptions and DBXML errors being thrown at your face because you forgot to instantiate one or more of its many child properties.&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;ObjectFactory&lt;/strong&gt; class insulates these concerns away for you. Any resource you create via this approach satisfies the minimum content model requirements of its respective XML schema.&lt;br /&gt;&lt;br /&gt;Here's an example of creating a feature source object to a SQL Server 2008 Express database from scratch&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;IFeatureSource fs = (IFeatureSource)ObjectFactory.CreateFeatureSource(conn, "OSGeo.SQLServerSpatial");&lt;br /&gt;fs.SetConnectionProperty("Service", "(local)\\SQLEXPRESS");&lt;br /&gt;fs.SetConnectionProperty("DataStore", "MyDatabase");&lt;br /&gt;fs.SetConnectionProperty("Username", "mapguide");&lt;br /&gt;fs.SetConnectionProperty("Password", "maestro");&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;where conn is an instance of the &lt;strong&gt;IServerConnection&lt;/strong&gt; interface&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Second way: Using the IResourceService&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;GetResource&lt;/strong&gt; method of the &lt;strong&gt;IResourceService&lt;/strong&gt; interface automatically fetches XML content for the specified resource id and returns a strongly-typed &lt;strong&gt;IResource&lt;/strong&gt; object.&lt;br /&gt;&lt;br /&gt;Here's an example of fetching a feature source object&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;IFeatureSource fs = (IFeatureSource)conn.ResourceService.GetResource("Library://Test/Data/SQLServer.FeatureSource");&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;where conn is an instance of the &lt;strong&gt;IServerConnection&lt;/strong&gt; interface&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Final way: Using ResourceTypeRegistry&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The final way is to use the &lt;strong&gt;ResourceTypeRegistry&lt;/strong&gt; class to go from raw XML content to &lt;strong&gt;IResource&lt;/strong&gt; objects and vice versa.&lt;br /&gt;&lt;br /&gt;Here's an example of creating a feature source object from an feature source XML document on disk.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;string xml = File.ReadAllText("FeatureSource.xml");&lt;br /&gt;IFeatureSource fs = (IFeatureSource)ResourceTypeRegistry.Deserialize(xml);&lt;br /&gt;fs.CurrentConnection = conn; //Need to assign a connection if you want to use any extension methods&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;where conn is an instance of the &lt;strong&gt;IServerConnection&lt;/strong&gt; interface&lt;br /&gt;&lt;br /&gt;And here's one example of going the other way, from feature source object to file&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;IFeatureSource fs = ...;&lt;br /&gt;using(Stream sr = ResourceTypeRegistry.Serialize(fs))&lt;br /&gt;{&lt;br /&gt;    using(FileStream fs = File.OpenWrite("FeatureSource.xml"))&lt;br /&gt;    {&lt;br /&gt;        Utility.CopyStream(sr, fs); //Or if you use .net 4.0 use the new CopyTo() method&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So there you have it, 3 simple ways of working with resources in the Maestro API&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-8616269609779760531?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/8616269609779760531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=8616269609779760531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/8616269609779760531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/8616269609779760531'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/08/maestro-api-3-ways-to-create-and-work.html' title='Maestro API: 3 ways to create and work with resources'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-2666832464457526312</id><published>2011-08-05T20:17:00.006+10:00</published><updated>2011-08-05T20:37:08.890+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Debugging with the Edit As Xml command in Maestro</title><content type='html'>Here'a a useful tip to assist in reporting bugs and debugging in Maestro.&lt;br /&gt;&lt;br /&gt;At the heart of Maestro is the editors to let you edit the various types of resources that can be stored in a MapGuide Server. Now these editors are fully functional for most general cases, but should some part of a resource editor not work as advertised, here's what you can do.&lt;br /&gt;&lt;br /&gt;Use the &lt;span style="font-weight: bold;"&gt;Edit As Xml&lt;/span&gt; command to view the XML form of the resource you are editing.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-rSnqIdyKlv0/TjvFIwW8sVI/AAAAAAAAAcg/Y5mkFK5Vbo0/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 319px; height: 60px;" src="http://1.bp.blogspot.com/-rSnqIdyKlv0/TjvFIwW8sVI/AAAAAAAAAcg/Y5mkFK5Vbo0/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5637316112795087186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This command is not only convenient in that it allows you to bypass the editor and work on the actual XML content, if you know what you're trying to edit, but it also shows the xml content of the edited resource in its current state.&lt;br /&gt;&lt;br /&gt;The resource editors in Maestro do not operate on raw XML content, instead they operate on a &lt;a href="http://themapguyde.blogspot.com/2011/06/introducing-re-vamped-maestro-api-part.html"&gt;deserialized in-memory object form&lt;/a&gt; of that content&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;. It is here that certain properties and attributes may be set incorrectly or missed due to bugs in the editor.&lt;br /&gt;&lt;br /&gt;By invoking that command, Maestro is instructing the in-memory resource object to serialize itself back into XML, thus allowing you to see for yourself whether edits you have made in the editor have actually been applied.&lt;br /&gt;&lt;br /&gt;This command has been very useful for me personally when implementing new resource editors or enhancing existing ones because the XML you see is exactly what gets sent back to the MapGuide Server when you hit the &lt;span style="font-weight: bold;"&gt;Save&lt;/span&gt; button, thus it has proven invaluable for me in debugging editor functionality and XML content model errors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-2666832464457526312?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/2666832464457526312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=2666832464457526312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/2666832464457526312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/2666832464457526312'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/08/debugging-with-edit-as-xml-command-in.html' title='Debugging with the Edit As Xml command in Maestro'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-rSnqIdyKlv0/TjvFIwW8sVI/AAAAAAAAAcg/Y5mkFK5Vbo0/s72-c/Capture.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-1890198371926941809</id><published>2011-07-08T21:45:00.005+10:00</published><updated>2011-07-08T22:34:50.667+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>A bug reporting public service announcement</title><content type='html'>Ever get this error message in Maestro?&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Object Reference not set to an instance of an object&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This message and its exception type of &lt;strong&gt;System.NullReferenceException&lt;/strong&gt; generally means that I (or a library I'm using) screwed up somewhere in the code.&lt;br /&gt;&lt;br /&gt;However, just generally telling me this happened &lt;span style="font-weight:bold;"&gt;does not help me or you one iota&lt;/span&gt; because I require additional information:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;A stack trace of this exception message (so I can trace down the offending location in the code)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The steps you took to produce this error (so I can construct the possible sequence of events and data that leads up to the offending location in the code)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The data you are working with (where applicable)&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;Without these pieces of information, it makes it very hard for me to fix the cause of such errors.&lt;br /&gt;&lt;br /&gt;The error handling in &lt;a href="http://themapguyde.blogspot.com/2011/07/announcing-mapguide-maestro-35-beta-1.html"&gt;Maestro 3.5&lt;/a&gt; now uses a more flexible dialog to display such exception information. Exceptions are now displayed in a more flexible dialog.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-CgO5YQEVKNQ/Thb2etkdmAI/AAAAAAAAAcY/9dl15WQq8SU/s1600/error.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 332px;" src="http://4.bp.blogspot.com/-CgO5YQEVKNQ/Thb2etkdmAI/AAAAAAAAAcY/9dl15WQq8SU/s400/error.PNG" alt="" id="BLOGGER_PHOTO_ID_5626955791935051778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The message and detail components can both be copy/pasted or you can save the entire error dump to a text file and upload that as part an attachment to your trac issue, allowing for better quality bug reports.&lt;br /&gt;&lt;br /&gt;However, what I have just explained doesn't just cover Maestro or this specific error. This is &lt;strong&gt;good practice&lt;/strong&gt; for reporting bugs and issues in &lt;strong&gt;any&lt;/strong&gt; application you use. Bad bug reports will most likely stay ignored because there is not enough information to work on. &lt;strong&gt;Developers are not psychic people&lt;/strong&gt;, we need as much information as possible!&lt;br /&gt;&lt;br /&gt;Providing at least the information as I've pointed out is a good start for any bug report and ensures that the developer can provide a suitable fix or workaround for you particular issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-1890198371926941809?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/1890198371926941809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=1890198371926941809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/1890198371926941809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/1890198371926941809'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/07/bug-reporting-public-service.html' title='A bug reporting public service announcement'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-CgO5YQEVKNQ/Thb2etkdmAI/AAAAAAAAAcY/9dl15WQq8SU/s72-c/error.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-1442522797579386655</id><published>2011-07-06T23:44:00.003+10:00</published><updated>2011-07-07T00:14:49.987+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Announcing: MapGuide Maestro 3.5 beta 1</title><content type='html'>I'm happy to announce the first beta release of MapGuide Maestro 3.5&lt;br /&gt;&lt;br /&gt;The significant new features of this beta are some new resource editors for:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Simple and Compound Symbol Definitions&lt;/li&gt;&lt;li&gt;Watermark Definitions&lt;/li&gt;&lt;/ul&gt;These editors are really rough quality at the moment and I would like feedback on these editors to see how the usability can be improved. Especially the Symbol Definition stuff as that has existed in MapGuide &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc14"&gt;since 2007&lt;/a&gt;, but until now has not had a specialized editor due to the complexity of the XML schema.&lt;br /&gt;&lt;br /&gt;If you need a refresher on Symbol Definitions and Advanced Stylization, here's &lt;a href="http://trac.osgeo.org/mapguide/wiki/AdvancedStylization"&gt;a good starting point&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Other new features and changes include&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fusion Editor has been updated to use Google Maps V3. No more API keys required&lt;/li&gt;&lt;li&gt;The generated Web Layout for any resource preview includes a new command to report the map extents.&lt;/li&gt;&lt;li&gt;A more flexible dialog for error messages&lt;/li&gt;&lt;li&gt;Layer Definition editor has been re-structured to use less vertical screen space.&lt;/li&gt;&lt;li&gt;The usual assortment of bugfixes&lt;/li&gt;&lt;/ul&gt;This beta can reside side-by-side with older versions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro/Downloads"&gt;Download&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-1442522797579386655?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/1442522797579386655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=1442522797579386655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/1442522797579386655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/1442522797579386655'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/07/announcing-mapguide-maestro-35-beta-1.html' title='Announcing: MapGuide Maestro 3.5 beta 1'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-5472132891052415130</id><published>2011-07-03T19:26:00.003+10:00</published><updated>2011-07-03T19:43:55.876+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenLayers'/><title type='text'>Book Review: OpenLayers 2.10 Beginner's Guide</title><content type='html'>This post is a review of the book: &lt;a href="http://www.packtpub.com/openlayers-2-1-javascript-web-mapping-library-beginners-guide/book"&gt;OpenLayers 2.10 Beginner's Guide&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Many thanks to &lt;a href="http://www.packtpub.com/"&gt;Packt Publishing&lt;/a&gt; for provding me a review copy of this book allowing me to write this review.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Relevance/Shelf Life&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The problem with some technological books is that the technology advances at such a rapid pace that is renders the book's content out of date or obsolete after several months.&lt;br /&gt;&lt;br /&gt;Fortunately, this is not the case with this book because the current release &lt;a href="http://www.openlayers.org"&gt;OpenLayers&lt;/a&gt; is still 2.10 and the OpenLayers APIs have been relatively stable that the content in this book is relevant enough for future releases of OpenLayers to come. In short, don't let the version number in the book title fool you, the book does have lasting relevance should you decide to revisit the content in this book in the future.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The problem with writing a beginner's guide is, what level of knowledge do you assume the reader to have (if any)? If we were to take the book title at face value, then it assumes the reader has:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;At least heard of a thing called javascript&lt;/li&gt;&lt;li&gt;Has used a web browser other than Internet Explorer.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Fortunately the book's introductory chapter covers the fundamentals of JavaScript, and all other foundational web development concepts (AJAX, JSON, Object Oriented Programming, etc) that eases you into to meat of the book: using the OpenLayers library to make compelling web mapping applications.&lt;br /&gt;&lt;br /&gt;It is my own personal opinion that if you are to teach a newbie about web application development, they &lt;span style="font-weight: bold;"&gt;have to&lt;/span&gt; know what Firebug is and how to use it to simplify and optimize their web development workflow. &lt;a href="http://themapguyde.blogspot.com/2011/06/mapguide-application-development-tips.html"&gt;I have stated in the past&lt;/a&gt; that if it weren't for Firebug (Ok. Let's extrapolate: If it weren't for &lt;span style="font-weight: bold;"&gt;modern&lt;/span&gt; web browsers like Firefox and Chrome), I wouldn't be in the business of doing web development.&lt;br /&gt;&lt;br /&gt;Fortunately the book devotes an entire chapter to the Firebug extension for Firefox, which I believe should be a &lt;span style="font-weight: bold;"&gt;mandatory&lt;/span&gt; chapter in any book that delves into Web application development. In this respect, this book passes my newbie web developer test with flying colors.&lt;br /&gt;&lt;br /&gt;So then comes the meat of this book: Using the OpenLayers library itself. The content is structured in a logical fashion, starting with getting a basic map up and running and then spicing it up with many different types of layer objects that you can add to this map (a single chapter is devoted to detailing all the available layer types you can add to your map). The important concept of projections is also significantly covered.&lt;br /&gt;&lt;br /&gt;Another important aspect of OpenLayers is using controls to improve presentation and to add interactivity to your maps, and this book throughly covers the different types of controls available and how to use CSS to customize the style and appearance of these controls.&lt;br /&gt;&lt;br /&gt;One last important aspect of OpenLayers is Vector Layers and the book covers all the intricacies of creating, styling and presenting Vector layers. (A sample chapter from the book covers &lt;a href="http://www.packtpub.com/sites/default/files/4125OS-Chapter-9-Using-Vector-Layers.pdf?utm_source=packtpub&amp;amp;utm_medium=free&amp;amp;utm_campaign=pdf"&gt;Vector Layers&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;The Web 2.0 ecosystem is an open-ended one where many different libraries and web services can talk to each other. OpenLayers is no different and the book clearly demonstrates the "Open" part of OpenLayers by showcasing how to interface and interop with third party libraries and web services. The book covers creating mashups with Google, Microsoft and Yahoo mapping services, as well as consuming photos from Flickr.&lt;br /&gt;&lt;br /&gt;All in all, the content of this book does target its intended audience and does take care to not overwhelm the reader with OpenLayers API specifics, because &lt;a href="http://dev.openlayers.org/releases/OpenLayers-2.10/doc/apidocs/files/OpenLayers-js.html"&gt;that is what API reference documentation is for&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Verdict&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This book lives up to the title. It is a comprehensive introduction to OpenLayers and web 2.0 application development. The chapter on Firebug alone is enough to guide new users to the proper path of web development, something I am thankful for, because I do get tired of giving the same "use firebug" response to mailing list questions over and over again!&lt;br /&gt;&lt;br /&gt;Score: 8/10&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-5472132891052415130?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/5472132891052415130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=5472132891052415130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/5472132891052415130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/5472132891052415130'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/07/book-review-openlayers-210-beginners.html' title='Book Review: OpenLayers 2.10 Beginner&apos;s Guide'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-3983529516377141054</id><published>2011-06-11T01:05:00.007+10:00</published><updated>2011-06-11T01:52:26.449+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><title type='text'>Introducing the MapGuide Instant Setup utility</title><content type='html'>As someone who is getting more invovled with core mapguide development, having to build and run the installer (which may not even work properly and may pollute my registry with junk settings) just to be able to test my freshly built trunk working copy is a time-consuming process.&lt;br /&gt;&lt;br /&gt;What would be really nice is to have some kind of tool/utility that allows me to instantly configure the freshly built source (that is prepared before building the installer) and have a functional server/webtier setup, completely bypassing the installer step.&lt;br /&gt;&lt;br /&gt;Enter the Instant Setup utility&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-DcnKQ4zmBdc/TfI3hqECcmI/AAAAAAAAAb4/Tos3oY7GzuU/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 390px; height: 400px;" src="http://1.bp.blogspot.com/-DcnKQ4zmBdc/TfI3hqECcmI/AAAAAAAAAb4/Tos3oY7GzuU/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5616612736650867298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This utility requires &lt;a href="http://themapguyde.blogspot.com/2009/03/building-mapguide-on-windows-made.html"&gt;building the source and preparing it&lt;/a&gt;. For a recap, this is:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;MgDev\build.bat -a=build -w=all&lt;/li&gt;&lt;li&gt;MgDev\build.bat -a=install -w=all -o=C:\Staging\&lt;/li&gt;&lt;li&gt;Installer\build.bat -a=prepare -source=C:\Staging\&lt;/li&gt;&lt;/ol&gt;These 3 steps will set up the built binaries (and Apache/Tomcat/PHP with templated config files) under C:\Staging\. This is where the Instant Setup utility comes in.&lt;br /&gt;&lt;br /&gt;For the &lt;span style="font-weight: bold;"&gt;Source Directory&lt;/span&gt; enter C:\Staging\ (or whatever directory you chose instead)&lt;br /&gt;&lt;br /&gt;For the &lt;span style="font-weight: bold;"&gt;Batch File Output Directory&lt;/span&gt; enter the directory where this utility will generate batch files to start the server and web tier in interactive mode.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight: bold;"&gt;MapGuide Service Name&lt;/span&gt; is the service name that will be used when the configured MapGuide Server is installed as a service (not used at the moment).&lt;br /&gt;&lt;br /&gt;Then comes the detailed bits:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The port numbers where the the configured server will use&lt;/li&gt;&lt;li&gt;The virtual directory the configured web tier will exist under&lt;/li&gt;&lt;li&gt;The port number where the configured apache will use&lt;/li&gt;&lt;li&gt;The service name to use if apache is installed as a service (not used at the moment)&lt;/li&gt;&lt;li&gt;The default viewer to use for the mapviewerajax virtual directory&lt;/li&gt;&lt;li&gt;Whether to enable Java, and what port to use for Tomcat if this is the case.&lt;/li&gt;&lt;/ul&gt;Once you have specified all this information, hitting the &lt;span style="font-weight: bold;"&gt;Configure&lt;/span&gt; button will do the following.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Write your specified values into the templated Apache/Tomcat/PHP configuration files&lt;/li&gt;&lt;li&gt;Write 2 batch files (mgserver.bat and mgwebtier.bat) to start the MapGuide Server and Apache both in interactive mode.&lt;/li&gt;&lt;/ol&gt;Once configured, your C:\Staging\ directory is now a functional MapGuide Server/Web Tier installation, albeit only in interactive mode at the moment.&lt;br /&gt;&lt;br /&gt;Some may have noticed that I haven't mentioned IIS. That's because this support is not implemented yet. Eventually support for that will be added. For now, this will give you a functional Apache/PHP/Tomcat/Java configuration.&lt;br /&gt;&lt;br /&gt;The source for the instant setup utility can be found &lt;a href="http://trac.osgeo.org/mapguide/browser/trunk/Tools/MgInstantSetup"&gt;here&lt;/a&gt;. I hope this tool simplifies your MapGuide hacking experience, as it did for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-3983529516377141054?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/3983529516377141054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=3983529516377141054' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/3983529516377141054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/3983529516377141054'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/06/introducing-mapguide-instant-setup.html' title='Introducing the MapGuide Instant Setup utility'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-DcnKQ4zmBdc/TfI3hqECcmI/AAAAAAAAAb4/Tos3oY7GzuU/s72-c/Capture.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-5797971979590143852</id><published>2011-06-06T20:27:00.002+10:00</published><updated>2011-06-06T20:27:00.660+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Introducing the (re-vamped) Maestro API: Part 2</title><content type='html'>For part 2 of this series I am going to talk about the overall design of the Maestro API.&lt;br /&gt;&lt;br /&gt;Having used &lt;a href="http://fdo.osgeo.org/"&gt;FDO&lt;/a&gt; for quite some time now, a lot of its API design has influenced my design of the Maestro API. Those who have used FDO may notice many parallels in the design when working with the Maestro API.&lt;br /&gt;&lt;br /&gt;The first similarity is the heavy use of &lt;a href="http://en.wikipedia.org/wiki/Interface_%28computing%29"&gt;interfaces&lt;/a&gt;. FDO models its connections and commands via interfaces. In the Maestro API, we model the following in the same manner using interfaces:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MapGuide Server connections&lt;/li&gt;&lt;li&gt;MapGuide Service APIs&lt;/li&gt;&lt;li&gt;MapGuide Resource classes and message types&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;By having these types as interfaces, it allows the &lt;span style="font-style: italic;"&gt;implementation&lt;/span&gt; of these interfaces to be totally different, and I will show later on in this post where having this quality is extremely beneficial.&lt;br /&gt;&lt;br /&gt;The MapGuide Server connection is represented by the &lt;span style="font-weight: bold;"&gt;IServerConnection&lt;/span&gt; interface. This is the main point of entry in the Maestro API.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQwAAAIRCAIAAAAwThQcAAAgAElEQVR4nO2d23Mc1b3v+6/wH8C/MO8BYaVqaldR57zoPJwXv4ROAhtB6kwV7B2SggrH3lyCXbaRWUQnEDbGGGILy1diYAzBEKO2AeOLjJE91oAly5at0d3yZZ2Hvq1b9+ru6ZleLX0/tcolzfRN4/7MWj2zvv2zKAAgFqvoAwDAdCAJABogCQAaIAkAGiAJABogCQAaIAkAGiAJABogCQAaIAkAGiAJABogCQAaIAkAGiAJABogCQAaIAkAGiAJABqySHJnZeX06VO7dr752raXN2189ndP/goNzaj2p+efeW3by2//7Y0TJ44vLi50W5JrkxOvbXv5r4OvnThx/FLjh4npK9MLP00v/DS9cDW+3VqY0LVrYVsM24y6TSVvs4s3wrYc36bZNie2W3HtttcWbs8kb4u3Z9O0OWVbDtqdhQRt0W239W05bHfDdkfdbidud+6y7b7Q7sa0+2GLY2lpcWLi51MnT+za+eamjc+eP/d99yT5+OihV156fvzni1OzlydnfpxohW2yNSa1S2y7NnuZbw2hTc1eCdtc2K7PjataM2g35tn2k9ym538O20LYbi5cldoE224tTvLtmtA4G5e81lq6rmyzSzfC5mspeRi0m26b59otqc3ML88sBO12K2iLt1vxpi2tsG1ebssrC2FjNIswailoK3fZtiw13pl7K0G7e2/l7r07UrsbtHv3g3ZP2ThX6H1K6dLyAnl9y4d737uzstJxSd7+2xsf7n1vevanidaPEzM/TkASSGK8JG6jlH7xRZ28vqWzkpw6eeLtv71xfW786sxFzxBIAknKIwml9Mjh4QP793ZKktnWzCsvPT/dunp15iIkgSQlleT+/fuvvPT8SWekI5Ls2vnmN9+duNq6CEkgiTmSHD996fdvHFS2v+z/avzaLUESSunExM+vvvLC6Ojo9evX85TkzsrKfz7Tf3PO60YgCSQxQZLj31964a1/TNycvXf//r379+/cu7d8+4778/zS7X+MjL7z0cjVGy1BEkrpn55/ZmTk61Se6CW5eHH0tW0vu1cjkASSGCLJ7984ODHtGbJy997X340/+fyHswvL7iNzi8sHvjz7ifODLMmunW/u27dndHR0dHQ0N0lOnDi+a+ebk7NjKkk++/N6y+Wh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" alt="" /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;This contains the &lt;span style="font-weight: bold;"&gt;ResourceService&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;FeatureService&lt;/span&gt; interfaces to provide resource manipulation and feature querying capabilities. Additional MapGuide services are available via &lt;span style="font-weight: bold;"&gt;GetService &lt;/span&gt;method and you can interrogate the &lt;span style="font-weight: bold;"&gt;Capabilities&lt;/span&gt; property to determine what you can and can't do with this particular connection.&lt;br /&gt;&lt;br /&gt;Now the reason this is an interface is because in the Maestro API, there are currently 2 implementations of this connection:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One that communicates with the mapagent via http. (Maestro.Http)&lt;/li&gt;&lt;li&gt;One that wraps the official MapGuide API. (Maestro.LocalNative)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;Because this is an interface, the client application can use the same code regardless of implementation. As there is an implementation that wraps the official MapGuide API, you can even use MapGuide Maestro &lt;a href="http://themapguyde.blogspot.com/2010/05/webtier-less-editing-with-maestro.html"&gt;without even needing a web tier&lt;/a&gt; because MapGuide Maestro works against the interfaces defined in the Maestro API.&lt;br /&gt;&lt;br /&gt;Now given that &lt;span style="font-weight: bold;"&gt;IServerConnection&lt;/span&gt; is an interface, how does one go about creating instances of it? Enter the &lt;span style="font-weight: bold;"&gt;ConnectionProviderRegistry&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="data:image/png;base64,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" alt="" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Simply call &lt;span style="font-weight: bold;"&gt;CreateConnection&lt;/span&gt; passing in the desired provider and the parameters needed to initialize it. The &lt;span style="font-weight: bold;"&gt;ConnectionProviderRegistry&lt;/span&gt; reads from a &lt;span style="font-weight: bold;"&gt;ConnectionProviders&lt;span style="font-weight: bold;"&gt;.xml&lt;/span&gt;&lt;/span&gt; file which contains all the registered connection providers. Each connection provider is an implementation of the &lt;span style="font-weight: bold;"&gt;IServerConnection&lt;/span&gt; interface.&lt;br /&gt;&lt;br /&gt;So having acquired a connection, we can now interact with the services provided by MapGuide. Once again, these services are modeled as interfaces&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-_Q9hrdr0U-Q/Td-SzDqL9vI/AAAAAAAAAbk/9Hx1-ogrvLQ/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 160px;" src="http://1.bp.blogspot.com/-_Q9hrdr0U-Q/Td-SzDqL9vI/AAAAAAAAAbk/9Hx1-ogrvLQ/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5611365066580162290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Each service is defined in a corresponding interface. For reference, they are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;IFeatureService&lt;/li&gt;&lt;li&gt;IResourceService&lt;/li&gt;&lt;li&gt;IDrawingService&lt;/li&gt;&lt;li&gt;IMappingService (also contains rendering service APIs)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;IFusionService&lt;/li&gt;&lt;li&gt;ITileService&lt;/li&gt;&lt;li&gt;ISiteService&lt;/li&gt;&lt;/ul&gt;Each service interface contains methods which correspond to what you see in the mapagent test page. These services are obtained via the &lt;span style="font-weight: bold;"&gt;GetService&lt;/span&gt; method on &lt;span style="font-weight: bold;"&gt;IServerConnection&lt;/span&gt;. For &lt;span style="font-weight: bold;"&gt;IResourceService&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;IFeatureService&lt;/span&gt;, these already exist as properties so you can access them directly. Once again because these are interfaces, the implementations can be wildly different:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For the http connection provider, these interfaces wrap http requests to the mapagent and automatically processes the XML responses from them.&lt;/li&gt;&lt;li&gt;For the local connection provider, these interfaces wrap the offical MapGuide service classes (eg. The implementation of &lt;span style="font-weight: bold;"&gt;IFeatureService&lt;/span&gt; wraps the methods of the &lt;span style="font-weight: bold;"&gt;MgFeatureService&lt;/span&gt; class, and does automatic conversion of &lt;span style="font-weight: bold;"&gt;MgByteReader&lt;/span&gt; values)&lt;/li&gt;&lt;/ul&gt;Finally, there is MapGuide's resource classes and message types. The MapGuide Server returns many different types of XML data. But with the Maestro API, instead of working with raw XML content and having to write a lot of boilerplate code, you get to work with strongly typed classes and interfaces, with XML serialization automatically handled for you&lt;br /&gt;&lt;br /&gt;Now there's a lot of &lt;a href="http://trac.osgeo.org/mapguide/browser/trunk/MgDev/Common/Schema"&gt;XML Schemas&lt;/a&gt; for all the various forms of XML data that MapGuide returns. Actually building the classes that represent this data by hand would've taken an eternity, so I've taken a shortcut for this particular case and used the &lt;a href="http://xsd2code.codeplex.com/"&gt;xsd2code&lt;/a&gt; code generator to generate all the required classes from their XML Schemas. I used xsd2code for generating the classes instead of using the default xsd.exe tool for &lt;a href="http://themapguyde.blogspot.com/2010/05/xsd2code.html"&gt;reasons I have already explained&lt;/a&gt;. The set of generated classes produced by xsd2code a much cleaner (relative to xsd.exe anyway) and gave me a very useful foundation to work with.&lt;br /&gt;&lt;br /&gt;In the case of resource classes, using the generated classes as-is was still not good enough. Additional tweaking of this generated code was required. The reason is that each particular &lt;span style="font-weight: bold;"&gt;version&lt;/span&gt; of a resource was its own separate class when generated. Each particular version of a resource in its generated class form had nothing in common. Once again, interfaces come to save the day.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-WMYL43iS7ug/Td-YcotBRPI/AAAAAAAAAbs/lL9HE3bQY7s/s1600/Capture.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 176px;" src="http://1.bp.blogspot.com/-WMYL43iS7ug/Td-YcotBRPI/AAAAAAAAAbs/lL9HE3bQY7s/s400/Capture.PNG" alt="" id="BLOGGER_PHOTO_ID_5611371278456931570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now you may notice that there is only one interface for Layer Definitions, but there's been 3 additional revisions to date in the Layer Definition XML schema (ref &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc14"&gt;1&lt;/a&gt;, &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc16"&gt;2&lt;/a&gt;, &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc17"&gt;3&lt;/a&gt;, &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc29"&gt;4&lt;/a&gt; and &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc50"&gt;5&lt;/a&gt;). So how were 4 separeately generated classes able to be reconciled into a single interface?&lt;br /&gt;&lt;br /&gt;One of the fortunate things thus far, that &lt;a href="http://www.autodesk.com/"&gt;Autodesk &lt;/a&gt;did when they introduced a new version of a given resource was that the schema revisions have been &lt;span style="font-weight: bold;"&gt;incremental and additive&lt;/span&gt;. Nothing is actually removed or altered in every schema revision thus far.&lt;br /&gt;&lt;br /&gt;Because of this, the design of these interfaces is such that they represent the 1.0.0 version of the respective resource type each interface is modeling. Elements introduced in newer versions of the schema are exposed through a new version of the interface that extends the original.&lt;br /&gt;&lt;br /&gt;So with this design, we have a consistent baseline interface for all resource types and we can interrogate the resource version to determine if we can cast these interfaces (or its child properties, which are also interfaces) to the newer versions to tap into the extra functionality exposed in these newer interfaces.&lt;br /&gt;&lt;br /&gt;As is the case with the Web Layout in the above diagram. &lt;span style="font-weight: bold;"&gt;IWebLayout2&lt;/span&gt; extends &lt;span style="font-weight: bold;"&gt;IWebLayout &lt;/span&gt;and maps to the 1.1.0 version of the Web Layout schema that introduced &lt;a href="http://trac.osgeo.org/mapguide/wiki/MapGuideRfc66"&gt;a new "ping server" property&lt;/a&gt;. However both can be accessed via the &lt;span style="font-weight: bold;"&gt;IWebLayout&lt;/span&gt; interface. We can check if the resource version is 1.1.0 to determine if it can be cast into the &lt;span style="font-weight: bold;"&gt;IWebLayout2&lt;/span&gt; interface.&lt;br /&gt;&lt;br /&gt;It is through this design that the Resource Editors in MapGuide Maestro are able to edit most, if not all known versions of a given resource type, and have the necessary intelligence to enable/disable certain UI elements for elements not supported by the edited resource version. This design allows Maestro to keep up to date as newer resource types  or schema versions are made available, providing that these schema  revisions stay true to their additive form.&lt;br /&gt;&lt;br /&gt;This incremental quality of the XML schema revisions is also reflected in the generated code. Thus with the magic of &lt;a href="http://msdn.microsoft.com/en-us/library/wa80x488%28v=vs.80%29.aspx"&gt;partial classes&lt;/a&gt; and careful use of the &lt;a href="http://msdn.microsoft.com/en-us/library/ed8yd1ha%28v=vs.71%29.aspx"&gt;C# pre-processor&lt;/a&gt;, getting different versioned classes to implement the same baseline interface was actually an easy task. Then it was a case of extracting the newer properties and methods introduced in newer schema versions into their own separate interface that extends the original.&lt;br /&gt;&lt;br /&gt;The end result, is a consistent object-oriented API that is (mostly :) ) free of boilerplate code that you would normally write to deal with raw XML content, MgByteReaders and HTTP requests/responses. Any developer who has worked with the official MapGuide API would appreciate&lt;br /&gt;&lt;br /&gt;So that's the high-level overview of the design of the Maestro API. Stay tuned for part 3, where I actually show some concrete examples of how to use this library.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-5797971979590143852?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/5797971979590143852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=5797971979590143852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/5797971979590143852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/5797971979590143852'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/06/introducing-re-vamped-maestro-api-part.html' title='Introducing the (re-vamped) Maestro API: Part 2'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-_Q9hrdr0U-Q/Td-SzDqL9vI/AAAAAAAAAbk/9Hx1-ogrvLQ/s72-c/Capture.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-3867901426411873085</id><published>2011-06-06T20:25:00.007+10:00</published><updated>2011-06-06T23:42:20.293+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><title type='text'>MapGuide Application Development tips</title><content type='html'>Sometimes on the &lt;a href="http://osgeo-org.1803224.n2.nabble.com/MapGuide-Users-f1803227.html"&gt;mapguide-users&lt;/a&gt; mailing list, we get questions that make me scratch my head sometimes. These are questions that can answer themselves with the use and knowlege of the right tools and configuration settings.&lt;br /&gt;&lt;br /&gt;So giving the benefit of the doubt regarding programming ability, and simply assuming the case of "not knowing what's out there", here's the tools and configuration settings that I always use when developing MapGuide applications, which should greatly assist and simplify the process of developing and debugging MapGuide applications. Experienced web developers can probably tune out because you should already know these tools :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;1. &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://getfirebug.com/"&gt;Firebug&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you haven't heard of firebug or haven't used it before, stop reading this post and download it now. &lt;a href="http://getfirebug.com/"&gt;DO IT!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If firebug didn't exist, I probably wouldn't be taking Web Development as seriously (hell, I probably wouldn't do web development full stop!). If you do any development on the MapGuide Platform (or web development in general), &lt;span style="font-weight: bold;"&gt;you will have to&lt;/span&gt; write some javascript and firebug provides top-class debugging facilities.&lt;br /&gt;&lt;br /&gt;But it doesn't just do javascript, it also does:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;CSS/DOM debugging&lt;/li&gt;&lt;li&gt;HTTP request tracing / performance monitoring. (you can see all the requests that Fusion/AJAX viewer is making to your MapGuide Web Tier)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Lots more!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;It is the complete web development package! Of course, you should already know that (and I shouldn't even have to be writing this post!)&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Mozilla Firefox&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Besides the fact that this is needed for firebug, Firefox is the epitomy of the &lt;span style="font-weight: bold;"&gt;modern web browser&lt;/span&gt;, and has lots of healthy competition from Google Chrome and other WebKit-based bretheren to help keep moving the web forward ... Unlike that browser from Redmond^!&lt;br /&gt;&lt;br /&gt;But even still, the Firefox + Firebug combination provides a solid foundation for your design ensuring that the time spent in Internet Explorer is kept to a minimum*&lt;br /&gt;&lt;br /&gt;My web development workflow is simply:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Design and develop and test in Firefox / Firebug. This design will 99.9% work in all &lt;span style="font-weight: bold;"&gt;modern&lt;/span&gt; browsers.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.i-marco.nl/weblog/archive/2006/06/24/time_breakdown_of_modern_web_d/?p=2006/06/24/time_breakdown_of_modern_web_d"&gt;Contort and bastardise&lt;/a&gt; this design (hopefully not too much) to make it work in Internet Explorer&lt;/li&gt;&lt;li&gt;Re-test against Firefox / Firebug to ensure no breakages.&lt;/li&gt;&lt;/ol&gt;Simply put, the Firefox + Firebug combination significantly reduces the time spent in the 2nd step of this workflow. The amount of pain and suffering (and the amount of swearing directed at Redmond) would be kept to a minimum.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;3. &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.baremetalsoft.com/baretail/"&gt;Baretail&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; + MapGuide log files&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Believe it or not, MapGuide actually logs lots of information when its running (under default server configuration settings). If a viewer has made a request to the MapGuide Server, it is logged. If MapGuide throws an error, it is logged. If something has made the MapGuide Server fall over, chances are it is logged. Simply put, the logging facilities built into MapGuide provides you with a lot of information to work with. When things go south in your MapGuide application, the log files should almost always be the first port of call.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.baremetalsoft.com/baretail/"&gt;Baretail&lt;/a&gt; is a windows utility that is effectively the windows equivalent to the unix &lt;a href="http://en.wikipedia.org/wiki/Tail_%28Unix%29"&gt;tail&lt;/a&gt; utility, showing you the latest entries in &lt;span style="font-weight: bold;"&gt;error.log&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;access.log&lt;/span&gt; (and any other log file) as they are written by the MapGuide Server. It is an &lt;span style="font-weight: bold;"&gt;invaluable&lt;/span&gt; resource to assist in debugging and problem diagnosis. Does your MapGuide application code not work? Try running it again while observing the mapguide logs under baretail. They might tell you something.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;4. Set display_errors = On in php.ini&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;The PHP that is bundled with MapGuide uses production-level settings. This means any warnings or errors (like unhandled MapGuide exceptions) in any PHP code you may be running are silently swept under the carpet most of the time. Setting the &lt;span style="font-weight: bold;"&gt;display_errors&lt;/span&gt; setting to &lt;span style="font-weight: bold;"&gt;On&lt;/span&gt; in &lt;span style="font-weight: bold;"&gt;php.ini&lt;/span&gt; will reveal and display these errors. If PHP is your development environment, this should be the first thing you do on a fresh development install of MapGuide.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;5. &lt;a href="http://www.javascriptlint.com/index.htm"&gt;JavaScript lint&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sometimes I wish JavaScript was a compiled language. That way the theoretical javascript compiler can report to me all the syntax errors it finds in my javascript source code &lt;span style="font-weight: bold;"&gt;immediately&lt;/span&gt; instead of me having to wait until runtime to get a nasty surprise!&lt;br /&gt;&lt;br /&gt;Well JavaScript will never become a compiled language, but we do have &lt;a href="http://www.javascriptlint.com/index.htm"&gt;JavaScript Lint&lt;/a&gt; which is the closest thing we will ever get to a "compiler". Usage is simple, run the jsl.exe executable on your javascript source and watch it report any javascript syntax errors with matching line numbers!&lt;br /&gt;&lt;br /&gt;Knowing these tools and configuration settings have made my web development life simpler, I hope this post makes your's simpler too!&lt;br /&gt;&lt;br /&gt;^ Generally speaking, where IE gets it completely wrong is in two areas: 1) Certain parts of the &lt;a href="http://en.wikipedia.org/wiki/Document_Object_Model"&gt;DOM&lt;/a&gt; API and 2) Flagrant disregard or misinterpretation of certain CSS rules (most infamously, &lt;a href="http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug"&gt;the box model bug&lt;/a&gt;). But it's 2011, these are known problems solved by almost &lt;a href="http://jquery.com/"&gt;every web framework&lt;/a&gt; out there, which you should be using already! Which is why I said that the Firefox + Firebug combination takes you 90% there.&lt;br /&gt;&lt;br /&gt;* I think if all of us web developers charged a mandatory "IE tax" on our web development work, it would make some of these regressive organisations think twice about holding us (and the modern web) back by still mandating Internet Explorer 6 as the "standard web browser". &lt;a href="http://www.theie6countdown.com/default.aspx"&gt;Microsoft got the message&lt;/a&gt;, why won't you!? To be fair, none of the clients I have worked with in my career thus far fall under this category, but the fact that there are still such organisations out there makes baby Jesus cry! At least IE9 is a half-modern web browser, and if Microsoft is serious about its &lt;a href="http://www.microsoft.com/presspass/features/2011/jun11/06-01corporatenews.aspx"&gt;vision of application development for Windows 8&lt;/a&gt;, they have no choice but to make IE10 an actual functional modern web browser!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1951542926024108564-3867901426411873085?l=themapguyde.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://themapguyde.blogspot.com/feeds/3867901426411873085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1951542926024108564&amp;postID=3867901426411873085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/3867901426411873085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1951542926024108564/posts/default/3867901426411873085'/><link rel='alternate' type='text/html' href='http://themapguyde.blogspot.com/2011/06/mapguide-application-development-tips.html' title='MapGuide Application Development tips'/><author><name>Jackie Ng</name><uri>http://www.blogger.com/profile/14319639645667992869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_tWgkJLZDMpc/SXXtwObcB_I/AAAAAAAAADM/PX2HsjYn-q0/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1951542926024108564.post-6995866666317165737</id><published>2011-05-27T00:06:00.005+10:00</published><updated>2011-05-27T01:52:49.727+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGeo'/><category scheme='http://www.blogger.com/atom/ns#' term='MapGuide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maestro'/><title type='text'>Introducing the (re-vamped) Maestro API: Part 1</title><content type='html'>&lt;a href="http://trac.osgeo.org/mapguide/wiki/maestro"&gt;MapGuide Maestro&lt;/a&gt; may seem to be just an authoring application for &lt;a href="http://mapguide.osgeo.org/"&gt;MapGuide Open Source&lt;/a&gt;, but behind the scenes, it uses a set of core libraries that can do so much more. These libraries represent the Maestro API.&lt;br /&gt;&lt;br /&gt;Before I talk about the Maestro API, I want to talk about the official MapGuide API that you should be familiar with by now.&lt;br /&gt;&lt;br /&gt;The official MapGuide API that you use to create your MapGuide applications is a set of language wrappers (PHP/Java/.net) around the native MapGuide API as shown in the diagram below.&lt;br /&gt;&lt;br /&gt;&lt;img src="data:image/png;base64,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" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;The  MapGuide server has a large set of functionality that handles authoring  and managing maps and spatial data. This functionality is only exposed  through a few methods that allow reading and writing of Xml. The  C++ classes communicate with the MapGuide server through dedicated TCP/IP ports.&lt;br /&gt;&lt;br /&gt;This means that it is only possible to interact with servers on  the local intranet (opening the port is not recommended for security  reasons) and is the main reason why most applications using the official MapGuide API are either Web Applications or applications that reside on the MapGuide Web Tier.&lt;br /&gt;&lt;br /&gt;So what is the Maestro API? To answer that I will need the assistance of a few diagrams.&lt;br /&gt;&lt;br /&gt;Here's a diagram which may be familiar to some of you&lt;br /&gt;&lt;br /&gt;&lt;img src="data:image/png;base64,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
