<?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/"
	>

<channel>
	<title>OpenGeo</title>
	<atom:link href="http://blog.opengeo.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.opengeo.org</link>
	<description>Building Web-Based Geospatial Technology</description>
	<lastBuildDate>Thu, 06 Jun 2013 20:39:08 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Presentations from FOSS4G-NA 2013</title>
		<link>http://blog.opengeo.org/2013/05/31/presentations-from-foss4g-na-2013/</link>
		<comments>http://blog.opengeo.org/2013/05/31/presentations-from-foss4g-na-2013/#comments</comments>
		<pubDate>Fri, 31 May 2013 17:57:32 +0000</pubDate>
		<dc:creator>David Dubovsky</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[foss4g-na]]></category>

		<guid isPermaLink="false">http://blog.opengeo.org/?p=5127</guid>
		<description><![CDATA[We’re back from FOSS4G-NA and recovering from our jam-packed week in Minneapolis. Unfortunately we were so busy we missed some of the plenaries, workshops and talks that we wanted to attend. In case you’ve found yourself in a similar situation, or would like to review an OpenGeo presentation we’ve compiled the materials below. Let&#8217;s start with the videos we recorded during [...]]]></description>
				<content:encoded><![CDATA[<p>We’re back from FOSS4G-NA and recovering from our jam-packed week in Minneapolis. Unfortunately we were so busy we missed some of the plenaries, workshops and talks that we wanted to attend. In case you’ve found yourself in a similar situation, or would like to review an OpenGeo presentation we’ve compiled the materials below.</p>
<p>Let&#8217;s start with the videos we recorded during the <a href="http://foss4g-na.org/sponsor-day/">sponsor day</a> presentations.</p>
<p>Eddie Pickle kicked things off with the &#8220;<a href="https://vimeo.com/67271435">Annual OpenGeo Update</a>&#8220;, highlighting our recent <a href="http://blog.opengeo.org/2013/05/15/opengeo-emerges/">spin-out</a>, and how OpenGeo and FOSS4G have grown together:</p>
<p><iframe src="http://player.vimeo.com/video/67271435" height="281" width="500" allowfullscreen="" frameborder="0"></iframe></p>
<p>Next up we saw Alyssa Wright and Tim Schaub formally launch, and then demo, <a href="http://mapmeter.com/">Mapmeter beta</a>. If you didn&#8217;t catch the announcement , Mapmeter is our new tool for <a href="http://blog.opengeo.org/2013/05/22/announcing-mapmeter-a-new-tool-for-analyzing-geospatial-deployments/">analyzing geospatial deployments</a>. Head over to <a href="http://mapmeter.com/">http://mapmeter.com</a> to learn more, connect with the development team and join us for this beta program.</p>
<p><iframe src="http://player.vimeo.com/video/67271433" height="281" width="500" allowfullscreen="" frameborder="0"></iframe></p>
<p><iframe src="http://player.vimeo.com/video/67271318" height="281" width="500" allowfullscreen="" frameborder="0"></iframe></p>
<p>David Winslow followed, giving a presentation on GeoGit, a project exploring the use of distributed management of spatial data. David has made his slides available for <a href="http://blog.opengeo.org/wp-content/uploads/2013/05/foss4g2013-sponsor-day-geogit.pdf">download</a>.</p>
<p><iframe src="http://player.vimeo.com/video/67308286" height="281" width="500" allowfullscreen="" frameborder="0"></iframe></p>
<p>Tim Schaub and Andreas Hocever closed out the day with an overview and demonstration of OpenLayers 3.</p>
<p><iframe src="http://player.vimeo.com/video/67308982" height="281" width="500" allowfullscreen="" frameborder="0"></iframe></p>
<p>We&#8217;re sorry to say we didn&#8217;t catch everything on video, but we are happy to share the slides from all of our other presentations:</p>
<ul>
<li>Tim Schaub and Andreas Hocever: <a href="http://tschaub.net/say-hello-to-ol3/">Say Hello to OpenLayers 3</a></li>
<li>Paul Ramsey: <a href="http://blog.opengeo.org/wp-content/uploads/2013/05/foss4gna2013-pointcloud.pdf">LIDAR in PostgreSQL with PointCloud</a></li>
<li>Alyssa Wright: <a href="http://www.slideshare.net/apw217/foss4g-naopenthreadsfinal">OpenThreads, the community of open source mailing lists</a></li>
<li>Juan Marin: <a href="http://blog.opengeo.org/wp-content/uploads/2013/05/GeoServerProduction.pdf">GeoServer In Production</a></li>
<li>David Winsow: <a href="http://blog.opengeo.org/wp-content/uploads/2013/05/foss4gna2013-geoserver-css.pdf">GeoServer CSS Module</a></li>
<li>Tim Schaub and Justin Deoliveira: <a href="http://blog.opengeo.org/wp-content/uploads/2013/05/Scripting-GeoServer-with-GeoScript.pdf">Scripting GeoServer with GeoScript</a></li>
<li>Paul Ramsey: <a href="http://blog.opengeo.org/wp-content/uploads/2013/05/foss4gna2013-postgis-frenzy.pdf">PostGIS Feature Frenzy</a></li>
<li>Justin Deoliveira: <a href="http://blog.opengeo.org/wp-content/uploads/2013/05/State-of-GeoServer-2013.pdf">The State of GeoServer 2013</a></li>
</ul>
<p>We had a great week in Minneapolis and are happy to see the North America conference continue to grow. Without fail, the FOSS4G community puts together the most interesting and informative conference of the year. FOSS4G-NA 2013 certainly lived up to our expecations. If you had a conversation with someone at our booth, or at a presentation, and would like to follow up please feel free to <a href="http://mkto-g0079.com/track?type=click&amp;enid=bWFpbGluZ2lkPW9wZW5wbGFuc0JldGFjdXN0LS0tLTEwODMtcHJvZC0xMTcmbWVzc2FnZWlkPTAmZGF0YWJhc2VpZD0xMTcmc2VyaWFsPTEyNjQ1NTY0NjcmZW1haWxpZD1kZHVib3Zza3lAb3Blbmdlby5vcmcmdXNlcmlkPTAmZXh0cmE9JiYm&amp;&amp;&amp;http://opengeo.org/about/contact/?mkt_tok=3RkMMJWWfF9wsRow5%2FmYJoDpwmWGd5mht7VzDtPj1OY6hBkuKr%2BJK1TtuMFUGpsqOOaOBAwAH5Fv0w%3D%3D" target="_blank">contact us</a>. See you in <a href="http://2013.foss4g.org/">Nottingham</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opengeo.org/2013/05/31/presentations-from-foss4g-na-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing Mapmeter: a new tool for analyzing geospatial deployments</title>
		<link>http://blog.opengeo.org/2013/05/22/announcing-mapmeter-a-new-tool-for-analyzing-geospatial-deployments/</link>
		<comments>http://blog.opengeo.org/2013/05/22/announcing-mapmeter-a-new-tool-for-analyzing-geospatial-deployments/#comments</comments>
		<pubDate>Wed, 22 May 2013 16:02:30 +0000</pubDate>
		<dc:creator>Alyssa Wright</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[mapmeter]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[foss4g-na]]></category>

		<guid isPermaLink="false">http://blog.opengeo.org/?p=5112</guid>
		<description><![CDATA[This week at FOSS4G-North America 2013 in Minneapolis, we are excited to announce a full public beta of our new product. What we’ve previously referred to as “The Enterprise Console,” is now Mapmeter, a full administration and management tool for analyzing GeoServer systems. Mapmeter enables organizations to monitor the health of production deployments, optimize applications [...]]]></description>
				<content:encoded><![CDATA[<p dir="ltr"><a href="http://blog.opengeo.org/wp-content/uploads/2013/05/mapmeter-logo-black.png"><img class="alignright size-full wp-image-5113" style="border: 15px solid white;" alt="mapmeter-logo-black" src="http://blog.opengeo.org/wp-content/uploads/2013/05/mapmeter-logo-black.png" width="286" height="50" /></a>This week at <a href="http://foss4g-na.org/">FOSS4G-North America 2013</a> in Minneapolis, we are excited to announce a full public beta of our new product. What we’ve previously referred to as “<a href="http://www.slideshare.net/apw217/awright-fedgeo">The Enterprise Console</a>,” is now <a href="http://mapmeter.com">Mapmeter</a>, a full administration and management tool for analyzing GeoServer systems.</p>
<p dir="ltr">Mapmeter enables organizations to monitor the health of production deployments, optimize applications during development and diagnose critical issues. With these details, administrators and managers can better — and more cost effectively — make decisions about their geospatial deployments. With Mapmeter, spatial monitoring and reporting become a primary component in your spatial IT workflow.</p>
<p dir="ltr">You may have heard us talk about this product in recent months. We started with an announcement at <a href="http://www.slideshare.net/apw217/awright-fedgeo">FedGeo</a>, then <a href="http://opengeo.org/about/team/alyssa.wright/">Alyssa Wright</a> showed a live demo with <a href="http://www.youtube.com/watch?v=mdko6_KBQCA">James Fee</a>, and some of you were able to get in on a private beta. With the help and feedback of our early testers, we are now able to open up the software to all.</p>
<p dir="ltr">If you want to learn more or see a demo, please join us for the Mapmeter launch at Sponsor Day at FOSS4G-North America at 9 a.m. Friday, May 24 (look for the OpenGeo room). Sponsor Day is free, but you need to <a href="http://foss4g-na.org/sponsor-day/">register</a>. We’ll also be holding office hours at our FOSS4G North America booth today (5/22/2013) from 2:00pm to 3:00pm.</p>
<p dir="ltr">If you won’t be able to join us in Minneapolis, head over to <a href="http://mapmeter.com">http://mapmeter.com</a> to learn more about these exciting new features, connect with the development team and join us for this beta program.</p>
<p>We hope you’re as excited as we are about Mapmeter! If you have questions, please <a href="http://opengeo.org/about/contact/">contact us</a>. You can also <a href="mailto:help@mapmeter.com">contact the Mapmeter team directly</a> for personalized help with the public beta.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opengeo.org/2013/05/22/announcing-mapmeter-a-new-tool-for-analyzing-geospatial-deployments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Job Postings</title>
		<link>http://blog.opengeo.org/2013/05/20/new-job-postings/</link>
		<comments>http://blog.opengeo.org/2013/05/20/new-job-postings/#comments</comments>
		<pubDate>Mon, 20 May 2013 19:15:40 +0000</pubDate>
		<dc:creator>David Dubovsky</dc:creator>
				<category><![CDATA[Job Board]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[job posts]]></category>

		<guid isPermaLink="false">http://blog.opengeo.org/?p=5104</guid>
		<description><![CDATA[OpenGeo is looking for talented people to join our team. We offer interesting technical work, competitive salaries, great benefits, and a fantastic working environment. Most importantly we challenge our employees to build the best open source and interoperable tools for spatial data on the web. We added a few new posts this week, if any look like a [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.opengeo.org/wp-content/uploads/2013/02/hiring.png"><img class="alignright  wp-image-4536" alt="hiring" src="http://blog.opengeo.org/wp-content/uploads/2013/02/hiring.png" width="144" height="111" /></a>OpenGeo is looking for talented people to join our team. We offer interesting technical work, competitive salaries, great benefits, and a fantastic working environment. Most importantly we challenge our employees to build the best open source and interoperable tools for spatial data on the web. We added a few new posts this week, if any look like a fit for you, please apply!</p>
<div>
<p>Here&#8217;s a list of our open positions:</p>
<p><a href="http://opengeo.org/about/careers/ux-developer/"><strong>UX Developer</strong> </a>-  We’re seeking a talented user experience developer to design and implement creative user interfaces for our innovative open source geospatial software.</p>
<p><strong><a href="http://opengeo.org/about/careers/support-manager/">Support Manager</a> </strong>-  OpenGeo is looking for a support manager to ensure that customers large and small are familiarized with our software, properly trained in its function, and supported if anything should go wrong. The ability to think quickly and communicate clearly in a fast-paced environment is essential. Enthusiastic problem-solving skills and a desire to be engaged at all levels of a problem are even better.</p>
<p><strong><a href="http://opengeo.org/about/careers/project-manager/">Software Project Manager</a></strong> -  OpenGeo is seeking a skilled Software Project Manager to help us bring open source software to governments, commercial enterprises, NGOs, and other organizations around the world.</p>
<p><strong><a href="http://opengeo.org/about/careers/java-developer/">Java Developer</a> - </strong>OpenGeo is seeking skilled software engineers interested in helping us bring open source software to organizations around the world. Our team improves the open source components underlying the OpenGeo Suite, allowing a wide variety of customers to share and edit data using open standards.</p>
<p><a href="http://opengeo.org/about/careers/front-end-developer/"><strong>Front End Developer</strong> </a>-  We’re looking for someone who is ready to work with peers in design and engineering to create pixel-perfect interfaces across a range of projects and products. You’ll own the code-base, work on the hard problems, build your ideas into reality, and help determine best practices throughout our organization.</p>
<p><strong></strong><strong><a href="http://opengeo.org/about/careers/acct-manager-feb2013/" target="_blank">Sales Account Manager</a> </strong>– Our current (and future) clients are looking to open source to solve their spatial IT needs. Our account managers help commercial enterprises and federal clients use our innovative, open source geospatial software as efficiently and effectively as possible, allowing them to get more than ever out of their geospatial instances.</p>
</div>
<p><a href="http://opengeo.org/about/careers/" target="_blank">Here’s the full list</a>, please apply and/or spread the word!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opengeo.org/2013/05/20/new-job-postings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenGeo Emerges</title>
		<link>http://blog.opengeo.org/2013/05/15/opengeo-emerges/</link>
		<comments>http://blog.opengeo.org/2013/05/15/opengeo-emerges/#comments</comments>
		<pubDate>Wed, 15 May 2013 18:10:49 +0000</pubDate>
		<dc:creator>Eddie Pickle</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://blog.opengeo.org/?p=5085</guid>
		<description><![CDATA[This week OpenGeo took an exciting and important step forward as an organization. We&#8217;ve taken on investment and spun out from OpenPlans, our long time parent organization, to establish ourselves as an independent company. Our growth and this successful step out on our own are the result of our amazing team and the success of [...]]]></description>
				<content:encoded><![CDATA[<p>This week OpenGeo took an exciting and important step forward as an organization. We&#8217;ve taken on investment and spun out from <a href="http://openplans.org/">OpenPlans</a>, our long time parent organization, to establish ourselves as an independent company. Our growth and this successful step out on our own are the result of our amazing team and the success of open source geospatial software that we&#8217;ve been working on for over ten years.</p>
<p><a href="http://vanedgecapital.com/">Vanedge Capital</a>, a Vancouver-based venture capital firm, led the Series A round of investment that made this possible. We are truly excited to begin a partnership with Vanedge, an innovative fund led by partners who know how to grow and manage software technology companies.</p>
<p>This investment provides the capital we need to meet our objectives and continue to develop innovative technologies. If you’re a regular reader of this blog or have seen us lately at conferences or events, you know about the ambitious projects we’ve been working on: through-the-web-processing, breaking out of the GIS work-flow with<a href="http://opengeo.org/about/videos/spatialit/"> Spatial IT</a>,<a href="http://console.opengeo.org/"> geospatial web-analytics</a> and<a href="http://opengeo.org/publications/distributedversioning/"> distributed versioning for geospatial</a> – to name a few. This type of development requires not just the strong technical skills and forward-looking leadership that our team has, but it also requires resources, which Vanedge’s investment provides.</p>
<p>This investment also allows us to achieve our long-planned separation from OpenPlans, which founded and incubated us. We are grateful for the support and vision of OpenPlans over the years. And, since OpenPlans remains an investor in our new company, we’re looking forward to our continued partnership with them.</p>
<p>Our mission remains the same: to build the highest quality software for location and mapping, available to all. This investment gives us a stronger base of resources to support the open source communities we work with. We remain committed to the open source principles of collaboration, transparency, and freedom. We’ll be doing even more to develop the best geospatial tools while supporting the open source communities and our customers alike.</p>
<p>Look for more from us about the future of Spatial IT and how we can help you get there.</p>
<p>Find out more about this important <a href="http://opengeo.org/about/media/20130515-opengeolaunch/">step forward</a> and please <a href="http://opengeo.org/about/contact/">contact us</a> if you have any questions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opengeo.org/2013/05/15/opengeo-emerges/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>GeoServer in a clustered configuration (part 2)</title>
		<link>http://blog.opengeo.org/2013/04/30/geoserver-in-a-clustered-configuration-part-2/</link>
		<comments>http://blog.opengeo.org/2013/04/30/geoserver-in-a-clustered-configuration-part-2/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 21:04:57 +0000</pubDate>
		<dc:creator>Mike Pumphrey</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[GeoServer]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[availability]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[geoserver]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Jetty]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://blog.opengeo.org/?p=4970</guid>
		<description><![CDATA[In our last post on clustering, we talked about the theory behind some different options for clustering. In this post, we&#8217;ll go into an example of clustering, taken from our recent experience with one of our OpenGeo Suite Enterprise clients. If you&#8217;ll be attending FOSS4G-NA and want to learn more about clustering and GeoServer consider attending our GeoServer [...]]]></description>
				<content:encoded><![CDATA[<p>In our <a href="http://blog.opengeo.org/2013/04/18/geoserver-in-a-clustered-configuration-part-1/">last post on clustering</a>, we talked about the theory behind some different options for clustering. In this post, we&#8217;ll go into an example of clustering, taken from our recent experience with one of our <a href="http://opengeo.org/products/suite/" target="_blank">OpenGeo Suite Enterprise</a> clients. If you&#8217;ll be attending <a href="http://foss4g-na.org/">FOSS4G-NA</a> and want to learn more about clustering and GeoServer consider attending our <a href="https://m360.mngislis.org/event/session.aspx?id=86846">GeoServer training</a> and Juan Marin&#8217;s GeoServer in Production presentation (scheduled for 5/23/2013 at 11:30 am).</p>
<h2>Clustering Scenario</h2>
<p>In this following scenario, we will work through the installation and configuration of two GeoServers each inside their own servlet container instances on the same machine. Each servlet container will use the same JRE and the same container binaries (Apache Tomcat 7), but they will have independent configurations that allow them to run on different ports. These two GeoServer/Tomcat instances will be fronted by a local software proxy called <a title="HAProxy" href="http://haproxy.1wt.eu/" target="_blank">HAProxy</a> which acts as a HTTP/TCP load balancer. Load balancer configurations provide very basic &#8220;<a href="http://en.wikipedia.org/wiki/Round-robin_DNS" target="_blank">round robin</a>&#8221; balancing of GeoServers. More sophisticated load-balancing configurations are possible, but are beyond the scope of this example. All GeoServers will be deployed as WAR files placed into each of the Tomcat <code>webapps</code> directories. It is possible to have multiple instances of Tomcat share a single web-application through the use of contexts. This is useful if you anticipate your web-application (GeoServer) will be changed/updated frequently, but isn&#8217;t necessary.<span id="more-4970"></span></p>
<h2>Implementation</h2>
<p>The following steps will walk through the installation and configuration of a basic cluster containing two GeoServers in separate Tomcat servlet containers, behind an HAProxy load-balancer/proxy on the same machine (high-performance). The steps are:</p>
<ol>
<li>Download and unpack Tomcat binaries</li>
<li>Create individual Tomcat instances</li>
<li>Start Tomcat instances and deploy GeoServer applications</li>
<li>Install and configure load balancer / proxy server</li>
</ol>
<p>Following this walk-through, we will discuss other options for and extensions of this configuration such as high-availability, alternate proxy tools/configurations, database-backed catalogs, and triggered configuration reloads.</p>
<h3>Download and unpack Tomcat binaries</h3>
<ol>
<li>Start by downloading a binary distribution of Tomcat to your machine. This example uses the latest version (7.0.39 at the time of writing) as a <code>.tar.gz</code> file from <a href="http://tomcat.apache.org/download-70.cgi" target="_blank">http://tomcat.apache.org/download-70.cgi</a>.</li>
<li>Unpack this archive to a suitable location: In this example the entire contents of the archive are extracted to <code>/var/tomcat</code>. By convention, we&#8217;ll refer to this directory as <code>$CATALINA_HOME</code>.</li>
</ol>
<h3>Create individual Tomcat instances</h3>
<p>Next we&#8217;ll make two directories for two separate instances of Tomcat to run from. Both instances will use the same Tomcat binaries from the directory created above; the directories created here will just hold the logs and configuration for each of our instances. In this example we&#8217;ll make two <em>instance</em> directories, <code>/var/tomcat1</code> and <code>/var/tomcat2</code>. These will be referred to as <code>$CATALINA_BASE</code> directories. Each of these directories needs a basic structure and some initial content to host a Tomcat instance. Run the following commands (or a variation thereof) to create the basic directory structure.</p>
<pre># mkdir /var/tomcat1/conf
# mkdir /var/tomcat1/logs
# mkdir /var/tomcat1/temp
# mkdir /var/tomcat1/webapps
# mkdir /var/tomcat1/work
# mkdir /var/tomcat2/conf
# mkdir /var/tomcat2/logs
# mkdir /var/tomcat2/temp
# mkdir /var/tomcat2/webapps
# mkdir /var/tomcat2/work</pre>
<p>Each Tomcat instance needs two configuration files to start with that define how the service will run (name, host(s), and ports). Copy the files <code>server.xml</code> and web.xml from the <code>$CATALINA_HOME/conf</code> directory into each of the <code>$CATALINA_BASE/conf</code> directories. We&#8217;ll need to edit each of the <code>server.xml</code> files so that each Tomcat instance runs and shuts down on different ports. In each file, look for lines like:</p>
<pre>&lt;Server port="8005" shutdown="SHUTDOWN"&gt;

&lt;Connector port="8080" protocol = "HTTP/1.1"
 connectionTimeout="20000"
 redirectPort="8443" /&gt;</pre>
<p>Change these port values. The values can typically be any unused port above 1024. Both the SHUTDOWN and the HTTP Connector ports must be different, and the values for these ports in <code>tomcat1/conf/server.xml</code> must be different than those in <code>tomcat2/conf/server.xml</code>. For example:</p>
<ul>
<li>On tomcat1: SHUTDOWN on port 8005, serve HTTP requests on 8085</li>
<li>On tomcat2: SHUTDOWN on port 8006, serve HTTP requests on 8086</li>
</ul>
<h3>Start Tomcat instances and deploy GeoServer applications</h3>
<p>Once configured, we&#8217;re ready to start up the servlet containers. We can do this by running a series of commands from the terminal, however it might be more pragmatic to write a small script to accomplish this since these steps often need to be repeated. Create two scripts: <code>/var/tomcat1/tomcat1.sh</code> and <code>/var/tomcat2/tomcat2.sh</code>. These scripts will be identical except for the value of the <code>$CATALINA_BASE</code> variable.</p>
<pre>export CATALINA_HOME=/var/apache
export CATALINA_BASE=/var/apache1
export CATALINA_TMPDIR=$CATALINA_BASE/temp
export JRE_HOME=/usr/lib/jvm/java-6-openjre/jre
export CLASSPATH=/var/tomcat/bin/bootstrap.jar;/var/tomcat/bin/tomcat-juli.jar

$CATALINA_HOME/bin/catalina.sh start</pre>
<p>These scripts will perform the following functions:</p>
<ul>
<li>Define the location of the Tomcat binaries in <code>$CATALINA_HOME</code></li>
<li>Set the location for the current container in <code>$CATALINA_BASE</code> and <code>$CATALINA_TMPDIR</code></li>
<li>Define the location of the JRE for Tomcat to use (we&#8217;re assuming Java is installed)</li>
<li>Define the CLASSPATH to the core Tomcat JARs</li>
<li>Export each environment variable so they are available to the Tomcat start-up calls</li>
<li>Run the Catalina control script to start the Tomcat service</li>
</ul>
<p>With the files created, run both <code>/var/tomcat1/tomcat1.sh</code> and <code>/var/tomcat2/tomcat2.sh</code> to configure and start the two services. Note that you&#8217;ll need to make the files executable. To confirm that the services started correctly, you can tail the <code>catalina.out</code> files in <code>/var/tomcat1/logs</code> and <code>/var/tomcat2/logs</code>. Next, copy the <code>geoserver.war</code> file (or unpacked application directory) into each of the <code>/var/tomcat1/webapps</code> and <code>/var/tomcat2/webapps</code> directories. The applications should automatically deploy. Confirm that you have two GeoServers running independently by browsing to each one on their respective port.</p>
<div id="attachment_5017" class="wp-caption aligncenter" style="width: 1034px"><img class="size-large wp-image-5017" alt="Two GeoServers" src="http://blog.opengeo.org/wp-content/uploads/2013/04/twogeoservers-1024x317.png" width="1024" height="317" /><p class="wp-caption-text">Two GeoServers</p></div>
<h3>Install and configure load balancer / proxy server</h3>
<p>Install a web server that is capable of acting as a load balancer in front of the cluster. In this example we use HAProxy installed on Ubuntu Linux using standard package management. That said, rhere are many other tools you can use as a front-end load balancer / proxy server other than HAProxy. One example would be Apache HTTP with mod_proxy_http and mod_proxy_balancer. Microsoft IIS can also sit in front of Tomcat instances using the Network Load Balancer (NLB) or Application Request Routing (ARR). Configure haproxy to act as a load balancer using the following sample in /etc/haproxy/haproxy.cfg. Stop haproxy, copy / edit the config file in place, and then restart.</p>
<pre>global
    maxconn 4096
    user haproxy
    group haproxy
    daemon

defaults
    log global
    mode http
    option httplog
    option dontlogpull
    retries 3
    option redispatch
    maxconn 2000
    contimeout 5000
    clitimeout 50000
    srvtimeout 50000
    log 127.0.0.1 local0
    log 127.0.0.1 local7 debug

frontend http-in
    bind *:80
    default_backend geoserver

backend GeoServer
    balance roundrobin
    server GeoServer1 localhost:8085 maxconn 32 check
    server GeoServer2 localhost:8086 maxconn 32 check
    ##option httpchk
    ##option forwardfor

listen admin
    bind *:8080
    stats enable</pre>
<p>(Note that these are very basic configurations. Your system administrator will have a better idea of what is the norm for your organization.) There are a few ways you can confirm that HAProxy is working and balancing the clustered back-ends as anticipated. 1) Browse to the HAProxy admin page at <code>http://&lt;server&gt;:8080/haproxy?stats</code>:</p>
<div id="attachment_5021" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.opengeo.org/wp-content/uploads/2013/04/haproxystats.png"><img class="size-medium wp-image-5021" alt="HAProxy stats" src="http://blog.opengeo.org/wp-content/uploads/2013/04/haproxystats-300x171.png" width="300" height="171" /></a><p class="wp-caption-text">HAProxy stats</p></div>
<p>In the figure above we see that HAProxy recognizes the GeoServer backend with two members GeoServer1 and GeoServer2. 2) You might also make a noticeable configuration to one or GeoSevers and observe that the single proxy URL is requesting data from all members of the backend. For example, a change to a single SLD file, and then requesting a layer that makes use of that style through HAProxy confirms that both of our GeoServers are handling requests.</p>
<div id="attachment_5022" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.opengeo.org/wp-content/uploads/2013/04/conflictingstyles.png"><img class="size-medium wp-image-5022" alt="Conflicting styles from two different GeoServers through HAProxy" src="http://blog.opengeo.org/wp-content/uploads/2013/04/conflictingstyles-300x160.png" width="300" height="160" /></a><p class="wp-caption-text">Conflicting styles from two different GeoServers through HAProxy</p></div>
<h2>A Common Data Directory</h2>
<p>Normally, GeoServer data directories in a cluster will be identical in content. In this example we will set a common data directory for all cluster members using a context parameter in the <code>web.xml</code> file of each GeoServer in our cluster. You can <a href="http://suite.opengeo.org/opengeo-docs/geoserver/datadirectory/data-dir-setting.html" target="_blank">specify the GeoServer data directory location several other ways</a>. Make a new directory for your shared GeoServer Data Directory.</p>
<pre># mkdir /geoserver_data</pre>
<p>Copy a template data directory into the new location. This step is optional. As long as the base data directory exists, GeoServer will create the basic configurations it needs if they&#8217;re not found on start-up. It&#8217;s just a bit more painless for this example if they are where we expect them.</p>
<pre># cp -r /var/tomcat1/webapps/geoserver/data* /geoserver_data</pre>
<p>Stop the two GeoServer / Tomcat instances so we can reconfigure our data directory locations, either by killing the identified pids for the java processes that our GeoServers are running under, or (in a more sophisticated installation) using a service. Update the <code>web.xml</code> file in each web application <code>WEB-INF</code> directory. This file typically lives at <code>$CATALINA_HOME/webapps/geoserver/WEB-INF/web.xml</code>. Make four changes to each file:</p>
<ul>
<li>Specify the new location of the <code>GEOSERVER_DATA_DIR</code></li>
<li>Specify a <code>GEOSERVER_LOG_LOCATION</code> for this particular instance to log to. This will avoid collisions with the other GeoServer nodes in the cluster writing to the same location. For example, set to <code>/geoserver_data/logs/geoserver_tomcat1.log</code></li>
<li>Set <code>GWC_DISKQUOTA_DISABLED</code> to <code>true</code>. This will avoid collisions with the other GeoServer nodes&#8217; GWCs writing disk use information to common locations.</li>
<li>Set <code>GWC_METASTORE_DISABLED</code> to <code>true</code>. This will avoid collisions with the other GeoServer nodes&#8217; GWCs writing cache status information to common locations.</li>
</ul>
<h2>Extending These Examples</h2>
<p>This document is intended as <em>just an example</em> of setting up GeoServer in a clustered configuration, designed to move users towards a more scalable GeoServer installation, but might not be suitable for production in all environments. Future versions and alternate scenarios will take into consideration:</p>
<ul>
<li>Scaling GeoServer horizontally (on multiple machines)</li>
<li>Hybrids of vertically and horizontally scaled instances</li>
<li>Better ways to manage and configure multiple servlet containers (Tomcat) and web applications (GeoServer)</li>
</ul>
<p><em>What sort of GeoServer clustering environments are you interested in setting up? Let us know in the comments below.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opengeo.org/2013/04/30/geoserver-in-a-clustered-configuration-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Alpha releases</title>
		<link>http://blog.opengeo.org/2013/04/24/alpha-releases/</link>
		<comments>http://blog.opengeo.org/2013/04/24/alpha-releases/#comments</comments>
		<pubDate>Wed, 24 Apr 2013 19:47:33 +0000</pubDate>
		<dc:creator>Chris Holmes</dc:creator>
				<category><![CDATA[OpenLayers]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[alpha]]></category>
		<category><![CDATA[openlayers]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://blog.opengeo.org/?p=5042</guid>
		<description><![CDATA[One thing I love about open source development is the &#8216;alpha&#8217; release. Last week was an exciting week of alphas for OpenGeo, both OpenLayers 3.0 and GeoGit had their first releases and launched new websites. The two websites are admittedly not very sophisticated—I made the geogit.org with GitHub&#8217;s page generator and Andreas pulled together ol3js.org with Bootstrap—but awesome websites can come later. The point [...]]]></description>
				<content:encoded><![CDATA[<p><img class="  alignright" alt="openlayers3" src="http://opengeo.org/images/ol30.png" width="242" height="48" /></p>
<p>One thing I love about open source development is the &#8216;alpha&#8217; release.</p>
<p>Last week was an exciting week of alphas for OpenGeo, both <a href="http://ol3js.org/">OpenLayers 3.0</a> and <a href="http://geogit.org/">GeoGit</a> had their first releases and launched new websites. The two websites are admittedly not very sophisticated—I made the <a href="http://geogit.org">geogit.org</a> with GitHub&#8217;s <a href="https://github.com/blog/1081-instantly-beautiful-project-pages">page generator</a> and <a href="http://opengeo.org/about/team/andreas.hocevar/">Andreas</a> pulled together <a href="http://ol3js.org">ol3js.org</a> with <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>—but awesome websites can come later. The point of these alpha releases is to get something out in the world and widen the open source process to new users and potential contributors.</p>
<p>Alpha releases are rarely seen in proprietary software development since software in an alpha state is generally quite buggy. To quote <a href="https://en.wikipedia.org/wiki/Software_release_life_cycle#Alpha">Wikipedia</a>: &#8221;alpha software can be unstable and could cause crashes or data loss.&#8221; At this point many would turn away and run as far from the software as possible but to me it&#8217;s an awesome thing, an understood pact between the developers and the users that says: &#8220;hey, we&#8217;re not perfect, and we know our software is far from perfect, but if you understand the risks we&#8217;d be really excited to show it to you.&#8221;</p>
<p>The process opens up a dialog of equals—not the typical consumer relationship, but a collaborative one. The user of alpha software actually has a responsibility to communicate when (not <em>if</em>) things go wrong and to tell the developers how it crashes, what important option isn&#8217;t there, how the installation fails, or even how the website is confusing. In this way, responsibility can grow from being an alpha user to include helping with documentation, improving the website, debugging problems, contributing patches, and eventually building major new features as a core developer. Indeed the point of the alpha release is to put a stake in the ground and open the process to gain feedback from others, allowing users and developers to build the future together. Everyone is expected to be a true participant, in the fullest sense of the word, with responsibilities as well as privileges as opposed to just a passive consumer.</p>
<p>We encourage you to check out both the <a href="http://ol3js.org/">OpenLayers 3.0</a> and <a href="http://geogit.org/">GeoGit</a> alpha releases and let the teams know what you think. OpenLayers in particular has a very solid core but is looking for practical input from real users. We think the projects show a lot of potential, and we&#8217;re excited for your feedback, encouragement, and even contributions. Don&#8217;t hesitate to jump in and join us as we build the geospatial future together.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opengeo.org/2013/04/24/alpha-releases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GeoServer in a clustered configuration (part 1)</title>
		<link>http://blog.opengeo.org/2013/04/18/geoserver-in-a-clustered-configuration-part-1/</link>
		<comments>http://blog.opengeo.org/2013/04/18/geoserver-in-a-clustered-configuration-part-1/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 15:26:54 +0000</pubDate>
		<dc:creator>Mike Pumphrey</dc:creator>
				<category><![CDATA[GeoServer]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[availability]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[geoserver]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Jetty]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://blog.opengeo.org/?p=4963</guid>
		<description><![CDATA[Recently, we helped one of our clients who wanted to set up a GeoServer cluster. There are different ways to accomplish clustering depending on your specific needs, but we thought it would be illustrative to show what we did in this particular situation. Keep in mind this is a specific treatment and fairly tailored. We [...]]]></description>
				<content:encoded><![CDATA[<p>Recently, we helped one of our clients who wanted to set up a GeoServer cluster. There are different ways to accomplish clustering depending on your specific needs, but we thought it would be illustrative to show what we did in this particular situation. Keep in mind this is a specific treatment and fairly tailored. We encourage you all to experiment with the newest features, but remember to do so in your testing environment!</p>
<p>We&#8217;ll start with some clustering theory and tips before launching into the actual details of how to do it.</p>
<h2>Background</h2>
<p>A computing cluster consists of two or more machines working together to provide a higher level of availability, reliability, and scalability than can be obtained from a single node. Nodes in a cluster are positioned behind a proxy server and/or load balancer that delegates requests to cluster members based on any one member’s ability/availability to handle load.</p>
<div id="attachment_4995" class="wp-caption aligncenter" style="width: 581px"><a href="http://blog.opengeo.org/wp-content/uploads/2013/04/clustertheory.png"><img class="size-full wp-image-4995" alt="Clustering" src="http://blog.opengeo.org/wp-content/uploads/2013/04/clustertheory.png" width="571" height="211" /></a><p class="wp-caption-text">Clustering</p></div>
<p>Similar to other applications with long-running in-memory states and high data I/O, GeoServer sees performance gains with two (or more) nodes clustered behind a load balancer—even with the slight overhead of the load balancer that sits in front of the cluster.</p>
<p>Generally, there are two complementary purposes for clustering GeoServer:</p>
<ul>
<li>To provide high-performance and/or throughput</li>
<li>To achieve high availability</li>
</ul>
<p>In the most demanding situations, GeoServer can be deployed in combinations of high-performance and high-availability instances.</p>
<h3>High-Performance Clusters</h3>
<p><strong>A high-performance GeoServer configuration deploys several instances of GeoServer on a single machine.</strong></p>
<div id="attachment_4996" class="wp-caption aligncenter" style="width: 365px"><a href="http://blog.opengeo.org/wp-content/uploads/2013/04/highperformancecluster.png"><img class="size-full wp-image-4996" alt="High-performance cluster" src="http://blog.opengeo.org/wp-content/uploads/2013/04/highperformancecluster.png" width="355" height="352" /></a><p class="wp-caption-text">High-performance cluster</p></div>
<p>Each GeoServer instance is deployed into its own servlet container (Tomcat, Jetty, etc.). Individual servlet containers are configured independently and spin up their own JVM, each with it&#8217;s own memory and processor allocations (borrowed from the pool of resources on the host machine). GeoServer&#8217;s memory and CPU runtime footprint are optimized for high throughput under heavy concurrency with such a deployment, but always consider that these different deployed units will compete for the physical server&#8217;s resources. To find the best balance we recommend, as always, to test for your particular scenario.</p>
<p>A load balancer or proxy fronts the cluster, and directs traffic to the member of the cluster most able to handle the current request. In this case, nodes will likely share the same server name or IP address, but listen for requests on different ports. For example:</p>
<p><em>Load Balancer @ http://&lt;server&gt;:80/&lt;alias&gt; forwards to one of:</em></p>
<ul>
<li><em>GeoServer 1 in Tomcat 1 @ http://&lt;server&gt;/geoserver:8081</em></li>
<li><em>GeoServer 2 in Tomcat 2 @ http://&lt;server&gt;/geoserver:8082</em></li>
<li><em>GeoServer 3 in Tomcat 3 @ http://&lt;server&gt;/geoserver:8083</em></li>
<li><em>GeoServer 4 in Tomcat 4 @ http://&lt;server&gt;/geoserver:8084</em></li>
</ul>
<p><strong>An approach that deploys multiple instances of GeoServer into the same servlet container is not recommended.</strong> In this case, since host resource allocation (to a common JVM) will not be sequestered as neatly, competition for those resources will occur, limiting the benefits.</p>
<p>Users might also consider using the built-in clustering capabilities found in Enterprise Application Servers (such as Oracle Weblogic or JBoss), however this is beyond the scope of this discussion.</p>
<h3>High-Availability Clusters</h3>
<p><strong>A high-availability implementation will spread several GeoServer instances across several machines (nodes) in a cluster.</strong> These nodes can be physical or virtual machines.</p>
<div id="attachment_4997" class="wp-caption aligncenter" style="width: 590px"><a href="http://blog.opengeo.org/wp-content/uploads/2013/04/highavailabilitycluster.png"><img class="size-full wp-image-4997" alt="High-availability cluster" src="http://blog.opengeo.org/wp-content/uploads/2013/04/highavailabilitycluster.png" width="580" height="300" /></a><p class="wp-caption-text">High-availability cluster</p></div>
<p>Nodes are normally located behind a load balancer that redirects traffic to any single GeoServer based on traffic volume and availability. In this case, nodes will likely be on different servers or IP addresses and listen for requests on the same port. For example:</p>
<p><em>Load Balancer @ http://&lt;server&gt;:80/&lt;alias&gt; forwards to one of:</em></p>
<ul>
<li><em>GeoServer 1 in Tomcat 1 @ http://&lt;server1&gt;/geoserver:8080</em></li>
<li><em>GeoServer 1 in Tomcat 1 @ http://&lt;server2&gt;/geoserver:8080</em></li>
<li><em>GeoServer 1 in Tomcat 1 @ http://&lt;server3&gt;/geoserver:8080</em></li>
</ul>
<h3>Data directory location and catalog reloads</h3>
<p>Some important considerations to be made when clustering several instances of GeoServer concern the location of the GeoServer data directory and a strategy for reloading all cluster members&#8217; data catalogs.</p>
<p><strong>The GeoServer data directory is the location in the file system where GeoServer stores its configuration information.</strong> The configuration defines things such as what data is served by GeoServer, where it is stored, and how services such as WFS and WMS interact with and serve the data. The data directory also contains a number of support files used by GeoServer for various purposes.</p>
<p>The spatial data accessed by GeoServer doesn’t need to reside within the GeoServer data directory, just <em>pointers</em> to the data locations. This should be obvious for data stored in spatial databases, which are certainly in different locations (on disk) and often on different machines; however the same is true for file-based spatial data. (<a href="http://suite.opengeo.org/opengeo-docs/geoserver/datadirectory/" target="_blank">Read more about the GeoServer data directory</a>.)</p>
<p><strong>GeoServer’s catalog is an in-memory representation of the configurations in the data directory.</strong> Storing the configurations in memory means that GeoServer can access this information faster than by reading these instructions off disk. However, this sometimes requires that the in-memory catalog be refreshed when configurations changes are made to the disk-based GeoServer data directory, or to the actual data served in GeoServer.</p>
<p>Unless catalog (re)configurations are largely static, or some amount of catalog discrepancy or availability is acceptable, <strong>a common GeoServer data directory location for all clustered instances is highly recommended.</strong></p>
<p>The location of the GeoServer data directory is stored in the <code>GEOSERVER_DATA_DIR</code> variable. It can be configured in one of three ways: in each instance&#8217;s <code>web.xml</code> file (<code>/webapps/geoserver/WEB-INF</code>), through a common environment variable, or through a parameter passed to the JVM in the container start-up command.</p>
<p>Some implementations have clustered GeoServer instances using separate data directories that are synchronized manually (low change frequency) and automatically (using rsync), but neither approach is as common or recommended as a shared data directory.</p>
<p>Regardless of the mechanism for synchronization, <strong>changes to the data directory and the in-memory catalog will normally be directed by one master GeoServer</strong>. This can be enforced by disabling the GeoServer user interface on all &#8220;slave&#8221; GeoServers or by configuring the front-end load balancer to only direct user interface requests to <code>/geoserver/web</code> to the master GeoServer.</p>
<p>Changes to the master GeoServer&#8217;s data catalog must be explicitly refreshed on slave instances. This can be accomplished manually through the GeoServer Admin web UI (<code>/geoserver/web</code>), or with some measure of automation (on a schedule, or after a trigger is fired) using GeoServer&#8217;s REST API (e.g. by sending a POST/PUT request to <code>/geoserver/rest/reload?recurse=true</code>).</p>
<h3>Clustering Enhancements</h3>
<p>Enhancements to our clustering story are coming! Specifically, in future releases of GeoServer the <strong>data directory will have the option to be database-backed</strong>.<strong> </strong>This means that a central configuration store can be queried more optimally than a file-based counterpart and doesn’t all need to be read into memory.</p>
<p>In the next post, we&#8217;ll go into the details on setting up a clustered instance. Remember, Enterprise: Platform clients and higher get <a title="OpenGeo Suite pricing" href="http://opengeo.org/products/suite/pricing/" target="_blank">custom clustering and deployment advice</a> included in their maintenance agreements.</p>
<p><em>Have you been looking at deploying GeoServer in a clustered environment? <a href="http://opengeo.org/about/contact/">Tell us about it</a>!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opengeo.org/2013/04/18/geoserver-in-a-clustered-configuration-part-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Why We Sprint</title>
		<link>http://blog.opengeo.org/2013/04/03/why-we-sprint/</link>
		<comments>http://blog.opengeo.org/2013/04/03/why-we-sprint/#comments</comments>
		<pubDate>Wed, 03 Apr 2013 16:42:24 +0000</pubDate>
		<dc:creator>Paul Ramsey</dc:creator>
				<category><![CDATA[Code Sprint]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[PostGIS]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[philosophy]]></category>

		<guid isPermaLink="false">http://blog.opengeo.org/?p=4966</guid>
		<description><![CDATA[I spent last week in Boston, attending an annual code sprint for C-based open source geospatial projects.  I&#8217;ve been doing this every year since 2008.  Since getting back, I&#8217;ve had to explain the event to several people, technical and non-technical, since the concept isn&#8217;t obvious at all. Open source development of characterized by some features [...]]]></description>
				<content:encoded><![CDATA[<p>I spent last week in Boston, attending an <a href="http://wiki.osgeo.org/wiki/Boston_Code_Sprint_2013">annual code sprint</a> for C-based open source geospatial projects.  I&#8217;ve been doing this every year since 2008.  Since getting back, I&#8217;ve had to explain the event to several people, technical and non-technical, since the concept isn&#8217;t obvious at all.</p>
<p><a href="http://blog.opengeo.org/wp-content/uploads/2013/04/p3.jpg"><img class="alignnone size-full wp-image-4980" alt="p3" src="http://blog.opengeo.org/wp-content/uploads/2013/04/p3.jpg" width="550" height="103" /></a></p>
<p>Open source development of characterized by some features that differ a great deal from traditional work environments:</p>
<ul>
<li>the developers work asynchronously, often in different time zones, usually in different locations,</li>
<li>the developers coordinate exclusively using text tools, like e-mail, issue tracking systems, and sometimes instant messaging</li>
</ul>
<p>Because there is no need to be in the same space with other developers, either physically or even temporally, the barriers to entry to a project are lowered. More people can participate than otherwise.</p>
<p><a href="http://blog.opengeo.org/wp-content/uploads/2013/04/p1.jpg"><img alt="p1" src="http://blog.opengeo.org/wp-content/uploads/2013/04/p1.jpg" width="550" height="101" /></a></p>
<p>However, there are disadvantages to working asynchronously and with text communications.</p>
<ul>
<li>asking for help when you get stuck can be time consuming, because your colleagues might be asleep at the moment when help would be most useful</li>
<li>issues of subtlety or complexity take a great deal of text to describe, and any misunderstandings on the part of a reader take even more text to correct</li>
<li>discussion of emotional issues can lead to conflict due to the limited emotional nuance in text communication</li>
</ul>
<p>A code sprint is a chance to work for a time with your open source colleagues &#8220;the old fashioned way&#8221;, face to face, on the same clock.</p>
<p><a href="http://blog.opengeo.org/wp-content/uploads/2013/04/p2.jpg"><img alt="p2" src="http://blog.opengeo.org/wp-content/uploads/2013/04/p2.jpg" width="550" height="102" /></a></p>
<p>Because everyone is together, and communications are high-bandwidth and high-fidelity, a code sprint is a great time for:</p>
<ul>
<li>planning and designing large scale changes to the code</li>
<li>designing new APIs or new user interfaces, and</li>
<li>triaging ticket lists to prepare for release</li>
</ul>
<p>I usually spend the first half of a sprint on communication-heavy tasks like the ones above. The second half I usually spend heads down on a hard piece of code.</p>
<p>If the right experts are around, code sprints are an excellent time to attack a new piece of code you don&#8217;t quite understand. Learning how a module works from the expert who wrote it is far faster than doing it alone at home.</p>
<p>And finally, having lunch and dinner and socializing usually provide the social space for unexpected topics to slip out and get a discussion, whether they be uncomfortable issues like dealing with a difficult team member or just a crazy feature idea that turns out to be not so crazy at all when discussed with the group.</p>
<p>If you have a chance to participate in a code sprint on a project you contribute to, don&#8217;t pass it up!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opengeo.org/2013/04/03/why-we-sprint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenGeo at FOSS4G North America, 2013</title>
		<link>http://blog.opengeo.org/2013/03/28/opengeo-at-foss4g-north-america-2013/</link>
		<comments>http://blog.opengeo.org/2013/03/28/opengeo-at-foss4g-north-america-2013/#comments</comments>
		<pubDate>Thu, 28 Mar 2013 20:26:34 +0000</pubDate>
		<dc:creator>David Dubovsky</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[foss4g]]></category>

		<guid isPermaLink="false">http://blog.opengeo.org/?p=4878</guid>
		<description><![CDATA[We always look forward to opportunities to get together with our friends, colleagues and clients to discuss what&#8217;s new in geospatial technology. The FOSS4G conferences of recent years have consistently offered the best opportunity to do just that; that&#8217;s one reason why we&#8217;re so excited about this year’s FOSS4G North America conference. Last year we had a pretty big hand [...]]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" alt="" src="http://foss4g-na.org/wp-content/themes/Archive/img/logo.png" width="189" height="189" />We always look forward to opportunities to get together with our friends, colleagues and clients to discuss what&#8217;s new in geospatial technology. The FOSS4G conferences of recent years have consistently offered the best opportunity to do just that; that&#8217;s one reason why we&#8217;re so excited about this year’s <a href="http://foss4g-na.org/">FOSS4G North America</a> conference.</p>
<p>Last year we had a pretty big hand in organizing the inaugural DC conference, the event went so well that it&#8217;s become an annual event. This year we&#8217;ve stepped back from the day-to-day planning but we&#8217;re still helping out on the program committee, and we&#8217;re happy to support the conference as <a href="http://foss4g-na.org/sponsor/">gold sponsors</a>.</p>
<p>We&#8217;ll be sending a pretty large contingent to Minneapolis; <strong>nine</strong> OpenGeo presentations were accepted and we&#8217;ll be teaching <strong>four</strong> <a href="https://m360.mngislis.org/frontend/event/schedule.aspx?EventId=76603">workshops</a>. We’re looking forward to an exciting (and busy!) week and hope to see you there. Don&#8217;t forget to <a href="http://foss4gna.eventbrite.com/">register</a> to attend; we hear spots are filling up quickly. And if you&#8217;ll be in Minneapolis make sure to come by our exhibition table, you never know who you’ll run into.</p>
<p>Interested in hearing us speak? Want to enroll in a workshop? The <a href="http://foss4g-na.org/wp-content/uploads/2013/03/PreliminaryProgram.pdf">preliminary program</a> has been announced and the times and dates of specific talks will be posted soon. Scroll down to see list of what we&#8217;ll be up to at FOSS4G-NA:</p>
<p><strong>OpenGeo FOSS4G-NA Presentations (Marriott City Center in Minneapolis, MN)</strong></p>
<ul>
<li>GeoServer CSS: <em>David Winslow</em></li>
<li>Say Hello to OpenLayers 3: <em>Tim Schaub &amp; Eric Lemoine of Camptocamp</em></li>
<li>OpenLayers 3: Vectors Redux: <em>Tim Schaub &amp; Andreas Hocevar</em></li>
<li>Scripting GeoServer with GeoScript: <em>Tim Schaub</em></li>
<li>LIDAR in PostgreSQL with PointCloud: <em>Paul Ramsey</em></li>
<li>GeoServer in Production: <em>Juan Marin</em></li>
<li>State of GeoServer: <em>Justin Deoliveira</em></li>
<li>PostGIS Feature Frenzy: <em>Paul Ramsey</em></li>
<li>Diversity in FOSS4G Mailing List: An Analysis: <em>Alyssa Wright &amp; Georgia Bullen of the Open Technology Institute</em></li>
</ul>
<p><strong>OpenGeo FOSS4G-NA <a href="https://m360.mngislis.org/frontend/event/schedule.aspx?EventId=76603">Workshops</a> (University of Minnesota in Minneapolis, MN)</strong></p>
<ul>
<li><span style="line-height: 13px;"><a href="https://m360.mngislis.org/event/session.aspx?id=86837">Introduction to PostGIS</a>, <em>Paul Ramsey</em></span></li>
<li><a href="https://m360.mngislis.org/event/session.aspx?id=86839">GeoNode, the Open source Geospatial CMS</a>, <em>Ian Schneider</em></li>
<li><a href="https://m360.mngislis.org/event/session.aspx?id=86850">OpenLayers Application Development</a>, <em>Tim Schaub</em></li>
<li><a href="https://m360.mngislis.org/event/session.aspx?id=86846">Introduction to GeoServer</a>, <em>Sam Smith</em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.opengeo.org/2013/03/28/opengeo-at-foss4g-north-america-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GeoScript in Action: Part One</title>
		<link>http://blog.opengeo.org/2013/03/27/geoscript-in-action-part-one/</link>
		<comments>http://blog.opengeo.org/2013/03/27/geoscript-in-action-part-one/#comments</comments>
		<pubDate>Wed, 27 Mar 2013 19:48:54 +0000</pubDate>
		<dc:creator>Ilya Rosenfeld</dc:creator>
				<category><![CDATA[GeoScript]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[geoscript]]></category>
		<category><![CDATA[solar]]></category>

		<guid isPermaLink="false">http://blog.opengeo.org/?p=4753</guid>
		<description><![CDATA[This is the first post of a three-part series dedicated to showing the versatility and functionality of GeoScript.  The rumors are true: GeoScript is pretty awesome. How awesome? We&#8217;ll let you be the judge. In this post we&#8217;ll focus on data exploration and show you how to create a few visualizations right from the GeoScript command line, but [...]]]></description>
				<content:encoded><![CDATA[<p><em>This is the first post of a three-part series dedicated to showing th</em><em>e versatility and functionality of </em><em>GeoScript. </em></p>
<p>The rumors are true: <a href="http://geoscript.org" target="_blank">GeoScript</a> is pretty awesome. How awesome? We&#8217;ll let you be the judge. In this post we&#8217;ll focus on data exploration and show you how to create a few visualizations right from the GeoScript command line, but GeoScript can do much more than that. In subsequent posts we&#8217;ll build up enough code and data to create other GeoScript products, then we&#8217;ll show how to easily refactor this code into processing web services. If you&#8217;d like to follow along with this post please <a href="http://geoscript.org/py/quickstart.html#quickstart" target="_blank">install GeoScript</a>. For the purposes of these exercises make sure that you download the <a href="http://gridlock.opengeo.org/geoscript/py/release/geoscript-1.3-latest.zip" target="_blank">latest version</a>. For our examples we&#8217;ll be using the <a href="http://geoscript.org/py/quickstart.html" target="_blank">Python flavor</a> of GeoScript. Make sure to keep the <a href="http://geoscript.org/py/api/index.html" target="_blank">API doc</a> close at hand and don&#8217;t hesitate to experiment. If you get stuck, please <a href="http://opengeo.org/about/contact/">contact us</a> and we&#8217;ll try to help you out.</p>
<p><strong>Getting the Source Data.</strong> We&#8217;ll be using solar resource data from the <a href="http://www.nrel.gov/gis/data_solar.html" target="_blank">National Renewable Energy Lab</a>. The data set contains direct normal irradiance (DNI) average values for the contiguous United States and Hawaii. If you want to find out more details should be contained within the <a href="http://www.nrel.gov/gis/cfm/data/GIS_Data_Technology_Specific/United_States/Solar/metadata/us_dni.shp.xml" target="_blank">metadata</a>. You can <a href="https://docs.google.com/file/d/0B8IEhW0csLRWQkNQYjF5NUNRMVU/edit?usp=sharing">download the entire data set</a> to work through the examples below. Unzip to a directory, navigate to it, and fire up the GeoScript shell. (If you see some diagnostic messages along the way, just ignore them and remember that GeoScript is a work in progress.) Let&#8217;s get started!</p>
<p><strong>Loading and Exploring Data. </strong>First, let&#8217;s load our two shapefiles into GeoServer:</p>
<pre>&gt;&gt;&gt; from geoscript.layer import Shapefile
&gt;&gt;&gt; solar_all_poly = Shapefile("solar_dni_polygons.shp")
&gt;&gt;&gt; states = Shapefile("usa_l48.shp")</pre>
<p><span id="more-4753"></span><br />
What&#8217;s the structure (schema) of the &#8216;solar&#8217; dataset and how many features does it contain?</p>
<pre>&gt;&gt;&gt; print(solar_all_poly.schema)
solar_dni_polygons [the_geom: MultiPolygon, ID: long, GRIDCODE: float, ANN_DNI: float, JAN: float, FEB: float, MAR: float, APR: float, MAY: float, JUN: float, JUL: float, AUG: float, SEP: float, OCT: float, NOV: float, DEC: float]
&gt;&gt;&gt; print(solar_all_poly.count())
91439</pre>
<p>If you want, you could print the <em>entire</em> &#8216;states&#8217; dataset, but watch out though, as the result will be a pretty big data dump.</p>
<pre>&gt;&gt;&gt; print list(states.features())
[usa_l48.1 {the_geom: MULTIPOLYGON (((-77.05354916699991 38.8816935760002, -77.05099573299992 38.87975426100007, -77.04814371899994 38.87760644600007, -77.04687615699987 38.876303672999995, -77.04721013299991 38.87585838300009, ... ... ...</pre>
<p>How about printing only the values of the STATE attribute? (You'll have to hit Enter twice after this command.)</p>
<pre>&gt;&gt;&gt; for f in states.features(): print f["STATE"]
... 
District of Columbia
U.S. Virgin Islands
Indiana
Pennsylvania
Rhode Island
Illinois
...</pre>
<p>Now, let&#8217;s draw the &#8216;states&#8217; layer. Nothing fancy for now, but let&#8217;s ensure correct image proportions by applying the &#8216;state&#8217; data&#8217;s inherent aspect ratio:</p>
<pre>&gt;&gt;&gt; from geoscript.render import draw
&gt;&gt;&gt; aspect_ratio = states.bounds().aspect
&gt;&gt;&gt; draw(states, size=(int(200 * aspect_ratio),200))</pre>
<p>&nbsp;</p>
<div id="attachment_4846" class="wp-caption aligncenter" style="width: 424px"><a href="http://blog.opengeo.org/wp-content/uploads/2013/03/states.png"><img class="size-full wp-image-4846 " alt="States layer" src="http://blog.opengeo.org/wp-content/uploads/2013/03/states.png" width="414" height="194" /></a><p class="wp-caption-text">States layer</p></div>
<p><strong>A Bit of Processing: Clipping. </strong>In the next few steps, we will clip our &#8216;solar&#8217; layer to a single state. First, let&#8217;s decide which state we are interested in:</p>
<pre>&gt;&gt;&gt; state = "Florida"</pre>
<p>Now, we will create a workspace to hold intermediate processing results in memory, otherwise they will be saved to disk:</p>
<pre>&gt;&gt;&gt; from geoscript.workspace import Memory
&gt;&gt;&gt; memory_workspace = Memory() 
&gt;&gt;&gt; state_geom_temp = memory_workspace.add(states)</pre>
<p>And then apply a filter to select the state we want and extract its geometry:</p>
<pre>&gt;&gt;&gt; state_geom = state_geom_temp.filter("STATE='%s'"%state).features().next().geom</pre>
<p>We&#8217;re set to run the Clip process. Before we do though, let&#8217;s take a look at all Processes available right here in the GeoScript shell. <em>(If you want to jump ahead a little, check out how the same <a href="http://suite.opengeo.org/opengeo-docs/processing/processes/vector/clip.html" target="_blank">Clip</a> process works as a Web Processing Service.)</em></p>
<pre>&gt;&gt;&gt; from geoscript.process import Process
&gt;&gt;&gt; print list(Process.list())
[(u'geo', u'length'), (u'geo', u'isEmpty'), (u'geo', u'contains'), (u'geo', u'disjoint'), (u'geo', u'intersects'), (u'geo', u'isClosed'), (u'geo', u'isValid'), (u'geo', u'buffer'), (u'geo', u'getY'), (u'geo', u'getX'), ... ... ...</pre>
<pre>&gt;&gt;&gt; process_clip = Process.lookup("vec:Clip")</pre>
<p>Which parameters does the Clip process expect and what does it return?</p>
<pre>&gt;&gt;&gt; print "Clip inputs: " + str(process_clip.inputs) 
Clip inputs: {u'clip': (u'clip', &lt;type 'com.vividsolutions.jts.geom.Geometry'&gt;, Geometry to use for clipping (in same CRS as input features)), u'features': (u'features', &lt;class 'geoscript.layer.layer.Layer'&gt;, Input feature collection)}
&gt;&gt;&gt; print "Clip outputs: " + str(process_clip.outputs)
Clip outputs: {u'result': (u'result', &lt;class 'geoscript.layer.layer.Layer'&gt;, Clipped feature collection)}</pre>
<p>Now that we know what to feed into the Clip process and what to expect in return, let's execute it. Please be patient, this process may take a bit longer than the previous commands.</p>
<pre>&gt;&gt;&gt; solar_state = memory_workspace.add(process_clip.run(clip=state_geom, features=solar_all_poly).get("result"))</pre>
<p>Let's check how many features were returned and draw the clipped output:</p>
<pre>&gt;&gt;&gt; print solar_state.count()
2294
&gt;&gt;&gt; draw(solar_state)</pre>
<div id="attachment_4842" class="wp-caption aligncenter" style="width: 296px"><a href="http://blog.opengeo.org/wp-content/uploads/2013/03/fla_state.png"><img class="wp-image-4842   " style="text-align: center;" alt="fla_state" src="http://blog.opengeo.org/wp-content/uploads/2013/03/fla_state.png" width="286" height="246" /></a><p class="wp-caption-text">Solar resource data clipped to the bounds of Florida</p></div>
<p><strong>Creating a Histogram. </strong>Let's say we are interested in the distribution of the total solar energy over the course of a year. A histogram is a simple way to visualize this distribution. We can build out histogram for the entire extent of our solar resource data, or for the single state we clipped out in the previous step. Let's stick with the single state for now.</p>
<pre>&gt;&gt;&gt; aoi = solar_state</pre>
<pre>&gt;&gt;&gt; from geoscript.plot import bar</pre>
<pre># create a list of attributes containing months
&gt;&gt;&gt; months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']</pre>
<pre># compute solar power potential totals for each month
&gt;&gt;&gt; month_values_per_feature = [[f.get(mo) for mo in months] for f in aoi.features()]
&gt;&gt;&gt; mo_totals = map(sum, zip(*month_values_per_feature))</pre>
<pre># assign an index to each month starting at 1
&gt;&gt;&gt; mo_numbers = range(1,len(months)+1)</pre>
<pre># build data for the histogram, print it and draw
&gt;&gt;&gt; histo_xy = zip(mo_numbers, mo_totals)
&gt;&gt;&gt; print histo_xy
[(1, 3016.6060161298988), (2, 3502.787616071399), (3, 3869.839870968297), (4, 3800.790388888799), (5, 3838.1435860215997), (6, 3984.095752778796), (7, 3930.639688172497), (8, 3797.606723118299), (9, 3542.7847666671996), ... ... ... 
&gt;&gt;&gt; bar.xy(histo_xy).show()</pre>
<div id="attachment_4844" class="wp-caption aligncenter" style="width: 307px"><a href="http://blog.opengeo.org/wp-content/uploads/2013/03/solar_fla.png"><img class="wp-image-4844 " alt="solar_fla" src="http://blog.opengeo.org/wp-content/uploads/2013/03/solar_fla.png" width="297" height="274" /></a><p class="wp-caption-text">Distribution of the total solar energy resource over the course of an (average) year in Florida</p></div>
<p><strong> Creating an Animation.</strong> We'll now create an animated GIF to show how average intensity of solar resource potential varies month-by-month, over a year.</p>
<pre>&gt;&gt;&gt; from geoscript.style import * 
&gt;&gt;&gt; from geoscript.render import GIF
&gt;&gt;&gt; from geoscript.util import interpolate</pre>
<pre># compute aspect ratio
&gt;&gt;&gt; bbox_aspect = aoi.bounds().aspect</pre>
<pre># compute classes based on global minmax across all months
&gt;&gt;&gt; classes = 100
&gt;&gt;&gt; minmax = zip(*[aoi.minmax(m) for m in months])</pre>
<pre># interpolate using exponential function
&gt;&gt;&gt; vals = interpolate(min(minmax[0]), max(minmax[1]), classes, "exp")
&gt;&gt;&gt; print vals
[3.4250456989, 3.44100384308852, 3.457216649642982, 3.4736881825021397, 3.4904225704576706, 3.507424008189102, 3.5246967573152643, 3.5422451474625136, 3.560073577350009 ... ... ...</pre>
<pre># initiate empty list for image frames and set color gradient bounds for our symbols
&gt;&gt;&gt; frames = []
&gt;&gt;&gt; gradient_color_min = 'yellow'
&gt;&gt;&gt; gradient_color_max = 'red'</pre>
<pre>&gt;&gt;&gt; for m in months:

        # generate buckets for fills and strokes
...     fills = Fill(gradient_color_min).interpolate(Fill(gradient_color_max), classes)
...     strokes = Stroke(gradient_color_min).interpolate(Stroke(gradient_color_max), classes)

        # build styles
...     styles = map(lambda x: x[0] + x[1], zip(strokes, fills))
...     x = zip(zip(vals[:-1], vals[1:]), styles)
...     parts = map(lambda t: t[1].where( m + ' BETWEEN %f and %f' % (t[0][0], t[0][1])), x) 
...     style = reduce(lambda x,y: x+y, parts)

        # draw a map, apply the style, correct aspect ratio and save it as a frame
...     frames.append(draw(aoi, style, size=(int(400*bbox_aspect), 400), format='gif'))
...</pre>
<pre># finally, generate the animation from the frames; 
# the image will be placed in the directory with your shapefiles
&gt;&gt;&gt; GIF.animated(frames, 'solar.gif', delay=50, loop=True)</pre>
<div id="attachment_4843" class="wp-caption aligncenter" style="width: 291px"><a href="http://blog.opengeo.org/wp-content/uploads/2013/03/solar_1.gif"><img class="wp-image-4843 " alt="florida" src="http://blog.opengeo.org/wp-content/uploads/2013/03/solar_1.gif" width="281" height="240" /></a><p class="wp-caption-text">Solar resource animation for Florida</p></div>
<p>Now that we've tested our logic on data for a single state, we can build an animation for the entire data set. To do this, simply reassign the aoi variable:</p>
<pre>&gt;&gt;&gt; aoi = solar_all_poly</pre>
<p>and then re-run the animation generation steps. You should end up with something that looks like this:</p>
<div id="attachment_4885" class="wp-caption aligncenter" style="width: 528px"><a href="http://blog.opengeo.org/wp-content/uploads/2013/03/solar.gif"><img class="wp-image-4885 " alt="solar" src="http://blog.opengeo.org/wp-content/uploads/2013/03/solar.gif" width="518" height="224" /></a><p class="wp-caption-text">Solar resource animation for the contiguous USA</p></div>
<p>Stay tuned! Next time, we'll five deeper into visualization and develop some processing services around this code and data.</p>
<p><em>Have you used GeoScript for a project? If so, please tell us about it. If not, what are you waiting for? Go <a href="http://geoscript.org" target="_blank">give it a try</a>!</em> <em>My s</em><em>pecial thanks for<a href="http://opengeo.org/about/team/justin.deoliveira/"> Justin Deoliveira</a> and <a href="http://opengeo.org/about/team/mike.pumphrey/">Mike Pumphrey</a> for handholding and sanity checks respectively.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opengeo.org/2013/03/27/geoscript-in-action-part-one/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
