<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Edward Thomson</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/" />
    <link rel="self" type="application/atom+xml" href="http://www.edwardthomson.com/blog/atom.xml" />
    <id>tag:www.edwardthomson.com,2008-03-24:/blog//1</id>
    <updated>2008-07-10T03:30:35Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Open Source 4.1</generator>

<entry>
    <title>Teamprise 3.1: More Than Just Bugfixes</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2008/07/teamprise_31.html" />
    <id>tag:www.edwardthomson.com,2008:/blog//1.47</id>

    <published>2008-07-10T03:30:00Z</published>
    <updated>2008-07-10T03:30:35Z</updated>

    <summary>Earlier today we announced the release of Teamprise 3.1, and you might be wondering why you should upgrade. Maybe you haven&apos;t run into any big bugs in Teamprise clients (and we hope you haven&apos;t.) Or maybe you just don&apos;t feel...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="teamprise" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="offline" label="offline" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="teamfoundationserver" label="team foundation server" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="teamprise" label="teamprise" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>Earlier today we announced the release of Teamprise 3.1, and you might be wondering why you should upgrade.  Maybe you haven't run into any big bugs in Teamprise clients (and we hope you haven't.)  Or maybe you just don't feel like upgrading for "just a point release".  It's true that we only revved the minor version to 3.1, but it's more than just bugfixes:  we've also added a lot of good new features.</p>

<p>The biggest new feature in 3.1 is support for working offline in both our Teamprise Plug-in for Eclipse and our Teamprise Explorer clients.  Offline support is a big advantage for TFS users who have unreliable network connections - particularly telecommuters and road warriors, who might want to get some work done wherever they are, be it a coffeeshop or an airplane.</p>

<p>If you're an Eclipse user and wish to go offline from your Team Foundation Server (or if your network unfortunately takes you offline), just go to the Team menu and select "Work Offline".  You'll be disconnected from TFS, yet you'll still be able to perform all the file operations like you expect -- you can add, edit, move and delete files just like if you were online.  When your network connection returns, you can choose the "Return Online" menu option and pend all those changes to the server.</p>

<p>Working offline in Teamprise Explorer is even simpler, you don't need to specifically enter offline mode.  Simply make whatever changes you wish in your workspace, and click "Return Online" from the Source Control context menu.  Explorer will synchronize your local workspace with the server and pend any changes you made while you were offline.</p>

<p>The Command Line Client has had offline support since version 3.0, so that's nothing new, but it does get some cool features aside from that.  We've added an XML output option for many commands so that you can parse the results easily from a script.  The "brief" and even "detailed" formats tend to truncate output for easy interactive viewing, but this can be troublesome for scripts.  The new XML output should be perfect for getting all the information out of Team Foundation Server.</p>

<p>Those are a few of the bigger features, but there are many more.  And seeing as this is still a point release, there are a lot of bug fixes, too.  If you want to see all the details, check out the <a href="http://download-us.teamprise.com/cs/3.1.0.8392R/release-notes/release-notes.html" target="_blank">3.1 release notes</a>.</p>

<p>We've spent a lot of time on 3.1, and we think you'll enjoy it, even if you're not the type of person to upgrade for "just a point release".</p>]]>
        
    </content>
</entry>

<entry>
    <title>Visit Teamprise at TechEd 2008 Developer</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2008/05/visit_teamprise_at_teched_2008_developer.html" />
    <id>tag:www.edwardthomson.com,2008:/blog//1.46</id>

    <published>2008-05-30T18:32:08Z</published>
    <updated>2008-05-30T18:52:36Z</updated>

    <summary> Teamprise will be exhibiting at TechEd 2008 Developer in Orlando, June 3 - June 6. If you&apos;re interested in Team Foundation Server or source control with Java, you should stop by booth 1426 and say hello. We&apos;ll be giving...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="teamprise" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="teamprise" label="teamprise" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="teched" label="teched" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tfs" label="tfs" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p><img align="right" style="padding-left: 10px;" src="/blog/images/teched2008.jpg" alt="TechEd Developers 2008" /> Teamprise will be exhibiting at TechEd 2008 Developer in Orlando, June 3 - June 6.  If you're interested in Team Foundation Server or source control with Java, you should stop by booth 1426 and say hello.</p>

<p>We'll be giving demos of the new Teamprise 3 and all it's great new features.  Hope to see you there!</p>]]>
        
    </content>
</entry>

<entry>
    <title>Chicago: Java Development with Team System</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2008/04/chicago_java_development_with_team_system.html" />
    <id>tag:www.edwardthomson.com,2008:/blog//1.44</id>

    <published>2008-04-15T23:14:02Z</published>
    <updated>2008-04-15T23:31:36Z</updated>

    <summary>It&apos;s been a long time since I updated my blog, in part because I&apos;m lazy, but mostly because we were busy putting the finishing touches on Teamprise Client Suite 3.0. We&apos;re very proud of our 3.0 release, it&apos;s got a...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="eclipse" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="teamprise" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="chicago" label="chicago" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="chicagovstsusersgroup" label="chicago vsts users group" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="java" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>It's been a long time since I updated my blog, in part because I'm lazy, but mostly because we were busy putting the finishing touches on <a href="http://www.teamprise.com/" target="_blank">Teamprise Client Suite 3.0</a>.  We're very proud of our 3.0 release, it's got <a href="http://www.woodwardweb.com/teamprise/000421.html" target="_blank">a lot of great new features</a>, and we think you'll be very happy with it.</p>

<p>If you're in the greater Chicagoland area next week, I've been invited to the <a href="http://vsts.sogeti-chicago.com/default.aspx" target="_blank">Chicago VSTS User Group</a> to give a tour of the new version of Teamprise.  If you're interested in how Team System can play nice with Java developers, I suggest you stop by and check it out:</p>

<p>The meeting begins at 5:30 PM at the Microsoft Chicago (Loop) Offices:<br />
<a href="http://maps.google.com/maps?f=q&hl=en&geocode=&q=77+w+wacker+dr,+chicago,+il&jsv=107&sll=41.91577,-87.688114&sspn=0.00867,0.011802&ie=UTF8&ll=41.88787,-87.630236&spn=0.008674,0.011802&t=h&z=16&iwloc=addr" target="_blank">77 W Wacker Dr, Suite 2300</a></p>

<p><a href="http://vsts.sogeti-chicago.com/Lists/Announcements/DispForm.aspx?ID=3&Source=http%3A%2F%2Fvsts%2Esogeti%2Dchicago%2Ecom%2Fdefault%2Easpx" target="_blank">Please RSVP</a> if you're going to attend.</p>

<p>Even if you can't make it next week, be sure to check out the <a href="http://vsts.sogeti-chicago.com/default.aspx" target="_blank">Chicago VSTS User Group</a>, or another user group near you.  It's a great resource if you're a VSTS or Team Foundation Server user!</p>]]>
        
    </content>
</entry>

<entry>
    <title>Heroes Happen Here: TFS 2008 Launch</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2008/03/heroes_happen_here_tfs_2008_launch.html" />
    <id>tag:test2.edwardthomson.com,2008:/blog//1.42</id>

    <published>2008-03-10T21:29:32Z</published>
    <updated>2008-04-10T23:25:35Z</updated>

    <summary>Teamprise will be exhibiting at the TFS 2008 launch event in Chicago on March 11.  Even better, our very own Martin Woodward will be presenting at the Dublin launch event that same day.  If you&apos;re going to be in attendance at one of these, stop by and say hi!</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="teamprise" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>Microsoft's currently launching the newest version of Team Foundation Server as part of Visual Studio 2008.  There are launch events all across the US (as well as in many other parts of the world), so if you're interested in the new features in TFS 2008, check out the events near you at Microsoft's<br />
"<a href="http://www.microsoft.com/heroeshappenhere/">Heroes Happen Here</a>" site.</p>

<p>Teamprise will be exhibiting at the Chicago launch event tomorrow, March 11.  We're in <b>booth 47</b> - stop by and say hi if you're attending.</p>

<p>Even better -- our very own <a href="http://www.woodwardweb.com/">Martin Woodward</a> will be presenting at the Dublin launch event tomorrow.  Be sure to check him out if you're attending out there.</p>

<p>Otherwise, there are still plenty of events in a city near you - be sure to go check out what's new in TFS 2008!</p>]]>
        
    </content>
</entry>

<entry>
    <title>What Would Turing Do?</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/12/what_would_turing_do.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.41</id>

    <published>2007-12-06T00:36:50Z</published>
    <updated>2008-04-08T03:15:07Z</updated>

    <summary>I got a flyer in the mail for the RSA Conference 2008. Since I enjoy cryptography - and despite the fact that I know next to nothing about it - I was interested. But I&apos;m not going to lie, I&apos;m...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="potentially amusing" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>I got a flyer in the mail for the RSA Conference 2008.  Since I enjoy cryptography - and despite the fact that I know next to nothing about it - I was interested.</p>

<p>But I'm not going to lie, I'm really put off by the advertising.  This year's theme for the conference is Alan Turing.  How this conference has been going on for 14 years and ignored him up to now is a mystery to me.  (They made a carrier pigeon the theme in 1997.  That's right, a carrier pigeon apparently did more for security than Turing.)</p>

<p>But now that RSA has finally decided to recognize the man, they're doing some stupid advertising around it:  What Would Turing Do?  Which, frankly, would make a cool bumper sticker, and I would have been impressed... if they had just asked the question and not tried to answer it.</p>

<p>Instead, they give some odd answers that show that their marketing department never bothered to talk to a developer - or even a read a Turing biography.  Their answers are frequently bizarre and have nothing to do with Turing:  he would "have a raging sushi addiction", "be a huge Dr. Who fan" and would "collect rare Phillip Glass vinyl".  (Yes, they also didn't bother to google "Phillip Glass" to realize that they misspelled his name.)</p>

<p>This is the company that was founded by three math PhDs who invented the RSA public key algorithm the RC block ciphers, and the MDx hash functions.  And they're suggesting that he would "recite the far reaches of imaginary numbers to pass the time"?  I'd like to think that would be beneath Turing...  hell, it would be beneath me.  (A googleplex times <i>i</i>.  A googleplex plus one times <i>i</i>.  See, not very satisfying is it?)</p>

<p>Very disappointing.</p>

<p>Especially since it's obvious that really, Turing wouldn't care about sushi or Bill Gates.  He'd be far too busy enjoying the liberal sexual mores of this fine time  we live in.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Debugging JNI in VisualStudio</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/12/debugging_jni_in_visualstudio.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.40</id>

    <published>2007-12-04T22:06:19Z</published>
    <updated>2008-04-08T03:15:07Z</updated>

    <summary>Gluing C and Java together isn&apos;t particularly difficult - JNI is a well-designed bridge to the world of native code. Simple tasks are straightforward, and more complex ones are still possible. Surprisingly, it&apos;s quite easy to debug as well. When...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="java" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>Gluing C and Java together isn't particularly difficult - <a href="http://en.wikipedia.org/wiki/Java_Native_Interface">JNI</a> is a well-designed bridge to the world of native code.  Simple tasks are straightforward, and more complex ones are still possible.  Surprisingly, it's quite easy to debug as well.</p>

<p>When working on native code, I tend to make all my code work in C first - debug it, write some native test cases, and ensure that everything works.  Then I write a little JNI glue to make it accessible from Java.  This has worked surprisingly well, and given few surprises.  But what happens when something goes wrong?</p>

<p>For example:  I was writing some ugly Win32 code to do some various things that can only be done in C.  Despite my aversion to programming in Windows, I whipped up some native code to access what I needed.  I wrote some test cases to confirm that everything worked, and I was pretty happy with myself, until I realized that all the work I had done was on ANSI C strings (ie, null-terminated char arrays.)</p>

<p>Regardless, I tied it up to my Java with some JNI code just to watch it fail when I passed in Unicode strings.</p>

<p>I'm not particularly well-versed in the intricacies of Unicode, and even less so Win32 programming with its <code>WCHAR</code>s and <code>PSEC_WCHAR</code>s and nasty habit of <code>#define</code>'ing function names to those that end in <code>W</code>.  So I wasn't real sure of exactly what I needed to change to make my native code Unicode friendly.  It sure would be nice if I could debug this in VisualStudio.</p>

<p>Attaching to a running process in <code>gdb</code> is easy - and it's easy to provide debugging symbols for that process.  VisualStudio is a little less straightforward, but just as easy.</p>

<p>First, make sure that your DLL is emitting debugging symbols.  Ensure that you're passing these flags to the compiler and linker:</p>

<blockquote>CFLAGS: <code>-Od -DDEBUG -D_DEBUG -Zi</code><br />
LFLAGS: <code>-DEBUG</code></blockquote>

<p>Build your native DLL and ensure that a <code>.PDB</code> file was created - this is the debugging information for your library.  Run your java application.</p>

<p>Open VisualStudio and setup your symbols.  Go to Tools -&gt; Options, and open the Debugging -&gt; Symbols pane.  Add a new PDB location which points to the PDB file that was created from your build.</p>

<p>Now you can attach to your java process by going Tools -&gt; Attach to Process.</p>

<p>Finally, you can load the source (ensure that this is the source you built from, in the same directory as your PDB file) and set breakpoints, etc.</p>]]>
        
    </content>
</entry>

<entry>
    <title>BSOD Screensaver in OS X</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/10/bsod_screensaver_in_os_x.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.37</id>

    <published>2007-10-31T00:52:01Z</published>
    <updated>2008-04-08T03:15:07Z</updated>

    <summary>Engadget has an article on how to remove the Windows BSOD icon in 10.5. They seem to think that removing it is a good idea - since it&apos;s &quot;so pompous and galling&quot;. I call shenanigans. Pompous? Maybe. Galling? Give me...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="mac" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="potentially amusing" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>Engadget has an article on <a href="http://www.engadget.com/2007/10/30/mini-how-to-remove-the-windows-bsod-icon-in-leopard-make-os-x-a-little-less-smug/" target="_blank">how to remove the Windows BSOD icon in 10.5</a>.  They seem to think that removing it is a good idea - since it's "so pompous and galling".</p>

<p>I call shenanigans.  Pompous?  Maybe.  Galling?  Give me a break.</p>

<p>It's true, Microsoft would never do something like this.  Mostly because Microsoft cares precious little about interoperability with other network filesystems.  CIFS is good enough for everybody - how's that for smug?</p>

<p>I suggest ignoring the whiners and embracing the BSOD icon.  And then take it a step further:  install <a href="http://www.jwz.org/xscreensaver/" target="_blank">xscreensaver</a> and use the BSOD screensaver.  Then smile when people tell you "there's something wrong with your computer!"</p>]]>
        
    </content>
</entry>

<entry>
    <title>Learn about Teamprise in Chicago: Oct 10</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/10/learn_about_teamprise_in_chicago.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.36</id>

    <published>2007-10-07T18:56:08Z</published>
    <updated>2008-04-10T23:22:03Z</updated>

    <summary>Sorry for the late notice, but if you&apos;re free on Wednesday evening, this might be interesting. Teamprise was invited to present at this month&apos;s Chicago VSTS Users Group to discuss using TFS from within the Eclipse IDE and from non-Microsoft...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="teamprise" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>Sorry for the late notice, but if you're free on Wednesday evening, this might be interesting.</p>

<p>Teamprise was invited to present at this month's <a href="http://vsts.sogeti-chicago.com/">Chicago VSTS Users Group</a> to discuss using TFS from within the Eclipse IDE and from non-Microsoft platforms.  I'm excited to make a fool of myself speaking in public (and excited to learn that a VSTS Users Group exists in Chicago.)</p>

<p>I'll be speaking with David Dugan who's a Senior Consultant for Sogeti.  David will be discussing accessing TFS from older versions of Visual Studio.</p>

<p>Maybe I'll see you there!</p>]]>
        
    </content>
</entry>

<entry>
    <title>Vista Frustrations</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/10/vista_frustrations.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.35</id>

    <published>2007-10-06T19:52:06Z</published>
    <updated>2008-04-08T03:30:59Z</updated>

    <summary>A lot&apos;s been made of the various frustrations that go along with running Windows Vista. I won&apos;t rehash them, mostly because I&apos;m not able to. My frustration is with installing the damnable Operating System: Perhaps this dialog doesn&apos;t look particularly...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="windows" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>A lot's been made of the various frustrations that go along with running Windows Vista.  I won't rehash them, mostly because I'm not able to.  My frustration is with installing the damnable Operating System:</p>

<p><img src="/blog/images/vistainstall1.png" class="photo" /></p>

<p>Perhaps this dialog doesn't look particularly strange, until you realize that the install disc only included four CD images:</p>

<p><img src="/blog/images/vistainstall2.png" class="photo" /></p>

<p>(This was the MSDN install for Vista.)</p>]]>
        
    </content>
</entry>

<entry>
    <title>Learn Computer Programming</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/09/learn_computer_programming.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.34</id>

    <published>2007-09-26T16:59:25Z</published>
    <updated>2008-04-08T03:33:45Z</updated>

    <summary> (From the Matchbook Museum)...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="potentially amusing" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p><img src="/blog/images/learn_computer_programming_matchbook.jpg" alt="Learn Computer Programming Matchbook" class="photo" /></p>

<p>(From the <a href="http://www.lileks.com/match/gallery/13.html" target="_blank">Matchbook Museum</a>)</p>]]>
        
    </content>
</entry>

<entry>
    <title>UI in your Eclipse 3.3-based RCP App</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/07/ui_in_eclipse_33_rcp_apps.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.32</id>

    <published>2007-07-13T16:10:01Z</published>
    <updated>2008-04-10T23:13:40Z</updated>

    <summary>So you&apos;re developing Eclipse RCP applications, and you&apos;re excited about moving your RCP app to the Eclipse 3.3 framework... Wait, you&apos;re not? Then this post probably doesn&apos;t interest you too much. But if you are, there are some UI changes...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="eclipse" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>So you're developing Eclipse RCP applications, and you're excited about moving your RCP app to the Eclipse 3.3 framework...</p>

<p>Wait, you're <i>not?</i>  Then this post probably doesn't interest you too much.</p>

<p>But if you are, there are some UI changes in the way Eclipse 3.3 starts up that you should be aware of.</p>

<p>Likely, your application has a subclass of <code>WorkbenchAdvisor</code>, probably called something like <code>YourWorkbenchAdvisor</code>.  And this is doing various useful things like creating views and setting preferences, all that good stuff.  And maybe you're overriding <code>WorkbenchAdvisor.postStartup()</code> to do some useful things after the Workbench has started.</p>

<p>Maybe one of those useful things happens to be raising a Dialog.  In versions past, this would have worked fine for you.  In Eclipse 3.3, you may be in for a rude awakening.  Despite the name, the Workbench has <i>not</i> started and the UI is <i>not</i> fully functional when <code>YourWorkbenchAdvisor.postStartup()</code> is called.</p>

<p>In particular:  other threads cannot call back into the UI thread with <code>Display.asyncExec()</code> or <code>Display.syncExec()</code>.  The <code>UISynchronizer</code> will queue up any runnable you post on to the UI thread to run once it actually has started.  This can present a problem if the dialog you raise fires off a background thread to do some work.</p>

<p>For example, in <a href="http://www.teamprise.com/product/explorer_client.html" target="_blank">Teamprise Explorer</a> our login dialog has an option to test your connection to the TFS server.  This involves firing off a background thread to look at your network settings, try to connect, etc.  The results of these test are then posted back to the dialog using <code>Display.asyncExec()</code>.</p>

<p>What happens in Eclipse 3.3?  Since the login dialog was started from our <code>postStartup()</code> method, the <code>UISynchronizer</code> hasn't started.  So when we call <code>Display.asyncExec()</code> to display our results, they're put in a queue to display once the UI has fully started.  This, of course, only occurs after you've closed the login dialog, at which point there's no dialog to display these settings to.</p>

<p>Ouch.</p>

<p>To combat this, you should move any UI code out of <code>YourWorkbenchAdvisor.postStartup()</code>.  You can either do this by putting your code in the UI queue to execute as soon as the Workbench starts fully, or you can move it out of <code>postStartup()</code> entirely and use a different hook to raise your UI once the Workbench is started.</p>

<p>These options are both sort of a hack, so you're welcome to use whichever you find less obscene:</p>

<ol><li> <b>Queue your UI code in the UISynchronizer, where it will be run as soon as the Workbench is started</b><br />
If a non-UI thread calls <code>Display.asyncExec()</code> before the Workbench startup has completed, your <code>Runnable</code> will be queued to run after the Workbench has started, but this is only true if it's called from a thread other than the UI thread.  So you need to get off the UI thread to post this into the queue.  Firing off a new thread from your <code>postStartup()</code> method should do the trick:

<div class="block"><code class="block"><pre>new Thread(new Runnable() {
    public void run()
    {
        Display.asyncExec(new Runnable() {
            public void run()
            {
                // do something on the UI thread
                // after Workbench startup
            }
        });
    }
}).start();</pre></code></div>

<p>This will put your inner <code>Runnable</code> on the UI queue to execute as soon as Workbench startup is complete.  (Had you called <code>Display.asyncExec()</code> from the current thread, it would execute immediately.)</p>

<p>If you don't like the idea of stuffing a <code>Runnable</code> inside another <code>Runnable</code>, there's a second option:</p>

<p><li> <b>Override <code>WorkbenchAdvisor.eventLoopIdle()</code> to call your code the first time the UI is idle</b><br /><br />
If you look closely at <code>Workbench.runUI()</code>, you'll see that the UISynchronizer isn't started until right before a call to <code>Workbench.runEventLoop()</code>.  So hooking in to <code>WorkbenchAdvisor.eventLoopIdle()</code> is your first opportunity to execute code once the UI thread is properly started.</p>

<p>Adding this to <code>YourWorkbenchAdvisor</code> should be sufficient:</p>

<div class="block"><code class="block"><pre>private static ThreadLocal eventLoopStarted = new ThreadLocal() {
    protected Object initialValue()
    {
        return Boolean.FALSE;
    }
};</pre>

<pre>private void start()
{
    // do something on the UI thread after Workbench startup
}</pre>

<pre>public void eventLoopIdle(Display display)
{
    // the ui is now started, we can do our work
    if(eventLoopStarted.get().equals(Boolean.FALSE))
    {
        // call any post-startup UI
        start();
        eventLoopStarted.set(Boolean.TRUE);
    }
    else
    {
        // default: yield cpu until new events enter the queue
        super.eventLoopIdle(display);
    }
}</pre></code></div>

<p>I'm synchronizing on the <code>eventLoopStarted</code> flag, which is probably not necessary since only the UI thread should be calling <code>eventLoopIdle()</code>.  But proof of thread-safety is left as an exercise for the reader.</p>

<p>Also, if you override <code>eventLoopIdle()</code>, be sure you call back to the base class or call <code>Display.sleep()</code>.  Unless, of course, you like burning up your processor whilst doing nothing.</ol></p>

<p>There you go - with just a bit of hackery, you should be able to move your RCP application over to Eclipse 3.3 and still get all the same UI at application startup time.</p>]]>
        
    </content>
</entry>

<entry>
    <title>The (New) Smallest TFS Proxy</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/06/the_new_smallest_tfs_proxy.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.31</id>

    <published>2007-06-06T17:13:32Z</published>
    <updated>2008-04-08T03:32:48Z</updated>

    <summary>My coworker, Martin Woodward has been very pleased with himself lately about his world&apos;s smallest TFS proxy. Never one to back down from a challenge, I present the smaller than the world&apos;s smallest TFS proxy. It&apos;s running on a Mac...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="teamprise" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>My coworker, <a href="http://www.woodwardweb.com/" target="_blank">Martin Woodward</a> has been very pleased with himself lately about his <a href="http://www.woodwardweb.com/vsts/000273.html" target="_blank">world's smallest TFS proxy</a>.  Never one to back down from a challenge, I present the smaller than the world's smallest TFS proxy.  It's running on a Mac Mini, which Martin assures me is (just slightly) smaller than his proxy.</p>

<p><img src="http://www.edwardthomson.com/blog/images/tfsproxy.jpg" alt="The Proxy Server" align="right" class="photo" /> Inevitably, someone else like me with an overblown competitive streak will come along and build a <i>still smaller</i> TFS proxy.  Being as I'm a jerk, I've decided to hit a point that nobody else will match:  this is the first TFS proxy server to run on a Mac.</p>

<p>When I say "run on a Mac", I don't mean that I've got a VM running Windows and Microsoft's TFS proxy server.  That's too easy -- we've got a pint-sized TFS proxy actually running in MacOS X, thanks to <a href="http://www.teamprise.com/news/2007/05/teamprise_announces_java_sdk_f.html" target="_blank">Teamprise's new Java SDK for Team Foundation Server</a>.</p>

<p>Fortunately, writing against the Teamprise SDK is easy.  I didn't keep strict track, but I think that writing this little proxy server took about 10 hours, which probably broke down like:</p>

<ul><li> 4 hours:  figuring out the Jetty servlet framework (for hosting the proxy)
<li> 2 hours:  figuring out the hsqldb database framework (for caching)
<li> 1 hour: lost to cigarette breaks
<li> 2 hours: various other slacking
<li> 1 hour: getting the files out of Team Foundation Server through our SDK</ul>

<p>As you can see, our new SDK will let you very quickly one-up your coworkers.  Isn't that really what software's all about?</p>

<p>If you're at TechEd, and want to see the (new) world's smallest TFS proxy, or the world's first TFS proxy on a Mac, swing by and say hi.  Teamprise is at booth 1333.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Teamprise supports Visual Studio 2008</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/06/teamprise_supports_visual_studio_2008.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.30</id>

    <published>2007-06-04T18:44:03Z</published>
    <updated>2008-04-10T23:12:12Z</updated>

    <summary>Teamprise is very excited to be announcing compatibility with Microsoft Visual Studio 2008. Our Client Suite - Teamprise Explorer, the Teamprise Plugin for Eclipse and our Command Line Client - are tested and known to work against the next version...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="teamprise" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>Teamprise is very excited to be announcing compatibility with Microsoft Visual Studio 2008.  Our Client Suite - Teamprise Explorer, the Teamprise Plugin for Eclipse and our Command Line Client - are tested and known to work against the next version of Team Foundation Server available in VS 2008.</p>

<p>We're very excited about the next version of TFS, as it includes several big performance enhancements, as well as some interesting new features such as support for working offline.  My coworker, <a href="http://benpryor.com/blog/index.php?/archives/38-TFS-Orcas-and-Teamprise.html" target="_blank">Ben Pryor</a> has written significantly about using Teamprise with Visual Studio 2008, which is very helpful if you're curious.</p>

<p>Teamprise is exhibiting at Microsoft TechEd 2007 this week.  Come visit us at booth 1333 and say hello.  We'd love to talk to you about what we're doing with Visual Studio 2008.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Preview Teamprise at JavaOne</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/05/preview_teamprise_at_javaone.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.29</id>

    <published>2007-05-06T00:44:43Z</published>
    <updated>2008-04-08T03:15:06Z</updated>

    <summary>Teamprise is pleased to be exhibiting at the JavaOne conference next week, Tuesday 5/8 - Thursday 5/10. If you&apos;re attending JavaOne and you&apos;re interested in Team Foundation Server, you should stop by our booth to see Teamprise in action. But...</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="teamprise" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>Teamprise is pleased to be <a href="http://www.teamprise.com/news/2007/03/javaone_2007.html" target="_blank">exhibiting at the JavaOne conference</a> next week, Tuesday 5/8 - Thursday 5/10.  If you're attending JavaOne and you're interested in Team Foundation Server, you should stop by our booth to see Teamprise in action.</p>

<p>But you don't need to be registered for JavaOne to visit us!  I have a limited number of exhibit-only passes to JavaOne.</p>

<p>If you're in the Bay Area this week and you're interested integrating Team Foundation Server's version control and work item tracking into Eclipse, or you're interested in accessing Team System from cross-platform clients, come check us out at the Moscone Center.</p>

<p>Just <a href="/contact/">send me an email</a> and we can get the passes to you!</p>]]>
        
    </content>
</entry>

<entry>
    <title>What Could Possibly Go Wrong?</title>
    <link rel="alternate" type="text/html" href="http://www.edwardthomson.com/blog/2007/04/what_could_possibly_go_wrong.html" />
    <id>tag:test2.edwardthomson.com,2007:/blog//1.28</id>

    <published>2007-04-19T14:52:14Z</published>
    <updated>2008-04-08T03:15:06Z</updated>

    <summary>It&apos;s been well over a month since I started talking about Eclipse&apos;s Synchronize functionality, with not a word about my supposed followup.  You might just assume that I&apos;m lazy (and you&apos;d be correct), but as always, there&apos;s more to it than that.</summary>
    <author>
        <name>Edward Thomson</name>
        <uri>http://fark/</uri>
    </author>
    
        <category term="meta" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.edwardthomson.com/blog/">
        <![CDATA[<p>It's been well over a month since I started talking about Eclipse's Synchronize functionality, with not a word about my supposed followup.  You might just assume that I'm lazy (and you'd be correct), but as always, there's more to it than that.</p>

<p>While preparing this second blog entry, I started staring at a folder full of a few dozen screen captures highlighting various features of Eclipse's Synchronize View.  A few dozen is a lot of screenshots to post, but because the Synchronize view's big advantage is that it's so visual, it's hard to decide which visuals to cut out.  And being a rather verbose guy<sup>[1]</sup>, it's rather hard for me to edit.</p>

<p>So instead of unleashing a dozen screenshots on you in a long, rambling blog entry, I decided to do one better:  make a screencast of Synchronize in action.  This way I can still be long and rambling, but there's just one square of visual content on your screen instead of a few dozen.</p>

<p>If you look back through my posts, you'll notice that I don't have any screencasts online.  This is because I've never made one before.  In fact, I have absolutely no experience with video editing, nor audio editing, and when put in front of a microphone, I can barely manage to speak in full sentences.  </p>

<p>Still, the entire concept seems pretty easy.  I click around on a screen while I talk.  I click around on a screen all day.  I also talk all day.  Combining these things shouldn't be too hard, right?</p>

<p>But pride goeth before the fall.</p>

<p>It started out well:  I grabbed <a href="http://www.ambrosiasw.com/utilities/snapzprox/" target="_blank">Snapz Pro</a> to record with.  It works exactly as advertised, recording your screen (or a subset thereof, in my case just my Eclipse window) as well as audio from an arbitrary source (my microphone.)</p>

<p>After that, all that was needed was some editing to remove my stammering, my "um"s and "duhhh"s, my false starts, etc.  No problem right?  My Mac came with iMovie HD, which is supposed to be "the fastest and easiest way to turn home movies into dazzling Hollywood-style hits."  Surely, this amazing program will let me splice up this silly 800x600 video trivially, right?</p>

<p>To be fair, iMovie does <i>seem</i> really easy to use.  Slow, but easy.  After only a few clicks (and thirty minutes of it grinding away), I'd imported my screencast and split the audio and video tracks so I could see the waveforms easily and know right where I wanted to splice, which is also very easy.</p>

<p>Unfortunately, iMovie 6 does have a minor issue with stability.  And by "minor issue," I mean it has a <a href="http://forums.dealmac.com/read.php?4,2567347" target="_blank">tendency</a> <a href="http://www.macupdate.com/reviews.php?id=10463" target="_blank">to</a> <a href="http://www.ischool.utexas.edu/technology/tutorials/graphics/imovie/9crash.html" target="_blank">crash</a> every 10 minutes.  Knowing this, one might suggest I go find a new piece of software to do my video editing.  But I'm the dreaded combination of lazy, cheap and stubborn, and thus came up with an ingenious workaround to continue using the free iMovie that I had already mostly learned:  have a beer or two before using it (to remain calm enough to keep myself from stepping on my computer) and saving often.  No problem, right?</p>

<p>Right.</p>

<p>Despite being slowed down by the constant crashes, I got about halfway through the process of making me sound like a human before iMovie - predictably - crashed for approximately the 714th time.  But this time, it took my entire project file with it - somehow in that crash it had become corrupt.  I googled for solutions, I tried various things to recover it, I checked permissions, I made a sacrifice to the software gods...  I even rebooted.  No love: iMovie continued to tell me it couldn't be read.</p>

<p>At that point, I just walked away, too frustrated with the process to even continue.  I haven't touched it since, and given this delay, I thought I owed my one reader (who is, admittedly, probably Google's indexing bot) an apology.  I will actually finish this article on Synchronize.  I promise.  It will probably consist of a few dozen screenshots, and I'll hate myself for doing that and curse at it every time I see it.  But at least I'll be done with it.</p>

<p>I suppose I could attempt to finish this stupid screencast, but then I'd have to decide whether I want to suffer through using iMovie or if I should just buy Final Cut Pro.  That is to say: being cheap, I need to determine if Final Cut Pro is less expensive than the quantity of oxycontin I'd need to take to be able to handle using iMovie or not[3].  (Beer just isn't going to cut it anymore.)</p>

<p><i>(If you're wondering, of course that oxycontin comment is a joke.  I would never buy oxycontin.  I'm <b>way</b> too cheap for that.)</i></p>

<ol class="footnote">
<li> Perhaps you've noticed, as even my footnotes get footnotes<sup>[2]</sup>.
<li> Often very similar to this one.
</ol>]]>
        
    </content>
</entry>

</feed>
