<?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'><id>tag:blogger.com,1999:blog-21167013</id><updated>2009-10-22T06:40:19.539-07:00</updated><title type='text'>EarthBrowser</title><subtitle type='html'>Thoughts on the intersection of software development and earth science.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default?start-index=26&amp;max-results=25'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>76</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-21167013.post-1629288593599662608</id><published>2009-05-14T15:32:00.000-07:00</published><updated>2009-05-14T15:59:57.928-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Zoltar'/><title type='text'>Zoltar Available on iTunes</title><content type='html'>&lt;center&gt;&lt;a href="http://www.superdeadly.com/zoltar/"&gt;&lt;img border="0" src="http://www.superdeadly.com/media/images/zdivining.jpg"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;a href="itms://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=314453344&amp;mt=8&amp;s=143441"&gt;&lt;img border="0" src="http://www.superdeadly.com/media/images/App_Store_badge_60.png"/&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;Actually it's been available for about a week now but Apple didn't list it. I've run into a big problem with the iTunes store that a lot of &lt;a href="http://www.iphonedevsdk.com/forum/iphone-sdk-development/4320-appstore-wait-thread-30.html"&gt;other developers have been having&lt;/a&gt;. The result is that I've only had a few downloads, and Zoltar is much higher quality than most apps I see out there.&lt;br /&gt;&lt;br /&gt;I hate to ask, but for anyone who follows this blog and has an iPhone, please go to the iTunes store and give Zoltar a great review. I'll buy you a beer the next time I see you!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img border="0" src="http://www.superdeadly.com/media/images/salvator.jpeg"/&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-1629288593599662608?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/1629288593599662608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=1629288593599662608' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/1629288593599662608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/1629288593599662608'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/05/zoltar-available-on-itunes.html' title='Zoltar Available on iTunes'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-6705924913133237888</id><published>2009-05-14T13:45:00.000-07:00</published><updated>2009-05-14T13:45:00.470-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQLite'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>SQLite C++ wrapper, so you don't have to</title><content type='html'>SQLite is great. It is small, fast and easy to set up. However, if you are writing software that needs it, you're in for a bit of learning. You will need to learn what API calls to make and when to make them, usually by going over example code and using trial and error. I am introducing an open source SQLite C++ wrapper that will allow you to use the database without having to learn the SQLite API. It may save you several days of work.&lt;br /&gt;&lt;br /&gt;The wrapper is just two C++ files, has a MIT style license and is platform independent. You will still need to link in SQLite 3.0 and learn the quirky SQLite &lt;a href="http://www.sqlite.org/lang.html"&gt;SQL syntax&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can download it &lt;a href="http://www.superdeadly.com/media/downloads/sdsqlite.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creating a database and table&lt;/b&gt;&lt;pre name="code" class="c++"&gt;#include "sdsqlite.h"&lt;br /&gt;&lt;br /&gt;void create_db(void)&lt;br /&gt;{&lt;br /&gt;   sd::sqlite database("mydb.db");&lt;br /&gt;   database &lt;&lt; "create table if not exists work (first_name text, last_name text, hours real)";&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Database insertion&lt;/b&gt;&lt;pre name="code" class="c++"&gt;#include "sdsqlite.h"&lt;br /&gt;&lt;br /&gt;struct work_data { char* first; char* last; float hours; };&lt;br /&gt;&lt;br /&gt;work_data wdata[] = {&lt;br /&gt;   {"Joe", "Smith", 2.5},&lt;br /&gt;   ...&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void insert_rows(void)&lt;br /&gt;{&lt;br /&gt;   try&lt;br /&gt;   {&lt;br /&gt;      sd::sqlite database("mydb.db");   // open the db with the table already created&lt;br /&gt;      &lt;br /&gt;      sd::sql insert_query(database);   // build an sql query&lt;br /&gt;      insert_query &lt;&lt; "insert into work (first_name, last_name, hours) VALUES(?, ?, ?)";&lt;br /&gt;      &lt;br /&gt;      database &lt;&lt; "begin transaction";// create a transaction for speed&lt;br /&gt;      &lt;br /&gt;      // insert data (sdsqlite will auto-detect data type and execure query)&lt;br /&gt;      for(int i=0;i&amp;lt;sizeof(wdata)/sizeof(work_data);++i)&lt;br /&gt;         insert_query &lt;&lt; wdata[i].first &lt;&lt; wdata[i].last &lt;&lt; wdata[i].hours;&lt;br /&gt;         &lt;br /&gt;      database &lt;&lt; "commit transaction";// complete transaction&lt;br /&gt;   }&lt;br /&gt;   catch(sd::db_error&amp; err)&lt;br /&gt;   {&lt;br /&gt;      // do something with error&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Database extraction&lt;/b&gt;&lt;pre name="code" class="c++"&gt;#include "sdsqlite.h"&lt;br /&gt;&lt;br /&gt;void extract_name(const std::string&amp; name)&lt;br /&gt;{&lt;br /&gt;   try&lt;br /&gt;   {&lt;br /&gt;      sd::sqlite database("mydb.db");   // open the db with the table already created&lt;br /&gt;      &lt;br /&gt;      // select all names that begin with the contents of the "name" variable&lt;br /&gt;      sd::sql selquery(database);&lt;br /&gt;      selquery &lt;&lt; "select first_name, last_name, hours from work where first_name like ?" &lt;&lt; name+"%";&lt;br /&gt;      &lt;br /&gt;      // extract the matching rows&lt;br /&gt;      float hours;&lt;br /&gt;      std::string first, last;&lt;br /&gt;      while(selquery.step())&lt;br /&gt;      {&lt;br /&gt;         selquery &gt;&gt;   first &gt;&gt; last &gt;&gt; hours;&lt;br /&gt;         &lt;br /&gt;         // do something with the data&lt;br /&gt;      }   &lt;br /&gt;   }&lt;br /&gt;   catch(sd::db_error&amp; err)&lt;br /&gt;   {&lt;br /&gt;      // do something with error&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-6705924913133237888?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/6705924913133237888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=6705924913133237888' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/6705924913133237888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/6705924913133237888'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/05/sqlite-c-wrapper-so-you-dont-have-to.html' title='SQLite C++ wrapper, so you don&apos;t have to'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-9212997974570153339</id><published>2009-04-30T09:00:00.000-07:00</published><updated>2009-04-30T09:00:00.710-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Zoltar'/><title type='text'>Zoltar the iPhone Fortune Teller</title><content type='html'>I've been taking a break from EarthBrowser for the past couple of months and working on an iPhone app. The result is Zoltar the Fortune Teller.&lt;br /&gt;&lt;br /&gt;Apple is now reviewing it for release in the iTunes store. I've heard it takes anywhere from a couple of days to several weeks if they don't send it back for fixes. Hopefully it will be available in the next week or so. I'll do another post when it is up.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://www.superdeadly.com/media/images/zcards.jpg"/&gt;&lt;img src="http://www.superdeadly.com/media/images/zdivining.jpg"/&gt;&lt;img src="http://www.superdeadly.com/media/images/zdivininglow.jpg"/&gt;&lt;/center&gt;&lt;br /&gt;You select a card from one of five categories and Zoltar will do a divination on his magic crystal ball.  He then will speak your fortune to you from a set of over 100 fortunes based in part on the minor arcana of the Tarot deck. You can rotate him around and zoom in close with a swipe or pinch on the iPhone screen. I created the music and am the voice of Zoltar and put some spooky echo effects so it sounds pretty cool.&lt;br /&gt;&lt;br /&gt;It was a really fun project which allowed me to test the limits of the iPhone hardware. The model of Zoltar was created by my cousin in 3d Studio Max and has over 10,000 polygons. Even so it renders at about 30 frames per second which is really good for such a small processor.&lt;br /&gt;&lt;br /&gt;The 3d game engine that powers EarthBrowser was originally ported from C++/OpenGL into ActionScript. Since then I have made many improvements and I've re-ported it back to C++. Have I said &lt;a href="http://blog.earthbrowser.com/2009/03/iphone-vs-flash-player-smackdown.html"&gt;lately&lt;/a&gt; how much I like OpenGL since I don't have to write my own 3d graphics library like I do in Flash? I built bindings into the &lt;a href="http://www.lua.org"&gt;Lua scripting language&lt;/a&gt; for ease of development. Lua has a strange syntax but it is lightweight and fast and gets the job done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-9212997974570153339?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/9212997974570153339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=9212997974570153339' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/9212997974570153339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/9212997974570153339'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/04/zoltar-iphone-fortune-teller.html' title='Zoltar the iPhone Fortune Teller'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-3264251603424008930</id><published>2009-03-12T11:55:00.001-07:00</published><updated>2009-03-12T11:58:45.689-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>iPhone OS 3.0</title><content type='html'>Engadget is &lt;a href="http://www.engadget.com/2009/03/12/iphone-os-3-0-is-coming-march-17th/"&gt;reporting&lt;/a&gt; that version 3.0 of the iPhone OS will be announced on March 17th.&lt;br /&gt;&lt;br /&gt;I'm excited to hear what is going to come out in the new OS, but rumors are that there will be a micropayments model, which if true will be huge. However it seems to me that typing in your iTunes password for each micropayment would be a bit too unpleasant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-3264251603424008930?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/3264251603424008930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=3264251603424008930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/3264251603424008930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/3264251603424008930'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/03/iphone-os-30.html' title='iPhone OS 3.0'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-2938129655686259324</id><published>2009-03-11T14:30:00.000-07:00</published><updated>2009-03-11T14:44:11.666-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>iPhone vs. Flash Player smackdown</title><content type='html'>Developing for the closed iPhone ecosystem is similar in many ways to Flash development. The graphics capabilities alone make it a superior platform. It doesn't have to be that way. I'm proposing three bold moves that would enable Flash to extend it's current lead in the RIA space and attract even more developers to the platform.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1) Explicit 3D graphics card support&lt;/b&gt;&lt;br /&gt;Adobe can sandbox it all they like, but access to native high speed 3D rendering is one of the things that is making the iPhone such a hot platform. All that is really needed is to be able to pass on projection matrices, interleaved vertex buffer data, lighting and material settings to a graphics card and let it do it's thing. Make it detectable so developers can have a fallback if it's not available. Instantly web games become 1000% more possible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2) A Javascript bridge a mile wide&lt;/b&gt;&lt;br /&gt;ExternalInterface can get you where you need to go, with a lot of effort. Can you make it easier for us Adobe? I've taken the FABridge code, fixed some bugs (try passing the string \" from JS), and enabled the EarthBrowser plugin to be completely scriptable in Javascript. If Adobe could sit a few people down and nail down support for all browsers (including using VBScript to fake property getters and setters in IE7) then you could in effect create any Flash app completely in Javascript. This would open up a whole new world of possibilities for developers to create on the fly code that wouldn't have to be precompiled into a SWF. This would be HUGE.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3) An app store like iTunes&lt;/b&gt;&lt;br /&gt;Along with great hardware, sleek design and serious developer tools the iPhone has a way for developers to monetize their creations. Adobe should do this for AIR apps and Flash plugins. Make a marketplace of website widgets and AIR apps that can be purchased for a few bucks. I have to administer my own servers and integrate a purchasing system with credit card companies, renew and manage a https certificates and deal with a lot of technical support not directly related to my software. It is a very small percentage of developers that are willing and able to spend the kind of time and money that it takes in order to sell stuff online. Apple has managed to create a system that does all of the heavy lifting of e-commerce and takes a healthy 30% cut for itself, but it's worth every percentage point.&lt;br /&gt;&lt;br /&gt;Adobe has a spectacular platform that has a lot of room to grow. Flash market penetration is unreal and it is time for Adobe to get out of their overly cautious mindset and really create something new to help us developers create. Hire me, I'll direct the development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-2938129655686259324?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/2938129655686259324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=2938129655686259324' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/2938129655686259324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/2938129655686259324'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/03/iphone-vs-flash-player-smackdown.html' title='iPhone vs. Flash Player smackdown'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-6329634221328704156</id><published>2009-03-03T08:54:00.000-08:00</published><updated>2009-03-03T09:06:08.833-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Where 2.0'/><title type='text'>Turned down for Where 2.0</title><content type='html'>I'm a little disappointed that my Where 2.0 proposal was rejected. I thought that demonstrating a virtual globe that supports KML and Shapefiles, can do coordinate projections on large datasets and be completely customized with Javascript and embedded on any website would be somewhat interesting. I find it interesting.&lt;br /&gt;&lt;br /&gt;They have some interesting talks planned to be sure, I suppose if I were a sponsoring corporation they might have taken me more seriously. At least they offered me a 25% discount on the $1000+ registration fee to attend, but I don't think I'll take them up on that. &lt;br /&gt;&lt;br /&gt;Oh well, back to my iPhone app that has nothing to do with geospatial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-6329634221328704156?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/6329634221328704156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=6329634221328704156' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/6329634221328704156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/6329634221328704156'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/03/turned-down-for-where-20.html' title='Turned down for Where 2.0'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-4082924139893908183</id><published>2009-02-10T12:02:00.000-08:00</published><updated>2009-02-10T12:22:39.281-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C++ vs AS3</title><content type='html'>I've been working on an iPhone app for the past week or so and I'm pretty happy to be coding in C++ again I must say. C++ is not perfect by any means, in fact strong binding is a constant thorn in my side after the free and easy ways of Actionscript. Here are a few pros and cons that immediately stood out in moving between the two. &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;b&gt;Pro C++:&lt;/b&gt;&lt;li&gt;Variable declaration ("int x" is much better than "var x:int")&lt;/li&gt;&lt;li&gt;Enums&lt;/li&gt;&lt;li&gt;Templates in general and template meta-programming specifically&lt;/li&gt;&lt;li&gt;#defines and conditional compilation&lt;/li&gt;&lt;li&gt;Speed of execution&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;b&gt;Pro Actionscript 3:&lt;/b&gt;&lt;li&gt;Dynamic typing&lt;/li&gt;&lt;li&gt;Static constants of any type&lt;/li&gt;&lt;li&gt;Built in associative arrays&lt;/li&gt;&lt;li&gt;Built in UTF8 string support&lt;/li&gt;&lt;li&gt;Size of compiled code&lt;/li&gt;&lt;li&gt;Platform neutrality&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;In general I prefer C++. Perhaps because it's closer to the hardware and more things are possible, but you really have to know what you are doing to not spin your wheels too much. I *really* miss built in associative arrays and the awesome set of standard objects available in Flash however.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-4082924139893908183?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/4082924139893908183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=4082924139893908183' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/4082924139893908183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/4082924139893908183'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/02/c-vs-as3.html' title='C++ vs AS3'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-6235027815474611377</id><published>2009-02-03T09:30:00.000-08:00</published><updated>2009-02-03T09:30:10.234-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KML'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Earth'/><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><title type='text'>New KML extensions?</title><content type='html'>There appears to be a few new &lt;a href="http://code.google.com/apis/kml/documentation/kmlreference.html#kmlextensions"&gt;KML extensions&lt;/a&gt; with the new &lt;a href="http://earth.google.com/"&gt;Google Earth 5.0&lt;/a&gt; release. As someone who has to keep up with my own implementation of the KML standard, this is of great interest to me. The new extensions seem to mostly be geared toward creating animated tours, a laudable goal. I think that is a great improvement in providing the ability for everyone to create more eye candy using GE. For some reason they just added a new namespace "gx" rather than putting out a new version of the spec. I guess this makes sense since the core functionality didn't change much and they can roll the new elements into the main spec in a future version.&lt;br /&gt;&lt;br /&gt;The &amp;lt;gx:TimeSpan&amp;gt; and &amp;lt;gx:TimeStamp&amp;gt; tags are what most interest me. The spec quotes that they are merely copies of their standard KML namesakes, but that they "allow for the inclusion of time values in AbstractViews" and "Time values are used to control historical imagery, sunlight, and visibility of time-stamped Features".  I don't know why they had to add copies in a different namespace when they could have just allowed the non gx versions to be included in the &amp;lt;Camera&amp;gt; and &amp;lt;LookAt&amp;gt; tags. What I think this all means is that you can now control the timeline of visible features using the &amp;lt;Camera&amp;gt; tag. A huge improvement. however I've spent a year or two going down the road of trying to create dynamic animations using static control values to hardwired algorithms. It will get you down the road a little ways, but it is a totally inflexible and brittle way of defining 3D animation.  &lt;br /&gt;&lt;br /&gt;I am a little disappointed that they didn't include time coordinates as &lt;a href="http://blog.earthbrowser.com/2008/07/earthbrowser-presentation-at-google.html"&gt;I suggested last summer&lt;/a&gt;. I think that I mentioned at the time that I had no interest in spending time getting that feature through the appropriate committees to make it happen, but I think that at this point I probably would, even though I have less time available now. The time coordinates I proposed, based on modified julian date, are tremendously useful. &lt;br /&gt;&lt;br /&gt;As an example, the new &lt;a href="http://www.earthbrowser.com/tracker/"&gt;EarthBrowser Site Tracker&lt;/a&gt; uses them to define the animated visitor hits. Basically each visitor hit looks like this:&lt;br /&gt;&lt;pre&gt;&amp;lt;Placemark&amp;gt;&lt;br /&gt;    &amp;lt;name&amp;gt;...&amp;lt;/name&amp;gt;&lt;br /&gt;    &amp;lt;LineString&amp;gt;&lt;br /&gt;        &amp;lt;coordinates&amp;gt;coord0 coord1 coord2 ...&amp;lt;/coordinates&amp;gt;&lt;br /&gt;        &amp;lt;ebr:time&amp;gt;mjd0 mjd1 mjd2 ...&amp;lt;/ebr:time&amp;gt;&lt;br /&gt;        &amp;lt;ebr:fade&amp;gt;.0625&amp;lt;/ebr:fade&amp;gt;&lt;br /&gt;    &amp;lt;/LineString&amp;gt;&lt;br /&gt;&amp;lt;/Placemark&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The interesting parts are the &amp;lt;ebr:time&amp;gt; and &amp;lt;ebr:fade&amp;gt; tags. What they specify are the modified julian date time value at which each coordinate in the LineString occurs. This provides an easy way to animate a single placemark by using linear interpolation to calculate intermediate locations for smooth animation and also provides the ability to show a cool time based fade effect. The &amp;lt;ebr:fade&amp;gt; specifies that after 1.5 hours the line trace should fade. I use these two KML extensions  with the Satellite orbits in the latest version of EarthBrowser and also in the site tracker tool. To do something roughly equivalent in current KML, you would have to provide thousands of Placemarks each with their own TimeSpan and geometry, there would be no smooth animation or fade effect and it would take many megabytes for each placemark. With these two simple extensions I can display some really interesting features with effects in a single placemark with a very small footprint. If anyone from the OGC or Google is interested in contacting me about helping these extensions get through to the next spec, please post a comment or send me an email.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-6235027815474611377?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/6235027815474611377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=6235027815474611377' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/6235027815474611377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/6235027815474611377'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/02/new-kml-extensions.html' title='New KML extensions?'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-5745772148037650261</id><published>2009-02-03T08:20:00.000-08:00</published><updated>2009-02-03T08:28:50.052-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><title type='text'>Interesting EarthBrowser Site Tracker discoveries</title><content type='html'>Last week I released the &lt;a href="http://www.earthbrowser.com/tracker/"&gt;EarthBrowser Site Tracker&lt;/a&gt;, a free tool that gives an animated 3D global view of traffic to any website. I've been monitoring my own site traffic with it and have noticed some very interesting trends about my site, and perhaps some insight into the people who visit. It seems that I get slightly more European visitors than US visitors. Perhaps that is because EarthBrowser is in about 15 different languages and a lot of software is only in English. More people seem to visit a few hours after daybreak, perhaps when they get to their jobs, but in EuropeI've noticed that there seems to be a burst of visitors about an hour after nightfall.&lt;br /&gt;&lt;br /&gt;The code was pretty simple and written in roughly 100 lines of Javascript which basically puts up the time slider, zoom scroller and loads the data file. I have some plans on improving the actual analysis and visualization of the data. I'd like to do trends such as visitors per country, browser language preferences, top countries and states and other fairly simple breakdowns of generic statistical data. But that will have to wait for a month or so, as will the open Javascript/Flex EarthBrowser API.&lt;br /&gt;&lt;br /&gt;I am learning yet another new platform to program on. I got myself an iPod Touch, which is like an iPhone without the phone. I've just started porting some of my OpenGL framework from a mothballed version of EarthBrowser to OpenGL ES for a couple of new projects, one I'm doing as a contract. The new apps are really cool and a lot of people are going to love them. I'm not so impressed with most of the iPhone apps I've seen so far sadly, Google Earth is by far the best. Perhaps it is just hard to find good apps when there are tens of thousands out there, hopefully mine will be compelling enough to get some attention.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-5745772148037650261?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/5745772148037650261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=5745772148037650261' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/5745772148037650261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/5745772148037650261'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/02/interesting-earthbrowser-site-tracker.html' title='Interesting EarthBrowser Site Tracker discoveries'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-1012110689549320454</id><published>2009-01-30T06:00:00.000-08:00</published><updated>2009-01-29T20:25:23.270-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Site Tracker'/><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><title type='text'>Free EarthBrowser 3D website traffic visualizer</title><content type='html'>Introducing the &lt;a href="http://www.earthbrowser.com/tracker/"&gt;EarthBrowser Site Tracker&lt;/a&gt;. It shows where and when people visit your site from all over the world. Play your traffic back and forth with the timeline slider, zoom in and out and see aggregated website stats that are updated every 10 minutes.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href="http://www.earthbrowser.com/tracker/"&gt;&lt;img src="http://www.earthbrowser.com/media/images/ebtracker.jpg"/&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;It's free to put on any website, just customize it and copy/paste some text into your HTML and you are up and running, no signup necessary.&lt;br /&gt;&lt;br /&gt;Here's a live version:&lt;br /&gt;&lt;center&gt;&lt;object width="400" height="250"&gt;&lt;param name="movie" value="http://api.earthbrowser.com/sitetracker/?siteid=demo&amp;color=499A13&amp;hours=24&amp;maxcount=1000&amp;showtime=true&amp;showstats=true"/&gt;&lt;param name="allowscriptaccess" value="always"/&gt;&lt;embed src="http://api.earthbrowser.com/sitetracker/?siteid=demo&amp;color=499A13&amp;hours=24&amp;maxcount=1000&amp;showtime=true&amp;showstats=true" type="application/x-shockwave-flash" allowscriptaccess="always" width="400" height="250"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;br /&gt;This is one of many new free tools that I'm going to be releasing that showcase the upcoming EarthBrowser Flash plugin. I'll be putting out another nice embed tool that will be customizable to show any set of orbiting satellites and will zoom from one to the next.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-1012110689549320454?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/1012110689549320454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=1012110689549320454' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/1012110689549320454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/1012110689549320454'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/01/free-earthbrowser-3d-website-traffic.html' title='Free EarthBrowser 3D website traffic visualizer'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-5068936414431550151</id><published>2009-01-23T14:45:00.000-08:00</published><updated>2009-01-23T14:54:50.198-08:00</updated><title type='text'>Is anyone else tired of the GIS Inauguration tie-ins?</title><content type='html'>Microsoft, Google, GeoEye, DigitalGlobe, AEgis, CNN and more have all jumped on the bandwagon. Shameless event tie-in marketing. Let's think of some other tremendously useful things to do with GIS. &lt;br /&gt;&lt;br /&gt;What the world needs now are more Santa trackers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-5068936414431550151?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/5068936414431550151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=5068936414431550151' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/5068936414431550151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/5068936414431550151'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/01/is-anyone-else-tired-of-gis.html' title='Is anyone else tired of the GIS Inauguration tie-ins?'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-4279414328938525097</id><published>2009-01-22T12:45:00.000-08:00</published><updated>2009-03-10T09:28:20.393-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><title type='text'>Simple solution for MOUSE_WHEEL events on Mac</title><content type='html'>Flash does not support the MOUSE_WHEEL event for Macs. I was hoping it would be supported in version 9, and again in Flash 10 but I'm still waiting. There have been a number of solutions out there, and the best one I've found is &lt;a href="http://blog.pixelbreaker.com/flash/as30-mousewheel-on-mac-os-x/"&gt;Gabriel Bucknall's MacMouseWheel&lt;/a&gt; code. It consists of an actionscript class and some javascript code that will work together to have the browser pass the mouse wheel events to your Flash code.&lt;br /&gt;&lt;br /&gt;After reading an awesome article by Peter McBride called &lt;a href="http://www.actionscript.org/resources/articles/745/1/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page1.html"&gt;JavaScript and VBScript Injection in ActionScript 3&lt;/a&gt;, I've put together a single as3 class that fixes the MOUSE_WHEEL problem without the need for any external javascript code. It works on Safari, FireFox and Opera and probably Chrome when it becomes available on the Mac.&lt;br /&gt;&lt;br /&gt;The trick was to inject the mouse handling javascript code using ExternalInterface. The code finds the DOM node for itself, intercepts and passes the mouse wheel events which are then disributed to the current InteractiveObject under the cursor.&lt;br /&gt;&lt;br /&gt;An example of initialization would be:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class awesomeapp extends Sprite {&lt;br /&gt;  public function awesomeapp() {&lt;br /&gt;    addEventListener(Event.ADDED_TO_STAGE, stage_init);&lt;br /&gt;  }&lt;br /&gt;  private function stage_init(e:Event):void {&lt;br /&gt;    MacMouseWheelHandler.init(stage);&lt;br /&gt;    addEventListener(MouseEvent.MOUSE_WHEEL, wheel_event);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://www.earthbrowser.com/media/downloads/MacMouseWheelHandler.zip"&gt;Download the source&lt;/a&gt; (MIT license).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-4279414328938525097?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/4279414328938525097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=4279414328938525097' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/4279414328938525097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/4279414328938525097'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/01/simple-solution-for-mousewheel-events.html' title='Simple solution for MOUSE_WHEEL events on Mac'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-8897656522701296989</id><published>2009-01-16T11:07:00.000-08:00</published><updated>2009-01-16T11:07:00.528-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KML'/><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><category scheme='http://www.blogger.com/atom/ns#' term='shapefile'/><title type='text'>A 3D virtual globe for your website</title><content type='html'>It is nearly impossible to get people to download and install software, I know from experience. Even Google Earth is only installed on a few million computers. Installing software or browser plugins is not allowed in most corporate and government environments. If you want to display geospatial content on your website and not exclude most users, your only choice until now has been flat maps.&lt;br /&gt;&lt;br /&gt;With EarthBrowser, you can have a true 3D virtual globe that is self-branded with a custom interface that fits your special data requirements right on your website. There is no installation required since Flash 9 has about 95% penetration. With just a few lines of javascript (or as part of a Flex app) you can make your site really stand out.&lt;br /&gt;&lt;br /&gt;&amp;lt;/marketing&amp;gt;&lt;br /&gt;&lt;br /&gt;The first example of the EarthBrowser Flash plugin is up at &lt;a href="http://www.earthbrowser.com"&gt;earthbrowser.com&lt;/a&gt; with a simple interface that gives a hint at what is in the desktop AIR application and an easy way to download and install it. Download the free trial AIR app and take a look at all the great features. Chip in a few bucks if you like it and want to support my efforts to provide an alternative to the multi-billion dollar behemoths out there.&lt;br /&gt;&lt;br /&gt;A small javascript program (about 350 lines) controls what data is visible and various aspects of the globe on that site. It lets you control the clock and camera elevation and toggle night shadows, clouds, doppler radar, earthquakes, snow depth and a set of 7 popular satellites which are all updated in realtime. Click on a satellite and it will zoom to it and smoothly animate the earth underneath in real-time using very accurate orbital elements (I've got permission to re-distribute satellite positional data from the US Space Command).&lt;br /&gt;&lt;br /&gt;In my last post I mentioned that the demo app would not work on Internet Explorer due to problems with the JScript engine. Since Javascript is very close to Actionscript, I just made a few changes to the javascript code (adding ":*" after variable and function declarations) to make it compile into the Flash preloader. Now it works in Explorer too. However the special handling of mouse-wheel events isn't as nice so I'll have to hurry up on my VB getter/setter workaround I mentioned earlier.&lt;br /&gt;&lt;br /&gt;The EarthBrowser plugin can read KML files and KMZ archives. It can also read Shapefiles and do coordinate projections using a ported version of the open source proj.4 library. There is a full set of GUI components including buttons, text input boxes, sliders, popups and scrolling lists that make creating a fully featured app simple. The desktop version is a pretty complex application but is written in under 4,000 lines of javascript.  I'm working on the API documentation and am making a code repository so people can create and share their own components for use on the web or in the desktop version. As an example, adding one of the &lt;a href="http://resources.esri.com/arcgisonlineservices/"&gt;Free ESRI map layers&lt;/a&gt; to the globe takes about 3 lines of code.&lt;br /&gt;&lt;br /&gt;I haven't mentioned it yet since I've not blogged in a while, but EarthBrowser did not win at the Adobe MAX show. &lt;a href="http://www.scrapblog.com/"&gt;Scrapblog&lt;/a&gt; won, they have a pretty cool app with a very well defined and active niche. It was a great experience and I met some really cool people. By the way, Ben Forta is *way* more impressive in person than his blog picture suggests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-8897656522701296989?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/8897656522701296989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=8897656522701296989' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/8897656522701296989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/8897656522701296989'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/01/3d-virtual-globe-for-your-website.html' title='A 3D virtual globe for your website'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-8028061296461181349</id><published>2009-01-14T09:45:00.000-08:00</published><updated>2009-01-14T09:45:22.325-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><title type='text'>EarthBrowser 3.1 written in Javascript</title><content type='html'>The new version of EarthBrowser which will be released later today has been written in Javascript. Can that be right? Yes and no. The entire control structure of the application has been re-written in less than 4000 lines of Javascript code using the new EarthBrowser plugin. However, all of the fast rendering and calculation code is still written in Flash (Actionscript 3).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Desktop Version&lt;/b&gt;&lt;br /&gt;Version 3.1 has had a major facelift, is about twice as fast as the previous version and has some pretty cool new datasets like real-time satellites. This is a free update for all version 3 users of course, just starting up EarthBrowser will allow a seamless update once I put it out.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Online Version&lt;/b&gt;&lt;br /&gt;The online version API is still not quite ready for release (I'm only one guy). However, later today when I release, please check out the &lt;a href="http://www.earthbrowser.com/"&gt;EarthBrowser home page&lt;/a&gt; to see the first public demo of the online plugin. Right now it only works in Safari and Firefox. I've created a really simple 600 line demo application by simply copying some Javascript code from the desktop version and putting it up on the home page.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Writing your own modules&lt;/b&gt;&lt;br /&gt;In November I &lt;a href="http://blog.earthbrowser.com/2008/11/customized-webdesktop-hybrid-apps-with.html"&gt;alluded to&lt;/a&gt; being able to customize EarthBrowser with Javascript. I am working on creating a code repository with many examples on how to extend and customize EarthBrowser with your own data and user interface elements. The code will be portable and can be developed and tested on the desktop and then, if you like, posted to the web for the same functionality on your website.&lt;br /&gt;&lt;br /&gt;I still need to fully document the API. Also I am working on support for Internet Explorer, which is tricky because Explorer does not have getter/setter methods. It uses it's own lame and non-standard JScript engine. However there is a trick I found in the &lt;a href="http://code.google.com/p/classical/"&gt;Classical inheritance for Javascript&lt;/a&gt; code which uses Visual Basic to provide getter/setter functionality. A clever but lame hack, but it should work until Explorer 8 comes out and becomes mainstream.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-8028061296461181349?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/8028061296461181349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=8028061296461181349' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/8028061296461181349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/8028061296461181349'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2009/01/earthbrowser-31-written-in-javascript.html' title='EarthBrowser 3.1 written in Javascript'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-2722212870185058966</id><published>2008-11-17T10:05:00.000-08:00</published><updated>2008-11-17T10:16:19.949-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe AIR'/><title type='text'>Customized web/desktop hybrid apps with EarthBrowser and AIR 1.5</title><content type='html'>Adobe AIR 1.5 is being released. It uses the SquirrelFish Javascript accelerator which is really cool. With the upcoming EarthBrowser Javascript API, having a fast Javascript engine will make it much easier to create not only customizable web applications with the EarthBrowser virtual globe embedded, but also a customizable desktop app using your same code base with the ability to work offline and have hooks into an embedded database.&lt;br /&gt;&lt;br /&gt;What the? Creating your own AJAX style web app with the EarthBrowser API will be just a small step away from creating your own desktop application with your geo-content.&lt;br /&gt;&lt;br /&gt;More on this later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-2722212870185058966?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/2722212870185058966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=2722212870185058966' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/2722212870185058966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/2722212870185058966'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/11/customized-webdesktop-hybrid-apps-with.html' title='Customized web/desktop hybrid apps with EarthBrowser and AIR 1.5'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-1773802779832927728</id><published>2008-11-17T09:41:00.000-08:00</published><updated>2008-11-17T09:47:50.808-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe MAX'/><title type='text'>Live blogging Adobe MAX show</title><content type='html'>For some reason I'm off the Adobe feed aggregator, which is a bit of a bummer but I'll post about what's going on anyway.&lt;br /&gt;&lt;br /&gt;Adobe Flash Catalyst? Don't know what it is yet but it's just been announced alongside Flash and Flex Builder.&lt;br /&gt;&lt;br /&gt;Announcing an association with U2's Red initiative called Red Wire. Five bucks a month seems like a lot, at least for me, for an online news magazine. Goes to a very good cause though.&lt;br /&gt;&lt;br /&gt;So far my favorite part was getting the high score on the free Asteroids machine in the lobby (19,710). Old School.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-1773802779832927728?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/1773802779832927728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=1773802779832927728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/1773802779832927728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/1773802779832927728'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/11/live-blogging-adobe-max-show.html' title='Live blogging Adobe MAX show'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-3268975427990832981</id><published>2008-11-14T15:50:00.000-08:00</published><updated>2008-11-14T15:52:56.031-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Showing off EarthBrowser Web Plugin at MAX</title><content type='html'>EarthBrowser was chosen as one of the finalists for Adobe Rich Internet Application of the year, I am very honored by the selection.&lt;br /&gt;&lt;br /&gt;Please vote for EarthBrowser for the People's Choice Award (near the bottom):&lt;br /&gt;&lt;a href="http://adobemax08.com/na/experience/#?s=5&amp;p=3" target="_blank"&gt;http://adobemax08.com/na/experience/#?s=5&amp;p=3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've been working very hard to get the EarthBrowser Javascript API ready to show off at Adobe MAX next week. The API is nearly done and it is much more powerful than I first imagined it. With it you can put EarthBrowser directly on your website and control every aspect of the user interface, globe, camera, clock from a HTML script tag. It understands KML, JSON, XML, AMF and even Shapefiles with projected coordinates (I ported the proj.4 library to Actionscript). There is also the ability to smoothly animate features based on time coordinates for which I gave a &lt;a href="http://blog.earthbrowser.com/2008/07/earthbrowser-presentation-at-google.html" target="_blank"&gt;Google "tech talk" about in July&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I've put up a small with the demo that I plan on showing off at MAX.&lt;br /&gt;&lt;a href="http://www.earthbrowser.com/media/livedemo/" target="_blank"&gt;Please take a look here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All of that demo is written in Javascript in a couple of days. I'll be releasing the API documents and a free non-commercial license keys in the next few weeks when I've put the final polish on it.&lt;br /&gt;&lt;br /&gt;Special thanks to Lucian Plesea for the help with the &lt;a href="http://onearth.jpl.nasa.gov" target="_blank"&gt;OnEarth WMS layer help&lt;/a&gt; and a big thanks to &lt;a href="http://www.evs-islands.com/" target="_blank"&gt;Peter Minton&lt;/a&gt; for his great work on the island shapefile dataset.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-3268975427990832981?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/3268975427990832981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=3268975427990832981' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/3268975427990832981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/3268975427990832981'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/11/showing-off-earthbrowser-web-plugin-at.html' title='Showing off EarthBrowser Web Plugin at MAX'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-7826457104225967271</id><published>2008-10-15T11:30:00.000-07:00</published><updated>2008-10-15T11:35:30.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe MAX'/><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><title type='text'>EarthBrowser at the Adobe MAX awards</title><content type='html'>EarthBrowser has been selected as a finalist in the Rich Internet Application category of the &lt;a href="http://max.adobe.com/na/experience/#?s=5&amp;p=0"&gt;Adobe MAX awards&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href="http://max.adobe.com/na/experience/#?s=5&amp;p=0"&gt;&lt;img src="http://earthbrowser.com/media/images/Max_Finalist_Badge.png"/&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;If you are going to be at MAX, please stop by and say hello. I believe I'll be showing off the latest version of EarthBrowser from 6:30 - 8:30pm in the Moscone center on Monday Nov 17th.&lt;br /&gt;&lt;br /&gt;I have to say that I'm pretty excited to be attending Adobe MAX this year. Flash/AIR is a very impressive platform for applications development, I'm pretty sure that I'll never go back to doing a GUI application in C++. The coding team for Flash Player and AIR have my highest respect for enabling such a powerful tool. &lt;br /&gt;&lt;br /&gt;I hope to have the EarthBrowser website plugin API finalized and ready for the public by the time MAX starts. With it you will be able to create your own customized and self-branded virtual globe on your own website. Several companies have already contacted me about developing solutions for their geospatial offerings based on EarthBrowser. I also just finished a project for Autodesk to have EarthBrowser running on a kiosk with a 40 foot projection wall in their new San Francisco Customer Care Center. I hope to drop by and check it out when I'm down there, but the MAX show is keeping me pretty busy...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-7826457104225967271?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/7826457104225967271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=7826457104225967271' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/7826457104225967271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/7826457104225967271'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/10/earthbrowser-at-adobe-max-awards.html' title='EarthBrowser at the Adobe MAX awards'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-7537060202049203355</id><published>2008-10-06T09:30:00.000-07:00</published><updated>2008-10-06T09:32:50.126-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeoDjango'/><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><title type='text'>EarthBrowser and Amazon cloud computing</title><content type='html'>First a quick note: EarthBrowser has been named a semi-finalist for the &lt;a href="http://max.adobe.com/"&gt;Adobe MAX&lt;/a&gt; awards. It would be great to get to the finals but I'm just honored to have EarthBrowser be recognized by Adobe as a great use of their amazing Flash technology. &lt;br /&gt;&lt;br /&gt;As you may already know, EarthBrowser is a virtual globe that runs on the desktop but that is only half of the story. The other half of the EarthBrowser service is running on a set of servers that manage the website, licenses and data services. Data ingest, processing and management is a pretty big task, but is perhaps one of the most fun tasks that I do and is also the best way to create great content for EarthBrowser. EarthBrowser can read most KML files but unfortunately there aren't many great dynamic KML datasets out there. Perhaps because KML was designed for static content.&lt;br /&gt;&lt;br /&gt;My favorite dataset in EarthBrowser is the precipitation forecast model, especially when paired with the tropical storms dataset. It gives a really interesting idea of the extent of the storm and also what is going on inside of it. &lt;br /&gt;&lt;center&gt;&lt;img src="http://globe.earthbrowser.com/images/eb_marie.jpg"/&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Richard Stallman of GNU fame &lt;a href="http://www.guardian.co.uk/technology/2008/sep/29/cloud.computing.richard.stallman"&gt;believes that cloud computing is a "trap"&lt;/a&gt; but he is using a very narrow definition of the term. Cloud computing seems to be thrown out there to describe anything from web based applications to software as a service, the differences are obscure but important. At least for me, what cloud computing means is that it takes what was once a very time consuming administrative task and turns it into a programming problem.&lt;br /&gt;&lt;br /&gt;Managing the software stack, configuration and uptime of these servers is cumbersome task to say the least. Designing an algorithm that can launch and maintain a fault-tolerant clustered server setup with no user interaction is an extremely attractive business advantage and also a very cool programming problem. I have been doing some extensive investigation of &lt;a href="http://aws.amazon.com"&gt;Amazon Web Services&lt;/a&gt; and am now planning on deploying my entire server side infrastructure on the AWS platform. I have been using the Amazon S3 storage service for quite some time because it is simple and just makes so much sense. With the recent release of the Elastic Block Store and Elastic IP Addresses, Amazon has a complete and very powerful solution for self-configuring web services that can also easily save and restore state in the event of a system crash. &lt;br /&gt;&lt;br /&gt;So now in addition to EarthBrowser, I am working on a side project, I'm calling it FireAnt, that will create a server setup that can scale from one small instance to a full blown cluster of servers. It will scale up by adding new servers and as the load increases and scale back down as it decreases saving you money in the process. The base server is running a modified version of GeoDjango with Apache and PostGIS. Pound is used for web server proxying when scaling up and each server can take over for any of the others in the event of a system failure. I may release the code as open source, but I am a little worried about the time it would take me to manage an open source project. There is &lt;a href="http://scalr.googlecode.com/"&gt;Scalr&lt;/a&gt; which is an open source project that will do something similar but it has a minimum of 4 server instances and it is based on PHP. Yuck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-7537060202049203355?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/7537060202049203355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=7537060202049203355' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/7537060202049203355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/7537060202049203355'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/10/earthbrowser-and-amazon-cloud-computing.html' title='EarthBrowser and Amazon cloud computing'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-7367031626967961275</id><published>2008-08-21T12:10:00.000-07:00</published><updated>2008-08-21T12:14:13.180-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><category scheme='http://www.blogger.com/atom/ns#' term='Satellites'/><title type='text'>EarthBrowser web plugin satellite example</title><content type='html'>Good news! The US Space Command has just granted my request to redistribute satellite orbit data. Expect to see satellites coming to EarthBrowser soon.&lt;br /&gt;&lt;br /&gt;Here's the first public example of the EarthBrowser plugin, it requires Flash 9. it shows the current position of the International Space Station. Use your mouse wheel if you have one, or click the globe and use arrow keys to zoom out and see the Hubble Space Telescope and the TOPEX/Poseidon satellites.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe src="http://earthbrowser.com/media/satellite/" frameborder="0" width="425" height="344" scrolling="no"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;This is a simple example with no extra datasets or interface elements and limited zooming. I hope to have the Javascript API available sometime next month.&lt;br /&gt;&lt;br /&gt;Imagine a zero-install, completely programmable virtual globe that understands KML on your website.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-7367031626967961275?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/7367031626967961275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=7367031626967961275' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/7367031626967961275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/7367031626967961275'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/08/earthbrowser-web-plugin-satellite.html' title='EarthBrowser web plugin satellite example'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-4752103181501823162</id><published>2008-08-06T15:45:00.000-07:00</published><updated>2008-08-06T16:05:21.890-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pirates'/><title type='text'>My iTunes Pirate Album</title><content type='html'>My alter-ego has been revealed... &lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?id=128524280&amp;s=143441"&gt;&lt;img src="http://a1.phobos.apple.com/us/r10/Music/4f/7d/7c/mzi.dmbfccak.170x170-75.jpg"/&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;I'm the drummer first mate on the pirate rock band &lt;a href="http://www.kevinhendrickson.com/kh/hucklescary-finn/huckle-scary-finn.html"&gt;HuckleScary Finn&lt;/a&gt; captained by my best friend Kevin Hendrickson. I'm afraid that I can't take credit for the huge resurgence in pirate themed activities here in the Portland area, but I'd like to think I got in on the ground floor.&lt;br /&gt;&lt;br /&gt;Notable Portland Oregon Pirate links:&lt;br /&gt;• &lt;a href="http://www.portlandpiratefestival.com/"&gt;Portland Pirate Festival&lt;/a&gt;&lt;br /&gt;• &lt;a href="http://www.boggandsalty.com/"&gt;Captain Bogg &amp; Salty&lt;/a&gt; (best pirate band in the world).&lt;br /&gt;• &lt;a href="http://www.talklikeapirate.com/"&gt;International talk like a pirate day&lt;/a&gt;&lt;br /&gt;• &lt;a href="http://www.captainhenryspiratestore.com/"&gt;Captain Henry's Pirate Store&lt;/a&gt; (a pirate merchandise only store)&lt;br /&gt;&lt;br /&gt;Arrrrrrrrr&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-4752103181501823162?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/4752103181501823162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=4752103181501823162' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/4752103181501823162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/4752103181501823162'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/08/my-itunes-pirate-album.html' title='My iTunes Pirate Album'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-6763099235013722843</id><published>2008-07-23T10:40:00.000-07:00</published><updated>2008-07-23T10:47:15.922-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><title type='text'>What's in the EarthBrowser pipeline?</title><content type='html'>If you aren't interested in wading through my sleep inducing &lt;a href="http://blog.earthbrowser.com/2008/07/earthbrowser-presentation-at-google.html"&gt;30 minute Google presentation&lt;/a&gt;, I'm planning on detailing much of what I said in a series of blog posts.&lt;br /&gt;&lt;br /&gt;Contrary to almost every bit of advice I've been given I'm going to lay most of my cards out on the table about the future of EarthBrowser. For a single guy trying to go up against multi-billion dollar corporations, I need as much attention as I can get. However I'm not going to reveal everything, I've got some pretty cool things under wraps for release later this year.&lt;br /&gt;&lt;br /&gt;Flash 10: I'm very excited about &lt;a href="http://labs.adobe.com/technologies/flashplayer10/"&gt;Flash 10&lt;/a&gt; and believe that it will open the door for real-time 3D in the web browser. For me the most important aspects of F10 are native matrix operations, hardware accelerated rendering and a shading language. This will enable EarthBrowser to have true 3D navigable terrain with mountains, valleys and even underwater exploration, right in your web browser or in the desktop authoring app. I am hoping to get a 50-100% increase in rendering speed and be able to do really pretty things like normal mapping and atmospheric scattering.&lt;br /&gt;&lt;br /&gt;3D Collada models: I'm not really a big fan of the obsession by Google and MS to put accurate 3D buildings on the earth, but if you have the data it isn't really hard to do. I've got more interesting uses for 3D models which will become more apparent in future versions.&lt;br /&gt;&lt;br /&gt;GPS track importing: A very easy feature to add for people to edit and share.&lt;br /&gt;&lt;br /&gt;iPhone version: I still hold out hope for Apple and Adobe to get Flash running on the iPhone so I haven't allocated much of my bandwith to this project yet. However after some exploration of the problem space, I estimate it will be relatively simple to port from my current codebase due to the nicely abstracted rendering backend.&lt;br /&gt;&lt;br /&gt;My next blog post will detail the geometry / time coordinate extension that I hope will make it into the KML standard at some point. Time coordinates are designed for use in feature animation, which is an obvious use but was never a design consideration for KML. I don't really have the time or desire to submit and shepherd a proposal through an OGC standards committee. Perhaps there could be something like the &lt;a href="http://www.boost.org/"&gt;Boost Library&lt;/a&gt; for KML where proposed extensions are selected to become part of the standard after being tested and refined by use in the community. Seems like this would be a great place for me and the &lt;a href="http://worldwind.arc.nasa.gov/"&gt;WorldWind&lt;/a&gt; developers to start taking a little initiative and advance the state of the art for virtual globes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-6763099235013722843?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/6763099235013722843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=6763099235013722843' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/6763099235013722843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/6763099235013722843'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/07/whats-in-earthbrowser-pipeline.html' title='What&apos;s in the EarthBrowser pipeline?'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-2770596569850903048</id><published>2008-07-21T12:50:00.000-07:00</published><updated>2008-07-21T13:02:33.082-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KML'/><category scheme='http://www.blogger.com/atom/ns#' term='EarthBrowser'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>EarthBrowser presentation at Google</title><content type='html'>Last Tuesday I gave a 30 minute presentation at Google about the upcoming EarthBrowser Flash plugin. I also presented an enhancement to improve the expressiveness and utility of KML along with a demonstration with orbiting satellites. Many thanks to Michael Weiss-Malik and the great guys at Google for inviting me to talk about whatever I wanted to!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/DlT-D0DKTPw&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/DlT-D0DKTPw&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;If you have problems with the embedded video you can &lt;a href="http://video.google.com/videoplay?docid=1032729556039650556&amp;hl=en"&gt;see it on youtube&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In the presentation I go through some of the features and benefits of the EarthBrowser Flash plugin. Then I talk about giving time it's own coordinate in the geometry primitives in order to reduce KML file size and complexity as well as add new functionality. Toward the end I talk about future enhancements to the EarthBrowser desktop/web platform. I also mention that I'm developing an iPhone version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-2770596569850903048?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/2770596569850903048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=2770596569850903048' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/2770596569850903048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/2770596569850903048'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/07/earthbrowser-presentation-at-google.html' title='EarthBrowser presentation at Google'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-2297766115728069288</id><published>2008-07-09T08:40:00.000-07:00</published><updated>2008-07-09T08:45:46.937-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='LLVM'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Wow! C/C++, Python and Ruby running in Flash Player</title><content type='html'>Earlier this year I saw the &lt;a href="http://www.youtube.com/watch?v=6TKGNS1N1yo"&gt;demo of Quake running in Flash&lt;/a&gt; directly translated from C++. It was very impressive to say the least, Adobe has some great coders and the amazing advantage of having their code running on almost every computer with a web browser.&lt;br /&gt;&lt;br /&gt;I just came across &lt;a href="http://www.toolness.com/wp/?p=52"&gt;this post&lt;/a&gt; that talks about an open source backend to the LLVM that will enable C/C++, Python, Ruby, Perl, Lua and other languages to be targeted to ActionScript bytecode (the language the flash player runs). It sounds like it will need some more work and support of a new Flash player version but the possibilities are extremely exciting.&lt;br /&gt;&lt;br /&gt;More detailed information on the initial LLVM work by Ryan Stewart &lt;a href="http://blog.digitalbackcountry.com/?p=1095"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-2297766115728069288?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/2297766115728069288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=2297766115728069288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/2297766115728069288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/2297766115728069288'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/07/wow-cc-python-and-ruby-running-in-flash.html' title='Wow! C/C++, Python and Ruby running in Flash Player'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21167013.post-5291128883006495565</id><published>2008-06-19T14:30:00.000-07:00</published><updated>2008-06-19T14:37:14.651-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KML'/><title type='text'>KML Extension, Julian Time</title><content type='html'>Creating a virtual globe that can view KML files as well as creating numerous datasets that have to use KML has given me what I feel is a unique perspective on the strengths and weaknesses of the language. It also gives me a really unique opportunity to enact some features in the language that I feel are needed. Hopefully at some point the &lt;a href="http://www.opengeospatial.org/"&gt;OGC&lt;/a&gt; and Google will consider some of my suggestions once they are more formalized.&lt;br /&gt;&lt;br /&gt;I've just come up with a *really* nice extension to KML that can drastically reduce the size of some datasets (e.g.: a 1.2 MB dataset is reduced to 60K) and at the same time enable functionality that is sorely missing. I'm not going to spill the beans on it quite yet since I've got another couple of enhancements that will enable even more great functionality. I'll present this extension and others when I give my talk at Google on the 15th of July. I'll post a video of that talk on this blog once its available.&lt;br /&gt;&lt;br /&gt;Julian Time:&lt;br /&gt;One of the less fortunate aspects of KML, in my opinion, is it's use of the &lt;a href="http://www.w3.org/TR/xmlschema-2/#isoformats"&gt;ISO 8601 Date and Time Format&lt;/a&gt;. I understand why they did it; because it is human readable and a standard to hang their hat on. The processing overhead on parsing the date is significant, but not a deal breaker so why do I care?&lt;br /&gt;&lt;br /&gt;Clearly the ISO time format should be left in, but there should be another option for specifying it as &lt;a href="http://en.wikipedia.org/wiki/Julian_day"&gt;Julian Time&lt;/a&gt;. There are so many nice properties of julian time that I would be very surprised if Google Earth, Virtual Earth, ESRI and any other virtual globes don't all use it for their internal representation of time. It is a floating point number (usually a 64 bit double) that can be manipulated with standard mathematical functions. Anyone who has ever written a date library the naive way (as I have) has come to dislike all of the little details like days in a month, leap years and worst of all... time zones. Why not standardize on a time format that does away with all of that dreck and can be operated on like a regular number? You can add 3.5 days, subtract an hour and do simple comparison operations like greater than, less than and equal. I can't imagine ever using another internal representation.&lt;br /&gt;&lt;br /&gt;Here's a conversion routine in Python:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# gdate is (year, month [1-12], day, hour, minute, second)&lt;br /&gt;def julian_date(gdate):&lt;br /&gt; if gdate[1] &lt; 3:&lt;br /&gt;  M = gdate[1] + 12&lt;br /&gt;  Y = gdate[0] - 1&lt;br /&gt; else:&lt;br /&gt;  M = gdate[1]&lt;br /&gt;  Y = gdate[0]&lt;br /&gt; D = gdate[2] + (gdate[3] / 24.0) + (gdate[4] / 1440.0) + (gdate[5] / 86400.0)&lt;br /&gt; A = math.floor(Y/100.0)&lt;br /&gt; RV = math.floor(365.25*(Y+4716.0)) + math.floor(30.6001*(M+1.0))&lt;br /&gt; return RV + D + (2.0-A+math.floor(A/4.0)) - 1524.5&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21167013-5291128883006495565?l=blog.earthbrowser.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.earthbrowser.com/feeds/5291128883006495565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21167013&amp;postID=5291128883006495565' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/5291128883006495565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21167013/posts/default/5291128883006495565'/><link rel='alternate' type='text/html' href='http://blog.earthbrowser.com/2008/06/kml-extension-julian-time.html' title='KML Extension, Julian Time'/><author><name>Matt Giger</name><uri>http://www.blogger.com/profile/08948284981378368476</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06706944231596986727'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry></feed>