<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-GB link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Another thing knocking around in the back of my head is using Mono.Simd
&nbsp;for accessing SSE instruction sets on modern processors.. Or Perhaps OpenCL to
enable GPUs to be used...<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>jd<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'>

<p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:
"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;
font-family:"Tahoma","sans-serif"'> Daniel Ames [mailto:dan.ames@isu.edu] <br>
<b>Sent:</b> 01 June 2010 16:05<br>
<b>To:</b> John Diss<br>
<b>Cc:</b> dotnet@lists.osgeo.org<br>
<b>Subject:</b> Re: [DotNet-OSGeo] some random thoughts<o:p></o:p></span></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<div>

<div>

<p class=MsoNormal>John,&nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>Nicely summarized - I think you've pretty much laid out all of
the main considerations in designing a common .NET underlying framework... Here
are some thoughts on your points.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>- Dan<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p>Personally I think all parts of the application should be split into an
interface and an implementation. All interfaces should only demand other
interfaces in their contracts. This will allow much easier replacement of core
components in future. IOC/DI can be used to bind the concrete implementations
together. We should avoid building a tightly coupled monolith.<o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Agreed. It's the question of building an open source
cathedral or an open source bazaar. Maybe what we need is a well-planned city
where individuals can contribute different elements but they all fit
together.&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'><br>
All interfaces should closely resemble their OSGeo counterparts - there is no
point in building a standard if by doing so you ignore the standard.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Critical imao&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'><br>
Licensing should be thought out up front. The project will never be the go-to
source for .Net developers if there is the slightest hint of GPL and a lot of people
don&#8217;t understand LGPL either so that is also a turnoff.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>On some of our projects we are going with BSD which is like
LGPL in spirit but is only one paragraph which is nice. Alternatively we
continue to use LGPL and make sure to educate people as to what that means (ie.
commercial use is OK).&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'><br>
All external apis where possible should be parallelizable. E.g collections
should be synchronized.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Cool, but not sure how feasible. Thoughts?<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>Data access should be async.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Especially for web based data access. Maybe not for file
based?&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>There should be a caching block developed with
multiple backends. Uses ranging from caching data/ partial screen renders,
wms/wfs output etc.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Not sure exactly what the implications are... but
interesting idea.&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'><br>
Supported frameworks should be considered up front - my personal preference
would be to start with a clean slate at .Net 4 or at a minimum 3.5.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>We were targeting 3.5 because it would be more likely to be
mono compliant... (does MONO really support all of .NET 4 now?)&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>If we hope to support MONO (which I think we
should) we must ensure that any rendering api's have a potential replacement in
Mono. Mono is currently compatible with .net 4.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>&nbsp;Any ideas on how much of .NET 4 is implemented in MONO
now?&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'><br>
GDI+ is terrible in a server context - &quot;A Generic Exception Occurred&quot;
is the best way to ruin my day/week/month. A while ago I had a play with Cairo
and D2D both are promising - wip is available in the JDSymbolizer branch at <a
href="http://sharpmapv2.googlecode.com" target="_blank">http://sharpmapv2.googlecode.com</a>.
D2D is platform agnostic whereas the Cairo I was using was x86 only. It was
also an experiment to allow different rasterizers to be used in the same
control and also multi pass rendering ala OsGeo Symbology.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Our approach has been to - again - use interfaces. So we
have developed an &quot;iMap&quot; interface that could be swapped out with
different rendering engines depending on the platform or user preference. We
need to commit this soon to the System.Spatial codeplex site and get some
feedback from others. &nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>Reliance on native apps/dlls should be avoided
where possible and replaced asap when they are used to get a result. They
reduce the portability of the resulting framework and make building for AnyCPU
much harder as you get BadImageFormatExceptions thrown whenever an x86 native
assembly is loaded into an x64 app domain. This in turn makes the build configs
harder to maintain.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Agreed. This is why it's important to for example support
GDAL as a data provider plug-in. Essentially any native app or dll needed
should be supported as a plug-in rather than as a core framework component.
&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>Any class expecting to retrieve (vector/attribute)
data from a datasource should demand IQueriable&lt;I/TFeature&gt; rather than a
FeautureProvider or similar. DataTable / Dataset should be avoided. The query
syntax should be either linq against TFeature and/or based on expressions taken
from the OSGeo Filter spec.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Not sure I understand... can you explain further?&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>All data classes should be marked [Serializable].</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Agreed&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>Where possible the classes should be
[CLSCompliant]</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Agreed&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>Any style/symbology should be based on the OsGeo
symbology spec /SLD i.e multiple rules evaluated in a loop for each feature
allowing for complex styles to be built up.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Agreed. We've started using this approach in a new renderer
for MapWindow that we'd like to share with the community in the
System.Spatial.Symbology(?) namespace...&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>Potential for 3D should be considered and planned
for if appropriate.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>One approach is through the iMap interface. Using the common
interface for a map would allow someone to build an OpenGL or DirectX map and
swap it in with full 3-D capabilities.&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>Silverlight/Moonlight has massive potential for
browser based gis / mapping / processing / grid computing. Supporting it should
definitely be planned for but it imposes its own forced async style which may
have implications elsewhere. Also win phone 7 will be Silverlight based. Novell
have MonoTouch and MonoDroid in progress for IPhone and Android respectively
and <a href="http://www.KoushikDutta.com" target="_blank">www.KoushikDutta.com</a>
&nbsp;is working on another free Android/Mono platform.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>What are all the implications of supporting Silverlight and
Moonlight? Is it possible to have a standard .NET DLL that can be used in a
Silverlight application?&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>Labelling engine is extremely important it should
be capable of creating very crude/fast maps and also picture perfect &#8211; what the
general public expect.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Yes. ArcGIS does this by having a pretty good labeling
engine and then an expensive add-on (Mapplex) that does the atlas style
labeling - which is nicer but slower. So there needs to be support for both,
perhaps with better labeling available through a plug-in. We ought to be able
to reuse/port from other good open source labeling engines...&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>MS C#/dotspatial group style guidelines should be
followed -&nbsp; everyone&#8217;s code should look the same. Perhaps a developer R#/stylecop
profile should be created and enforced by a CI server.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Agreed. Is it possible to do this kind of enforcement using
Codeplex?&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>Source control should be backed with a CI / Test
server.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Can this be done on Codeplex?&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p><span style='color:black'>There should be an IRC channel created or perhaps
2. #dotspatial and #dotspatial-dev. I suggest <a href="http://freenode.net"
target="_blank">freenode.net</a> as #OSGeo and #SharpMap are already there.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Agreed - will do. &nbsp;<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>Perhaps the logs should be taken and made
available somewhere.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Yeah, any ideas on how to do this other than just through
the codeplex log browser?&nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'><br>
Documentation should be easy to find and of high quality. Perhaps the group
needs a sister website separated from codeplex where it is easier to manage the
wiki/ public contribution etc. The codeplex wiki is very limited in this
respect.</span><o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Yes agreed. This is the number one complaint I believe of
any/every open source GIS project that there isn't adequate high quality
documentation. We've registered &quot;dotSpatial.org&quot; so maybe that should
point to a non-Codeplex server where we can maintain documentation and project
description/etc. Then have pointers to the Codeplex site for source code,
issues and forums. What do you think of this approach? Would you (John or
others) be interested/willing to help decide what would go such a separate
site? layout, etc?<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p><span style='color:black'>&nbsp;</span><o:p></o:p></p>

<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Any
way got to do some work.. more to come...<o:p></o:p></p>

<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p>

<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>If
possible it would be good to arrange an informal meeting sometime on irc.
&nbsp;I am in London, FObermaier is in Germany and Pauldendulk is in Holland so
it may make sense to have it late afternoon here / morning in the US<o:p></o:p></p>

</div>

</div>

</blockquote>

<div>

<p class=MsoNormal>Agreed. I'll set up the freenode channel unless someone else
has already done it and then let's schedule a chat for anyone interested in
joining... &nbsp;<o:p></o:p></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-right:0cm'>

<div>

<div>

<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p>

<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>All
the best<o:p></o:p></p>

<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>jd<o:p></o:p></p>

<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p>

</div>

</div>

<p class=MsoNormal style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
DotNet mailing list<br>
<a href="mailto:DotNet@lists.osgeo.org">DotNet@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/dotnet" target="_blank">http://lists.osgeo.org/mailman/listinfo/dotnet</a><o:p></o:p></p>

</blockquote>

</div>

<p class=MsoNormal style='margin-bottom:12.0pt'><br>
<br clear=all>
<br>
-- <br>
Daniel P. Ames, Ph.D. PE<br>
Associate Professor, Geosciences<br>
Idaho State University - Idaho Falls<br>
<a href="mailto:amesdani@isu.edu">amesdani@isu.edu</a><br>
<a href="http://geology.isu.edu">geology.isu.edu</a><br>
<a href="http://www.mapwindow.org">www.mapwindow.org</a><br>
<br>
*************************************************************************<br>
See you at IEMSS 2010: <a href="http://www.iemss.org/iemss2010/">http://www.iemss.org/iemss2010/</a><br>
*************************************************************************<o:p></o:p></p>

</div>

</body>

</html>