<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wiki-SchuylerErle</id>
	<title>OSGeo - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wiki-SchuylerErle"/>
	<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/wiki/Special:Contributions/Wiki-SchuylerErle"/>
	<updated>2026-04-16T18:14:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.9</generator>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=New_York_Code_Sprint_2010&amp;diff=42529</id>
		<title>New York Code Sprint 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=New_York_Code_Sprint_2010&amp;diff=42529"/>
		<updated>2009-11-07T16:30:07Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
Get together project members to make decisions and tackle larger problems (as done last year at the [[Toronto Code Sprint 2009]]).  This code sprint is targeting members of the &amp;quot;C Tribe&amp;quot; (eg,  Mapserver, GRASS, GDAL, Proj, PostGIS, MapGuide). Other tribes are welcome to join the sprint, of course, but we hope that &amp;quot;C Tribe&amp;quot; members will give this event special consideration.&lt;br /&gt;
&lt;br /&gt;
== Venue ==&lt;br /&gt;
&lt;br /&gt;
The Open Planning Project and OpenGeo will be hosting the event this year, in a penthouse event room ([http://www.flickr.com/photos/philaestheta/3922525728/in/set-72157622375114194/ pic1], [http://www.flickr.com/photos/92995391@N00/4081335110/ pic2], [http://www.flickr.com/photos/92995391@N00/4080572085/ pic3], [http://www.flickr.com/photos/92995391@N00/4080570151/ pic4]) on the top floor of their offices ([http://maps.google.com/maps?q=148+Lafayette+Street+new+york Map]).&lt;br /&gt;
&lt;br /&gt;
[http://openplans.org/ The Open Planning Project]&amp;lt;br/&amp;gt;&lt;br /&gt;
148 Lafayette Street&amp;lt;br/&amp;gt;&lt;br /&gt;
New York, New York&amp;lt;br/&amp;gt;&lt;br /&gt;
10013, USA&amp;lt;br/&amp;gt;&lt;br /&gt;
Telephone: 212.796.4220&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Timing ==&lt;br /&gt;
&lt;br /&gt;
Duration: Four days (Saturday to Tuesday) from approximately 9am-4pm&lt;br /&gt;
&lt;br /&gt;
Dates: Dates are currently being decided. February and early March are again the candidate times, to provide hopefully the cheapest accommodation options.&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
&lt;br /&gt;
We will again be looking for sponsors to support food and fun for the sprinters as they work hard and play hard for four productive days. Each $750 sponsorship will be put towards lunch and dinner costs for the sprinters, and potentially bringing in sprinters who might otherwise be unable to attend. &lt;br /&gt;
&lt;br /&gt;
To sponsor, please contact Paul Ramsey (pramsey at cleverelephant dot ca) directly. &lt;br /&gt;
&lt;br /&gt;
== Hotel ==&lt;br /&gt;
&lt;br /&gt;
We are working on a room block at a hotel near the sprint site, more information as it becomes available.&lt;br /&gt;
&lt;br /&gt;
== Costs ==&lt;br /&gt;
&lt;br /&gt;
Participants should plan for the following costs:&lt;br /&gt;
&lt;br /&gt;
* Travel to New York, variable depending on where you are.&lt;br /&gt;
* Accommodation for four nights, $300 to $600 depending on what room you choose and whether you room share.&lt;br /&gt;
* Breakfast, dinner and other snacks.&lt;br /&gt;
* The sponsorship moneys will be put towards: lunches, dinners (?), travel for some sprinters (?), Saturday night social event (?).&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
Please join the mailing list at:&lt;br /&gt;
&lt;br /&gt;
http://lists.osgeo.org/mailman/listinfo/tosprint&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
We are planning for attendance of 20-40. Please add your name and the projects you are hoping to sprint on, if you have a strong intention to attend. &lt;br /&gt;
&lt;br /&gt;
* [[User:pwramsey3|Paul Ramsey]] (PostGIS, Mapserver, Proj)&lt;br /&gt;
* Frank Warmerdam (MapServer, GDAL, Proj)&lt;br /&gt;
* [[User:SchuylerErle|Schuyler Erle]]&lt;br /&gt;
&lt;br /&gt;
== Room Share ==&lt;br /&gt;
&lt;br /&gt;
If you would like to room share, &lt;br /&gt;
&lt;br /&gt;
# Reserve a room at the hotel, choosing a type with more than one bed.&lt;br /&gt;
# Put your name in this section, indicating the amount of space in your room.&lt;br /&gt;
&lt;br /&gt;
Put your names below:&lt;br /&gt;
&lt;br /&gt;
* Schuyler Erle (lives in Brooklyn, can host 1 or 2 guests)&lt;br /&gt;
* example entry: B has a triple room, needs two roommates.&lt;br /&gt;
&lt;br /&gt;
== Individual Preparation ==&lt;br /&gt;
&lt;br /&gt;
* Bring your own computer&lt;br /&gt;
* Install subversion and the compiler tools, and come with a working development environment if possible.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
* Is the New York Code Sprint just a coding event?&lt;br /&gt;
** Yes, a coding and documentation event. It is a working session for people who are already participants in open source projects.&lt;br /&gt;
* Will it be possible to present new projects during this event?&lt;br /&gt;
** No, this is not a presentation-oriented event. People will get together in small groups and work on areas of mutual interest within their projects.&lt;br /&gt;
&lt;br /&gt;
== Social Events ==&lt;br /&gt;
&lt;br /&gt;
* To be determined&lt;br /&gt;
&lt;br /&gt;
[[Category:Code Sprints]]&lt;br /&gt;
[[Category:Events]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Toronto_Code_Sprint_2009&amp;diff=36242</id>
		<title>Toronto Code Sprint 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Toronto_Code_Sprint_2009&amp;diff=36242"/>
		<updated>2009-03-07T06:37:47Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Participation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
Get together project members to make decisions and tackle larger problems, see the [[Toronto Code Sprint 2009 Agenda]].  We have chosen a mid-North American location because this code sprint is targeting members of the &amp;quot;C Tribe&amp;quot; (eg,  Mapserver, GRASS, GDAL, Proj, PostGIS, MapGuide) and many members of the &amp;quot;C Tribe&amp;quot; are clustered in the area. Toronto is also a major travel hub, for sprinters traveling from afar.  Other tribes are welcome to join the sprint, of course, but we hope that &amp;quot;C Tribe&amp;quot; members will give this event special consideration.&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
&lt;br /&gt;
We have received support from six sponsors, each providing a $500 sponsorship that will be put towards venue, internet and lunch costs.&lt;br /&gt;
&lt;br /&gt;
Thanks to our sponsors!&lt;br /&gt;
&lt;br /&gt;
* [http://www.greenwoodmap.com/ Rich Greenwood]&lt;br /&gt;
* [http://www.osgis.nl/index_en.htm OSGIS.nl]&lt;br /&gt;
* [http://www.coordinatesolutions.com Coordinate Solutions]&lt;br /&gt;
* [http://www.lizardtech.com/ LizardTech]&lt;br /&gt;
* [http://www.sjgeophysics.com/ SJ Geophysics]&lt;br /&gt;
* [http://qpublic.net/ qPublic.net]&lt;br /&gt;
&lt;br /&gt;
The event budget is available [http://spreadsheets.google.com/pub?key=plI7bw56S6qHPAj9OEsIMaQ here]. Any surplus at the end of the event will be turned over to OSGeo.&lt;br /&gt;
&lt;br /&gt;
== Timing ==&lt;br /&gt;
&lt;br /&gt;
Where: '''Rainbow Room''', Radisson Admiral Waterfront Hotel, Toronto, Ontario&lt;br /&gt;
&lt;br /&gt;
When: Saturday March 7 - Tuesday March 10, 2009.&lt;br /&gt;
&lt;br /&gt;
Duration: Four days from approximately 9am-4pm&lt;br /&gt;
&lt;br /&gt;
== Venue ==&lt;br /&gt;
&lt;br /&gt;
[http://www.radisson.com/torontoca_admiral Radisson Hotel Admiral Toronto-Harbourfront]&amp;lt;br/&amp;gt;&lt;br /&gt;
249 Queen's Quay West&amp;lt;br/&amp;gt;&lt;br /&gt;
Toronto, Ontario&amp;lt;br/&amp;gt;&lt;br /&gt;
M5J 2N5 , Canada&amp;lt;br/&amp;gt;&lt;br /&gt;
Reservations: 1-888-201-1718&amp;lt;br/&amp;gt;&lt;br /&gt;
Telephone: +01-416-203-3333&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax: +01-416-203-3100&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Radisson+Hotel+Admiral+Toronto-Harbourfront&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=58.337319,62.314453&amp;amp;ie=UTF8&amp;amp;ll=43.643156,-79.385662&amp;amp;spn=0.026428,0.030427&amp;amp;z=15 Map]&lt;br /&gt;
&lt;br /&gt;
When reserving, please specify &amp;quot;OSGeo&amp;quot; as the block name.  '''The block rate is $79/night.'''&lt;br /&gt;
&lt;br /&gt;
== Costs ==&lt;br /&gt;
&lt;br /&gt;
Participants should plan for the following costs:&lt;br /&gt;
&lt;br /&gt;
* Travel to Toronto, variable depending on where you are.&lt;br /&gt;
* Accommodation for four nights, $160 to $400 depending on what room you choose and whether you room share.&lt;br /&gt;
* Breakfast, lunch, and other snacks.&lt;br /&gt;
* The sponsorship moneys will be put towards: meeting room rental, internet access, Saturday night social event (hockey), group dinners Saturday, Sunday and Monday.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
Please join the mailing list at:&lt;br /&gt;
&lt;br /&gt;
http://lists.osgeo.org/mailman/listinfo/tosprint&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
We are planning for attendance of 20-40. Please add your name and the projects you are hoping to sprint on, if you have a strong intention to attend. &lt;br /&gt;
&lt;br /&gt;
* [[User:pwramsey3|Paul Ramsey]] (PostGIS, Mapserver, Proj) '''attendance confirmed''' YYZ @ 14:00 Friday AC190 2508850632&lt;br /&gt;
* [[User:Tomkralidis|Tom Kralidis]] (MapServer, Mapbuilder) '''attendance confirmed''', cell: 416.606.0796&lt;br /&gt;
* Frank Warmerdam (GDAL/OGR, PROJ.4, MapServer, QGIS, OSGeo4W) '''attendance confirmed''', cell:613-635-3771&lt;br /&gt;
* [[User:tbonfort|Thomas Bonfort]] (MapServer) '''attendance confirmed''' YYZ @ 12:45 Friday&lt;br /&gt;
* Howard Butler (MapServer, GeoDjango, GDAL, CS-Map, spatialreference.org) '''attendance confirmed''' YYZ @ 16:00 Friday 5157080858&lt;br /&gt;
* [[User:jmckenna|Jeff McKenna]] (MapServer docs, MS4W) '''attendance confirmed''' cell: 613-220-8144&lt;br /&gt;
* Steve Lime (MapServer) '''attendance confirmed''' YYZ @ 18:15 Friday NW 2882&lt;br /&gt;
* [[User:dmorissette|Daniel Morissette]] (MapServer, GDAL/OGR) '''attendance confirmed''' YYZ @ 8:15am Friday, then in a meeting until about 16:30&lt;br /&gt;
* [[User:assefa|Yewondwossen Assefa]] (MapServer) '''attendance confirmed'''&lt;br /&gt;
* [[User:mpg|Michael P. Gerlek]] (GDAL &amp;amp; liblas)  '''attendance confirmed'''&lt;br /&gt;
* [[User:mrosen|Mike Rosen]] (GDAL &amp;amp; liblas)  '''attendance confirmed'''&lt;br /&gt;
* [[User:paragon|Leo Hsu and Regina Obe]] (PostGIS, GEOS, Mapserver) '''Can attend Saturday only'''&lt;br /&gt;
* [[User:olivier.courtin|Olivier Courtin]] (PostGIS, TinyOWS) '''attendance confirmed''' YYZ @ 12:45 Friday&lt;br /&gt;
* Mark Cave-Ayland (PostGIS) '''attendance confirmed''' YYZ @ 19.35 Friday BA0099&lt;br /&gt;
* [[User:JulienSam|Julien-Samuel Lacroix]] (MapServer) '''attendance confirmed''' YYZ @ 8:15am Friday, then in a meeting until about 16:30&lt;br /&gt;
* [[User:pnaciona|Perry Nacionales]] (MapServer docs) '''attendance confirmed''' YYZ @ 18:15 Friday NW 2882&lt;br /&gt;
* [[User:pierre|Pierre Racine]] ([http://postgis.refractions.net/support/wiki/index.php?WKTRasterHomePage PostGIS WKT Raster]) '''attendance confirmed''' YYZ @ 21:55 Friday AC8925&lt;br /&gt;
* [[User:jimk|Jim Klassen]] (Mapserver, GeoMOOSE) '''attendance confirmed'''&lt;br /&gt;
* Dan Little (Mapserver, OpenLayers, GeoMOOSE) '''attendance confirmed'''&lt;br /&gt;
* Alan Boudreault (MapServer, GDAL/OGR) '''attendance confirmed''' YYZ @ 8:15am Friday, then in a meeting until about 16:30&lt;br /&gt;
* Christopher Schmidt (OpenLayers) '''attendance confirmed''' YYZ @ 22:35 Friday. 603.264.2294&lt;br /&gt;
* [[User:SchuylerErle|Schuyler Erle]] (OpenLayers) YYZ @ 12:00 Saturday. 347 846 8839.&lt;br /&gt;
&lt;br /&gt;
=== Present in spirit ===&lt;br /&gt;
&lt;br /&gt;
If you can not make it to get to Toronto in person and you still want to actively participate in the sprint, there will be a chance to do it by joining the event on IRC ([irc://irc.freenode.net/tosprint #tosprint]). If you are interested in remote participation, feel free to add yourself below.&lt;br /&gt;
&lt;br /&gt;
* [[User:mloskot|Mateusz Loskot]] (GEOS, GDAL/OGR, PostGIS, Proj) '''attendance confirmed'''&lt;br /&gt;
* [[User:szekerest|Tamas Szekeres]] (MapServer, GDAL/OGR) '''attendance confirmed'''&lt;br /&gt;
* [[User:strk|strk]] (GEOS, PostGIS, WKTRaster) '''attendance confirmed'''&lt;br /&gt;
&lt;br /&gt;
== Gear ==&lt;br /&gt;
&lt;br /&gt;
* Extra items that would be useful (please sign up if you can bring)&lt;br /&gt;
** Wireless hub (Perry 1, Mike R 1)&lt;br /&gt;
** Extension Cords (Pierre 1, Paul 1, Steve 1, Daniel 3)&lt;br /&gt;
** Power Bars (Pierre 1, Paul 1, Steve 1, Daniel 3)&lt;br /&gt;
** Ethernet Cables (Pierre 2 short, Paul 1 long, Schuyler some short, Daniel 2-3 long)&lt;br /&gt;
** Projector (Schuyler 1, assuming the airline lets him carry it on)&lt;br /&gt;
** Screen&lt;br /&gt;
** [http://www.pace.edu/emplibrary/EMC%20Flip%20Chart.jpg Flip Charts]&lt;br /&gt;
** Wired hubs&lt;br /&gt;
** Daniel will bring a 16 port switch, just in case&lt;br /&gt;
&lt;br /&gt;
== Room Share ==&lt;br /&gt;
&lt;br /&gt;
If you would like to room share, &lt;br /&gt;
&lt;br /&gt;
# Reserve a room at the hotel, choosing a type with more than one bed.&lt;br /&gt;
# Put your name in this section, indicating the amount of space in your room.&lt;br /&gt;
&lt;br /&gt;
Put your names below:&lt;br /&gt;
&lt;br /&gt;
* example entry: B has a triple room, needs two roommates.&lt;br /&gt;
&lt;br /&gt;
== Individual Preparation ==&lt;br /&gt;
&lt;br /&gt;
* Bring your own computer&lt;br /&gt;
* Install subversion and the compiler tools, and come with a working development environment if possible.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
* Is the Toronto Code Sprint just a coding event?&lt;br /&gt;
** Yes, a coding and documentation event. It is a working session for people who are already participants in open source projects.&lt;br /&gt;
* Will it be possible to present new projects during this event?&lt;br /&gt;
** No, this is not a presentation-oriented event. People will get together in small groups and work on areas of mutual interest within their projects.&lt;br /&gt;
&lt;br /&gt;
== Social Events ==&lt;br /&gt;
&lt;br /&gt;
* Saturday March 7th&lt;br /&gt;
** 4PM, '''Ice hockey game''', Hershey Bears vs Toronto Marlies @ Ricoh Coliseum, 100 Princes' Blvd. [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=100+Princes+Boulevard,+Toronto,+ON+M6K,+Canada%E2%80%8E&amp;amp;sll=43.640237,-79.392271&amp;amp;sspn=0.03056,0.073214&amp;amp;ie=UTF8&amp;amp;ll=43.636821,-79.411583&amp;amp;spn=0.032053,0.073214&amp;amp;z=14&amp;amp;iwloc=addr map]  If you are interested please send a message to the 'tosprint' mailing list, as the tickets must be pre-ordered&lt;br /&gt;
** Dinner at [http://maps.google.com/maps?q=151+Front+Street+West+Toronto+on+(East+Side+Marios) East Side Mario's] (8PM)&lt;br /&gt;
* Sunday March 8th&lt;br /&gt;
**  Dinner at [http://www.batonrougerestaurants.com/page.asp?intNodeID=33079 Baton Rouge] (7PM)&lt;br /&gt;
* Monday March 9th&lt;br /&gt;
** Dinner at [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=jack+astor%27s&amp;amp;sll=43.643032,-79.40918&amp;amp;sspn=0.256397,0.585709&amp;amp;ie=UTF8&amp;amp;ll=43.667623,-79.39064&amp;amp;spn=0.128146,0.292854&amp;amp;z=12&amp;amp;iwloc=D Jack Astor's] (7PM)&lt;br /&gt;
&lt;br /&gt;
[[Category:Code Sprints]]&lt;br /&gt;
[[Category:Events]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Toronto_Code_Sprint_2009_Agenda&amp;diff=35785</id>
		<title>Toronto Code Sprint 2009 Agenda</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Toronto_Code_Sprint_2009_Agenda&amp;diff=35785"/>
		<updated>2009-03-03T00:27:55Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* GDAL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Theme ==&lt;br /&gt;
&lt;br /&gt;
[[Toronto Code Sprint 2009]] : '''The Need for Speed...'''&lt;br /&gt;
&lt;br /&gt;
Performance is the universal feature, and the latest [http://blog.geoserver.org/2008/10/22/geoserver-benchmarks-at-foss4g-2008 Geoserver vs Mapserver] results indicate that there are places throughout the C stack that can use improvement.&lt;br /&gt;
&lt;br /&gt;
== Proj4 ==&lt;br /&gt;
&lt;br /&gt;
* Run Mapserver under load and review where Proj4 takes a hit (everywhere)&lt;br /&gt;
* Caching of PJ structs, Should make QGIS and Mapserver faster.&lt;br /&gt;
* Possibility of a new/simple API + optimized database sitting on top of PROJ4 to replace current init files and address some performance issues as well as allowing lookup of additional information such as axis order of a given SRS (required for WMS 1.3.0 and other OGC specs)&lt;br /&gt;
* bring epsgaxis axis flipping behavior into proj4 proper&lt;br /&gt;
&lt;br /&gt;
== Mapserver ==&lt;br /&gt;
&lt;br /&gt;
* Run the Geoserver benchmark tests under profiler and review results&lt;br /&gt;
* Single-pass querying, will bring WFS speed up to par&lt;br /&gt;
* Mapserver as Apache module, removes FastCGI instability and is potentially even faster, see [http://trac.osgeo.org/mapserver/ticket/2565 #2565]&lt;br /&gt;
* Roadmap for 6.0&lt;br /&gt;
* XML Mapfiles ([http://trac.osgeo.org/mapserver/ticket/2872 #2872])&lt;br /&gt;
* coordinating and improving msautotest (what gets added, when, etc.)&lt;br /&gt;
* WMS 1.3.0 ([http://trac.osgeo.org/mapserver/ticket/473 #473])&lt;br /&gt;
* resolving msOWSDispatch ([http://trac.osgeo.org/mapserver/ticket/2531 #2531])&lt;br /&gt;
* support for ITEM data types for WFS server ([http://trac.osgeo.org/mapserver/ticket/462 #462])&lt;br /&gt;
* Discuss issue of Hiding/enabling/ignoring layers in OGC Web Services (see [http://trac.osgeo.org/mapserver/wiki/HidingLayersInOGCWebServices Trac wiki page])&lt;br /&gt;
* Discuss coordinate axis order for WFS 1.1.0 ([http://trac.osgeo.org/mapserver/ticket/2899 #2899])&lt;br /&gt;
* OpenGL/Cairo/VtableRendering merge. Discuss some backwards compatibility changes implied by the rendering unification (notably on symbol orientation, and linestring markers)&lt;br /&gt;
* Choose one of Steve's logos&lt;br /&gt;
&lt;br /&gt;
== GDAL ==&lt;br /&gt;
&lt;br /&gt;
* Adding the ability to read z/x/y tiles (e.g. TMS, OSM, etc.) alongside the existing WMS reader support&lt;br /&gt;
&lt;br /&gt;
== PostGIS ==&lt;br /&gt;
&lt;br /&gt;
* Roadmap for 1.5+&lt;br /&gt;
* New on-disk format? Aligned double?&lt;br /&gt;
* New GEOS coordinate sequence to bind on top of aligned PostGIS structures?&lt;br /&gt;
* Profiling and review profile results&lt;br /&gt;
&lt;br /&gt;
== PostGIS WKT Raster ==&lt;br /&gt;
&lt;br /&gt;
*Discuss [http://postgis.refractions.net/support/wiki/index.php?WKTRasterHomePage WKT Raster] API, roadmap and funding&lt;br /&gt;
*Importer/exporter (raster2pgsql.exe, PGAdmin extension, new Paul's GUI, driver for GDAL, SQL importer function)&lt;br /&gt;
*Discuss WKT Raster and PostGIS web site, source integration and bug tracking.&lt;br /&gt;
*Discuss GiST index.&lt;br /&gt;
&lt;br /&gt;
== GEOS ==&lt;br /&gt;
&lt;br /&gt;
* Administrivia, what to do without a full-time maintainer?&lt;br /&gt;
* Roadmap for 3.2?&lt;br /&gt;
&lt;br /&gt;
== libLAS ==&lt;br /&gt;
&lt;br /&gt;
* Supporting inline streaming compression&lt;br /&gt;
* Win64 builds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Code Sprints]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Toronto_Code_Sprint_2009&amp;diff=35775</id>
		<title>Toronto Code Sprint 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Toronto_Code_Sprint_2009&amp;diff=35775"/>
		<updated>2009-03-02T21:04:38Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Gear */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
Get together project members to make decisions and tackle larger problems, see the [[Toronto Code Sprint 2009 Agenda]].  We have chosen a mid-North American location because this code sprint is targeting members of the &amp;quot;C Tribe&amp;quot; (eg,  Mapserver, GRASS, GDAL, Proj, PostGIS, MapGuide) and many members of the &amp;quot;C Tribe&amp;quot; are clustered in the area. Toronto is also a major travel hub, for sprinters traveling from afar.  Other tribes are welcome to join the sprint, of course, but we hope that &amp;quot;C Tribe&amp;quot; members will give this event special consideration.&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
&lt;br /&gt;
We have received support from five sponsors, each providing a $500 sponsorship that will be put towards venue, internet and lunch costs.&lt;br /&gt;
&lt;br /&gt;
Thanks to our sponsors!&lt;br /&gt;
&lt;br /&gt;
* [http://www.greenwoodmap.com/ Rich Greenwood]&lt;br /&gt;
* [http://www.osgis.nl/index_en.htm OSGIS.nl]&lt;br /&gt;
* [http://www.coordinatesolutions.com Coordinate Solutions]&lt;br /&gt;
* [http://www.lizardtech.com/ LizardTech]&lt;br /&gt;
* [http://www.sjgeophysics.com/ SJ Geophysics]&lt;br /&gt;
* [http://qpublic.net/ qPublic.net]&lt;br /&gt;
&lt;br /&gt;
The event budget is available [http://spreadsheets.google.com/pub?key=plI7bw56S6qHPAj9OEsIMaQ here]. Any surplus at the end of the event will be turned over to OSGeo.&lt;br /&gt;
&lt;br /&gt;
== Timing ==&lt;br /&gt;
&lt;br /&gt;
Where: '''Rainbow Room''', Radisson Admiral Waterfront Hotel, Toronto, Ontario&lt;br /&gt;
&lt;br /&gt;
When: Saturday March 7 - Tuesday March 10, 2009.&lt;br /&gt;
&lt;br /&gt;
Duration: Four days from approximately 9am-4pm&lt;br /&gt;
&lt;br /&gt;
== Venue ==&lt;br /&gt;
&lt;br /&gt;
[http://www.radisson.com/torontoca_admiral Radisson Hotel Admiral Toronto-Harbourfront]&amp;lt;br/&amp;gt;&lt;br /&gt;
249 Queen's Quay West&amp;lt;br/&amp;gt;&lt;br /&gt;
Toronto, Ontario&amp;lt;br/&amp;gt;&lt;br /&gt;
M5J 2N5 , Canada&amp;lt;br/&amp;gt;&lt;br /&gt;
Reservations: 1-888-201-1718&amp;lt;br/&amp;gt;&lt;br /&gt;
Telephone: +01-416-203-3333&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax: +01-416-203-3100&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Radisson+Hotel+Admiral+Toronto-Harbourfront&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=58.337319,62.314453&amp;amp;ie=UTF8&amp;amp;ll=43.643156,-79.385662&amp;amp;spn=0.026428,0.030427&amp;amp;z=15 Map]&lt;br /&gt;
&lt;br /&gt;
When reserving, please specify &amp;quot;OSGeo&amp;quot; as the block name.  '''The block rate is $79/night.'''&lt;br /&gt;
&lt;br /&gt;
== Costs ==&lt;br /&gt;
&lt;br /&gt;
Participants should plan for the following costs:&lt;br /&gt;
&lt;br /&gt;
* Travel to Toronto, variable depending on where you are.&lt;br /&gt;
* Accommodation for four nights, $160 to $400 depending on what room you choose and whether you room share.&lt;br /&gt;
* Meals. Dinners at least, lunches and coffee are covered by sponsors.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
Please join the mailing list at:&lt;br /&gt;
&lt;br /&gt;
http://lists.osgeo.org/mailman/listinfo/tosprint&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
We are planning for attendance of 20-40. Please add your name and the projects you are hoping to sprint on, if you have a strong intention to attend. &lt;br /&gt;
&lt;br /&gt;
* [[User:pwramsey3|Paul Ramsey]] (PostGIS, Mapserver, Proj) '''attendance confirmed'''&lt;br /&gt;
* [[User:Tomkralidis|Tom Kralidis]] (MapServer, Mapbuilder) '''attendance confirmed'''&lt;br /&gt;
* Frank Warmerdam (GDAL/OGR, PROJ.4, MapServer, QGIS, OSGeo4W) '''attendance confirmed'''&lt;br /&gt;
* [[User:tbonfort|Thomas Bonfort]] (MapServer) '''attendance confirmed'''&lt;br /&gt;
* Howard Butler (MapServer, GeoDjango, GDAL, CS-Map, spatialreference.org) '''attendance confirmed'''&lt;br /&gt;
* [[User:jmckenna|Jeff McKenna]] (MapServer docs, MS4W) '''attendance confirmed'''&lt;br /&gt;
* Steve Lime (MapServer) '''attendance confirmed'''&lt;br /&gt;
* [[User:dmorissette|Daniel Morissette]] (MapServer, GDAL/OGR) '''attendance confirmed'''&lt;br /&gt;
* [[User:assefa|Yewondwossen Assefa]] (MapServer) '''attendance confirmed'''&lt;br /&gt;
* [[User:Aross|Andrew Ross]] (Had to change plans unfortunate can't attend)&lt;br /&gt;
* [[User:mpg|Michael P. Gerlek]] (GDAL &amp;amp; liblas)  '''attendance confirmed'''&lt;br /&gt;
* [[User:mrosen|Mike Rosen]] (GDAL &amp;amp; liblas)  '''attendance confirmed'''&lt;br /&gt;
* [[User:paragon|Leo Hsu and Regina Obe]] (PostGIS, GEOS, Mapserver) '''Can attend Saturday only'''&lt;br /&gt;
* [[User:olivier.courtin|Olivier Courtin]] (PostGIS, TinyOWS) '''attendance confirmed'''&lt;br /&gt;
* Mark Cave-Ayland (PostGIS)&lt;br /&gt;
* [[User:JulienSam|Julien-Samuel Lacroix]] (MapServer) '''attendance confirmed'''&lt;br /&gt;
* [[User:pnaciona|Perry Nacionales]] (MapServer docs) '''attendance confirmed'''&lt;br /&gt;
* [[User:pierre|Pierre Racine]] ([http://postgis.refractions.net/support/wiki/index.php?WKTRasterHomePage PostGIS WKT Raster]) '''attendance confirmed'''&lt;br /&gt;
* [[User:jimk|Jim Klassen]] (Mapserver, GeoMOOSE) '''attendance confirmed'''&lt;br /&gt;
* Dan Little (Mapserver, OpenLayers, GeoMOOSE) '''attendance confirmed'''&lt;br /&gt;
* Alan Boudreault (MapServer, GDAL/OGR) '''attendance confirmed'''&lt;br /&gt;
* Christopher Schmidt (OpenLayers) '''attendance confirmed'''&lt;br /&gt;
* [[User:SchuylerErle|Schuyler Erle]] (OpenLayers)&lt;br /&gt;
&lt;br /&gt;
=== Present in spirit ===&lt;br /&gt;
&lt;br /&gt;
If you can not make it to get to Toronto in person and you still want to actively participate in the sprint, there will be a chance to do it by joining the event on IRC ([irc://irc.freenode.net/tosprint #tosprint]). If you are interested in remote participation, feel free to add yourself below.&lt;br /&gt;
&lt;br /&gt;
* [[User:mloskot|Mateusz Loskot]] (GEOS, GDAL/OGR, PostGIS, Proj) '''attendance confirmed'''&lt;br /&gt;
* [[User:szekerest|Tamas Szekeres]] (MapServer, GDAL/OGR) '''attendance confirmed'''&lt;br /&gt;
&lt;br /&gt;
== Gear ==&lt;br /&gt;
&lt;br /&gt;
* Extra items that would be useful (please sign up if you can bring)&lt;br /&gt;
** Wireless hub (Perry 1)&lt;br /&gt;
** Extension Cords (Pierre 1, Paul 1)&lt;br /&gt;
** Power Bars (Pierre 1, Paul 1)&lt;br /&gt;
** Ethernet Cables (Pierre 2 short, Paul 1 long, Schuyler some short)&lt;br /&gt;
** Projector (Schuyler 1, assuming the airline lets him carry it on)&lt;br /&gt;
** Screen&lt;br /&gt;
** [http://www.pace.edu/emplibrary/EMC%20Flip%20Chart.jpg Flip Charts]&lt;br /&gt;
** Wired hubs -- mpg will bring 3, plus some cabling&lt;br /&gt;
&lt;br /&gt;
== Room Share ==&lt;br /&gt;
&lt;br /&gt;
If you would like to room share, &lt;br /&gt;
&lt;br /&gt;
# Reserve a room at the hotel, choosing a type with more than one bed.&lt;br /&gt;
# Put your name in this section, indicating the amount of space in your room.&lt;br /&gt;
&lt;br /&gt;
Put your names below:&lt;br /&gt;
&lt;br /&gt;
* example entry: B has a triple room, needs two roommates.&lt;br /&gt;
&lt;br /&gt;
== Individual Preparation ==&lt;br /&gt;
&lt;br /&gt;
* Bring your own computer&lt;br /&gt;
* Install subversion and the compiler tools, and come with a working development environment if possible.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
* Is the Toronto Code Sprint just a coding event?&lt;br /&gt;
** Yes, a coding and documentation event. It is a working session for people who are already participants in open source projects.&lt;br /&gt;
* Will it be possible to present new projects during this event?&lt;br /&gt;
** No, this is not a presentation-oriented event. People will get together in small groups and work on areas of mutual interest within their projects.&lt;br /&gt;
&lt;br /&gt;
== Social Events ==&lt;br /&gt;
&lt;br /&gt;
* Saturday March 7th&lt;br /&gt;
** 4PM, '''Ice hockey game''', Hershey Bears vs Toronto Marlies @ Ricoh Coliseum, 100 Princes' Blvd. [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=100+Princes+Boulevard,+Toronto,+ON+M6K,+Canada%E2%80%8E&amp;amp;sll=43.640237,-79.392271&amp;amp;sspn=0.03056,0.073214&amp;amp;ie=UTF8&amp;amp;ll=43.636821,-79.411583&amp;amp;spn=0.032053,0.073214&amp;amp;z=14&amp;amp;iwloc=addr map]  If you are interested please send a message to the 'tosprint' mailing list, as the tickets must be pre-ordered&lt;br /&gt;
** Dinner at [http://maps.google.com/maps?q=151+Front+Street+West+Toronto+on+(East+Side+Marios) East Side Mario's] (8PM)&lt;br /&gt;
* Sunday March 8th&lt;br /&gt;
**  Dinner at [http://www.batonrougerestaurants.com/page.asp?intNodeID=33079 Baton Rouge] (7PM)&lt;br /&gt;
* Monday March 9th&lt;br /&gt;
** Dinner at [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=jack+astor%27s&amp;amp;sll=43.643032,-79.40918&amp;amp;sspn=0.256397,0.585709&amp;amp;ie=UTF8&amp;amp;ll=43.667623,-79.39064&amp;amp;spn=0.128146,0.292854&amp;amp;z=12&amp;amp;iwloc=D Jack Astor's] (7PM)&lt;br /&gt;
&lt;br /&gt;
[[Category:Code Sprints]]&lt;br /&gt;
[[Category:Events]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Toronto_Code_Sprint_2009&amp;diff=35774</id>
		<title>Toronto Code Sprint 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Toronto_Code_Sprint_2009&amp;diff=35774"/>
		<updated>2009-03-02T21:01:03Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Participation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
Get together project members to make decisions and tackle larger problems, see the [[Toronto Code Sprint 2009 Agenda]].  We have chosen a mid-North American location because this code sprint is targeting members of the &amp;quot;C Tribe&amp;quot; (eg,  Mapserver, GRASS, GDAL, Proj, PostGIS, MapGuide) and many members of the &amp;quot;C Tribe&amp;quot; are clustered in the area. Toronto is also a major travel hub, for sprinters traveling from afar.  Other tribes are welcome to join the sprint, of course, but we hope that &amp;quot;C Tribe&amp;quot; members will give this event special consideration.&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
&lt;br /&gt;
We have received support from five sponsors, each providing a $500 sponsorship that will be put towards venue, internet and lunch costs.&lt;br /&gt;
&lt;br /&gt;
Thanks to our sponsors!&lt;br /&gt;
&lt;br /&gt;
* [http://www.greenwoodmap.com/ Rich Greenwood]&lt;br /&gt;
* [http://www.osgis.nl/index_en.htm OSGIS.nl]&lt;br /&gt;
* [http://www.coordinatesolutions.com Coordinate Solutions]&lt;br /&gt;
* [http://www.lizardtech.com/ LizardTech]&lt;br /&gt;
* [http://www.sjgeophysics.com/ SJ Geophysics]&lt;br /&gt;
* [http://qpublic.net/ qPublic.net]&lt;br /&gt;
&lt;br /&gt;
The event budget is available [http://spreadsheets.google.com/pub?key=plI7bw56S6qHPAj9OEsIMaQ here]. Any surplus at the end of the event will be turned over to OSGeo.&lt;br /&gt;
&lt;br /&gt;
== Timing ==&lt;br /&gt;
&lt;br /&gt;
Where: '''Rainbow Room''', Radisson Admiral Waterfront Hotel, Toronto, Ontario&lt;br /&gt;
&lt;br /&gt;
When: Saturday March 7 - Tuesday March 10, 2009.&lt;br /&gt;
&lt;br /&gt;
Duration: Four days from approximately 9am-4pm&lt;br /&gt;
&lt;br /&gt;
== Venue ==&lt;br /&gt;
&lt;br /&gt;
[http://www.radisson.com/torontoca_admiral Radisson Hotel Admiral Toronto-Harbourfront]&amp;lt;br/&amp;gt;&lt;br /&gt;
249 Queen's Quay West&amp;lt;br/&amp;gt;&lt;br /&gt;
Toronto, Ontario&amp;lt;br/&amp;gt;&lt;br /&gt;
M5J 2N5 , Canada&amp;lt;br/&amp;gt;&lt;br /&gt;
Reservations: 1-888-201-1718&amp;lt;br/&amp;gt;&lt;br /&gt;
Telephone: +01-416-203-3333&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax: +01-416-203-3100&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Radisson+Hotel+Admiral+Toronto-Harbourfront&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=58.337319,62.314453&amp;amp;ie=UTF8&amp;amp;ll=43.643156,-79.385662&amp;amp;spn=0.026428,0.030427&amp;amp;z=15 Map]&lt;br /&gt;
&lt;br /&gt;
When reserving, please specify &amp;quot;OSGeo&amp;quot; as the block name.  '''The block rate is $79/night.'''&lt;br /&gt;
&lt;br /&gt;
== Costs ==&lt;br /&gt;
&lt;br /&gt;
Participants should plan for the following costs:&lt;br /&gt;
&lt;br /&gt;
* Travel to Toronto, variable depending on where you are.&lt;br /&gt;
* Accommodation for four nights, $160 to $400 depending on what room you choose and whether you room share.&lt;br /&gt;
* Meals. Dinners at least, lunches and coffee are covered by sponsors.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
Please join the mailing list at:&lt;br /&gt;
&lt;br /&gt;
http://lists.osgeo.org/mailman/listinfo/tosprint&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
We are planning for attendance of 20-40. Please add your name and the projects you are hoping to sprint on, if you have a strong intention to attend. &lt;br /&gt;
&lt;br /&gt;
* [[User:pwramsey3|Paul Ramsey]] (PostGIS, Mapserver, Proj) '''attendance confirmed'''&lt;br /&gt;
* [[User:Tomkralidis|Tom Kralidis]] (MapServer, Mapbuilder) '''attendance confirmed'''&lt;br /&gt;
* Frank Warmerdam (GDAL/OGR, PROJ.4, MapServer, QGIS, OSGeo4W) '''attendance confirmed'''&lt;br /&gt;
* [[User:tbonfort|Thomas Bonfort]] (MapServer) '''attendance confirmed'''&lt;br /&gt;
* Howard Butler (MapServer, GeoDjango, GDAL, CS-Map, spatialreference.org) '''attendance confirmed'''&lt;br /&gt;
* [[User:jmckenna|Jeff McKenna]] (MapServer docs, MS4W) '''attendance confirmed'''&lt;br /&gt;
* Steve Lime (MapServer) '''attendance confirmed'''&lt;br /&gt;
* [[User:dmorissette|Daniel Morissette]] (MapServer, GDAL/OGR) '''attendance confirmed'''&lt;br /&gt;
* [[User:assefa|Yewondwossen Assefa]] (MapServer) '''attendance confirmed'''&lt;br /&gt;
* [[User:Aross|Andrew Ross]] (Had to change plans unfortunate can't attend)&lt;br /&gt;
* [[User:mpg|Michael P. Gerlek]] (GDAL &amp;amp; liblas)  '''attendance confirmed'''&lt;br /&gt;
* [[User:mrosen|Mike Rosen]] (GDAL &amp;amp; liblas)  '''attendance confirmed'''&lt;br /&gt;
* [[User:paragon|Leo Hsu and Regina Obe]] (PostGIS, GEOS, Mapserver) '''Can attend Saturday only'''&lt;br /&gt;
* [[User:olivier.courtin|Olivier Courtin]] (PostGIS, TinyOWS) '''attendance confirmed'''&lt;br /&gt;
* Mark Cave-Ayland (PostGIS)&lt;br /&gt;
* [[User:JulienSam|Julien-Samuel Lacroix]] (MapServer) '''attendance confirmed'''&lt;br /&gt;
* [[User:pnaciona|Perry Nacionales]] (MapServer docs) '''attendance confirmed'''&lt;br /&gt;
* [[User:pierre|Pierre Racine]] ([http://postgis.refractions.net/support/wiki/index.php?WKTRasterHomePage PostGIS WKT Raster]) '''attendance confirmed'''&lt;br /&gt;
* [[User:jimk|Jim Klassen]] (Mapserver, GeoMOOSE) '''attendance confirmed'''&lt;br /&gt;
* Dan Little (Mapserver, OpenLayers, GeoMOOSE) '''attendance confirmed'''&lt;br /&gt;
* Alan Boudreault (MapServer, GDAL/OGR) '''attendance confirmed'''&lt;br /&gt;
* Christopher Schmidt (OpenLayers) '''attendance confirmed'''&lt;br /&gt;
* [[User:SchuylerErle|Schuyler Erle]] (OpenLayers)&lt;br /&gt;
&lt;br /&gt;
=== Present in spirit ===&lt;br /&gt;
&lt;br /&gt;
If you can not make it to get to Toronto in person and you still want to actively participate in the sprint, there will be a chance to do it by joining the event on IRC ([irc://irc.freenode.net/tosprint #tosprint]). If you are interested in remote participation, feel free to add yourself below.&lt;br /&gt;
&lt;br /&gt;
* [[User:mloskot|Mateusz Loskot]] (GEOS, GDAL/OGR, PostGIS, Proj) '''attendance confirmed'''&lt;br /&gt;
* [[User:szekerest|Tamas Szekeres]] (MapServer, GDAL/OGR) '''attendance confirmed'''&lt;br /&gt;
&lt;br /&gt;
== Gear ==&lt;br /&gt;
&lt;br /&gt;
* Extra items that would be useful (please sign up if you can bring)&lt;br /&gt;
** Wireless hub&lt;br /&gt;
** Wireless hub (Perry 1)&lt;br /&gt;
** Extension Cords (Pierre 1, Paul 1)&lt;br /&gt;
** Power Bars (Pierre 1, Paul 1)&lt;br /&gt;
** Ethernet Cables (Pierre 2 short, Paul 1 long)&lt;br /&gt;
** Projector&lt;br /&gt;
** Screen&lt;br /&gt;
** [http://www.pace.edu/emplibrary/EMC%20Flip%20Chart.jpg Flip Charts]&lt;br /&gt;
** Wired hubs -- mpg will bring 3, plus some cabling&lt;br /&gt;
&lt;br /&gt;
== Room Share ==&lt;br /&gt;
&lt;br /&gt;
If you would like to room share, &lt;br /&gt;
&lt;br /&gt;
# Reserve a room at the hotel, choosing a type with more than one bed.&lt;br /&gt;
# Put your name in this section, indicating the amount of space in your room.&lt;br /&gt;
&lt;br /&gt;
Put your names below:&lt;br /&gt;
&lt;br /&gt;
* example entry: B has a triple room, needs two roommates.&lt;br /&gt;
&lt;br /&gt;
== Individual Preparation ==&lt;br /&gt;
&lt;br /&gt;
* Bring your own computer&lt;br /&gt;
* Install subversion and the compiler tools, and come with a working development environment if possible.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
* Is the Toronto Code Sprint just a coding event?&lt;br /&gt;
** Yes, a coding and documentation event. It is a working session for people who are already participants in open source projects.&lt;br /&gt;
* Will it be possible to present new projects during this event?&lt;br /&gt;
** No, this is not a presentation-oriented event. People will get together in small groups and work on areas of mutual interest within their projects.&lt;br /&gt;
&lt;br /&gt;
== Social Events ==&lt;br /&gt;
&lt;br /&gt;
* Saturday March 7th&lt;br /&gt;
** 4PM, '''Ice hockey game''', Hershey Bears vs Toronto Marlies @ Ricoh Coliseum, 100 Princes' Blvd. [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=100+Princes+Boulevard,+Toronto,+ON+M6K,+Canada%E2%80%8E&amp;amp;sll=43.640237,-79.392271&amp;amp;sspn=0.03056,0.073214&amp;amp;ie=UTF8&amp;amp;ll=43.636821,-79.411583&amp;amp;spn=0.032053,0.073214&amp;amp;z=14&amp;amp;iwloc=addr map]  If you are interested please send a message to the 'tosprint' mailing list, as the tickets must be pre-ordered&lt;br /&gt;
** Dinner at [http://maps.google.com/maps?q=151+Front+Street+West+Toronto+on+(East+Side+Marios) East Side Mario's] (8PM)&lt;br /&gt;
* Sunday March 8th&lt;br /&gt;
**  Dinner at [http://www.batonrougerestaurants.com/page.asp?intNodeID=33079 Baton Rouge] (7PM)&lt;br /&gt;
* Monday March 9th&lt;br /&gt;
** Dinner at [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=jack+astor%27s&amp;amp;sll=43.643032,-79.40918&amp;amp;sspn=0.256397,0.585709&amp;amp;ie=UTF8&amp;amp;ll=43.667623,-79.39064&amp;amp;spn=0.128146,0.292854&amp;amp;z=12&amp;amp;iwloc=D Jack Astor's] (7PM)&lt;br /&gt;
&lt;br /&gt;
[[Category:Code Sprints]]&lt;br /&gt;
[[Category:Events]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Toronto_Code_Sprint_2009&amp;diff=35773</id>
		<title>Toronto Code Sprint 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Toronto_Code_Sprint_2009&amp;diff=35773"/>
		<updated>2009-03-02T21:00:32Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: added Schuyler to attendees&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
Get together project members to make decisions and tackle larger problems, see the [[Toronto Code Sprint 2009 Agenda]].  We have chosen a mid-North American location because this code sprint is targeting members of the &amp;quot;C Tribe&amp;quot; (eg,  Mapserver, GRASS, GDAL, Proj, PostGIS, MapGuide) and many members of the &amp;quot;C Tribe&amp;quot; are clustered in the area. Toronto is also a major travel hub, for sprinters traveling from afar.  Other tribes are welcome to join the sprint, of course, but we hope that &amp;quot;C Tribe&amp;quot; members will give this event special consideration.&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
&lt;br /&gt;
We have received support from five sponsors, each providing a $500 sponsorship that will be put towards venue, internet and lunch costs.&lt;br /&gt;
&lt;br /&gt;
Thanks to our sponsors!&lt;br /&gt;
&lt;br /&gt;
* [http://www.greenwoodmap.com/ Rich Greenwood]&lt;br /&gt;
* [http://www.osgis.nl/index_en.htm OSGIS.nl]&lt;br /&gt;
* [http://www.coordinatesolutions.com Coordinate Solutions]&lt;br /&gt;
* [http://www.lizardtech.com/ LizardTech]&lt;br /&gt;
* [http://www.sjgeophysics.com/ SJ Geophysics]&lt;br /&gt;
* [http://qpublic.net/ qPublic.net]&lt;br /&gt;
&lt;br /&gt;
The event budget is available [http://spreadsheets.google.com/pub?key=plI7bw56S6qHPAj9OEsIMaQ here]. Any surplus at the end of the event will be turned over to OSGeo.&lt;br /&gt;
&lt;br /&gt;
== Timing ==&lt;br /&gt;
&lt;br /&gt;
Where: '''Rainbow Room''', Radisson Admiral Waterfront Hotel, Toronto, Ontario&lt;br /&gt;
&lt;br /&gt;
When: Saturday March 7 - Tuesday March 10, 2009.&lt;br /&gt;
&lt;br /&gt;
Duration: Four days from approximately 9am-4pm&lt;br /&gt;
&lt;br /&gt;
== Venue ==&lt;br /&gt;
&lt;br /&gt;
[http://www.radisson.com/torontoca_admiral Radisson Hotel Admiral Toronto-Harbourfront]&amp;lt;br/&amp;gt;&lt;br /&gt;
249 Queen's Quay West&amp;lt;br/&amp;gt;&lt;br /&gt;
Toronto, Ontario&amp;lt;br/&amp;gt;&lt;br /&gt;
M5J 2N5 , Canada&amp;lt;br/&amp;gt;&lt;br /&gt;
Reservations: 1-888-201-1718&amp;lt;br/&amp;gt;&lt;br /&gt;
Telephone: +01-416-203-3333&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax: +01-416-203-3100&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Radisson+Hotel+Admiral+Toronto-Harbourfront&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=58.337319,62.314453&amp;amp;ie=UTF8&amp;amp;ll=43.643156,-79.385662&amp;amp;spn=0.026428,0.030427&amp;amp;z=15 Map]&lt;br /&gt;
&lt;br /&gt;
When reserving, please specify &amp;quot;OSGeo&amp;quot; as the block name.  '''The block rate is $79/night.'''&lt;br /&gt;
&lt;br /&gt;
== Costs ==&lt;br /&gt;
&lt;br /&gt;
Participants should plan for the following costs:&lt;br /&gt;
&lt;br /&gt;
* Travel to Toronto, variable depending on where you are.&lt;br /&gt;
* Accommodation for four nights, $160 to $400 depending on what room you choose and whether you room share.&lt;br /&gt;
* Meals. Dinners at least, lunches and coffee are covered by sponsors.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
Please join the mailing list at:&lt;br /&gt;
&lt;br /&gt;
http://lists.osgeo.org/mailman/listinfo/tosprint&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
We are planning for attendance of 20-40. Please add your name and the projects you are hoping to sprint on, if you have a strong intention to attend. &lt;br /&gt;
&lt;br /&gt;
* [[User:pwramsey3|Paul Ramsey]] (PostGIS, Mapserver, Proj) '''attendance confirmed'''&lt;br /&gt;
* [[User:Tomkralidis|Tom Kralidis]] (MapServer, Mapbuilder) '''attendance confirmed'''&lt;br /&gt;
* Frank Warmerdam (GDAL/OGR, PROJ.4, MapServer, QGIS, OSGeo4W) '''attendance confirmed'''&lt;br /&gt;
* [[User:tbonfort|Thomas Bonfort]] (MapServer) '''attendance confirmed'''&lt;br /&gt;
* Howard Butler (MapServer, GeoDjango, GDAL, CS-Map, spatialreference.org) '''attendance confirmed'''&lt;br /&gt;
* [[User:jmckenna|Jeff McKenna]] (MapServer docs, MS4W) '''attendance confirmed'''&lt;br /&gt;
* Steve Lime (MapServer) '''attendance confirmed'''&lt;br /&gt;
* [[User:dmorissette|Daniel Morissette]] (MapServer, GDAL/OGR) '''attendance confirmed'''&lt;br /&gt;
* [[User:assefa|Yewondwossen Assefa]] (MapServer) '''attendance confirmed'''&lt;br /&gt;
* [[User:Aross|Andrew Ross]] (Had to change plans unfortunate can't attend)&lt;br /&gt;
* [[User:mpg|Michael P. Gerlek]] (GDAL &amp;amp; liblas)  '''attendance confirmed'''&lt;br /&gt;
* [[User:mrosen|Mike Rosen]] (GDAL &amp;amp; liblas)  '''attendance confirmed'''&lt;br /&gt;
* [[User:paragon|Leo Hsu and Regina Obe]] (PostGIS, GEOS, Mapserver) '''Can attend Saturday only'''&lt;br /&gt;
* [[User:olivier.courtin|Olivier Courtin]] (PostGIS, TinyOWS) '''attendance confirmed'''&lt;br /&gt;
* Mark Cave-Ayland (PostGIS)&lt;br /&gt;
* [[User:JulienSam|Julien-Samuel Lacroix]] (MapServer) '''attendance confirmed'''&lt;br /&gt;
* [[User:pnaciona|Perry Nacionales]] (MapServer docs) '''attendance confirmed'''&lt;br /&gt;
* [[User:pierre|Pierre Racine]] ([http://postgis.refractions.net/support/wiki/index.php?WKTRasterHomePage PostGIS WKT Raster]) '''attendance confirmed'''&lt;br /&gt;
* [[User:jimk|Jim Klassen]] (Mapserver, GeoMOOSE) '''attendance confirmed'''&lt;br /&gt;
* Dan Little (Mapserver, OpenLayers, GeoMOOSE) '''attendance confirmed'''&lt;br /&gt;
* Alan Boudreault (MapServer, GDAL/OGR) '''attendance confirmed'''&lt;br /&gt;
* Christopher Schmidt (OpenLayers) '''attendance confirmed'''&lt;br /&gt;
* [[User:SchuylerErle Schuyler Erle]] (OpenLayers)&lt;br /&gt;
&lt;br /&gt;
=== Present in spirit ===&lt;br /&gt;
&lt;br /&gt;
If you can not make it to get to Toronto in person and you still want to actively participate in the sprint, there will be a chance to do it by joining the event on IRC ([irc://irc.freenode.net/tosprint #tosprint]). If you are interested in remote participation, feel free to add yourself below.&lt;br /&gt;
&lt;br /&gt;
* [[User:mloskot|Mateusz Loskot]] (GEOS, GDAL/OGR, PostGIS, Proj) '''attendance confirmed'''&lt;br /&gt;
* [[User:szekerest|Tamas Szekeres]] (MapServer, GDAL/OGR) '''attendance confirmed'''&lt;br /&gt;
&lt;br /&gt;
== Gear ==&lt;br /&gt;
&lt;br /&gt;
* Extra items that would be useful (please sign up if you can bring)&lt;br /&gt;
** Wireless hub&lt;br /&gt;
** Wireless hub (Perry 1)&lt;br /&gt;
** Extension Cords (Pierre 1, Paul 1)&lt;br /&gt;
** Power Bars (Pierre 1, Paul 1)&lt;br /&gt;
** Ethernet Cables (Pierre 2 short, Paul 1 long)&lt;br /&gt;
** Projector&lt;br /&gt;
** Screen&lt;br /&gt;
** [http://www.pace.edu/emplibrary/EMC%20Flip%20Chart.jpg Flip Charts]&lt;br /&gt;
** Wired hubs -- mpg will bring 3, plus some cabling&lt;br /&gt;
&lt;br /&gt;
== Room Share ==&lt;br /&gt;
&lt;br /&gt;
If you would like to room share, &lt;br /&gt;
&lt;br /&gt;
# Reserve a room at the hotel, choosing a type with more than one bed.&lt;br /&gt;
# Put your name in this section, indicating the amount of space in your room.&lt;br /&gt;
&lt;br /&gt;
Put your names below:&lt;br /&gt;
&lt;br /&gt;
* example entry: B has a triple room, needs two roommates.&lt;br /&gt;
&lt;br /&gt;
== Individual Preparation ==&lt;br /&gt;
&lt;br /&gt;
* Bring your own computer&lt;br /&gt;
* Install subversion and the compiler tools, and come with a working development environment if possible.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
* Is the Toronto Code Sprint just a coding event?&lt;br /&gt;
** Yes, a coding and documentation event. It is a working session for people who are already participants in open source projects.&lt;br /&gt;
* Will it be possible to present new projects during this event?&lt;br /&gt;
** No, this is not a presentation-oriented event. People will get together in small groups and work on areas of mutual interest within their projects.&lt;br /&gt;
&lt;br /&gt;
== Social Events ==&lt;br /&gt;
&lt;br /&gt;
* Saturday March 7th&lt;br /&gt;
** 4PM, '''Ice hockey game''', Hershey Bears vs Toronto Marlies @ Ricoh Coliseum, 100 Princes' Blvd. [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=100+Princes+Boulevard,+Toronto,+ON+M6K,+Canada%E2%80%8E&amp;amp;sll=43.640237,-79.392271&amp;amp;sspn=0.03056,0.073214&amp;amp;ie=UTF8&amp;amp;ll=43.636821,-79.411583&amp;amp;spn=0.032053,0.073214&amp;amp;z=14&amp;amp;iwloc=addr map]  If you are interested please send a message to the 'tosprint' mailing list, as the tickets must be pre-ordered&lt;br /&gt;
** Dinner at [http://maps.google.com/maps?q=151+Front+Street+West+Toronto+on+(East+Side+Marios) East Side Mario's] (8PM)&lt;br /&gt;
* Sunday March 8th&lt;br /&gt;
**  Dinner at [http://www.batonrougerestaurants.com/page.asp?intNodeID=33079 Baton Rouge] (7PM)&lt;br /&gt;
* Monday March 9th&lt;br /&gt;
** Dinner at [http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=jack+astor%27s&amp;amp;sll=43.643032,-79.40918&amp;amp;sspn=0.256397,0.585709&amp;amp;ie=UTF8&amp;amp;ll=43.667623,-79.39064&amp;amp;spn=0.128146,0.292854&amp;amp;z=12&amp;amp;iwloc=D Jack Astor's] (7PM)&lt;br /&gt;
&lt;br /&gt;
[[Category:Code Sprints]]&lt;br /&gt;
[[Category:Events]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=FOSS4G2008_LightningTalks&amp;diff=29969</id>
		<title>FOSS4G2008 LightningTalks</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=FOSS4G2008_LightningTalks&amp;diff=29969"/>
		<updated>2008-09-29T12:45:25Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* 9 Schuyler Erle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back to [[FOSS4G2008]]...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Eight speakers, five minutes each, [http://www.foss4g2008.org/plenaries/#lightning Lightning Talks] will be presented to the full conference attendance, and should be fast paced, visual, and entertaining. Please note we reserve the right to juggle the order of talks listed below to align better with topics etc.&lt;br /&gt;
More topic ideas:&lt;br /&gt;
* The role of FOSSGEO in developing nations&lt;br /&gt;
* Where do proprietry and FOSS geospatial solutions meet?&lt;br /&gt;
* The state of FOSSGEO today - where are we, where do we need to go?&lt;br /&gt;
* FOSS4GEO in the public sector&lt;br /&gt;
* Anatomy of a FOSS4GEO coder (what makes people work on FOSS4GEO software)&lt;br /&gt;
* How FOSS4GEO saved my job&lt;br /&gt;
&lt;br /&gt;
= Proposed Speakers =&lt;br /&gt;
&lt;br /&gt;
If you would like to give a lightning talk, or would like to put forward someone to give a talk, please provide adequate contact details here:&lt;br /&gt;
&lt;br /&gt;
* '''Name, affiliation, email, proposed topic'''&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Confirmed Speakers =&lt;br /&gt;
&lt;br /&gt;
(speaking order to be confirmed)&lt;br /&gt;
&lt;br /&gt;
== 1 Steven Ottens ==&lt;br /&gt;
* Position / person title - Steven M. Ottens - Member of the Mapbuilder PSC &amp;lt;steven AT minst.net&amp;gt;&lt;br /&gt;
* One sentence bio - User interaction researcher by Geodan and developer for Mapbuilder&lt;br /&gt;
* One sentence talk summary - Obituary for Mapbuilder&lt;br /&gt;
* URL to head shot [[http://flickr.com/photos/29578520@N02/2866498292/]]&lt;br /&gt;
* CONFIRMED&lt;br /&gt;
&lt;br /&gt;
== 2 Frank Warmerdam: OSGeo4W ==&lt;br /&gt;
* Frank Warmerdam &lt;br /&gt;
* Position / person title - Frank Warmerdam &amp;lt;warmerdam AT pobox.com&amp;gt;&lt;br /&gt;
* One sentence bio&lt;br /&gt;
* A brief introduction to [http://trac.osgeo.org/osgeo4w OSGeo4W], the &amp;quot;OSGeo Windows Software Stack&amp;quot;, including a call for users and packagers. &lt;br /&gt;
* URL to head shot&lt;br /&gt;
* CONFIRMED&lt;br /&gt;
&lt;br /&gt;
== 3 Dr Manie Brynard: Serving global geological data using Mapserver ==&lt;br /&gt;
* Dr Manie Brynard, Council for Geoscience mbrynard &amp;lt;at&amp;gt; geoscience.org.za:&lt;br /&gt;
* One sentence bio  GIS Specialist and Senior Geologist at the Council for Geoscience for 12 years&lt;br /&gt;
* One sentence topic -As a contribution to the global initiative to present global geology in a Google-earth like fashion the CGS has applied MapServer to serve countrywide geological data as a WMS.&lt;br /&gt;
* URL to head shot [[http://wiki.osgeo.org/wiki/Image:Manie_id2.jpg]]&lt;br /&gt;
* CONFIRMED&lt;br /&gt;
&lt;br /&gt;
== 4 Suha Ulgen: Geospatial at the United Nations ==&lt;br /&gt;
* T. Suha Ulgen ( Mr.) ulgen at un.org&lt;br /&gt;
* Coordinator  - UN Geographic Information Working Group Secretariat (UNGIWG)&lt;br /&gt;
* Talk title: &amp;quot;UN Geographic Information Working Group FOSS4G initiatives.&amp;quot;&lt;br /&gt;
* URL to head shot&lt;br /&gt;
* CONFIRMED&lt;br /&gt;
&lt;br /&gt;
== 5 Dr. Horst Düster : Building a FOSS geospatial solution for a Swiss state ==&lt;br /&gt;
* Dr. Horst Düster - Departement of Geoinformation State of Solothurn (Horst.Duester AT bd.so.ch)&lt;br /&gt;
* GIS - Coodinator and CGO at Public Authority since 13 Years&lt;br /&gt;
* A short overview on history of the FOSS geospatial infrastructure in Solothurn&lt;br /&gt;
* [http://www.sogis1.so.ch/sogis/dl/foss4g/hdus.jpg] URL to head shot&lt;br /&gt;
* CONFIRMED&lt;br /&gt;
&lt;br /&gt;
== 6 Sindile Bidla:  ==&lt;br /&gt;
* Position / person title - Sindile Bidla - Deputy Director - Chief Directorate Spatial Planning &amp;amp; Information. &lt;br /&gt;
* One sentence bio - Have been working with GIS for over 10years, excited about what FOSS GIS has to offer in Government and actively advocating for its use.&lt;br /&gt;
* One sentence talk summary - GIS in schools programme and Quantum GIS&lt;br /&gt;
* URL to head shot&lt;br /&gt;
* CONFIRMED&lt;br /&gt;
&lt;br /&gt;
== 7 Arnulf Christl , [[Wikinomics]] - The Foundation of Making Business with FOSS ==&lt;br /&gt;
* Position / person title: Arnulf Christl, president OSGeo (arnulf AT osgeo.org)&lt;br /&gt;
* One sentence bio: Spatial technician, FOSS business model advocate and promoter of standards&lt;br /&gt;
* One sentence talk summary: This talk wants to make you want to read the book [[Wikinomics]] to give you deep insight into processes that change our economic and corporative landscape in unprecedented ways. &lt;br /&gt;
* URL to head shot: [[User:Arnulf Christl]]&lt;br /&gt;
* CONFIRMED&lt;br /&gt;
&lt;br /&gt;
== 8 Raj Singh ==&lt;br /&gt;
* Raj Singh - Director of Interoperability Programs (rsingh AT opengeospatial.org)&lt;br /&gt;
* Raj manages standards based multi-vendor software prototyping projects. His most current work is bringing greater interoperability to the building industry. &lt;br /&gt;
* This talk will describe the new Memo of Understanding between OGC and OSGeo and talk about the potential impacts on standards work.&lt;br /&gt;
* head shot: [http://www.opengeospatial.org/pub/www/files/pictures/picture-15.png]&lt;br /&gt;
* CONFIRMED&lt;br /&gt;
&lt;br /&gt;
==9 Schuyler Erle ==&lt;br /&gt;
* call for Open Geodata&lt;br /&gt;
* contact schuyler at nocat.net&lt;br /&gt;
&lt;br /&gt;
[[Category:FOSS4G2008]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=OSGeo_Hacking_event&amp;diff=24861</id>
		<title>OSGeo Hacking event</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=OSGeo_Hacking_event&amp;diff=24861"/>
		<updated>2008-05-08T16:18:56Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OSGeo Hacking event in a monastry near Bolsena (16-22 June 2008) ==&lt;br /&gt;
; [[Event Owner]]: [[User:ticheler | Jeroen Ticheler]]&lt;br /&gt;
; When: 16-22 June 2008&lt;br /&gt;
; Where: [http://tinyurl.com/2t6zby Bolsena - Italy]&lt;br /&gt;
&lt;br /&gt;
We will have an OSGeo &amp;quot;hacking&amp;quot; event in an [http://www.conventobolsena.org/ Italian monastry] ([http://tinyurl.com/2t6zby here]). The monastry is overlooking Lago Bolsena and offers space to about 25 people in small bedrooms :-) . Its probably one of the coolest places for such an event. Quiet, isolated, simple and serene. There's a good wireless and wired internet connection, although I wouldn't bet my hand on it if we all start to download satellite images. It should be perfect for SVN, IRC and mail. Have a look yourself, including looking at the photo gallery.&lt;br /&gt;
&lt;br /&gt;
The cost will be about 200 Euro per person for the week. &lt;br /&gt;
&lt;br /&gt;
For what the food concerns, there will be a cook who will serve breakfast, lunch and dinner for 30 Euro per person per day. There's a large dining space, but we will eat outside overlooking the lake if weather permits (very likely in June). &lt;br /&gt;
&lt;br /&gt;
We'll discuss other technicalities as they come up, i.e. assistance if you need to rent a car, organize to travel together, public transport etc... Please feel free to use this WIKI page for that or create a sub page.&lt;br /&gt;
&lt;br /&gt;
The event will take place during the whole week (7 days).&lt;br /&gt;
&lt;br /&gt;
Please contact me if you have questions about this event ([[User:ticheler |Jeroen Ticheler]])&lt;br /&gt;
&lt;br /&gt;
=== Interested? Sign up here ===&lt;br /&gt;
&lt;br /&gt;
Those participating, you will need to make and advance payment of 100 Euro to me to guarantee your place. Please contact me privately by email so we can arrange that. I've no problems if you later need to change as long as you make sure there's someone taking your place :-)&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!width=&amp;quot;250&amp;quot;|Name&lt;br /&gt;
!width=&amp;quot;250&amp;quot;|Projects&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|single/double room?&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Should we organize a cook?&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Outdoor activities? [1]&lt;br /&gt;
!width=&amp;quot;200&amp;quot;|Confirmed/tentative?&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Advance paid?&lt;br /&gt;
|-&lt;br /&gt;
|[[User:ticheler|Jeroen Ticheler]]      || [[GeoNetwork]]  &amp;amp; [[Marketing]]    || double            ||yes  || ||  Confirmed || x&lt;br /&gt;
|- &lt;br /&gt;
|[[User:ominiverdi|Lorenzo Becchi]]    ||  ka-Map &amp;amp; OpenLayers  || single            ||yes  || ||  confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
|[[User:heikki|Heikki Doeleman]]        || [[GeoNetwork]]    || still don't know  ||yes  || ||  confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Arnulf Christl|Arnulf Christl]] || [[Mapbender]] &amp;amp; [[Marketing]]  || double            ||yes  ||  || Confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Fxp|Francois Prunayre]]||     [[GeoNetwork]]        || still don't know   ||  yes   ||    || Confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
|[[User:SimonPigot|Simon Pigot]]||       [[GeoNetwork]]     ||  single  ||  yes   ||    || tentative ||&lt;br /&gt;
|-&lt;br /&gt;
|[[Kate Roberts]]||       [[GeoNetwork]]     ||  single  ||  yes   ||    || tentative ||&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Moovida | Andrea Antonello]]||       [http://www.jgrass.org JGrass]   ||  single  ||  yes   ||    || Confirmed || x &lt;br /&gt;
|-&lt;br /&gt;
|[[User:Silli | Silvia Franceschi]]||       [http://www.jgrass.org JGrass]   &amp;amp; [[Marketing]]      ||  single  ||  yes   ||    || Confirmed || x &lt;br /&gt;
|-&lt;br /&gt;
|Daniele Andreis||       [http://www.jgrass.org JGrass]     ||  single  ||  yes   ||    || Confirmed || x &lt;br /&gt;
|-&lt;br /&gt;
|6 * GeoServer devs||[http://geoserver.org GeoServer]  || single  || yes  || || Confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
|[[User:jacarma | Javier Carrasco]]||       [http://www.gvsig.gva.es/index.php?id=gvsig&amp;amp;L=2 gvSIG]   &amp;amp; gvSIG Mobile    ||  single || yes   ||    || Confirmed ||&lt;br /&gt;
|-&lt;br /&gt;
| Juan Lucas Dominguez ||       [http://www.gvsig.gva.es/index.php?id=gvsig&amp;amp;L=2 gvSIG]   &amp;amp; gvSIG Mobile    ||  single || yes   ||    || Confirmed ||&lt;br /&gt;
|-&lt;br /&gt;
|[[User:volaya | Victor Olaya]] || [http://www.sextantegis.com SEXTANTE]  || single  || yes || || Confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landa|Martin Landa]] || [http://grass.osgeo.org GRASS GIS] ||  single || yes   ||  || Confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
|Giuseppe Onorevoli||[http://www.jgrass.org JGrass]|| single || yes || || Confirmed ||&lt;br /&gt;
|-&lt;br /&gt;
|Patrizia Monteduro|| [http://geonetwork-opensource.org Geonetwork] || no need || no || ||tentative ||&lt;br /&gt;
|-&lt;br /&gt;
|[[User:simboss|Simone Giannecchini]] || [[GeoTools]] &amp;amp; [http://geoserver.org GeoServer] (&amp;amp; [http://www.gdal.org GDAL] SWIG Java)  || double            ||yes  ||  || tentative ||&lt;br /&gt;
|-&lt;br /&gt;
|[[User:sgiaccio|Stefano Giaccio]] || [[GeoNetwork]] || single            ||yes  ||  || tentative ||&lt;br /&gt;
|-&lt;br /&gt;
|Emanuele Tajariol || [[GeoNetwork]] || single            ||yes  ||  || confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
|Mark Small || [[EDINA]] || single            ||yes  ||  || Confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
|Michael koutroumpas || [[EDINA]] || single            ||yes  ||  || Confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
|Diego Guidi || [[MapServer]],[[GeoServer]],[[GvSig]] ||             ||yes  ||  || tentative ||&lt;br /&gt;
|-&lt;br /&gt;
|Paolo Corti || [[MapServer]],[[GeoServer]],[[GDAL]],[[FeatureServer]] ||             ||yes  ||  || tentative ||&lt;br /&gt;
|-&lt;br /&gt;
|José García || [[gvSIG]] || single || yes  ||  || Confirmed || x&lt;br /&gt;
|-&lt;br /&gt;
|Grant McKenzie || [[GeoNetwork]] || single || yes  ||  || tentative ||&lt;br /&gt;
|-&lt;br /&gt;
|Mathieu Coudert || [[GeoNetwork]] || single || yes ||  || Confirmed ||&lt;br /&gt;
|-&lt;br /&gt;
|''copy and paste this to add yourself''||  ||  ||  || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
: [1] there are options to do outdoor activities like tracking. A guide can be organized and the cost is very reasonable.&lt;br /&gt;
&lt;br /&gt;
=== How to arrive to the Monastry ===&lt;br /&gt;
&lt;br /&gt;
The closest airports are the Roma airports (Ciampino and Fiumincino).&lt;br /&gt;
&lt;br /&gt;
From Rome to the monastry there is 135 km aproximately.&lt;br /&gt;
&lt;br /&gt;
There is no railway to Bolsena. &lt;br /&gt;
&lt;br /&gt;
From Rome you can take a bus (cotral http://www.cotralspa.it/ENG/capolinea.asp) to Viterbo and other bus from viterbo to Bolsena. &lt;br /&gt;
&lt;br /&gt;
Monday to Friday there is a bus each hour but Sunday there are very few buses.&lt;br /&gt;
&lt;br /&gt;
From Bolsena main street to the Monastry is aproximately 1 km. &lt;br /&gt;
&lt;br /&gt;
It could be interesting to rent a private bus or several cars to move from Rome to the Monastry and from the Monastry to Rome.&lt;br /&gt;
&lt;br /&gt;
If you are interested in share vehicle please add your name to the following table and the columns you need for new ideas.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!width=&amp;quot;250&amp;quot;|Name&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|I prefer to rent a bus&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|I prefer to share rented car&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|I'll go with my car and I have free seats&lt;br /&gt;
|-&lt;br /&gt;
| Javier Carrasco || X ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Juan Lucas Dominguez || X ||  || &lt;br /&gt;
|-&lt;br /&gt;
| José García || X ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Michael Koutroumpas || X ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Mark Small || X ||  || &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|''copy and paste this to add yourself''||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Events]]&lt;br /&gt;
[[Category:Code Sprints]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=OSGeo_Hacking_event&amp;diff=23243</id>
		<title>OSGeo Hacking event</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=OSGeo_Hacking_event&amp;diff=23243"/>
		<updated>2008-03-01T10:20:43Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Interested? Sign up here */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OSGeo Hacking event in a monastry near Bolsena (16-22 June 2008) ==&lt;br /&gt;
; [[Event Owner]]: [[User:ticheler | Jeroen Ticheler]]&lt;br /&gt;
; When: 16-22 June 2008&lt;br /&gt;
; Where: [http://tinyurl.com/2t6zby Bolsena - Italy]&lt;br /&gt;
&lt;br /&gt;
We will have an OSGeo &amp;quot;hacking&amp;quot; event in an [http://www.conventobolsena.org/ Italian monastry] ([http://tinyurl.com/2t6zby here]). The monastry is overlooking Lago Bolsena and offers space to about 25 people in small bedrooms :-) . Its probably one of the coolest places for such an event. Quiet, isolated, simple and serene. There's a good wireless and wired internet connection, although I wouldn't bet my hand on it if we all start to download satellite images. It should be perfect for SVN, IRC and mail. Have a look yourself, including looking at the photo gallery.&lt;br /&gt;
&lt;br /&gt;
The cost will be about 200 Euro per person for the week. &lt;br /&gt;
&lt;br /&gt;
For what the food concerns, there will be a cook who will serve breakfast, lunch and dinner for 30 Euro per person per day. There's a large dining space, but we will eat outside overlooking the lake if weather permits (very likely in June). &lt;br /&gt;
&lt;br /&gt;
We'll discuss other technicalities as they come up, i.e. assistance if you need to rent a car, organize to travel together, public transport etc... Please feel free to use this WIKI page for that or create a sub page.&lt;br /&gt;
&lt;br /&gt;
The event will take place during the whole week (7 days).&lt;br /&gt;
&lt;br /&gt;
Please contact me if you have questions about this event ([[User:ticheler |Jeroen Ticheler]])&lt;br /&gt;
&lt;br /&gt;
=== Interested? Sign up here ===&lt;br /&gt;
&lt;br /&gt;
Those participating, you will need to make and advance payment of 100 Euro to me to guarantee your place. Please contact me privately by email so we can arrange that. I've no problems if you later need to change as long as you make sure there's someone taking your place :-)&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!width=&amp;quot;250&amp;quot;|Name&lt;br /&gt;
!width=&amp;quot;250&amp;quot;|Projects&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|single/double room?&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Should we organize a cook?&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Outdoor activities? [1]&lt;br /&gt;
!width=&amp;quot;200&amp;quot;|Confirmed/tentative?&lt;br /&gt;
|-&lt;br /&gt;
|[[User:ticheler|Jeroen Ticheler]]      || [[GeoNetwork]]  &amp;amp; [[Marketing]]    || double            ||yes  || ||  Confirmed&lt;br /&gt;
|- &lt;br /&gt;
|[[User:ominiverdi|Lorenzo Becchi]]    ||  ka-Map &amp;amp; OpenLayers  || single            ||yes  || ||  confirmed&lt;br /&gt;
|-&lt;br /&gt;
|[[User:heikki|Heikki Doeleman]]        || [[GeoNetwork]]    || still don't know  ||yes  || ||  tentative&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Arnulf Christl|Arnulf Christl]] || [[Mapbender]] &amp;amp; [[Marketing]]  || double            ||yes  ||  || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Fxp|Francois Prunayre]]||     [[GeoNetwork]]        || still don't know   ||  yes   ||    || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
|[[User:SimonPigot|Simon Pigot]]||       [[GeoNetwork]]     ||  single  ||  yes   ||    || tentative&lt;br /&gt;
|-&lt;br /&gt;
|[[Kate Roberts]]||       [[GeoNetwork]]     ||  single  ||  yes   ||    || tentative&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Moovida | Andrea Antonello]]||       [http://www.jgrass.org JGrass]   ||  single  ||  yes   ||  there should be some :)  || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Silli | Silvia Franceschi]]||       [http://www.jgrass.org JGrass]   &amp;amp; [[Marketing]]      ||  single  ||  yes   ||    || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
|Daniele Andreis||       [http://www.jgrass.org JGrass]     ||  single  ||  yes   ||    || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
|6 * GeoServer devs||[http://geoserver.org GeoServer]  || single  || yes  || || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
|[[User:jacarma | Javier Carrasco]]||       [http://www.gvsig.gva.es/index.php?id=gvsig&amp;amp;L=2 gvSIG]   &amp;amp; gvSIG Mobile    ||  single || yes   ||    || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
| Juan Lucas Dominguez ||       [http://www.gvsig.gva.es/index.php?id=gvsig&amp;amp;L=2 gvSIG]   &amp;amp; gvSIG Mobile    ||  single || yes   ||    || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
|[[User:volaya | Victor Olaya]] || [http://www.sextantegis.com SEXTANTE]  || single  || yes || || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landa|Martin Landa]] || [http://grass.osgeo.org GRASS GIS] ||  single || yes   ||  || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
|Giuseppe Onorevoli||[http://www.jgrass.org JGrass]|| single || yes || || tentative&lt;br /&gt;
|-&lt;br /&gt;
|Patrizia Monteduro|| [http://geonetwork-opensource.org Geonetwork] || no need || no || ||tentative&lt;br /&gt;
|-&lt;br /&gt;
|[[User:simboss|Simone Giannecchini]] || [[GeoTools]] &amp;amp; [http://geoserver.org GeoServer] (&amp;amp; [http://www.gdal.org GDAL] SWIG Java)  || double            ||yes  ||  || tentative&lt;br /&gt;
|-&lt;br /&gt;
|[[User:sgiaccio|Stefano Giaccio]] || [[GeoNetwork]] || single            ||yes  ||  || tentative&lt;br /&gt;
|-&lt;br /&gt;
|Emanuele Tajariol || [[GeoNetwork]] || single            ||yes  ||  || tentative&lt;br /&gt;
|-&lt;br /&gt;
|Mark Small || [[EDINA]] || single            ||yes  ||  || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
|Michael koutroumpas || [[EDINA]] || single            ||yes  ||  || Confirmed&lt;br /&gt;
|-&lt;br /&gt;
|Diego Guidi || [[MapServer]],[[GeoServer]],[[GvSig]] ||             ||yes  ||  || tentative&lt;br /&gt;
|-&lt;br /&gt;
|Paolo Corti || [[MapServer]],[[GeoServer]],[[GDAL]],[[FeatureServer]] ||             ||yes  ||  || tentative&lt;br /&gt;
|-&lt;br /&gt;
|Schuyler Erle || [[OpenLayers]] || single || unsure  ||  || tentative&lt;br /&gt;
|-&lt;br /&gt;
|''copy and paste this to add yourself''||  ||  ||  || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
: [1] there are options to do outdoor activities like tracking. A guide can be organized and the cost is very reasonable.&lt;br /&gt;
&lt;br /&gt;
=== How to arrive to the Monastry ===&lt;br /&gt;
&lt;br /&gt;
The closest airports are the Roma airports (Ciampino and Fiumincino).&lt;br /&gt;
&lt;br /&gt;
From Rome to the monastry there is 135 km aproximately.&lt;br /&gt;
&lt;br /&gt;
There is no railway to Bolsena. &lt;br /&gt;
&lt;br /&gt;
From Rome you can take a bus (cotral http://www.cotralspa.it/ENG/capolinea.asp) to Viterbo and other bus from viterbo to Bolsena. &lt;br /&gt;
&lt;br /&gt;
Monday to Friday there is a bus each hour but Sunday there are very few buses.&lt;br /&gt;
&lt;br /&gt;
From Bolsena main street to the Monastry is aproximately 1 km. &lt;br /&gt;
&lt;br /&gt;
It could be interesting to rent a private bus or several cars to move from Rome to the Monastry and from the Monastry to Rome.&lt;br /&gt;
&lt;br /&gt;
If you are interested in share vehicle please add your name to the following table and the columns you need for new ideas.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!width=&amp;quot;250&amp;quot;|Name&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|I prefer to rent a bus&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|I prefer to share rented car&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|I'll go with my car and I have free seats&lt;br /&gt;
|-&lt;br /&gt;
| Javier Carrasco || X ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Juan Lucas Dominguez || X ||  || &lt;br /&gt;
|-&lt;br /&gt;
|''copy and paste this to add yourself''||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Events]]&lt;br /&gt;
[[Category:Code Sprints]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=European_GIS_Code_Sprint&amp;diff=19474</id>
		<title>European GIS Code Sprint</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=European_GIS_Code_Sprint&amp;diff=19474"/>
		<updated>2007-10-17T13:48:27Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Goals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== European Code Sprint ==&lt;br /&gt;
&lt;br /&gt;
This event is planned as European follow-up of the Canadian [[FOSS4G2007 CodeSprint]] in September. After the great cooperation at the FOSS4G Sprint in Canada, and the interest shown in a European followup, the Sprint will be held.&lt;br /&gt;
It is thought for those who for whatever reason did miss the Canadian sprint, but also for those who started something in Canada and need to meet again once more after a few months.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Whom to contact for doubts, questions, ideas, volunteering ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Moovida | Andrea Antonello]]&lt;br /&gt;
&lt;br /&gt;
(add yourself here if you would like to help)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code Sprint - what's that? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(The following is taken from the page describing the planned &lt;br /&gt;
[http://wiki.osgeo.org/index.php/FOSS4G2007_CodeSprint Canadian Code Sprint at Foss4G2007].)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A code sprint is usually organized by a group that is using an open source project and wants to see something done.&lt;br /&gt;
They get the developers to a single location and feed them for a couple of days with the necessities of the hacking &lt;br /&gt;
life (internet, caffeine, electricity). The communication that happens from face to face hacking usually lasts the project&lt;br /&gt;
for a year or more. You see this a lot in projects like Drupal etc...&lt;br /&gt;
&lt;br /&gt;
Is this your First Sprint? Here is some background information to get you started:&lt;br /&gt;
&lt;br /&gt;
* http://www.infrae.com/about/activities/sprintathon/tips &lt;br /&gt;
* http://www.onlamp.com/pub/a/python/2006/10/19/running-a-sprint.html &lt;br /&gt;
* Example Sprint (from same people who do GeoServer): http://www.openplans.org/projects/bbq-sprint     &lt;br /&gt;
&lt;br /&gt;
To participate, start a section at the bottom of your page for your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Who should attend ==&lt;br /&gt;
&lt;br /&gt;
* Developers that need to meet the community and discuss issues about a particular project.&lt;br /&gt;
* Developers that have the feeling that knowing the different projects communities gives added value and often saves from doing things twice&lt;br /&gt;
* Power users that are able to contribute documentation, decend bug descriptions and perhaps even help to fix minor issues.&lt;br /&gt;
* Web experts that want to contribute to their favorite projects by helping to set up the web page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aims of the SFScon 2007 Code Sprint ==&lt;br /&gt;
&lt;br /&gt;
For developers:&lt;br /&gt;
* bring different projects to know each other and build up some standard interaction&lt;br /&gt;
* let the teams of each project meet, discuss, design and code together fulltime and non-remotely for a few days (this often pushes projects more than months of email and IRC working)&lt;br /&gt;
* bugfixing&lt;br /&gt;
&lt;br /&gt;
For Power Users:&lt;br /&gt;
* the possibility to meet the developer community and help (and be helped) with documentation and translation&lt;br /&gt;
* the possibility to propose important bugfixes (prior documented and reproducible, only power user accepted)&lt;br /&gt;
&lt;br /&gt;
For everyone out there:&lt;br /&gt;
* Collaborate on the creation of a free dataset by wandering in an ordered way through a defined region with GPS. The dataset should contain as many data as possible, as for example the OSGeo NC dataset of the [http://www.grassbook.org/data_menu3rd.php grassbook] does. Moreover climatic and hydrologic/hydraulic data should be integrated in order to support different analyses.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Location and Accommodation ==&lt;br /&gt;
&lt;br /&gt;
=== Where is it? ===&lt;br /&gt;
The code sprint will be organized as a post-event of the South Tyrol Free Software Conference 2007 held in Merano (BZ), Italy. &lt;br /&gt;
* SFScon location and GIS Code Sprint location is in Merano, at the &amp;quot;Franz Kafka High school, and can be found [http://maps.google.com/maps?q=&amp;amp;ie=UTF8&amp;amp;ll=46.670753,11.158923&amp;amp;spn=0.004829,0.009956&amp;amp;z=17&amp;amp;om=1 here].&lt;br /&gt;
&lt;br /&gt;
=== How to get there? ===&lt;br /&gt;
For trains and planes to get to the sprint please follow this:&lt;br /&gt;
[http://sfscon.it/2007/how-to-reach-merano how to reach Merano]&lt;br /&gt;
&lt;br /&gt;
=== Accommodations ===&lt;br /&gt;
The Organisers are trying to get together some packages and deals with the local Hotels for '''accommodation and meals'''. As soon as they are fixed, they will be published here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planned Dates ==&lt;br /&gt;
&lt;br /&gt;
* 16-17 Nov 2007: [http://www.sfscon.it/ South Tyrol Free Software Conference 2007]&lt;br /&gt;
* 18 Nov 2007 (Sunday): Outdoor GIS data collection for Free data set (somewhere in South Tyrol) '''(this event is not sure yet, no competent people could be found to organise it)'''&lt;br /&gt;
* 19-21 Nov 2007: GIS Code Sprint&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Who will organise the sprint ==&lt;br /&gt;
&lt;br /&gt;
The [http://www.tis.bz.it/bereiche/free-software-1 Free Software Center] of Bolzano, Italy, will take care of the organisative part of the event and investigate sponsorings for some parts of the free dataset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Attending people ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Moovida | Andrea Antonello]]&lt;br /&gt;
* [[User:Neteler | Markus Neteler]]&lt;br /&gt;
&lt;br /&gt;
=== Expressed interest in coming ===&lt;br /&gt;
&lt;br /&gt;
(please move you up if you already know that you will be there!)&lt;br /&gt;
&lt;br /&gt;
* [[User:Arnulf Christl | Arnulf Christl]]&lt;br /&gt;
* [[User:JoWalsh | Jo Walsh]]&lt;br /&gt;
* [[User:Mloskot | Mateusz Loskot]]&lt;br /&gt;
* [[User:Napo | Maurizio Napolitano]]&lt;br /&gt;
* [[User:Ominiverdi | Lorenzo Becchi]]&lt;br /&gt;
* [[User:Silli | Silvia Franceschi]]&lt;br /&gt;
* [[User:Pviskanic | Paolo Viskanic]]&lt;br /&gt;
* [[User:hopfgartner|Peter Hopfgartner]]&lt;br /&gt;
* [[User:ChristianTiso | Christian Tiso]]&lt;br /&gt;
* [[User:PaoloCavallini | Paolo Cavallini]]&lt;br /&gt;
* [[User:Landa | Martin Landa]]&lt;br /&gt;
* [[User:Acuster | Adrian Custer]]&lt;br /&gt;
* [[User:milovanderlinden | Milo van der Linden - The Netherlands]]&lt;br /&gt;
* [[User:perriger | Stefan Steiniger]] depending on the date&lt;br /&gt;
* [[User:fpenarru | Fran Peñarrubia]]&lt;br /&gt;
* [[User:simboss| Simone Giannecchini (probably only a day of the code sprint)]]&lt;br /&gt;
* [[User:aaime| Andrea Aime]]&lt;br /&gt;
* [[User:SchuylerErle | Schuyler Erle]]&lt;br /&gt;
* [[User:Groldan | Gabriel Roldan]]&lt;br /&gt;
&lt;br /&gt;
We feel that there is a huge need for a developer meeting that could&lt;br /&gt;
bring together different projects, that really need to interact if&lt;br /&gt;
they want to have a glorious future.&lt;br /&gt;
&lt;br /&gt;
== What do I need for the sprint? - wishlist ==&lt;br /&gt;
&lt;br /&gt;
Please add useful ideas for things that we might miss during the organisation:&lt;br /&gt;
&lt;br /&gt;
* flipcharts&lt;br /&gt;
* a good and stable internet connection&lt;br /&gt;
* enough network cables&lt;br /&gt;
* enough extension cords&lt;br /&gt;
* some way to do good remote participation (any idea? IRC will be there)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Virtual participation via IRC etc. ==&lt;br /&gt;
Too far away? Get virtually connected through IRC ([irc://irc.freenode.net/#osgeo #osgeo])! No IRC client software or strange firewall? Use the [http://irc.telascience.org/cgi-bin/irc.cgi Web based IRC client] (choose your Nickname and the #osgeo channel).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects attending the sprint plus involved people ==&lt;br /&gt;
&lt;br /&gt;
=== GDAL/OGR ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:Mloskot|Mateusz Loskot]]&lt;br /&gt;
* [[User:simboss| Simone Giannecchini ]] I have got a ouple of question on Java SWIG bindings&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* speed up GRASS/GDAL plugin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GRASS ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:Neteler | Markus Neteler]]&lt;br /&gt;
* [[User:Napo | Maurizio Napolitano]]&lt;br /&gt;
* [[User:Landa | Martin Landa]]&lt;br /&gt;
* [[User:bradd | Brad Douglas]] Attending via IRC #grass&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* get rid of annoying bugs from bug tracker&lt;br /&gt;
* work with JGrass/uDig on GRASS Vector integration&lt;br /&gt;
* speed up GRASS/GDAL plugin&lt;br /&gt;
* continue Italian translation of software&lt;br /&gt;
* work on [http://grass.gdf-hannover.de/wiki/WxGRASS wxPython GUI]&lt;br /&gt;
* finish lib/gmath linear algebra updates&lt;br /&gt;
&lt;br /&gt;
=== gvSIG ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:fpenarru| Fran Peñarrubia]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* Driver to connect with GRASS vectorial data?&lt;br /&gt;
* Cooperation with JGrass?.&lt;br /&gt;
* Develop some useful examples to start working with gvSIG.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== JGrass / uDig ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:Moovida | Andrea Antonello]]&lt;br /&gt;
* [[User:Silli | Silvia Franceschi]]&lt;br /&gt;
* [[User:ChristianTiso | Christian Tiso]]&lt;br /&gt;
* [[User:Acuster | Adrian Custer]]&lt;br /&gt;
* [[User:simboss| Simone Giannecchini ]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
&lt;br /&gt;
* cooperation with the [http://grass.itc.it/ GRASS] team for GRASS Vector integration in [http://www.jgrass.org JGrass] / [http://udig.refractions.net uDig]&lt;br /&gt;
* Italian translation of the project&lt;br /&gt;
* Create a usable JGrass homepage at jgrass.org&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MAPBENDER ===&lt;br /&gt;
[[Mapbender]] currently is mainly driven by German developers and use cases from the public administration. Participation in this event is an attempt to broaden interest at a European level as there is a lot of potential in the Mapbender project to solve issues raised by [[INSPIRE]].&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
''This is a preliminary set of participants who might be able to attend. Please add yourself.''&lt;br /&gt;
* [[User:Arnulf Christl]]&lt;br /&gt;
* [[User:Pviskanic|Paolo Viskanic]]&lt;br /&gt;
* [[User:hopfgartner|Peter Hopfgartner]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
''This is a preliminary set of ideas, one or two of them might have a chance to get acted upon.''&lt;br /&gt;
* plan to set out on a RESTful path&lt;br /&gt;
* further develop i18n activities (which has been spawned in the region that this development sprint is planned to happen)&lt;br /&gt;
* use Mapbender as a web based configuration tool for OpenLayers &lt;br /&gt;
&lt;br /&gt;
=== OpenJUMP GIS / JUMP Pilot ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:perriger| Stefan Steiniger]] - depending on the date, South Tirol should be ok for me :)&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* not yet specified&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Openlayers ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:SchuylerErle|Schuyler Erle]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
&lt;br /&gt;
The inexorable march to OpenLayers 2.6?&lt;br /&gt;
&lt;br /&gt;
=== QGIS ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* get rid of annoying bugs from [http://svn.qgis.org/trac bug tracker]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Proposed Events]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=European_GIS_Code_Sprint&amp;diff=19472</id>
		<title>European GIS Code Sprint</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=European_GIS_Code_Sprint&amp;diff=19472"/>
		<updated>2007-10-17T13:48:00Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Attending */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== European Code Sprint ==&lt;br /&gt;
&lt;br /&gt;
This event is planned as European follow-up of the Canadian [[FOSS4G2007 CodeSprint]] in September. After the great cooperation at the FOSS4G Sprint in Canada, and the interest shown in a European followup, the Sprint will be held.&lt;br /&gt;
It is thought for those who for whatever reason did miss the Canadian sprint, but also for those who started something in Canada and need to meet again once more after a few months.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Whom to contact for doubts, questions, ideas, volunteering ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Moovida | Andrea Antonello]]&lt;br /&gt;
&lt;br /&gt;
(add yourself here if you would like to help)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code Sprint - what's that? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(The following is taken from the page describing the planned &lt;br /&gt;
[http://wiki.osgeo.org/index.php/FOSS4G2007_CodeSprint Canadian Code Sprint at Foss4G2007].)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A code sprint is usually organized by a group that is using an open source project and wants to see something done.&lt;br /&gt;
They get the developers to a single location and feed them for a couple of days with the necessities of the hacking &lt;br /&gt;
life (internet, caffeine, electricity). The communication that happens from face to face hacking usually lasts the project&lt;br /&gt;
for a year or more. You see this a lot in projects like Drupal etc...&lt;br /&gt;
&lt;br /&gt;
Is this your First Sprint? Here is some background information to get you started:&lt;br /&gt;
&lt;br /&gt;
* http://www.infrae.com/about/activities/sprintathon/tips &lt;br /&gt;
* http://www.onlamp.com/pub/a/python/2006/10/19/running-a-sprint.html &lt;br /&gt;
* Example Sprint (from same people who do GeoServer): http://www.openplans.org/projects/bbq-sprint     &lt;br /&gt;
&lt;br /&gt;
To participate, start a section at the bottom of your page for your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Who should attend ==&lt;br /&gt;
&lt;br /&gt;
* Developers that need to meet the community and discuss issues about a particular project.&lt;br /&gt;
* Developers that have the feeling that knowing the different projects communities gives added value and often saves from doing things twice&lt;br /&gt;
* Power users that are able to contribute documentation, decend bug descriptions and perhaps even help to fix minor issues.&lt;br /&gt;
* Web experts that want to contribute to their favorite projects by helping to set up the web page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aims of the SFScon 2007 Code Sprint ==&lt;br /&gt;
&lt;br /&gt;
For developers:&lt;br /&gt;
* bring different projects to know each other and build up some standard interaction&lt;br /&gt;
* let the teams of each project meet, discuss, design and code together fulltime and non-remotely for a few days (this often pushes projects more than months of email and IRC working)&lt;br /&gt;
* bugfixing&lt;br /&gt;
&lt;br /&gt;
For Power Users:&lt;br /&gt;
* the possibility to meet the developer community and help (and be helped) with documentation and translation&lt;br /&gt;
* the possibility to propose important bugfixes (prior documented and reproducible, only power user accepted)&lt;br /&gt;
&lt;br /&gt;
For everyone out there:&lt;br /&gt;
* Collaborate on the creation of a free dataset by wandering in an ordered way through a defined region with GPS. The dataset should contain as many data as possible, as for example the OSGeo NC dataset of the [http://www.grassbook.org/data_menu3rd.php grassbook] does. Moreover climatic and hydrologic/hydraulic data should be integrated in order to support different analyses.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Location and Accommodation ==&lt;br /&gt;
&lt;br /&gt;
=== Where is it? ===&lt;br /&gt;
The code sprint will be organized as a post-event of the South Tyrol Free Software Conference 2007 held in Merano (BZ), Italy. &lt;br /&gt;
* SFScon location and GIS Code Sprint location is in Merano, at the &amp;quot;Franz Kafka High school, and can be found [http://maps.google.com/maps?q=&amp;amp;ie=UTF8&amp;amp;ll=46.670753,11.158923&amp;amp;spn=0.004829,0.009956&amp;amp;z=17&amp;amp;om=1 here].&lt;br /&gt;
&lt;br /&gt;
=== How to get there? ===&lt;br /&gt;
For trains and planes to get to the sprint please follow this:&lt;br /&gt;
[http://sfscon.it/2007/how-to-reach-merano how to reach Merano]&lt;br /&gt;
&lt;br /&gt;
=== Accommodations ===&lt;br /&gt;
The Organisers are trying to get together some packages and deals with the local Hotels for '''accommodation and meals'''. As soon as they are fixed, they will be published here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planned Dates ==&lt;br /&gt;
&lt;br /&gt;
* 16-17 Nov 2007: [http://www.sfscon.it/ South Tyrol Free Software Conference 2007]&lt;br /&gt;
* 18 Nov 2007 (Sunday): Outdoor GIS data collection for Free data set (somewhere in South Tyrol) '''(this event is not sure yet, no competent people could be found to organise it)'''&lt;br /&gt;
* 19-21 Nov 2007: GIS Code Sprint&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Who will organise the sprint ==&lt;br /&gt;
&lt;br /&gt;
The [http://www.tis.bz.it/bereiche/free-software-1 Free Software Center] of Bolzano, Italy, will take care of the organisative part of the event and investigate sponsorings for some parts of the free dataset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Attending people ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Moovida | Andrea Antonello]]&lt;br /&gt;
* [[User:Neteler | Markus Neteler]]&lt;br /&gt;
&lt;br /&gt;
=== Expressed interest in coming ===&lt;br /&gt;
&lt;br /&gt;
(please move you up if you already know that you will be there!)&lt;br /&gt;
&lt;br /&gt;
* [[User:Arnulf Christl | Arnulf Christl]]&lt;br /&gt;
* [[User:JoWalsh | Jo Walsh]]&lt;br /&gt;
* [[User:Mloskot | Mateusz Loskot]]&lt;br /&gt;
* [[User:Napo | Maurizio Napolitano]]&lt;br /&gt;
* [[User:Ominiverdi | Lorenzo Becchi]]&lt;br /&gt;
* [[User:Silli | Silvia Franceschi]]&lt;br /&gt;
* [[User:Pviskanic | Paolo Viskanic]]&lt;br /&gt;
* [[User:hopfgartner|Peter Hopfgartner]]&lt;br /&gt;
* [[User:ChristianTiso | Christian Tiso]]&lt;br /&gt;
* [[User:PaoloCavallini | Paolo Cavallini]]&lt;br /&gt;
* [[User:Landa | Martin Landa]]&lt;br /&gt;
* [[User:Acuster | Adrian Custer]]&lt;br /&gt;
* [[User:milovanderlinden | Milo van der Linden - The Netherlands]]&lt;br /&gt;
* [[User:perriger | Stefan Steiniger]] depending on the date&lt;br /&gt;
* [[User:fpenarru | Fran Peñarrubia]]&lt;br /&gt;
* [[User:simboss| Simone Giannecchini (probably only a day of the code sprint)]]&lt;br /&gt;
* [[User:aaime| Andrea Aime]]&lt;br /&gt;
* [[User:SchuylerErle | Schuyler Erle]]&lt;br /&gt;
* [[User:Groldan | Gabriel Roldan]]&lt;br /&gt;
&lt;br /&gt;
We feel that there is a huge need for a developer meeting that could&lt;br /&gt;
bring together different projects, that really need to interact if&lt;br /&gt;
they want to have a glorious future.&lt;br /&gt;
&lt;br /&gt;
== What do I need for the sprint? - wishlist ==&lt;br /&gt;
&lt;br /&gt;
Please add useful ideas for things that we might miss during the organisation:&lt;br /&gt;
&lt;br /&gt;
* flipcharts&lt;br /&gt;
* a good and stable internet connection&lt;br /&gt;
* enough network cables&lt;br /&gt;
* enough extension cords&lt;br /&gt;
* some way to do good remote participation (any idea? IRC will be there)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Virtual participation via IRC etc. ==&lt;br /&gt;
Too far away? Get virtually connected through IRC ([irc://irc.freenode.net/#osgeo #osgeo])! No IRC client software or strange firewall? Use the [http://irc.telascience.org/cgi-bin/irc.cgi Web based IRC client] (choose your Nickname and the #osgeo channel).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects attending the sprint plus involved people ==&lt;br /&gt;
&lt;br /&gt;
=== GDAL/OGR ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:Mloskot|Mateusz Loskot]]&lt;br /&gt;
* [[User:simboss| Simone Giannecchini ]] I have got a ouple of question on Java SWIG bindings&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* speed up GRASS/GDAL plugin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GRASS ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:Neteler | Markus Neteler]]&lt;br /&gt;
* [[User:Napo | Maurizio Napolitano]]&lt;br /&gt;
* [[User:Landa | Martin Landa]]&lt;br /&gt;
* [[User:bradd | Brad Douglas]] Attending via IRC #grass&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* get rid of annoying bugs from bug tracker&lt;br /&gt;
* work with JGrass/uDig on GRASS Vector integration&lt;br /&gt;
* speed up GRASS/GDAL plugin&lt;br /&gt;
* continue Italian translation of software&lt;br /&gt;
* work on [http://grass.gdf-hannover.de/wiki/WxGRASS wxPython GUI]&lt;br /&gt;
* finish lib/gmath linear algebra updates&lt;br /&gt;
&lt;br /&gt;
=== gvSIG ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:fpenarru| Fran Peñarrubia]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* Driver to connect with GRASS vectorial data?&lt;br /&gt;
* Cooperation with JGrass?.&lt;br /&gt;
* Develop some useful examples to start working with gvSIG.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== JGrass / uDig ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:Moovida | Andrea Antonello]]&lt;br /&gt;
* [[User:Silli | Silvia Franceschi]]&lt;br /&gt;
* [[User:ChristianTiso | Christian Tiso]]&lt;br /&gt;
* [[User:Acuster | Adrian Custer]]&lt;br /&gt;
* [[User:simboss| Simone Giannecchini ]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
&lt;br /&gt;
* cooperation with the [http://grass.itc.it/ GRASS] team for GRASS Vector integration in [http://www.jgrass.org JGrass] / [http://udig.refractions.net uDig]&lt;br /&gt;
* Italian translation of the project&lt;br /&gt;
* Create a usable JGrass homepage at jgrass.org&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MAPBENDER ===&lt;br /&gt;
[[Mapbender]] currently is mainly driven by German developers and use cases from the public administration. Participation in this event is an attempt to broaden interest at a European level as there is a lot of potential in the Mapbender project to solve issues raised by [[INSPIRE]].&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
''This is a preliminary set of participants who might be able to attend. Please add yourself.''&lt;br /&gt;
* [[User:Arnulf Christl]]&lt;br /&gt;
* [[User:Pviskanic|Paolo Viskanic]]&lt;br /&gt;
* [[User:hopfgartner|Peter Hopfgartner]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
''This is a preliminary set of ideas, one or two of them might have a chance to get acted upon.''&lt;br /&gt;
* plan to set out on a RESTful path&lt;br /&gt;
* further develop i18n activities (which has been spawned in the region that this development sprint is planned to happen)&lt;br /&gt;
* use Mapbender as a web based configuration tool for OpenLayers &lt;br /&gt;
&lt;br /&gt;
=== OpenJUMP GIS / JUMP Pilot ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:perriger| Stefan Steiniger]] - depending on the date, South Tirol should be ok for me :)&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* not yet specified&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Openlayers ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:SchuylerErle|Schuyler Erle]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== QGIS ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* get rid of annoying bugs from [http://svn.qgis.org/trac bug tracker]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Proposed Events]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=User:SchuylerErle&amp;diff=19297</id>
		<title>User:SchuylerErle</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=User:SchuylerErle&amp;diff=19297"/>
		<updated>2007-10-12T18:00:43Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schuyler is on the PSC of the [[OpenLayers]] project and co-founded the [[TileCache]] and [[FeatureServer]] projects. He has every intention of contributing to the [[Public Geospatial Data Committee]].&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=User:SchuylerErle&amp;diff=19296</id>
		<title>User:SchuylerErle</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=User:SchuylerErle&amp;diff=19296"/>
		<updated>2007-10-12T17:59:54Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schuyler is on the PSC of the [[OpenLayers]] project and co-founded the [[TileCache]] and [[FeatureServer]] projects. He has every intention of contributing to the [[Public Geodata Committee]].&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=European_GIS_Code_Sprint&amp;diff=19295</id>
		<title>European GIS Code Sprint</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=European_GIS_Code_Sprint&amp;diff=19295"/>
		<updated>2007-10-12T17:50:07Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Interested in Coming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== European Code Sprint ==&lt;br /&gt;
&lt;br /&gt;
This event is planned as European follow-up of the Canadian [[FOSS4G2007 CodeSprint]] in September. After the great cooperation at the FOSS4G Sprint in Canada, and the interest shown in a European followup, the Sprint will be held.&lt;br /&gt;
It is thought for those who for whatever reason did miss the Canadian sprint, but also for those who started something in Canada and need to meet again once more after a few months.&lt;br /&gt;
&lt;br /&gt;
== Code Sprint - what's that? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(The following is taken from the page describing the planned &lt;br /&gt;
[http://wiki.osgeo.org/index.php/FOSS4G2007_CodeSprint Canadian Code Sprint at Foss4G2007].)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A code sprint is usually organized by a group that is using an open source project and wants to see something done.&lt;br /&gt;
They get the developers to a single location and feed them for a couple of days with the necessities of the hacking &lt;br /&gt;
life (internet, caffeine, electricity). The communication that happens from face to face hacking usually lasts the project&lt;br /&gt;
for a year or more. You see this a lot in projects like Drupal etc...&lt;br /&gt;
&lt;br /&gt;
Is this your First Sprint? Here is some background information to get you started:&lt;br /&gt;
&lt;br /&gt;
* http://www.infrae.com/about/activities/sprintathon/tips &lt;br /&gt;
* http://www.onlamp.com/pub/a/python/2006/10/19/running-a-sprint.html &lt;br /&gt;
* Example Sprint (from same people who do GeoServer): http://www.openplans.org/projects/bbq-sprint     &lt;br /&gt;
&lt;br /&gt;
To participate, start a section at the bottom of your page for your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Who should attend ==&lt;br /&gt;
&lt;br /&gt;
* Developers that need to meet the community and discuss issues about a particular project.&lt;br /&gt;
* Developers that have the feeling that knowing the different projects communities gives added value and often saves from doing things twice&lt;br /&gt;
* Power users that are able to contribute documentation, decend bugdescriptions and perhaps even help to fix minor issues.&lt;br /&gt;
* Web experts that want to contribute to their favorite projects by helping to set up the web page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aims of the SFScon 2007 Code Sprint ==&lt;br /&gt;
&lt;br /&gt;
For developers:&lt;br /&gt;
* bring different projects to know each other and build up some standard interaction&lt;br /&gt;
* let the teams of each project meet, discuss, design and code together fulltime and non-remotely for a few days (this often pushes projects more than months of email and IRC working)&lt;br /&gt;
* bugfixing&lt;br /&gt;
&lt;br /&gt;
For Power Users:&lt;br /&gt;
* the possibility to meet the developer comunity and help (and be helped) with documentation and translation&lt;br /&gt;
* the possibility to propose important bugfixes (prior documented and reproductable, only power user accepted)&lt;br /&gt;
&lt;br /&gt;
For everyone out there:&lt;br /&gt;
* Collaborate on the creation of a free dataset by wandering in an ordered way through a defined region with GPS. The dataset should contain as many data as possible, as for example the dataset of the [http://www.grassbook.org/grasslocations/nc_spm_06_contents.html grassbook] does. Moreover climatic and hydrologic/hydraulic data should be integrated in order to support different analyses.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to get there - The Location and Accommodation ==&lt;br /&gt;
&lt;br /&gt;
The code sprint will be organized as a post-event of the South Tyrol Free Software Conference 2007 held in Merano (BZ), Italy. &lt;br /&gt;
* SFScon location and GIS Code Sprint location is in Merano, at the &amp;quot;Franz Kafka Highschool, and can be found [http://maps.google.com/maps?q=&amp;amp;ie=UTF8&amp;amp;ll=46.670753,11.158923&amp;amp;spn=0.004829,0.009956&amp;amp;z=17&amp;amp;om=1 here].&lt;br /&gt;
&lt;br /&gt;
'''For trains and planes to get to the sprint please follow this''':&lt;br /&gt;
[http://sfscon.it/2007/how-to-reach-merano how to reach Merano]&lt;br /&gt;
&lt;br /&gt;
== Planned Dates ==&lt;br /&gt;
&lt;br /&gt;
* 16-17 Nov 2007: [http://www.sfscon.it/ South Tyrol Free Software Conference 2007]&lt;br /&gt;
* 18 Nov 2007 (Sunday): Outdoor GIS data collection for Free data set (somewhere in South Tyrol) '''(this event is not sure yet, no competent people could be found to organise it)'''&lt;br /&gt;
* 19-21 Nov 2007: GIS Code Sprint&lt;br /&gt;
&lt;br /&gt;
== Who will organise the sprint ==&lt;br /&gt;
&lt;br /&gt;
The [http://www.tis.bz.it/bereiche/free-software-1 Free Software Center] of Bolzano, Italy, will take care of the organisative part of the event and investigate sponsorings for some parts of the free dataset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interested in Coming ==&lt;br /&gt;
Time is rather short and we would like to understand how much interest&lt;br /&gt;
there is in such an event and more or less how many developer would&lt;br /&gt;
like to attend.&lt;br /&gt;
&lt;br /&gt;
* [[User:Moovida | Andrea Antonello]]&lt;br /&gt;
* [[User:Neteler | Markus Neteler]]&lt;br /&gt;
* [[User:Arnulf Christl | Arnulf Christl]]&lt;br /&gt;
* [[User:JoWalsh | Jo Walsh]]&lt;br /&gt;
* [[User:Mloskot | Mateusz Loskot]]&lt;br /&gt;
* [[User:Napo | Maurizio Napolitano]]&lt;br /&gt;
* [[User:Ominiverdi | Lorenzo Becchi]]&lt;br /&gt;
* [[User:Silli | Silvia Franceschi]]&lt;br /&gt;
* [[User:Pviskanic | Paolo Viskanic]]&lt;br /&gt;
* [[User:hopfgartner|Peter Hopfgartner]]&lt;br /&gt;
* [[User:ChristianTiso | Christian Tiso]]&lt;br /&gt;
* [[User:PaoloCavallini | Paolo Cavallini]]&lt;br /&gt;
* [[User:Landa | Martin Landa]]&lt;br /&gt;
* [[User:Acuster | Adrian Custer]]&lt;br /&gt;
* [[User:milovanderlinden | Milo van der Linden - The Netherlands]]&lt;br /&gt;
* [[User:perriger | Stefan Steiniger]] depending on the date&lt;br /&gt;
* [[User:fpenarru | Fran Peñarrubia]]&lt;br /&gt;
* [[User:simboss| Simone Giannecchini (probably only a day of the code sprint)]]&lt;br /&gt;
* [[User:aaime| Andrea Aime]]&lt;br /&gt;
* [[User:SchuylerErle | Schuyler Erle]]&lt;br /&gt;
We feel that there is a huge need for a developer meeting that could&lt;br /&gt;
bring together different projects, that really need to interact if&lt;br /&gt;
they want to have a glorious future.&lt;br /&gt;
&lt;br /&gt;
== Virtual participation via IRC etc. ==&lt;br /&gt;
Too far away? Get virtually connected through IRC ([irc://irc.freenode.net/#osgeo #osgeo])! No IRC client software or strange firewall? Use the [http://irc.telascience.org/cgi-bin/irc.cgi Web based IRC client] (choose your Nickname and the #osgeo channel).&lt;br /&gt;
&lt;br /&gt;
== Projects attending the sprint ==&lt;br /&gt;
&lt;br /&gt;
TODO: order alphabetically&lt;br /&gt;
&lt;br /&gt;
=== QGIS ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* get rid of annoying bugs from [http://svn.qgis.org/trac bug tracker]&lt;br /&gt;
&lt;br /&gt;
=== GDAL/OGR ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:Mloskot|Mateusz Loskot]]&lt;br /&gt;
* [[User:simboss| Simone Giannecchini ]] I have got a ouple of question on Java SWIG bindings&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* speed up GRASS/GDAL plugin&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:Neteler | Markus Neteler]]&lt;br /&gt;
* [[User:Napo | Maurizio Napolitano]]&lt;br /&gt;
* [[User:Landa | Martin Landa]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* get rid of annoying bugs from bug tracker&lt;br /&gt;
* work with JGrass/uDig on GRASS Vector integration&lt;br /&gt;
* speed up GRASS/GDAL plugin&lt;br /&gt;
* continue Italian translation of software&lt;br /&gt;
* work on [http://grass.gdf-hannover.de/wiki/WxGRASS wxPython GUI]&lt;br /&gt;
&lt;br /&gt;
=== JGrass / uDig ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:Moovida | Andrea Antonello]]&lt;br /&gt;
* [[User:Silli | Silvia Franceschi]]&lt;br /&gt;
* [[User:ChristianTiso | Christian Tiso]]&lt;br /&gt;
* [[User:Acuster | Adrian Custer]]&lt;br /&gt;
* [[User:simboss| Simone Giannecchini ]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
&lt;br /&gt;
* cooperation with the [http://grass.itc.it/ GRASS] team for GRASS Vector integration in [http://www.jgrass.org JGrass] / [http://udig.refractions.net uDig]&lt;br /&gt;
* Italian translation of the project&lt;br /&gt;
&lt;br /&gt;
=== MAPBENDER ===&lt;br /&gt;
[[Mapbender]] currently is mainly driven by German developers and use cases from the public administration. Participation in this event is an attempt to broaden interest at a European level as there is a lot of potential in the Mapbender project to solve issues raised by [[INSPIRE]].&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
''This is a preliminary set of participants who might be able to attend. Please add yourself.''&lt;br /&gt;
* [[User:Arnulf Christl]]&lt;br /&gt;
* [[User:Pviskanic|Paolo Viskanic]]&lt;br /&gt;
* [[User:hopfgartner|Peter Hopfgartner]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
''This is a preliminary set of ideas, one or two of them might have a chance to get acted upon.''&lt;br /&gt;
* plan to set out on a RESTful path&lt;br /&gt;
* further develop i18n activities (which has been spawned in the region that this development sprint is planned to happen)&lt;br /&gt;
* use Mapbender as a web based configuration tool for OpenLayers &lt;br /&gt;
&lt;br /&gt;
=== OpenJUMP GIS / JUMP Pilot ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:perriger| Stefan Steiniger]] - depending on the date, South Tirol should be ok for me :)&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* not yet specified&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== gvSIG ===&lt;br /&gt;
&lt;br /&gt;
==== Attending ====&lt;br /&gt;
&lt;br /&gt;
* [[User:fpenarru| Fran Peñarrubia]]&lt;br /&gt;
&lt;br /&gt;
==== Goals ====&lt;br /&gt;
* Driver to connect with GRASS vectorial data?&lt;br /&gt;
* Cooperation with JGrass?.&lt;br /&gt;
* Develop some useful examples to start working with gvSIG.&lt;br /&gt;
&lt;br /&gt;
[[Category:Proposed Events]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=FOSS4G2007_CodeSprint&amp;diff=17919</id>
		<title>FOSS4G2007 CodeSprint</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=FOSS4G2007_CodeSprint&amp;diff=17919"/>
		<updated>2007-09-07T19:15:38Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Attending */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back to [[FOSS4G2007]]...&lt;br /&gt;
&lt;br /&gt;
== Organizing Contacts ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Jive | Jody Garnett]]&lt;br /&gt;
&lt;br /&gt;
== Code Sprint - what's that? ==&lt;br /&gt;
&lt;br /&gt;
A code sprint is usually organized by a group that is using an open source project and wants to see something done. They fly the developers to a single location and feed them for a couple of days with the necessities of the hacking life (internet, caffeine, electricity). The communication that happens from face to face hacking usually lasts the project for a year or more. You see this a lot in projects like Drupal etc...&lt;br /&gt;
&lt;br /&gt;
== Motivation and Direction ==&lt;br /&gt;
&lt;br /&gt;
A day, a code base, and your imagination?&lt;br /&gt;
&lt;br /&gt;
On the Friday after the conference, a [http://www.foss4g2007.org/code_sprint/ big room] with internet connectivity, lots of tables and flip charts will be arranged.  Projects can use the time and venue for organizational discussions, development roadmaps, and group resolution of thorny issues in their code bases.&lt;br /&gt;
&lt;br /&gt;
Is this your First Sprint? Here is some background information to get you started:&lt;br /&gt;
&lt;br /&gt;
* http://www.infrae.com/about/activities/sprintathon/tips &lt;br /&gt;
* http://www.onlamp.com/pub/a/python/2006/10/19/running-a-sprint.html &lt;br /&gt;
* Example Sprint (from same people who do GeoServer): http://www.openplans.org/projects/bbq-sprint &lt;br /&gt;
&lt;br /&gt;
To participate, start a section below for your project.&lt;br /&gt;
&lt;br /&gt;
== GeoTools ==&lt;br /&gt;
&lt;br /&gt;
=== Attending ===&lt;br /&gt;
&lt;br /&gt;
* Andrea Aime&lt;br /&gt;
* [[User:Jdeolive | Justin Deoliveira]]&lt;br /&gt;
* [[User:Jive | Jody Garnett]]&lt;br /&gt;
* [[User:Chorner | Cory Horner]]&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
We are going to to do a cross project code sprint (with GeoServer and uDig developers) focused on changing the internals over to the new Feature model. If we run across any old Filter code we will take care of it as well. The &amp;quot;old&amp;quot; Feature interface will still be available for client code to use - this sprint is just focused on updating (and testing the heck out of) our internals.&lt;br /&gt;
&lt;br /&gt;
=== Preparation ===&lt;br /&gt;
&lt;br /&gt;
We need *good* code examples of how to do the following before we start: Use SimpleFeatureTypeBuilder, use SimpleFeatureBuilder. It may also help to have a big old class diagram of the Feature model.&lt;br /&gt;
&lt;br /&gt;
We expect each developer to have a working build of trunk, have read the interfaces for SimpleFeature and the above code examples.&lt;br /&gt;
&lt;br /&gt;
=== Out of Scope ===&lt;br /&gt;
&lt;br /&gt;
There are lots of things that are going to have to follow out of scope for this sprint. I am going to bring attention to the following explicitly. *Performance* (the implementation of SimpleFeature available here is for the transition period only - optimize on your own time after we have updated the codebase to handle it). *Javadocs* - much of the javadocs will be out of date by the time we are done, type a sentence and move on.&lt;br /&gt;
&lt;br /&gt;
During the code sprint you will be tempted - when you run into any good ideas on these topics simply fire an email off to the devel list and we will revisit it later.&lt;br /&gt;
&lt;br /&gt;
== GRASS ==&lt;br /&gt;
&lt;br /&gt;
=== Attending ===&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
* Hack session&lt;br /&gt;
&lt;br /&gt;
== GDAL Bug Squash ==&lt;br /&gt;
&lt;br /&gt;
Details at: http://trac.osgeo.org/gdal/wiki/BugSquash2007&lt;br /&gt;
&lt;br /&gt;
== GeoNetwork / Metadata Madness ==&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Building crawler/harvester/aggregator applications on top of the GeoNetwork metadata catalog network and similar interfaces. Plugging client stuff like gvSIG and uDig into it. &lt;br /&gt;
&lt;br /&gt;
=== Attending ===&lt;br /&gt;
&lt;br /&gt;
* [[User:JoWalsh|Jo Walsh]]&lt;br /&gt;
* [[User:Fxp|François Prunayre]]&lt;br /&gt;
&lt;br /&gt;
== OpenLayers ==&lt;br /&gt;
&lt;br /&gt;
=== Attending ===&lt;br /&gt;
&lt;br /&gt;
* [[User:crschmidt|Christopher Schmidt]]&lt;br /&gt;
* [[User:aaronr|Aaron Racicot]]&lt;br /&gt;
* [[User:tschaub|Tim Schaub]]&lt;br /&gt;
* [[User:euzuro|Erik Uzureau]]&lt;br /&gt;
* [[User:ominiverdi|Lorenzo Becchi]]&lt;br /&gt;
* [[User:SchuylerErle|Schuyler Erle]]&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
Hack, hack, hack. I think this will be OpenLayers 2.6 or 2.7?&lt;br /&gt;
&lt;br /&gt;
Some specific ideas:&lt;br /&gt;
* OL Context/WMC+ - read/write support for and OWS Context style doc&lt;br /&gt;
* SLD support - edit/read/write&lt;br /&gt;
* Renderer Optimizations&lt;br /&gt;
** consider attributing geometry components with a minResolution below which the renderer doesn't deal with them&lt;br /&gt;
** clipping - svg supports clipping, we need to consider clipping or another method of dealing with geometries that extend beyond the renderer bounds&lt;br /&gt;
&lt;br /&gt;
== QGIS ==&lt;br /&gt;
=== Attending ===&lt;br /&gt;
* [[User:Gsherman|Gary Sherman]]&lt;br /&gt;
* [[User:Aaronr|Aaron Racicot]]&lt;br /&gt;
* [[User:hdus|Horst Düster]]&lt;br /&gt;
* [[User:spacedman|Barry Rowlingson]]&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
Here are some goals/wishes/ideas for the code sprint:&lt;br /&gt;
&lt;br /&gt;
1. I would love to get some traction on expanding the &amp;quot;Tim Tutorials&amp;quot; into a more generic and robust framework for stand alone apps.  Focusing on the Python bindings would be my preference. (Aaron Racicot)&lt;br /&gt;
&lt;br /&gt;
2. Build an ''all-in-one'' data browser:&lt;br /&gt;
* Display a tree of all QGIS supported types, including PostGIS and WMS&lt;br /&gt;
* Support drag and drop from the browser to the QGIS map canvas&lt;br /&gt;
* Include file/layer management tools&lt;br /&gt;
&lt;br /&gt;
3. I would prefer a discussion in which direction symbolisation should go. (Horst Düster)&lt;br /&gt;
&lt;br /&gt;
== SWIG Bindings ==&lt;br /&gt;
&lt;br /&gt;
SWIG bindings are increasingly used and could be used by many projects. GDAL uses them, and this sprint will focus in GDAL's (new generation) bindings but more general discussion, goal setting, and talk on integration is very much hoped for.&lt;br /&gt;
&lt;br /&gt;
=== Attending ===&lt;br /&gt;
&lt;br /&gt;
* [[User:ajolma|Ari Jolma]]&lt;br /&gt;
* [[User:szekerest|Tamas Szekeres]]&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
* present a short introduction to SWIG (AJ: I'll prepare this)&lt;br /&gt;
* develop a vision of how we integrate tools and create common look and feel high-level programming interfaces with SWIG bindings&lt;br /&gt;
&lt;br /&gt;
Specifically for GDAL (from Tamas Szekeres' email):&lt;br /&gt;
&lt;br /&gt;
* harmonize the typemap usage between the various bindings (and update the README.typemaps accordingly)&lt;br /&gt;
* determine which of the gdal/ogr features should be added to (or perhaps removed from) the SWIG interface.&lt;br /&gt;
* look over the possibilities to automate the creation of the code-comment-documentation for the various languages.&lt;br /&gt;
* construct the expected object model diagram to follow by the various languages (and publish the model itself)&lt;br /&gt;
* discuss the language specific issues and the expected treatments. &lt;br /&gt;
&lt;br /&gt;
== Udig / JGrass ==&lt;br /&gt;
&lt;br /&gt;
Cross project code sprint with the JGrass and uDig projects.&lt;br /&gt;
&lt;br /&gt;
=== Attending ===&lt;br /&gt;
&lt;br /&gt;
* [[User:Moovida | Andrea Antonello]]&lt;br /&gt;
* [[User:jeichar | Jesse Eichar]]&lt;br /&gt;
* [[User:silli | Silvia Franceschi]]&lt;br /&gt;
* [[User:Jive | Jody Garnett]]&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
Currently these are proposals we are working on selecting a subset of these goals.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Topic&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Animation Framework&lt;br /&gt;
| If we could code up an example animation (say a point moving over a road network), then it becomes much easier for newcommers to work on fleshing this out. We could come up with a list of topics as the meeting draws nearer and decide on site as to which we wanted to tackle.&lt;br /&gt;
|-&lt;br /&gt;
| Debug uDig Trunk&lt;br /&gt;
| uDig trunk was moved to GeoTools trunk some time ago but the changes were major and many bugs still exist.  Styling for example still doesn't work&lt;br /&gt;
|-&lt;br /&gt;
| Simple Feature&lt;br /&gt;
| GeoTools is doing a cross project code sprint and will need a uDig developer to update our trunk to SimpleFeature&lt;br /&gt;
|-&lt;br /&gt;
|  Better GRASS compatibility&lt;br /&gt;
|  better GRASS compatibility through JGrass&lt;br /&gt;
|-&lt;br /&gt;
| Wizard and DND&lt;br /&gt;
| Separate catalog wizards and Drag and Drop code to simplify both problems&lt;br /&gt;
|-&lt;br /&gt;
| Rendering&lt;br /&gt;
| Rendering has been in need of an overhaul for quite some time. Lets fix it&lt;br /&gt;
|-&lt;br /&gt;
| Remove Cruft&lt;br /&gt;
| Lets comb the code base and get rid of some of the ugly/unused&lt;br /&gt;
|-&lt;br /&gt;
| 3D visualization&lt;br /&gt;
| let's talk a bit about 3D, jogl, jirr and other nasty things and udig&lt;br /&gt;
|-&lt;br /&gt;
| Italian translation of uDig&lt;br /&gt;
| I know this is rather utopic, but you never know :)&lt;br /&gt;
|-&lt;br /&gt;
| Definition of a portable workspace&lt;br /&gt;
| UDig should have the possibility to export the workspace, either automagically or even by just moving a folder from one user to the other. It's about relative paths, about copying data eventually into the workspace and things like that. I believe this is a critical problem for usability. Should remember to isolate username/password information as well.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Voting (scale 1-5)====&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID&lt;br /&gt;
! Voter&lt;br /&gt;
! Voter&lt;br /&gt;
! Voter&lt;br /&gt;
! Voter&lt;br /&gt;
! Voter&lt;br /&gt;
|-&lt;br /&gt;
|  Animation Framework&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Debug uDig Trunk&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Simple Feature&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Better GRASS compatibility&lt;br /&gt;
| 3&lt;br /&gt;
| 5 &lt;br /&gt;
| 5&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| Wizard and DND&lt;br /&gt;
| 4&lt;br /&gt;
| 3&lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Rendering&lt;br /&gt;
| 4&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Remove Cruft&lt;br /&gt;
| 4&lt;br /&gt;
| 3&lt;br /&gt;
| 0&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3D visualization&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Italian translation&lt;br /&gt;
| 2.5&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| x&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| Portable workspace&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== French translation ==&lt;br /&gt;
Contact: [[User:Yjacolin|Yjacolin]]&lt;br /&gt;
=== Attending ===&lt;br /&gt;
See [[OSGeo_fr_FOSS4G_2007_fr#Traduction_sprint|Translation sprint (in french)]]&lt;br /&gt;
=== Goals ===&lt;br /&gt;
Translate a documentation into french. The document has to be defined, some exemple : qgis, openlayers, OSGeo website, GRASS, MapBuilder, MapLab, OSGeo Journal Vol. 2, etc.&lt;br /&gt;
&lt;br /&gt;
[[Category:Events]]&lt;br /&gt;
[[Category:FOSS4G2007]]&lt;br /&gt;
[[Category:FOSS4G]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=FOSS4G2007_LightningTalks&amp;diff=16988</id>
		<title>FOSS4G2007 LightningTalks</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=FOSS4G2007_LightningTalks&amp;diff=16988"/>
		<updated>2007-08-11T19:44:11Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Schuyler Erle: Distributed Tile Caching */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back to [[FOSS4G2007]]...&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Eight speakers, five minutes each, [http://www.foss4g2007.org/plenaries/#lightning Lightning Talks] will be presented to the full conference attendance, and should be fast paced, visual, and entertaining.&lt;br /&gt;
&lt;br /&gt;
= Confirmed Speakers =&lt;br /&gt;
&lt;br /&gt;
== Schuyler Erle: Latent Semantic Analysis of the FOSS4G 2007 Conference Program ==&lt;br /&gt;
* Troublemaker at Large&lt;br /&gt;
* Schuyler is a long-time hacker, author, and Free Software activist.&lt;br /&gt;
* With the help of a little linear algebra, we can analyze the anonymized program rankings collected before FOSS4G 2007, and infer some conclusions about the nature of the conference and its attendees.&lt;br /&gt;
* [http://iconocla.st/photo/portrait/portrait14.jpg]&lt;br /&gt;
&lt;br /&gt;
== Chris Schmidt: Understanding Software Patents ==&lt;br /&gt;
* Title, Organization&lt;br /&gt;
* Software patents are a reality in today's global business environment.  Learn how software patents affect you and the software you use and work on, and how open source projects can work together with the community and holders of software patents to protect themselves and their users. &lt;br /&gt;
* Chris is a software developer for MetaCarta, Inc. where he works in part on developing OpenLayers, TileCache, and FeatureServer, and working with MetaCarta to create an environment where MetaCarta can foster and contribute to open source geospatial development. &lt;br /&gt;
* URL to head shot&lt;br /&gt;
&lt;br /&gt;
== Ed McNierney: Title ==&lt;br /&gt;
* Title, Organization&lt;br /&gt;
* One sentence bio&lt;br /&gt;
* One sentence talk summary&lt;br /&gt;
* URL to head shot&lt;br /&gt;
&lt;br /&gt;
== Arnulf Christl: Title ==&lt;br /&gt;
* Title, Organization&lt;br /&gt;
* One sentence bio&lt;br /&gt;
* One sentence talk summary&lt;br /&gt;
* URL to head shot&lt;br /&gt;
&lt;br /&gt;
== Andrew Turner: Title ==&lt;br /&gt;
* [http://highearthorbit.com Andrew Turner]&lt;br /&gt;
* Andrew develops several open-source tools such as [http://georss.org/geopress GeoPress] and [http://mapstraction.com Mapstraction], participates in the formulation of light-weight geospatial standards like [http://georss.org GeoRSS] and [http://www.ogcnetwork.net/kml KML], and works for [http://mapufacture.com Mapufacture], building a geospatial aggregation and search service. He also wrote O'Reilly's [http://oreilly.com/catalog/neogeography Introduction to Neogeography].&lt;br /&gt;
* Any suggestions for a talk?&lt;br /&gt;
* [http://highearthorbit.com/images/AndrewTurner.jpg Andrew Turner Head Shot]&lt;br /&gt;
&lt;br /&gt;
== Norman Vine: Title ==&lt;br /&gt;
* Title, Organization&lt;br /&gt;
* One sentence bio&lt;br /&gt;
* One sentence talk summary&lt;br /&gt;
* URL to head shot&lt;br /&gt;
&lt;br /&gt;
== Scott Morehouse: Title ==&lt;br /&gt;
* ESRI, Director of Software Development&lt;br /&gt;
* One sentence bio&lt;br /&gt;
* One sentence talk summary&lt;br /&gt;
* URL to head shot&lt;br /&gt;
&lt;br /&gt;
== Peter Batty: The Past, Present and Future of the Geospatial Industry ==&lt;br /&gt;
* Currently no fixed abode, most recently CTO of Intergraph&lt;br /&gt;
* [http://ebatty.com/bio.htm Peter] has been CTO of [http://www.intergraph.com Intergraph], Founder and CTO of Ten Sails, now [http://www.ubisense.net Ubisense], and VP of Technology at [http://www.gepower.com/prod_serv/products/gis_software/en/index.htm Smallworld], now part of GE, and he is currently [http://geothought.blogspot.com/ blogging] and deciding what to do next.&lt;br /&gt;
* This talk will summarize the past, present and future of the geospatial industry in five minutes!&lt;br /&gt;
* [http://www.flickr.com/photos/ebatty/1073790619/ A picture of Peter]&lt;br /&gt;
[[Category:FOSS4G2007]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=FOSS4G2007_LightningTalks&amp;diff=16987</id>
		<title>FOSS4G2007 LightningTalks</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=FOSS4G2007_LightningTalks&amp;diff=16987"/>
		<updated>2007-08-11T19:36:00Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Schuyler Erle: Title */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back to [[FOSS4G2007]]...&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Eight speakers, five minutes each, [http://www.foss4g2007.org/plenaries/#lightning Lightning Talks] will be presented to the full conference attendance, and should be fast paced, visual, and entertaining.&lt;br /&gt;
&lt;br /&gt;
= Confirmed Speakers =&lt;br /&gt;
&lt;br /&gt;
== Schuyler Erle: Distributed Tile Caching ==&lt;br /&gt;
* Troublemaker at Large&lt;br /&gt;
* Schuyler is a long-time hacker, author, and Free Software activist.&lt;br /&gt;
* Now witness the power of this fully-operational distributed peer-to-peer map tile caching network!&lt;br /&gt;
* http://iconocla.st/photo/portrait/portrait14.jpg&lt;br /&gt;
&lt;br /&gt;
== Chris Schmidt: Understanding Software Patents ==&lt;br /&gt;
* Title, Organization&lt;br /&gt;
* Software patents are a reality in today's global business environment.  Learn how software patents affect you and the software you use and work on, and how open source projects can work together with the community and holders of software patents to protect themselves and their users. &lt;br /&gt;
* Chris is a software developer for MetaCarta, Inc. where he works in part on developing OpenLayers, TileCache, and FeatureServer, and working with MetaCarta to create an environment where MetaCarta can foster and contribute to open source geospatial development. &lt;br /&gt;
* URL to head shot&lt;br /&gt;
&lt;br /&gt;
== Ed McNierney: Title ==&lt;br /&gt;
* Title, Organization&lt;br /&gt;
* One sentence bio&lt;br /&gt;
* One sentence talk summary&lt;br /&gt;
* URL to head shot&lt;br /&gt;
&lt;br /&gt;
== Arnulf Christl: Title ==&lt;br /&gt;
* Title, Organization&lt;br /&gt;
* One sentence bio&lt;br /&gt;
* One sentence talk summary&lt;br /&gt;
* URL to head shot&lt;br /&gt;
&lt;br /&gt;
== Andrew Turner: Title ==&lt;br /&gt;
* [http://highearthorbit.com Andrew Turner]&lt;br /&gt;
* Andrew develops several open-source tools such as [http://georss.org/geopress GeoPress] and [http://mapstraction.com Mapstraction], participates in the formulation of light-weight geospatial standards like [http://georss.org GeoRSS] and [http://www.ogcnetwork.net/kml KML], and works for [http://mapufacture.com Mapufacture], building a geospatial aggregation and search service. He also wrote O'Reilly's [http://oreilly.com/catalog/neogeography Introduction to Neogeography].&lt;br /&gt;
* Any suggestions for a talk?&lt;br /&gt;
* [http://highearthorbit.com/images/AndrewTurner.jpg Andrew Turner Head Shot]&lt;br /&gt;
&lt;br /&gt;
== Norman Vine: Title ==&lt;br /&gt;
* Title, Organization&lt;br /&gt;
* One sentence bio&lt;br /&gt;
* One sentence talk summary&lt;br /&gt;
* URL to head shot&lt;br /&gt;
&lt;br /&gt;
== Scott Morehouse: Title ==&lt;br /&gt;
* ESRI, Director of Software Development&lt;br /&gt;
* One sentence bio&lt;br /&gt;
* One sentence talk summary&lt;br /&gt;
* URL to head shot&lt;br /&gt;
&lt;br /&gt;
== Peter Batty: The Past, Present and Future of the Geospatial Industry ==&lt;br /&gt;
* Currently no fixed abode, most recently CTO of Intergraph&lt;br /&gt;
* [http://ebatty.com/bio.htm Peter] has been CTO of [http://www.intergraph.com Intergraph], Founder and CTO of Ten Sails, now [http://www.ubisense.net Ubisense], and VP of Technology at [http://www.gepower.com/prod_serv/products/gis_software/en/index.htm Smallworld], now part of GE, and he is currently [http://geothought.blogspot.com/ blogging] and deciding what to do next.&lt;br /&gt;
* This talk will summarize the past, present and future of the geospatial industry in five minutes!&lt;br /&gt;
* [http://www.flickr.com/photos/ebatty/1073790619/ A picture of Peter]&lt;br /&gt;
[[Category:FOSS4G2007]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=15389</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=15389"/>
		<updated>2007-06-13T11:23:23Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
/mnt/geodata is a 1.8T partition for geodata storage.&lt;br /&gt;
/mnt/agami is a 2.6T partition for geodata storage &lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libwww-perl [[User:Crschmidt|Crschmidt]] 21:48, 7 April 2007 (CEST)&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Installed Debian build tools (build-essential, devscripts, etc.) [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GDAL 1.4.0 using D-GIS packaging files. Had to change libcurl4 dependency to libcurl3. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GRASS 6.2.1 (and gdal-grass 1.4.0) using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed Mapnik 0.4.0 from Debian Sid sources. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed MapServer 4.10.1 using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:58 CEST&lt;br /&gt;
* Rebuilt and installed libgeotiff 1.2.3 using D-GIS sources. See /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 03:56, 8 Apr 2007 CEST&lt;br /&gt;
* apt-get install openmpi-* per request of HJG &amp;amp; NHV [[User:SchuylerErle|SchuylerErle]] 03:56, 8 Apr 2007 CEST&lt;br /&gt;
* Built and installed Debian package of TileCache from project SVN trunk revision 52. [[User:SchuylerErle|SchuylerErle]] 04:19, 8 Apr 2007 CEST&lt;br /&gt;
* Built and installed OSSIM from project SVN trunk [[User:Nhv|NormanVine]] Sat Apr  7 18:42:24 PDT 2007&lt;br /&gt;
** Installed to /usr/local&lt;br /&gt;
* Installed ossim_preferences in /usr/local/etc [[User:johng|HyperJohnGraham]] Sat Apr  7 18:58:24 PDT 2007&lt;br /&gt;
* Installed egm96.grd in /mnt/agami/elevation/geoids/geoid1996 [[User:johng|HyperJohnGraham]] Sat Apr  7 19:02:00 PDT 2007&lt;br /&gt;
* Add /tiles URL setup: points to TileCache. This will be true for all subdomains. To add tilecache layers, edit /etc/tilecache.cfg and restart Apache.&lt;br /&gt;
** TileCache caches to /mnt/agami/tilecache/&lt;br /&gt;
* Installed CGIAR SRTM V3 in /mnt/agami/elevation/cgiar_srtm_v3 [[User:johng|HyperJohnGraham]]&lt;br /&gt;
* After installing phppgadmin via apt: [[User:Crschmidt|Crschmidt]] 01:40, 9 April 2007 (CEST)&lt;br /&gt;
** Copy /etc/apache/conf.d/phppgadmin to /etc/apache2/sites-available/phppgadmin&lt;br /&gt;
** ln -s /etc/apache2/sites-available/phppgadmin /etc/apache2/sites-enabled/phppgadmin&lt;br /&gt;
** apt-get install php5-pg&lt;br /&gt;
** restart apache&lt;br /&gt;
* Installed bind9 in default local caching configuration. Changed /etc/resolv.conf to point to localhost. [[User:SchuylerErle|SchuylerErle]] 00:18 GMT 1 May 2007&lt;br /&gt;
* Added user account 'brandon' for Brandon Martin-Anderson, who I hope will be helping get TIGER into OSM. [[User:SchuylerErle|SchuylerErle]] Wed Jun 13 07:22:43 EDT 2007&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=15388</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=15388"/>
		<updated>2007-06-13T11:23:02Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
/mnt/geodata is a 1.8T partition for geodata storage.&lt;br /&gt;
/mnt/agami is a 2.6T partition for geodata storage &lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libwww-perl [[User:Crschmidt|Crschmidt]] 21:48, 7 April 2007 (CEST)&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Installed Debian build tools (build-essential, devscripts, etc.) [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GDAL 1.4.0 using D-GIS packaging files. Had to change libcurl4 dependency to libcurl3. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GRASS 6.2.1 (and gdal-grass 1.4.0) using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed Mapnik 0.4.0 from Debian Sid sources. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed MapServer 4.10.1 using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:58 CEST&lt;br /&gt;
* Rebuilt and installed libgeotiff 1.2.3 using D-GIS sources. See /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 03:56, 8 Apr 2007 CEST&lt;br /&gt;
* apt-get install openmpi-* per request of HJG &amp;amp; NHV [[User:SchuylerErle|SchuylerErle]] 03:56, 8 Apr 2007 CEST&lt;br /&gt;
* Built and installed Debian package of TileCache from project SVN trunk revision 52. [[User:SchuylerErle|SchuylerErle]] 04:19, 8 Apr 2007 CEST&lt;br /&gt;
* Built and installed OSSIM from project SVN trunk [[User:Nhv|NormanVine]] Sat Apr  7 18:42:24 PDT 2007&lt;br /&gt;
** Installed to /usr/local&lt;br /&gt;
* Installed ossim_preferences in /usr/local/etc [[User:johng|HyperJohnGraham]] Sat Apr  7 18:58:24 PDT 2007&lt;br /&gt;
* Installed egm96.grd in /mnt/agami/elevation/geoids/geoid1996 [[User:johng|HyperJohnGraham]] Sat Apr  7 19:02:00 PDT 2007&lt;br /&gt;
* Add /tiles URL setup: points to TileCache. This will be true for all subdomains. To add tilecache layers, edit /etc/tilecache.cfg and restart Apache.&lt;br /&gt;
** TileCache caches to /mnt/agami/tilecache/&lt;br /&gt;
* Installed CGIAR SRTM V3 in /mnt/agami/elevation/cgiar_srtm_v3 [[User:johng|HyperJohnGraham]]&lt;br /&gt;
* After installing phppgadmin via apt: [[User:Crschmidt|Crschmidt]] 01:40, 9 April 2007 (CEST)&lt;br /&gt;
** Copy /etc/apache/conf.d/phppgadmin to /etc/apache2/sites-available/phppgadmin&lt;br /&gt;
** ln -s /etc/apache2/sites-available/phppgadmin /etc/apache2/sites-enabled/phppgadmin&lt;br /&gt;
** apt-get install php5-pg&lt;br /&gt;
** restart apache&lt;br /&gt;
* Installed bind9 in default local caching configuration. Changed /etc/resolv.conf to point to localhost. [[User:SchuylerErle|SchuylerErle]] 00:18 GMT 1 May 2007&lt;br /&gt;
* Added user account 'brandon' for Brandon Martin-Anderson, who I hope will be helping get TIGER into OSM. [User:SchuylerErle|SchuylerErle]] Wed Jun 13 07:22:43 EDT 2007&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=14103</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=14103"/>
		<updated>2007-05-01T00:19:24Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
/mnt/geodata is a 1.8T partition for geodata storage.&lt;br /&gt;
/mnt/agami is a 2.6T partition for geodata storage &lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libwww-perl [[User:Crschmidt|Crschmidt]] 21:48, 7 April 2007 (CEST)&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Installed Debian build tools (build-essential, devscripts, etc.) [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GDAL 1.4.0 using D-GIS packaging files. Had to change libcurl4 dependency to libcurl3. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GRASS 6.2.1 (and gdal-grass 1.4.0) using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed Mapnik 0.4.0 from Debian Sid sources. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed MapServer 4.10.1 using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:58 CEST&lt;br /&gt;
* Rebuilt and installed libgeotiff 1.2.3 using D-GIS sources. See /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 03:56, 8 Apr 2007 CEST&lt;br /&gt;
* apt-get install openmpi-* per request of HJG &amp;amp; NHV [[User:SchuylerErle|SchuylerErle]] 03:56, 8 Apr 2007 CEST&lt;br /&gt;
* Built and installed Debian package of TileCache from project SVN trunk revision 52. [[User:SchuylerErle|SchuylerErle]] 04:19, 8 Apr 2007 CEST&lt;br /&gt;
* Built and installed OSSIM from project SVN trunk [[User:Nhv|NormanVine]] Sat Apr  7 18:42:24 PDT 2007&lt;br /&gt;
** Installed to /usr/local&lt;br /&gt;
* Installed ossim_preferences in /usr/local/etc [[User:johng|HyperJohnGraham]] Sat Apr  7 18:58:24 PDT 2007&lt;br /&gt;
* Installed egm96.grd in /mnt/agami/elevation/geoids/geoid1996 [[User:johng|HyperJohnGraham]] Sat Apr  7 19:02:00 PDT 2007&lt;br /&gt;
* Add /tiles URL setup: points to TileCache. This will be true for all subdomains. To add tilecache layers, edit /etc/tilecache.cfg and restart Apache.&lt;br /&gt;
** TileCache caches to /mnt/agami/tilecache/&lt;br /&gt;
* Installed CGIAR SRTM V3 in /mnt/agami/elevation/cgiar_srtm_v3 [[User:johng|HyperJohnGraham]]&lt;br /&gt;
* After installing phppgadmin via apt: [[User:Crschmidt|Crschmidt]] 01:40, 9 April 2007 (CEST)&lt;br /&gt;
** Copy /etc/apache/conf.d/phppgadmin to /etc/apache2/sites-available/phppgadmin&lt;br /&gt;
** ln -s /etc/apache2/sites-available/phppgadmin /etc/apache2/sites-enabled/phppgadmin&lt;br /&gt;
** apt-get install php5-pg&lt;br /&gt;
** restart apache&lt;br /&gt;
* Installed bind9 in default local caching configuration. Changed /etc/resolv.conf to point to localhost. [[User:SchuylerErle|SchuylerErle]] 00:18 GMT 1 May 2007&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13572</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13572"/>
		<updated>2007-04-08T00:36:48Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
/mnt/geodata is a 1.8T partition for geodata storage.&lt;br /&gt;
/mnt/agami is a 2.6T partition for geodata storage &lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libwww-perl [[User:Crschmidt|Crschmidt]] 21:48, 7 April 2007 (CEST)&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Installed Debian build tools (build-essential, devscripts, etc.) [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GDAL 1.4.0 using D-GIS packaging files. Had to change libcurl4 dependency to libcurl3. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GRASS 6.2.1 (and gdal-grass 1.4.0) using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed Mapnik 0.4.0 from Debian Sid sources. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed MapServer 4.10.1 using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:58 CEST&lt;br /&gt;
* Rebuilt and installed libgeotiff 1.2.3 using D-GIS sources. See /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 03:56, 8 Apr 2007 CEST&lt;br /&gt;
* apt-get install openmpi-* per request of HJG &amp;amp; NHV [[User:SchuylerErle|SchuylerErle]] 03:56, 8 Apr 2007 CEST&lt;br /&gt;
* Built and installed Debian package of TileCache from project SVN trunk revision 52. [[User:SchuylerErle|SchuylerErle]] 04:19, 8 Apr 2007 CEST&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13571</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13571"/>
		<updated>2007-04-08T00:20:02Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
/mnt/geodata is a 1.8T partition for geodata storage.&lt;br /&gt;
/mnt/agami is a 2.6T partition for geodata storage &lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libwww-perl [[User:Crschmidt|Crschmidt]] 21:48, 7 April 2007 (CEST)&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Installed Debian build tools (build-essential, devscripts, etc.) [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GDAL 1.4.0 using D-GIS packaging files. Had to change libcurl4 dependency to libcurl3. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GRASS 6.2.1 (and gdal-grass 1.4.0) using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed Mapnik 0.4.0 from Debian Sid sources. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed MapServer 4.10.1 using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:58 CEST&lt;br /&gt;
* Rebuilt and installed libgeotiff 1.2.3 using D-GIS sources. See /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 03:56, 8 Apr 2007 CEST&lt;br /&gt;
* Built and installed Debian package of TileCache from project SVN trunk revision 52. [[User:SchuylerErle|SchuylerErle]] 04:19, 8 Apr 2007 CEST&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13570</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13570"/>
		<updated>2007-04-07T23:56:56Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
/mnt/geodata is a 1.8T partition for geodata storage.&lt;br /&gt;
/mnt/agami is a 2.6T partition for geodata storage &lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libwww-perl [[User:Crschmidt|Crschmidt]] 21:48, 7 April 2007 (CEST)&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Installed Debian build tools (build-essential, devscripts, etc.) [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GDAL 1.4.0 using D-GIS packaging files. Had to change libcurl4 dependency to libcurl3. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GRASS 6.2.1 (and gdal-grass 1.4.0) using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed Mapnik 0.4.0 from Debian Sid sources. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed MapServer 4.10.1 using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:58 CEST&lt;br /&gt;
* Rebuilt and installed libgeotiff 1.2.3 using D-GIS sources. See /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 03:56, 8 Apr 2007 CEST&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13568</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13568"/>
		<updated>2007-04-07T20:58:45Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
/mnt/geodata is a 1.8T partition for geodata storage.&lt;br /&gt;
/mnt/agami is a 2.6T partition for geodata storage &lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libwww-perl [[User:Crschmidt|Crschmidt]] 21:48, 7 April 2007 (CEST)&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Installed Debian build tools (build-essential, devscripts, etc.) [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GDAL 1.4.0 using D-GIS packaging files. Had to change libcurl4 dependency to libcurl3. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GRASS 6.2.1 (and gdal-grass 1.4.0) using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed Mapnik 0.4.0 from Debian Sid sources. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed MapServer 4.10.1 using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:58 CEST&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13567</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13567"/>
		<updated>2007-04-07T20:29:37Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
/mnt/geodata is a 1.8T partition for geodata storage.&lt;br /&gt;
/mnt/agami is a 2.6T partition for geodata storage &lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libwww-perl [[User:Crschmidt|Crschmidt]] 21:48, 7 April 2007 (CEST)&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Installed Debian build tools (build-essential, devscripts, etc.) [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GDAL 1.4.0 using D-GIS packaging files. Had to change libcurl4 dependency to libcurl3. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GRASS 6.2.1 (and gdal-grass 1.4.0) using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;br /&gt;
* Rebuilt and installed Mapnik 0.4.0 from Debian Sid sources. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13566</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13566"/>
		<updated>2007-04-07T20:27:54Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
/mnt/geodata is a 1.8T partition for geodata storage.&lt;br /&gt;
/mnt/agami is a 2.6T partition for geodata storage &lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libwww-perl [[User:Crschmidt|Crschmidt]] 21:48, 7 April 2007 (CEST)&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Installed Debian build tools (build-essential, devscripts, etc.) [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GDAL 1.4.0 using D-GIS packaging files. Had to change libcurl4 dependency to libcurl3. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GRASS 6.2.1 (and gdal-grass 1.4.0) using D-GIS packaging files. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 22:27 CEST&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13564</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13564"/>
		<updated>2007-04-07T19:58:03Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libwww-perl [[User:Crschmidt|Crschmidt]] 21:48, 7 April 2007 (CEST)&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Installed Debian build tools (build-essential, devscripts, etc.) [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;br /&gt;
* Rebuilt and installed GDAL 1.4.0 using D-GIS packaging files. Had to change libcurl4 dependency to libcurl3. Source packages can be found in /usr/local/src. [[User:SchuylerErle|SchuylerErle]] 21:57 CEST&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13562</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13562"/>
		<updated>2007-04-07T19:15:31Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle]] 21:14 CEST&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13561</id>
		<title>TelaScience/Machines/HyperCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=TelaScience/Machines/HyperCube&amp;diff=13561"/>
		<updated>2007-04-07T19:15:15Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Activity Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HyperCube is a debian etch machine, hosted at TelaScience, which is to be used for the Geodata repository and related tasks.&lt;br /&gt;
&lt;br /&gt;
Currently, there is a second machine serving geodata related tasks: geodata.telascience.org, aka xblade11-2. Hopefully, we will be able to migrate from geodata to hypercube.&lt;br /&gt;
&lt;br /&gt;
Any changes made to the machine -- software installed, changes to config files, etc. -- should be recorded here so that the machine is in a state which can be reproduced if it fails.&lt;br /&gt;
&lt;br /&gt;
Data on HyperCube's local disk is not, at the moment, backed up or running under RAID. If your data is important, please keep a backup or keep it in SVN somewhere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Activity Log ==&lt;br /&gt;
* sudo apt-get install libgdal-doc libgdal1-1.3.2 libgdal1-1.3.2-grass python-gdal gdal-bin  , markusN MODIS processing [[User:Crschmidt|Crschmidt]] 21:07, 7 April 2007 (CEST)&lt;br /&gt;
* Created 'osgeo' group, added crschmidt, sderle, johng [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Created sderle user for Schuyler Erle [[User:Crschmidt|Crschmidt]] 21:03, 7 April 2007 (CEST)&lt;br /&gt;
* Edited /etc/motd to reference this wiki page [[User:Crschmidt|Crschmidt]] 21:00, 7 April 2007 (CEST)&lt;br /&gt;
* Disabled apparently unnecessary services openbsd-inetd, cupsys, netatalk, winbind for security purposes [[User:SchuylerErle|SchuylerErle] 21:14 CEST&lt;br /&gt;
* Replaced exim4 with postfix [[User:SchuylerErle|SchuylerErle] 21:14 CEST&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=GeoConnexion_Column&amp;diff=11671</id>
		<title>GeoConnexion Column</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=GeoConnexion_Column&amp;diff=11671"/>
		<updated>2007-02-22T13:16:21Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''This is a starting page for collecting fodder for an OSGeo-based column in GeoConnexion magazine.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you would like to volunteer, please list your name and topic below.&lt;br /&gt;
&lt;br /&gt;
* Michael P. Gerlek: intro to open source, what/who is osgeo, etc&lt;br /&gt;
&lt;br /&gt;
* Chris Holmes: ''[topic?]''&lt;br /&gt;
&lt;br /&gt;
* Daniel Ames: ''[topic?]''&lt;br /&gt;
&lt;br /&gt;
* Gary Watry ''[topic]''&lt;br /&gt;
&lt;br /&gt;
* Schuyler Erle: OpenLayers (+ TileCache)&lt;br /&gt;
&lt;br /&gt;
* '''[insert your name here]'''&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=OpenLayers_Incubation_Status&amp;diff=11556</id>
		<title>OpenLayers Incubation Status</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=OpenLayers_Incubation_Status&amp;diff=11556"/>
		<updated>2007-02-12T18:35:57Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Code Copyright Review */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basics ==&lt;br /&gt;
&lt;br /&gt;
; Has the project been approved for incubation by the OSGeo board?&lt;br /&gt;
: Yes, it was approved in [[Twenty First Board Meeting]].  &lt;br /&gt;
&lt;br /&gt;
; Has an OSGeo committee member been assigned as Mentor? &lt;br /&gt;
: Yes, Howard Butler is assigned as mentor. &lt;br /&gt;
&lt;br /&gt;
== Infrastructure Transition ==&lt;br /&gt;
&lt;br /&gt;
Currently, MetaCarta hosts all of the OpenLayers project infrastructure. Although there is no particular or foreseeable reason to need to change this, it is good to have the option open.&lt;br /&gt;
&lt;br /&gt;
; Has the projectname.osgeo.org domain been populated with the project's web presence? &lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo bug tracker being used for the project?  &lt;br /&gt;
: No.  &lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo mailing list manager being used for the project?&lt;br /&gt;
: No.  &lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo SVN or CVS system being used for the project?&lt;br /&gt;
: No.&lt;br /&gt;
&lt;br /&gt;
; Are binary and source downloads available from the OSGeo download area?&lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
== Community Functioning ==&lt;br /&gt;
&lt;br /&gt;
; Is there a functioning user support mechanisms (ie. mailing list)? &lt;br /&gt;
: Yes. OpenLayers has a developers' and a users' [http://openlayers.org/mailman/listinfo mailing list] and a [http://trac.openlayers.org|project tracking system] running on Trac.&lt;br /&gt;
&lt;br /&gt;
; Are source and binary downloads for the package available? &lt;br /&gt;
: Yes, OpenLayers [http://trac.openlayers.org/wiki/HowToDownload ships with complete source] and a &amp;quot;compiled&amp;quot; version in the same tarball/ZIP file. [http://svn.openlayers.org Public Subversion access] is also available. Furthermore, the OpenLayers library is made available in compiled form for direct use as a web API.&lt;br /&gt;
&lt;br /&gt;
; Has a Project Steering Committee been formed, and given control of the project?&lt;br /&gt;
: Yes, the [http://trac.openlayers.org/wiki/SteeringCommitteeMembers PSC] has been functioning since before the incubation application. &lt;br /&gt;
&lt;br /&gt;
; Does the Project Steering Committee have documentation on project procedures for PSC decisions, contributor guidelines, etc. &lt;br /&gt;
: Yes. The [http://trac.openlayers.org/wiki/SteeringCommittee project steering rules], [http://trac.openlayers.org/wiki/HowToContribute contributor guidelines], and [http://trac.openlayers.org/wiki/Release/Procedure release procedures] are posted on the project wiki.&lt;br /&gt;
&lt;br /&gt;
; How many active developers are there?  Are they from multiple organizations?&lt;br /&gt;
: Currently, 24 developers have commit access either to code sandboxes or to the source trunk in the project's Subversion repository. Some of these developers work for MetaCarta, some for DM Solutions, some for Camptocamp, some are independent software developers, and so forth.&lt;br /&gt;
&lt;br /&gt;
== Foundation Membership ==&lt;br /&gt;
&lt;br /&gt;
; Have project documents been updated to reflect membership in the foundation, and the relationship of the project to the foundation?&lt;br /&gt;
: No. Guidance on the sort of updates the Incubation Committee would like to see is welcomed.&lt;br /&gt;
&lt;br /&gt;
; Has an effort been made to brand the project web site with OSGeo foundation web styling and branding marks? &lt;br /&gt;
: Not yet, but we anticipate no problems or objections to this move.&lt;br /&gt;
&lt;br /&gt;
== Code Copyright Review ==&lt;br /&gt;
&lt;br /&gt;
; Has a [[Code Provenance Review]] document been prepared for the project?&lt;br /&gt;
: The [[OpenLayers Provenance Review]] is believed to be complete.&lt;br /&gt;
&lt;br /&gt;
; Have issues raised in the provenance review been adequately addressed?&lt;br /&gt;
: We think so. Since OpenLayers project policy has always been to obtain an ICLA or CCLA from all contributors before contributions are accepted, the PSC is confident that the provenance review presents no problems.&lt;br /&gt;
&lt;br /&gt;
[[Category:Incubation]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=OpenLayers_Incubation_Status&amp;diff=11555</id>
		<title>OpenLayers Incubation Status</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=OpenLayers_Incubation_Status&amp;diff=11555"/>
		<updated>2007-02-12T18:16:46Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Foundation Membership */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basics ==&lt;br /&gt;
&lt;br /&gt;
; Has the project been approved for incubation by the OSGeo board?&lt;br /&gt;
: Yes, it was approved in [[Twenty First Board Meeting]].  &lt;br /&gt;
&lt;br /&gt;
; Has an OSGeo committee member been assigned as Mentor? &lt;br /&gt;
: Yes, Howard Butler is assigned as mentor. &lt;br /&gt;
&lt;br /&gt;
== Infrastructure Transition ==&lt;br /&gt;
&lt;br /&gt;
Currently, MetaCarta hosts all of the OpenLayers project infrastructure. Although there is no particular or foreseeable reason to need to change this, it is good to have the option open.&lt;br /&gt;
&lt;br /&gt;
; Has the projectname.osgeo.org domain been populated with the project's web presence? &lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo bug tracker being used for the project?  &lt;br /&gt;
: No.  &lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo mailing list manager being used for the project?&lt;br /&gt;
: No.  &lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo SVN or CVS system being used for the project?&lt;br /&gt;
: No.&lt;br /&gt;
&lt;br /&gt;
; Are binary and source downloads available from the OSGeo download area?&lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
== Community Functioning ==&lt;br /&gt;
&lt;br /&gt;
; Is there a functioning user support mechanisms (ie. mailing list)? &lt;br /&gt;
: Yes. OpenLayers has a developers' and a users' [http://openlayers.org/mailman/listinfo mailing list] and a [http://trac.openlayers.org|project tracking system] running on Trac.&lt;br /&gt;
&lt;br /&gt;
; Are source and binary downloads for the package available? &lt;br /&gt;
: Yes, OpenLayers [http://trac.openlayers.org/wiki/HowToDownload ships with complete source] and a &amp;quot;compiled&amp;quot; version in the same tarball/ZIP file. [http://svn.openlayers.org Public Subversion access] is also available. Furthermore, the OpenLayers library is made available in compiled form for direct use as a web API.&lt;br /&gt;
&lt;br /&gt;
; Has a Project Steering Committee been formed, and given control of the project?&lt;br /&gt;
: Yes, the [http://trac.openlayers.org/wiki/SteeringCommitteeMembers PSC] has been functioning since before the incubation application. &lt;br /&gt;
&lt;br /&gt;
; Does the Project Steering Committee have documentation on project procedures for PSC decisions, contributor guidelines, etc. &lt;br /&gt;
: Yes. The [http://trac.openlayers.org/wiki/SteeringCommittee project steering rules], [http://trac.openlayers.org/wiki/HowToContribute contributor guidelines], and [http://trac.openlayers.org/wiki/Release/Procedure release procedures] are posted on the project wiki.&lt;br /&gt;
&lt;br /&gt;
; How many active developers are there?  Are they from multiple organizations?&lt;br /&gt;
: Currently, 24 developers have commit access either to code sandboxes or to the source trunk in the project's Subversion repository. Some of these developers work for MetaCarta, some for DM Solutions, some for Camptocamp, some are independent software developers, and so forth.&lt;br /&gt;
&lt;br /&gt;
== Foundation Membership ==&lt;br /&gt;
&lt;br /&gt;
; Have project documents been updated to reflect membership in the foundation, and the relationship of the project to the foundation?&lt;br /&gt;
: No. Guidance on the sort of updates the Incubation Committee would like to see is welcomed.&lt;br /&gt;
&lt;br /&gt;
; Has an effort been made to brand the project web site with OSGeo foundation web styling and branding marks? &lt;br /&gt;
: Not yet, but we anticipate no problems or objections to this move.&lt;br /&gt;
&lt;br /&gt;
== Code Copyright Review ==&lt;br /&gt;
&lt;br /&gt;
; Has a [[Code Provenance Review]] document been prepared for the project?&lt;br /&gt;
: A document is under constructions at [[OpenLayers Provenance Review]] but is not yet complete.  &lt;br /&gt;
&lt;br /&gt;
; Have issues raised in the provenance review been adequately addressed?&lt;br /&gt;
: Not as yet. However, OpenLayers project policy has always been to obtain an ICLA or CCLA from all contributors before contributions are accepted. The PSC is confident that the provenance review will go smoothly as a result.&lt;br /&gt;
&lt;br /&gt;
[[Category:Incubation]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=OpenLayers_Incubation_Status&amp;diff=11554</id>
		<title>OpenLayers Incubation Status</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=OpenLayers_Incubation_Status&amp;diff=11554"/>
		<updated>2007-02-12T18:15:28Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Code Copyright Review */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basics ==&lt;br /&gt;
&lt;br /&gt;
; Has the project been approved for incubation by the OSGeo board?&lt;br /&gt;
: Yes, it was approved in [[Twenty First Board Meeting]].  &lt;br /&gt;
&lt;br /&gt;
; Has an OSGeo committee member been assigned as Mentor? &lt;br /&gt;
: Yes, Howard Butler is assigned as mentor. &lt;br /&gt;
&lt;br /&gt;
== Infrastructure Transition ==&lt;br /&gt;
&lt;br /&gt;
Currently, MetaCarta hosts all of the OpenLayers project infrastructure. Although there is no particular or foreseeable reason to need to change this, it is good to have the option open.&lt;br /&gt;
&lt;br /&gt;
; Has the projectname.osgeo.org domain been populated with the project's web presence? &lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo bug tracker being used for the project?  &lt;br /&gt;
: No.  &lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo mailing list manager being used for the project?&lt;br /&gt;
: No.  &lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo SVN or CVS system being used for the project?&lt;br /&gt;
: No.&lt;br /&gt;
&lt;br /&gt;
; Are binary and source downloads available from the OSGeo download area?&lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
== Community Functioning ==&lt;br /&gt;
&lt;br /&gt;
; Is there a functioning user support mechanisms (ie. mailing list)? &lt;br /&gt;
: Yes. OpenLayers has a developers' and a users' [http://openlayers.org/mailman/listinfo mailing list] and a [http://trac.openlayers.org|project tracking system] running on Trac.&lt;br /&gt;
&lt;br /&gt;
; Are source and binary downloads for the package available? &lt;br /&gt;
: Yes, OpenLayers [http://trac.openlayers.org/wiki/HowToDownload ships with complete source] and a &amp;quot;compiled&amp;quot; version in the same tarball/ZIP file. [http://svn.openlayers.org Public Subversion access] is also available. Furthermore, the OpenLayers library is made available in compiled form for direct use as a web API.&lt;br /&gt;
&lt;br /&gt;
; Has a Project Steering Committee been formed, and given control of the project?&lt;br /&gt;
: Yes, the [http://trac.openlayers.org/wiki/SteeringCommitteeMembers PSC] has been functioning since before the incubation application. &lt;br /&gt;
&lt;br /&gt;
; Does the Project Steering Committee have documentation on project procedures for PSC decisions, contributor guidelines, etc. &lt;br /&gt;
: Yes. The [http://trac.openlayers.org/wiki/SteeringCommittee project steering rules], [http://trac.openlayers.org/wiki/HowToContribute contributor guidelines], and [http://trac.openlayers.org/wiki/Release/Procedure release procedures] are posted on the project wiki.&lt;br /&gt;
&lt;br /&gt;
; How many active developers are there?  Are they from multiple organizations?&lt;br /&gt;
: Currently, 24 developers have commit access either to code sandboxes or to the source trunk in the project's Subversion repository. Some of these developers work for MetaCarta, some for DM Solutions, some for Camptocamp, some are independent software developers, and so forth.&lt;br /&gt;
&lt;br /&gt;
== Foundation Membership ==&lt;br /&gt;
&lt;br /&gt;
; Have project documents been updated to reflect membership in the foundation, and the relationship of the project to the foundation?&lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Has an effort been made to brand the project web site with OSGeo foundation web styling and branding marks? &lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Code Copyright Review ==&lt;br /&gt;
&lt;br /&gt;
; Has a [[Code Provenance Review]] document been prepared for the project?&lt;br /&gt;
: A document is under constructions at [[OpenLayers Provenance Review]] but is not yet complete.  &lt;br /&gt;
&lt;br /&gt;
; Have issues raised in the provenance review been adequately addressed?&lt;br /&gt;
: Not as yet. However, OpenLayers project policy has always been to obtain an ICLA or CCLA from all contributors before contributions are accepted. The PSC is confident that the provenance review will go smoothly as a result.&lt;br /&gt;
&lt;br /&gt;
[[Category:Incubation]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=OpenLayers_Incubation_Status&amp;diff=11553</id>
		<title>OpenLayers Incubation Status</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=OpenLayers_Incubation_Status&amp;diff=11553"/>
		<updated>2007-02-12T18:13:37Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Community Functioning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basics ==&lt;br /&gt;
&lt;br /&gt;
; Has the project been approved for incubation by the OSGeo board?&lt;br /&gt;
: Yes, it was approved in [[Twenty First Board Meeting]].  &lt;br /&gt;
&lt;br /&gt;
; Has an OSGeo committee member been assigned as Mentor? &lt;br /&gt;
: Yes, Howard Butler is assigned as mentor. &lt;br /&gt;
&lt;br /&gt;
== Infrastructure Transition ==&lt;br /&gt;
&lt;br /&gt;
Currently, MetaCarta hosts all of the OpenLayers project infrastructure. Although there is no particular or foreseeable reason to need to change this, it is good to have the option open.&lt;br /&gt;
&lt;br /&gt;
; Has the projectname.osgeo.org domain been populated with the project's web presence? &lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo bug tracker being used for the project?  &lt;br /&gt;
: No.  &lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo mailing list manager being used for the project?&lt;br /&gt;
: No.  &lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo SVN or CVS system being used for the project?&lt;br /&gt;
: No.&lt;br /&gt;
&lt;br /&gt;
; Are binary and source downloads available from the OSGeo download area?&lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
== Community Functioning ==&lt;br /&gt;
&lt;br /&gt;
; Is there a functioning user support mechanisms (ie. mailing list)? &lt;br /&gt;
: Yes. OpenLayers has a developers' and a users' [http://openlayers.org/mailman/listinfo mailing list] and a [http://trac.openlayers.org|project tracking system] running on Trac.&lt;br /&gt;
&lt;br /&gt;
; Are source and binary downloads for the package available? &lt;br /&gt;
: Yes, OpenLayers [http://trac.openlayers.org/wiki/HowToDownload ships with complete source] and a &amp;quot;compiled&amp;quot; version in the same tarball/ZIP file. [http://svn.openlayers.org Public Subversion access] is also available. Furthermore, the OpenLayers library is made available in compiled form for direct use as a web API.&lt;br /&gt;
&lt;br /&gt;
; Has a Project Steering Committee been formed, and given control of the project?&lt;br /&gt;
: Yes, the [http://trac.openlayers.org/wiki/SteeringCommitteeMembers PSC] has been functioning since before the incubation application. &lt;br /&gt;
&lt;br /&gt;
; Does the Project Steering Committee have documentation on project procedures for PSC decisions, contributor guidelines, etc. &lt;br /&gt;
: Yes. The [http://trac.openlayers.org/wiki/SteeringCommittee project steering rules], [http://trac.openlayers.org/wiki/HowToContribute contributor guidelines], and [http://trac.openlayers.org/wiki/Release/Procedure release procedures] are posted on the project wiki.&lt;br /&gt;
&lt;br /&gt;
; How many active developers are there?  Are they from multiple organizations?&lt;br /&gt;
: Currently, 24 developers have commit access either to code sandboxes or to the source trunk in the project's Subversion repository. Some of these developers work for MetaCarta, some for DM Solutions, some for Camptocamp, some are independent software developers, and so forth.&lt;br /&gt;
&lt;br /&gt;
== Foundation Membership ==&lt;br /&gt;
&lt;br /&gt;
; Have project documents been updated to reflect membership in the foundation, and the relationship of the project to the foundation?&lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Has an effort been made to brand the project web site with OSGeo foundation web styling and branding marks? &lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Code Copyright Review ==&lt;br /&gt;
&lt;br /&gt;
; Has a [[Code Provenance Review]] document been prepared for the project?&lt;br /&gt;
: A document is under constructions at [[OpenLayers Provenance Review]] but is not yet complete.  &lt;br /&gt;
&lt;br /&gt;
; Have issues raised in the provenance review been adequately addressed?&lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
[[Category:Incubation]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=OpenLayers_Incubation_Status&amp;diff=11552</id>
		<title>OpenLayers Incubation Status</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=OpenLayers_Incubation_Status&amp;diff=11552"/>
		<updated>2007-02-12T17:59:33Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Infrastructure Transition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basics ==&lt;br /&gt;
&lt;br /&gt;
; Has the project been approved for incubation by the OSGeo board?&lt;br /&gt;
: Yes, it was approved in [[Twenty First Board Meeting]].  &lt;br /&gt;
&lt;br /&gt;
; Has an OSGeo committee member been assigned as Mentor? &lt;br /&gt;
: Yes, Howard Butler is assigned as mentor. &lt;br /&gt;
&lt;br /&gt;
== Infrastructure Transition ==&lt;br /&gt;
&lt;br /&gt;
Currently, MetaCarta hosts all of the OpenLayers project infrastructure. Although there is no particular or foreseeable reason to need to change this, it is good to have the option open.&lt;br /&gt;
&lt;br /&gt;
; Has the projectname.osgeo.org domain been populated with the project's web presence? &lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo bug tracker being used for the project?  &lt;br /&gt;
: No.  &lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo mailing list manager being used for the project?&lt;br /&gt;
: No.  &lt;br /&gt;
&lt;br /&gt;
; Is the OSGeo SVN or CVS system being used for the project?&lt;br /&gt;
: No.&lt;br /&gt;
&lt;br /&gt;
; Are binary and source downloads available from the OSGeo download area?&lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
== Community Functioning ==&lt;br /&gt;
&lt;br /&gt;
; Is there a functioning user support mechanisms (ie. mailing list)? &lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Are source and binary downloads for the package available? &lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Has a Project Steering Committee been formed, and given control of the project?&lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Does the Project Steering Committee have documentation on project procedures for PSC decisions, contributor guidelines, etc. &lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; How many active developers are there?  Are they from multiple organizations?&lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Foundation Membership ==&lt;br /&gt;
&lt;br /&gt;
; Have project documents been updated to reflect membership in the foundation, and the relationship of the project to the foundation?&lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Has an effort been made to brand the project web site with OSGeo foundation web styling and branding marks? &lt;br /&gt;
: &amp;quot;To be filled in.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Code Copyright Review ==&lt;br /&gt;
&lt;br /&gt;
; Has a [[Code Provenance Review]] document been prepared for the project?&lt;br /&gt;
: A document is under constructions at [[OpenLayers Provenance Review]] but is not yet complete.  &lt;br /&gt;
&lt;br /&gt;
; Have issues raised in the provenance review been adequately addressed?&lt;br /&gt;
: No&lt;br /&gt;
&lt;br /&gt;
[[Category:Incubation]]&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Geodata_Committee_Tenth_Meeting&amp;diff=10124</id>
		<title>Geodata Committee Tenth Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Geodata_Committee_Tenth_Meeting&amp;diff=10124"/>
		<updated>2006-12-14T16:03:43Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Metadata ==&lt;br /&gt;
&lt;br /&gt;
 Chair: Jo Walsh &lt;br /&gt;
  IRC: [irc://irc.freenode.net/osgeo #osgeo channel on irc.freenode.org] (or via [http://irc.telascience.org Web based IRC client])&lt;br /&gt;
  Date: 2006-December-14 (at least in the Americas and Europe)&lt;br /&gt;
  Time: 1600 GMT / 1100 East Coast / 1700 Europe ([http://timeanddate.com/worldclock/fixedtime.html?month=12&amp;amp;day=14&amp;amp;year=2006&amp;amp;hour=16&amp;amp;min=0&amp;amp;sec=0 fixed time])&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
* Update on GeoNetwork installation at telascience, what are next steps &lt;br /&gt;
** http://geodata.telascience.org:8080/geonetwork/srv/en/main.home&lt;br /&gt;
** does everyone who wants access know where to look&lt;br /&gt;
* Update on geometadata generation utilities&lt;br /&gt;
** http://project.knowledgeforge.net/geometa/trac/&lt;br /&gt;
* How to express &amp;quot;accuracy&amp;quot; and &amp;quot;quality&amp;quot; of geodata in metadata? Prior art required&lt;br /&gt;
* Next steps for formalising dclite4g schema&lt;br /&gt;
** Extracting something specification-like from [[Geodata Metadata Requirements]]&lt;br /&gt;
** Implementations&lt;br /&gt;
* We will need to replace the http://geodata.osgeo.org/ website soon - any suggestions for a shiny new one, both form and content would be appreciated&lt;br /&gt;
* State of play @ Telascience&lt;br /&gt;
** Which servers and other resources are available or in use?&lt;br /&gt;
** State of currently hosted data sets: BMNG, VMap0, ?&lt;br /&gt;
** Plans for future data sets: LandSat, ?&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9503</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9503"/>
		<updated>2006-11-13T22:32:00Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Maintaining the local directory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache. Secondary design goals are to allow non-caching clients to request tiles directly from the cache, and to protect tile integrity by only permitting whitelisted peers to store data in the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''layer configuration'' consists of a list of (name, source URL, source layers, SRS, bounding box, width, height, maximum level) tuples. The ''name'' is an arbitrary string consisting of alphanumeric characters. The ''maximum level'' value is an integer. The remaining values are as request parameters given by the OGC WMS 1.1.1 specification.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory and layer configuration via HTTP from well-known URLs in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer to a float in the range [0, 1).&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Set the peer's message sequence ID to 0.&lt;br /&gt;
## Add a reference to the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert a reference to the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' seconds have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
#* For every peer in both the tree and the directory listing, reset its timeout counter to ''v''.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
* Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
* Until at most ''k'' distinct peers are selected:&lt;br /&gt;
*# Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
*# If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
*# If the selected peer's timeout counter is 0, unselect it.&lt;br /&gt;
*# Set the tile key to the key of the peer just selected.&lt;br /&gt;
*# If, after the first selection, the tile key is once again the key of the first peer selected, then there are fewer than ''k'' eligible peers, so return those.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tiles to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
# Every ''p'' seconds, select the peer with the largest key less than our peer key, whose timeout counter is greater than 0. If there are no such peers, select the peer with the largest key whose timeout counter is greater than 0.&lt;br /&gt;
# Send that peer a PING message.&lt;br /&gt;
# If the peer does not respond within ''t'' seconds, decrement its timeout counter to a minimum of 0.&lt;br /&gt;
&lt;br /&gt;
=== Reseeding ===&lt;br /&gt;
&lt;br /&gt;
Every 2''p'' seconds, a peer should select a random tile from its local cache and reseed it in the network (if the local peer's cache supports random access).&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
* If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Send a PONG message to keep the other peer from timing us out.&lt;br /&gt;
*# If the tile does not belong to a layer that the peer is configured to cache, ignore the request.&lt;br /&gt;
*# Otherwise, select ''k'' peers for the tile.&lt;br /&gt;
*# If our peer key is greater than or equal to the tile key, and less than or equal to the first key selected:&lt;br /&gt;
*#* Fetch the tile from its data source.&lt;br /&gt;
*#* Send a PUT message in response.&lt;br /&gt;
*#* Seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
* If the tile does not belong to a layer that the peer is configured to cache, discard it.&lt;br /&gt;
* Otherwise, store the tile in the local cache.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its tuple in the directory, along with the time it made the request.&lt;br /&gt;
* Every 2''d'' seconds, remove any peers from the directory that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* If/when the directory listing needs to contain more than ~10,000 peers, a Kademlia-like mechanism for thinning keys farther away from a given peer can be used to keep the list that any one peer sees down to a reasonable number.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
* ''t'' = 1 second&lt;br /&gt;
* ''v'' = 8&lt;br /&gt;
* ''d'' = 600 seconds&lt;br /&gt;
* ''p'' = 30 seconds&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
Before sending a message, a peer should increment its own internal message sequence ID.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
To ensure message integrity, a peer should make the following checks when a message is received:&lt;br /&gt;
&lt;br /&gt;
# Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, and the message is a PUT or DELETE message, discard it.&lt;br /&gt;
# Compare the checksum embedded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
# Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
#* If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
#* Otherwise, update the peer's sequence ID and reset its timeout counter to ''v''.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [[Distributed Tile Caching]], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9502</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9502"/>
		<updated>2006-11-13T22:26:28Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: major reworking to allow non-caching clients access to the network&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache. Secondary design goals are to allow non-caching clients to request tiles directly from the cache, and to protect tile integrity by only permitting whitelisted peers to store data in the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''layer configuration'' consists of a list of (name, source URL, source layers, SRS, bounding box, width, height, maximum level) tuples. The ''name'' is an arbitrary string consisting of alphanumeric characters. The ''maximum level'' value is an integer. The remaining values are as request parameters given by the OGC WMS 1.1.1 specification.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory and layer configuration via HTTP from well-known URLs in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer to a float in the range [0, 1).&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Set the peer's message sequence ID to 0.&lt;br /&gt;
## Add a reference to the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert a reference to the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' seconds have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
* Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
* Until at most ''k'' distinct peers are selected:&lt;br /&gt;
*# Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
*# If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
*# If the selected peer's timeout counter is 0, unselect it.&lt;br /&gt;
*# Set the tile key to the key of the peer just selected.&lt;br /&gt;
*# If, after the first selection, the tile key is once again the key of the first peer selected, then there are fewer than ''k'' eligible peers, so return those.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tiles to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
# Every ''p'' seconds, select the peer with the largest key less than our peer key, whose timeout counter is greater than 0. If there are no such peers, select the peer with the largest key whose timeout counter is greater than 0.&lt;br /&gt;
# Send that peer a PING message.&lt;br /&gt;
# If the peer does not respond within ''t'' seconds, decrement its timeout counter to a minimum of 0.&lt;br /&gt;
&lt;br /&gt;
=== Reseeding ===&lt;br /&gt;
&lt;br /&gt;
Every 2''p'' seconds, a peer should select a random tile from its local cache and reseed it in the network (if the local peer's cache supports random access).&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
* If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Send a PONG message to keep the other peer from timing us out.&lt;br /&gt;
*# If the tile does not belong to a layer that the peer is configured to cache, ignore the request.&lt;br /&gt;
*# Otherwise, select ''k'' peers for the tile.&lt;br /&gt;
*# If our peer key is greater than or equal to the tile key, and less than or equal to the first key selected:&lt;br /&gt;
*#* Fetch the tile from its data source.&lt;br /&gt;
*#* Send a PUT message in response.&lt;br /&gt;
*#* Seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
* If the tile does not belong to a layer that the peer is configured to cache, discard it.&lt;br /&gt;
* Otherwise, store the tile in the local cache.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its tuple in the directory, along with the time it made the request.&lt;br /&gt;
* Every 2''d'' seconds, remove any peers from the directory that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* If/when the directory listing needs to contain more than ~10,000 peers, a Kademlia-like mechanism for thinning keys farther away from a given peer can be used to keep the list that any one peer sees down to a reasonable number.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
* ''t'' = 1 second&lt;br /&gt;
* ''v'' = 8&lt;br /&gt;
* ''d'' = 600 seconds&lt;br /&gt;
* ''p'' = 30 seconds&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
Before sending a message, a peer should increment its own internal message sequence ID.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
To ensure message integrity, a peer should make the following checks when a message is received:&lt;br /&gt;
&lt;br /&gt;
# Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, and the message is a PUT or DELETE message, discard it.&lt;br /&gt;
# Compare the checksum embedded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
# Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
#* If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
#* Otherwise, update the peer's sequence ID and reset its timeout counter to ''v''.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [[Distributed Tile Caching]], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9486</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9486"/>
		<updated>2006-11-13T20:45:05Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Directory service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer to a float in the range [0, 1).&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Set the peer's message sequence ID to 0.&lt;br /&gt;
## Add a reference to the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert a reference to the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
* Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
* Until ''k'' distinct peers are selected:&lt;br /&gt;
*# If there are fewer than ''k'' peers in the directory, select all remaining known peers and break.&lt;br /&gt;
*# Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
*# If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
*# Decrement the timeout value for each selected peer.&lt;br /&gt;
*# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
*# Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# If no peer responds with a PUT within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tiles to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree, and start over.&lt;br /&gt;
# Otherwise, send that peer a PING message.&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Otherwise, send a PONG message in response.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PONGs ===&lt;br /&gt;
&lt;br /&gt;
When a PONG is received from a peer, reset its timeout counter to ''v''.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
* Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* If/when the directory listing needs to contain more than ~10,000 peers, a Kademlia-like mechanism for thinning keys farther away from a given peer can be used to keep the list that any one peer sees down to a reasonable number.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
Before sending a message, a peer should increment its own internal message sequence ID.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
To ensure message integrity, a peer should make the following checks when a message is received:&lt;br /&gt;
&lt;br /&gt;
# Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, discard the message.&lt;br /&gt;
# Compare the checksum embedded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
# Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
#* If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
#* Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [[Distributed Tile Caching]], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9472</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9472"/>
		<updated>2006-11-12T09:21:48Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Discovering other peers */  clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer to a float in the range [0, 1).&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Set the peer's message sequence ID to 0.&lt;br /&gt;
## Add a reference to the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert a reference to the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
* Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
* Until ''k'' distinct peers are selected:&lt;br /&gt;
*# If there are fewer than ''k'' peers in the directory, select all remaining known peers and break.&lt;br /&gt;
*# Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
*# If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
*# Decrement the timeout value for each selected peer.&lt;br /&gt;
*# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
*# Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# If no peer responds with a PUT within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tiles to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree, and start over.&lt;br /&gt;
# Otherwise, send that peer a PING message.&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Otherwise, send a PONG message in response.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PONGs ===&lt;br /&gt;
&lt;br /&gt;
When a PONG is received from a peer, reset its timeout counter to ''v''.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
* Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
Before sending a message, a peer should increment its own internal message sequence ID.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
To ensure message integrity, a peer should make the following checks when a message is received:&lt;br /&gt;
&lt;br /&gt;
# Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, discard the message.&lt;br /&gt;
# Compare the checksum embedded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
# Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
#* If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
#* Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [[Distributed Tile Caching]], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9471</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9471"/>
		<updated>2006-11-12T09:19:45Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Message integrity */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer.&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Set the peer's message sequence ID to 0.&lt;br /&gt;
## Add a reference to the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert a reference to the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
* Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
* Until ''k'' distinct peers are selected:&lt;br /&gt;
*# If there are fewer than ''k'' peers in the directory, select all remaining known peers and break.&lt;br /&gt;
*# Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
*# If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
*# Decrement the timeout value for each selected peer.&lt;br /&gt;
*# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
*# Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# If no peer responds with a PUT within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tiles to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree, and start over.&lt;br /&gt;
# Otherwise, send that peer a PING message.&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Otherwise, send a PONG message in response.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PONGs ===&lt;br /&gt;
&lt;br /&gt;
When a PONG is received from a peer, reset its timeout counter to ''v''.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
* Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
Before sending a message, a peer should increment its own internal message sequence ID.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
To ensure message integrity, a peer should make the following checks when a message is received:&lt;br /&gt;
&lt;br /&gt;
# Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, discard the message.&lt;br /&gt;
# Compare the checksum embedded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
# Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
#* If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
#* Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [[Distributed Tile Caching]], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9470</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9470"/>
		<updated>2006-11-12T09:16:26Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Expiring a tile */  typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer.&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Set the peer's message sequence ID to 0.&lt;br /&gt;
## Add a reference to the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert a reference to the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
* Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
* Until ''k'' distinct peers are selected:&lt;br /&gt;
*# If there are fewer than ''k'' peers in the directory, select all remaining known peers and break.&lt;br /&gt;
*# Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
*# If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
*# Decrement the timeout value for each selected peer.&lt;br /&gt;
*# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
*# Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# If no peer responds with a PUT within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tiles to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree, and start over.&lt;br /&gt;
# Otherwise, send that peer a PING message.&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Otherwise, send a PONG message in response.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PONGs ===&lt;br /&gt;
&lt;br /&gt;
When a PONG is received from a peer, reset its timeout counter to ''v''.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
* Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
Before sending a message, a peer should increment its own internal message sequence ID.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
To ensure message integrity, a peer should make the following checks when a message is received:&lt;br /&gt;
&lt;br /&gt;
# Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, discard the message.&lt;br /&gt;
# Compare the checksum embeeded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
# Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
#* If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
#* Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [[Distributed Tile Caching]], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9469</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9469"/>
		<updated>2006-11-12T09:15:17Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: refactoring timeout description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer.&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Set the peer's message sequence ID to 0.&lt;br /&gt;
## Add a reference to the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert a reference to the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
* Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
* Until ''k'' distinct peers are selected:&lt;br /&gt;
*# If there are fewer than ''k'' peers in the directory, select all remaining known peers and break.&lt;br /&gt;
*# Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
*# If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
*# Decrement the timeout value for each selected peer.&lt;br /&gt;
*# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
*# Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# If no peer responds with a PUT within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree, and start over.&lt;br /&gt;
# Otherwise, send that peer a PING message.&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Otherwise, send a PONG message in response.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PONGs ===&lt;br /&gt;
&lt;br /&gt;
When a PONG is received from a peer, reset its timeout counter to ''v''.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
* Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
Before sending a message, a peer should increment its own internal message sequence ID.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
To ensure message integrity, a peer should make the following checks when a message is received:&lt;br /&gt;
&lt;br /&gt;
# Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, discard the message.&lt;br /&gt;
# Compare the checksum embeeded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
# Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
#* If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
#* Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [[Distributed Tile Caching]], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9468</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9468"/>
		<updated>2006-11-12T08:57:40Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Message integrity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer.&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Set the peer's message sequence ID to 0.&lt;br /&gt;
## Add a reference to the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert a reference to the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
# Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
# If there are fewer than ''k'' peers in the directory, select all other known peers.&lt;br /&gt;
# Otherwise, until ''k'' distinct peers are selected:&lt;br /&gt;
#* Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
#* If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
#* Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the storing peer is selected, discard it.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
# If no peer responds within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree and send it a PING message.&lt;br /&gt;
# If the peer responds with a PONG message within ''t'' seconds, reset its timeout value to ''v''.&lt;br /&gt;
# Otherwise, remove the peer from the binary tree.&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the peer's own key is greater than or equal to the original tile key and less than the first peer selected, seed the tile in the network.&lt;br /&gt;
# Otherwise, attempt to fetch the tile from the network. If and when the tile is received, send a PUT message to the originating peer.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
* Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
Before sending a message, a peer should increment its own internal message sequence ID.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
To ensure message integrity, a peer should make the following checks when a message is received:&lt;br /&gt;
&lt;br /&gt;
# Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, discard the message.&lt;br /&gt;
# Compare the checksum embeeded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
# Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
#* If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
#* Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [[Distributed Tile Caching]], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9467</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9467"/>
		<updated>2006-11-12T08:56:49Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer.&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Set the peer's message sequence ID to 0.&lt;br /&gt;
## Add a reference to the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert a reference to the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
# Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
# If there are fewer than ''k'' peers in the directory, select all other known peers.&lt;br /&gt;
# Otherwise, until ''k'' distinct peers are selected:&lt;br /&gt;
#* Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
#* If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
#* Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the storing peer is selected, discard it.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
# If no peer responds within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree and send it a PING message.&lt;br /&gt;
# If the peer responds with a PONG message within ''t'' seconds, reset its timeout value to ''v''.&lt;br /&gt;
# Otherwise, remove the peer from the binary tree.&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the peer's own key is greater than or equal to the original tile key and less than the first peer selected, seed the tile in the network.&lt;br /&gt;
# Otherwise, attempt to fetch the tile from the network. If and when the tile is received, send a PUT message to the originating peer.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
* Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
Before sending a message, a peer should increment its own internal message sequence ID.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
* Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, discard the message.&lt;br /&gt;
* Compare the checksum embeeded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
* Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
** If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
** Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [[Distributed Tile Caching]], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9466</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9466"/>
		<updated>2006-11-12T08:54:24Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer.&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Add the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
# Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
# If there are fewer than ''k'' peers in the directory, select all other known peers.&lt;br /&gt;
# Otherwise, until ''k'' distinct peers are selected:&lt;br /&gt;
#* Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
#* If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
#* Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the storing peer is selected, discard it.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
# If no peer responds within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree and send it a PING message.&lt;br /&gt;
# If the peer responds with a PONG message within ''t'' seconds, reset its timeout value to ''v''.&lt;br /&gt;
# Otherwise, remove the peer from the binary tree.&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the peer's own key is greater than or equal to the original tile key and less than the first peer selected, seed the tile in the network.&lt;br /&gt;
# Otherwise, attempt to fetch the tile from the network. If and when the tile is received, send a PUT message to the originating peer.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
* Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
* Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, discard the message.&lt;br /&gt;
* Compare the checksum embeeded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
* Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
** If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
** Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [[Distributed Tile Caching]], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9465</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9465"/>
		<updated>2006-11-12T08:53:42Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: /* Responding to a GET request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer.&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Add the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
# Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
# If there are fewer than ''k'' peers in the directory, select all other known peers.&lt;br /&gt;
# Otherwise, until ''k'' distinct peers are selected:&lt;br /&gt;
#* Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
#* If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
#* Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the storing peer is selected, discard it.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
# If no peer responds within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree and send it a PING message.&lt;br /&gt;
# If the peer responds with a PONG message within ''t'' seconds, reset its timeout value to ''v''.&lt;br /&gt;
# Otherwise, remove the peer from the binary tree.&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the peer's own key is greater than or equal to the original tile key and less than the first peer selected, seed the tile in the network.&lt;br /&gt;
# Otherwise, attempt to fetch the tile from the network. If and when the tile is received, send a PUT message to the originating peer.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
* Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
* Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, discard the message.&lt;br /&gt;
* Compare the checksum embeeded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
* Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
** If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
** Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [Distributed Tile Caching], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9464</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9464"/>
		<updated>2006-11-12T08:50:54Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: reformulation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]]. The primary design goals are minimizing response latency for tile requests, and maintaining redundant storage of tiles across the cache.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight) tuples, where ''weight'' is the bandwidth that the peer is willing to serve in KB/s, expressed as an integer.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer.&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Add the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
# Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
# If there are fewer than ''k'' peers in the directory, select all other known peers.&lt;br /&gt;
# Otherwise, until ''k'' distinct peers are selected:&lt;br /&gt;
#* Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
#* If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
#* Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Issuing requests ==&lt;br /&gt;
&lt;br /&gt;
=== Seeding a tile ===&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the storing peer is selected, discard it.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Fetching a tile ===&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
# If no peer responds within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
=== Expiring a tile ===&lt;br /&gt;
&lt;br /&gt;
* A DELETE request can cover a rectangular range of tiles at a given level for a given layer.&lt;br /&gt;
* Start by selecting ''k'' peers for the lower left tile in the expiration request.&lt;br /&gt;
* Send a DELETE message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Pinging other peers ===&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree and send it a PING message.&lt;br /&gt;
# If the peer responds with a PONG message within ''t'' seconds, reset its timeout value to ''v''.&lt;br /&gt;
# Otherwise, remove the peer from the binary tree.&lt;br /&gt;
&lt;br /&gt;
== Receiving requests ==&lt;br /&gt;
&lt;br /&gt;
=== Responding to a GET request ===&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the peer's own key is between the original tile key and the first peer selected, seed the tile in the network.&lt;br /&gt;
# Otherwise, attempt to fetch the tile from the network.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a PUT request ===&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
=== Receiving a DELETE request ===&lt;br /&gt;
&lt;br /&gt;
A peer should keep track of the last 2''k'' DELETE messages received.&lt;br /&gt;
&lt;br /&gt;
* If this DELETE message is a duplicate, discard it.&lt;br /&gt;
* Otherwise:&lt;br /&gt;
*# Remove the tile(s) from the local cache.&lt;br /&gt;
*# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
*# If the tile key is greater than the peer's key but less than the first peer selected, stop.&lt;br /&gt;
*# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
=== Receiving PINGs ===&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
* When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
* Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
* Peers can and perhaps should be whitelisted to insure data integrity over the network. Peers not on the whitelist should not be added to the directory.&lt;br /&gt;
* The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
* The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message integrity ==&lt;br /&gt;
&lt;br /&gt;
* Compare the peer key embedded in the message with the sending IP's recorded peer key. If they do not match, discard the message.&lt;br /&gt;
* Compare the checksum embeeded in the message with the checksum of the payload. If they do not match, discard the message.&lt;br /&gt;
* Check the message sequence against the sending peer's most recent sequence ID.&lt;br /&gt;
** If the message sequence is less than or equal to the previously set sequence ID for that peer, discard the message.&lt;br /&gt;
** Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
* This model is based largely on the Kademlia algorithm discussed at length in [Distributed Tile Caching], with the addition of a directory server to keep latency down.&lt;br /&gt;
* [http://www8.org/w8-papers/2a-webserver/caching/paper2.html Web Caching with Consistent Hashing] is a seminal work in distributed caching.&lt;br /&gt;
* [http://code.sixapart.com/svn/memcached/trunk/api/perl/dev/cons-hash.pl A pure-Perl implementation] of the algorithm described in the above paper.&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9463</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9463"/>
		<updated>2006-11-12T08:12:46Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]].&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight), where ''weight'' is the bandwidth that the peer is willing to serve in KB/s.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer.&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Add the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
# Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
# If there are fewer than ''k'' peers in the directory, select all other known peers.&lt;br /&gt;
# Otherwise, until ''k'' distinct peers are selected:&lt;br /&gt;
#* Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
#* If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
#* Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Seeding a tile ==&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the storing peer is selected, discard it.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
== Fetching a tile ==&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
# If no peer responds within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
== Responding to a GET request ==&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the peer's own key is between the original tile key and the first peer selected, seed the tile in the network.&lt;br /&gt;
# Otherwise, attempt to fetch the tile from the network.&lt;br /&gt;
&lt;br /&gt;
== Receiving a PUT request ==&lt;br /&gt;
&lt;br /&gt;
# Store the tile in the local cache.&lt;br /&gt;
# Reset the sending peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
== Receiving a DELETE request ==&lt;br /&gt;
&lt;br /&gt;
# Remove the tile(s) from the local cache.&lt;br /&gt;
# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
# If the tile key is between the peer's key and the first peer selected, stop.&lt;br /&gt;
# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
== Sending PINGs ==&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree and send it a PING message.&lt;br /&gt;
# If the peer responds with a PONG message within ''t'' seconds, reset its timeout value to ''v''.&lt;br /&gt;
# Otherwise, remove the peer from the binary tree.&lt;br /&gt;
&lt;br /&gt;
== Receiving PINGs ==&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
# When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
# Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
# Peers can be whitelisted to insure data integrity over the network.&lt;br /&gt;
# The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
# The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible protocol parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
When a message is received, the message sequence should be checked against the sending peer's most recent sequence ID. If none was previously set, set it. Otherwise, if the message sequence is less than or equal to the previously set sequence ID, discard the message. Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9462</id>
		<title>Distributed Tile Caching Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Distributed_Tile_Caching_Model&amp;diff=9462"/>
		<updated>2006-11-12T08:11:20Z</updated>

		<summary type="html">&lt;p&gt;Wiki-SchuylerErle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This design outlines a model for a [[Distributed Tile Caching|distributed tile cache]].&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
&lt;br /&gt;
A ''key'' is a 20 byte SHA-1 sum.&lt;br /&gt;
&lt;br /&gt;
Each ''peer'' has its own persistent ''peer key'', generated randomly.&lt;br /&gt;
&lt;br /&gt;
The ''directory'' of peers consists of a list of (key, IP, port, weight), where ''weight'' is the bandwidth that the peer is willing to serve in KB/s.&lt;br /&gt;
&lt;br /&gt;
The ''directory server'' will serve the directory via HTTP from a well-known URL in gzip compressed whitespace-separated text.&lt;br /&gt;
&lt;br /&gt;
= Peers =&lt;br /&gt;
&lt;br /&gt;
== Discovering other peers ==&lt;br /&gt;
&lt;br /&gt;
# Request the directory listing from the server, passing the peer's directory tuple.&lt;br /&gt;
# Normalize the weights of each peer.&lt;br /&gt;
# Create an empty balanced binary tree.&lt;br /&gt;
# For every other peer listed:&lt;br /&gt;
## Set the peer's timeout value to ''v''.&lt;br /&gt;
## Add the peer to the tree using its key.&lt;br /&gt;
## Calculate ''r'' = ''normalized weight'' x 64.&lt;br /&gt;
## For ''i'' in range(1, ''r''):&lt;br /&gt;
##* Calculate a subsidiary key by concatenating the peer key with the binary value of ''i'', and take the SHA-1 sum of the result.&lt;br /&gt;
##* Insert the peer into the tree using the subsidiary key.&lt;br /&gt;
&lt;br /&gt;
== Maintaining the local directory ==&lt;br /&gt;
&lt;br /&gt;
# After ''d'' minutes have passed, request a new directory listing with an ''If-Modified-Since'' header.&lt;br /&gt;
# If the server responds with a 304, wait another ''d'' minutes and check again.&lt;br /&gt;
# Otherwise:&lt;br /&gt;
#* For every peer in the binary tree not in the new listing, remove it.&lt;br /&gt;
#* For every peer in the directory listing not in the binary tree, add it.&lt;br /&gt;
&lt;br /&gt;
== Selecting peers for a given tile ==&lt;br /&gt;
&lt;br /&gt;
# Concatenate ''layer'' + ''level'' + ''row'' + ''column'' and take the SHA-1 sum. This is the ''tile key''.&lt;br /&gt;
# If there are fewer than ''k'' peers in the directory, select all other known peers.&lt;br /&gt;
# Otherwise, until ''k'' distinct peers are selected:&lt;br /&gt;
#* Select the first peer from the binary tree with key greater than or equal to the tile key.&lt;br /&gt;
#* If there are no matching peers in the tree, select the first peer in tree.&lt;br /&gt;
#* Set the tile key to the key of the peer just selected.&lt;br /&gt;
&lt;br /&gt;
== Seeding a tile ==&lt;br /&gt;
&lt;br /&gt;
# Fetch the tile from the data source (or render the tile or whatever).&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the storing peer is selected, discard it.&lt;br /&gt;
# Send a PUT message to each peer asynchronously.&lt;br /&gt;
&lt;br /&gt;
== Receiving a PUT request ==&lt;br /&gt;
&lt;br /&gt;
When a peer receives a PUT request from another peer, it should reset that peer's timeout value to ''v''.&lt;br /&gt;
&lt;br /&gt;
== Fetching a tile ==&lt;br /&gt;
&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# Send a GET message for the given tile to each of the selected peers asynchronously.&lt;br /&gt;
# Decrement the timeout value for each selected peer.&lt;br /&gt;
# If a peer's timeout value drops to zero, remove that peer from the binary tree.&lt;br /&gt;
# If no peer responds within ''t'' seconds, seed the tile in the network.&lt;br /&gt;
&lt;br /&gt;
== Responding to a GET request ==&lt;br /&gt;
&lt;br /&gt;
# If the tile is present in the local cache, send a PUT message in response.&lt;br /&gt;
# Select ''k'' peers for the tile.&lt;br /&gt;
# If the peer's own key is between the original tile key and the first peer selected, seed the tile in the network.&lt;br /&gt;
# Otherwise, attempt to fetch the tile from the network.&lt;br /&gt;
&lt;br /&gt;
== Receiving a DELETE request ==&lt;br /&gt;
&lt;br /&gt;
# Remove the tile(s) from the local cache.&lt;br /&gt;
# Select ''k'' peers for the lower left tile of the DELETE request.&lt;br /&gt;
# If the tile key is between the peer's key and the first peer selected, stop.&lt;br /&gt;
# Otherwise, propagate the DELETE request to the ''k'' peers asynchronously.&lt;br /&gt;
&lt;br /&gt;
== Sending PINGs ==&lt;br /&gt;
&lt;br /&gt;
If the peer is behind a NAT gateway, it can use PING messages to keep the UDP port open on the firewall:&lt;br /&gt;
&lt;br /&gt;
# Every 60 seconds, select a random peer from the binary tree and send it a PING message.&lt;br /&gt;
# If the peer responds with a PONG message within ''t'' seconds, reset its timeout value to ''v''.&lt;br /&gt;
# Otherwise, remove the peer from the binary tree.&lt;br /&gt;
&lt;br /&gt;
== Receiving PINGs ==&lt;br /&gt;
&lt;br /&gt;
Every PING message should be responded to with a matching PONG message.&lt;br /&gt;
&lt;br /&gt;
= Directory service =&lt;br /&gt;
&lt;br /&gt;
# When a peer requests the directory listing, store its directory tuple in the database, along with the time it made the request.&lt;br /&gt;
# Every ''d'' x 2 minutes, remove any peers from the database that have not made a directory request since the last check.&lt;br /&gt;
# Peers can be whitelisted to insure data integrity over the network.&lt;br /&gt;
# The directory listing should be about 60 bytes per peer. With 10,000 peers, and assuming a 6:1 gzip compression ratio, a fresh listing should be at most 100k compressed.&lt;br /&gt;
# The directory service can seek high availability through a shared database backend and round-robin DNS.&lt;br /&gt;
&lt;br /&gt;
= Plausible protocol parameter values =&lt;br /&gt;
&lt;br /&gt;
* ''d'' = 5&lt;br /&gt;
* ''v'' = 5&lt;br /&gt;
* ''t'' = 1&lt;br /&gt;
* ''k'' = 3&lt;br /&gt;
&lt;br /&gt;
= Protocol format =&lt;br /&gt;
&lt;br /&gt;
Protocol ''messages'' will be served via UDP.&lt;br /&gt;
&lt;br /&gt;
Each message is a tuple consisting of (Peer Key, Type, Sequence, Checksum, Payload), for a total of 29 + ''n'' bytes.&lt;br /&gt;
&lt;br /&gt;
Message ''type'' may be one of:&lt;br /&gt;
&lt;br /&gt;
# PING&lt;br /&gt;
# PONG&lt;br /&gt;
# GET&lt;br /&gt;
# PUT&lt;br /&gt;
# DELETE&lt;br /&gt;
&lt;br /&gt;
Message ''sequence'' must be a monotonically increasing 32-bit number.&lt;br /&gt;
&lt;br /&gt;
Message ''checksum'' is a CRC-32 checksum of the data payload&lt;br /&gt;
&lt;br /&gt;
The message ''payload'' takes up the remainder of the message.&lt;br /&gt;
&lt;br /&gt;
== Message sequence ==&lt;br /&gt;
&lt;br /&gt;
When a message is received, the message sequence should be checked against the sending peer's most recent sequence ID. If none was previously set, set it. Otherwise, if the message sequence is less than or equal to the previously set sequence ID, discard the message. Otherwise, update the peer's sequence ID.&lt;br /&gt;
&lt;br /&gt;
== PING messages ==&lt;br /&gt;
&lt;br /&gt;
PING messages have a checksum of 0 and no payload.&lt;br /&gt;
&lt;br /&gt;
== PONG messages ==&lt;br /&gt;
&lt;br /&gt;
A PONG message payload consists of the sequence number from the corresponding PING packet.&lt;br /&gt;
&lt;br /&gt;
== GET messages ==&lt;br /&gt;
&lt;br /&gt;
A GET message payload consists of the tuple (Layer, Level, Row, Column). The ''layer'' value is a zero-terminated string. The ''row'' and ''column'' values are 32-bit integers.&lt;br /&gt;
&lt;br /&gt;
== PUT messages ==&lt;br /&gt;
&lt;br /&gt;
A PUT message payload consists of the tuple (Layer, Level, Row, Column, Data).&lt;br /&gt;
&lt;br /&gt;
== DELETE messages ==&lt;br /&gt;
&lt;br /&gt;
A DELETE message payload consists of the tuple (Layer, Level, MinRow, MinCol, MaxRow, MaxCol).&lt;/div&gt;</summary>
		<author><name>Wiki-SchuylerErle</name></author>
	</entry>
</feed>