<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Ramblings about Geo-geekery and Entrepreneurship</description><title>Geo-preneur</title><generator>Tumblr (3.0; @rburhum)</generator><link>http://blog.burhum.com/</link><item><title>The OGC is Stuck in 1999</title><description>&lt;p&gt;All these new OGC standards are sadly designed like it is still 1999.&lt;/p&gt;

&lt;p&gt;If you don’t like ramblings, then here is the TL;DR for you:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TL;DR OGC Standards should be written for the &lt;em&gt;future&lt;/em&gt;, not the present nor the past&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I have to get something out of my chest. Yes, it is triggered by the &lt;a href="http://lists.osgeo.org/pipermail/discuss/2013-May/"&gt;current discussions&lt;/a&gt; about accepting &lt;a href="http://www.esri.com/industries/landing-pages/geoservices/geoservices"&gt;GeoServices REST API&lt;/a&gt; as an OGC standard.&lt;/p&gt;

&lt;p&gt;The current focus of the discussion, at the core, is around the issue that the GeoServices REST API is perceived as a set of competing standards (i.e &lt;em&gt;redundant&lt;/em&gt; to the WFS/WMS/WCS/etc specs) that  don’t have an open (read &lt;em&gt;open source&lt;/em&gt;) reference implementation that any organization can refer to when trying to implement the standard.&lt;/p&gt;

&lt;p&gt;To me, this discussion is more about politics (which I do agree is a valid topic to discuss) than about the reality of the standards that do come out of the OGC lately.&lt;/p&gt;

&lt;p&gt;Reading any of the documents from the OGC make me feel like I am listening to Prince (before!) 1999.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/c6IZecaMttM" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;Seriously.&lt;/p&gt;

&lt;h3&gt;Standards should be written for the future – not the present&lt;/h3&gt;

&lt;p&gt;I remember several years back when HTML5 was the hot new thing. The standards were being worked on a lot, but most of the browsers did not support any of the features from HTML5. The table at &lt;a href="http://www.caniuse.com"&gt;caniuse.com&lt;/a&gt; (a place where you could go to see what HTML5 features were implemented by what browsers) were mostly red (i.e. not implemented).&lt;/p&gt;

&lt;p&gt;Fast forward four years into the future, most of it is green. That is because those standards became adopted and the functionality that it brought to life makes everyone’s life better.&lt;/p&gt;

&lt;p&gt;Designed in the past, adopted in the future. The way it should be.&lt;/p&gt;

&lt;p&gt;Contrast this with the current set of standards that we have “up for comment” from the OGC right now…&lt;/p&gt;

&lt;p&gt;Before you think that I am against the OGC, let me tell you that you could not be further from the truth. In most presentations that I have given in the last 6 years (at &lt;a href="http://en.oreilly.com/mysql2011/public/schedule/detail/17529"&gt;several conferences&lt;/a&gt;, &lt;a href="http://gif.berkeley.edu/gisday2011.html"&gt;some keynotes&lt;/a&gt;, and even &lt;a href="http://www.meetup.com/geomeetup/"&gt;my own GeoMeetups&lt;/a&gt; ) I have always dedicated slides and time to convince/teach people about the OGC and the importance of standards.&lt;/p&gt;

&lt;p&gt;Yet, although I have several friends that do work in these standard bodies (I love you guys – you know who you are!), it still feels that there is an unnecessary amount of bureaucracy at the OGC that is truly killing innovation.&lt;/p&gt;

&lt;p&gt;OGC is making “standards” that are outdated, unnecessarily overly-complicated, reference implementations that cannot be used as a reference (read below!), and a whole bunch of protocols that resemble what a protocol would have looked like in 1999. They completely ignore what we have learned in the last decade.&lt;/p&gt;

&lt;p&gt;Let me give you some real examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- WFS, XML Datastores and queries:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;XML Datastores were all the academic hype back in the day. Yet they never took off (with reason). The &lt;a href="http://www.opengeospatial.org/standards/filter"&gt;query language used by OGC (which is another OGC standard)&lt;/a&gt; assumes the underlying data store &lt;em&gt;is&lt;/em&gt; XML. For those of you not familiar with what this actually means, it is more than a representation of something as text. It assumes you have an &lt;a href="http://stackoverflow.com/a/839260/97995"&gt;XML Infoset&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At the core, the OGC spec for Filters is just an attempt to represent SQL as something equivalent to an &lt;a href="http://www.w3schools.com/xpath/xpath_syntax.asp"&gt;XPath expression&lt;/a&gt; to be used on the web (?!?).&lt;/p&gt;

&lt;p&gt;Anybody that has ever tried implementing WFS will understand what this means. Basically, several months of development, to create a parser that grabs an xml document and turns it back into SQL. But to do it correctly, you don’t have to generate &lt;em&gt;one&lt;/em&gt; SQL statement, but several ones. Why? Because the query language is so expressive, than in reality you should be able to create expressions that span multiple underlying tables (it assumes it is an XML Datastore after all) which basically makes you just really sad and go home depressed because it is unnecessarily complex.&lt;/p&gt;

&lt;p&gt;I have an idea, why, instead of writing a client application that transforms my query into OGC filter speak, goes through a middleware that grabs the OGC filter speak and turns it back into SQL which then goes to my underlying database - &lt;em&gt;instead&lt;/em&gt; - do I just not have one method (ExecuteSQL) and be done with it. Use SQL. Let&amp;#8217;s just not reinvent a SQL. The &lt;a href="http://developers.cartodb.com/documentation/cartodb-apis.html"&gt;CartoDB guys seem to have this right in their API &lt;/a&gt;. One tiny little api, you pass a string&amp;#8230; it does a lot! You know how long it takes to implement something like this? &lt;em&gt;Hours&lt;/em&gt;, not &lt;em&gt;months&lt;/em&gt;. And you actually have more power than what is expressed by the OGC equivalent. Problem solved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- XML/GML as a transport mechanism:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the mechanism of transport of choice for OGC standards. I have a &lt;a href="http://gis.stackexchange.com/a/15947/1965"&gt;two year old post about why I think this is far from ideal&lt;/a&gt;. Although there are some updates to be made to that answer, at the core, it still remains valid. If somebody tells you that the answer is to ‘gzip’ GML, then, they are wrong (a topic for a future post).&lt;/p&gt;

&lt;p&gt;I am still baffled as to why do none of the standards, yet, refer to things like &lt;a href="https://developers.google.com/protocol-buffers/docs/overview"&gt;Protobuffers&lt;/a&gt;, &lt;a href="http://msgpack.org/"&gt;MessagePack&lt;/a&gt;, &lt;a href="http://www.slideshare.net/IgorAnishchenko/pb-vs-thrift-vs-avro"&gt;Thrift, Avro&lt;/a&gt; - gosh - &lt;em&gt;anything&lt;/em&gt; that we have learned to do better in the past decade!&lt;/p&gt;

&lt;p&gt;Switching to any of these, or including them as serialization options would make all the implementations of these standards better/faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- “Reference Implementations” that cannot be referenced&lt;/strong&gt;
It is true that a “reference implementation” should be able to be, well, &lt;em&gt;referenced&lt;/em&gt;. I cannot currently look at how the GeoServices REST reference implementation (I guess ArcGIS Server) is implemented internally, thus, the specification fails at having a valid reference implementation.&lt;/p&gt;

&lt;p&gt;Does that mean that for a reference implementation to be useful it needs to be Open Source?&lt;/p&gt;

&lt;p&gt;Maybe that is not enough.&lt;/p&gt;

&lt;p&gt;Some people would argue that the reference implementations for the &lt;a href="http://www.opengeospatial.org/projects/groups/geopackageswg"&gt;OGC GeoPackage&lt;/a&gt; spec, &lt;a href="http://en.wikipedia.org/wiki/SpatiaLite"&gt;Spatialite&lt;/a&gt;, is arguably &lt;em&gt;also&lt;/em&gt; not a good choice.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because you cannot copy/paste or even create &lt;a href="http://stackoverflow.com/a/1916511/97995"&gt;“derivative work&amp;#8221;&lt;/a&gt; from it without also having to GPL/LGPL your work. Is looking at a reference implementation, seeing the internals, and copying how it works considered derivative work? Those are the type of questions that no developer wants to deal with, so IMHO, the OGC has the &lt;em&gt;responsibility&lt;/em&gt; to pick reference implementation  that in unencumbered by these issues. By picking Spatialite and a proprietary server (ArcGIS Server) as reference implementations to their respective specs, the OGC is showing that they are either 1) really clueless about these type of issues, or 2) don&amp;#8217;t care. Either way, this is horrible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Websockets?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I wish! Where are the implementations that take advantage of full duplex communications? Server side push? Seriously, are we still assuming users are going to poll all the time and transfer state in every request? This is exactly why most real-time tracking implementations are done incorrectly. Why are we still stuck in a stateless architecture design? We can do server push now without Flash or Java (or Silverlight yikes!). Websockets exist. USE THEM.&lt;/p&gt;

&lt;p&gt;I touched superficially around this topic in the last PyCon. &lt;a href="http://blog.burhum.com/post/45913868143/my-pycon-talk-video-is-up-in-the-pycon-video"&gt;The video is up if you are interested.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Https, Authentication/authorization, security&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I don’t even want to touch on authentication/authorization around all the OGC specs. &lt;a href="http://oauth.net/2/"&gt;OAuthv2&lt;/a&gt;, or even&lt;a href="http://tools.ietf.org/html/rfc5849"&gt; the first version of that&lt;/a&gt; are far better than what is expected of the current implementations of security. Most people rely on passing USERNAME/PASSWORD in the request. This is horrible.&lt;/p&gt;

&lt;p&gt;But wait, I guess if I use https that means I am secure right? &lt;em&gt;Hell no&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=7Goblv6ojkg"&gt;Look at this video from last year’s Blackhat&lt;/a&gt; (quite awesome actually) and then come back with a straight face and tell me this is fine.&lt;/p&gt;

&lt;p&gt;** - SPDY**
If you do not what &lt;a href="http://en.wikipedia.org/wiki/SPDY"&gt;SPDY&lt;/a&gt; is, then, you will definitely be surprised to tell you that all &lt;a href="http://spdycheck.org/#google.com"&gt;your https traffic to Google&lt;/a&gt; , &lt;a href="http://spdycheck.org/#facebook.com"&gt;Facebook&lt;/a&gt;  and &lt;a href="http://spdycheck.org/#twitter.com"&gt;Twitter&lt;/a&gt; is not going over “traditional” SSL.&lt;/p&gt;

&lt;p&gt;Yes, they use a special protocol called SPDY.&lt;/p&gt;

&lt;p&gt;It is faster than traditional http (even though it is going over an encrypted channel!). Think about this for a sec.&lt;/p&gt;

&lt;p&gt;Does the OGC use SPDY? &lt;a href="http://www.opengeospatial.org/"&gt;Of course not&lt;/a&gt;. Does it make a difference? &lt;a href="http://www.youtube.com/watch?v=zN5MYf8FtN0"&gt;Check out this video of last year’s Google I/O about SPDY&lt;/a&gt; and you be the judge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Non-blocking servers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Mapbox guys get it. They use node.js for serving their tiles. Do you want to understand why this is a good thing? &lt;a href="http://www.yuiblog.com/blog/2010/05/20/video-dahl/"&gt;Check out this presentation by Ryan Dahl 3 years ago&lt;/a&gt; which gives an overview of why this is the case.&lt;/p&gt;

&lt;p&gt;Anyway.&lt;/p&gt;

&lt;p&gt;I can go on and ramble forever, but I want this to be more constructive.&lt;/p&gt;

&lt;p&gt;**The discussion around OGC specs should be about what GIS is going to be like in 5 years in the &lt;em&gt;future&lt;/em&gt;. **&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;p&gt;Why did the OGC not work with the W3C to push WebSQL through (now stalled)?  Imagine spatial extensions in every browser on the client side?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why don’t we have a good spec about spatial replication, spatial changetsets, optimistic/pessimistic/long-transaction versioning, etc?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why don’t we have specs that take advantage of web stateful connections?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why don’t we have a spec for highly compressed geometries?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why don’t we have a spec that defines better editing capabilities? (hint: WFS-T is not enough for several editing workflows)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why don’t we have a spec that defines how to truly take advantage time-based datasets?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The list goes on.&lt;/p&gt;

&lt;p&gt;Instead, the community as a whole is having long discussions analogous to the one about whether 3857, 3785 or 900913 was a better number for the Web Mercator definition.&lt;/p&gt;

&lt;p&gt;Listen OGC, want to see a good standard definition? Check out &lt;a href="https://github.com/mapbox/mbtiles-spec"&gt;MBTiles&lt;/a&gt;. Easy to implement, and to the point.&lt;/p&gt;

&lt;p&gt;Want to change? Design/Define for the future - not for the present nor the past.&lt;/p&gt;</description><link>http://blog.burhum.com/post/50036141569</link><guid>http://blog.burhum.com/post/50036141569</guid><pubDate>Thu, 09 May 2013 14:09:31 -0700</pubDate><category>osgeo</category><category>ogc</category><category>esri</category><category>standards</category><category>gis</category><category>geo</category></item><item><title>UbuntuGIS - GIS on Linux</title><description>&lt;p&gt;I sometimes get surprised to find out that some people don&amp;#8217;t know how easy is to get GIS packages on Ubuntu. &lt;a href="https://wiki.ubuntu.com/UbuntuGIS"&gt;UbuntuGIS&lt;/a&gt; is really one of the easiest ways to get up and running. You will notice that there are two repos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://launchpad.net/~ubuntugis/+archive/ppa"&gt;UbuntuGIS &amp;#8220;Stable&amp;#8221;&lt;/a&gt; which has really old packages. You most likely &lt;strong&gt;don&amp;#8217;t&lt;/strong&gt; want that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://launchpad.net/~ubuntugis/+archive/ubuntugis-unstable"&gt;UbuntuGIS &amp;#8220;Unstable&amp;#8221;&lt;/a&gt; which is really not unstable at all. It just has newer packages. You do want that!&lt;/p&gt;

&lt;p&gt;To get it working in your Ubuntu system add the ubuntugis-unstable repo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable -y
sudo apt-get update
sudo apt-get upgrade&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now you can install all kinds of &lt;a href="https://launchpad.net/~ubuntugis/+archive/ubuntugis-unstable/+packages"&gt;cool packages&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get install postgis gdal qgis&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Is an example of how to get gdal, postgis and qgis ready to go.&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;</description><link>http://blog.burhum.com/post/49974918193</link><guid>http://blog.burhum.com/post/49974918193</guid><pubDate>Wed, 08 May 2013 17:50:00 -0700</pubDate><category>osgeo</category><category>gis</category><category>linux</category></item><item><title>360 Streetview-like views from Perú</title><description>&lt;p&gt;I took these a couple of months ago. Man, I miss Perú. The 360 views came out a lot nicer than what I expected&lt;/p&gt;

&lt;p&gt;&lt;a href="https://plus.google.com/photos/100825893460454450520/albums/5862409760288820561"&gt;https://plus.google.com/photos/100825893460454450520/albums/5862409760288820561&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.burhum.com/post/46979599279</link><guid>http://blog.burhum.com/post/46979599279</guid><pubDate>Tue, 02 Apr 2013 17:29:35 -0700</pubDate><category>travel</category></item><item><title>My PyCon talk video is up in the PyCon video site.

Realtime...</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/WQQr0UM17gI?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://pyvideo.org/video/1771/realtime-tracking-and-mapping-of-geographic-objec"&gt;My PyCon talk video is up in the PyCon video site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Realtime Tracking and Mapping of Geographic Objects using Python.&lt;/p&gt;</description><link>http://blog.burhum.com/post/45913868143</link><guid>http://blog.burhum.com/post/45913868143</guid><pubDate>Thu, 21 Mar 2013 07:38:00 -0700</pubDate><category>osgeo</category><category>gis</category><category>realtime</category><category>osm</category><category>nodejs</category><category>opendata</category><category>amigocloud</category></item><item><title>Knight News Challenge</title><description>&lt;p&gt;Running a &lt;a href="http://www.amigocloud.com/homepage/about.html"&gt;two person startup&lt;/a&gt; is not easy. Regardless, every time there is an opportunity to make true impact while working on your startup at the same time, it is truly an exciting opportunity. If you got a sec, we could use some votes in the &lt;a href="https://www.newschallenge.org/open/open-government/submission/increasing-citizen-participation-through-crowdsourced-maps/"&gt;Knight News Challenge&lt;/a&gt;. All we need is come clicks on the &amp;#8220;Applause&amp;#8221; button.&lt;/p&gt;</description><link>http://blog.burhum.com/post/45136369616</link><guid>http://blog.burhum.com/post/45136369616</guid><pubDate>Mon, 11 Mar 2013 14:44:26 -0700</pubDate><category>gis</category><category>osgeo</category><category>esri</category></item><item><title>Sometimes bugs are beautiful</title><description>&lt;img src="http://24.media.tumblr.com/4d123259b63101020b2d7faed8d36644/tumblr_mi4uu5ILB01qm8rxeo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Sometimes bugs are beautiful&lt;/p&gt;</description><link>http://blog.burhum.com/post/42961025451</link><guid>http://blog.burhum.com/post/42961025451</guid><pubDate>Tue, 12 Feb 2013 16:32:29 -0800</pubDate></item><item><title>SQLite Homebrew Errors with Virtualenv</title><description>&lt;p&gt;If, like me, you have recently experienced some sqlite errors after having updated Homebrew, it may probably be related to the fact that &lt;a href="https://github.com/mxcl/homebrew/issues/15300"&gt;sqlite just got changed to being a &amp;#8220;keg-only&amp;#8221; formula&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The issue is that the python virtualenv environment correctly links to the Homebrew-installed sqlite version, but when trying to run it, it doesn&amp;#8217;t find it. This is likely to happen if you use virtualenv.&lt;/p&gt;

&lt;p&gt;A quick workaround until that bug is fixed is to force the creation of the sqlite lib soft links in /usr/local/lib. You can do this with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew link --force sqlite
&lt;/code&gt;&lt;/pre&gt;</description><link>http://blog.burhum.com/post/42875669000</link><guid>http://blog.burhum.com/post/42875669000</guid><pubDate>Mon, 11 Feb 2013 15:15:19 -0800</pubDate></item><item><title>GDAL/OGR plugin for ArcGIS v0.6.1</title><description>&lt;p&gt;&lt;a href="https://github.com/RBURHUM/arcgis-ogr/"&gt;I updated the installer.&lt;/a&gt; It has GDAL trunk with support for 55 formats.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://i.imgur.com/dJB6Iuc.png" alt="image"/&gt;&lt;/p&gt;

&lt;p&gt;Enjoy - and please submit bugs!&lt;/p&gt;</description><link>http://blog.burhum.com/post/41827560174</link><guid>http://blog.burhum.com/post/41827560174</guid><pubDate>Tue, 29 Jan 2013 17:15:00 -0800</pubDate></item><item><title>Blob post about AmigoCloud's GDAL/OGR plugin for ArcGIS</title><description>&lt;p&gt;Bill Dollin&amp;#8217;s has a nice blog entry about using the &lt;a href="https://github.com/RBURHUM/arcgis-ogr"&gt;GDAL/OGR plugin for ArcGIS&lt;/a&gt; in his &lt;a href="http://blog.geomusings.com/2013/01/22/checking-out-the-gdal-slash-ogr-plugin-for-arcgis/"&gt;GeoMusings blog.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to integrate ArcGIS and various Open Source formats? This is certainly a way to do it.&lt;/p&gt;</description><link>http://blog.burhum.com/post/41720031657</link><guid>http://blog.burhum.com/post/41720031657</guid><pubDate>Mon, 28 Jan 2013 12:09:36 -0800</pubDate></item><item><title>What is an ESRI GeoDatabase?</title><description>&lt;p&gt;For those of us dabbling in geo work, It is not uncommon to hear the term &lt;em&gt;GeoDatabase&lt;/em&gt;. Sadly, it is also not uncommon to hear the term GeoDatabase used incorrectly. Sometimes people use it to refer to ArcSDE, sometimes they use it to refer to that &amp;#8220;Access mdb file&amp;#8221;, sometimes it is just that &amp;#8220;FileGDB thing&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Somebody asked &lt;em&gt;&amp;#8220;What is a GeoDatabase?&amp;#8221;&lt;/em&gt; last year in my favorite &lt;a href="http://gis.stackexchange.com/"&gt;GIS Q/A site&lt;/a&gt; - and &lt;a href="http://gis.stackexchange.com/questions/22202/what-are-esri-geodatabases"&gt;here is the answer from yours truly.&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.burhum.com/post/40607852334</link><guid>http://blog.burhum.com/post/40607852334</guid><pubDate>Tue, 15 Jan 2013 09:01:32 -0800</pubDate><category>osgeo</category><category>esri</category><category>gis</category><category>geodatabase</category><category>gis.se</category></item><item><title>Improving Performance in PostgreSQL</title><description>&lt;p&gt;&lt;a href="http://craigkerstiens.com/about/"&gt;Craig Kerstiens&lt;/a&gt; has two articles that are worth reading for those trying to improve query performance in PostgreSQL&lt;/p&gt;

&lt;p&gt;-&lt;a href="http://craigkerstiens.com/2012/10/01/understanding-postgres-performance/"&gt; Understanding Postgres Performance&lt;/a&gt;
- &lt;a href="http://craigkerstiens.com/2013/01/10/more-on-postgres-performance/"&gt;More on Postgres Performance&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That should help you in understanding how to tweak SQL queries / indexes.&lt;/p&gt;

&lt;p&gt;Nevertheless, I would hope you at least have an idea what some of the different &lt;a href="http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server"&gt;postgresql.conf settings&lt;/a&gt; are for - especially since there are amazing &lt;a href="http://www.pgexperts.com/presentations.html"&gt;resources out there to help you with this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One of my favorite tools to see how tweaking affects my Postgres database is to use &lt;a href="http://www.postgresql.org/docs/devel/static/pgbench.html"&gt;pgbench&lt;/a&gt;. If you have not use it, &lt;a href="http://wiki.postgresql.org/wiki/Pgbenchtesting"&gt;try it out&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.burhum.com/post/40201249197</link><guid>http://blog.burhum.com/post/40201249197</guid><pubDate>Thu, 10 Jan 2013 14:08:01 -0800</pubDate><category>osgeo</category><category>postgresql</category><category>performance</category></item><item><title>Mapping Rookie Mistakes (#1): Always Geocoding on-the-fly</title><description>&lt;p&gt;If you are hitting Google&amp;#8217;s (or Bing&amp;#8217;s) &lt;a href="https://developers.google.com/maps/documentation/geocoding/#Limits"&gt;geocoding limit&lt;/a&gt;, you are probably doing something very wrong.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gis.stackexchange.com/questions/15052/how-to-avoid-google-map-geocode-limit/15365"&gt;If your first reaction is to look for a workaround&lt;/a&gt;, then please &lt;strong&gt;STOP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gis.stackexchange.com/a/15365/1965"&gt;There is a reason for hitting that limit &lt;/a&gt; and you should be caching your results in your db instead.&lt;/p&gt;

&lt;p&gt;You have been warned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href="http://blog.cleverelephant.ca/"&gt;Paul Ramsey&lt;/a&gt; and others kindly point out to look at &lt;a href="https://developers.google.com/maps/terms#section_10_1_3"&gt;10.1.3(b)&lt;/a&gt; for currently allowed caching use cases.&lt;/p&gt;</description><link>http://blog.burhum.com/post/39482139994</link><guid>http://blog.burhum.com/post/39482139994</guid><pubDate>Wed, 02 Jan 2013 09:03:00 -0800</pubDate><category>osgeo</category><category>rookie</category><category>gis</category><category>geocoding</category></item><item><title>Mapping Rookie Mistakes</title><description>&lt;p&gt;There are a set of common Mapping Rookie Mistakes (tm) that happen very often. I am hoping I can refer to some of those so that somebody looking for an answer will stumble upon these.&lt;/p&gt;

&lt;p&gt;For those experienced with GIS, these are blatantly obvious. Nevertheless, for the uninitiated in geo, these may not be so evident.&lt;/p&gt;

&lt;p&gt;These will not be in any particular order, so the numbers only represent the order in which I wrote them - not order of importance.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s start with &lt;strong&gt;geocoding on the fly&lt;/strong&gt;&lt;/p&gt;</description><link>http://blog.burhum.com/post/39481978458</link><guid>http://blog.burhum.com/post/39481978458</guid><pubDate>Wed, 02 Jan 2013 09:01:18 -0800</pubDate><category>esri</category><category>geocoding</category><category>gis</category><category>osgeo</category><category>rookie</category></item><item><title>Your LGPL license is completely destroying iOS adoption</title><description>&lt;p&gt;&lt;strong&gt;tl;dr If you have LGPL licensed code, please be clear if you want it to be used alongside proprietary libraries in iOS.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I hesitated about writing this because it will surely put some people up in arms (many of them good friends). So please let me clarify before throwing grenades.&lt;/p&gt;

&lt;p&gt;This is not &lt;a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt"&gt;FUD&lt;/a&gt;. For the uninitiated in Open Source licensing discussions, &amp;#8220;FUD&amp;#8221; usually refers to when somebody (usually with a hidden agenda to support a particular proprietary technology) starts throwing rocks at Open Source in general. The idea is that this person will create enough confusion, that the proprietary option will be chosen instead.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t have any hidden agenda.&lt;/p&gt;

&lt;p&gt;I actually admire &lt;a href="http://en.wikipedia.org/wiki/Richard_Stallman"&gt;Richard Stallman&lt;/a&gt; (the &lt;a href="http://www.gnu.org/"&gt;GNU&lt;/a&gt; father) a lot. It is impossible to argue that without his full-blown activism, sacrifice, and energy dedicated to the Open Source movement, we would not be where we are today. We have Open Source libraries for practically anything. Yes, &lt;a href="http://www.youtube.com/watch?v=I25UeVXrEHQ"&gt;RMS can do extremely odd things while discussing complex issues&lt;/a&gt;, but nobody can take away that he is really the crazy genius that changed the world for the better. Truth is, I think we need people like RMS to create a sort of equilibrium.&lt;/p&gt;

&lt;p&gt;In the &lt;a href="http://en.wikipedia.org/wiki/Geographic_information_system"&gt;GIS&lt;/a&gt; space, we have several key projects that are &lt;a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html"&gt;LGPL&lt;/a&gt;&amp;#8216;d. The main one that comes to mind is &lt;a href="http://trac.osgeo.org/geos/"&gt;GEOS&lt;/a&gt; a port of the wonderful &lt;a href="http://tsusiatsoftware.net/jts/main.html"&gt;JTS&lt;/a&gt; library - and this is where the iOS problem begins (JTS is LGPL and thus GEOS has to be LGPL because it is &lt;a href="http://en.wikipedia.org/wiki/Derivative_work"&gt;derivative work&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;GEOS is really at the heart most Open Source GIS projects; it provides the core &lt;a href="http://geos.osgeo.org/doxygen/classgeos_1_1geom_1_1Geometry.html"&gt;geometry object model&lt;/a&gt; defined by a &lt;a href="http://www.opengeospatial.org/standards/sfa"&gt;standards organization&lt;/a&gt; and it also has an amazing list of &lt;a href="http://geos.osgeo.org/doxygen/annotated.html"&gt;algorithms/functionality&lt;/a&gt;. Very popular key GIS projects like &lt;a href="http://postgis.refractions.net/"&gt;PostGIS&lt;/a&gt;, &lt;a href="http://qgis.osgeo.org/"&gt;QGIS&lt;/a&gt;, &lt;a href="http://geodjango.org/"&gt;GeoDjango&lt;/a&gt;, &lt;a href="https://www.gaia-gis.it/fossil/libspatialite/index"&gt;Spatialite&lt;/a&gt; (sqlite with spatial extensions) and others rely on GEOS for all the geometry needs.&lt;/p&gt;

&lt;p&gt;Without GEOS, a lot of this applications become extremely crippled. Thus, why you will (sadly) not see strong adoption of spatialite on iOS.&lt;/p&gt;

&lt;p&gt;OK, good. So why is this a problem for iOS devices?&lt;/p&gt;

&lt;p&gt;Without getting into all the details of the obligations/freedoms/restrictions/whatever-you-want-to-call-it that come with all the different versions of LGPL, &lt;strong&gt;the LGPL license requires you to release all the source code of any library you link statically to&lt;/strong&gt;. Let me emphasize the word &lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Static_library"&gt;static linking&lt;/a&gt;&lt;/strong&gt; here.&lt;/p&gt;

&lt;p&gt;So fine you say, use a shared library instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I can&amp;#8217;t.&lt;/strong&gt; &lt;a href="http://stackoverflow.com/questions/4733847/can-you-build-dynamic-libraries-for-ios-and-load-them-at-runtime"&gt;iOS does not allow shared libraries&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;They are afraid your app will download a new version of the shared library at runtime and change the behavior and thus circumvent the whole &lt;a href="https://developer.apple.com/appstore/guidelines.html"&gt;Apple App Store Review process&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Beefing up my anti-DDoS system&lt;/em&gt;. Why? Because this is the part where both camps start fighting like their life depends on it.&lt;/p&gt;

&lt;p&gt;One side will say that &lt;a href="http://www.linuxforu.com/2012/03/rms-interview-richard-stallman-freedom-android-amazon-facebook-steve-jobs/"&gt;Apple&amp;#8217;s App Store is Censorship&lt;/a&gt; and that the LGPL clause is actually protecting your freedom. The discussion turns into a philosophical and ethical one. I can actually see how those argument are very valid.&lt;/p&gt;

&lt;p&gt;The other side will say that the App Review process makes it more difficult for rogue code (notice difficult - not impossible). Having a review process reduces the possibility that your code will crash on devices after the first install because of something you did not test. It also reduces &amp;#8220;duplication or redundant&amp;#8221; apps - with Apple being the sole Ruler in choosing what goes in and out. Big brother I guess. But I also see how the App Store supporter&amp;#8217;s point is a valid point.&lt;/p&gt;

&lt;p&gt;Note that this problem does not exist in Android because it allows shared libraries to be compiled. Nevertheless, my customers use iOS a lot which means I cannot just &amp;#8220;switch&amp;#8221; to Android and &amp;#8220;ignore iOS&amp;#8221;. I need to use some proprietary libraries like &lt;a href="http://www.flurry.com/flurry-analytics.html"&gt;Flurry&lt;/a&gt; and &lt;a href="http://resources.arcgis.com/en/communities/runtime-ios-sdk/index.html"&gt;ESRI&amp;#8217;s iOS SDK&lt;/a&gt; and many others for reasons outside the scope of this post.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sigh.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some people &lt;a href="http://stackoverflow.com/a/1321681/97995"&gt;will argue that it is possible to do static linking of LGPL&amp;#8217;d code and still be able to abide by the legal terms&lt;/a&gt; by providing the necessary binaries to be re-linked. This has no legal precedent and is still a very fuzzy argument.   I would rather not bet my company on something so shaky as this.&lt;/p&gt;

&lt;p&gt;So of course, some people may think: &amp;#8220;Well then, you want to use other people&amp;#8217;s hard work to profit in your [insert best insulting word here] startup. Sorry buddy, use something else! This was licensed as philosophical/political statement.&amp;#8221;&lt;/p&gt;

&lt;p&gt;And that is where they are right&amp;#8230; and where they are also wrong.&lt;/p&gt;

&lt;p&gt;OK, I should have added &lt;em&gt;sometimes&lt;/em&gt;. For certain OS projects, like &lt;a href="http://gcc.gnu.org/"&gt;GCC&lt;/a&gt;, this is very true. Nevertheless, from personal experience, I&amp;#8217;ve found many times when I am talking to leads/creators of some OS projects, that they are completely unaware that the default LGPL creates this complications in iOS.&lt;/p&gt;

&lt;p&gt;The solution?&lt;/p&gt;

&lt;p&gt;Some authors choose &lt;a href="https://www.google.com/search?q=licensing+iOS+static+linking+exception"&gt;to add a static linking exception&lt;/a&gt;, others choose to re-license completely (think &lt;a href="http://www.cocos2d-iphone.org/forum/topic/5311"&gt;cocos2d that started as LGPL and switched to MIT&lt;/a&gt;). I am aware that for some projects with tons of contributors (think ffmpeg) it is impossible.&lt;/p&gt;

&lt;p&gt;But if you have an awesome new project that could be extremely useful on iOS - &lt;em&gt;&lt;strong&gt;and you have no philosophical or ethical issues with it&lt;/strong&gt;&lt;/em&gt; - please please please please &lt;strong&gt;add a clarification to your licensing that covers this use-case&lt;/strong&gt;. &lt;a href="http://www.gnu.org/licenses/why-not-lgpl.html"&gt;Even the Free Software Foundation doesn&amp;#8217;t want you to use LGPL&lt;/a&gt;. So, please, pick sides, but don&amp;#8217;t leave it in limbo state. If you don&amp;#8217;t clarify, you are just completely destroying iOS adoption.&lt;/p&gt;

&lt;p&gt;Hey, if you want me to release the changes / updates I make to your LGPL library, I have no problem with that whatsoever. I do it all the time.&lt;/p&gt;

&lt;p&gt;What I refuse to do entirely is to completely ignore the licensing obligations altogether and just start using the library. Sadly, there are examples of Spatialite-with-GEOS/ffmpeg/put-your-favorite-lgpl-library-here code in the Apple App Store with developers who do not care one bit that they are violating those terms.&lt;/p&gt;

&lt;p&gt;**Update (1/8/13): ** Corrected link to the current JTS site.&lt;/p&gt;</description><link>http://blog.burhum.com/post/38236943467</link><guid>http://blog.burhum.com/post/38236943467</guid><pubDate>Tue, 18 Dec 2012 10:13:00 -0800</pubDate><category>gis</category><category>iphone</category><category>licensing</category><category>osgeo</category><category>esri</category></item><item><title>Topology and Routing Graphs in GIS</title><description>&lt;p&gt;I realize that from a theoretical, formal, standpoint I tend to be a bit relaxed with my terminology. You could argue, I am practically asking to feel the ire of (in this case) somebody classically trained in Mathematics!&lt;/p&gt;

&lt;p&gt;Nevertheless, during grad school in Computer Science, an &lt;a href="http://www.csci.csusb.edu/ykarant/"&gt;amazingly smart professor&lt;/a&gt; explained to me the distinction about &lt;em&gt;Theorists&lt;/em&gt; and &lt;em&gt;Practitioners&lt;/em&gt; in such a clear way that I could finally make sense of the horrendous chunks of code that I have seen from people that I would otherwise think of as brilliant.&lt;/p&gt;

&lt;p&gt;At some point of doing geo-work (hopefully) you will face a problem that has to be solved by creating graphs. &lt;a href="http://gis.stackexchange.com/questions/37358/how-do-i-describe-a-special-relationship-between-connected-edges"&gt;User andytilia at GIS-StackExchange asked this very question.&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gis.stackexchange.com/questions/37358/how-do-i-describe-a-special-relationship-between-connected-edges/42748#42748"&gt;In my answer, I tried to explain how creating a graph from GIS data is more than splitting your features in edges and nodes. It is about creating a graph that is optimized for your particular problem. &lt;/a&gt;&lt;/p&gt;</description><link>http://blog.burhum.com/post/37847439430</link><guid>http://blog.burhum.com/post/37847439430</guid><pubDate>Thu, 13 Dec 2012 11:28:00 -0800</pubDate><category>esri</category><category>osgeo</category><category>gis</category><category>routing</category><category>topology</category></item><item><title>You are an amazing engineer, but you are a terrible fit for our startup. Apply to a later-stage startup instead!</title><description>&lt;p&gt;&lt;strong&gt;Update (based on some comments I received):&lt;/strong&gt; I am &lt;strong&gt;not&lt;/strong&gt; recruiting at this point for either my current or previous startup.&lt;/p&gt;

&lt;p&gt;A year ago, after the &lt;a href="http://www.modewalk.com"&gt;last startup I founded&lt;/a&gt; had closed &lt;a href="http://www.prnewswire.com/news-releases/modewalkcom-attracts-18-million-in-series-a-financing-to-offer-the-most-immersive-luxury-shopping-experience-online-137960778.html"&gt;$1.8 million+ in Series A financing&lt;/a&gt;, I interviewed a guy (call him James) that was considered one of the best engineers in his area which I am sure Apple/Google/Facebook would fight to the death to hire.&lt;/p&gt;

&lt;p&gt;Nevertheless, I kept thinking to myself:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;#8220;James, you are an amazing engineer, but you are a &lt;em&gt;terrible&lt;/em&gt; fit for our startup. Apply to a later stage startup instead! Adding you to the team would just really harm the startup.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Honestly, I was surprised at the amount of other engineers I spoke to who &amp;#8220;wanted to work at a startup&amp;#8221;, but had no sense whatsoever about &lt;a href="http://www.evancarmichael.com/Productivity/3233/Four-Stages-of-Startup-Development.html"&gt;the different stages&lt;/a&gt; that a startup (hopefully) goes through, just like this guy.&lt;/p&gt;

&lt;p&gt;Even though we had more than couple of million dollars in the bank, we were still working on &lt;a href="http://theleanstartup.com/principles"&gt;our process&lt;/a&gt; for finding a good sustainable and scalable business model.&lt;/p&gt;

&lt;p&gt;We were in an early stage back then.&lt;/p&gt;

&lt;p&gt;But most engineers I spoke to &lt;strong&gt;did not get that&lt;/strong&gt;.  &amp;#8220;We should be talking about a higher equity stake, not a higher salary&amp;#8221;, I kept thinking to myself.&lt;/p&gt;

&lt;p&gt;They heard &amp;#8220;million dollars&amp;#8221; and automatically assumed you would pay them $135K /year. What a waste of my time and his/her time that was! Those people should have been filtered out from the beginning.&lt;/p&gt;

&lt;p&gt;Now, before you get all up in arms about this, let me elaborate a bit more.&lt;/p&gt;

&lt;p&gt;I get it. As an engineer myself, every week I get frustrating moments when I question if I am nuts for not taking that cushy $150,000/year job that I get offered so often. Not having to deal with the legal implications of running a startup (e.g is the Privacy wording correct in our current Terms of Service?) or following up on missing payments for those short side-consulting contracts that I took to bootstrap the startup. It is nuts!&lt;/p&gt;

&lt;p&gt;And then I remember what it was like when I worked at big corporations. I stopped learning and growing as an engineer. My co-workers were incredibly smart people, but the more I stayed, the more &lt;em&gt;&lt;strong&gt;I&lt;/strong&gt;&lt;/em&gt; felt like the theme song for Weeds.&lt;/p&gt;

&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/u4KfJztaJ5I" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;If you are applying to an &lt;em&gt;early&lt;/em&gt; stage startup, you should &lt;em&gt;want&lt;/em&gt; to have skin in the game and you should enjoy being a jack of all trades (e.g. there will be no &amp;#8220;QA&amp;#8221; or &amp;#8220;Build&amp;#8221; department - we should incorporate it to &lt;em&gt;our&lt;/em&gt; process).&lt;/p&gt;

&lt;p&gt;For those people applying to startups in the Bay Area, like James, please consider these things before joining a startup:&lt;/p&gt;

&lt;h2&gt;1.- &lt;strong&gt;Early stage&lt;/strong&gt; startups are mainly about &lt;em&gt;taking more risk&lt;/em&gt; rather than &lt;em&gt;getting paid more&lt;/em&gt;.&lt;/h2&gt;

&lt;p&gt;I realize you (like me) live in the Bay Area where $300/month for a parking spot is too common. Of course you have to make enough money to not have to worry about paying for things, but the stage you enter should be aligned with those considerations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want more equity?&lt;/strong&gt; Take less money. For a startup in their seed / Series A / Series B rounds this is the best choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want more money?&lt;/strong&gt; Take less equity. For a startup that is in their Series B / Series C / about to go IPO, this is the best choice.&lt;/p&gt;

&lt;p&gt;The Cash and Equity are actually inversely proportional to each other.&lt;/p&gt;

&lt;p&gt;At the early stage I will offer you more equity. A fair amount actually. And just like me, you will have a &lt;a href="http://startuplawyer.com/startup-law-glossary/4-years-with-a-one-year-cliff"&gt;one year cliff&lt;/a&gt; on a 4 year vest schedule.&lt;/p&gt;

&lt;h2&gt;2.- Let&amp;#8217;s not even talk about job-security&lt;/h2&gt;

&lt;p&gt;You live in the Bay Area. Just like my startup, there are several other startups trying to recruit you, too. If my startup tanks (and &lt;a href="http://online.wsj.com/article/SB10000872396390443720204578004980476429190.html"&gt;most startups do&lt;/a&gt;), you will have a job right away. In Silicon Valley, good engineers are the real currency. As an engineer, you are part of the group of lucky people that are isolated from the current economic woes. So why even bother having this conversation?&lt;/p&gt;

&lt;h2&gt;3.- Your health is important&lt;/h2&gt;

&lt;p&gt;Maintaining a work-life balance &lt;em&gt;is&lt;/em&gt; important (nothing more detrimental to productivity than burnout). You have to get out and do other things, and whatever startup you apply to should understand that. The personal time of your co-workers should be respected. In addition, your health plan should have been part of the budget and should be a good one.&lt;/p&gt;

&lt;h2&gt;4.- You have to be willing to learn because you will do several things outside your comfort zone##.&lt;/h2&gt;

&lt;p&gt;It is a given. You cannot just want to be the &amp;#8220;Javascript expert&amp;#8221; and not touch server code. Sorry. For an early stage startup you will touch Server code, Client code, deployment scripts and tests. This is huge plus for some people, because they becomes amazing engineers. For others, who just want to be experts at one thing, they are a much better fit for a later stage company.&lt;/p&gt;

&lt;h2&gt;Back to James&lt;/h2&gt;

&lt;p&gt;James did not ask me once about health insurance and did not really care when I told him about the plan. He claim he worked crazy hours, loved to do it, and expected everyone else to do the same.&lt;/p&gt;

&lt;p&gt;He had never worked at a startup, but did want to try the &amp;#8220;startup thing&amp;#8221;, so he thought he wanted a big equity package alongside a big salary . He refused to acknowledge how those things were inversely proportional and took the two offers we gave them (big salary/small equity and small salary/big equity) and created a custom big salary / big equity + bonus counter offer that was laughable at best.&lt;/p&gt;

&lt;p&gt;Of course, James wanted to continue doing just that one thing he was good at, [X]. Nevertheless, he did not want to touch anything else.&lt;/p&gt;

&lt;p&gt;James kept asking about job security, and in his case, it was seriously irrelevant (did I mention Google/Facebook/Apple/Microsoft would kill for this guy?).&lt;/p&gt;

&lt;p&gt;Truth is that James should not have been looking at a startup in the first place. Although he was one of the most brilliant (and nicest!) engineers I ever spoke to, it was a huge waste of time for everyone involved.&lt;/p&gt;</description><link>http://blog.burhum.com/post/37128895836</link><guid>http://blog.burhum.com/post/37128895836</guid><pubDate>Mon, 03 Dec 2012 12:19:54 -0800</pubDate><category>startup</category></item><item><title>Automating your Build, Code Quality Metrics and Testing using a Continuos Integration Server</title><description>&lt;p&gt;The truth is that having good code takes work.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_me5ufaMV821qkr5g0.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Nevertheless, you have several tools that can help you with this problem. &lt;strong&gt;&lt;a href="http://jenkins-ci.org/"&gt;Jenkins&lt;/a&gt;&lt;/strong&gt; is one of those tools. If you have heard of &lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt; and this confuses you, you are not alone. Jenkins is &lt;a href="http://www.itworld.com/open-source/138705/jenkins-defends-split-oracles-hudson"&gt;a fork of Hudson that spurred after some drama that ensued shortly after the Oracle acquisition of Sun&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Jenkins has its quirks - no doubt about it. But setting it up is worth it. &lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu"&gt;If you have Ubuntu, getting a standard installation is easy.&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;   wget -q -O - &lt;a href="http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key"&gt;http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key&lt;/a&gt; | sudo apt-key add -
   sudo sh -c 'echo deb &lt;a href="http://pkg.jenkins-ci.org/debian"&gt;http://pkg.jenkins-ci.org/debian&lt;/a&gt; binary/ &amp;gt; /etc/apt/sources.list.d/jenkins.list'
   sudo apt-get update
   sudo apt-get install jenkins
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This works fine and dandy as long as you run your server internally. If you are exposing your server to the Internet, then there are several things you will have to do to secure it. I would recommend you look at least at two things:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;a href="http://serverfault.com/questions/278555/jenkins-use-it-with-ssl-https"&gt;Use SSL with Jenkins (one way is with a proxy)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Github+OAuth+Plugin"&gt;Consider using the GitHub oauth plugin&lt;/a&gt;. That way you can authenticate using your GitHub credentials (and also manage access to the Jenkins jobs through it).&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;So what is so great about Jenkins besides being a web-based build system? Well, it has a &lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Plugins"&gt;plethora of plugins&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A few examples of cool plugins:&lt;/p&gt;

&lt;h2&gt;&lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Violations"&gt;Violations plugin&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Shows results of code quality tools.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Trends between builds&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_me6aq1liJf1qkr5g0.png" alt=""/&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Where they occur&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_me6arpNDU71qkr5g0.png" alt=""/&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;What the violation is&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_me6aue7fNu1qkr5g0.png" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;&lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Valgrind+Plugin"&gt;Valgrind plugin&lt;/a&gt;&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;In case you want to know where you code is leaking.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_me6b7rsbvr1qkr5g0.jpg" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;&lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Android+Lint+Plugin"&gt;Android Lint plugin&lt;/a&gt;&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;You do want to know that your Android code is sketchy right?&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_me6b5wR2X61qkr5g0.jpg" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;&lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin"&gt;XCode Plugin&lt;/a&gt;&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;For building your iOS projects&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Cool huh?&lt;/p&gt;</description><link>http://blog.burhum.com/post/36741532010</link><guid>http://blog.burhum.com/post/36741532010</guid><pubDate>Wed, 28 Nov 2012 08:00:00 -0800</pubDate><category>build</category><category>jenkins</category><category>coding</category></item><item><title>Cross-platform (iOS/Android) Mobile App development using C++</title><description>&lt;p&gt;At &lt;a href="http://www.amigocloud.com"&gt;AmigoCloud&lt;/a&gt;, we use tons of C++ &amp;amp; OpenGL for our Mapping applications.&lt;/p&gt;

&lt;p&gt;Funny enough, when I talk to tech-people about our startup and tell them that we have a cross-platform framework, the first words that come out of their mouth is &amp;#8220;HTML5&amp;#8221;. Although we &lt;em&gt;do&lt;/em&gt; use HTML5 for some of our components (a topic for another day), they always end up looking surprised when I tell them that 90% of the code is C++ (the other 10% being platform specific GUI + glue code).&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_mdt31qPEjp1qkr5g0.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Yes. Actually, it gets better.&lt;/p&gt;

&lt;p&gt;The truth is that &lt;strong&gt;the same core client C++ code runs completely fine on OSX, Android, iOS, Windows, Linux, FreeBSD&lt;/strong&gt; and possibly other platforms that we have not bothered to attempt.&lt;/p&gt;

&lt;p&gt;C++ is an awesome versatile language with tons of libraries that, when carefully chosen, will make your life easier because they work completely fine on different platforms.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;p&gt;Need to do threading? Use &lt;a href="https://computing.llnl.gov/tutorials/pthreads/"&gt;pthreads&lt;/a&gt; or &lt;a href="http://www.boost.org/doc/libs/1_52_0/doc/html/thread.html#thread.overview"&gt;Boost Threads&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Local storage? How about &lt;a href="http://www.sqlite.org/cintro.html"&gt;sqlite&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UTF16 support? Know about &lt;a href="http://demo.icu-project.org/icu-bin/icudemos"&gt;ICU&lt;/a&gt; (we use something different, but I had to mention it).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Network Access? How about &lt;a href="http://curl.haxx.se/libcurl/c/"&gt;cURL&lt;/a&gt;. Yeah, I know, the cURL API might not be the most beautiful thing. But writing a &lt;a href="https://github.com/mrtazz/restclient-cpp"&gt;simple beautiful wrapper is honestly trivial&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;JSON? &lt;a href="https://bitbucket.org/zserge/jsmn/wiki/Home"&gt;simple json parsers&lt;/a&gt;, &lt;a href="http://jsoncpp.sourceforge.net/"&gt;elaborate json parsers&lt;/a&gt;, &lt;a href="http://boost-spirit.com/home/"&gt;make-your-own-json-parsers &lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;You can have it all (mostly).&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_mdt46epwaG1qkr5g0.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;By now you may be asking yourself, &amp;#8220;I know how to write C++ and use those libraries, but how do I consume them in, say, Android and iOS?&amp;#8221;.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;iOS&lt;/strong&gt;, you need to be aware that there is such thing as Objective C++ and this makes consuming C++ from Objective C trivial. There are several excellent &lt;a href="http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++"&gt;articles in the net that describe how to do this.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Android&lt;/strong&gt;, you need to be aware that there is such thing as a &lt;a href="http://developer.android.com/tools/sdk/ndk/index.html"&gt;native sdk (aka android ndk)&lt;/a&gt;. Again, there are &lt;a href="http://blog.edwards-research.com/2012/04/tutorial-android-jni/"&gt;several good tutorials online that explain the process.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our case, the GUI code is (intentionally) platform-specific because we want to get the native control feel for each phone that we target. We also have a small set of wrappers for phone specific things like access to the phone sensors (a topic for another post).&lt;/p&gt;

&lt;p&gt;Is it all as awesome as it sounds?&lt;/p&gt;

&lt;p&gt;Sadly - &lt;em&gt;no&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;IMHO, there is a huge downside to it all: &lt;strong&gt;the build completely sucks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Think about how many targets you have. Just in iOS, you can have x86, armv6, armv7 depending if you are running this on the emulator, or different iPhones. Every single dependency that you add will need to be compiled for that target. Then think about debug + release. Yuck!&lt;/p&gt;

&lt;p&gt;So what to do about this?&lt;/p&gt;

&lt;p&gt;At &lt;a href="http://www.amigocloud.com"&gt;AmigoCloud&lt;/a&gt;, we use a custom build system for this. Nevertheless, when I was looking into this some months back, I stumbled &lt;a href="https://github.com/mevansam/cmoss"&gt;upon several great scripts to take care of this process&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mevansam/cmoss"&gt;CMOSS&lt;/a&gt; itself is simple and works. Perhaps, if there is enough interest, I&amp;#8217;ll write a small &amp;#8220;Hello World&amp;#8221; app that uses CMOSS to build both iOS and Android apps.&lt;/p&gt;</description><link>http://blog.burhum.com/post/36166554007</link><guid>http://blog.burhum.com/post/36166554007</guid><pubDate>Tue, 20 Nov 2012 14:53:00 -0800</pubDate><category>mobile</category><category>C++</category><category>OSX</category><category>Android</category><category>iOS</category><category>build</category></item><item><title>Getting QGIS working on Homebrew</title><description>&lt;p&gt;Sometimes installing QGIS on Homebrew doesn&amp;#8217;t succeed. If you are running into issues with it, most likely, it is related to PyQt not being found. To install QGIS, try this Homebrew magic incantation:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew remove pyqt
brew install pyqt #verify everything works fine
export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH
brew tap homebrew/science
brew install qgis --with-grass --with-postgis
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Done. As @mweisman points out, &lt;a href="http://blog.burhum.com/post/34851795066/installing-gdal-ogr-with-filegdb-support-on-osx-with"&gt;If you installed FileGDB previously&lt;/a&gt;, you will even get that &lt;a href="https://twitter.com/mweisman/status/269171660396036096"&gt;driver picked up by your fresh QGIS build&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.burhum.com/post/36080548777</link><guid>http://blog.burhum.com/post/36080548777</guid><pubDate>Mon, 19 Nov 2012 11:52:56 -0800</pubDate><category>osgeo</category><category>gis</category><category>filegdb</category><category>esri</category><category>homebrew</category><category>qgis</category></item><item><title>I have been playing more and more with the IOIO which is an...</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/vVYsWtR_gR4?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I have been playing more and more with the &lt;a href="https://www.sparkfun.com/products/10585?"&gt;IOIO&lt;/a&gt; which is an awesome alternative to Arduino. You can easily take your Android phone and control any custom hardware you build. Here is my Trollbot - a couple of servos I hooked up to the IOIO board and a bluetooth chip.&lt;/p&gt;</description><link>http://blog.burhum.com/post/35782703820</link><guid>http://blog.burhum.com/post/35782703820</guid><pubDate>Thu, 15 Nov 2012 10:00:40 -0800</pubDate><category>ioio</category><category>robots</category></item></channel></rss>
