tag:blogger.com,1999:blog-45811871740862748042008-07-17T14:28:47.254-07:00The OpenJUMP Blog - Helping Others Leap Into Open Source GISThe Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comBlogger78125tag:blogger.com,1999:blog-4581187174086274804.post-9565146677391363672008-07-04T10:20:00.000-07:002008-07-04T10:24:30.183-07:00June OpenJUMP User Survey ResultsYou can download the results of the June OpenJUMP user survey at the following link:<br /><br /><a href="http://www.redefinedhorizons.com/shared_files/openjump_juneuser_survey_results.txt">Survey Results as Plain Text File</a><br /><br />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.<br /><br />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.<br /><br />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.<br /><br />The Sunburned SurveyorThe Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-46705647635336264432008-06-25T15:25:00.002-07:002008-06-25T15:28:16.875-07:00Testing Survey Monkey For June OpenJUMP User SurveyI 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:<br /><br /><a href="http://www.surveymonkey.com/s.aspx?sm=dwJadoUmQ7nAPANrxjO2xA_3d_3d">June OpenJUMP User Survey</a><br /><br />I'll publish the results at the end of the month.<br /><br />The Sunburned SurveyorThe Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-6862445478095468042008-06-25T15:25:00.001-07:002008-06-25T15:25:12.521-07:00The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-13273953024018438152008-06-25T08:11:00.000-07:002008-06-25T08:15:27.951-07:00Google Map Maker and Open Street MapI 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).<br /><br />You can read the OpenGeoData blog post here:<br /><br /><a href="http://www.opengeodata.org/?p=307">http://www.opengeodata.org/?p=307</a><br /><br />You can view, and try out, the Google Map Maker web application here:<br /><br /><a href="http://www.google.com/mapmaker">http://www.google.com/mapmaker</a><br /><br />The Sunburned SurveyorThe Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-46741569782331431912008-06-24T14:14:00.000-07:002008-06-24T14:17:19.869-07:00Where's TibetI 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.<br /><br />http://birdhouse.org/blog/2006/04/21/wheres-tibet/<br /><br />The Sunburned SurveyorThe Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-85974987342427249872008-04-28T13:01:00.001-07:002008-04-28T13:02:22.107-07:00New Release of JoddIgor has completed an update to the JODD library. You can download it here:<br /><br />http://sourceforge.net/project/downloading.php?group_id=87229&filesize=550900&filename=jodd-b305.zip&25488066<br /><br />As a reminder, <a href="http://jodd.sourceforge.net/">Jodd</a> is a library of utility code that provides an alternative to the Apache Jakarta Commons.<br /><br />The Sunburned SurveyorThe Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-2940832859695371512008-04-28T12:49:00.000-07:002008-04-28T12:53:26.497-07:00OpenJUMP Javadoc Link ChangeStefan 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:<br /><br />http://jump-pilot.sourceforge.net/javadoc/openjump_javadoc/<br /><br /><strong>The Sunburned Surveyor</strong>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-5688750990845627642008-04-18T06:17:00.000-07:002008-04-18T06:33:05.929-07:00Plug-In Dependency Plan ImplementedI 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. <br /><br />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.<br /><br />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.<br /><br />What changes were made to the core? I introduced a new package named <code>org.openjump.core.plugin.dependency</code>. This package contains two interfaces and a single class. Plug-in programmers will have their plug-ins implement the <code>initializationOfPlugInsComplete</code> method defined in the <code>PlugInDependencyParticipant</code> interface if they want to take advantage of the new plug-in dependency system in OpenJUMP. This method is passed an implementation of the <code>PlugInInitializationInfo</code> 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.<br /><br />Two small changes were made to the existing <code>PlugInManager</code> class to enable the plug-in dependency system. The <code>loadPlugInClasses</code> 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 <code>initializationOfPlugInsComplete</code> method.<br /><br />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.<br /><span style="font-weight:bold;"><br />The Sunburned Surveyor</span>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-75836268669708540432008-04-17T13:59:00.000-07:002008-04-17T14:12:13.756-07:00Making Progress On The YAMLResourceBundleI'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.<br /><br />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.<br /><br />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.<br /><br />After that I can begin work on the next official release of OpenJUMP!<br /><br /><strong>The Sunburned Surveyor</strong><br /><br />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.The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-73958376861857789742008-04-15T21:13:00.000-07:002008-04-15T21:23:22.822-07:00Applying "The Elements Of Java Style"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:<br /><br />#8: Don't use hard tabs.<br />#13: Capitalize only the first letter of acronyms when naming variables, classes, and methods.<br />#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.<br />#37: Use one line comments to explain implementation details.<br />#39: Document non-public members of your classes.<br />#43: Use code tags for identifiers, keywords, and constants.<br />#44: Wrap code examples in pre tags to preserve fromatting.<br />#45: Use more {@link} tags.<br />#60: When writing comments describe why something is being done, not what is being done.<br />#63: Use and establish keywords for unresolved issues.<br />#64: Label closing braces in highly nested control structures.<br />#67: Declare classes representing a fundamental data type as final.<br />#68: Build concrete types from primitive Java types or other concrete types.<br />#80: Always construct objects in a valid state.<br />#82: Use nested constructors to eliminate redundant code.<br />#85: Use return codes or special methods to indicate unexpected state changes.<br />#88: Use a finally block to release resources after a try/catch statement.<br />#91: Use assertions to catch logic errors in your code.<br />#92: Use assertions to test pre-conditions and post-conditions.<br /><br /><span style="font-weight: bold;">The Sunburned Surveyor</span>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-87376246056012455282008-04-02T13:01:00.000-07:002008-04-03T08:53:09.294-07:00Discovering deegreeI’ve been digging around just a little bit in the Javadoc for the <a href="http://www.deegree.org/">deegree</a> 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.<br /><br />What have I found so far?<br /><br />At least two (2) really cool things. Let me share them with you:<br /><br />[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 <a href="http://hillary.lat-lon.de/deegree2_buildresults/nightly_untested/api/org/deegree/crs/package-summary.html">crs</a> pacakage, <a href="http://hillary.lat-lon.de/deegree2_buildresults/nightly_untested/api/org/deegree/crs/coordinatesystems/package-summary.html">coordinatesystems</a> package and the <a href="http://hillary.lat-lon.de/deegree2_buildresults/nightly_untested/api/org/deegree/crs/transformations/package-summary.html">transformations</a> package.)<br /><br />[2] deegree has the ability to read, manipulate, and write image world files. (See the Javadoc for the <a href="http://hillary.lat-lon.de/deegree2_buildresults/nightly_untested/api/org/deegree/model/coverage/grid/WorldFile.html">WorldFile</a> class.)<br /><br />I hope to combine these two parts of deegree into a little GUI tool that allows the user to transform image world files.<br /><br />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 <span style="color:#6600cc;"><strong>OpenJUMP</strong></span> 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.<br /><br /><strong>The Sunburned Surveyor</strong>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-69394676381609836402008-03-14T12:03:00.001-07:002008-03-14T12:12:57.129-07:00Urbanites Spatial Sense and Spatial FamiliarityThe 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.)<br /><br />I grew up in the northern forests of the United States, so this perception of a cityscape is something new for me.<br /><br />Here are a couple of interesting things I have noticed about urbanites spatial sense:<br /><br />[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.<br /><br />[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.<br /><br />What does all this mean? I’m not sure, but I think it raises interesting questions.<br /><br />How does the layout of a city’s transportation network affect the spatial familiarity it urbanites have?<br /><br />Do urbanites in cities with active public transportation systems have a greater spatial familiarity with their city, or less spatial familiarity?<br /><br />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?<br /><br />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?<br /><br />The Sunburned SurveyorThe Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-15121103957529515212008-03-12T16:27:00.000-07:002008-03-12T16:32:59.678-07:00Latest Utility Code Extracted For JODD: CSV Files<p><span style="font-family:verdana;">I decided to make my first container for spatial relationships in <span style="color:#6600cc;">OpenJUMP</span> 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.<br /><br />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.</span></p><p><a href="http://surveyos.svn.sourceforge.net/viewvc/surveyos/java/jodd-ex/src/jodd/text/csv/"><span style="font-family:verdana;">http://surveyos.svn.sourceforge.net/viewvc/surveyos/java/jodd-ex/src/jodd/text/csv/</span></a></p><p><br /><strong><span style="font-family:verdana;">The Sunburned Surveyor</span></strong></p>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-61456359771548644732008-03-12T16:22:00.000-07:002008-03-12T16:26:58.424-07:00Update On My OpenJUMP Projects<span style="font-family:verdana;">I want to give an update on my three (3) main <span style="color:#6600cc;">OpenJUMP</span> projects. I hope to be making releases of all three in the next couple of months.<br /><br /></span><span style="font-family:verdana;"><strong>Super Select Tool<br /></strong><br />I’ve almost finished code that implements a ResourceBundle in </span><a href="http://en.wikipedia.org/wiki/YAML"><span style="font-family:verdana;">YAML</span></a><span style="font-family:verdana;"> 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 <span style="color:#6600cc;">OpenJUMP </span>and I plan on using it in all of my own <span style="color:#6600cc;">OpenJUMP</span> plug-ins. The Super Select Tool will be the first <span style="color:#6600cc;">OpenJUMP</span> plug-in to utilize this code for its I18N.<br /><br />This next release of the Super Select Tool will also feature a plug-in installer for <span style="color:#6600cc;">OpenJUMP </span>written entirely in Java. It presents the user with a Swing GUI to manage installation, updating, and removal of <span style="color:#6600cc;">OpenJUMP</span> plug-ins. It will be easily modified by other <span style="color:#6600cc;">OpenJUMP</span> plug-in programmers that wish to use it. I hope to have this release complete by the end of March.<br /></span><span style="font-family:verdana;"><strong><br />Spatial Relationship Support</strong><br /><br />I’ve been working on some code that will support spatial relationships in <span style="color:#6600cc;">OpenJUMP</span>. This code will be highlighted in a future </span><a href="http://www.osgeo.org/journal"><span style="font-family:verdana;">OSGeo Journal</span></a><span style="font-family:verdana;"> article. My initial release will only support one type of spatial relationship, one-to-one point-to-point spatial relationships.<br /><br />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 <span style="color:#6600cc;">OpenJUMP</span> 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.<br /><br />I hope to have this release ready by the end of April.<br /><br /><strong>Inkscape SVG Export</strong><br /><br />You can currently export SVG from <span style="color:#6600cc;">OpenJUMP</span>. I believe that this functionality uses the Apache Batik library to convert the Java2D graphics on the LayerViewPanel to SVG.<br /><br />I am working on code that will perform the conversion from a JTS Geometry object to an SVG object directly, without using </span><a href="http://xmlgraphics.apache.org/batik/"><span style="font-family:verdana;">Batik</span></a><span style="font-family:verdana;">. This will give <span style="color:#6600cc;">OpenJUMP</span> 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”.<br /><br />I also hope to allow the value of Feature attributes to be exported as text labels for an SVG document.<br /><br />All of this code is built to export SVG written specifically for the open source SVG editor </span><a href="http://www.inkscape.org/"><span style="font-family:verdana;">Inkscape</span></a><span style="font-family:verdana;">. It will take advantage of Inkscape add-ons to standard SVG.</span>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-630626272775578602008-03-07T12:35:00.000-08:002008-03-07T12:40:58.088-08:00Extracting Utility Code - Contributions To JODDI have begun a serious campaign to accomplish two “house cleaning tasks” in all of my Java programming projects:<br /><br /><strong><span style="color:#009900;">[1] Identify code in my existing methods that is suitable for extraction into utility methods.<br /><br />[2] Move suitable code into utility methods when writing new code.<br /></span></strong><br />My goal with these two tasks is to contribute my utility code into the <a href="http://jodd.sourceforge.net/">JODD</a> library. My utility code will be reviewed (and likely improved) by the JODD maintainer, Igor Spasic.<br /><br />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.<br /><br />What type of utility code have I managed to extract from my existing projects?<br /><br />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:<br /><br />jodd.collections.tools: Contains utility methods for members of the <a href="http://java.sun.com/docs/books/tutorial/collections/index.html">Java Collections Framework</a>.<br /><br /><strong>jodd.i18n:</strong> Contains utility methods for working with java.util.Locale objects and an alternative to the standard <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html">ResourceBundle</a> class. This alternative is backed by a <a href="http://www.yaml.org/">YAML</a> 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.)<br /><br /><strong>jodd.io.binary:</strong> Classes to ease the import and export of binary data. This includes an index that maps <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html">UUID</a> 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.<br /><br /><strong>jodd.objectutils:</strong> Contains methods and interfaces that I wish were in the <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.Object</a> class.<br /><br /><strong>jodd.text.parser:</strong> 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.<br /><br />j<strong>odd.text.yaml:</strong> This package contains some classes that make parsing and working with text data in YAML format easier.<br /><br />You can view and download all of the JODD-Ex code from the SurveyOs Subversion Repository:<br /><br />http://surveyos.svn.sourceforge.net/viewvc/surveyos/java/jodd-ex/<br /><br />I’ll post again soon on my efforts to test, improve, and integrate this utility code into the main JODD Library.<br /><strong><br />The Sunburned Surveyor</strong>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-42636898165850940402008-02-21T12:51:00.000-08:002008-02-21T12:56:22.013-08:00Sample Chapter On Domain Specific LanguagesManning 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.<br /><br />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:<br /><br /><a href="http://www.manning.com/rahien/">http://www.manning.com/rahien/</a><br /><br />The Sunburned Surveyor (A.K.A. - Landon Blake)The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-38746291246153252442008-02-15T11:21:00.000-08:002008-02-15T11:24:58.421-08:00Super Select Tool Release Delayed<span style="font-family:verdana;">I ran into some trouble with <span style="color:#6600cc;">OpenJUMP’s</span> 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 <span style="color:#6600cc;">OpenJUMP</span> I18N wiki page got me to thinking about other options for I18N in <span style="color:#6600cc;">OpenJUMP</span>. I’ve take a closer look at Java’s <em>ResourceBundle</em> class and I like the basic concept of using the class for I18N in <span style="color:#6600cc;">OpenJUMP</span>.<br /><br />I’ve decided to implement a class that is very similar to the <em>ResourcBundle</em> class for use in the Super Select Tool and my other plug-ins for <span style="color:#6600cc;">OpenJUMP</span>. This class will differ from the standard <em>ResourceBundle</em> class in at least three (3) of important ways:<br /><br />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 <em>ResourceBundle</em> class and will give the programmer control over where exactly to find the translation files for use in the <em>ResourceBundle</em>.<br /><br />The ResourceBundle will only allow access to translated Strings, and not other types of objects. This will simplify the classes use.<br /><br />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.<br /><br />This class will be called <em>YAMLResourceBundle</em>. It will have at least two (2) support classes, <em>YAMLResourceBundleFactory</em> and <em>YAMLResourceBundleUtilities</em>. 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.</span><br /><br /><span style="font-family:verdana;">The Sunburned Surveyor (A.K.A. - Landon Blake)</span>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-34105183842565784602008-02-14T12:05:00.000-08:002008-02-14T12:19:49.310-08:00Weekly Builds of OpenJUMP Now Available At Redefined HorizonsThe 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.)<br /><br />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.<br /><br />You can download the files here:<br /><a href="http://www.redefinedhorizons.com/oj_weekly_build/">http://www.redefinedhorizons.com/oj_weekly_build/</a><br /><br />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.<br /><br /><strong>The Sunburned Surveyor</strong>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-10450167394294182002008-01-21T12:53:00.000-08:002008-01-21T12:56:17.206-08:00Podcasting? Maybe...I bought a book on podcasting this past weekend. I also bought a microphone and started messing around with Audacity.<br /><br />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.<br /><br /><strong>The Sunburned Surveyor</strong>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-83718412297093339162008-01-21T12:39:00.000-08:002008-01-21T12:52:17.744-08:00Many irons in the fire...I’ve been working on a few different things in the last couple of months, and I thought I should provide an update.<br /><br /><strong><br />OpenJUMP:</strong><br />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.<br /><br />The only remaining internationalization work on the Super Select tool is the context sensitive help and the tooltips for the plug-in's toolbar.<br /><br />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.<br /><br /><strong><br />OSGeo:</strong><br />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.<br /><br /><a href=” http://wiki.osgeo.org/index.php/Starter_Dictionary”> Starter Dictionary </a><br /><br /><strong>SurveyOS Project:</strong><br />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.<br /><br />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.<br /><br />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.The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-61075164535638816412008-01-07T07:36:00.000-08:002008-01-07T07:40:49.699-08:00Geodata LicensingRichard 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.<br /><br />http://www.opengeodata.org/?p=262<br /><br />I recommend the blog post to anyone interested in geodata licensing.The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-80298908866322000642007-12-13T12:36:00.000-08:002007-12-13T12:44:45.563-08:00Time In GIS (Survey Control Points And Monuments)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?<br /><br />In this blog post I want to do the following:<br /><br /><em><span style="color:#33cc00;"><strong>[1]</strong> Briefly explain how this topic came up during my design.</span></em><br /><em><span style="color:#33cc00;"><br /><strong>[2]</strong> Point out some interesting tidbits I found about working with “temporal data” or data with a time component in GIS.</span></em><br /><br /><strong>How I Found Time</strong><br /><br />In the current version of my Survey Control GIS Data Model a <strong><span style="color:#006600;">Survey Control Point</span></strong> 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 <span style="color:#006600;"><strong>Monument</strong></span>. 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.<br /><br />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 <em>Date Installed</em>, <em>Date Destroyed</em>, and <em>Date Reset</em>. After some thought I didn’t really like this idea, because I would end up with Monument features that had valid <em>Date Installed</em> values, but null <em>Date Destroyed</em> and <em>Date Reset</em> 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.<br /><br /><strong>An Article On Time And GIS</strong><br /><br />It turns out someone wrote a whole <a href="http://www.time-gis.de/">book</a> 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…)<br /><br />Still, I found an <a href="http://gis.esri.com/library/userconf/europroc96/PAPERS/PN35/PN35F.HTM">article</a> 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.<br /></span><br /><strong>Tidbit One (1):</strong><br /><br /><span style="color:#33cc00;">“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.”<br /></span><br />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 <a href="http://books.google.com/books?id=D_CP7kOyqRYC&amp;pg=PA190&amp;lpg=PA190&amp;dq=gml+3+time+slice&amp;source=web&amp;ots=7zqwSl69B0&amp;sig=0p0quHfWbdm9hx779bLnisRd55c">book</a> about GML 3.<br /><br />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.<br /><br />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.<br /><br /><strong>Tidbit Two (2):</strong><br /><br />The second tidbit helped me identify some of the questions I was trying to answer about time and my two (2) features.<br /><br />Here are some of the questions that were listed in the article:<br /><span style="color:#33cc00;"><br />Where and when did change occur?<br />What types of change occurred?<br />What is the rate of this change?<br />What is the <a href="http://dictionary.reference.com/browse/periodicity">periodicity</a> of this change?<br />How much did it change?<br />What changed?</span><br /><br /><strong>Tidbit Three (3):</strong><br /><br />The article also identified some of things we are trying to find and/or understand when we work with temporal data in a GIS:<br /><span style="color:#33cc00;"><br />The existence or absence of temporal patterns.<br />The identification of trends.<br />Understanding processes that occur over time.</span><br /><span style="color:#33cc00;"></span><br /><strong>A Solution Borrowed From Object-Oriented Programming</strong><br /><br />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.)<br /><br />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.<br /><br />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.)<br /><br />What I really wanted was to included events in my GIS data model. I needed the following events:<br /><br /><span style="color:#33cc00;">Monument Installed Event<br />Monument Damaged Event<br />Monument Destroyed Event<br />Monument Reset Event<br />Monument Repaired Event</span><br /><br />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.<br /><br />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.<br /><br />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.<br /><strong><br />The Sunburned Surveyor</strong>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-43556751730408948662007-12-13T11:40:00.000-08:002007-12-13T11:42:23.753-08:00Free JavaI stumbled upon an interesting article about the "free Java" effort. <span style="color:#6600cc;"><strong>OpenJUMP</strong></span> 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:<br /><br /><a href="http://www.linux.com/feature/122586">http://www.linux.com/feature/122586</a><br /><br />The Sunburned SurveyorThe Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-9485013230747115012007-12-10T12:44:00.000-08:002007-12-10T12:46:27.449-08:00OpenJUMP Javadoc Now OnlineI put the javadoc for OpenJUMP online. You can access it here:<br /><br /><a href="http://jump-pilot.sourceforge.net/openjump_javadoc/">http://jump-pilot.sourceforge.net/openjump_javadoc/</a><br /><br />I'll try to keep it up-to-date with the Javadoc from all official releases.<br /><br />The Sunburned SurveyorThe Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.comtag:blogger.com,1999:blog-4581187174086274804.post-53145751562274263902007-12-10T12:38:00.000-08:002007-12-10T12:43:47.628-08:00Open Formats, Open Standards, and Geodata LicensesThere 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:<br /><br />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.<br /><br /><a href="http://www.opencontentlawyer.com/open-data/">http://www.opencontentlawyer.com/open-data/</a><br /><br />Here is a web site that contains an interesting description of the difference between open standards and open formats:<br /><br /><a href="http://opendefinition.org/open_format_definition">http://opendefinition.org/open_format_definition</a><br /><br />It says:<br /><br /><p>An open format is not: </p><ul><li><br />Encumbered by patents. </li><li><br />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) </li><li><br />tied to a particular software implementation (ie. it should be practical to have multiple software implementations) </li></ul><p><br />An open format is: </p><ul><li><br />Well and completely documented sufficient to implement a safely conformant reader/writer from scratch. </li><li><br />Defined in documentation that is freely redistributable (though the document may be under a license that doesn't allow changes to the spec document) </li><li><br />Software language independent (no dependencies on language specific components like "python pickling") </li></ul><p><br />Is is desirable that an open format: </p><ul><li><br />have an open source reference implementation for reading and writing. </li></ul>The Sunburned Surveyorhttp://www.blogger.com/profile/01527239738579515112noreply@blogger.com