<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>BlueToque Consulting</title>
	<atom:link href="http://blog.bluetoque.ca/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bluetoque.ca</link>
	<description>Software Design and Architecture</description>
	<lastBuildDate>Sat, 12 May 2012 21:28:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.bluetoque.ca' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/52bc04b44f0005f0e9a799e32b15f4ce?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>BlueToque Consulting</title>
		<link>http://blog.bluetoque.ca</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.bluetoque.ca/osd.xml" title="BlueToque Consulting" />
	<atom:link rel='hub' href='http://blog.bluetoque.ca/?pushpress=hub'/>
		<item>
		<title>Announcing SharpGpx</title>
		<link>http://blog.bluetoque.ca/2012/05/11/announcing-sharpgpx/</link>
		<comments>http://blog.bluetoque.ca/2012/05/11/announcing-sharpgpx/#comments</comments>
		<pubDate>Sat, 12 May 2012 05:00:32 +0000</pubDate>
		<dc:creator>Blue Toque</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[GPX]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[TrueNorth]]></category>
		<category><![CDATA[XSD]]></category>

		<guid isPermaLink="false">http://blog.bluetoque.ca/?p=457</guid>
		<description><![CDATA[One of the major features of TrueNorth is data interoperability, and one of the most common file formats for exchanging GPS data is GPX. GPX is supported by many smart phones, GPS devices, and hundreds of software packages. So, one of the earliest features added to TrueNorth was GPX support. GPX is an XML File [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=457&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the major features of <a href="http://www.TrueNorthGeospatial.com" target="_blank">TrueNorth</a> is data interoperability, and one of the most common file formats for exchanging GPS data is <a href="http://en.wikipedia.org/wiki/GPS_eXchange_Format" target="_blank">GPX</a>. GPX is supported by many smart phones, <a class="zem_slink" title="Global Positioning System" href="http://en.wikipedia.org/wiki/Global_Positioning_System" rel="wikipedia" target="_blank">GPS devices</a>, and hundreds of software packages. So, one of the earliest features added to TrueNorth was GPX support.</p>
<p>GPX is an <a href="http://en.wikipedia.org/wiki/XML" target="_blank">XML</a> <a class="zem_slink" title="File format" href="http://en.wikipedia.org/wiki/File_format" rel="wikipedia" target="_blank">File format</a>, and the two versions in existence have well-defined <a href="http://en.wikipedia.org/wiki/XML_schema" target="_blank">Xml Schemas</a> (XSDs). In addition, they are very simple. This made writing the library very simple through the use of  <a title="XsdToClasses" href="http://blog.bluetoque.ca/products/xsdtoclasses/">XsdToClasses</a>; using the tool, the code to validate, read and write the files was generated; about 3800 <a class="zem_slink" title="Source lines of code" href="http://en.wikipedia.org/wiki/Source_lines_of_code" rel="wikipedia" target="_blank">lines of code</a>, in a few seconds.</p>
<p>Additional work on adding support for <a href="http://www8.garmin.com/xmlschemas/GpxExtensions/v3/GpxExtensionsv3.xsd" target="_blank">Garmin GPX Extensions</a>, loading and saving from streams, files, and strings, and little polish with some helper methods, and the library was finished.</p>
<p>Today, BlueToque software would like to announce that the GPX library, SharpGpx, is being <a href="http://sharpgpx.codeplex.com" target="_blank">published as open source on CodePlex</a>, and is available for immediate download to the public.</p>
<br />Filed under: <a href='http://blog.bluetoque.ca/category/blog/'>Blog</a> Tagged: <a href='http://blog.bluetoque.ca/tag/code/'>code</a>, <a href='http://blog.bluetoque.ca/tag/gpx/'>GPX</a>, <a href='http://blog.bluetoque.ca/tag/open-source/'>open source</a>, <a href='http://blog.bluetoque.ca/tag/truenorth/'>TrueNorth</a>, <a href='http://blog.bluetoque.ca/tag/xsd/'>XSD</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bluetoquesoftware.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bluetoquesoftware.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bluetoquesoftware.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bluetoquesoftware.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bluetoquesoftware.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bluetoquesoftware.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bluetoquesoftware.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bluetoquesoftware.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bluetoquesoftware.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bluetoquesoftware.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bluetoquesoftware.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bluetoquesoftware.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bluetoquesoftware.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bluetoquesoftware.wordpress.com/457/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=457&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.bluetoque.ca/2012/05/11/announcing-sharpgpx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e03f89ccce5557df34fef8a5d925a583?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">tsylos</media:title>
		</media:content>
	</item>
		<item>
		<title>Google Public Alerts</title>
		<link>http://blog.bluetoque.ca/2012/01/25/google-public-alerts/</link>
		<comments>http://blog.bluetoque.ca/2012/01/25/google-public-alerts/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 18:58:40 +0000</pubDate>
		<dc:creator>Blue Toque</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[alerting]]></category>
		<category><![CDATA[CAP]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://blog.bluetoque.ca/?p=437</guid>
		<description><![CDATA[Google announced it&#8217;s new Public Alerts service today. This isn&#8217;t like the other Google Alerts service which lets you enter a few search terms and have Google email you when new results are found (although this tool is also useful for alerting you for public safety). Google Public Alerts is a tool based on Google Maps that shows relevant alerts from public [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=437&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Google announced it&#8217;s new <a href="http://www.google.org/publicalerts" target="_blank">Public Alerts service</a> today.</p>
<p>This isn&#8217;t like the other <a href="http://www.google.com/alerts" target="_blank">Google Alerts</a> service which lets you enter a few search terms and have Google email you when new results are found (although this tool is also useful for alerting you for public safety).</p>
<p><a href="http://support.google.com/publicalerts/?hl=en" target="_blank">Google Public Alerts</a> is a tool based on <a href="http://maps.google.ca/" target="_blank">Google Maps</a> that shows relevant alerts from public safety agencies such as the <a href="http://www.noaa.gov/" target="_blank">NOAA </a>(for oceanographic information), the US <a href="http://weather.gov/" target="_blank">National Weather Service</a>, and the <a href="http://www.usgs.gov/" target="_blank">USGS </a>(for earthquakes) among others.</p>
<p>Unfortunately, most of the reporting agencies are US-based, which makes this tool only useful to a small fraction of the world&#8217;s population. On the plus side, it&#8217;s a good start, and it provides a way to integrate various public warning systems into an easy-to-use map.</p>
<p>The Mapping aspect is important because it will allow people to clearly see what alerts are relevant to them, where Twitter and other &#8220;systems&#8221; typically contain too much information, and it&#8217;s easy to miss the important stuff.</p>
<p>On the technical side, Google is using the <a href="http://en.wikipedia.org/wiki/Common_Alerting_Protocol" target="_blank">Common Alerting Protocol</a> (CAP), an international standard for publishing and sharing alerting data. I&#8217;ve had some experience using CAP while writing emergency management software. Seeing Google adopt CAP  is a good thing since it would be easy for them to develop their own system. Adopting a standard means that existing publishers will be able to integrate their data into the system, and it will encourage more agencies to adopt CAP. After all, a provider of a public alert should make the data as easy to consume and distribute as possible.</p>
<p>Any agencies who wish to provide alerting data to Google Public Alerts can contact them (see <a href="http://support.google.com/publicalerts/?hl=en#2366580" target="_blank">FAQ question 12</a>) if they already publish in CAP version 1.2.</p>
<br />Filed under: <a href='http://blog.bluetoque.ca/category/blog/'>Blog</a> Tagged: <a href='http://blog.bluetoque.ca/tag/alerting/'>alerting</a>, <a href='http://blog.bluetoque.ca/tag/cap/'>CAP</a>, <a href='http://blog.bluetoque.ca/tag/map/'>map</a>, <a href='http://blog.bluetoque.ca/tag/standards/'>standards</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bluetoquesoftware.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bluetoquesoftware.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bluetoquesoftware.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bluetoquesoftware.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bluetoquesoftware.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bluetoquesoftware.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bluetoquesoftware.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bluetoquesoftware.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bluetoquesoftware.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bluetoquesoftware.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bluetoquesoftware.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bluetoquesoftware.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bluetoquesoftware.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bluetoquesoftware.wordpress.com/437/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=437&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.bluetoque.ca/2012/01/25/google-public-alerts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e03f89ccce5557df34fef8a5d925a583?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">tsylos</media:title>
		</media:content>
	</item>
		<item>
		<title>Cohen-Sutherland Line Clipping in C#</title>
		<link>http://blog.bluetoque.ca/2012/01/06/cohen-sutherland-line-clipping/</link>
		<comments>http://blog.bluetoque.ca/2012/01/06/cohen-sutherland-line-clipping/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 00:22:59 +0000</pubDate>
		<dc:creator>Blue Toque</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[geometry]]></category>
		<category><![CDATA[Geospatial]]></category>

		<guid isPermaLink="false">http://bluetoquesoftware.wordpress.com/?p=415</guid>
		<description><![CDATA[While busy working on TrueNorth, I implemented this based on the the Wikipedia Article. The Extents class, and the PointDType are simple structures to contain the view window, and the double precision coordinates respectively. Filed under: Blog Tagged: c#, code, geometry, Geospatial<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=415&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>While busy working on <a href="http://www.TrueNorthGeospatial.com" target="_blank">TrueNorth</a>, I implemented this based on the the <a href="http://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm" target="_blank">Wikipedia Article</a>.<br />
The Extents class, and the PointDType are simple structures to contain the view window, and the double precision coordinates respectively.</p>
<p><pre class="brush: csharp;">
    /// &lt;summary&gt;
    /// The Cohen Sutherland line clipping algorithm
    /// http://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm
    /// &lt;/summary&gt;
    public class CohenSutherland
    {
        /// &lt;summary&gt;
        /// Bitfields used to partition the space into 9 regiond
        /// &lt;/summary&gt;
        private const byte INSIDE = 0; // 0000
        private const byte LEFT = 1;   // 0001
        private const byte RIGHT = 2;  // 0010
        private const byte BOTTOM = 4; // 0100
        private const byte TOP = 8;    // 1000


        /// &lt;summary&gt;
        /// Compute the bit code for a point (x, y) using the clip rectangle
        /// bounded diagonally by (xmin, ymin), and (xmax, ymax)
        /// ASSUME THAT xmax , xmin , ymax and ymin are global constants.
        /// &lt;/summary&gt;
        /// &lt;param name=&quot;x&quot;&gt;&lt;/param&gt;
        /// &lt;param name=&quot;y&quot;&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        private static byte ComputeOutCode(Extents extents, double x, double y)
        {
            // initialised as being inside of clip window
            byte code = INSIDE;

            if (x &lt; extents.Left)           // to the left of clip window
                code |= LEFT;
            else if (x &gt; extents.Right)     // to the right of clip window
                code |= RIGHT;
            if (y &lt; extents.Bottom)         // below the clip window
                code |= BOTTOM;
            else if (y &gt; extents.Top)       // above the clip window
                code |= TOP;

            return code;
        }

        /// &lt;summary&gt;
        /// Cohen–Sutherland clipping algorithm clips a line from
        /// P0 = (x0, y0) to P1 = (x1, y1) against a rectangle with 
        /// diagonal from (xmin, ymin) to (xmax, ymax).
        /// &lt;/summary&gt;
        /// &lt;param name=&quot;x0&quot;&gt;&lt;/param&gt;
        /// &lt;param name=&quot;y0&quot;&gt;&lt;/param&gt;
        /// &lt;param name=&quot;x1&quot;&gt;&lt;/param&gt;
        /// &lt;param name=&quot;y1&quot;&gt;&lt;/param&gt;
        /// &lt;returns&gt;a list of two points in the resulting clipped line, or zero&lt;/returns&gt;
        public static List&lt;PointDType&gt; CohenSutherlandLineClip(Extents extents, 
                               PointDType p0, PointDType p1)
        {
            double x0 = p0.X;
            double y0 = p0.Y;
            double x1 = p1.X;
            double y1 = p1.Y;

            // compute outcodes for P0, P1, and whatever point lies outside the clip rectangle
            byte outcode0 = CohenSutherland.ComputeOutCode(extents, x0, y0);
            byte outcode1 = CohenSutherland.ComputeOutCode(extents, x1, y1);
            bool accept = false;

            while (true)
            {
                // Bitwise OR is 0. Trivially accept and get out of loop
                if ((outcode0 | outcode1) == 0)
                {
                    accept = true;
                    break;
                }
                // Bitwise AND is not 0. Trivially reject and get out of loop
                else if ((outcode0 &amp; outcode1) != 0)
                {
                    break;
                }
                else
                {
                    // failed both tests, so calculate the line segment to clip
                    // from an outside point to an intersection with clip edge
                    double x, y;

                    // At least one endpoint is outside the clip rectangle; pick it.
                    byte outcodeOut = (outcode0 != 0) ? outcode0 : outcode1;

                    // Now find the intersection point;
                    // use formulas y = y0 + slope * (x - x0), x = x0 + (1 / slope) * (y - y0)
                    if ((outcodeOut &amp; TOP) != 0)
                    {   // point is above the clip rectangle
                        x = x0 + (x1 - x0) * (extents.Top - y0) / (y1 - y0);
                        y = extents.Top;
                    }
                    else if ((outcodeOut &amp; BOTTOM) != 0)
                    { // point is below the clip rectangle
                        x = x0 + (x1 - x0) * (extents.Bottom - y0) / (y1 - y0);
                        y = extents.Bottom;
                    }
                    else if ((outcodeOut &amp; RIGHT) != 0)
                    {  // point is to the right of clip rectangle
                        y = y0 + (y1 - y0) * (extents.Right - x0) / (x1 - x0);
                        x = extents.Right;
                    }
                    else if ((outcodeOut &amp; LEFT) != 0)
                    {   // point is to the left of clip rectangle
                        y = y0 + (y1 - y0) * (extents.Left - x0) / (x1 - x0);
                        x = extents.Left;
                    }
                    else
                    {
                        x = double.NaN;
                        y = double.NaN;
                    }

                    // Now we move outside point to intersection point to clip
                    // and get ready for next pass.
                    if (outcodeOut == outcode0)
                    {
                        x0 = x;
                        y0 = y;
                        outcode0 = CohenSutherland.ComputeOutCode(extents, x0, y0);
                    }
                    else
                    {
                        x1 = x;
                        y1 = y;
                        outcode1 = CohenSutherland.ComputeOutCode(extents, x1, y1);
                    }
                }
            }

            // return the clipped line
            return (accept) ?
                new List&lt;PointDType&gt;()
            {
                new PointDType(x0,y0), 
                new PointDType(x1, y1), 
            } : null;
           
        }
    }
</pre></p>
<br />Filed under: <a href='http://blog.bluetoque.ca/category/blog/'>Blog</a> Tagged: <a href='http://blog.bluetoque.ca/tag/c/'>c#</a>, <a href='http://blog.bluetoque.ca/tag/code/'>code</a>, <a href='http://blog.bluetoque.ca/tag/geometry/'>geometry</a>, <a href='http://blog.bluetoque.ca/tag/geospatial/'>Geospatial</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bluetoquesoftware.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bluetoquesoftware.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bluetoquesoftware.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bluetoquesoftware.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bluetoquesoftware.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bluetoquesoftware.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bluetoquesoftware.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bluetoquesoftware.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bluetoquesoftware.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bluetoquesoftware.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bluetoquesoftware.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bluetoquesoftware.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bluetoquesoftware.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bluetoquesoftware.wordpress.com/415/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=415&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.bluetoque.ca/2012/01/06/cohen-sutherland-line-clipping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e03f89ccce5557df34fef8a5d925a583?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">tsylos</media:title>
		</media:content>
	</item>
		<item>
		<title>Crowdsourced SAR</title>
		<link>http://blog.bluetoque.ca/2011/11/01/crowdsourced-sar/</link>
		<comments>http://blog.bluetoque.ca/2011/11/01/crowdsourced-sar/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 16:38:59 +0000</pubDate>
		<dc:creator>Blue Toque</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[crowdsourcing]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[SAR]]></category>
		<category><![CDATA[SARScene]]></category>

		<guid isPermaLink="false">http://blog.bluetoque.ca/?p=398</guid>
		<description><![CDATA[I just got back from SARScene 2011, and I&#8217;ve posted a page containing links to the presentation, supporting materials, all the videos from the search, and references. Feel free to contact me if you&#8217;re interested in anything about the presentation. The feedback I got from the SAR community was encouraging; there was some interest in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=398&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just got back from <a href="http://www.sarscene.ca/2011/index-e.html">SARScene 2011</a>, and I&#8217;ve posted <a href="http://blog.bluetoque.ca/crowdsourcedsar/">a page</a> containing links to <a href="http://www.oplopanax.ca/Downloads/Crowdsourced%20SAR.pdf">the presentation</a>, supporting materials, all the videos from the search, and references.</p>
<p>Feel free to <a href="http://blog.bluetoque.ca/contact/">contact me</a> if you&#8217;re interested in anything about the presentation.</p>
<p>The feedback I got from the SAR community was encouraging; there was some interest in this technique and it seems like it might be worth pursuing. A paper, and a possible proposal is forthcoming.</p>
<br />Filed under: <a href='http://blog.bluetoque.ca/category/blog/'>Blog</a> Tagged: <a href='http://blog.bluetoque.ca/tag/conference/'>conference</a>, <a href='http://blog.bluetoque.ca/tag/crowdsourcing/'>crowdsourcing</a>, <a href='http://blog.bluetoque.ca/tag/presentation/'>presentation</a>, <a href='http://blog.bluetoque.ca/tag/sar/'>SAR</a>, <a href='http://blog.bluetoque.ca/tag/sarscene/'>SARScene</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bluetoquesoftware.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bluetoquesoftware.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bluetoquesoftware.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bluetoquesoftware.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bluetoquesoftware.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bluetoquesoftware.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bluetoquesoftware.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bluetoquesoftware.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bluetoquesoftware.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bluetoquesoftware.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bluetoquesoftware.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bluetoquesoftware.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bluetoquesoftware.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bluetoquesoftware.wordpress.com/398/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=398&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.bluetoque.ca/2011/11/01/crowdsourced-sar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e03f89ccce5557df34fef8a5d925a583?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">tsylos</media:title>
		</media:content>
	</item>
		<item>
		<title>On Horrible Software</title>
		<link>http://blog.bluetoque.ca/2011/10/12/on-horrible-software/</link>
		<comments>http://blog.bluetoque.ca/2011/10/12/on-horrible-software/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 17:50:14 +0000</pubDate>
		<dc:creator>Blue Toque</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[bad code]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[morse code]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[Windows Service]]></category>

		<guid isPermaLink="false">http://blog.bluetoque.ca/?p=360</guid>
		<description><![CDATA[I was just reading The State of the Art is Terrible by Zack Morris, which is quite well written. I couldn&#8217;t have put it better. In his words It really, truly, is all crap. And it&#8217;s much worse than anybody realizes In my words, the entire software world from banking, to games, is held together with rubber [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=360&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was just reading <a href="http://zackarymorris.tumblr.com/post/10973087527/the-state-of-the-art-is-terrible" target="_blank">The State of the Art is Terrible</a> by Zack Morris, which is quite well written. I couldn&#8217;t have put it better. In his words</p>
<blockquote><p>It really, truly, is all crap. And it&#8217;s much worse than anybody realizes</p></blockquote>
<p>In my words, the entire software world from banking, to games, is held together with rubber bands and bailing wire. It&#8217;s beyond comprehension that software written so badly, on systems that are cobbled together from contracts with 20 different providers can get your money from your bank account into your hands at a bank machine. That we trust both hardware and software to fly airplanes, to control trains and traffic lights.</p>
<p>The more I know about the industry, the more I fear for my well being.</p>
<p>In the article he also mentions:</p>
<blockquote><p>&#8230;your web browser locked up on you because some novice programmer wrote some portion of it in blocking network code that is waiting for the last byte to arrive from the web server, and that the web server is sending that byte over and over again because a router is temporarily overloaded and is dropping packets like crazy&#8230;</p></blockquote>
<p>That made me remember a story about a server side application I worked on. I was working for a company that had some server software we were selling to police agencies all over the US. The lead programmer was a well known hack (I didn&#8217;t say hacker, just &#8220;hack&#8221; &#8212; he really wasn&#8217;t very good). A lot of his code was incomprehensible, and will be food for many stories for years to come.</p>
<p>A year or so after he left the company we began having an issue with the software. It ran as a <a class="zem_slink" title="Windows service" href="http://en.wikipedia.org/wiki/Windows_service" rel="wikipedia">Windows Service</a>, and every once in a while it would go into a &#8220;zombie state&#8221; where it would consume 100% of the CPU (or, in a <a href="http://en.wikipedia.org/wiki/Hyper-threading" target="_blank">hypterthreaded </a>or <a href="http://en.wikipedia.org/wiki/Multi-core_processor" target="_blank">multi-processor</a> system, 100% of one of the CPUs). Eventually this problem became so big that it was assigned to me, and I was told to use whatever resources I needed to get it fixed.</p>
<p>The problem was catching it in the act. It was hard to do, since it only seemed to happen at one of our client&#8217;s sites. Since we were working in the Justice and Public Safety area, they were justifiably reluctant for us to even access the live system, much less attach a debugger. We did get access, but the tools we could use were limited.</p>
<p>I had my suspicions however. The symptoms were clear: CPU consumption indicated that it was in a &#8220;<a href="http://en.wikipedia.org/wiki/Busy_waiting" target="_blank">spin wait</a>&#8221; cycle, and the fact that it stopped servicing requests indicated that it could be in the request-handling code. I started there, just reading the code and sniffing for the &#8220;bad smell&#8221; &#8212; the sense that a software engineer gets after a while when they read code that&#8217;s just wrong.</p>
<p>I also suspected that, since it only happened on the client&#8217;s site, it had something to do with their network configuration. Since they were a secure site, I surmised that they would be using some active network monitoring and <a href="http://en.wikipedia.org/wiki/Intrusion_detection_system" target="_blank">intrusion detection</a>. This kind of software is known for sending &#8220;probe packets&#8221; to sense what kind of services are active on the network &#8212; when it detects a change it alerts an operator so they can track down the new service and figure out if it&#8217;s legit or not.</p>
<p>Putting these two things together I started running little experiments. I treated the service as a &#8220;black box&#8221; and just wrote some software to send it some bad requests. I knew that it implemented a very limited HTTP server &#8212; but kind of brain-dead in that it didn&#8217;t attempt to confirm to the standard very well. Knowing this, I sent requests with bad data in them, and some that were incorrectly formatted.</p>
<p>Finally, after a week of solid work on this task, I killed the server. I wrote a little program that sent a specially formatted <a class="zem_slink" title="Hypertext Transfer Protocol" href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol" rel="wikipedia">HTTP request</a> that caused the service to go into the zombie state. With this in place, I attached the debugger to the service and watched what was happening.</p>
<p>It was the service handling code, as suspected. As I read it, I had a sense that it was different from most of the other code in the application. Programmers have coding styles just the same as an author has a writing style, or a <a href="http://en.wikipedia.org/wiki/Morse_code" target="_blank">morse code</a> operator used to have a &#8220;<a title="Morse Code &quot;fists&quot; from Malcolm Gladwell's &quot;Blink&quot;" href="http://contemporarylit.about.com/od/firstchapters/a/blinkExcerpt_5.htm" target="_blank">fist</a>&#8220;, and this code did not look like it had been written by our illustrious hack, but by a different, even less experienced one.</p>
<p>It turned out that the server thread was reading the <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html" target="_blank">HTTP request length</a>, and waiting in a &#8220;for&#8221; loop for the next byte. If you sent a request and &#8220;lied&#8221; about how many bytes were in the body of the request (said there were more than there actually were), the for loop would wait forever trying to read the last bytes. Rather than using a wait, the loop did continuous reads, and counted how many bytes had been read. If no more bytes were ever written to that port, the loop would continue forever, using CPU. Since the code was single threaded at this point, no other request could be serviced.</p>
<p>I finally figured out that the code had been copied verbatim from a <a href="http://www.codeproject.com/" target="_blank">Code Project</a> article from the days of <a class="zem_slink" title=".NET Framework" href="http://msdn.microsoft.com/netframework" rel="homepage">.NET</a> 1.1.</p>
<p>This shortcut cost the company about $15,000 for the months of effort it took to isolate, reproduce and fix the code.</p>
<p>I never found what it was about the client&#8217;s site that was causing the trouble. I still suspect the network intrusion software, and I also suspect that the software was sending bad requests because it probably has some similarly bad code in it that is lying about the request length.</p>
<br />Filed under: <a href='http://blog.bluetoque.ca/category/blog/'>Blog</a> Tagged: <a href='http://blog.bluetoque.ca/tag/bad-code/'>bad code</a>, <a href='http://blog.bluetoque.ca/tag/code/'>code</a>, <a href='http://blog.bluetoque.ca/tag/debugging/'>debugging</a>, <a href='http://blog.bluetoque.ca/tag/http/'>HTTP</a>, <a href='http://blog.bluetoque.ca/tag/morse-code/'>morse code</a>, <a href='http://blog.bluetoque.ca/tag/programming/'>programming</a>, <a href='http://blog.bluetoque.ca/tag/server/'>server</a>, <a href='http://blog.bluetoque.ca/tag/windows-service/'>Windows Service</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bluetoquesoftware.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bluetoquesoftware.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bluetoquesoftware.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bluetoquesoftware.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bluetoquesoftware.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bluetoquesoftware.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bluetoquesoftware.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bluetoquesoftware.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bluetoquesoftware.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bluetoquesoftware.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bluetoquesoftware.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bluetoquesoftware.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bluetoquesoftware.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bluetoquesoftware.wordpress.com/360/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=360&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.bluetoque.ca/2011/10/12/on-horrible-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e03f89ccce5557df34fef8a5d925a583?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">tsylos</media:title>
		</media:content>
	</item>
		<item>
		<title>Why I don&#8217;t write &#8220;apps&#8221;</title>
		<link>http://blog.bluetoque.ca/2011/09/19/why-i-dont-write-apps/</link>
		<comments>http://blog.bluetoque.ca/2011/09/19/why-i-dont-write-apps/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 04:11:13 +0000</pubDate>
		<dc:creator>Blue Toque</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[opinion]]></category>
		<category><![CDATA[philosophy]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://blog.bluetoque.ca/?p=236</guid>
		<description><![CDATA[What is an &#8220;app?&#8221; Is it a useful tool, or a toy? Is it a piece of software carefully designed to fulfill a purpose, or is it just a bit of code that is part of a larger marketing and branding ploy? Is it necessary, bringing something unique to the world, or is it just [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=236&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>What is an &#8220;app?&#8221; Is it a useful tool, or a toy? Is it a piece of software carefully designed to fulfill a purpose, or is it just a bit of code that is part of a larger marketing and branding ploy? Is it necessary, bringing something unique to the world, or is it just another RSS reader designed to tie you to a single source of news and opinion.</p>
<p>I don&#8217;t write &#8220;apps&#8221;.</p>
<p>Now don&#8217;t get me wrong, there is software out there that is useful, inventive, fun, and damn near necessary for daily life, but I don&#8217;t call those &#8220;apps.&#8221; This is <em>software</em>, and it is designed by software engineers and architects like myself. They are carefully coded, creative expressions of a programmers life of learning and exercise of their chosen trade &#8212; designing and building software. They take effort and skill. They deserve a name to fit. They are not &#8220;apps.&#8221;</p>
<p>I know some will quibble that an &#8220;app&#8221; is only a name, and that it&#8217;s the thing that has made mobile applications accessible to millions on their smart devices. But note also that the huge majority of those &#8220;apps&#8221; are, as I described above, derivative, thinly disguised web pages that are only available to place the company&#8217;s branding on your phone. I do not include them in my list of ground breaking or even slightly useful software; perhaps they deserve the diminutive name, for they are the result of small thinking &#8212; remixes of already known software, reused code often given away for free in return for the rent on your valuable eyeballs.</p>
<p>Some will also say that there&#8217;s no doubt that I&#8217;ve written software like this in the past. I might have, but only because my employment contract has almost always included a &#8220;morality&#8221; clause that states I can&#8217;t refuse work because of an ethical or moral reason (did you know most employment contracts with public companies have this clause? Explains a lot, doesn&#8217;t it?) I&#8217;m not proud of them.</p>
<p>I&#8217;ve written animation software used by dancers and choreographers. I&#8217;ve written video games that eleven to seventeen year old boys would play for 10 hours and then never play again. I&#8217;ve built facial recognition software used to catch criminals and pedophiles. I&#8217;ve written emergency management software designed to help save lives. These things I am proud of. These things are not &#8220;apps&#8221;</p>
<br />Filed under: <a href='http://blog.bluetoque.ca/category/blog/'>Blog</a> Tagged: <a href='http://blog.bluetoque.ca/tag/opinion/'>opinion</a>, <a href='http://blog.bluetoque.ca/tag/philosophy/'>philosophy</a>, <a href='http://blog.bluetoque.ca/tag/rant/'>rant</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bluetoquesoftware.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bluetoquesoftware.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bluetoquesoftware.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bluetoquesoftware.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bluetoquesoftware.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bluetoquesoftware.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bluetoquesoftware.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bluetoquesoftware.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bluetoquesoftware.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bluetoquesoftware.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bluetoquesoftware.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bluetoquesoftware.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bluetoquesoftware.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bluetoquesoftware.wordpress.com/236/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=236&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.bluetoque.ca/2011/09/19/why-i-dont-write-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e03f89ccce5557df34fef8a5d925a583?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">tsylos</media:title>
		</media:content>
	</item>
		<item>
		<title>Serializable base class added to XSDToClasses project</title>
		<link>http://blog.bluetoque.ca/2011/09/05/bluetoque-serializable/</link>
		<comments>http://blog.bluetoque.ca/2011/09/05/bluetoque-serializable/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 00:20:40 +0000</pubDate>
		<dc:creator>Blue Toque</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[XSD]]></category>
		<category><![CDATA[XsdToClasses]]></category>

		<guid isPermaLink="false">http://blog.bluetoque.ca/?p=171</guid>
		<description><![CDATA[At the prompting (or complaint) of a reader, I&#8217;ve shared a base class that I use with my code generator. The generated code is &#8220;pure&#8221; in that it doesn&#8217;t contain any methods that don&#8217;t have to do with the data &#8212; it doesn&#8217;t implement saving and loading methods. I could create a codemodifier for this, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=171&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>At the prompting (or complaint) of a reader, I&#8217;ve shared a base class that I use with my code generator.</p>
<p>The generated code is &#8220;pure&#8221; in that it doesn&#8217;t contain any methods that don&#8217;t have to do with the data &#8212; it doesn&#8217;t implement saving and loading methods. I could create a codemodifier for this, but it could just cause trouble. However, this leaves users writing the saving and loading code over and over, and we can&#8217;t have that.</p>
<p>An XSD can express inheritance. Generating save and load methods for every class would cause lots of warnings and duplicated code. So I&#8217;ve created a generic base class that contains a bunch of utility methods including the save and load methods. If you want to have these in a class, just inherit the partial class from this base class and you&#8217;re ready to go.</p>
<p>There is an example project that shows you how to use it. There&#8217;s also a nifty serializable color class. It&#8217;s not going to work in every circumstance (for example if  your class is already inheriting), but it should reduce the amount of code you need to write.</p>
<p>You can find the download at google code  <a href="http://code.google.com/p/xsd-to-classes/downloads/detail?name=BlueToque.Serializable.zip#makechanges" target="_blank">here</a>.</p>
<br />Filed under: <a href='http://blog.bluetoque.ca/category/blog/'>Blog</a> Tagged: <a href='http://blog.bluetoque.ca/tag/net/'>.NET</a>, <a href='http://blog.bluetoque.ca/tag/c/'>c#</a>, <a href='http://blog.bluetoque.ca/tag/code/'>code</a>, <a href='http://blog.bluetoque.ca/tag/xsd/'>XSD</a>, <a href='http://blog.bluetoque.ca/tag/xsdtoclasses/'>XsdToClasses</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bluetoquesoftware.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bluetoquesoftware.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bluetoquesoftware.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bluetoquesoftware.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bluetoquesoftware.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bluetoquesoftware.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bluetoquesoftware.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bluetoquesoftware.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bluetoquesoftware.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bluetoquesoftware.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bluetoquesoftware.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bluetoquesoftware.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bluetoquesoftware.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bluetoquesoftware.wordpress.com/171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=171&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.bluetoque.ca/2011/09/05/bluetoque-serializable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e03f89ccce5557df34fef8a5d925a583?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">tsylos</media:title>
		</media:content>
	</item>
		<item>
		<title>Comparing performance of GDAL and Proj.NET</title>
		<link>http://blog.bluetoque.ca/2011/01/31/comparing-performance-of-gdal-and-proj-net/</link>
		<comments>http://blog.bluetoque.ca/2011/01/31/comparing-performance-of-gdal-and-proj-net/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 07:25:16 +0000</pubDate>
		<dc:creator>Blue Toque</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[GDAL]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[pinvoke]]></category>
		<category><![CDATA[Proj.NET]]></category>

		<guid isPermaLink="false">https://www.bluetoque.ca/uncategorized/2011/01/comparing-performance-of-gdal-and-proj-net/</guid>
		<description><![CDATA[There are two major free/open source projection libraries available for use under .NET: GDAL and Proj.NET. GDAL has a long history, and is written in C++, so it’s compiled to machine code. The C# bindings are generated by a tool. Calling C++ from C# uses a process called “pinvoke” (Platform Invoke), and a certain amount [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=103&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There are two major free/open source projection libraries available for use under .NET: <a href="http://www.gdal.org/" target="_blank">GDAL</a> and <a href="http://projnet.codeplex.com/" target="_blank">Proj.NET</a>.</p>
<p>GDAL has a long history, and is written in C++, so it’s compiled to <a href="http://en.wikipedia.org/wiki/Machine_code" target="_blank">machine code</a>. The <a href="http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp" target="_blank">C# bindings</a> are generated by a <a href="http://www.swig.org/" target="_blank">tool</a>. Calling C++ from C# uses a process called “<a href="http://msdn.microsoft.com/en-us/library/aa446536.aspx" target="_blank">pinvoke</a>” (Platform Invoke), and a <a href="http://msdn.microsoft.com/en-us/library/ms235282.aspx" target="_blank">certain amount of overhead</a> is involved (between 10 and 30 instructions per call).</p>
<p>Proj.NET is written entirely in <a href="http://en.wikipedia.org/wiki/Managed_code" target="_blank">managed code</a>, so there is almost no overhead per call. It’s a much younger project, but has an active development community.</p>
<p>We are interested in comparing the performance of these two projection libraries since my application needs to do spatial transforms, so I did the following experiment.</p>
<h2>Preliminaries</h2>
<ul>
<li>I wrote a wrapper library in C# with appropriate interfaces that could call both Proj.NET, GDAL, and some of my own hand-rolled projection classes</li>
<li>I downloaded free topographic data for Canada from <a href="http://www.geogratis.cgdi.gc.ca/" target="_blank">GeoGratis</a> and <a href="http://www.geobase.ca/" target="_blank">GeoBase</a>.
<ul>
<li>The data consists of 20 meter contours, roads, lakes, rivers, cities and other basic geographic features for all of Canada.</li>
<li>Each file has a variable number of points, lines and polygons of various sizes</li>
</ul>
</li>
<li>The data is in the Geographic projection, or <a href="http://spatialreference.org/ref/epsg/4326/" target="_blank">EPSG:4326</a>. For display I projected it into <a href="http://spatialreference.org/ref/sr-org/6864/" target="_blank">EPSG:3857</a></li>
<li>I wrote a C# program to load and convert a subset of 166 files containing 6.8 million items and 211 million points
<ul>
<li>each file contained between a few hundred to 4.2 million items
<ul>
<li>mean number of points: 1.2 million per file</li>
<li>mean number of items: 41,000 per file</li>
</ul>
</li>
<li>we did the timing on a per-file basis
<ul>
<li>time-per-item derived as an average on a per-file basis</li>
</ul>
</li>
<li>we started the timer just before projection started, and stopped after it ended
<ul>
<li>file load times were not included</li>
</ul>
</li>
<li>This gives us a time/item value for each file
<ul>
<li>mean time/file was 6.7 seconds</li>
</ul>
</li>
</ul>
</li>
<li>We use the <a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx" target="_blank">System.Diagnostics.Stopwatch</a> class to do the timing.
<ul>
<li>the resolution of the timer is in the ticks or milliseconds range,</li>
<li>projections took from 1000 to 6000 milliseconds</li>
</ul>
</li>
</ul>
<p>The data represents a real-world problem, that of projecting a file in one SRS (<a href="http://en.wikipedia.org/wiki/Spatial_referencing_system" target="_blank">spatial reference system</a>) to another. The number items in each file, the type of item, their <a href="http://en.wikipedia.org/wiki/Spatial_variability" target="_blank">spatial variability</a>, and the number of points per item all are from a real-world map.</p>
<p>For the GDAL library, we loaded all the points for a single item into an array, and marshalled for pinvoke. When executing a platform invoke, it’s obviously better to have <a href="http://blogs.msdn.com/b/brada/archive/2003/07/11/50135.aspx" target="_blank">fewer calls with more marshalled data</a>, but I exerted no special effort to optimize this. We called the projection function on a per-item basis, so if an item has one or 1 million points, it would be a single function call. The same is true of the Proj.NET library.</p>
<h2>Results</h2>
<p><img class="aligncenter size-full wp-image-353" title="chart_5" src="http://bluetoquesoftware.files.wordpress.com/2011/10/chart_5.png?w=630" alt=""   /></p>
<p>This graph isn&#8217;t too surprising. GDAL has overall better performance, as a numerically intensive, but machine-coded library should. At first glance  it may seem that the difference in performance is greater with a larger number of points, but the above is an absolute difference.</p>
<p><img class="aligncenter size-full wp-image-354" title="chart_6-1" src="http://bluetoquesoftware.files.wordpress.com/2011/10/chart_6-1.png?w=630" alt=""   /></p>
<p>This chart compares the ratio of the difference in time between Proj.NET and GDAL. When expressed this way you can see that GDAL’s performance is variable, but always better (positive). In fact, the mean performance increase is 20.9%</p>
<p><img class="aligncenter size-full wp-image-355" title="chart_7-1" src="http://bluetoquesoftware.files.wordpress.com/2011/10/chart_7-1.png?w=630" alt=""   /></p>
<p>I suspect that the variability in performance for smaller number of points is attributable to the number of points per item. As I mentioned in the intro, the points are batched for projection per item. When charted there appears to be more variability for items with from 15 to 25 points. Above this number, the % difference in speed between GDAL and Proj.NET appear so be fairly stable. I am not too interested in the cause of the variability since it is all positive (faster) with some projections happening almost twice as fast as with Proj.NET</p>
<h2>Conclusion</h2>
<p>The performance of GDAL and Proj.NET was tested against a real world data set. We projected 166 files with 6 million items and a total of 211 million points. We compared the time to project points on a per-item basis. The comparison shows that GDAL is consistently about 20% faster than Proj.NET, with some projections being much faster for items that have between 15 to 25 points per item.</p>
<h3>More info:</h3>
<p>The entire data set and all charts are available <a href="https://spreadsheets.google.com/ccc?key=0ArB8VqhMDpQldGxIMmk0R0hQTlpvQ0l1VlM2WlNkR3c&amp;hl=en&amp;authkey=CJT1uqgK" target="_blank">here</a>.</p>
<br />Filed under: <a href='http://blog.bluetoque.ca/category/articles/'>Articles</a>, <a href='http://blog.bluetoque.ca/category/blog/'>Blog</a> Tagged: <a href='http://blog.bluetoque.ca/tag/net/'>.NET</a>, <a href='http://blog.bluetoque.ca/tag/net-framework/'>.NET Framework</a>, <a href='http://blog.bluetoque.ca/tag/c/'>c#</a>, <a href='http://blog.bluetoque.ca/tag/gdal/'>GDAL</a>, <a href='http://blog.bluetoque.ca/tag/performance/'>performance</a>, <a href='http://blog.bluetoque.ca/tag/pinvoke/'>pinvoke</a>, <a href='http://blog.bluetoque.ca/tag/proj-net/'>Proj.NET</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bluetoquesoftware.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bluetoquesoftware.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bluetoquesoftware.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bluetoquesoftware.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bluetoquesoftware.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bluetoquesoftware.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bluetoquesoftware.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bluetoquesoftware.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bluetoquesoftware.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bluetoquesoftware.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bluetoquesoftware.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bluetoquesoftware.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bluetoquesoftware.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bluetoquesoftware.wordpress.com/103/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=103&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.bluetoque.ca/2011/01/31/comparing-performance-of-gdal-and-proj-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e03f89ccce5557df34fef8a5d925a583?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">tsylos</media:title>
		</media:content>

		<media:content url="http://bluetoquesoftware.files.wordpress.com/2011/10/chart_5.png" medium="image">
			<media:title type="html">chart_5</media:title>
		</media:content>

		<media:content url="http://bluetoquesoftware.files.wordpress.com/2011/10/chart_6-1.png" medium="image">
			<media:title type="html">chart_6-1</media:title>
		</media:content>

		<media:content url="http://bluetoquesoftware.files.wordpress.com/2011/10/chart_7-1.png" medium="image">
			<media:title type="html">chart_7-1</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing an MVC Application in a subdirectory of WordPress</title>
		<link>http://blog.bluetoque.ca/2010/12/27/installing-an-mvc-application-in-a-subdirectory-of-wordpress/</link>
		<comments>http://blog.bluetoque.ca/2010/12/27/installing-an-mvc-application-in-a-subdirectory-of-wordpress/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 07:19:16 +0000</pubDate>
		<dc:creator>Blue Toque</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">https://www.bluetoque.ca/?p=77</guid>
		<description><![CDATA[For several reasons I have WordPress installed in the root directory of my hosted web space. I’ve been experimenting with the new ASP.NET MVC framework, Entity Framework 4, SQL Server Compact Edition 4 and other new technologies, and I wanted to do a test deployment. I was quite surprised when, after deploying to a subdirectory [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=77&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For several reasons I have <a href="http://wordpress.org/" target="_blank">WordPress</a> installed in the root directory of my hosted web space. I’ve been experimenting with the new <a href="http://www.asp.net/mvc" target="_blank">ASP.NET MVC</a> framework, <a href="http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework" target="_blank">Entity Framework 4</a>, <a href="http://en.wikipedia.org/wiki/SQL_Server_Compact" target="_blank">SQL Server Compact Edition 4</a> and other new technologies, and I wanted to do a test deployment. I was quite surprised when, after deploying to a subdirectory of my web site I could not bring up the page; WordPress was attempting to handle the request even though the path was clearly to the subdirectory.</p>
<p>The culprit: WordPress’s  pretty <a href="http://en.wikipedia.org/wiki/Permalink" target="_blank">permalinks</a> feature. I’ve ranted in the past about how there is a fetish for URLs, and how so much effort, for better or for worse, is given toward making them more human readable. In the case of a WordPress install on an <a href="http://www.iis.net/" target="_blank">IIS7</a> Windows server, the permalink feature is achieved using the <a href="http://www.iis.net/download/urlrewrite" target="_blank">Url Rewrite Module, version 2</a>.</p>
<p>The module is configured using the <a href="http://en.wikipedia.org/wiki/Web.config" target="_blank">web.config</a> file, and the configuration block for the Url Rewrite engine looks like this:</p>
<p><pre class="brush: xml; light: true;">
&lt;system.webServer&gt;
  &lt;rewrite&gt;
    &lt;rules&gt;
      &lt;rule name=&quot;wordpress&quot; patternSyntax=&quot;Wildcard&quot;&gt;
        &lt;match url=&quot;*&quot;/&gt;
        &lt;conditions&gt;
          &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsFile&quot; negate=&quot;true&quot;/&gt;
          &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsDirectory&quot; negate=&quot;true&quot;/&gt;
        &lt;/conditions&gt;
        &lt;action type=&quot;Rewrite&quot; url=&quot;index.php&quot;/&gt;
      &lt;/rule&gt;
    &lt;/rules&gt;
  &lt;/rewrite&gt;
&lt;/system.webServer&gt;
</pre></p>
<p>The rewrite rule tells IIS7 to intercept all requests of a certain form and route them to index.php. This is not what I want, I would like requests that ask for a directory that actually exists to go to that directory. In fact, I don&#8217;t know how to do this, nor do I have the time to learn the complex syntax of the Url Rewrite engine. However, using the examples given in several places on the web I figured out how to tell the Rewrite engine to direct certain requests to the proper directories.</p>
<p>The solution: add the following rule before the WordPress rule (shown above)</p>
<p><pre class="brush: xml; highlight: [4]; light: true;">
&lt;system.webServer&gt;
  &lt;rewrite&gt;
    &lt;rules&gt;
      &lt;rule name=&quot;new_directory&quot; stopProcessing=&quot;true&quot;&gt;
        &lt;match url=&quot;new_directory&quot; /&gt;
      &lt;/rule&gt;
      &lt;rule name=&quot;wordpress&quot; patternSyntax=&quot;Wildcard&quot;&gt;
        &lt;match url=&quot;*&quot;/&gt;
        &lt;conditions&gt;
          &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsFile&quot; negate=&quot;true&quot;/&gt;
          &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsDirectory&quot; negate=&quot;true&quot;/&gt;
        &lt;/conditions&gt;
        &lt;action type=&quot;Rewrite&quot; url=&quot;index.php&quot;/&gt;
      &lt;/rule&gt;
    &lt;/rules&gt;
  &lt;/rewrite&gt;
&lt;/system.webServer&gt;
</pre></p>
<p>This rule tells the rewrite engine to take requests for &#8220;new_directory&#8221; and ignore them completely &#8211; it stops processing the rules once this rule is matched, and allows the request to be handled by the code in the subdirectory. There were a few other tweaks that I had to do that were specific to my web host; it you&#8217;re interested, comment below and I&#8217;ll provide the details.</p>
<br />Filed under: <a href='http://blog.bluetoque.ca/category/blog/'>Blog</a> Tagged: <a href='http://blog.bluetoque.ca/tag/net/'>.NET</a>, <a href='http://blog.bluetoque.ca/tag/asp-net/'>ASP.NET</a>, <a href='http://blog.bluetoque.ca/tag/c/'>c#</a>, <a href='http://blog.bluetoque.ca/tag/mvc/'>MVC</a>, <a href='http://blog.bluetoque.ca/tag/web/'>Web</a>, <a href='http://blog.bluetoque.ca/tag/wordpress/'>WordPress</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bluetoquesoftware.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bluetoquesoftware.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bluetoquesoftware.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bluetoquesoftware.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bluetoquesoftware.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bluetoquesoftware.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bluetoquesoftware.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bluetoquesoftware.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bluetoquesoftware.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bluetoquesoftware.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bluetoquesoftware.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bluetoquesoftware.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bluetoquesoftware.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bluetoquesoftware.wordpress.com/77/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=77&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.bluetoque.ca/2010/12/27/installing-an-mvc-application-in-a-subdirectory-of-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e03f89ccce5557df34fef8a5d925a583?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">tsylos</media:title>
		</media:content>
	</item>
		<item>
		<title>XsdToClasses Open Sourced</title>
		<link>http://blog.bluetoque.ca/2010/12/26/xsdtoclasses-open-sourced/</link>
		<comments>http://blog.bluetoque.ca/2010/12/26/xsdtoclasses-open-sourced/#comments</comments>
		<pubDate>Mon, 27 Dec 2010 03:28:56 +0000</pubDate>
		<dc:creator>Blue Toque</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[VisualStudio]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XSD]]></category>
		<category><![CDATA[XsdToClasses]]></category>

		<guid isPermaLink="false">http://www.bluetoque.ca/?p=69</guid>
		<description><![CDATA[XsdToClasses is open source<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=69&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.bluetoque.ca/products/xsdtoclasses/">XsdToClasses</a> tools, which I&#8217;ve been using for most of my software development for many years, has been published as open source at <a href="http://code.google.com/p/xsd-to-classes/" target="_blank">Google Code</a>. The license is the <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GPL V3</a>; note that since the XsdToClasses tool is a code generator, the tool itself is GPL, but the code it generates is most definitely not; the output from the program can be under any license you like.</p>
<p>I use this tool so much, and it has saved me many hours of development time over many years. May it serve you well also.</p>
<br />Filed under: <a href='http://blog.bluetoque.ca/category/blog/'>Blog</a> Tagged: <a href='http://blog.bluetoque.ca/tag/net/'>.NET</a>, <a href='http://blog.bluetoque.ca/tag/c/'>c#</a>, <a href='http://blog.bluetoque.ca/tag/open-source/'>open source</a>, <a href='http://blog.bluetoque.ca/tag/visualstudio/'>VisualStudio</a>, <a href='http://blog.bluetoque.ca/tag/xml/'>XML</a>, <a href='http://blog.bluetoque.ca/tag/xsd/'>XSD</a>, <a href='http://blog.bluetoque.ca/tag/xsdtoclasses/'>XsdToClasses</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bluetoquesoftware.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bluetoquesoftware.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bluetoquesoftware.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bluetoquesoftware.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bluetoquesoftware.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bluetoquesoftware.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bluetoquesoftware.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bluetoquesoftware.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bluetoquesoftware.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bluetoquesoftware.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bluetoquesoftware.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bluetoquesoftware.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bluetoquesoftware.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bluetoquesoftware.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.bluetoque.ca&#038;blog=18335232&#038;post=69&#038;subd=bluetoquesoftware&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.bluetoque.ca/2010/12/26/xsdtoclasses-open-sourced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e03f89ccce5557df34fef8a5d925a583?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">tsylos</media:title>
		</media:content>
	</item>
	</channel>
</rss>
