<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4581187174086274804</id><updated>2011-09-10T05:44:39.922-07:00</updated><category term='Business'/><category term='Coding Conventions'/><category term='Desktop'/><category term='General'/><category term='FeatureCache'/><category term='Iterator'/><category term='OpenJUMP'/><category term='Graphic Design'/><category term='I18N'/><category term='RAM'/><category term='Java'/><category term='Super Select Tool'/><category term='Icons'/><category term='Programming'/><category term='Open Source'/><title type='text'>The OpenJUMP Blog - Helping Others Leap Into Open Source GIS</title><subtitle type='html'>Discussion of ideas, questions, and issues about OpenJUMP, the open source Java GIS Community, and GIS in general.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default?start-index=101&amp;max-results=100'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>143</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-7471144521310664530</id><published>2011-05-06T15:32:00.001-07:00</published><updated>2011-05-06T15:32:46.953-07:00</updated><title type='text'>Moving to Wordpress</title><content type='html'>I'm consolidating most of my blogs and moving them to Wordpress. You can catch my new blog posts here:&lt;br /&gt;&lt;br /&gt;www.redefinedhorizonsblog.com.&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;The Sunburned Surveyor&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-7471144521310664530?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/7471144521310664530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=7471144521310664530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7471144521310664530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7471144521310664530'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2011/05/moving-to-wordpress.html' title='Moving to Wordpress'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4261931783561542962</id><published>2010-10-19T09:40:00.000-07:00</published><updated>2010-10-19T12:59:44.416-07:00</updated><title type='text'>Tortured Execution Path For Union By Attribute Plug-In</title><content type='html'>I've been doing some work on the Union By Attribute Plug-In. One of the first thing I tried to identify when I began working with the program was the execution path. I started by taking a look at the plug-ins execute method. In this plug-in, the execute method only displayed the dialog to collect the parameters from the user needed to peform the union operation. After that, I lost the path of execution. I knew that the union method did the main work of the plug-in, but I couldn't figure out how it got called from the execute method.&lt;br /&gt;&lt;br /&gt;The "open call hiearchy" tool in Eclipse may have provided the answer. Here is what I believe is the execution path of the UnionByAttributePlugIn class:&lt;br /&gt;&lt;br /&gt;(1) The TaskMonitorManager. execute method is called. It receives an instance of a ThreadedPlugIn class as an argument, which is in this case the UnionByAttributePlugIn.&lt;br /&gt;&lt;br /&gt;(2) The TaskMonitorManager.execute method creates a TaskWrapper object. The run method of the TaskWrapper object is then called.&lt;br /&gt;&lt;br /&gt;(3) The TaskWrapper.run method calls the UnionByAttributePlugIn.run method.&lt;br /&gt;&lt;br /&gt;(4) The UnionByAttributePlugIn.run method calls the UnionByAttributePlugIn.unionFeaturesWithSameAttributeValue method.&lt;br /&gt;&lt;br /&gt;(5) The UnionByAttributePlugIn.unionFeaturesWithSameAttributeValue method calls the UnionByAttributePlugIn.union method, which does the main work of the plug-in.&lt;br /&gt;&lt;br /&gt;I still haven't figured out the direct link between the execute method and the TaskMonitorManager. I'll be working on that. It would be nice if the path of execution was a little more clear in the execute method. This is something to remember when writing your own plug-ins for OpenJUMP. Try to keep a direct link between your plug-ins execute method and the methods that do the main work of your plug-in. One way this can be achieved is by putting your code to display and collect data from a GUI in its own method that is called from execute. Here is an example:&lt;br /&gt;&lt;br /&gt;public boolean execute(PlugInContext context)&lt;br /&gt;{&lt;br /&gt;   this.showGUI();&lt;br /&gt;   boolean workDoneSuccessfully = this.doWork();&lt;br /&gt;   return workDoneSuccessfully;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;I hope to write more on this blog about the TaskMonitorManager class, TaskWrapper class, and threads in OJ as I learn more about them.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4261931783561542962?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4261931783561542962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4261931783561542962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4261931783561542962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4261931783561542962'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2010/10/tortured-execution-path-for-union-by.html' title='Tortured Execution Path For Union By Attribute Plug-In'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3838597864582207048</id><published>2010-08-16T10:15:00.000-07:00</published><updated>2010-08-16T10:19:12.176-07:00</updated><title type='text'>A little info on the MultiInputDialog class.</title><content type='html'>The MultiInputDialog class can be used to quockly construct dialogs for OpenJUMP plug-ins. I was taking a peak at the class as part of my work on the Union By Attribute Plug-In, which uses the class. A couple of interesting things about the class caught my eye:&lt;br /&gt;&lt;br /&gt;(1) The MultiInputDialog class contains a public method to add a Swing ComboBox with all the layers or all the editable layers in a task/project.&lt;br /&gt;&lt;br /&gt;(2) The MultiInputDialog class uses a LayerNameRenderer, which is an implementation of the Swing ListCellRenderer.&lt;br /&gt;&lt;br /&gt;I hope to learn more and talk more about this class on my blog in the future.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3838597864582207048?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3838597864582207048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3838597864582207048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3838597864582207048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3838597864582207048'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2010/08/little-info-on-multiinputdialog-class.html' title='A little info on the MultiInputDialog class.'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3440208178992835840</id><published>2010-02-09T11:09:00.000-08:00</published><updated>2010-02-09T11:19:23.205-08:00</updated><title type='text'>Learning From Jump Source Code: IconLoader, FeatureInstaller, and More</title><content type='html'>During some of my recent programming work on BizzJUMP I ran across some interesting things about the JUMP/OpenJUMP source code that I wanted to make note of. Perhaps some other programmers and followers of my blog will be interested in these things also.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JUMP has an IconLoader class. I wonder what how it loads and provides icons? Do any of its methods throw I/O exceptions? I want to take a closer look at this class and find out.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JUMP has a FeatureInstaller class that can be used to install plug-ins. I want to take a closer look at this class so I can see how it works.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;As far as I can tell there is no way for a plug-in to control the location of its menu item in the pop-up menu of the layer list. I wonder what I would have to change to make this control possible. Right now, if you want a plug-in to control the location of its menu item in the pop-up menu for the layer list, its got to be part of the core.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The LayerNamePanel (the class behind the layer list) is actually an interface. The default implementation of this interface is the AttributeTab class. Don't ask me where they got that name.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The JUMPConfiguration class controls the loading of plug-ins built into the core. It must be activated during the launch of the program. I want to document this launch process and describe the role of the JUMPConfiguration class in starting the program.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3440208178992835840?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3440208178992835840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3440208178992835840' title='37 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3440208178992835840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3440208178992835840'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2010/02/learning-from-jump-source-code.html' title='Learning From Jump Source Code: IconLoader, FeatureInstaller, and More'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>37</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-287187133767572868</id><published>2010-01-19T12:04:00.000-08:00</published><updated>2010-01-19T12:06:25.793-08:00</updated><title type='text'>To Do List For BizzJUMP Now In SurveyOS Feature Request Tracker</title><content type='html'>I'm using the feature request tracker at the SurveyOS SourceForge project page to track tasks I need to complete in BizzJUMP. You can find the feature tracker here:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sourceforge.net/tracker/index.php"&gt;https://sourceforge.net/tracker/index.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-287187133767572868?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/287187133767572868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=287187133767572868' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/287187133767572868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/287187133767572868'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2010/01/to-do-list-for-bizzjump-now-in-surveyos.html' title='To Do List For BizzJUMP Now In SurveyOS Feature Request Tracker'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-7797542490906524113</id><published>2010-01-15T12:55:00.000-08:00</published><updated>2010-01-15T12:57:12.829-08:00</updated><title type='text'>One More BizzJUMP Principle</title><content type='html'>I forgot one other important principle I will be following in BizzJUMP development: Simplicity!&lt;br /&gt;&lt;br /&gt;I will be striving for simplicity and clarity whenever possible. This means I won't be chaining method calls, using inner or anonymous classes, or other various things that can make Java source code hard for newbies to understand. I'll be implementing things as simply as I can.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-7797542490906524113?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/7797542490906524113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=7797542490906524113' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7797542490906524113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7797542490906524113'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2010/01/one-more-bizzjump-principle.html' title='One More BizzJUMP Principle'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-7415606694703369446</id><published>2010-01-15T12:22:00.000-08:00</published><updated>2010-01-15T12:34:03.400-08:00</updated><title type='text'>BizzJUMP From Jump 1.2 Source - Implications and Motivation</title><content type='html'>&lt;p&gt;Back in December of 2008 I made &lt;a href="http://openjump.blogspot.com/2008/12/major-refactoring-of-openjump-begins.html"&gt;a post to this blog about a major refactoring of OpenJUMP’s core&lt;/a&gt;. In that post I outlined my reasons for attempting that refactoring. It took me almost a year, but late in the fall of 2009 I started to work on that refactoring. After a couple months of very frustrating effort, I decided to make a drastic change. I decided I would abandon my efforts to fix the problems I saw with the &lt;a href="http://www.openjump.org/"&gt;OpenJUMP&lt;/a&gt; core, and that I would instead use the &lt;a href="http://www.vividsolutions.com/JUMP/"&gt;original JUMP 1.2 source code from Vivid Solutions&lt;/a&gt; as the basis of BizzJUMP.&lt;br /&gt;&lt;br /&gt;I’ve now begun working on this effort in earnest, and I hope to make my first (unstable release) of BizzJUMP From Jump Source (FJS) sometime next week. What does this change mean?&lt;br /&gt;&lt;br /&gt;There are some definite disadvantages. In its early stages BizzJUMP is going to be more limited than OpenJUMP. It won’t have the support for internationalization (translation of the GUI into other languages) and it won’t have all of the plug-ins. It means I won’t be spending as much time studying and improving the OpenJUMP source code. It also means I won’t have as much time for the OpenJUMP branding and administration efforts.&lt;br /&gt;&lt;br /&gt;However, in the long run, I think this is a change that needs to be made. I believe the core of OpenJUMP has some serious &lt;a href="http://en.wikipedia.org/wiki/Software_rot"&gt;code rot&lt;/a&gt; problems. (I won't get into specifics here. Try a little refactoring of one of OpenJUMP's important sub-systems and you will find out what I am talking about.) I know the program currently works quite well, but in my opinion it has passed the point of being salvaged without a major effort by a team of experienced programmers (something I don’t have at my disposal). There have been many contributions and changes made to OpenJUMP. A majority of these were made by individual programmers or organizations that are no longer involved with the development of the program. Most of them are no longer maintaining there code, and often they are not around to answer questions about their code. Many of these changes were made to OpenJUMP without an examination of their overall impact on the architecture and long-term maintainability of the program. Too many of our contributors were focused on there own short term needs and not on the long term needs of the program itself.&lt;br /&gt;&lt;br /&gt;There are still good people (and experienced programmers) involved with OpenJUMP. There are even some new programmers showing interest in the programmer’s mailing list. I know that development of OpenJUMP will continue. Most likely, the programmers still involved with OpenJUMP will not agree with my assessment of the core’s current condition. In my past discussions, most of them seem to be content with the core’s current condition and seem reluctant to do the major overhaul I know believe is necessary for the program to survive over the long term.&lt;br /&gt;&lt;br /&gt;I hope to remain involved with OpenJUMP and the JUMP Pilot Project. I plan on staying subscribed to both the user and programmer mailing list. I want to help answer questions, provide suggestions, and learn from others. I hope to contribute bug fixes when I can, and to continue my participation in the debate about OpenJUMP’s evolution. This time I will participate as an observer instead of an active participant.&lt;br /&gt;More direct control of BizzJUMP’s core will hopefully help me to avoid some of the mistakes that we made with OpenJUMP, and that I feel will ultimately lead to the death of the program if changes aren’t made. I’ll be following these policies for BizzJUMP development, and I hope they will make a discernable difference in the program’s stability, quality, and ease of maintenance:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;All new features of the program will be added to BizzJUMP via plug-ins whenever possible. New features will not be added to the core, and plug-ins will not be “embedded” in the core unless it is absolutely necessary to do so. I’ve already modified the plug-in system for BizzJUMP to make it possible to add new features without tweaking core source code. This includes letting plug-ins take actions as part of the program start-up process (but after all plug-ins have initialized) or as part of the program shutdown process and in letting plug-ins register with the core so they can expose there public interfaces to one another during run time.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;All contributions to the core must be accompanied by a comprehensive set of unit tests and good source code comments. External documentation of the source code is also encouraged. Comprehensive Javadoc comments are a must. This applies to all contributions, even my own.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;All contributions to the core must make use of the new system testing or integration testing framework I have built into BizzJUMP if this is appropriate. This is different from unit testing, but tests the interaction between components and sub-systems in BizzJUMP.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I must be able to understand the source code or modifications from other individual programmers or organizations want to contribute to the BizzJUMP core. This is critical, because if code goes into the core I must be able to maintain it for the long term. Code I can’t understand won’t be maintained, and code that won’t be maintained won’t be getting in. I’ll be asking contributors to tell me how they are using BizzJUMP and how long they plan on being involved with the project. I will strongly encourage contributions via plug-in and will strongly discourage modifications to the core.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I will be making regular releases of BizzJUMP. Every even month in the year I will be making a maintenance release that contains mostly refactoring, reorganization, bug fixes, and improved documentation. Every odd month I will be making a release that includes new features for programmers and/or users. Every six months I will be making a stable release of BizzJUMP. Smaller minor unstable releases will be made during the month as appropriate.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I will keep BizzJUMP's dependencies on external libraries to a minimum. When possible, I will make dependencies I create as small and modular as I can. I will be utilizing and sharing code with libraries like &lt;a href="http://www.geotools.org/"&gt;GeoTools&lt;/a&gt; and &lt;a href="http://jodd.org/"&gt;Jodd&lt;/a&gt; as much as possible.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;My work on the maintenance releases will include trying to reach three (3) of the goals I outlined in  December of 2008:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Improve the separation of the “model” and the “view” within the BizzJUMP core.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Separate generic utility code and JUMP specific utility code.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Extract an OpenJUMP “model” library for use in other Java programs.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;It will be interesting to see what the future holds for OpenJUMP. I hope BizzJUMP will be successful and that OpenJUMP will ultimately benefit from some of my ideas for BizzJUMP development.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;I’ll post a link to the BizzJUMP web site and the link to the first release some time next week.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-7415606694703369446?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/7415606694703369446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=7415606694703369446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7415606694703369446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7415606694703369446'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2010/01/back-in-december-of-2008-i-made-post-to.html' title='BizzJUMP From Jump 1.2 Source - Implications and Motivation'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-5288566317574320871</id><published>2010-01-11T14:11:00.000-08:00</published><updated>2010-01-11T14:22:07.551-08:00</updated><title type='text'>Original JUMP Resources</title><content type='html'>We recently lost the jump-project.org web site, and all of the resources that were available from that site. I was worried the same thing might happen with the JUMP web site hosted by Vivid Solutions. So I grabbed the source code and executable distributions for JUMP from that web site and put them on my SurveyOS SourceForge project page. I also put a zip file with all the PDF documents from the original JUMP there. I also put a maker web page for these resources on my Redefined Horizons web site.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.redefinedhorizons.com/original_jump_resources.html"&gt;Original JUMP Resources Page at the Redefined Horizons Web Site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This may be useful for programmers interested in the original JUMP source code.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-5288566317574320871?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/5288566317574320871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=5288566317574320871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5288566317574320871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5288566317574320871'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2010/01/original-jump-resources.html' title='Original JUMP Resources'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-2354458191418431740</id><published>2010-01-07T09:33:00.000-08:00</published><updated>2010-01-07T09:40:38.332-08:00</updated><title type='text'>Old Plug-Ins From Jan  Runzicka</title><content type='html'>I wanted to post a link to some old plug-ins for JUMP that may still be useful. The plug-in were from Jan Ruzicka, and they can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gis.vsb.cz/ruzicka/Projekty/jump/index.php"&gt;http://gis.vsb.cz/ruzicka/Projekty/jump/index.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-2354458191418431740?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/2354458191418431740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=2354458191418431740' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2354458191418431740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2354458191418431740'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2010/01/old-plug-ins-from-jan-runzicka.html' title='Old Plug-Ins From Jan  Runzicka'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-301084524147436622</id><published>2009-09-15T12:24:00.000-07:00</published><updated>2009-09-15T12:59:22.395-07:00</updated><title type='text'>Getting Data Into OpenJUMP</title><content type='html'>Over the last year or two I’ve written a couple of plug-ins designed to get data into &lt;a href="http://redefinedhorizons.com/projects_my_openjump.html"&gt;OpenJUMP&lt;/a&gt;. The first of these plug-in imported &lt;a href="http://www.topografix.com/gpx.asp"&gt;GPX&lt;/a&gt; files, and the second plug-in imported survey point data from a delimited text file. I was allowing the user to access these plug-ins through a menu item under the “SurveyOS” top-level menu, but I recently decided it would be good if they could be located under the “File” top-level menu.&lt;br /&gt;&lt;br /&gt;The problem with this is &lt;a href="http://redefinedhorizons.com/projects_my_openjump.html"&gt;OpenJUMP&lt;/a&gt; automatically put the menu items for my plug-ins at the bottom of the File menu, which looks a little awkward.&lt;br /&gt;&lt;br /&gt;So I decided to see how difficult it would be to allow access to the plug-ins using the built-in system for opening files to get data into &lt;a href="http://redefinedhorizons.com/projects_my_openjump.html"&gt;OpenJUMP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;When &lt;a href="http://redefinedhorizons.com/projects_my_openjump.html"&gt;OpenJUMP&lt;/a&gt; was originally written there was only a single menu item that could be used to import files. This menu item opened a file selection dialog, and the user selected the type of file from a list box at the bottom of the dialog box.&lt;br /&gt;&lt;br /&gt;A couple years ago, we ripped out this rather simple system and replaced it with another one. I didn’t realize how much we complicated things with this replacement until I started looking at the code today. The current system uses a wizard framework to open different files in &lt;a href="http://redefinedhorizons.com/projects_my_openjump.html"&gt;OpenJUMP&lt;/a&gt;. It implements a system to support “import options” or parameters supplied by the user. It seems to automatically build dialogs that allow the user to enter these parameters based on information from the plug-in that actually imports the data.&lt;br /&gt;&lt;br /&gt;Here are the things I don’t like about the current way we open files in OpenJUMP:&lt;br /&gt;&lt;br /&gt;(1) A large majority of the files we &lt;a href="http://redefinedhorizons.com/projects_my_openjump.html"&gt;OpenJUMP&lt;/a&gt; don’t require any parameters or options. We just want to suck in the contents of the file. ESRI Shapefiles are an example of this type of file. I’ll bet the majority of the files opened with &lt;a href="http://redefinedhorizons.com/projects_my_openjump.html"&gt;OpenJUMP&lt;/a&gt; are &lt;a href="http://en.wikipedia.org/wiki/Shapefile"&gt;ESRI shapefiles&lt;/a&gt;.&lt;br /&gt;(2) The current system limits the steps and validation of parameters that can be used to open a file. I can’t have my plug-in walk the user through a complicated (and custom) wizard, and I can’t really validate the parameters as they are collected from the user. So we are only serving a limited slice of the plug-ins that need to collect parameters from the user before we import data from a file. Only very simple parameters can be collected in our current system.&lt;br /&gt;(3) The plug-in programmer has little or no control over the GUI that is automatically constructed to collect the parameters. In my experience automated GUIs are ugly and hard to work with. They are appropriate for some situations, but I don’t know if this is one of them.&lt;br /&gt;(4) Our current system doesn’t seem to support different plug-ins that import data from files with the same file extension. For example: You might use my recent plug-in to import survey point data from a delimited text files, but there might be several other plug-ins that import entirely different data from delimited text files.&lt;br /&gt;(5) The current system is more complicated than it needs to be. We’ve got at least 24 classes in three (3) different packages that are needed to open files. Should it be that hard?&lt;br /&gt;&lt;br /&gt;There are some things I like about the system we currently have for opening files. It keeps track of recent files, which can be handy. But I bet we can do the same thing with something like the old system, and it won’t be nearly as complicated. The new system also allows plug-in programmers to get a GUI for collection parameters needed to open a file without too much work, but I bet if you are writing a plug-in for data import you can handle whipping up a simple GUI.&lt;br /&gt;&lt;br /&gt;This is what I will work on implementing in BizzJUMP, and what I would like to see implemented in &lt;a href="http://redefinedhorizons.com/projects_my_openjump.html"&gt;OpenJUMP&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;Move back to a simpler system for importing data from files. This would be something similar to the old system. I’d like to see 2 menu items for each supported file format. One menu item for each file format will be used to import data, and will be found under File&gt;Open File. One menu item for each file format will be used to export data, and will be found under File&gt;Export File (or save file). Each plug-in programmer will place his own menu items for file import and export, just like other plug-ins place their own menu items.&lt;br /&gt;&lt;br /&gt;I will create plug-ins for the standard file formats that &lt;a href="http://redefinedhorizons.com/projects_my_openjump.html"&gt;OpenJUMP&lt;/a&gt; already supports: &lt;br /&gt;ESRI Shapefiles&lt;br /&gt;OGC WKT&lt;br /&gt;JML&lt;br /&gt;GML&lt;br /&gt;JPG/PNG/TIFF&lt;br /&gt;&lt;br /&gt;I think this will make our API easier for plug-in programmers that want to create support for new/custom file formats, and it will make our core less complex.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-301084524147436622?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/301084524147436622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=301084524147436622' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/301084524147436622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/301084524147436622'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/09/getting-data-into-openjump.html' title='Getting Data Into OpenJUMP'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4630322959504434572</id><published>2009-08-18T12:51:00.000-07:00</published><updated>2009-08-18T12:55:51.684-07:00</updated><title type='text'>Update on My OpenJUMP Work</title><content type='html'>Its been a while since I’ve posted anything meaningful. I want to provide a quick update on what I’ve been working on for OpenJUMP.&lt;br /&gt;&lt;br /&gt;I’ve got a plug-in completed that allows the OpenJUMP user to import point data that is stored in a delimited text file. The point data format the plug-in currently supports is point number, northing, easting, elevation and description. (It can be modified to support additional formats.) The plug-in is built to work with point data form land surveyors (although it will work with data from any source in the specified format) so I set it up to separate out a feature code and linework code from the description. This means, in the future, additional tools could be created that automatically draw linework from layers created by this plug-in. You should also be able to separate the imported points into different layers based on each point’s feature code.&lt;br /&gt;&lt;br /&gt;I ran into some trouble finishing the plug-in. The trouble is related to the use of threads while performing the import. I am currently looking into this. In the meantime, I may release the plug-in without the use of the threaded code. This means I won’t be able to show the user a progress dialog during the import, but we can probably live with that until I get the threads issue resolved.&lt;br /&gt;&lt;br /&gt;I’ve also finished a web page on my personal web site that talks about OpenJUMP. It also discusses some of the future challenges to OpenJUMP development. You can read the web page &lt;a href="http://www.redefinedhorizons.com/projects_my_openjump.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Christopher, our Google Summer of Code student, is wrapping up his summer project. I hope he will have some code nicely packaged that I can use to access an &lt;a href="http://www.h2database.com/html/main.html"&gt;H2&lt;/a&gt; database from OpenJUMP. I hope to write a plug-in that will support non-spaital entities and temporal events in OpenJUMP using an H2 database. That is the very next plug-in I will begin work on.&lt;br /&gt;&lt;br /&gt;You can view Christopher’s code here:&lt;br /&gt;&lt;a href="http://jump-pilot.svn.sourceforge.net/viewvc/jump-pilot/summer_of_code/H2-OJ/"&gt;http://jump-pilot.svn.sourceforge.net/viewvc/jump-pilot/summer_of_code/H2-OJ/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I’m also working on a distribution of BizzJUMP. It will hopefully include a couple of my recent plug-ins and the integration of the &lt;a href="http://www.infonode.net/pages/idw.html"&gt;InfoNode docking windows framework&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4630322959504434572?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4630322959504434572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4630322959504434572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4630322959504434572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4630322959504434572'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/08/update-on-my-openjump-work.html' title='Update on My OpenJUMP Work'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3739862349744536618</id><published>2009-08-18T12:27:00.000-07:00</published><updated>2009-08-18T12:32:21.555-07:00</updated><title type='text'></title><content type='html'>I’ve decided to narrow the focus of my OpenJUMP blog. (We’ll see how successful this effort is.) To assist in this narrowing of focus I have created a separate blog that will deal with general programming and Java programming topics that do not relate directly to OpenJUMP. You can read it &lt;a href="http://justenufjava.blogspot.com/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have also created a separate &lt;a href="http://sunburnedsurveyorongis.blogspot.com/"&gt;blog&lt;/a&gt; to deal with general GIS topics not related to OpenJUMP.&lt;br /&gt;&lt;br /&gt;There will certainly be some cases with a topic could apply to more than one of my blogs. I’ll do the best I can to choose the most appropriate blog for a topic with consistency. I hope this will make things easier for the readers of my blog.&lt;br /&gt;&lt;br /&gt;From this point forward, I would like the OpenJUMP blog to deal topics that relate directly the programming and promotion of OpenJUMP.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3739862349744536618?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3739862349744536618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3739862349744536618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3739862349744536618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3739862349744536618'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/08/ive-decided-to-narrow-focus-of-my.html' title=''/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6303181226994200414</id><published>2009-07-03T09:13:00.000-07:00</published><updated>2009-07-03T09:16:58.728-07:00</updated><title type='text'>JSR-275 (javax.measure) Jar</title><content type='html'>Some of my buddies from Geotools have done work on the JSR that provides a standard way to work with measurements and measurement units. That is definitely something a surveyor (and most GIS junkies) would be interested in. I had a hard time locating a JAR of the JSR-275 implementation, but with some help from Simone at Geotools I found its location in a maven repository.&lt;br /&gt;&lt;br /&gt;You can download it here:&lt;br /&gt;&lt;a href="http://download.java.net/maven/2/javax/measure/jsr-275/1.0.0/"&gt;http://download.java.net/maven/2/javax/measure/jsr-275/1.0.0/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The source code and javadocs are there as well.&lt;br /&gt;&lt;br /&gt;Here is the home page for the JSR itself:&lt;br /&gt;&lt;a href="https://jsr-275.dev.java.net/"&gt;https://jsr-275.dev.java.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a link to the PDF of the spec for the JSR:&lt;br /&gt;&lt;a href="https://jsr-275.dev.java.net/files/documents/4333/34956/jsr-275.pdf"&gt;https://jsr-275.dev.java.net/files/documents/4333/34956/jsr-275.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6303181226994200414?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6303181226994200414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6303181226994200414' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6303181226994200414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6303181226994200414'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/07/jsr-275-javaxmeasure-jar.html' title='JSR-275 (javax.measure) Jar'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-7717117195474247477</id><published>2009-04-23T11:15:00.000-07:00</published><updated>2009-04-23T11:20:13.710-07:00</updated><title type='text'>Summary of Oracle's Buyout of Sun</title><content type='html'>Directions Magazine has an article with a good summary of Oracle's buyout of Sun Microsystems. It makes you wonder what will happen with technology like Java and MySQL.&lt;br /&gt;&lt;br /&gt;Here is a link to the article:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.directionsmag.com/article.php?article_id=3131"&gt;http://www.directionsmag.com/article.php?article_id=3131&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-7717117195474247477?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/7717117195474247477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=7717117195474247477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7717117195474247477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7717117195474247477'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/04/summary-of-oracles-buyout-of-sun.html' title='Summary of Oracle&apos;s Buyout of Sun'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6781179485849843138</id><published>2009-04-14T20:43:00.000-07:00</published><updated>2009-04-14T21:00:10.372-07:00</updated><title type='text'>Your unit tests will lie to you.</title><content type='html'>I've become a very big proponent of unit tests. I don't practice strict test-driven development, in which you write the test and then the code that meets the test. However, I do write JUnit tests for almost all of my classes. (High-level OpenJUMP classes in the core are an exception to this. They can be very hard to write unit tests for.) I find unit tests are especially worth the pay-off when writing low-level libraries and parsers, which I seem to do a lot.&lt;br /&gt;&lt;br /&gt;Did you know that your unit tests can lie to you?&lt;br /&gt;&lt;br /&gt;It is the truth. Consider the following method of a Java class, which compares two make-believe CustomColor objects:&lt;br /&gt;&lt;br /&gt;public boolean customColorsAreEqual(CustomColor argCompareTo)&lt;br /&gt;{&lt;br /&gt;// Method implementation goes here.&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Now consider a unit test that tests this method. It creates two CustomColor objects that should be equal, and then uses the above method to compare them. If the boolean value returned by the method is true, the test passes, if the method is false, it fails. Our test method might look like this:&lt;br /&gt;&lt;br /&gt;public void testCustomColorsAreEqual(CustomColor argCompareTo)&lt;br /&gt;{&lt;br /&gt;CustomColor myGreen1 = new CustomColor("My Green");&lt;br /&gt;CustomColor myGreen2 = new CustomColor("My Green");&lt;br /&gt;&lt;br /&gt;boolean areEquals = myGreen1.customColorsAreEqual(myGreen2);&lt;br /&gt;&lt;br /&gt;if(areEquals == false)&lt;br /&gt;{&lt;br /&gt;fail("The method did not recognize two CustomColor objects that are equal.");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The programmer runs the unit test, which passes, and assumes the method is bug-free. But the unit test lied.&lt;br /&gt;&lt;br /&gt;The programmer neglected to have his test repeat a comparision with two CustomColor objects the programmer knew to be unequal. He should modify his test to add this comparision as well. If he doesn't, a bug could result in the method under test indicating that two unequal CustomColor objects are equal.&lt;br /&gt;&lt;br /&gt;Most tools I know of to examine JUnit test coverage deal with the program as a whole. The programmer also needs to think about the test coverage of indivdual methods under test. You should test the method for all likely scenarios, not just the first scenario that pops in your head. This often means running the method under test multiple times from the same test method, but each time with different arguments or program state.&lt;br /&gt;&lt;br /&gt;I'll post some more comments on unit testing in Java later.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Sunburned Surveyor&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6781179485849843138?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6781179485849843138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6781179485849843138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6781179485849843138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6781179485849843138'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/04/your-unit-tests-will-lie-to-you.html' title='Your unit tests will lie to you.'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1274271662969742166</id><published>2009-04-07T14:09:00.001-07:00</published><updated>2009-04-07T14:13:05.966-07:00</updated><title type='text'>Good Summary of Proprietary Versus Open Source</title><content type='html'>From &lt;a href="http://blog.cleverelephant.ca/"&gt;Paul Ramsey's Blog&lt;/a&gt; comes a link to an arcticle entitles &lt;em&gt;&lt;a href="http://www.netsight.co.uk/blog/2009/4/2/open-source-and-software-procurement"&gt;Open Source and Software Procurement&lt;/a&gt;&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Paul like one part of the article, but I like it for another part. The part I like explained the difference between the up-front license cost of software versus the implementation/customization cost.&lt;br /&gt;&lt;br /&gt;Here is the part I liked:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#33cc00;"&gt;One thing he said that suddenly made the bulb above my head light was to do with procurement. At Netsight, we pretty much gave up on responding to blind tenders we were sent many years ago due to the overhead of responding to them. Not just that but we always thought that the tenders generally asked 'the wrong questions' which made it very hard for us, as an Open Source implementation company, to really give a decent answer. Many of you, no doubt, will be familiar with this scenario as an example: The tender has a cost table you have to fill in the blanks in. You are not allowed to deviate from the format of the table (because the tenderer wants to try and compare apples with apples). So you fill the table in, but your numbers just don't quite fit in the boxes right. We've even had feedback from tenders we've lost saying things like 'Well your solution costs 0 for licensing and 50K for implementation; the solution we chose cost 40K in licensing and 30K in implementation, so must be the more appropriate solution for our needs'. &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#33cc00;"&gt;&lt;br /&gt;Now I can see their thinking here. Our solution cost 50K and 100% of the cost is in implementation/customisation so obviously wasn't the correct solution to start with. The one they chose cost 70K but only 42% of that was implementation/customisation. What they don't realise that (especially in the CMS market) any large software procurement is only going to give you a fraction of your requirements out of the box. That is because every business is different, and so no one piece of software can do everything you need. Open Source might give you slightly less out of the box than a commercial offering, but that is generally because Open Source software focusses on delivering a lowest common denominator out of the box, whereas commercial software has loads of bells and whistles (many of which you will never need), but more on that later. You are still going to need professional services to tailor the software to your specific business and its requirements. The problem is looking at ratio of costs and the perception of these ratios.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000000;"&gt;The Sunburned Surveyor&lt;/span&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1274271662969742166?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1274271662969742166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1274271662969742166' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1274271662969742166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1274271662969742166'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/04/good-summary-of-proprietary-versus-open.html' title='Good Summary of Proprietary Versus Open Source'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-7826445283099921029</id><published>2009-04-07T12:43:00.000-07:00</published><updated>2009-04-07T12:51:37.612-07:00</updated><title type='text'>172 Plug-Ins For OpenJUMP</title><content type='html'>I made a list of all the OpenJUMP plug-ins packages as part of the core. This doesn't count plug-ins distributed separately from the plug-in. I did this by examining the class names in the Javadoc for the program.&lt;br /&gt;&lt;br /&gt;How many Plug-Ins did I find?&lt;br /&gt;&lt;br /&gt;172&lt;br /&gt;&lt;br /&gt;That is a lot of plug-ins. I was suprised at how much of OpenJUMP's functionality is acutally added via plug-in, which increases the flexibility of the program.&lt;br /&gt;&lt;br /&gt;I also found a lot of plug-ins that seemed to duplicate functionality, or to offer "junk" functionality. I think there might be some house cleaning to do. Here are some examples of a plug-in names that made me raise my eyebrows:&lt;br /&gt;&lt;br /&gt;AddWMSDemoBoxEasterEggPlugIn&lt;br /&gt;MicroscopePlugIn&lt;br /&gt;&lt;br /&gt;This list of plug-ins should make it easier for OpenJUMP programmers to thin down OpenJUMP's functionality, or to locate the plug-in that contributes behavior to OpenJUMP.&lt;br /&gt;&lt;br /&gt;Here is the full list of plug-ins for OpenJUMP that I compiled:&lt;br /&gt;&lt;br /&gt;AboutPlugIn&lt;br /&gt;AbstractAddDatastoreLayerPlugIn&lt;br /&gt;AbstractLoadDatasetPlugIn&lt;br /&gt;AbstractLoadSaveDatasetPlugIn&lt;br /&gt;AbstractPlugIn&lt;br /&gt;AbstractSaveDatasetAsPlugIn&lt;br /&gt;AbstractSaveProjectPlugIn&lt;br /&gt;AddDatastoreLayerPlugIn&lt;br /&gt;AddImageLayerPlugIn&lt;br /&gt;AddNewCategoryPlugIn&lt;br /&gt;AddNewFeaturesPlugIn&lt;br /&gt;AddNewLayerPlugIn&lt;br /&gt;AddSIDLayerPlugIn&lt;br /&gt;AddWMSDemoBoxEasterEggPlugIn&lt;br /&gt;AddWMSQueryPlugIn&lt;br /&gt;AffineTransformationPlugIn&lt;br /&gt;AffineTransformPlugIn&lt;br /&gt;AttributeQueryPlugIn&lt;br /&gt;BeanShellPlugIn&lt;br /&gt;BeanToolsPlugIn&lt;br /&gt;BoundaryMatchDataPlugIn&lt;br /&gt;BufferPlugIn&lt;br /&gt;CalculateAreasAndLengthsPlugIn&lt;br /&gt;ChangeCoordinateSystemPlugIn&lt;br /&gt;ChangeLayerableNamePlugIn&lt;br /&gt;ChangeSRIDPlugIn&lt;br /&gt;ChangeStylesPlugIn&lt;br /&gt;ClearSelectionPlugIn&lt;br /&gt;CloneWindowPlugIn&lt;br /&gt;CombineSelectedFeaturesPlugIn&lt;br /&gt;ConnectionManagerToolboxPlugIn&lt;br /&gt;ConstrainedMoveVertexPlugIn&lt;br /&gt;ConvexHullPlugIn&lt;br /&gt;CopyImagePlugIn&lt;br /&gt;CopySelectedItemsPlugIn&lt;br /&gt;CopySelectedLayersPlugIn&lt;br /&gt;CopySelectedLayersToWarpingVectorsPlugIn&lt;br /&gt;CopyStylesPlugIn&lt;br /&gt;CopyThisCoordinatePlugIn&lt;br /&gt;CreateThiessenPolygonsPlugIn&lt;br /&gt;CustomFillPatternExamplePlugIn&lt;br /&gt;CutPolygonPlugIn&lt;br /&gt;CutSelectedItemsPlugIn&lt;br /&gt;CutSelectedLayersPlugIn&lt;br /&gt;DeeChangeStylesPlugIn&lt;br /&gt;DeleteAllFeaturesPlugIn&lt;br /&gt;DeleteEmptyGeometriesPlugIn&lt;br /&gt;DeleteSelectedItemsPlugIn&lt;br /&gt;DiffGeometryPlugIn&lt;br /&gt;DiffSegmentsPlugIn&lt;br /&gt;DrawCircleWithGivenRadiusPlugIn&lt;br /&gt;DrawConstrainedArcPlugIn&lt;br /&gt;DrawConstrainedCirclePlugIn&lt;br /&gt;CrawConstrainedLineStringPlugIn&lt;br /&gt;DrawConstrainedPolygonPlugIn&lt;br /&gt;EditablePlugIn&lt;br /&gt;EditAttributeByFormulaPlugIn&lt;br /&gt;EditingPlugIn&lt;br /&gt;EditSelectedFeaturePlugIn&lt;br /&gt;EditSelectedSidePlugIn&lt;br /&gt;EditWMSQueryPlugIn&lt;br /&gt;EnsureAllLayersHaveSRIDStylePlugIn&lt;br /&gt;ExplodeSelectedFeaturesPlugIn&lt;br /&gt;ExportImagePlugIn&lt;br /&gt;ExtensionManagerPlugIn&lt;br /&gt;ExtractSegmentsPlugIn&lt;br /&gt;FeatureInfoPlugIn&lt;br /&gt;FeatureStatisticsPlugIn&lt;br /&gt;FirstTaskFramePlugIn&lt;br /&gt;GenerateLogPlugIn&lt;br /&gt;GeometryFunctionPlugIn&lt;br /&gt;ImageLayerManagerPlugIn&lt;br /&gt;InstallGridPlugIn&lt;br /&gt;InstallKeyPanPlugIn&lt;br /&gt;InstallReferencedImageFactoriesPlugIn&lt;br /&gt;InstallRendererPlugIn&lt;br /&gt;InstallScaleBarPlugIn&lt;br /&gt;InstallShowScalePlugIn&lt;br /&gt;InstallSkinsPlugIn&lt;br /&gt;InstallStandardDataSourceQueryChoosersPlugIn&lt;br /&gt;InstallStandardFeatureTextWritersPlugIn&lt;br /&gt;InstallZoomBarPlugIn&lt;br /&gt;JoinAttributesSpatiallyPlugIn&lt;br /&gt;JoinTablePlugIn&lt;br /&gt;JoinWithArcPlugIn&lt;br /&gt;LayerableClipboardPlugIn&lt;br /&gt;LayerStatisticsPlugIn&lt;br /&gt;Layer2SLDPlugIn&lt;br /&gt;LineNoderPlugIn&lt;br /&gt;LoadDatasetPlugIn&lt;br /&gt;MacroPlugIn&lt;br /&gt;MainButtonPlugIn&lt;br /&gt;MapToolTipPlugIn&lt;br /&gt;MapToolTipsPlugIn&lt;br /&gt;MeasureM_FPlugIn&lt;br /&gt;MergeTwoSelectedPolygonsPlugIn&lt;br /&gt;MicroscopePlugIn&lt;br /&gt;MoveAlongAnglePlugIn&lt;br /&gt;MoveLayerablePlugIn&lt;br /&gt;NewTaskPlugIn&lt;br /&gt;OpenProjectPlugIn&lt;br /&gt;OptionsPlugIn&lt;br /&gt;OutputWindowPlugIn&lt;br /&gt;OverlayPlugIn&lt;br /&gt;PasteItemsPlugIn&lt;br /&gt;PasteLayersPlugIn&lt;br /&gt;PasteStylesPlugIn&lt;br /&gt;PersistentBlackboardPlugIn&lt;br /&gt;PlanarGraphPlugIn&lt;br /&gt;PolygonizerPlugIn&lt;br /&gt;PrecisionReducerPlugIn&lt;br /&gt;ProgressReportingPlugIn&lt;br /&gt;ProjectionPlugIn&lt;br /&gt;RandomArrowsPlugIn&lt;br /&gt;RandomTrianglesPlugIn&lt;br /&gt;RedoPlugIn&lt;br /&gt;ReducePointsISAPlugIn&lt;br /&gt;RemoveSelectedCategoriesPlugIn&lt;br /&gt;RemoveSelectedLayersPlugIn&lt;br /&gt;ReplaceValuePlugIn&lt;br /&gt;ReplicateSelectedItemsPlugIn&lt;br /&gt;RotatePlugIn&lt;br /&gt;RotateSeletedItemPlugIn&lt;br /&gt;RunDatastoreQueryPlugIn&lt;br /&gt;SaveDatasetAsPlugIn&lt;br /&gt;SaveDatasetsPlugIn&lt;br /&gt;SaveImageAsPlugIn&lt;br /&gt;SaveImageAsSVGPlugIn&lt;br /&gt;SaveLegendPlugIn&lt;br /&gt;SaveProjectAsPlugIn&lt;br /&gt;SaveProjectPlugIn&lt;br /&gt;ScaleBarPlugIn&lt;br /&gt;ScaleSelectedItemsPlugIn&lt;br /&gt;SelectAllLayerItemsPlugIn&lt;br /&gt;SelectByTypePlugIn&lt;br /&gt;SelectFeaturesInFencePlugIn&lt;br /&gt;SelectItemsByCircleFromSelectedLayersPlugIn&lt;br /&gt;SelecteItemsByFenceFromSelectedLayersPlugIn&lt;br /&gt;SelectOneItemPlugIn&lt;br /&gt;ShortcutKeysPlugIn&lt;br /&gt;ShowFullPathPlugIn&lt;br /&gt;ShowScalePlugIn&lt;br /&gt;ShowTriangulationPlugIn&lt;br /&gt;SimpleQueryPlugIn&lt;br /&gt;SpatialJoinPlugIn&lt;br /&gt;SpatialQueryPlugIn&lt;br /&gt;StandardPirolPlugIn&lt;br /&gt;TestColorThemingPlugIn&lt;br /&gt;ThreadedBasePlugIn&lt;br /&gt;ThreadedPlugIn&lt;br /&gt;ToggleVisibilityPlugIn&lt;br /&gt;ToolboxPlugIn&lt;br /&gt;UndoPlugIn&lt;br /&gt;UnionByAttributePlugIn&lt;br /&gt;UnionPlugIn&lt;br /&gt;ValidateSelectedLayersPlugIn&lt;br /&gt;VerticesInFencePlugIn&lt;br /&gt;ViewAttributesPlugIn&lt;br /&gt;ViewSchemaPlugIn&lt;br /&gt;WarpingPlugIn&lt;br /&gt;WKTPlugIn&lt;br /&gt;ZoomBarPlugIn&lt;br /&gt;ZoomNextPlugIn&lt;br /&gt;ZoomPreviousPlugIn&lt;br /&gt;ZoomToClickPlugIn&lt;br /&gt;ZoomToCoordinatePlugIn&lt;br /&gt;ZoomToFencePlugIn&lt;br /&gt;ZoomToFullExtentPlugIn&lt;br /&gt;ZoomToLayerPlugIn&lt;br /&gt;ZoomToScalePlugIn&lt;br /&gt;ZoomToSelectedItemsPlugIn&lt;br /&gt;ZoomToWMSPlugIn&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-7826445283099921029?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/7826445283099921029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=7826445283099921029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7826445283099921029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7826445283099921029'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/04/172-plug-ins-for-openjump.html' title='172 Plug-Ins For OpenJUMP'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1271658488187454470</id><published>2009-04-07T07:57:00.001-07:00</published><updated>2009-04-07T07:58:51.225-07:00</updated><title type='text'>Blog Post On User Interface Design Tools</title><content type='html'>I liked this blog bost on the use of interface design tools. In my own experience I've found the tools are troublesome at best. It can be very hard to make sense of the code they produce, and the zillion inner classes they create for event handling really annoy me.&lt;br /&gt;&lt;br /&gt;At any rate, I think the blog author makes a good argument:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sys-con.com/node/898537"&gt;http://java.sys-con.com/node/898537&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1271658488187454470?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1271658488187454470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1271658488187454470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1271658488187454470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1271658488187454470'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/04/blog-post-on-user-interface-design.html' title='Blog Post On User Interface Design Tools'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3772094560380594584</id><published>2009-04-01T07:23:00.000-07:00</published><updated>2009-04-01T07:25:55.754-07:00</updated><title type='text'>Interesting Blog Post On "Features" and "Layers"</title><content type='html'>I think GML is a little hyped, and I think GML 3 was a disaster in a lot of ways, but Ron Lake has a really cool post on the concept of "features" and "layers" as we use them in the context of GIS.&lt;br /&gt;&lt;br /&gt;Here is the post:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.galdosinc.com/archives/557"&gt;http://www.galdosinc.com/archives/557&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3772094560380594584?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3772094560380594584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3772094560380594584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3772094560380594584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3772094560380594584'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/04/interesting-blog-post-on-features-and.html' title='Interesting Blog Post On &quot;Features&quot; and &quot;Layers&quot;'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-5470497909242570578</id><published>2009-04-01T07:17:00.000-07:00</published><updated>2009-04-01T07:18:42.458-07:00</updated><title type='text'>Red Hat is Joining The OpenJDK Effort</title><content type='html'>Slashdot had an intersting blip about Red Hat joining the OpenJDK effort. I like Linux and Java, so I thought I would share the post:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developers.slashdot.org/article.pl?sid=07/11/06/0358250"&gt;http://developers.slashdot.org/article.pl?sid=07/11/06/0358250&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-5470497909242570578?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/5470497909242570578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=5470497909242570578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5470497909242570578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5470497909242570578'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/04/red-hat-is-joining-openjdk-effort.html' title='Red Hat is Joining The OpenJDK Effort'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-5176808113593570665</id><published>2009-03-30T12:50:00.000-07:00</published><updated>2009-03-30T12:57:50.323-07:00</updated><title type='text'>"First To File" Versus "First to Invent"</title><content type='html'>I posted some questions about the differences in United States patent law and patent law in other countries to the geowanking mailling list a couple of weeks back. A couple of the other posters where willing to clarify my understanding of the difference between a "first to invent" patent system like the one we use in the United States, and a "first to file" system that is used on most other countries.&lt;br /&gt;&lt;br /&gt;I was concerned that a "first to file" system (in which the first person to file a patent, not the first person to invent the thing being patented, is granted the patent) would allow big corporations to steam role patents over smaller companies and open source programmers.&lt;br /&gt;&lt;br /&gt;Here was the scenario I posted:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;Let's say that a hobby programmer comes up with a great algorithm to&lt;br /&gt;help create optimal temps in a bio-fuel cooker. He doesn't take the&lt;br /&gt;time to file a patent on his algorithm, but releases it as part of an&lt;br /&gt;open source library.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;Chevron comes along and files a patent application on his algorithm.&lt;br /&gt;Does Chevron get awarded the patent?&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;Here was a response from Puneet, which summed the differences between the two patent systems:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;No, Chevron won't get the patent in all likelihood because of "prior art." For that matter, your hobby programmer friend also won't be able to patent it anymore because his algorithm is now in public use, unless he can prove that it was being "experimented with" (difficult to establish).&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;On the other hand, if the hobby programmer sat on his algorithm, not telling anyone about it, and Chevron later on invented the same thing and filed for the patent, in spite of the hobby programmer being the "first-to-invent," Chevron would get the patent for being the "first-to-file" (under new rules).&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;br /&gt;After this explanation I understood the advantages of "first-to-file" systems. It helps reduce the ambiguity of deciding who should be awarded a patent. I think a system that prevents companies from sticking algorithms (or other patentable "things") in thier corporate vaults for 20 years and then suing someone else who comes up with the same idea independently is a better system than one that would allow this behavior.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-5176808113593570665?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/5176808113593570665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=5176808113593570665' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5176808113593570665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5176808113593570665'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/first-to-file-versus-first-to-invent.html' title='&quot;First To File&quot; Versus &quot;First to Invent&quot;'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-8673832193315250023</id><published>2009-03-24T09:10:00.000-07:00</published><updated>2009-03-24T09:12:22.729-07:00</updated><title type='text'>Historical Map Collection Under The Creative Commons</title><content type='html'>A post from the Geodata mailing list at the OSGeo revealed what could be an interesting source of historical GIS data. It is the David Rumsey Historical Map Collection. The collection is apparently released under one of the Creative Commons licenses. You can find the collection online here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.davidrumsey.com/"&gt;http://www.davidrumsey.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I didn't figure out a way to download high resolution copies of the maps, but I think there is a way to do it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-8673832193315250023?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/8673832193315250023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=8673832193315250023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8673832193315250023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8673832193315250023'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/historical-map-collection-under.html' title='Historical Map Collection Under The Creative Commons'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-7311123716623083989</id><published>2009-03-12T13:27:00.000-07:00</published><updated>2009-03-12T13:31:15.378-07:00</updated><title type='text'>Spatial Data Accuracy and Georeferencing Standards</title><content type='html'>The Arizona Professional Land Surveyors Association has teamed with to produce a&lt;span style="color:#009900;"&gt;&lt;em&gt; "Spatial Data Accuracy and Georeferencing Standards". &lt;/em&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;I think this is a great example of land surveyors and GIS professionals working together for the betterment of both professions and larger society. You can download the standards &lt;a href="http://azpls.org/associations/1444/files/AZ%20Spatial%20Data%20Standards_v3.1%20final.pdf"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-7311123716623083989?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/7311123716623083989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=7311123716623083989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7311123716623083989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7311123716623083989'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/spatial-data-accuracy-and.html' title='Spatial Data Accuracy and Georeferencing Standards'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3833301058633355223</id><published>2009-03-12T09:16:00.000-07:00</published><updated>2009-03-12T09:18:32.692-07:00</updated><title type='text'>Revoking the Name Change</title><content type='html'>I decided to revoke my recent name change. It didn't make sense to rename the blog, but not change the URL. I didn't want to change the URL, because that would break a bunch of links, and people might not find the blog at the new URL.&lt;br /&gt;&lt;br /&gt;So the "OpenJUMP Blog" it will be.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3833301058633355223?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3833301058633355223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3833301058633355223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3833301058633355223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3833301058633355223'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/revoking-name-change.html' title='Revoking the Name Change'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3119477200727412944</id><published>2009-03-09T13:51:00.000-07:00</published><updated>2009-03-09T13:52:37.847-07:00</updated><title type='text'>Name Change</title><content type='html'>I've changed the name of this blog from the "OpenJUMP Blog" to the "Sunburned Surveyor's GIS Blog". Stefan suggested this name change long ago, and I'm just now getting around to it.&lt;br /&gt;&lt;br /&gt;I'll still be talking about OpenJUMP quite a bit, but since I talk about a lot of other programming and GIS related topics (and not just OpenJUMP) the name change seemed appropriate.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3119477200727412944?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3119477200727412944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3119477200727412944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3119477200727412944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3119477200727412944'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/name-change.html' title='Name Change'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-8375282594319664486</id><published>2009-03-09T13:42:00.000-07:00</published><updated>2009-03-09T13:51:05.194-07:00</updated><title type='text'>WKT for curves?</title><content type='html'>The original spec for WKT (Well Known Text) geometries did not include (to my knowledge) support for 2D curveys, like circular arcs. I didn't realize that had changed, and the WKT spec now includes some limited support for 2D curves. You can see this paper for more information:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://doesen0.informatik.uni-leipzig.de/proceedings/paper/68.pdf"&gt;http://doesen0.informatik.uni-leipzig.de/proceedings/paper/68.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is cool, because I will need support for circular arcs in WKT if I am ever get around to working on a linear referencing (route stationing) application for flood control levees. I don't think will be seeing support for these curves in JTS anytime soon (because of the complexities that it introduces), but I wonder if we might find room for it in Geotools?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-8375282594319664486?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/8375282594319664486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=8375282594319664486' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8375282594319664486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8375282594319664486'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/wkt-for-curves.html' title='WKT for curves?'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6628328125179723537</id><published>2009-03-09T11:56:00.000-07:00</published><updated>2009-03-09T12:00:01.014-07:00</updated><title type='text'>New CIO Pushing "Data.Gov" Portal</title><content type='html'>The new CIO for the United States Government is pushing for a new web-site used to distribute government data to the public. Sound's like the CIO is also an advocate of open source software and open file format. Is this an exiting shift in the way the government distributes data (including geospatial data)?&lt;br /&gt;&lt;br /&gt;One can only hope. :]&lt;br /&gt;&lt;br /&gt;Here are a couple of articles about the data.gov portal:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://thecaucus.blogs.nytimes.com/2009/03/05/white-house-names-first-chief-information-officer/"&gt;http://thecaucus.blogs.nytimes.com/2009/03/05/white-house-names-first-chief-information-officer/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://howto.wired.com/wiki/Open_Up_Government_Data"&gt;http://howto.wired.com/wiki/Open_Up_Government_Data&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6628328125179723537?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6628328125179723537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6628328125179723537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6628328125179723537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6628328125179723537'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/new-cio-pushing-datagov-portal.html' title='New CIO Pushing &quot;Data.Gov&quot; Portal'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-7748710579634216799</id><published>2009-03-09T11:52:00.000-07:00</published><updated>2009-03-09T11:54:31.729-07:00</updated><title type='text'>Summary of Important "Open GIS Data" Court Decision</title><content type='html'>The California First Amendment Coalition has a summary of a very important court decision in California. The decision involves requiring Santa Clara County to give the public reasonable access to the parcel GIS data it maintains. This is a great court decision and I hope we see more decisions like it.&lt;br /&gt;&lt;br /&gt;Here is the link to the summary:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cfac.org/content/index.php/cfac-news/legal_development/"&gt;http://www.cfac.org/content/index.php/cfac-news/legal_development/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-7748710579634216799?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/7748710579634216799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=7748710579634216799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7748710579634216799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7748710579634216799'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/summary-of-important-open-gis-data.html' title='Summary of Important &quot;Open GIS Data&quot; Court Decision'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3916941090444024907</id><published>2009-03-04T16:40:00.000-08:00</published><updated>2009-03-04T17:02:10.461-08:00</updated><title type='text'>Rand Org Report on Assessing Homeland Security Implications of Publicly Available Geospatial Information</title><content type='html'>From the &lt;a href="http://geowanking.org/mailman/listinfo/geowanking_geowanking.org"&gt;geowanking mailing list&lt;/a&gt; and the &lt;a href="http://www.grey-cat.com/curious/?p=280"&gt;Curious Judith&lt;/a&gt; blog comes this link to an interseting report from the &lt;a href="http://www.rand.org/"&gt;RAND Corporation&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rand.org/pubs/monographs/2004/RAND_MG142.pdf"&gt;http://www.rand.org/pubs/monographs/2004/RAND_MG142.pdf&lt;/a&gt;&lt;a href="http://www.grey-cat.com/curious/?p=280"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The report is entitled "Assessing the Homeland Security Implications of Publicly Available Geospatial Information".&lt;br /&gt;&lt;br /&gt;Here is a summary of the report from the preface:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;This report assesses the homeland security implications of publicly&lt;br /&gt;available geospatial data and information. Specifically, it seeks to&lt;br /&gt;frame the analytical issues concerning whether and how this type of&lt;br /&gt;data and information that is available from U.S. government sources&lt;br /&gt;can be exploited by terrorists and other adversaries seeking to attack&lt;br /&gt;U.S. critical infrastructure and other key homeland locations. We&lt;br /&gt;give particular attention to surveying and characterizing these federal&lt;br /&gt;data and information within the broader context of diverse publicand&lt;br /&gt;private-sector producers of potentially relevant geospatial information.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This is a big report...but I think it touches on a critical issue for GIS enthusiasts in all parts of the world and I hope to read it at some point.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3916941090444024907?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3916941090444024907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3916941090444024907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3916941090444024907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3916941090444024907'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/rand-org-report-on-assessing-homeland.html' title='Rand Org Report on Assessing Homeland Security Implications of Publicly Available Geospatial Information'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-658996083843349832</id><published>2009-03-03T08:31:00.000-08:00</published><updated>2009-03-03T08:34:12.877-08:00</updated><title type='text'>Citing OpenJUMP In Publications</title><content type='html'>Stefan (always the academic) posted a proposed citation for OpenJUMP that can be used in articles and publications. I wanted to share it with everyone.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;The JUMP Pilot Project (2008): OpenJUMP GIS - The free and open sourceJava-based desktop GIS. Available from &lt;/span&gt;&lt;a href="http://www.openjump.org/"&gt;&lt;span style="color:#009900;"&gt;http://www.openjump.org/&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#009900;"&gt;. (AccessedJanuary 2009)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Thanks Stefan.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-658996083843349832?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/658996083843349832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=658996083843349832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/658996083843349832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/658996083843349832'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/citing-openjump-in-publications.html' title='Citing OpenJUMP In Publications'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-743702363528870685</id><published>2009-03-02T17:46:00.000-08:00</published><updated>2009-03-02T17:51:04.947-08:00</updated><title type='text'>Searching For Place Names With The USGS</title><content type='html'>The USGS maintains a web page that can be used to search a database of place names, both for the United States and places around the world. The web page is one part of the Geographic Name Information System (GNIS). The USGS also maintains a database for the GNIS. You can download the data from this database for all 50 of the states in the United States as a single zip file, or for just a single state.&lt;br /&gt;&lt;br /&gt;The home page for the GNIS is &lt;a href="http://geonames.usgs.gov/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The web page that lets you search for place names is &lt;a href="http://geonames.usgs.gov/pls/gnispublic/f?p=116:1:904831957767097"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The wikipedia page for the &lt;a href="http://en.wikipedia.org/wiki/Geographic_Names_Information_System"&gt;GNIS&lt;/a&gt; is here.&lt;br /&gt;&lt;br /&gt;You can even use the site to propose a new place name, which is pretty cool.&lt;br /&gt;&lt;br /&gt;I wonder if other countries maintain a database of place names like the GNIS.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-743702363528870685?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/743702363528870685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=743702363528870685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/743702363528870685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/743702363528870685'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/searching-for-place-names-with-usgs.html' title='Searching For Place Names With The USGS'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-5691015223784366149</id><published>2009-03-02T09:23:00.000-08:00</published><updated>2009-03-02T09:29:23.357-08:00</updated><title type='text'>Watermarking Vector GIS Data</title><content type='html'>A recent posting on the &lt;a href="http://lists.geocomm.com/mailman/listinfo/gislist"&gt;gislist&lt;/a&gt; about watermarking vector GIS data led to the link for this interseting article on the topic:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.directionsmag.com/article.php?article_id=195&amp;amp;trv=1"&gt;http://www.directionsmag.com/article.php?article_id=195&amp;amp;trv=1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just skimmed the article, but I plan on reading it in more detail. This is an interesting topic. A common method of watermarking vector GIS data is adding "fake" features, like road segments that don't really exist. But I have often thought that there has got to be better ways of placing a watermark. The tricky part is embedding a watermark that can resist translation, rotation, and scaling. (Or even reprojection to a new coordinate system.) This rules out using any coordinate geometry to record the watermark.&lt;br /&gt;&lt;br /&gt;Perhaps using the topology of features that remain intact despite translation, rotation, and scaling would be a valid way to watermark vector GIS data without "polluting" the dataset with fake features.&lt;br /&gt;&lt;br /&gt;I'll have to chew on this some more. Might be cool to add a vector GIS data watermarking plug-in to OpenJUMP.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-5691015223784366149?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/5691015223784366149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=5691015223784366149' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5691015223784366149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5691015223784366149'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/03/watermarking-vector-gis-data.html' title='Watermarking Vector GIS Data'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-9088015185281470181</id><published>2009-02-26T07:13:00.000-08:00</published><updated>2009-03-02T19:04:03.044-08:00</updated><title type='text'>Chandler - Open Source Task Manager</title><content type='html'>Here is the link to Chandler, the open source task manager that is written about in the book "Dreaming In Code":&lt;br /&gt;&lt;br /&gt;&lt;a href="http://chandlerproject.org/"&gt;http://chandlerproject.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I should've posted it sooner.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-9088015185281470181?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/9088015185281470181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=9088015185281470181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/9088015185281470181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/9088015185281470181'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/02/chandler-open-source-task-manager.html' title='Chandler - Open Source Task Manager'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1642450438934458436</id><published>2009-02-26T07:07:00.000-08:00</published><updated>2009-02-26T07:13:36.177-08:00</updated><title type='text'>Another "Dreaming In Code" Excerpt</title><content type='html'>In one part of the book Dreaming In Code, a programmer named Andy Hertzfield describes his programming style. (The excerpt is found on page 67 and page 68 of the book.) I wanted to post this excerpt, because I find my own programming style is similar to Andy's:&lt;br /&gt;&lt;br /&gt;"I just designed it and wrote something. There wasn't all the discussion. My way of writing code is, you sculpt it, you get something as good as you can, and everything's subject to change, always, as you learn. But youclimb this ladder of learning about your problem. Every problem's unique, so you have to learn about each problem, and you do something and get a better vantage point. And from that vantage point you can decide to thrwo it out. Code is cheap, but often tells you what to do next."&lt;br /&gt;&lt;br /&gt;After I read that, I didn't feel so bad about scraping so much code as I move through the different iterations of a program. It made me realize that this form of programming might not be as wastefull as I thought it was.&lt;br /&gt;&lt;br /&gt;"Code is cheap, but often tells you what to do next."&lt;br /&gt;&lt;br /&gt;I like it. Reminds me of something that Jody Garnett often says: "Let's stop talking and actually do something."&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1642450438934458436?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1642450438934458436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1642450438934458436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1642450438934458436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1642450438934458436'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/02/another-dreaming-in-code-excerpt.html' title='Another &quot;Dreaming In Code&quot; Excerpt'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1988640164285792472</id><published>2009-02-25T07:56:00.000-08:00</published><updated>2009-02-25T08:06:33.217-08:00</updated><title type='text'>The Sunburned Surveyor’s Geospatial Programmer Recognition Award</title><content type='html'>I believe we live in a world that is obsessed with self-promotion and a quest for glory. We seem to be slaves to our own egos, and have a difficult time improving ourselves through constructive criticism. Even in the open source community you come across programmers that react with an almost violent fervor when there own work is challenged or questioned.&lt;br /&gt;&lt;br /&gt;It would seem beneficial to make a concerted effort to tamper our own egos, while looking for admirable qualities in others. This helps us to appreciate our own shortcomings and imperfections, and gives us the chance to reflect on the good parts of other’s personalities that we would like to better imitate.&lt;br /&gt;&lt;br /&gt;So I’ve decided to take some concrete steps along this vein. I will occasionally (every couple of months) highlight someone on my blog in the open source geospatial community that has the type of personality I am talking about. I’m going to identify these individuals as the recipient of &lt;span style="color:#009900;"&gt;The Sunburned Surveyor’s Programmer Recognition Award&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The programmers that receive my little award will have made contributions to my own growth as a programmer and/or as a mapper, or will have made these types of contributions to others. These programmers are not motivated by ego or a quest for glory. Instead, they are moved by a desire to help others and a true love of what they do. They are community builders and team maintainers. They are teachers, coaches, and mentors. I’ll be sure to identify what I most admire about each of the programmers, and I will indicate why they are getting the award.&lt;br /&gt;&lt;br /&gt;I’ll announce the first recipient of my &lt;span style="color:#009900;"&gt;Geospatial Programmer Recognition Award&lt;/span&gt; in the next few days.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;The Sunburned Surveyor's Geospatial Programmer Recognition Award&lt;/span&gt; doesn't come with a fancy certificate, any free trips to a tropical island, and no trophy. It's really just recognition on my blog (which is likely being read only by myself and my dog). :] This isn't much of an award, but it is one way for me to shine the light on programmers that set a good example for the rest of us.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1988640164285792472?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1988640164285792472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1988640164285792472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1988640164285792472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1988640164285792472'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/02/sunburned-surveyors-geospatial.html' title='The Sunburned Surveyor’s Geospatial Programmer Recognition Award'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-5806168879037077510</id><published>2009-02-25T07:51:00.000-08:00</published><updated>2009-02-25T07:54:12.699-08:00</updated><title type='text'>Another Good Book (This one for programmers.)</title><content type='html'>I wanted to post about another good book. This one is for programmers. The book is entitled “Dreaming In Code”. It’s about the process of writing software, and follows a team developing an open source application called Chandler. (Chandler is a handy task manager that I started using after I began reading the book.) The book is valuable to me because it identifies a lot of the pitfalls and challenges in writing software.&lt;br /&gt;&lt;br /&gt;Here is the web page for the book on Amazon:&lt;br /&gt;&lt;a href="http://www.amazon.com/Dreaming-Code-Programmers-Transcendent-Software/dp/1400082471/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1235576792&amp;amp;sr=1-1"&gt;http://www.amazon.com/Dreaming-Code-Programmers-Transcendent-Software/dp/1400082471/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1235576792&amp;amp;sr=1-1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is an excerpt from page 148 of the book, which identifies a pitfall programmers can fall into when testing a software for robustness:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;Beyond that, it is the programmer’s job to imagine unlikely scenarios…Programmers call these edge cases, and they are often where the bugs hide. Trained to imagine them with exhaustive thoroughness, programmers’ pragmatic, gut-sense awareness of what &lt;em&gt;edge cases &lt;/em&gt;really mater can get rusty. They spend so much brainpower out at the edge that they loose sight of the center.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-5806168879037077510?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/5806168879037077510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=5806168879037077510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5806168879037077510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5806168879037077510'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/02/another-good-book-this-one-for.html' title='Another Good Book (This one for programmers.)'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-5762824804033831873</id><published>2009-02-25T07:40:00.000-08:00</published><updated>2009-02-25T07:43:10.121-08:00</updated><title type='text'>A “Must Read” Book For The Map Enthusiast</title><content type='html'>I’ve got a book that needs to be on the reading list of every map enthusiast. The book is entitled “The Mapmakers”. It talks about the men and woman who had an important or pivotal role in map making throughout history. The book is well written and entertaining. I’ve already learned about Chinese mapmaking, the influence of mythology and religion on medieval map making, the first street map (made by the Roman Caesar), and about Eratosthenes, the Greek librarian that measured the Earth. My favorite chapters are about the design of John Harrison’s clock, which allowed mariners to measure longitude, and James Cook, who revolutionized the mapping of coastlines.&lt;br /&gt;&lt;br /&gt;Here is the Amazon Books web page for “The Mapmakers”:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0375409297/ref=olp_product_details?ie=UTF8&amp;amp;me=&amp;amp;seller"&gt;http://www.amazon.com/gp/product/0375409297/ref=olp_product_details?ie=UTF8&amp;amp;me=&amp;amp;seller&lt;/a&gt;&lt;a href="http://www.amazon.com/Mapmakers-Revised-John-Noble-Wilford/dp/0375409297#reader"&gt;=&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can view the table of contents for the book there.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-5762824804033831873?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/5762824804033831873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=5762824804033831873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5762824804033831873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5762824804033831873'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/02/must-read-book-for-map-enthusiast.html' title='A “Must Read” Book For The Map Enthusiast'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6006232991484681748</id><published>2009-02-24T12:59:00.000-08:00</published><updated>2009-02-24T13:12:04.630-08:00</updated><title type='text'>Geo Clipboard for sharing between open source GIS programs?</title><content type='html'>Most of you know about the standard “clipboard” that comes with Microsoft Windows or most Linux distributions. This is the tool that lets you paste text from one cell in a spreadsheet to another, or from one document to another. I can even us it in AutoCAD to paste geometry from one drawing to another.&lt;br /&gt;&lt;br /&gt;I thought it would be cool to have a “Geo Clipboard” for open source Java applications. This would simply be a text file stored in a known location (like C:/Program Files/Geo Clipboard/clipboard.txt) that would store items like positions and simple features. You could then write plug-ins for applications like UDig and OpenJUMP that wrote to and read from the clipboard.&lt;br /&gt;&lt;br /&gt;Ideally, the GeoClipboard would allow me to select a feature in OpenJUMP and paste it right into UDig. In the standard operating system clipboard each new selection saved to the clipboard overwrites the previous selection. I think it would be cool to associate selections in the Geo Clipboard with a tag or label. That way the user could store multiple selections on the clipboard.&lt;br /&gt;&lt;br /&gt;The file format might look like this in XML (I replaced the greater than/lesser than symbols with square brackets.):&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;[clipboard]&lt;br /&gt;   [clipboard_item]&lt;br /&gt;      [tag]Road Features East of Interstate 5[/tag]&lt;br /&gt;      [date]2009-02-24[/date]&lt;br /&gt;      [time]13:07[/time]&lt;br /&gt;      [type]simple features[type]&lt;br /&gt;      [value]&lt;br /&gt;         Simple features would go here…&lt;br /&gt;      [/value]&lt;br /&gt;   [clipboard_item]&lt;br /&gt;[/clipboard]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course, it would be cool if the Geo Clipboard came with a little application that allowed you to view and edit its contents without the need for an external application like OpenJUMP or UDig.&lt;br /&gt;&lt;br /&gt;There is no need for the Geo Clipboard to be limited to Java programs either. Since we are working with a text file, you could use it in applications like QGIS to.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6006232991484681748?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6006232991484681748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6006232991484681748' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6006232991484681748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6006232991484681748'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/02/geo-clipboard-for-sharing-between-open.html' title='Geo Clipboard for sharing between open source GIS programs?'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6961669204897900128</id><published>2009-02-24T12:47:00.000-08:00</published><updated>2009-02-24T12:58:48.654-08:00</updated><title type='text'>Using XML To Describe GIS Data Models</title><content type='html'>ESRI has been the main creator of widely distributed GIS data models. See &lt;a href="http://support.esri.com/index.cfm?fa=downloads.datamodels.gateway"&gt;this page&lt;/a&gt; for examples.&lt;br /&gt;&lt;br /&gt;An ESRI data model is usually distributed as some type of poster, but other documentation is sometimes included. The data model is usually tuned for ESRI GIS software, although it is possible to extract some of the basic database design from the model.&lt;br /&gt;&lt;br /&gt;I'd like to work on some of my own GIS data models some day. A data model for flood control infrastrucutre, survey control, the Public Land Survey System, and for Open Street Map are some that come to mind. I'm not very good at producing posters, but I was thinking there might be a better way to share data models.&lt;br /&gt;&lt;br /&gt;What if we had an XML file format that could be used to document and share a data model? That would be a lot more useful than a poster. You could write a little desktop application that could be used to browse and modify the different parts of a model. You could cut and paste parts of a model from on model to another. You could even write a tool that autmatically creates a graphical representation of the model in something like SVG, or make a tool that generates a relational database from the information in the model.&lt;br /&gt;&lt;br /&gt;I took a crude stab at an XML file format that describes a data model for Open Street Map:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.redefinedhorizons.com/shared_files/samples/"&gt;http://www.redefinedhorizons.com/shared_files/samples/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is something I would like to explore more in the future. Of course, the XML file is kind of ugly. Ir would need to be accompanied by a cool JAva API and desktop app to be really useful. :]&lt;br /&gt;&lt;br /&gt;For now, I need to finish my Feature Photo Manager.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6961669204897900128?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6961669204897900128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6961669204897900128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6961669204897900128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6961669204897900128'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/02/using-xml-to-describe-gis-data-models.html' title='Using XML To Describe GIS Data Models'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1459088240120936821</id><published>2009-02-24T11:51:00.000-08:00</published><updated>2009-02-24T11:56:01.680-08:00</updated><title type='text'>Java for desktop applications?</title><content type='html'>It seems the whole world is developing web applications. Sometimes I wonder if I'm the only guy left developing cool applications (like OpenJUMP) for the desktop. Guess I'm not the only one. Here is a short blog post about growing revenues for Java desktop development:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.dzone.com/news/growing-revenue-desktop-java"&gt;http://java.dzone.com/news/growing-revenue-desktop-java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1459088240120936821?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1459088240120936821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1459088240120936821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1459088240120936821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1459088240120936821'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/02/java-for-desktop-applications.html' title='Java for desktop applications?'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6645946615966653038</id><published>2009-02-12T13:19:00.000-08:00</published><updated>2009-02-12T13:21:15.921-08:00</updated><title type='text'>FPM Source Code</title><content type='html'>I forgot to mention the Java source code for FPM can be found on the SurveyOS SVN repository at SourceForge:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://surveyos.svn.sourceforge.net/viewvc/surveyos/java/feature_photo_manager/"&gt;http://surveyos.svn.sourceforge.net/viewvc/surveyos/java/feature_photo_manager/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You'll need InfoNode's Docking Window library and the JGoodies Form Layout Library to build the program. (Warning: It doesn't do much at this point.)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6645946615966653038?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6645946615966653038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6645946615966653038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6645946615966653038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6645946615966653038'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/02/fpm-source-code.html' title='FPM Source Code'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-2221995983608605131</id><published>2009-02-12T13:04:00.000-08:00</published><updated>2009-02-12T13:33:09.812-08:00</updated><title type='text'>Break From OpenJUMP: Working On FPM</title><content type='html'>I've taken a short break from OpenJUMP programming to work on a independent tool for my Open Street Map contributions. The tool is named &lt;em&gt;Feature Photo Manager&lt;/em&gt;. It will be a neat little program that allows a user to view and edit metadata for photos. This metadata is specifically tailored for geospatial data applications. I'll be using it to record metadata about photos of streets, street signs, street intersections, street crossings, and landmarks taken during my Open Street Map data collection. I'm going to publish an spec for the feature photo metadata file format, which will be in XML. This will allow other GIS programs to work with the metadata.&lt;br /&gt;&lt;br /&gt;You'll be able to store and work with the following types of data about your field photos using FPM:&lt;br /&gt;&lt;br /&gt;- Job/Project Data&lt;br /&gt;- Time and Date Data&lt;br /&gt;- Photographer Data&lt;br /&gt;- Camera Data&lt;br /&gt;- Photo Location&lt;br /&gt;- Photo Limits&lt;br /&gt;- Features Visible in the Photo&lt;br /&gt;- Miscellaneous Comments&lt;br /&gt;- Photo Direction&lt;br /&gt;- Photo Description&lt;br /&gt;&lt;br /&gt;I've got a lot of the Java API for FPM whipped up. I'm working on some unit tests for this code right now. I've also got a shell of the FPM program itself constructed. It uses the InfoNode docking window framework and a plug-in mechanism that I stole from OpenJUMP. (Thanks Jon Aquino.) :]&lt;br /&gt;&lt;br /&gt;When I get done with the first release of FPM I hope to extract the generic parts of the program (including the plug-in framework and use of docking windows) into a shell that can be easily used to create other simple GUI programs in Java.&lt;br /&gt;&lt;br /&gt;You can see a screen shot of the GUI shell for FPM here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://i291.photobucket.com/albums/ll297/SunburnedSurveyor/Feature_Photo_Manager_Screenshot.png"&gt;Feature Photo Manager Screenshot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All of the code for this project (including the code for the GUI and the API for working with the metadata) will be released under the LGPL or GPL. (GPL if I release the stuff under GeoTools, GPL if I release it through the SurveyOS Project.)&lt;br /&gt;&lt;br /&gt;I'm excited about using this program and sharing it with others.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-2221995983608605131?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/2221995983608605131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=2221995983608605131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2221995983608605131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2221995983608605131'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/02/break-from-openjump-working-on-fpm.html' title='Break From OpenJUMP: Working On FPM'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4789993622992221919</id><published>2009-01-15T13:44:00.000-08:00</published><updated>2009-01-15T13:46:38.886-08:00</updated><title type='text'>Google Programmer Explains Why Static Methods Are Bad For Java Unit Testing</title><content type='html'>This article made me question my frequent use of static utility methods:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/"&gt;http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are a couple of the excerpts I liked from the article:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;The basic issue with static methods is they are procedural code. I have no idea how to unit-test procedural code. Unit-testing assumes that I can instantiate a piece of my application in isolation. During the instantiation I wire the dependencies with mocks/friendlies which replace the real dependencies. With procedural programing there is nothing to “wire” since there are no objects, the code and data are separate.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;Lets do a mental exercise. Suppose your application has nothing but static methods. (Yes, code like that is possible to write, it is called procedural programming.) Now imagine the call graph of that application. If you try to execute a leaf method, you will have no issue setting up its state, and asserting all of the corner cases. The reason is that a leaf method makes no further calls. As you move further away from the leaves and closer to the root main() method it will be harder and harder to set up the state in your test and harder to assert things. Many things will become impossible to assert. Your tests will get progressively larger. Once you reach the main() method you  no longer have a unit-test (as your unit is the whole application) you now have a scenario test. Imagine that the application you are trying to test is a word processor. There is not much you can assert from the main method.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4789993622992221919?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4789993622992221919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4789993622992221919' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4789993622992221919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4789993622992221919'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/01/google-programmer-explains-why-static.html' title='Google Programmer Explains Why Static Methods Are Bad For Java Unit Testing'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1203816565526603296</id><published>2009-01-15T12:48:00.000-08:00</published><updated>2009-01-15T12:53:24.607-08:00</updated><title type='text'>Best "General" Java Programming Book</title><content type='html'>I wanted to task some time to mention what I feel is the best "general" Java programming book I've ever read. I'm not talking about a book on a specific Java topic, like Swing or threads, but a book that gives a good overview of the language.&lt;br /&gt;&lt;br /&gt;I think the best book of this type is O'Reilly's &lt;a href="http://oreilly.com/catalog/9780596002855/"&gt;Learning Java&lt;/a&gt;. (I've got the third edition.) The book is written by Patrick Niemeyer and Jonathan Knudsen. Patrick is also the creator of &lt;a href="http://www.beanshell.org/"&gt;Beanshell&lt;/a&gt;, the really cool scripting language that is best buddies with Java (and included in OpenJUMP). The book encourages the use of Beanshell to learn Java.&lt;br /&gt;&lt;br /&gt;I wish I would have had this book when I first started to learn Java. I find it still gives me better coverage on some topics than other programming books. For example, Learning Java has a topic on creating classes with generics that is much better than any coverage of the topic in my book that is dedicated to Java generics.&lt;br /&gt;&lt;br /&gt;If you are a serious Java programmer, this book should be in your library.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1203816565526603296?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1203816565526603296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1203816565526603296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1203816565526603296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1203816565526603296'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/01/best-general-java-programming-book.html' title='Best &quot;General&quot; Java Programming Book'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3786963008632441125</id><published>2009-01-06T20:48:00.000-08:00</published><updated>2009-01-06T21:14:22.944-08:00</updated><title type='text'>My Programming Goal For 2009: Modesty</title><content type='html'>I've been mulling over some of my recent programming activities, and I've been thinking about what I'd like to do with OpenJUMP in 2009.&lt;br /&gt;&lt;br /&gt;One of the greatest thing about being involved in an open source project like OpenJUMP, at least for me personally, is the opportunity that it offers for self-improvement. I find my flaws are shown more clearly in the OpenJUMP community than it is in my professional work as a Land Surveyor. I'm not really sure why this is. Perhaps it is because I am much more competent as a surveyor than I am as a programmer. (Let's hope that is the case.) Or perhaps it is because I'm not faced with the deadlines and other requirements for performance in my hobbies that I am at work.&lt;br /&gt;&lt;br /&gt;At any rate, I know what personal flaw has shown up the most clearly to me this past year, and that is a lack of modesty. It seems I'm always biting of more than I can chew. "Boldness" is what my programming friends like to call it when they are being polite. :]&lt;br /&gt;&lt;br /&gt;For 2009, I will try to live a life of programming modesty. No new major projects, no bold and exciting announcements, just humble and quiet coding... :]&lt;br /&gt;&lt;br /&gt;We'll see how I do.&lt;br /&gt;&lt;br /&gt;What are some of my modest programming goals for 2009?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Release a stripped down (but functional) version of the Super Select Tool for OpenJUMP.&lt;/li&gt;&lt;li&gt;Get my GPX2 module accepted as an "official" unsupported Geotools module.&lt;/li&gt;&lt;li&gt;Make some small improvements to my GPX library.&lt;/li&gt;&lt;li&gt;Tinker with my refactoring of the OpenJUMP core. (Not promising any functional code from this.)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;That's it. If I can work on those 4 things in all of 2009, I'll be off to a good start on my quest for more programming modesty.&lt;br /&gt;&lt;br /&gt;Thank you OpenJUMP, for helping me see a little more clearly how I can improve as a person and a programmer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Sunburned Surveyor&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3786963008632441125?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3786963008632441125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3786963008632441125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3786963008632441125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3786963008632441125'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2009/01/my-programming-goal-for-2009-modesty.html' title='My Programming Goal For 2009: Modesty'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4500682689786634641</id><published>2008-12-30T16:20:00.000-08:00</published><updated>2008-12-30T16:24:59.076-08:00</updated><title type='text'>Man Guilty Of Killing Moose Just Inside National Park Boundary</title><content type='html'>Newsminer.com in Alaska has a story about a hunter that was convicted of shooting a moose just inside the boundary of Denali National Park. The location of the park boundary and how well it was marked on the ground were important elements of the case.&lt;br /&gt;&lt;br /&gt;I know from personal experience that United States National Forest Boundaries, Wilderness Boundaries, and National Park boundaries are not always well marked. I'm not making any determination of the hunter's guilt, I'm just pointing out my own personal experience with one issue in this case.&lt;br /&gt;&lt;br /&gt;Goes to show that location matters.&lt;br /&gt;&lt;br /&gt;Here is a link to the article:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://newsminer.com/news/2008/dec/05/jeff-king-pay-fine-restitution-denali-park-illegal/"&gt;http://newsminer.com/news/2008/dec/05/jeff-king-pay-fine-restitution-denali-park-illegal/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4500682689786634641?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4500682689786634641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4500682689786634641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4500682689786634641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4500682689786634641'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/man-guilty-of-killing-moose-just-inside.html' title='Man Guilty Of Killing Moose Just Inside National Park Boundary'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1370233818708173095</id><published>2008-12-30T12:56:00.000-08:00</published><updated>2008-12-30T13:12:34.616-08:00</updated><title type='text'>"Java Platform Performance" and OpenJUMP (Scalability)</title><content type='html'>&lt;p&gt;I recently purchased the book &lt;a href="http://java.sun.com/docs/books/performance/"&gt;“Java Platform Performance: Strategies and Tactics”&lt;/a&gt; and I have been reading it here and there. In Chapter 1 the author identifies four areas of a program’s performance:&lt;br /&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Computational Performance&lt;/li&gt;&lt;li&gt;RAM Footprint&lt;/li&gt;&lt;li&gt;Start-Up Time&lt;/li&gt;&lt;li&gt;Scalability&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We all know OpenJUMP has some issues with RAM Footprint, especially on older computers. The architecture of Eclipse was especially designed to have good performance when it comes to Start-Up Time. However, one aspect of performance that I never really thought of was scalability. Here is a snippet from Chapter 1 where the author provides a nice description of scalability:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;“Scalability, the study of how systems perform under heavy loads, is an often-neglected aspect of performance. A server might perform well with 50 concurrent users, but how does it perform with 1,000? Does the performance of the server drop off gradually, or does it degrade quickly when a certain threshold is reached?”&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;You might not think that scalability would be a big issue for OpenJUMP. After all, OpenJUMP is a desktop application designed for a single user, not a client-server application designed for hundred or thousands of users. Still, scalability might creep into the performance equation for OpenJUMP in unexpected areas. One example might be the number of layers in a Task. Your plug-in might work great if the current task only has two (2) layers, or five (5). But how does it perform when there are 50 layers, or 500? If I remember correctly we’ve had bugs in OpenJUMP that only show up when there are a large number of layers present. I’m sure there are other examples of scalability issues in OpenJUMP.&lt;br /&gt;&lt;br /&gt;I look forward to learning a lot more from the &lt;em&gt;Java Platform Performance&lt;/em&gt; book and to applying this new knowledge to OpenJUMP.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1370233818708173095?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1370233818708173095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1370233818708173095' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1370233818708173095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1370233818708173095'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/java-platform-performance-and-openjump.html' title='&quot;Java Platform Performance&quot; and OpenJUMP (Scalability)'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1715234669944609613</id><published>2008-12-30T12:52:00.000-08:00</published><updated>2008-12-30T12:55:16.582-08:00</updated><title type='text'>Linux World Article On Open Source GIS</title><content type='html'>I have the &lt;a href="http://www.linux.com/"&gt;linux.com&lt;/a&gt; website set as my home page. They have a cover article on open source GIS on the web site today. I thought I would share it:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linux.com/feature/155792"&gt;http://www.linux.com/feature/155792&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1715234669944609613?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1715234669944609613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1715234669944609613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1715234669944609613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1715234669944609613'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/linux-world-article-on-open-source-gis.html' title='Linux World Article On Open Source GIS'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-175758765752953217</id><published>2008-12-24T09:32:00.000-08:00</published><updated>2008-12-24T09:35:16.704-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='Icons'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphic Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>GIS Icons to Complement Tango Icon Set</title><content type='html'>A couple of days ago I posted a link to the Tango Desktop Project, which aims to design an icon set for open source desktop applications:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://tango.freedesktop.org/Tango_Desktop_Project"&gt;http://tango.freedesktop.org/Tango_Desktop_Project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A post to one of the OSGeo mailing lists revealed a related project for GIS icons in desktop applications related to the Tango Desktop Project. You can find the web page for this icon set here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://robert.szczepanek.pl/icons.php"&gt;http://robert.szczepanek.pl/icons.php&lt;/a&gt;&lt;a href="http://tango.freedesktop.org/Tango_Desktop_Project"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-175758765752953217?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/175758765752953217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=175758765752953217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/175758765752953217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/175758765752953217'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/gis-icons-to-complement-tango-icon-set.html' title='GIS Icons to Complement Tango Icon Set'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-446457830874065640</id><published>2008-12-22T13:01:00.000-08:00</published><updated>2008-12-22T13:04:07.588-08:00</updated><title type='text'>Pirol Plug-Ins For OpenJUMP</title><content type='html'>Larry pointed me towards some of the Pirol plug-ins for OpenJUMP today. I don't think the Pirol project is heavily involved in OpenJUMP programming any more, but you can still get their plug-ins online. All of the plug-ins appear to be released under the GPL, and the source code is included with the JAR file downloads. You can get these plug-ins for OpenJUMP here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.al.fh-osnabrueck.de/jump-download.html"&gt;http://www.al.fh-osnabrueck.de/jump-download.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Most of the page is in German?/French? but there are short English descriptions of each plug-in.&lt;br /&gt;&lt;br /&gt;Some of these plug-ins look quite useful, and I may start to host the source code and executable form of these plug-ins at the SurveyOS Project.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-446457830874065640?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/446457830874065640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=446457830874065640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/446457830874065640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/446457830874065640'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/pirol-plug-ins-for-openjump.html' title='Pirol Plug-Ins For OpenJUMP'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-2744994265581331779</id><published>2008-12-22T07:13:00.000-08:00</published><updated>2008-12-22T07:16:07.578-08:00</updated><title type='text'>Tango Desktop Project - Icons For Open Source Apps</title><content type='html'>I just stumbled upon this project after a post to the OSGeo mailing list:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tango.freedesktop.org/Tango_Desktop_Project"&gt;http://tango.freedesktop.org/Tango_Desktop_Project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The project aims to develop a set of icons that will allow open source applications to have a consistent look &amp;amp; feel. The project includes a base icon library, and some icon design style guidelines.&lt;br /&gt;&lt;br /&gt;I'd like to consider using the icons in OpenJUMP, and will be looking for ways to use them in other software that I develop.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-2744994265581331779?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/2744994265581331779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=2744994265581331779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2744994265581331779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2744994265581331779'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/tango-desktop-project-icons-for-open.html' title='Tango Desktop Project - Icons For Open Source Apps'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4880829675545476741</id><published>2008-12-20T10:31:00.000-08:00</published><updated>2008-12-20T10:33:13.243-08:00</updated><title type='text'>"Doing It Public Domain"</title><content type='html'>I've put up another blog that will likely have the same fate as most of my other blogs: A slow death. :]&lt;br /&gt;&lt;br /&gt;At any rate, here is the link if you are interested:&lt;br /&gt;&lt;a href="http://doingitpd.blogspot.com/"&gt;http://doingitpd.blogspot.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This blog will follow my efforts to help the public domain advocates among the Open Street Map community to put up (and collaborate on) a public domain date repository.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4880829675545476741?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4880829675545476741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4880829675545476741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4880829675545476741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4880829675545476741'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/doing-it-public-domain.html' title='&quot;Doing It Public Domain&quot;'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-2956710623348433526</id><published>2008-12-18T15:57:00.000-08:00</published><updated>2008-12-18T15:59:17.492-08:00</updated><title type='text'>Google's Guide To Writing Testable Code</title><content type='html'>From Jon Aquino's blog comes this post about Google's guide to writing testable code. I skimmed over the first section "Flaw #1: Constructor Does Real Work" and it sounded logical to me.&lt;br /&gt;&lt;br /&gt;I thought I would share it with others, in case you aren't reading Jon's blog (and you should be):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://misko.hevery.com/code-reviewers-guide/"&gt;http://misko.hevery.com/code-reviewers-guide/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-2956710623348433526?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/2956710623348433526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=2956710623348433526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2956710623348433526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2956710623348433526'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/googles-guide-to-writing-testable-code.html' title='Google&apos;s Guide To Writing Testable Code'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1048424178557527671</id><published>2008-12-18T15:56:00.000-08:00</published><updated>2008-12-18T15:57:02.888-08:00</updated><title type='text'>ESRI Comments On Open Source</title><content type='html'>From Paul Ramsey's Blog comes this interesting post with some comment's from ESRI's head guy about open source software:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.cleverelephant.ca/2008/12/jack-in-box.html"&gt;http://blog.cleverelephant.ca/2008/12/jack-in-box.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think Paul's analysis of the comments is right on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1048424178557527671?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1048424178557527671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1048424178557527671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1048424178557527671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1048424178557527671'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/esri-comments-on-open-source.html' title='ESRI Comments On Open Source'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1690490737798724672</id><published>2008-12-18T12:07:00.000-08:00</published><updated>2008-12-18T12:09:20.572-08:00</updated><title type='text'>Distributing GIS Data: Best Practices</title><content type='html'>My friends in the great white north (Canada) are really way ahead of the game when it comes to GIS. They did fund the development of JUMP, after all, and they are at it again. They've released a guide to the dissemenation (or distrubution) of GIS data. This is another document I hope to read when I get some time.&lt;br /&gt;&lt;br /&gt;I wish the federal government in the United States would release such a comprehensive policy document.&lt;br /&gt;&lt;br /&gt;Here is the link to the PDF:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.geoconnections.org/publications/Best_practices_guide/Guide_to_Best_Practices_Summer_2008_Final_EN.pdf"&gt;http://www.geoconnections.org/publications/Best_practices_guide/Guide_to_Best_Practices_Summer_2008_Final_EN.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1690490737798724672?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1690490737798724672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1690490737798724672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1690490737798724672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1690490737798724672'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/distributing-gis-data-best-practices.html' title='Distributing GIS Data: Best Practices'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-5857842650299160229</id><published>2008-12-18T12:04:00.000-08:00</published><updated>2008-12-18T12:06:18.076-08:00</updated><title type='text'>WGS84 Technical Report</title><content type='html'>Here is a link to a technical report from the National Imagery and Mapping Agency that talks all about WGS84. (World Geodetic System of 1984):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://earth-info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf"&gt;http://earth-info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope to read trough this report on one of my upcoming vacations, since WGS84 is such an important part of what I do as a surveyor and GISer.&lt;br /&gt;&lt;br /&gt;The report looks like it can be understood by most people, without a need for an advanced degree in mathematics or rocket science. :]&lt;br /&gt;&lt;br /&gt;I hope others will find it useful.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-5857842650299160229?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/5857842650299160229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=5857842650299160229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5857842650299160229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5857842650299160229'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/wgs84-technical-report.html' title='WGS84 Technical Report'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6538142966624341991</id><published>2008-12-18T11:54:00.001-08:00</published><updated>2008-12-18T11:54:15.928-08:00</updated><title type='text'>Rethinking The Refactoring (Incremental – Not Monumental)</title><content type='html'>I’ve been thinking a lot about my earlier idea for a major refactoring of OpenJUMP. I’d really like to accomplish all of the goals mentioned in my blog post on the idea, but I’m questioning my original approach.&lt;br /&gt;&lt;br /&gt;I thought I would start with a blank slate, and then move code over from the OpenJUMP core as I refactored and cleaned it. There are two (2) problems with this approach:&lt;br /&gt;&lt;br /&gt;-         I wouldn’t have a running program while the refactoring was in progress.&lt;br /&gt;-         I’d have to lock myself in a closet for at least three (3) years to get this done.&lt;br /&gt;&lt;br /&gt;I believe an incremental approach to this refactoring would be more productive. I can slowly perform my refactoring of the core, making sure that I have a running build each step of the way.&lt;br /&gt;&lt;br /&gt;This would allow me to accomplish a couple of things:&lt;br /&gt;&lt;br /&gt;-         I get to stay out of that closet.&lt;br /&gt;-         I get immediate feedback on my refactoring efforts.&lt;br /&gt;-         I can’t mess things up so bad that the core never builds. (That is a definite possibility given my track record.) :]&lt;br /&gt;-         Other users and programmers can give the new core a spin if they wish.&lt;br /&gt;&lt;br /&gt;I may think about this some more, but I feel like the incremental refactoring may be better than the monumental refactoring.&lt;br /&gt;&lt;br /&gt;Stay tuned for more info.&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6538142966624341991?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6538142966624341991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6538142966624341991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6538142966624341991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6538142966624341991'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/rethinking-refactoring-incremental-not.html' title='Rethinking The Refactoring (Incremental – Not Monumental)'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-8522673522170813011</id><published>2008-12-18T11:35:00.001-08:00</published><updated>2008-12-18T11:45:45.379-08:00</updated><title type='text'>What I Learned From The Super Select Tool</title><content type='html'>One of the things I enjoy the most about being involved in an open source community is learning from the other programmers working on the software. Today was a great example of that, when Paolo suggested an alternative fix to a bug in the MultiClickTool class of OpenJUMP. His fix was much simpler and mind, and avoided throwing an exception to the user. His solution was also obvious, and one I completely missed. This is a very humbling experience, and one that helps you to appreciate why quality in open source software CAN be greater than that of commercial software.&lt;br /&gt;&lt;br /&gt;I also find that I am getting better at learning from my own programming mistakes. Let’s consider for a moment, what I learned from my Super Select Tool plug-in for OpenJUMP, which really turned out to be quite a disaster.&lt;br /&gt;&lt;br /&gt;The most valuable lesson I took away from my experiences with the Super Select Tool is that simpler is better. I realize now that I just tried to do too much with the tool. I wanted to enable the user create “sticky selections” and also send selected features to a designated layer with a single click. This was really two (2) tools in one. The worst part of this was that one of these tools already existed! It is quite easy to paste selected items into another layer in OpenJUMP, and no separate tool was needed to do that.&lt;br /&gt;&lt;br /&gt;My second mistake was to over configure. I realize now that it is often better to create a tool with default behavior then it is to create a tool with behavior that can be configured by the user. This makes the tool design much simpler. Everyone, including the user and the programmer, knows what to expect.&lt;br /&gt;&lt;br /&gt;For example: &lt;span style="color:#33cc00;"&gt;My original incarnation of the Super Select Tool allowed the user to choose if the selected features in the source layer(s) would be removed when sent to the destination layer. Why would I add this ability? The behavior is a little invasive/destructive after all. The user could have easily deleted the selected features by cutting them after selection and before pasting, instead of copying.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is another example: &lt;span style="color:#33cc00;"&gt;I allowed the user to decide if they wanted to copy attributes in addition to feature geometries. Why do that? If I copied the attributes by default the user could still delete them from the layer later.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;All of this over-configuration led to more complicated code (can’t you smell all those switch statements) and the need for a configuration dialog.&lt;br /&gt;&lt;br /&gt;I know there is a balance between default behavior/configuration. One end of the spectrum is incredibly rigid software, while on the other end is incredibly complex software that is hard to use and maintain. I’m still trying to figure out when it is good to allow configuration, and when you should instead stick to a good default behavior. For the time being, I think I’ll lean towards the default behavior end of the spectrum.&lt;br /&gt;&lt;br /&gt;Had I chosen a simpler design for the Super Select Tool, it would have been finished months ago. It would have been easier to install, use, and maintain.&lt;br /&gt;&lt;br /&gt;But the effort wasn’t a complete loss. I learned a lot about OpenJUMP’s selection mechanism, about cursor tools, tool boxes, and I wrote some nifty I18N code.&lt;br /&gt;&lt;br /&gt;I’ll be reworking the Super Select Tool. This version of the plug-in will be much simpler. It will just enable “sticky selections” and will only have three buttons. No configuration dialogs, no configuration files, and only a single jar to drop in the /lib/ext folder.&lt;br /&gt;&lt;br /&gt;Lesson learned.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-8522673522170813011?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/8522673522170813011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=8522673522170813011' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8522673522170813011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8522673522170813011'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/what-i-learned-from-super-select-tool.html' title='What I Learned From The Super Select Tool'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-5020520616566417735</id><published>2008-12-10T13:10:00.000-08:00</published><updated>2008-12-10T13:16:24.335-08:00</updated><title type='text'>A Major Refactoring Of OpenJUMP Begins</title><content type='html'>I’ve begun what I hope will become a major refactoring of the OpenJUMP core. This is different from minor changes to classes and interfaces in the core, and is more akin to rebuilding the core from the ground up. I’ll be reusing as much code as I can, but will be making some fairly major changes to the architecture. (I will attempt to keep changes to the API of the program to a minimum.)&lt;br /&gt;&lt;br /&gt;Why attempt such a major refactoring of OpenJUMP’s core? Why attempt such a major refactoring now?&lt;br /&gt;&lt;br /&gt;Let met tackle that first question with a list of my goals for the refactoring:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;Integration of the InfoNode Docking Window Framework.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I had originally planned on just bolting this on to the existing TaskFrame class. (I even released a version of BizzJUMP with this functionality.) I later realized, after some suggestions from other programmers, that it would be good to integrate the docking window framework into the root of the OpenJUMP GUI, the WorkbenchFrame class. It would also make sense to integrate existing OpenJUMP functionality presented to the user with JInternalFrames into the docking window framework. This would be things like the view of attribute tables. You can learn more about the InfoNode docking windows framework here: &lt;a href="http://www.infonode.net/index.html?idw"&gt;http://www.infonode.net/index.html?idw&lt;/a&gt;&lt;a class="" href="http://www.infonode.net/index.html?idw" methods=""&gt; &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;Extraction of OpenJUMP RCP code. &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;It makes sense to extract the basic application framework from OpenJUMP so it can be reused in other programs, especially if we’ll be integrating a docking window framework. I’ll be doing this by separating the “generic application functionality” from the WorkbenchFrame and other related classes. For example, I’ve started moving some of this functionality to an ApplicationFrame class which the WorkbenchFrame will now extend. In the future, this will allow other programmers to build on the application framework currently embedded in OpenJUMP for programs that don’t look anything like OpenJUMP.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;Extraction of a OpenJUMP “model” library.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When JUMP was first written, it included two JAR files. One JAR file contained only the classes and interfaces needed for the “model” of OpenJUMP. This separation allowed the model to be used outside of OpenJUMP. I want to take another crack at cementing this separation and packaging and promoting the use of the OpenJUMP model outside of the program. The model will contain classes like Feature, FeatureCollection, and FeatureSchema and FeatureEvent.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#33cc00;"&gt;&lt;strong&gt;Improve the separation between “model” and “view”.&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The orginal programmers did a pretty good job of enforcing this separation. However, I found that this separation becomes more fuzzy when you start dealing with things at the level of the WorkbenchFrame class. For example, the WorkbenchFrame class has a createTask method. This method doesn’t really belong on the WorkbenchFrame, because a Task object is not part of the GUI, it is part of the model. I hope to fix this problem and similar problems by creating a separate JumpApplicationModel class that is referenced by the WorkbenchFrame. Non-GUI methods that manipulate the OpenJUMP model will be moved here. (What is the model for OpenJUMP? It is a collection of Task objects, where each Task is a wrapper for a collection of Layers. Right now the WorkbenchFrame manages this collection of tasks, there is no container for tasks cleanly separated from the GUI code.)&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#33cc00;"&gt;&lt;strong&gt;Separation of generic utility code and JUMP-specific utility code.&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OpenJUMP contains lots of great utility code. Some of this code is very generic, and could be used for all sorts of Java programming. Examples of this are the CollectionMap class, the Block class, and the FileUtil class. Other utility code in OpenJUMP is made to work with OpenJUMP objects. Examples of these classes are the FeatureUtil class and the FeatureCollectionUtil class. I’d like to move the generic utility to the JODD library, so it can be packaged and distributed for use in other Java programs. We’d then make JODD an OpenJUMP dependency, and gain access to a host of other utility code. The OpenJUMP specific utility code I would also like to see moved into a separate library. This would keep the “model” JAR size to an absolute minimum, and increase the modularity. Some clean-up and consolidation of the utility code is likely going to be needed, as this code is currently scattered about the different contributions to OpenJUMP.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;Remove unnecessary code.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There is some junk floating around in the OpenJUMP core. Examples are classes that help client code work with JTS geometry objects. A lot of this code has now been moved to the JTS library, on which OpenJUMP already depends. There is no need to keep this code in two (2) places. I also suspect there is code contributed at one time by organizations that are no longer involved with OpenJUMP programming. This code may not be maintained, or may duplicate functionality present in other classes. Other code may no longer be necessary due to the introduction of new language features in Java 1.5 and Java 1.6.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;Integration of Java 1.5 language features. &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;This is one of my most important goals for the refactoring of OpenJUMP. Let’s get rid of all those collections that aren’t type safe because they were written before Java Generics! And all those static final member variables, we don’t need them because we have Enums! (The AttributeType class is an example of a class that could benefit from Java Enums.) Other features of the 1.5 language I hope to integrate into OpenJUMP are listed here:&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html"&gt;http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html&lt;/a&gt;&lt;a class="" href="http://www.infonode.net/index.html?idw" methods=""&gt; &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;Support for low-RAM architecture.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There are certain aspects of OpenJUMP’s current architecture that make low-ram operation difficult. For example, the FeatureCollection object has a getFeatures method that requires a List of all Feaure objects. That really needs to be replaced with a method that returns an Iterator instead. That would free a FeatureCollection implementation from the requirement to keep all its Feature objects, or a façade to its Feature objects, in RAM.&lt;br /&gt;&lt;br /&gt;Here are some new things that I would like to add to OpenJUMP during the major refactoring:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;A default FeatureCollection implementation that is spatially indexed and writeable. I believe this would lead to some significant performance gains, especially for rendering. (The performance of any operation that depends on the query method of the FeatureColleciton interface could be improved.) &lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;Support for validation of feature attribute values with a new AttributeType and FeatureAttributeFilter classes. &lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;The ability to install and update plug-ins from an online plug-in catalog, similar to the way plug-ins are updated in Eclipse. &lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;Integration of the JavaHelp system in a way that allows plug-ins to contribute help topics.&lt;br /&gt;Native Application Launcher for Windows using Launch4J or a similar tool. &lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;strong&gt;Why attempt such a major refactoring now?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There are a couple of reasons that make this a good time. We are discussing the possibility of applying for OSGeo project incubation. That means we will need to have a firm handle on the patent/copyright issues of our code base. What a great opportunity for some house cleaning! Also, my work on the docking window framework has really come to a stand still until I can make some of the changes mentioned above. In addition, the OpenJUMP code base is getting sort of old. There have been a lot of changes to the Java programming language since JUMP was first written, and I think things are starting to get a little cluttered.&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-5020520616566417735?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/5020520616566417735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=5020520616566417735' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5020520616566417735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5020520616566417735'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/12/major-refactoring-of-openjump-begins.html' title='A Major Refactoring Of OpenJUMP Begins'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-177961183923733450</id><published>2008-11-10T12:27:00.000-08:00</published><updated>2008-11-10T12:28:25.549-08:00</updated><title type='text'>Windows 7 Knows Where You Are...</title><content type='html'>This blog post got me to wondering if Sun will come out with a new API so Java desktop applications will be able to tap into this low-level API:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.cnet.com/8301-13860_3-10084345-56.html"&gt;http://news.cnet.com/8301-13860_3-10084345-56.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-177961183923733450?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/177961183923733450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=177961183923733450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/177961183923733450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/177961183923733450'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/11/windows-7-knows-where-you-are.html' title='Windows 7 Knows Where You Are...'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3481222658465555326</id><published>2008-10-20T16:31:00.000-07:00</published><updated>2008-10-20T16:37:37.038-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenJUMP'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Iterator'/><category scheme='http://www.blogger.com/atom/ns#' term='FeatureCache'/><category scheme='http://www.blogger.com/atom/ns#' term='RAM'/><title type='text'>A FeatureCache (Almost) For OpenJUMP</title><content type='html'>For most of last week and this past weekend I have been sick with the flu. Since I was stuck at home without a great deal to do I spent some time on a programming challenge related to OpenJUMP that I have wanted to tackle for a long time. (I made some attempts at tackling this challenge before, but they weren’t successful.)&lt;br /&gt;&lt;br /&gt;The challenge has to do with the way OpenJUMP manages Feature objects. All of the features in a data source (like an ESRI Shapefile) are currently read from the data source and put into a computer’s Random Access Memory (RAM). This has some advantages over the alternative ways you can access a data source, including faster operations on the features and the ability to overcome some limitations when writing modifications to the features in a data source back to the data source.&lt;br /&gt;&lt;br /&gt;However, this approach also has some limitations. Every computer has a limit to how much information it can put into RAM, and most computer operating systems will only give a program like OpenJUMP a certain percentage of the available RAM. It is quite possible (especially on older computers) to run out of RAM when working with really large data sources in OpenJUMP.&lt;br /&gt;&lt;br /&gt;One possible solution to this problem is to move your large data sources into a database like PostgreSQL or MySQL, and then to use OpenJUMP to connect and view this data. This approach comes with its own technical challenges, the least of which is not the requirement to install and operate an relational database.&lt;br /&gt;&lt;br /&gt;Another solution that has always interested me is the idea of a Feature Cache. In this solution Features read from a data source into OpenJUMP are not kept entirely in RAM, but are left on the hard disk. This would allow OpenJUMP to (at least in theory) work with some very, very large datasets, even on old computers. This isn’t a perfect solution. Operations on features in a Feature Cache will be slower (I’m not sure how much slower) than it would be on features stored in a computer’s RAM. This solution also imposes some limitations on the type of data that can be stored in a Feature Cache. A Feature Cache is much easier to make read-write (instead of read-only) if you put a practical limit on the size of textual (String) attribute values and feature geometries.&lt;br /&gt;&lt;br /&gt;There is also a part of the OpenJUMP API that makes implementation of a FeatureCache somewhat tricky. The FeatureCollection interface, which a FeatureCache must implement to be very useful, defines a method named getFeatures which must return a list of objects that implement the Feature interface. This causes a problem because you need to return a collection of Feature objects from this method that are presumably all in RAM. This requirement sort of negates the whole point of a Feature Cache to begin with.&lt;br /&gt;&lt;br /&gt;The Feature Cache solution that I worked on this past week gets around this tricky problem by using a class called a FeatureFacade. A FeatureFacade object is a proxy that forwards all of its method calls to the FeatureCache object that is its parent. This means that a FeatureFacade object doesn’t need to keep all of its geometry and attribute values in RAM. The FeatureCache can read this data from disk and return it to the FeatureCache.&lt;br /&gt;&lt;br /&gt;My FeatureCache implements methods that are very similar to those defined in the Feature interface to pull this off. It also implements the FeatureCollection interface, which means it can be wrapped with a Layer object and displayed in OpenJUMP.&lt;br /&gt;&lt;br /&gt;Internally the FeatureCache uses two binary data files to store its data. One is for the attribute values, and the other is for geometry values. My FeatureCache also uses indexes for each of the files and RandomAccessFile objects to make the read and write operations as fast as possible. It also keeps track of empty “slots” in both files to keep them from growing any larger than necessary.&lt;br /&gt;&lt;br /&gt;The only major shortcoming of the FeatureCache at this point is that it lacks a spatial index. This is a challenge I may tackle in the future. I also didn't include a buffer in the FeatureCache. Some sort of buffer, like a first-in first-out que, could potentially speed up FeatureCache operations. I left the buffer out of this implementation, because of the complexity it adds.&lt;br /&gt;&lt;br /&gt;At any rate, the guts of the FeatureCache I describe here is in the SurveyOS SVN:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://surveyos.svn.sourceforge.net/viewvc/surveyos/java/openjump_feature_cache/trunk/src/"&gt;http://surveyos.svn.sourceforge.net/viewvc/surveyos/java/openjump_feature_cache/trunk/src/&lt;/a&gt;&lt;br /&gt;&lt;p&gt;The code is ugly, and I’m sure it is full of bugs because I haven’t tested anything yet. But I thought I would put it online in case others were interested. I’ve got a fair amount of work left to complete the FeatureCache implementation and plug it into OpenJUMP. Still, I’m excited about the concepts and seeing how it will work. If it is successful it could make a real difference for users of OpenJUMP on computers with modest RAM. (At least for those that work with big datasets.) I'd like to do some more work on the FeatureCache when I get finished with my next release of the Super Select Tool.&lt;br /&gt;&lt;br /&gt;Some interesting challenges I ran into (so far) while working on the FeatureCache:&lt;br /&gt;&lt;br /&gt;- Creating an object that implements the Iterator interface that will step trough the Feature attributes and geometries stored in a FeatureCache. This Iterator had to look no different than one obtained from a FeatureCollection that stores all of its features in RAM.&lt;br /&gt;&lt;br /&gt;- Storing a FeatureSchema object in a binary file, and restoring a FeatureSchema object form this binary file.&lt;/p&gt;&lt;p&gt;The Sunburned Surveyor&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3481222658465555326?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3481222658465555326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3481222658465555326' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3481222658465555326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3481222658465555326'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/10/featurecache-almost-for-openjump.html' title='A FeatureCache (Almost) For OpenJUMP'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-2952409202436601570</id><published>2008-10-20T10:29:00.000-07:00</published><updated>2008-10-20T13:02:21.781-07:00</updated><title type='text'>Preview of org.geotools.gpx2 code.</title><content type='html'>&lt;p&gt;I've made some more improvements to the GPX support code I'm working on as part of an experimental module for GeoTools. Here's how the code works:&lt;/p&gt;&lt;p&gt;A SimpleGpxReader parses a GPX file and provides BasicWaypoint objects. (BasicWaypoint objects implement the SimpleWaypoint interface.) The SimpleWaypointToFeatureConverter class is then used to create a BasicFeature object based on the BasicWaypointobject. These BasicWaypoint Feature can be stored in a FeatureCollection and wrapped in a Layer object for display in OpenJUMP.&lt;/p&gt;&lt;p&gt;Most of the code described above is completed. I need to do a little unit testing and then I can make a release. I hope to get the code in the GeoTools SVN soon as well.&lt;/p&gt;&lt;p&gt;Future plans for this module includes support for GPX tracks and routes, not just waypoints. I'd also like to support GPX file metadata and queries, and the ability to work with some of the temporal attributes of GPX entities.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-2952409202436601570?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/2952409202436601570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=2952409202436601570' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2952409202436601570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2952409202436601570'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/10/preview-of-orggeotoolsgpx2-code.html' title='Preview of org.geotools.gpx2 code.'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-2857461072066622501</id><published>2008-09-30T12:23:00.000-07:00</published><updated>2008-09-30T12:53:23.049-07:00</updated><title type='text'>Java Library For Parsing GeoRSS</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I just ran across this library for parsing GeoRSS data:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://georss.geonames.org/"&gt;&lt;span style="font-family:verdana;"&gt;http://georss.geonames.org/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;I wonder if the library could be used to create GeoRSS support for Openjump.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The Sunburned Surveyor&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-2857461072066622501?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/2857461072066622501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=2857461072066622501' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2857461072066622501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2857461072066622501'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/09/java-library-for-parsing-georss.html' title='Java Library For Parsing GeoRSS'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-7579045039488757122</id><published>2008-08-12T14:11:00.000-07:00</published><updated>2008-08-12T14:16:49.921-07:00</updated><title type='text'>The chiken or the egg? - GPS or the Map?</title><content type='html'>GPS World had an interesting article about the use of existing maps to correct GPS signals used to locate pedestrians.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lbs.gpsworld.com/gpslbs/article/articleDetail.jsp?id=534041&amp;sk=&amp;date=&amp;%0A%09%09%09&amp;pageID=4"&gt;GPS World Article "City Walk"&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The basic idea is to use the existing information about road networks and 2D building footprints to correct for crappy GPS signal reception and multipath problems. I thought this was a really cool concept.&lt;br /&gt;&lt;br /&gt;It was odd to think of correcting GPS with an existing map when surveyor's commonly create the map with GPS. It presents a sort of "Which came first - the chicken or the egg?" problem.&lt;br /&gt;&lt;br /&gt;I am intrigued by the idea of using high quaility survey data to correct GPS signals. For example: You could perform a survey of building footprints in a city's downtown using conventional optical survey instruments that could then be used for highly accurate positioning of pedestrians and vehicles via recreation grade GPS receivers.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-7579045039488757122?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/7579045039488757122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=7579045039488757122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7579045039488757122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7579045039488757122'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/08/chiken-or-egg-gps-or-map.html' title='The chiken or the egg? - GPS or the Map?'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6869781861861067280</id><published>2008-08-08T10:38:00.000-07:00</published><updated>2008-08-08T10:40:09.389-07:00</updated><title type='text'>Link to PDF of Snyder Map Projections Manual</title><content type='html'>Paul Austin posted a link to a PDF version of the map projections book by John Snyder. (The book is now out-of-print.) I wanted to post the link here for my readers:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395"&gt;Map Projections Manual: John Snyder&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6869781861861067280?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6869781861861067280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6869781861861067280' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6869781861861067280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6869781861861067280'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/08/link-to-pdf-of-snyder-map-projections.html' title='Link to PDF of Snyder Map Projections Manual'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-956514667739136367</id><published>2008-07-04T10:20:00.000-07:00</published><updated>2008-07-04T10:24:30.183-07:00</updated><title type='text'>June OpenJUMP User Survey Results</title><content type='html'>You can download the results of the June OpenJUMP user survey at the following link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.redefinedhorizons.com/shared_files/openjump_juneuser_survey_results.txt"&gt;Survey Results as Plain Text File&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We only had a total of 16 responses, which I believe is a small portion of our total users. Still, the 16 responses provided acouple of surprises for me.&lt;br /&gt;&lt;br /&gt;For example, it seems the wiki is the most used of our websites. This impressed upon me the need to move forward with our wiki reorganization and migration.&lt;br /&gt;&lt;br /&gt;Another surprise was that most of the users are running the last official release of OpenJUMP they can download from SourceForge, and not the nightly build. This means a lot of our users are missing out on our latest improvements. This helped me realize that we as the OpenJUMP programmer community need to be more aggressive about making regular official releases.&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-956514667739136367?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/956514667739136367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=956514667739136367' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/956514667739136367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/956514667739136367'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/07/june-openjump-user-survey-results.html' title='June OpenJUMP User Survey Results'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4670564763533626443</id><published>2008-06-25T15:25:00.002-07:00</published><updated>2008-06-25T15:28:16.875-07:00</updated><title type='text'>Testing Survey Monkey For June OpenJUMP User Survey</title><content type='html'>I thought I would test out Survey Monkey as a way of collecting information about the poeple and organizations using OpenJUMP. This would also be a way for people to provide feedback on their usage patterns and experiences using OpenJUMP. You can take the survey here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.surveymonkey.com/s.aspx?sm=dwJadoUmQ7nAPANrxjO2xA_3d_3d"&gt;June OpenJUMP User Survey&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll publish the results at the end of the month.&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4670564763533626443?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4670564763533626443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4670564763533626443' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4670564763533626443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4670564763533626443'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/06/testing-survey-monkey-for-june-openjump.html' title='Testing Survey Monkey For June OpenJUMP User Survey'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-686244547809546804</id><published>2008-06-25T15:25:00.001-07:00</published><updated>2008-06-25T15:25:12.521-07:00</updated><title type='text'></title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-686244547809546804?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/686244547809546804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=686244547809546804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/686244547809546804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/686244547809546804'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/06/blog-post.html' title=''/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1327395302401843815</id><published>2008-06-25T08:11:00.000-07:00</published><updated>2008-06-25T08:15:27.951-07:00</updated><title type='text'>Google Map Maker and Open Street Map</title><content type='html'>I ran across a post on the OpenGeoData blog that talked about Google Map Maker. This is a web application from Google that allows users to create vector data by digitizing satellite photography in certain parts of the world (not in the United States).&lt;br /&gt;&lt;br /&gt;You can read the OpenGeoData blog post here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.opengeodata.org/?p=307"&gt;http://www.opengeodata.org/?p=307&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can view, and try out, the Google Map Maker web application here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/mapmaker"&gt;http://www.google.com/mapmaker&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1327395302401843815?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1327395302401843815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1327395302401843815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1327395302401843815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1327395302401843815'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/06/google-map-maker-and-open-street-map.html' title='Google Map Maker and Open Street Map'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4674156978233143191</id><published>2008-06-24T14:14:00.000-07:00</published><updated>2008-06-24T14:17:19.869-07:00</updated><title type='text'>Where's Tibet</title><content type='html'>I try not to get involved in political issues of great controversy, but this blog post about Google "loosing" Tibet caught my eye. It made me think long and hard, especially because I use so many Google services like G-Mail.&lt;br /&gt;&lt;br /&gt;http://birdhouse.org/blog/2006/04/21/wheres-tibet/&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4674156978233143191?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4674156978233143191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4674156978233143191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4674156978233143191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4674156978233143191'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/06/wheres-tibet.html' title='Where&apos;s Tibet'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-8597498734242724987</id><published>2008-04-28T13:01:00.001-07:00</published><updated>2008-04-28T13:02:22.107-07:00</updated><title type='text'>New Release of Jodd</title><content type='html'>Igor has completed an update to the JODD library. You can download it here:&lt;br /&gt;&lt;br /&gt;http://sourceforge.net/project/downloading.php?group_id=87229&amp;filesize=550900&amp;filename=jodd-b305.zip&amp;25488066&lt;br /&gt;&lt;br /&gt;As a reminder, &lt;a href="http://jodd.sourceforge.net/"&gt;Jodd&lt;/a&gt; is a library of utility code that provides an alternative to the Apache Jakarta Commons.&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-8597498734242724987?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/8597498734242724987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=8597498734242724987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8597498734242724987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8597498734242724987'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/04/new-release-of-jodd.html' title='New Release of Jodd'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-294083285969537151</id><published>2008-04-28T12:49:00.000-07:00</published><updated>2008-04-28T12:53:26.497-07:00</updated><title type='text'>OpenJUMP Javadoc Link Change</title><content type='html'>Stefan has updated the Javadoc for OpenJUMP, and in the process I think the link I posted earlier to the Javadoc changed. Here is a new link for your bookmarks:&lt;br /&gt;&lt;br /&gt;http://jump-pilot.sourceforge.net/javadoc/openjump_javadoc/&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-294083285969537151?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/294083285969537151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=294083285969537151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/294083285969537151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/294083285969537151'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/04/openjump-javadoc-link-change.html' title='OpenJUMP Javadoc Link Change'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-568875099084562764</id><published>2008-04-18T06:17:00.000-07:00</published><updated>2008-04-18T06:33:05.929-07:00</updated><title type='text'>Plug-In Dependency Plan Implemented</title><content type='html'>I have completed some simple modifications to the OpenJUMP core that will implement my plan for plug-in dependency. This means OpenJUMP plug-in programmers can now access other plug-ins from during OpenJUMP execution. Communication between plug-ins will now be much easier. &lt;br /&gt;&lt;br /&gt;This change should allow us to add even more complex functionality to OpenJUMP via plug-ins, eliminating the need for modifications to the core that may have been necessary before. This should result in an OpenJUMP core that is lean and mean, and a good base platform for the different JUMP brands. It may even prevent unnecessary forking of the core into other JUMP brands.&lt;br /&gt;&lt;br /&gt;The best part is that the changes I made do not break the exising plug-in model! All the plug-ins currently working in OpenJUMP will continue to work in OpenJUMP and new plug-ins only work with the plug-in dependency system if they want to. That means programmers can keep designing plug-ins like they used to if they so choose.&lt;br /&gt;&lt;br /&gt;What changes were made to the core? I introduced a new package named &lt;code&gt;org.openjump.core.plugin.dependency&lt;/code&gt;. This package contains two interfaces and a single class. Plug-in programmers will have their plug-ins implement the &lt;code&gt;initializationOfPlugInsComplete&lt;/code&gt; method defined in the &lt;code&gt;PlugInDependencyParticipant&lt;/code&gt; interface if they want to take advantage of the new plug-in dependency system in OpenJUMP. This method is passed an implementation of the &lt;code&gt;PlugInInitializationInfo&lt;/code&gt; interface immediately after OpenJUMP has completed loading and initialization of all plug-ins. This “info” object contains a reference to all the plug-ins that were intialized and are participating in the plug-in dependency system. As a result, every plug-in participating in the system has a chance to obtain a reference to, and to access the public methods of the other plug-ins participating.&lt;br /&gt;&lt;br /&gt;Two small changes were made to the existing &lt;code&gt;PlugInManager&lt;/code&gt; class to enable the plug-in dependency system.  The &lt;code&gt;loadPlugInClasses&lt;/code&gt; method was changed to track the plug-ins participating in the system and to call a new private method added to the class. This private method sends all participating plug-ins the “info” object via their &lt;code&gt;initializationOfPlugInsComplete&lt;/code&gt; method.&lt;br /&gt;&lt;br /&gt;I hope to complete unit testing of the new class and interfaces this weekend. I will then make a build of OpenJUMP containing these core modifications this weekend so testing of the system can begin. My first test will involve the unit system support I have been working on the last week or two.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;The Sunburned Surveyor&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-568875099084562764?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/568875099084562764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=568875099084562764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/568875099084562764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/568875099084562764'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/04/plug-in-dependency-plan-implemented.html' title='Plug-In Dependency Plan Implemented'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-7583626866970854043</id><published>2008-04-17T13:59:00.000-07:00</published><updated>2008-04-17T14:12:13.756-07:00</updated><title type='text'>Making Progress On The YAMLResourceBundle</title><content type='html'>I'm almost finished with the unit testing of my YAMLResourceBundle code. This code will provide an alternate way to access translated Strings for any Java program that wants to use I18N. It will give the programmer more control in how underlying translation files are accessed, and will also provide more information on the translated Strings.&lt;br /&gt;&lt;br /&gt;All that is really left is to test the parser of the YAML translation files, which will be the most difficult part of the testing.&lt;br /&gt;&lt;br /&gt;After that I will package the code and will begin testing in OpenJUMP by using it with the Super Select Tool. This will allow the Super Select Tool to be used in a variety of languages in its next release.&lt;br /&gt;&lt;br /&gt;After that I can begin work on the next official release of OpenJUMP!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;At some future point I would like to build a simple GUI that will make it easier for translators to work with the YAML translation files. I'm still giving some thought as to what final from this GUI might take. I don't think the power of this alternative I18N code will be fully tapped until the GUI is created and released.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-7583626866970854043?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/7583626866970854043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=7583626866970854043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7583626866970854043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7583626866970854043'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/04/making-progress-on-yamlresourcebundle.html' title='Making Progress On The YAMLResourceBundle'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-7395837686185778974</id><published>2008-04-15T21:13:00.000-07:00</published><updated>2008-04-15T21:23:22.822-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding Conventions'/><title type='text'>Applying "The Elements Of Java Style"</title><content type='html'>I just finished my second reading of "The Elements Of Java Style" book. This time trough I made a list of items contained in the book that I know I could apply to improve my  Java programming. Here is my list:&lt;br /&gt;&lt;br /&gt;#8: Don't use hard tabs.&lt;br /&gt;#13: Capitalize only the first letter of acronyms when naming variables, classes, and methods.&lt;br /&gt;#17: Use a new package name for a new version of a package that is not backward compatible with the previous version of the package.&lt;br /&gt;#37: Use one line comments to explain implementation details.&lt;br /&gt;#39: Document non-public members of your classes.&lt;br /&gt;#43: Use code tags for identifiers, keywords, and constants.&lt;br /&gt;#44: Wrap code examples in pre tags to preserve fromatting.&lt;br /&gt;#45: Use more {@link} tags.&lt;br /&gt;#60: When writing comments describe why something is being done, not what is being done.&lt;br /&gt;#63: Use and establish keywords for unresolved issues.&lt;br /&gt;#64: Label closing braces in highly nested control structures.&lt;br /&gt;#67: Declare classes representing a fundamental data type as final.&lt;br /&gt;#68: Build concrete types from primitive Java types or other concrete types.&lt;br /&gt;#80: Always construct objects in a valid state.&lt;br /&gt;#82: Use nested constructors to eliminate redundant code.&lt;br /&gt;#85: Use return codes or special methods to indicate unexpected state changes.&lt;br /&gt;#88: Use a finally block to release resources after a try/catch statement.&lt;br /&gt;#91: Use assertions to catch logic errors in your code.&lt;br /&gt;#92: Use assertions to test pre-conditions and post-conditions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Sunburned Surveyor&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-7395837686185778974?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/7395837686185778974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=7395837686185778974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7395837686185778974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/7395837686185778974'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/04/applying-elements-of-java-style.html' title='Applying &quot;The Elements Of Java Style&quot;'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-8737624605601245528</id><published>2008-04-02T13:01:00.000-07:00</published><updated>2008-04-03T08:53:09.294-07:00</updated><title type='text'>Discovering deegree</title><content type='html'>I’ve been digging around just a little bit in the Javadoc for the &lt;a href="http://www.deegree.org/"&gt;deegree&lt;/a&gt; Library API. What a hidden treasure chest it is proving to be! It makes me wish I would have taken a closer look at it a long time ago.&lt;br /&gt;&lt;br /&gt;What have I found so far?&lt;br /&gt;&lt;br /&gt;At least two (2) really cool things. Let me share them with you:&lt;br /&gt;&lt;br /&gt;[1] deegree has a comprehensive system for spatial reference system transformations. You can, for example, use deegree code to convert coordinates from WGS84 to NAD 83 California State Plane Coordinates. (See the &lt;a href="http://hillary.lat-lon.de/deegree2_buildresults/nightly_untested/api/org/deegree/crs/package-summary.html"&gt;crs&lt;/a&gt; pacakage, &lt;a href="http://hillary.lat-lon.de/deegree2_buildresults/nightly_untested/api/org/deegree/crs/coordinatesystems/package-summary.html"&gt;coordinatesystems&lt;/a&gt; package and the &lt;a href="http://hillary.lat-lon.de/deegree2_buildresults/nightly_untested/api/org/deegree/crs/transformations/package-summary.html"&gt;transformations&lt;/a&gt; package.)&lt;br /&gt;&lt;br /&gt;[2] deegree has the ability to read, manipulate, and write image world files. (See the Javadoc for the &lt;a href="http://hillary.lat-lon.de/deegree2_buildresults/nightly_untested/api/org/deegree/model/coverage/grid/WorldFile.html"&gt;WorldFile&lt;/a&gt; class.)&lt;br /&gt;&lt;br /&gt;I hope to combine these two parts of deegree into a little GUI tool that allows the user to transform image world files.&lt;br /&gt;&lt;br /&gt;I’m sure there is more lurking in deegree that I have yet to discover. My only complaint so far is that they deviated quite a bit from JTS and the JUMP Feature model. This means that &lt;span style="color:#6600cc;"&gt;&lt;strong&gt;OpenJUMP&lt;/strong&gt;&lt;/span&gt; programmers wanting to take advantage of Deegree will have some of the same compatibility issues that they would if they wanted to use GeoTools libraries. But, I don’t think deegree has quite the level of complexity that GeoTools does at this point.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-8737624605601245528?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/8737624605601245528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=8737624605601245528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8737624605601245528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8737624605601245528'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/04/discovering-deegree.html' title='Discovering deegree'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6939467638160983640</id><published>2008-03-14T12:03:00.001-07:00</published><updated>2008-03-14T12:12:57.129-07:00</updated><title type='text'>Urbanites Spatial Sense and Spatial Familiarity</title><content type='html'>The last few weeks I have been shopping for my first home with my wife Monique. This has brought me to some new neighborhoods in my city. That got me thinking about how the typical urbanite (city dweller) perceives their city using there “spatial sense”. (A person’s spatial sense is like one of the other five senses. It is what a person uses to navigate their city, for example.)&lt;br /&gt;&lt;br /&gt;I grew up in the northern forests of the United States, so this perception of a cityscape is something new for me.&lt;br /&gt;&lt;br /&gt;Here are a couple of interesting things I have noticed about urbanites spatial sense:&lt;br /&gt;&lt;br /&gt;[1] We aren’t really spatially familiar with the entire city that we live in. Instead we become spatially familiar with small pockets of the city. For example, the neighborhood in which we live and the area around our place of employment. If you dropped me off in a neighborhood that was across town from my own house I’d be as lost as I would if you put me in a completely strange city.&lt;br /&gt;&lt;br /&gt;[2] Our pockets of spatial familiarity are really linear networks. This is because we move through our cities along linear routes. We really learn and memorize different routes in our city. This is very different from a bird’s eye view of the city in which we live, which would mimic the view displayed on a typical map. Think of the difference in perspective between a person walking trough a giant maze and a person viewing the same maze from a helicopter. Oftentimes a follow a new route through my city and am surprised at the relationship between two (2) familiar land marks. They may actually be close to one another on the surface of the earth, but I had previously viewed them as far apart because of the routes I followed between them didn’t take the shortest path between the two.&lt;br /&gt;&lt;br /&gt;What does all this mean? I’m not sure, but I think it raises interesting questions.&lt;br /&gt;&lt;br /&gt;How does the layout of a city’s transportation network affect the spatial familiarity it urbanites have?&lt;br /&gt;&lt;br /&gt;Do urbanites in cities with active public transportation systems have a greater spatial familiarity with their city, or less spatial familiarity?&lt;br /&gt;&lt;br /&gt;Would we do better with maps that present the view of a person walking through the maze then we would with a map that was built from the perspective of viewing a maze from a helicopter. Is Google street view an example of this type of map?&lt;br /&gt;&lt;br /&gt;Do some people, like delivery truck drivers and bike messengers, build different types of personal maps in their minds than other more typical urbanites? How would they adapt if placed in another city? How do we measure this ability? Can we measure it?&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6939467638160983640?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6939467638160983640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6939467638160983640' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6939467638160983640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6939467638160983640'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/03/urbanites-spatial-sense.html' title='Urbanites Spatial Sense and Spatial Familiarity'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1512110395752951521</id><published>2008-03-12T16:27:00.000-07:00</published><updated>2008-03-12T16:32:59.678-07:00</updated><title type='text'>Latest Utility Code Extracted For JODD: CSV Files</title><content type='html'>&lt;p&gt;&lt;span style="font-family:verdana;"&gt;I decided to make my first container for spatial relationships in &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt; backed by a CSV file. I’ve added the jodd.text.csv package to JODD-Ex. It will contain classes and interfaces that ease the process of reading and writing tabular data to and from CSV files. It will include a buffered writer for CSV files that will give the developer precise control of writing for performance reasons.&lt;br /&gt;&lt;br /&gt;You can view the new CSV code for JODD-Ex, which is a work in progress, at the web view of the SurveyOS Subversion Repository.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://surveyos.svn.sourceforge.net/viewvc/surveyos/java/jodd-ex/src/jodd/text/csv/"&gt;&lt;span style="font-family:verdana;"&gt;http://surveyos.svn.sourceforge.net/viewvc/surveyos/java/jodd-ex/src/jodd/text/csv/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;The Sunburned Surveyor&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1512110395752951521?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1512110395752951521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1512110395752951521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1512110395752951521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1512110395752951521'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/03/latest-utility-code-extracted-for-jodd.html' title='Latest Utility Code Extracted For JODD: CSV Files'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6145635977154864473</id><published>2008-03-12T16:22:00.000-07:00</published><updated>2008-03-12T16:26:58.424-07:00</updated><title type='text'>Update On My OpenJUMP Projects</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I want to give an update on my three (3) main &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt; projects. I hope to be making releases of all three in the next couple of months.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;Super Select Tool&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;I’ve almost finished code that implements a ResourceBundle in &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/YAML"&gt;&lt;span style="font-family:verdana;"&gt;YAML&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; for support of I18N. This class will allow client code to access additional information about translated Strings. This will include translation comments and the name of GUI classes that use the translated String. It also eliminates the “automated” location of ResourceBundles backed by properties files, and gives the developer direct control of locating ResourceBundles. I hope this class and its supporting classes will eventually make I18N much simpler in &lt;span style="color:#6600cc;"&gt;OpenJUMP &lt;/span&gt;and I plan on using it in all of my own &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt; plug-ins. The Super Select Tool will be the first &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt; plug-in to utilize this code for its I18N.&lt;br /&gt;&lt;br /&gt;This next release of the Super Select Tool will also feature a plug-in installer for &lt;span style="color:#6600cc;"&gt;OpenJUMP &lt;/span&gt;written entirely in Java. It presents the user with a Swing GUI to manage installation, updating, and removal of &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt; plug-ins. It will be easily modified by other &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt; plug-in programmers that wish to use it. I hope to have this release complete by the end of March.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;br /&gt;Spatial Relationship Support&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I’ve been working on some code that will support spatial relationships in &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt;. This code will be highlighted in a future &lt;/span&gt;&lt;a href="http://www.osgeo.org/journal"&gt;&lt;span style="font-family:verdana;"&gt;OSGeo Journal&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; article. My initial release will only support one type of spatial relationship, one-to-one point-to-point spatial relationships.&lt;br /&gt;&lt;br /&gt;This code will be packaged as part of the JTS Warped library. Users will be able to manage and query spatial relationships between layers in &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt; through a simple GUI that access the library. Other plug-in developers will be able to do the same thing from their own plug-ins via the non-graphical API.&lt;br /&gt;&lt;br /&gt;I hope to have this release ready by the end of April.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Inkscape SVG Export&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You can currently export SVG from &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt;. I believe that this functionality uses the Apache Batik library to convert the Java2D graphics on the LayerViewPanel to SVG.&lt;br /&gt;&lt;br /&gt;I am working on code that will perform the conversion from a JTS Geometry object to an SVG object directly, without using &lt;/span&gt;&lt;a href="http://xmlgraphics.apache.org/batik/"&gt;&lt;span style="font-family:verdana;"&gt;Batik&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;. This will give &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt; plug-in programmers and users greater control over the SVG export process. For example, the user will be able to specify the exact limits, scale, and rotation of the export “rectangle”.&lt;br /&gt;&lt;br /&gt;I also hope to allow the value of Feature attributes to be exported as text labels for an SVG document.&lt;br /&gt;&lt;br /&gt;All of this code is built to export SVG written specifically for the open source SVG editor &lt;/span&gt;&lt;a href="http://www.inkscape.org/"&gt;&lt;span style="font-family:verdana;"&gt;Inkscape&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;. It will take advantage of Inkscape add-ons to standard SVG.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6145635977154864473?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6145635977154864473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6145635977154864473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6145635977154864473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6145635977154864473'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/03/update-on-my-openjump-projects.html' title='Update On My OpenJUMP Projects'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-63062627277557860</id><published>2008-03-07T12:35:00.000-08:00</published><updated>2008-03-07T12:40:58.088-08:00</updated><title type='text'>Extracting Utility Code - Contributions To JODD</title><content type='html'>I have begun a serious campaign to accomplish two “house cleaning tasks” in all of my Java programming projects:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#009900;"&gt;[1] Identify code in my existing methods that is suitable for extraction into utility methods.&lt;br /&gt;&lt;br /&gt;[2] Move suitable code into utility methods when writing new code.&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;My goal with these two tasks is to contribute my utility code into the &lt;a href="http://jodd.sourceforge.net/"&gt;JODD&lt;/a&gt; library. My utility code will be reviewed (and likely improved) by the JODD maintainer, Igor Spasic.&lt;br /&gt;&lt;br /&gt;I believe this house cleaning effort will result in cleaner interfaces for my own programming libraries and projects, and hopefully in a more comprehensive JODD library. I’ve started a folder on the SurveyOS SVN repository to hold code that I think will be eligible for inclusion in JODD. I’ve also placed this code in an Eclipse project called JODD-Ex (JODD Experiemental). I am now actively adding to and maintaining the code in this Eclipse project and I am referencing it in my other Eclipse projects.&lt;br /&gt;&lt;br /&gt;What type of utility code have I managed to extract from my existing projects?&lt;br /&gt;&lt;br /&gt;So far I have six (6) different packages and 16 classes or interfaces. Below is a brief description of each of the six (6) packages:&lt;br /&gt;&lt;br /&gt;jodd.collections.tools: Contains utility methods for members of the &lt;a href="http://java.sun.com/docs/books/tutorial/collections/index.html"&gt;Java Collections Framework&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;jodd.i18n:&lt;/strong&gt; Contains utility methods for working with java.util.Locale objects and an alternative to the standard &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html"&gt;ResourceBundle&lt;/a&gt; class. This alternative is backed by a &lt;a href="http://www.yaml.org/"&gt;YAML&lt;/a&gt; text file and allows for storage and access to descriptions and metadata for translated Strings. (I hope to use this for my translation work in OpenJUMP soon.)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;jodd.io.binary:&lt;/strong&gt; Classes to ease the import and export of binary data. This includes an index that maps &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html"&gt;UUID&lt;/a&gt; objects to the location of binary data representing the object identified by a UUID in a binary file. This should be handy when working with RandomAccessFiles.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;jodd.objectutils:&lt;/strong&gt; Contains methods and interfaces that I wish were in the &lt;a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html"&gt;java.Object&lt;/a&gt; class.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;jodd.text.parser:&lt;/strong&gt; It seems that I write a lot of parsers, especially text parsers. I seem to be drawn to this type of programming after I wrote my simple XML pull parser from the ground up. This package has some classes to make creating text parsers easier.&lt;br /&gt;&lt;br /&gt;j&lt;strong&gt;odd.text.yaml:&lt;/strong&gt; This package contains some classes that make parsing and working with text data in YAML format easier.&lt;br /&gt;&lt;br /&gt;You can view and download all of the JODD-Ex code from the SurveyOs Subversion Repository:&lt;br /&gt;&lt;br /&gt;http://surveyos.svn.sourceforge.net/viewvc/surveyos/java/jodd-ex/&lt;br /&gt;&lt;br /&gt;I’ll post again soon on my efforts to test, improve, and integrate this utility code into the main JODD Library.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-63062627277557860?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/63062627277557860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=63062627277557860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/63062627277557860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/63062627277557860'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/03/extracting-utility-code-contributions.html' title='Extracting Utility Code - Contributions To JODD'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4263689816585094040</id><published>2008-02-21T12:51:00.000-08:00</published><updated>2008-02-21T12:56:22.013-08:00</updated><title type='text'>Sample Chapter On Domain Specific Languages</title><content type='html'>Manning has the first chapter of its book on building domain specific languages in Boo available online. It might be of interest to programmers that have considered "home grown" scripting languages for advanced users of their own programs.&lt;br /&gt;&lt;br /&gt;I was tinkering with a language for route stationing for a while so this is a topic that interests me. You can find the PDF chapter here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.manning.com/rahien/"&gt;http://www.manning.com/rahien/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor (A.K.A. - Landon Blake)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4263689816585094040?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4263689816585094040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4263689816585094040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4263689816585094040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4263689816585094040'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/02/sample-chapter-on-domain-specific.html' title='Sample Chapter On Domain Specific Languages'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3874629124615325244</id><published>2008-02-15T11:21:00.000-08:00</published><updated>2008-02-15T11:24:58.421-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenJUMP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Super Select Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='I18N'/><title type='text'>Super Select Tool Release Delayed</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I ran into some trouble with &lt;span style="color:#6600cc;"&gt;OpenJUMP’s&lt;/span&gt; I18N class. I’m having trouble locating the properties files located in the Super Select Tool JAR file with the I18N Class. The content on the &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt; I18N wiki page got me to thinking about other options for I18N in &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt;. I’ve take a closer look at Java’s &lt;em&gt;ResourceBundle&lt;/em&gt; class and I like the basic concept of using the class for I18N in &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I’ve decided to implement a class that is very similar to the &lt;em&gt;ResourcBundle&lt;/em&gt; class for use in the Super Select Tool and my other plug-ins for &lt;span style="color:#6600cc;"&gt;OpenJUMP&lt;/span&gt;. This class will differ from the standard &lt;em&gt;ResourceBundle&lt;/em&gt; class in at least three (3) of important ways:&lt;br /&gt;&lt;br /&gt;The location of the text files containing the translated Strings will be passed to the class directly, wither as a File object or as an InputStream. This will avoid the use of the default searching mechanism in the standard &lt;em&gt;ResourceBundle&lt;/em&gt; class and will give the programmer control over where exactly to find the translation files for use in the &lt;em&gt;ResourceBundle&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;The ResourceBundle will only allow access to translated Strings, and not other types of objects. This will simplify the classes use.&lt;br /&gt;&lt;br /&gt;The class will use YAML text files for persistent storage of the translated Strings. This will allow the developer to store more than a key and value for each translated String. They will also be able to store a description of the translates String, translation notes, and the name of the GUI class using the translated String.&lt;br /&gt;&lt;br /&gt;This class will be called &lt;em&gt;YAMLResourceBundle&lt;/em&gt;. It will have at least two (2) support classes, &lt;em&gt;YAMLResourceBundleFactory&lt;/em&gt; and &lt;em&gt;YAMLResourceBundleUtilities&lt;/em&gt;. The utility class will allow client code to search for Strings based on the contents of the description, translation notes, or GUI class for each translated String.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The Sunburned Surveyor (A.K.A. - Landon Blake)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3874629124615325244?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3874629124615325244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3874629124615325244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3874629124615325244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3874629124615325244'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/02/super-select-tool-release-delayed.html' title='Super Select Tool Release Delayed'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3410518384256578460</id><published>2008-02-14T12:05:00.000-08:00</published><updated>2008-02-14T12:19:49.310-08:00</updated><title type='text'>Weekly Builds of OpenJUMP Now Available At Redefined Horizons</title><content type='html'>The computer that was serving as the generous host of our nightly builds of OpenJUMP took a dump. We've been without a nightly build for a while, although there was some discussion about having a "corporate sponsor" already involved in OpenJUMP host the nightly build for us. (SourceForge doesn't have a way to host nightly builds.)&lt;br /&gt;&lt;br /&gt;Until that corporate sponsor materializes I will do my best to host WEEKLY (not nightly) builds of the JPP SVN Repository for OpenJUMP at my www.redefinedhorizons.com website.&lt;br /&gt;&lt;br /&gt;You can download the files here:&lt;br /&gt;&lt;a href="http://www.redefinedhorizons.com/oj_weekly_build/"&gt;http://www.redefinedhorizons.com/oj_weekly_build/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There is one zip file for the "executable distribution" of OpenJUMP. Download this zip file if you want to actually run the computer on your desktop. The other zip file contains just the source code.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3410518384256578460?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3410518384256578460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3410518384256578460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3410518384256578460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3410518384256578460'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/02/weekly-builds-of-openjump-now-available.html' title='Weekly Builds of OpenJUMP Now Available At Redefined Horizons'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1045016739429418200</id><published>2008-01-21T12:53:00.000-08:00</published><updated>2008-01-21T12:56:17.206-08:00</updated><title type='text'>Podcasting? Maybe...</title><content type='html'>I bought a book on podcasting this past weekend. I also bought a microphone and started messing around with Audacity.&lt;br /&gt;&lt;br /&gt;I'm considering the production of some short and simple podcasts about FOSS GIS and OpenJUMP. I was inspired by the GIS podcasts I found from Directions Magazine.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1045016739429418200?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1045016739429418200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1045016739429418200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1045016739429418200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1045016739429418200'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/01/podcasting-maybe.html' title='Podcasting? Maybe...'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-8371841229709333916</id><published>2008-01-21T12:39:00.000-08:00</published><updated>2008-01-21T12:52:17.744-08:00</updated><title type='text'>Many irons in the fire...</title><content type='html'>I’ve been working on a few different things in the last couple of months, and I thought I should provide an update.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;OpenJUMP:&lt;/strong&gt;&lt;br /&gt;I’ve nearly completed the internationalization of the Super Select Tool plug-in for OpenJUMP. This will allow the tool to be translated for use in languages other than my native English. The internationalization process has been a lot more work than I thought, but I have learned a lot. This will hopefully allow me to assist with internationalization work on OpenJUMP in the future.&lt;br /&gt;&lt;br /&gt;The only remaining internationalization work on the Super Select tool is the context sensitive help and the tooltips for the plug-in's toolbar.&lt;br /&gt;&lt;br /&gt;I’ve also developed a simple installer for OpenJUMP plug-ins in response to some of the trouble others had installing the first releases of the Super Select Tool plug-in. This installer is written in Java and should be fairly easy for other plug-in developers to use. I hope to present the installer on the next release of the Super Select Tool, which will take place after internationalization is completed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;OSGeo:&lt;/strong&gt;&lt;br /&gt;I’m about ½ through with my chapter on Metadata for the Free GIS Book. I hope to have this completed by the end of February? As part of this work I am maintaining the beginning of a multi-language dictionary at the OSGeo.&lt;br /&gt;&lt;br /&gt;&lt;a href=” http://wiki.osgeo.org/index.php/Starter_Dictionary”&gt; Starter Dictionary &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SurveyOS Project:&lt;/strong&gt;&lt;br /&gt;I’ve started writing an article that introduces surveyors to GIS. The introduction is finished, and I hope to move onto some of the meat.&lt;br /&gt;&lt;br /&gt;I’ve also done a lot of work on JTS. The implementation of the code to work with angles and directions is nearly complete, and I have added other small utilities for JTS along the way. I need to complete the implementation of the angles package, and then I will focus on unit testing and Javadoc documentation.&lt;br /&gt;&lt;br /&gt;As soon as the angle and direction code for JTS Warped is complete I will finish some simple code that will utilize it for working with spatial relationships. I hope to use this spatial relationship library in an article for the OSGeo Journal. My eventual goal will be to incorporate this spatial relationship library into an OpenJUMP plug-in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-8371841229709333916?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/8371841229709333916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=8371841229709333916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8371841229709333916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8371841229709333916'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/01/many-irons-in-fire.html' title='Many irons in the fire...'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6107516453563881641</id><published>2008-01-07T07:36:00.000-08:00</published><updated>2008-01-07T07:40:49.699-08:00</updated><title type='text'>Geodata Licensing</title><content type='html'>Richard Fairhurst has an interesting post on his blog for Open Street Map that talks about some of their data licensing challenges. I think he identifies some key issues in using the Creative Commons for data licensing, which highlights some of the challenges about data licensing in general.&lt;br /&gt;&lt;br /&gt;http://www.opengeodata.org/?p=262&lt;br /&gt;&lt;br /&gt;I recommend the blog post to anyone interested in geodata licensing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6107516453563881641?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6107516453563881641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6107516453563881641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6107516453563881641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6107516453563881641'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2008/01/geodata-licensing.html' title='Geodata Licensing'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-8029890886632200064</id><published>2007-12-13T12:36:00.000-08:00</published><updated>2007-12-13T12:44:45.563-08:00</updated><title type='text'>Time In GIS (Survey Control Points And Monuments)</title><content type='html'>I was working on a GIS data model for Survey Control when I stumbled across a topic that I have been curious about in the past: How do you practically model and manipulate data with a time component, or chronological data, in a GIS?&lt;br /&gt;&lt;br /&gt;In this blog post I want to do the following:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;&lt;strong&gt;[1]&lt;/strong&gt; Briefly explain how this topic came up during my design.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; Point out some interesting tidbits I found about working with “temporal data” or data with a time component in GIS.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How I Found Time&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In the current version of my Survey Control GIS Data Model a &lt;strong&gt;&lt;span style="color:#006600;"&gt;Survey Control Point&lt;/span&gt;&lt;/strong&gt; is a spatial feature that has associated non-spatial features like a position or coordinates. One of these non-spatial features that is associated with a Survey Control Point in the data model is a &lt;span style="color:#006600;"&gt;&lt;strong&gt;Monument&lt;/strong&gt;&lt;/span&gt;. The monument is the physical marker that represents the Survey Control Point. In the data model a Survey Control Point may be represented by more than one monument. (Monuments can be damaged, destroyed, and replaced or reset over the course of time.) However, a Survey Control Point can only be associated with a single Monument at one point in time. In other words, you can’t have two monuments installed on a Survey Control Point at the same time.&lt;br /&gt;&lt;br /&gt;I started to think about how the association, or relationship between Survey Control Points and Monuments could be represented. I thought I could include attributes on the Monument feature like &lt;em&gt;Date Installed&lt;/em&gt;, &lt;em&gt;Date Destroyed&lt;/em&gt;, and &lt;em&gt;Date Reset&lt;/em&gt;. After some thought I didn’t really like this idea, because I would end up with Monument features that had valid &lt;em&gt;Date Installed&lt;/em&gt; values, but null &lt;em&gt;Date Destroyed&lt;/em&gt; and &lt;em&gt;Date Reset&lt;/em&gt; values. This isn’t a horrible problem, but usually a large number of attributes that will have null values in an implementation leads me to conclude I need to do a better job normalizing my data model design.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;An Article On Time And GIS&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It turns out someone wrote a whole &lt;a href="http://www.time-gis.de/"&gt;book&lt;/a&gt; on Time and GIS. (I didn’t buy it. Not yet anyways.) It also turns out that most material available on Time and GIS deals with ESRI products. (No surprise there…)&lt;br /&gt;&lt;br /&gt;Still, I found an &lt;a href="http://gis.esri.com/library/userconf/europroc96/PAPERS/PN35/PN35F.HTM"&gt;article&lt;/a&gt; online that presented some interesting tidbit on Time and GIS. I want to share them here. The first tidbit deals with the most common approach to managing time in a GIS.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Tidbit One (1):&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#33cc00;"&gt;“If every map represents a temporal snapshot, then the only way in which to study temporal progression is to compare a series of maps; one with the next. Both paper and electronic methods make this simple stacking of time slices possible, but neither truly enable the researcher to model progression through time, whether mapping the change or interpolating values that may be assumed to exist between snapshots. In order to truly manipulate data from the fourth dimension, a different method is required.”&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;It sounds to me like the typical way to work with time in a GIS is by manipulating time slices. It seems I remember reading about this approach in my &lt;a href="http://books.google.com/books?id=D_CP7kOyqRYC&amp;amp;pg=PA190&amp;amp;lpg=PA190&amp;amp;dq=gml+3+time+slice&amp;amp;source=web&amp;amp;ots=7zqwSl69B0&amp;amp;sig=0p0quHfWbdm9hx779bLnisRd55c"&gt;book&lt;/a&gt; about GML 3.&lt;br /&gt;&lt;br /&gt;I didn’t think this approach was really what I needed. It sounded a little too complicated, and didn’t exactly fit my problem with the relationship between Survey Control Point features and Monument features very well. I’ll talk more about that in a minute.&lt;br /&gt;&lt;br /&gt;The article identified some other ways GIS try to model temporal data, which includes text, graphics, or temporal symbols added to a map and animations.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tidbit Two (2):&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The second tidbit helped me identify some of the questions I was trying to answer about time and my two (2) features.&lt;br /&gt;&lt;br /&gt;Here are some of the questions that were listed in the article:&lt;br /&gt;&lt;span style="color:#33cc00;"&gt;&lt;br /&gt;Where and when did change occur?&lt;br /&gt;What types of change occurred?&lt;br /&gt;What is the rate of this change?&lt;br /&gt;What is the &lt;a href="http://dictionary.reference.com/browse/periodicity"&gt;periodicity&lt;/a&gt; of this change?&lt;br /&gt;How much did it change?&lt;br /&gt;What changed?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tidbit Three (3):&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The article also identified some of things we are trying to find and/or understand when we work with temporal data in a GIS:&lt;br /&gt;&lt;span style="color:#33cc00;"&gt;&lt;br /&gt;The existence or absence of temporal patterns.&lt;br /&gt;The identification of trends.&lt;br /&gt;Understanding processes that occur over time.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#33cc00;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;A Solution Borrowed From Object-Oriented Programming&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I often discover solutions to real world business or GIS problems that are based on concepts and techniques I have learned as an object-oriented programmer. (I think this may be one advantage a programmer has over RDBMS folks when it comes to GIS design.)&lt;br /&gt;&lt;br /&gt;In this case I realized that what I needed was an abstraction, or simplified model of time for my GIS. (A lot of good object-oriented programming is about finding and modeling abstractions of the real world in your program.) A lot of really great GIS programs work with two-dimensional spatial data even though we really live in a three-dimensional world. What I needed was “two-dimensional time”, or a simple way to represent temporal data in by GIS data model.&lt;br /&gt;&lt;br /&gt;I believe a possible solution to this problem can be borrowed from object-oriented programming. The solution is the concept of an “event”. Events are a common GUI or graphical user interface programming element. (For example, when the user clicks on a button this generates an event. The programmer can then write code that responds to this event.)&lt;br /&gt;&lt;br /&gt;What I really wanted was to included events in my GIS data model. I needed the following events:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#33cc00;"&gt;Monument Installed Event&lt;br /&gt;Monument Damaged Event&lt;br /&gt;Monument Destroyed Event&lt;br /&gt;Monument Reset Event&lt;br /&gt;Monument Repaired Event&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now I wasn’t dealing with a lot of null-valued attributes, and I had something more that just a date attribute in the Monument feature.&lt;br /&gt;&lt;br /&gt;I still need to do a lot more research and work on this approach. When do you need an event, and when can you just have a feature with a Date and/or Time attribute? What type of tools could work with events? What type of questions could I answer with events? How would geospatial events be defined in a GIS data model.&lt;br /&gt;&lt;br /&gt;I’ll post more information on this topic as I work through this challenge on the Survey Control Point GIS Data Model and another data model I am currently working on.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-8029890886632200064?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/8029890886632200064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=8029890886632200064' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8029890886632200064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/8029890886632200064'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/12/time-in-gis-survey-control-points-and.html' title='Time In GIS (Survey Control Points And Monuments)'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4355675173040894866</id><published>2007-12-13T11:40:00.000-08:00</published><updated>2007-12-13T11:42:23.753-08:00</updated><title type='text'>Free Java</title><content type='html'>I stumbled upon an interesting article about the "free Java" effort. &lt;span style="color:#6600cc;"&gt;&lt;strong&gt;OpenJUMP&lt;/strong&gt;&lt;/span&gt; is a program written in the Java programming language, and I use it on Linux, so I thought it would be appropriate to post a link to the article:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linux.com/feature/122586"&gt;http://www.linux.com/feature/122586&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4355675173040894866?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4355675173040894866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4355675173040894866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4355675173040894866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4355675173040894866'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/12/free-java.html' title='Free Java'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-948501323074711501</id><published>2007-12-10T12:44:00.000-08:00</published><updated>2007-12-10T12:46:27.449-08:00</updated><title type='text'>OpenJUMP Javadoc Now Online</title><content type='html'>I put the javadoc for OpenJUMP online. You can access it here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jump-pilot.sourceforge.net/openjump_javadoc/"&gt;http://jump-pilot.sourceforge.net/openjump_javadoc/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll try to keep it up-to-date with the Javadoc from all official releases.&lt;br /&gt;&lt;br /&gt;The Sunburned Surveyor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-948501323074711501?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/948501323074711501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=948501323074711501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/948501323074711501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/948501323074711501'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/12/openjump-javadoc-now-online.html' title='OpenJUMP Javadoc Now Online'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-5314575156227426390</id><published>2007-12-10T12:38:00.000-08:00</published><updated>2007-12-10T12:43:47.628-08:00</updated><title type='text'>Open Formats, Open Standards, and Geodata Licenses</title><content type='html'>There has been some interesting discussion about open formats, open standards, and geodtata licensing at the OSGeo the past few weeks. I thought I would take a minute to post some interesting links:&lt;br /&gt;&lt;br /&gt;Here is a blog from a lawyer working on open data licensing. This applies to data in general, not specifically geodata, but some of the same principles apply.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.opencontentlawyer.com/open-data/"&gt;http://www.opencontentlawyer.com/open-data/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a web site that contains an interesting description of the difference between open standards and open formats:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opendefinition.org/open_format_definition"&gt;http://opendefinition.org/open_format_definition&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It says:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;An open format is not: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;br /&gt;Encumbered by patents. &lt;/li&gt;&lt;li&gt;&lt;br /&gt;Named using a trademark unless that trademark is usably by anyone under appropriately open terms (to define? - a trademark can be used to protect the integrity of a format, but use should not require payment, even for conformance testing) &lt;/li&gt;&lt;li&gt;&lt;br /&gt;tied to a particular software implementation (ie. it should be practical to have multiple software implementations) &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;An open format is: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;br /&gt;Well and completely documented sufficient to implement a safely conformant reader/writer from scratch. &lt;/li&gt;&lt;li&gt;&lt;br /&gt;Defined in documentation that is freely redistributable (though the document may be under a license that doesn't allow changes to the spec document) &lt;/li&gt;&lt;li&gt;&lt;br /&gt;Software language independent (no dependencies on language specific components like "python pickling") &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;Is is desirable that an open format: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;br /&gt;have an open source reference implementation for reading and writing. &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-5314575156227426390?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/5314575156227426390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=5314575156227426390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5314575156227426390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5314575156227426390'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/12/open-formats-open-standards-and-geodata.html' title='Open Formats, Open Standards, and Geodata Licenses'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3451974081479480045</id><published>2007-09-04T11:27:00.000-07:00</published><updated>2007-09-04T11:43:07.960-07:00</updated><title type='text'>Reorganizing The Wiki</title><content type='html'>I was talking with one of our programmers over the weekend. He had mentioned to me that a great community has grown up around &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt;, but that our documentation hasn’t kept up. He pointed out that although our &lt;a href="http://openjump.org/wiki/show/HomePage"&gt;wiki&lt;/a&gt; contains a lot of good information, it’s a mess.&lt;br /&gt;&lt;br /&gt;He suggested starting out with a clean wiki. I thought that this would be a good time to layout a more structured wiki on the JPP SourceForge site.&lt;br /&gt;&lt;br /&gt;This seems like an especially good idea, since Larry and Peppe were talking about using the wiki as a form of context-sensitive help in &lt;span style="color:#663366;"&gt;&lt;strong&gt;OpenJUMP&lt;/strong&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I have quickly laid out a skeleton for a proposed wiki reorganization:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jump-pilot.wiki.sourceforge.net/"&gt;http://jump-pilot.wiki.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I’m open to different ways of organizing the wiki. What do you guys think? Are there better ways to structure our wiki? Are there reasons to hold off on moving to the SourceForge wiki?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3451974081479480045?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3451974081479480045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3451974081479480045' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3451974081479480045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3451974081479480045'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/09/reorganizing-wiki.html' title='Reorganizing The Wiki'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-581082214911859366</id><published>2007-08-21T12:52:00.000-07:00</published><updated>2007-08-21T12:57:32.544-07:00</updated><title type='text'>Changes At The Patent Office</title><content type='html'>For a long time a major gripe of the open source community at large has been the ease with which software vendors can receive patents for technology or concepts that are obviously well established as prior art or so fundamental they don’t qualify for a patent. (For example: “I want to represent a spatial data in XML”.)&lt;br /&gt;&lt;br /&gt;It looks like this situation may be starting to change for the better.&lt;br /&gt;&lt;br /&gt;On June 15, 2007 the United States Patent and Trademark Office (USPTO) opened the patent examination process to online public participation for the first time. This allows members of the public to review and discuss posted patent applications, to research and locate prior art references, and to supply at least a portion of this information to the USPTO.&lt;br /&gt;&lt;br /&gt;The goal of the program is to improve the quality of issued patents.&lt;br /&gt;&lt;br /&gt;I believe this program, if properly supported, can be a vital tool in fixing the patent problem that exists in the United States, and can be a crucial component of ensuring healthy open source software development. I encourage all members of the open source geospaitial community to participate in reviewing relevant patent applications. I will be making a personal effort to do this, and to encourage the participation of OSGeo members in this process.&lt;br /&gt;&lt;br /&gt;What is the only flaw that I can see with the current Peer-To-Patent system? The “inventor” must agree to have his application reviewed by the public. However, I think this problem will be minimized over time, as people will begin to treat patents that weren’t exposed to this type of public scrutiny with more suspicion.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Related Links&lt;br /&gt;&lt;a href="http://www.peertopatent.org/"&gt;Peer-To-Patent Website&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dotank.nyls.edu/communitypatent/"&gt;Related New York Law School Website&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cairns.typepad.com/peertopatent/"&gt;Peer-To-Patent Blog&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dotank.nyls.edu/communitypatent/docs/info/P2P_Brochure.pdf"&gt;Peer-To-Patent Brochure&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.uspto.gov/"&gt;United States Patent Office&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-581082214911859366?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/581082214911859366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=581082214911859366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/581082214911859366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/581082214911859366'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/08/changes-at-patent-office.html' title='Changes At The Patent Office'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4142391832525071315</id><published>2007-07-23T12:42:00.000-07:00</published><updated>2007-07-23T12:44:26.549-07:00</updated><title type='text'>A Couple Of Links</title><content type='html'>&lt;div&gt;I wanted to share a couple of interesting links that came across the JPP Developer Mailing list that last few days.&lt;br /&gt;&lt;br /&gt;The first link is to the JH Labs Java Map Project Library. This is a Java port of the PROJ.4 library for map projections. (Note: This is an actual port to Java, not a wrapper of the native library.)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jhlabs.com/java/maps/proj/"&gt;http://www.jhlabs.com/java/maps/proj/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The second link is to a GPL library for Dockable Windows in Swing that is maintained by the company InfoNode. Paul Austin, an &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; programmer, recently posted a screenshot of &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; modified to use this library. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://bp3.blogger.com/_amyvebqX2iU/RqUE6SAniGI/AAAAAAAAABI/k8bDMyoS_g4/s1600-h/jump_info_node.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5090480353125566562" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp3.blogger.com/_amyvebqX2iU/RqUE6SAniGI/AAAAAAAAABI/k8bDMyoS_g4/s200/jump_info_node.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.infonode.net/index.html?idw"&gt;http://www.infonode.net/index.html?idw&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4142391832525071315?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4142391832525071315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4142391832525071315' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4142391832525071315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4142391832525071315'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/07/couple-of-links.html' title='A Couple Of Links'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_amyvebqX2iU/RqUE6SAniGI/AAAAAAAAABI/k8bDMyoS_g4/s72-c/jump_info_node.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-2184856962148146043</id><published>2007-06-22T08:36:00.000-07:00</published><updated>2007-06-22T08:46:37.531-07:00</updated><title type='text'>Standards in Software – The Ugly Truth</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I want to take a few moments to deal with the ugly truth about software standards. “Standards” have become the hip thing in the GIS world, especially among the open source Java GIS commuity, since the OGC gained momentum. Here is an example of what I am talking about:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Deegree Project:&lt;/strong&gt; “deegree is a Java Framework offering the main building blocks for Spatial Data Infrastructures. Its entire architecture is developed using standards of the &lt;/span&gt;&lt;a href="http://www.opengeospatial.org/" target="_new"&gt;&lt;span style="font-family:verdana;"&gt;Open Geospatial Consortium (OGC)&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; and &lt;/span&gt;&lt;a href="http://www.isotc211.org/" target="_new"&gt;&lt;span style="font-family:verdana;"&gt;ISO/TC 211 (ISO Technical Committee 211 -- Geographic Information/Geomatics)&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;.”&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;strong&gt;GeoTools Project:&lt;/strong&gt; “standards compliant methods for the manipulation of geospatial data, for example to implement &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Gis"&gt;&lt;span style="font-family:verdana;"&gt;Geographic Information Systems (GIS)&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;. The GeoTools library implements &lt;/span&gt;&lt;a href="http://www.opengis.org/"&gt;&lt;span style="font-family:verdana;"&gt;Open Geospatial Consortium&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; (OGC) &lt;/span&gt;&lt;a href="http://www.opengis.org/specs/?page=specs"&gt;&lt;span style="font-family:verdana;"&gt;specifications&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; as they are developed…”&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;strong&gt;GeoAPI:&lt;/strong&gt; “The GeoAPI project aims to reduce duplication and increase interoperability by providing neutral, interface-only APIs derived from OGC/ISO Standards.”&lt;br /&gt;&lt;br /&gt;What do all of the projects have in common? They are all written in Java, and they all implement one or more OGC standards.&lt;br /&gt;&lt;br /&gt;I don’t want this to be a rant about the OGC and my problems with how they operate. (I’ll save that for another post.) I want to try to obtain some level of objectivity, so lets just examine software standards on their face irregardless of whether they are produced by the OGC or not.&lt;br /&gt;&lt;br /&gt;Here are a couple of problems caused by software standards that are not properly designed and executed:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;[1] They create obstacles to collaboration.&lt;br /&gt;[2] They can stifle innovation.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I know those sound like some pretty controversial statements. “What is this guy talking about?” you might ask. “I thought software standards were supposed to foster collaboration and innovation.” Software standards are meant to do that. Boats are meant to float. A lot of them end up at the bottom of the ocean too. (Remember the Titanic?) Why does this happen? Because these boats weren’t designed correctly or built properly. That doesn’t mean you can’t achieve your goal of floating with a boat, it just means that you have to go about it in the right manner.&lt;br /&gt;&lt;br /&gt;Let’s examine the two problems I mentioned with software standards one at a time.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Poorly Designed and Executed Software Standards Create Obstacles To Collaboration&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Poorly designed standards fall victim to the trap of “standard euphoria”. People become so excited about standards, they become so focused on implementing these standards, that they forget to question the technical merit and practicality of the standard they are trying to use and implement. That can lead to a situation where a lot of different software projects are implementing the same poorly designed software standard. Or you get a situation where programmers are throwing a lot of time at implementing a confusing and complex software standard because “everyone else is doing it”. They would be better of spending that time on other functionality for their software or on improving software quality.&lt;br /&gt;&lt;br /&gt;Most people would assert that this is an easy problem to overcome. “Just design better standards.” That is often easier said than done. For one thing, with the design of software standards often involves meeting the needs of a number of very different interested parties. That is an admirable goal, but is no easy task.&lt;br /&gt;&lt;br /&gt;What if the process of designing the standard is an exclusive one, given to only a few privileged members of a software development community? That can lead to poor design as well. You could be excluding the one programmer that sees the problem in your standard and knows how to fix it. Or you could be ignoring the one programmer that will be deals with the very real world issues you are trying to address with your standard. In some sense software standards developed in this way go contrary to the very core concepts of open source software: Mutual benefit by shared knowledge.&lt;br /&gt;&lt;br /&gt;Return to my example of boat design. Imagine that you are design a standard for the design of boats but you decide to only allow companies that design million dollar yaughts or container ships to participate. You exclude all the people that build and work on smaller vessels. How good will your standard be? What price will you pay for excluding that pool of valuable boat building and boating experience?&lt;br /&gt;&lt;br /&gt;Why would anyone close of the process of designing a software standard like this? &lt;span style="color:#33cc00;"&gt;&lt;strong&gt;Control, control, control.&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Make no mistake about that. (If you were a proprietary software company working to design a software standard that would dominate your particular industry, would you tweak it to your competitive advantage, or to someone else’s competitive advantage? Come on now, be honest with me…)&lt;br /&gt;&lt;br /&gt;The execution and delivery of a standard can become an obstacle to collaboration as well. Even after a standard is complete the manner in which it is delivered to the community can be important. Will you require people to pay a fee to access your standard? Will you limit the way it is used or implemented? These aspects of standard execution and delivery can also stifle collaboration if not handled properly.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Poorly Designed and Executed Software Standards Create Obstacles To Innovation&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In this situation we find that “standard euphoria” is the main culprit. People become so focused on implementing some software standard that they divert time and energy from other areas. That wouldn’t be a problem, unless the standard is poorly designed in the first place.&lt;br /&gt;&lt;br /&gt;Another obstacle to innovation comes when members of the community are unwilling to work together on some area of software design because it isn’t going to become adopted as an “official” standard of a particular organization, or because it is still in the process of becoming a standard.&lt;br /&gt;&lt;br /&gt;Let me give you one example of this. I have been working towards the goal of increasing collaboration between &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; and other members of the open source Java GIS community. As part of this goal I identified some functionality that I would like to add to OpenJUMP at some point in the future. I decided to approach a project whose stated goal is to encourage collaboration between Java programmers working on GIS. Although members of the project were very friendly, I was basically told that the project was only concerned with code that implemented OGC/ISO software standards. I didn’t let this slow me down, so I started looking around for an organization or group that would be interested in hosting code that explored some new aspect of GIS not covered by an OGC/ISO standard. I couldn’t find this organization, and I’m not sure that it exists. What does that mean? It means if you really want to work together on some particularly innovative area of GIS software development you’d better be involved in the OGC/ISO standards process. If you don’t want to do that, or if you are excluded from doing that, you had better be prepared to work on your own.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What type of software standards really work?&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Does all of the above commentary mean that I think software standards are no good? On the contrary, I think they are one of the best things for software development, if they are properly designed and executed.&lt;br /&gt;&lt;br /&gt;What does a software standard need in order to “float” or to meet its goals of encouraging collaboration and innovation?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[1]&lt;/strong&gt; Software standards need to be designed in a process that is not exclusive or where membership is not based on financial contributions and/or fees. Membership in the process of designing a standard should be based on an individual’s or organization’s technical skill, capacity for innovation, ability to work with others, knowledge or expertise in the area addressed by the standard, and ability to think critically and objectively.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; Software standards need to be executed and delivered in a way that promotes use and adoption by all members of the software industry addressed by the standard, not by only a few members of the community. This means that people should not have to pay for a copy of the standard itself or supporting documentation. This should be made available in a free and open format. (For example, release this documentation under one of the &lt;a href="http://creativecommons.org/"&gt;Creative Commons&lt;/a&gt; licenses.) The authors of the standard or the organization maintaining the standard should avoid putting unnecessary restrictions on how the standard is used and distributed. Individuals and organizations should not have to pay a fee to verify compliance with a standard.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[3]&lt;/strong&gt; Software standards should be accepted on the grounds of technical merit and the ability to be practically implemented and used, not because they are rubber-stamped by some multi-company conglomerate.&lt;br /&gt;&lt;br /&gt;Of these three (3) elements, I believe that last two (2) are most important. (Note, however, that it is a lot easier to get #3 if you have #1.) Consider just three common examples of this:&lt;br /&gt;&lt;br /&gt;What file format do you use if you want to exchange CAD data between different software programs? (Let’s pretend you don’t want to cough up a bunch of doe for Autodesk’s DWG libraries.)&lt;br /&gt;&lt;br /&gt;You use DXF. Why? You use DXF because it works well and it has a freely available &lt;a href="http://images.autodesk.com/adsk/files/acad_dxf0.pdf"&gt;specification&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What file format do you use if you want to exchange digital documents and you have no guarantee of the operating system or software platform that they are using?&lt;br /&gt;&lt;br /&gt;You use PDF. Why? You use PDF because it works well and it has a feely available &lt;a href="http://www.adobe.com/devnet/pdf/pdf_reference.html"&gt;specification&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What file format do you use if want to share simple vector data between GIS programs?&lt;br /&gt;You use ESRI’s Shapefile Format. Why? You use Shapefiles because they work well and the Shapefile format is defined in a freely available &lt;a href="http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf"&gt;specification&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;The open source Java GIS community needs to overcome its “standard euphoria”. This is especially important if this euphoria is for standards that are poorly designed and executed, and that don’t meet the three (3) requirements above. Let’s evaluate each software standard for our area of expertise on its technical merit, and not race to implement it because it isn’t rubber-stamped by an organization that doesn’t follow a design process open to our input. Let’s not dismiss the possibility of working together on a certain aspect of GIS software because it might not be covered by a standard from the same organization.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-2184856962148146043?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/2184856962148146043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=2184856962148146043' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2184856962148146043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/2184856962148146043'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/06/standards-in-software-ugly-truth.html' title='Standards in Software – The Ugly Truth'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-6803462877524673676</id><published>2007-06-21T08:16:00.000-07:00</published><updated>2007-06-21T08:22:23.887-07:00</updated><title type='text'>Organizing Features in OpenJUMP (Simplicity or Flexibility?)</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Features are the basic unit of “work” in &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt;. They are the fundamental “thing” that users are interested in manipulating. There are several ways to organize or group features to make the tasks of the user easier to accomplish. &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; currently uses a single “container” to organize Features from the user’s perspective. This container is a Layer. Users interact with Layers mainly through the Layer List. (Programmers know this as the LayerManager object.)&lt;br /&gt;&lt;br /&gt;Layers provide the user with some useful “restrictions” on Feature organization that simplify their work. For example, all of the Features in a Layer share a common set of attributes, or a FeatureSchema. They also follow a common set of styling rules that govern their graphical appearance. Aside from these two restrictions, Layers are pretty flexible. They can store Features with different geometry types. They can share a name with another Layer.&lt;br /&gt;&lt;br /&gt;Internally Layers are really just a wrapper around a FeatureCollection. But again, for the sake of simplicity, &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; places some restrictions on this FeatureCollection. As we mentioned before, it can only contain Features that share a common set of attributes or a FeatureSchema. This FeatureCollection also is not treated as a Feature itself, as can be done, at least in theory, with something like GML.&lt;br /&gt;&lt;br /&gt;As we can see, there is a balance that we try to maintain with the design of &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP’s&lt;/span&gt;&lt;/strong&gt; Feature Model between flexibility and simplicity. In order to have simplicity you must have restrictions on flexibility.&lt;br /&gt;&lt;br /&gt;I don’t think we’ve really examined where we would like to have this balance as &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; developers, but I think the time for this discussion is right now. I think there will be an inevitable push towards more flexibility, as we continually try to find ways to bolt more and more functionality on top of &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt;. I think we need to be cautious about this. One of the greatest assets &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; has, both from a users perspective and from a developers perspective, is its simplicity.&lt;br /&gt;&lt;br /&gt;I’d like to propose the establishment of some ground rules for our Feature Model. I think it is important to preserve our simplicity by putting into place some common sense restrictions. If a programmer would like to get around these restrictions, lets ask that he do it with a plug-in, and not by modifying &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP’s&lt;/span&gt;&lt;/strong&gt; core.&lt;br /&gt;&lt;br /&gt;Here are the restrictions that I would like to propose:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[1]&lt;/strong&gt; Each Layer must be uniquely identified in some way from other Layers. This doesn’t mean that Layers can’t appear to have the same name to the user. We could use a numeric identifier or require that every Layer name in a Category be unique. What do we gain with this restriction? It allows us more opportunity to use Layers as the main containers for Features. For example, this will allow Layers to serve as what is often called a FeatureType or FeatureClass in other GIS programs. (The user would be able to place constraints or validations tests on a Layer.) We are really close to this type of system already, because we require all Features in a Layer to share a common FeatureSchema. It is not that big of a leap to require that Layers also be uniquely identified. This would remove the necessity to uniquely identify FeatureSchema, because each FeatureSchema would belong to a unique FeatureCollection wrapped in a unique Layer.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; We will never, ever, ever expose FeatureSchema to the user through the GUI. We don’t need to do this, because all Features in a Layer share the same FeatureSchema. If a user needs to work with some aspect of a FeatureSchema have them access that functionality through a Layer, don’t expose it directly. What do we gain from this restriction? Things become much simpler from a user’s point of view. They don’t have to worry about FeatureSchema, Feature Types or Feature Classes. They can just think in terms of Layers. Do we loose some flexibility with this restriction? Yes we do. (For example, we won’t be able to let the user apply constraints to multiple Layers that essentially share a common FeatureSchema. They would have to apply these constraints to each Layer individually.) But I think this price is worth preserving simplicity.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[3]&lt;/strong&gt; We will not allow FeatureCollections that can also act as a Feature themselves. This adds some significant complexity to OpenJUMP's Feature Model. We’ve already had some discussion on the JPP Development list about this. I think an alternative way to facilitate this type of functionality is by allowing associations or relationships between Features. This could be done with a plug-in and would not require modification of the current &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt;/JUMP Feature Model. (I am not ruling out exposure of loose groups of Features. These groups could contain multiple Features from different Layers, but would not be allowed to act as a Feature themselves. This could be accomplished with a plug-in and these groups could be created from selection sets. I think of their purpose as being similar to a block in AutoCAD.)&lt;br /&gt;&lt;br /&gt;I’d like to see some more discussion about finding the balance between flexibility and simplicity in &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP’s&lt;/span&gt;&lt;/strong&gt; Feature Model. I’d specifically like a decision on what primary Feature “container” we will expose to the user. Will the Layer object remain in this role, or will we expose something else like a Feature Type in its place. If we do so, what will the price to simplicity be? Will we modify the Feature Model to support “Complex Features”, or FeatureCollections that can act as Features themselves? Are we willing to pay the price of lost simplicity for this functionality, or will we ask that this be done through association via a plug-in.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-6803462877524673676?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/6803462877524673676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=6803462877524673676' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6803462877524673676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/6803462877524673676'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/06/organizing-features-in-openjump.html' title='Organizing Features in OpenJUMP (Simplicity or Flexibility?)'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-5539315802066495328</id><published>2007-06-14T17:07:00.000-07:00</published><updated>2007-06-14T17:17:35.348-07:00</updated><title type='text'>Java GIS Collaboration – Don’t hold your breath. (But we are getting closer.)</title><content type='html'>As far as the broader open source communities goes, Java GIS has one really bad habit. The smaller member communities and projects just aren’t very good at working together. Case in point:&lt;br /&gt;&lt;br /&gt;You want to obtain Feature objects from an ESRI Shapefile? You know someone has written some open source code that does just that? Where do you look?&lt;br /&gt;&lt;br /&gt;You could use the GeoTools code for Shapefile I/O.&lt;br /&gt;You could use the Deegree project code for Shapefile I/O.&lt;br /&gt;You could use the JUMP code for Shapefile I/O.&lt;br /&gt;&lt;br /&gt;There are only a couple of technical challenges to overcome. All three code libraries will give you Feature objects that come from a different Feature Model, and you’ll also have to learn a unique data source/data access framework for each project.&lt;br /&gt;&lt;br /&gt;How did things get this bad?&lt;br /&gt;&lt;br /&gt;I don’t have an answer to that question.&lt;br /&gt;&lt;br /&gt;Will things get better?&lt;br /&gt;&lt;br /&gt;I hope so. In fact, I have seen a light at then end of a long dark tunnel in this regard. For example, even within the &lt;span style="color:#663366;"&gt;&lt;strong&gt;OpenJUMP&lt;/strong&gt;&lt;/span&gt; community we are seeing a quiet push towards collaboration and consolidation. We have contributors from DeeJUMP developers, SkyJUMP developers, SIGLE JUMP developers and other independent developers. Even the developers from Vivid Solutions, the creator of JUMP, occassionally chime in on the mailing list. For the first time we seem to be close to realizing our goal of having &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; as a common software “platform” that serves as foundation for plug-in developers looking for a JUMP replacement with a more open development model. (I attribute a good deal of this positive trend to the hard work of Stefan Stienger, the project administrator for &lt;span style="color:#663366;"&gt;&lt;strong&gt;OpenJUMP&lt;/strong&gt;&lt;/span&gt;.)&lt;br /&gt;&lt;br /&gt;I also see the light at the end of a long, dark tunnel when I consider discussion of collaboration among other Java GIS projects. For example, Jody Garnett and Cory Horner have been encouraging greater collaboration among the different Java GIS projects. Cory Horner has even set up a page at the OSGeo to facilitate the discussion of collaboration in this area:&lt;br /&gt;&lt;br /&gt;&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://wiki.osgeo.org/index.php/Java_GIS_Collaboration" target="_blank"&gt;http://wiki.osgeo.org/index.php/Java_GIS_Collaboration&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(I think the OSGeo is the perfect “umbrella” for this type of discussion and the concrete interfaces and implementations that will hopefully result.)&lt;br /&gt;&lt;br /&gt;Jody Garnett has also been instrumental in helping guide me around some of the GeoTools maze. He has really made me feel welcome in the GeoTools world. (I hope to assist Jody this summer with a 2007 Google Summer of Code student working on a GeoTools project.) Jody and I also talk “off the mailing lists” about ways we can work together. I can’t tell you how valuable it is in terms of collaboration to have someone at GeoTools that I can just bounce ideas off of. (Jody recently discussed cooperation between members of the Java GIS community on his blog. Click &lt;a href="http://www.blogger.com/”"&gt;here&lt;/a&gt; to see the post.)&lt;br /&gt;&lt;br /&gt;Still, we have some major challenges when it comes to collaboration in the Java GIS community, and the light at the end of the tunnel might be train locomotive.&lt;br /&gt;&lt;br /&gt;What are some of these challenges?&lt;br /&gt;&lt;br /&gt;I had originally planned on slowly integrating the GeoTools feature model into OpenJUMP, but I almost had a riot on the JPP Developer mailing list when I suggested doing so. It seems the GeoTools project has reputation for instability, especially within the feature model, and this has to be dealt with regardless of whether or not the reputation has been earned.&lt;br /&gt;&lt;br /&gt;I still think there is a lot of disagreement about what a feature model should look like, and where the balance between simplicity and functionality should be found. This disagreement takes place even within projects, much less between projects. No real chance for collaboration on feature models until some of this debate is settled.&lt;br /&gt;&lt;br /&gt;If we are to make collaboration between members of the Java GIS community a success we need to be realistic. Am I going to be ripping the feature model out of JUMP so that I can throw in the one for GeoTools or Deegree? I realize now that this is not possible from a practical point of view.&lt;br /&gt;&lt;br /&gt;What can we accomplish?&lt;br /&gt;&lt;br /&gt;There are at least two things I think we can do to "enable" greater collaboration.&lt;br /&gt;&lt;br /&gt;The first thing we can do is to develop a library of code that provides conversion between elements of the projects different feature models. This is something I hope to work on for &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP’s&lt;/span&gt;&lt;/strong&gt; FeatureCache. These converters will allow programs like OpenJUMP to consume feature models from other projects with a layer of insulation against the change in those projects.&lt;br /&gt;&lt;br /&gt;The second thing we can do is identify areas where a big hunk of legacy code isn’t standing in the way of collaboration. This could be in the one or two areas where the projects already share code.&lt;br /&gt;&lt;br /&gt;The JTS geometry library is the best example I can think of. Just about anything we build directly on top of JTS can be used by many of the Java GIS projects. (Support for spatial relationships and topology are one example.) Whatever we do we can’t let a project that is already using JTS replace it with some custom, home grown geometry library! &lt;strong&gt;&lt;em&gt;&lt;span style="color:#ff0000;"&gt;Not even in the name of OGC compliance!&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt; Instead we should get involved with the development of JTS so it can grow and mature. We should ask ourselves how you can accomplish our programming tasks using JTS, instead of writing our own geometry library.&lt;br /&gt;&lt;br /&gt;We also have the opportunity to collaborate in areas of new functionality. How many of the Java GIS projects have a set of standard libraries to handle map labels, annotations, and dimensions? I know OpenJUMP doesn’t. That is a functionality that isn't tightly coupled to a feature model that could be integrated into OpenJUMP via a standard set of interfaces and implementations. There is certainly other functionality that fits into this category.&lt;br /&gt;&lt;br /&gt;How do we start?&lt;br /&gt;&lt;br /&gt;In his blog post Jody Garnett suggested we work on a set of Java interfaces that answer the question: &lt;em&gt;“What is map?”&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I think this might be tough place to start, because a map is a rather complex object. (Should we start with a simpler concept?) Still, I’m willing to give this a try.&lt;br /&gt;&lt;br /&gt;So what type of map are we talking about Jody? Are we talking about a paper map or a digital map? There are some big differences in how I would represent the two types of maps with Java interfaces.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-5539315802066495328?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/5539315802066495328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=5539315802066495328' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5539315802066495328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/5539315802066495328'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/06/java-gis-collaboration-dont-hold-your.html' title='Java GIS Collaboration – Don’t hold your breath. (But we are getting closer.)'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-4952579266621961419</id><published>2007-06-14T12:25:00.001-07:00</published><updated>2007-06-14T12:25:46.735-07:00</updated><title type='text'>Migrating to Subversion</title><content type='html'>I think that we may finally be doing it.&lt;br /&gt;&lt;br /&gt;The JPP is migrating from Concurrent Version Control or CVS to Subversion, or SVN. I think the majority of our developers are now working with Subversion at their day jobs or on other projects and there now a lot more a comfortable with the change. The good news is using Subversion should be a lot more flexible, and we are going to gain a split in “stable” and “unstable” development. This will allow some more collaborative development of code without the worry of breaking things.&lt;br /&gt;&lt;br /&gt;The bad news is the migration is a real pain in the neck. I’ve already made one attempt, which would have worked well until the other developers informed me that I had lost the CVS history. I’m now getting some help from Andreas at Lat/Lon, but I have to start from scratch to get it to work. I’m hoping that I can have it done by the end of the week.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-4952579266621961419?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/4952579266621961419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=4952579266621961419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4952579266621961419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/4952579266621961419'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/06/migrating-to-subversion.html' title='Migrating to Subversion'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-3287408884195656229</id><published>2007-06-07T12:03:00.000-07:00</published><updated>2007-06-07T12:05:32.877-07:00</updated><title type='text'>Alternative To A Complex Feature Model</title><content type='html'>I was thinking about the discussion on more complex feature models that have taken place recently. I was wondering if it was really necessary to modify JUMP's feature model to obtain some of the services that a more complex feature model would allow.&lt;br /&gt;&lt;br /&gt;I think that you could use "relationships" to model complex features instead of embedding one feature as the attribute of another feature, as you would in a more complex feature model. (When I say relationship, I mean something similar to the relationships that exist between table records in an RDBMS.)&lt;br /&gt;&lt;br /&gt;For example, let’s say that I want to model a municipal road system as a complex feature. This road system contains a number of road segments. You could approach this in two or three different ways:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[1]&lt;/strong&gt; &lt;em&gt;You could represent the municipal road system as a FeatureCollection. This FeatureCollection would also be a Feature with its own unique attributes, like "NumberOfRoadSegments". It would contain RoadSegment features as members of its collection.&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; &lt;em&gt;You could represent the municipal road system as a more complex Feature object. One of the attributes of this feature could be a Java Collection or some similar container that held references to the RoadSegment features.&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;I think that both of these options are somewhat cumbersome, and would require some tweaking of &lt;strong&gt;&lt;span style="color:#993399;"&gt;OpenJUMP's&lt;/span&gt;&lt;/strong&gt; innards. (Although the first option is probably less cumbersome than the second.) What if we that like a relational database designer for a minute and "normalized" our data? If I was designing a traditional RDBMS to model a municipal road System I would use two tables. The MunicipalRoadSystems table would store its attributes in the table columns, and one of these attributes would be a unique identifier. This would likely be the primary key for the table. The RoadSegments table would store the attributes of individual road segments in its table columns. Each record in the RoadSegment table would also include the primary key or unique identifier for a road system. This would establish a relationship between the road segment and the road system. (Or I might have a third table that stored both the road segment unique identifier and the road system unique identifier. This would allow a road segment to be part of more than one road system. This would be a relationship table used to model a many-to-many relationship.)&lt;br /&gt;&lt;br /&gt;Now, consider a third option for representing a municipal road system based on the "normalized" RDBMS approach.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[3]&lt;/strong&gt; &lt;em&gt;You create a non-spatial FeatureCollection to represent the MunicipalRoadSystem. (This is similar to the MunicipalRoadSystems table in the RDBMS.) You then create a spatial FeatureCollection that stores a Feature for each road segment. You then design a plug-in that manages relationships between features and presents an API for these purposes to the developer.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I can’t think of anything you could do in the first two approaches that couldn’t be done in the third approach. The third approach also has two distinct benefits:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[1]&lt;/strong&gt; &lt;em&gt;It doesn’t require modification of &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP’s&lt;/span&gt;&lt;/strong&gt; current Feature Model, which is both simple and elegant.&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;[2]&lt;/strong&gt; &lt;em&gt;It involves the creation of a system for managing relationships between features. Although this can be used to model complex features as I have described, it can also be used to model relationships between simple features. This is a powerful bonus.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;When I have to explain what a GIS is to someone unfamiliar with the topic I usually say something like “its an intelligent computer-based map”. If the person has some technical skill or is familiar with computers I’ll say something like “it’s a database that can handle location information” instead.&lt;br /&gt;&lt;br /&gt;I find that I can often devise solutions to GIS software design problems if I try to remember that a GIS is a “database that can handle location information”. Although this is an oversimplification, I find it allows me to take advantage of relational database design principles.&lt;br /&gt;&lt;br /&gt;This alternative to representing complex features is an example of this principle in action.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-3287408884195656229?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/3287408884195656229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=3287408884195656229' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3287408884195656229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/3287408884195656229'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/06/alternative-to-complex-feature-model.html' title='Alternative To A Complex Feature Model'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-260375601987216920</id><published>2007-05-29T17:03:00.000-07:00</published><updated>2007-05-29T17:05:59.251-07:00</updated><title type='text'>Is OpenJUMP Maturing?</title><content type='html'>Larry Becker made some interesting comments about &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; in a recent post to the JPP Developer Mailing List. I wanted to talk about his comments for a moment. Larry said:&lt;br /&gt;&lt;br /&gt;“I guess the important question we have to decide is "what's next?" Are we at the project stage that could be called "mature" or "maintenance,' or are there significant features that need to be added to ensure the long term viability of the project?  I suspect that the answer to that question depends on what people are using JUMP for.  For GIS researchers there is one answer, and for contractors who add value, there is another.  Fortunately there is enough overlap to keep cooperation going.”&lt;br /&gt;&lt;br /&gt;I never really considered this question. My first thought was, “Do you ever stop adding features?”. There is so much that I would like to do with &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt;. If don’t even know if I could list all of the features I’d like to see added.&lt;br /&gt;&lt;br /&gt;At the same time, I have come to appreciate the need for quality code and quality functionality in &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt;. It seems like our community occasionally suffers from the drawbacks of rapid development. (I know there are a lot of open source projects that probably wish they suffered from this problem.) I think part of the reason for this style of development with &lt;span style="color:#663366;"&gt;&lt;strong&gt;OpenJUMP&lt;/strong&gt; &lt;/span&gt;is the type of contributor’s that we have. I believe most of our contributors are paid by third parties to develop source code for &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt;. In most cases these customers are worried about functionality, and not necessarily things like good documentation, pretty source code, or even the implications of the code on OpenJUMP’s design a few months down the road. They just want it to work, and they want it to work now.&lt;br /&gt;&lt;br /&gt;There is nothing wrong with this type of development. Without it there wouldn’t be much happening to &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt;. We wouldn’t be fixing a lot of the bugs that have been fixed, or making some of the optimizations to &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP’s&lt;/span&gt;&lt;/strong&gt; performance.&lt;br /&gt;&lt;br /&gt;At the same time, I recognize the benefit of the slower development that comes from volunteers or organizations with a long term commitment to &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; and its future. These are the people that are worried about what changes will mean for &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; in a year, and they are willing to take on challenges with &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; that can’t be solved in just a few weeks time.&lt;br /&gt;&lt;br /&gt;Are the new features and improvements added by “rapid progress developers” important. Yes it is. But so are the slower and more stable contributions to the project. I don’t think we can say definitely that &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; is a mature program, and that will only be improving quality from here on out. I also don’t think we can take the opposite view and say that were mainly concerned with adding new features to &lt;strong&gt;&lt;span style="color:#663366;"&gt;OpenJUMP&lt;/span&gt;&lt;/strong&gt; as quickly as possible, and that other aspects of the program’s management aren’t very important.&lt;br /&gt;&lt;br /&gt;Some where we need to find a middle ground. I think the recent increase in developer activity has started some conversations that will help us find a middle ground. We’ve been talking about improving the quality of new and existing code, about better developer documentation, and even about an “unstable” branch in the &lt;span style="color:#663366;"&gt;&lt;strong&gt;OpenJUMP&lt;/strong&gt;&lt;/span&gt; CVS.&lt;br /&gt;&lt;br /&gt;These are all great conversations to be having. I think they must take place as we try to find a way for all of the different development teams to work together. In the end, I hope we will have a mature program that we can carefully add new features to.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;The Sunburned Surveyor&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-260375601987216920?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/260375601987216920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=260375601987216920' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/260375601987216920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/260375601987216920'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/05/is-openjump-maturing.html' title='Is OpenJUMP Maturing?'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4581187174086274804.post-1069233488443651643</id><published>2007-05-10T16:31:00.000-07:00</published><updated>2007-05-10T16:40:07.429-07:00</updated><title type='text'>Open Source - In TIME Magazine?</title><content type='html'>&lt;p style="font-family: verdana;font-family:verdana;"  class="MsoNormal"&gt;I read a interesting magazine &lt;a href="http://www.time.com/time/magazine/article/0,9171,1590440,00.html"&gt;article&lt;/a&gt; in that discussed the open source movement. This articles was actually in TIME Magazine. It was written by Justin Fox, the “Curious Capitalist”. This article was entitled &lt;span style="font-style: italic;"&gt;Getting Rich off Those Who Work for Free&lt;/span&gt;. Two of his comments in the article stood out to me. &lt;/p&gt;        &lt;p style="font-family: verdana;font-family:verdana;"  class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;The first comment that stood out was a quote from Yochai Benkler: &lt;span style="font-style: italic;"&gt;“The question for the past decade was, Is this for real? The question for the next half-decade is, how do you make this damned thing work?”&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;" face="verdana" class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Challenges To Getting Open Source To Work (Well)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It’s good to know that society, and to some degree business, has accepted open source software development as “real”. That is one battle free software advocates may not have to fight as fiercely. The tough challenge is identified in the second part of the quote. Getting open source software development “to work” is a lot harder than it sounds. (At least, getting it to work well is a lot harder than it sounds.) In fact, I know of at least one &lt;a href="http://producingoss.com/"&gt;book&lt;/a&gt; that has been written about this.&lt;/p&gt;    &lt;p style="font-family: verdana;" face="verdana" class="MsoNormal"&gt;I find that I’m continually presented with fresh challenges in administering an open source project. Like most managers or administrators I find many of these challenges are a result of my own personality flaws, and I must continually check myself for evidence of these flaws. I can do this in two important ways: &lt;/p&gt;    &lt;p style="font-family: verdana;" face="verdana" class="MsoNormal"&gt;&lt;span style="font-weight: bold;"&gt;[1] &lt;/span&gt;I Think twice before I send a message to the project mailing list. &lt;/p&gt;    &lt;p style="font-family: verdana;" class="MsoNormal"&gt;I try to ask myself these questions: &lt;span style="color: rgb(51, 204, 0); font-weight: bold;"&gt;Will anyone be offended by what I am saying? Is it possible that I might be misunderstood? Can I be more specific or provide more details so that this does not happen?&lt;/span&gt;&lt;/p&gt;    &lt;p style="font-family: verdana;" class="MsoNormal"&gt;&lt;span style="font-weight: bold;"&gt;[2] &lt;/span&gt;Listen to others complaints and criticisms of my work or activities. &lt;/p&gt;    &lt;p style="font-family: verdana;" class="MsoNormal"&gt;No likes to be criticized or critiqued, myself included. But it is important to listen to other developers and users involved in a project. Many, if not most of them, do not have the benefit of working with you face to face, and their comments give you great insight into there perception of you. &lt;span style="font-weight: bold;"&gt;You may not be a lazy windbag in real life, but you might sound like one to others.&lt;/span&gt; Be especially careful if you here different people making the same basic complaint.&lt;/p&gt;    &lt;p style="font-family: verdana;" class="MsoNormal"&gt;I’d like to talk about some other challenges that are unique to administering an open source project in anther blog post.&lt;/p&gt;    &lt;p style="font-family: verdana;" class="MsoNormal"&gt;Here is the second comment that really stood out to me:&lt;/p&gt;    &lt;p style="font-family: verdana;" class="MsoNormal"&gt;“Clever entrepreneurs and even established companies can profit from this volunteerism – but only if they don’t get too greedy. The key, Benkler says, is managing the marriage of money and nonmoney without making nonmoney feel like a sucker.”&lt;/p&gt;    &lt;p style="font-weight: bold; color: rgb(51, 204, 0); font-family: verdana;" class="MsoNormal"&gt;That is an excellent quote.&lt;/p&gt;    &lt;p style="font-family: verdana;" class="MsoNormal"&gt;Those seeking profit from the open source software development model shouldn’t forget that volunteers aren’t stupid and asking to be taken advantage of. If you’re trying to be sneaky or abusive people will catch on. Nothing kills an open source software development project or creates a fork of source code like heavy handed corporate management.&lt;br /&gt;&lt;/p&gt;&lt;p style="font-family: verdana;" class="MsoNormal"&gt;&lt;/p&gt;&lt;span style="font-weight: bold; font-family: verdana;font-family:verdana;" &gt;The Sunburned Surveyor&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4581187174086274804-1069233488443651643?l=openjump.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://openjump.blogspot.com/feeds/1069233488443651643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4581187174086274804&amp;postID=1069233488443651643' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1069233488443651643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4581187174086274804/posts/default/1069233488443651643'/><link rel='alternate' type='text/html' href='http://openjump.blogspot.com/2007/05/open-source-in-time-magazine.html' title='Open Source - In TIME Magazine?'/><author><name>The Sunburned Surveyor</name><uri>http://www.blogger.com/profile/01527239738579515112</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
