<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-29517835</id><updated>2012-01-27T02:33:41.385-05:00</updated><title type='text'>Inside SWT</title><subtitle type='html'>I am the father of The Standard Widget Toolkit (SWT), a portable, native widget toolkit for Java. I have a bunch of other interests, but you don't care.

All opinions expressed here are my own unless stolen from other people.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>76</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29517835.post-9156556810727435096</id><published>2011-10-04T18:37:00.003-05:00</published><updated>2011-10-04T18:55:02.856-05:00</updated><title type='text'>Flogging my FrankenMac</title><content type='html'>I'm running a FrankenMac. It's a MacBook Pro with Windows 7 and Linux as guest operating systems.&lt;br /&gt;&lt;br /&gt;For my talk yesterday, I was showing Fx running as an Eclipse plugin on Windows and Mac. I grabbed a few standard Fx examples, modified them slightly and dropped them in. Here is the ColorfulCircle example running in Eclipse:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-BpqjxnazLKY/Touaf6BseAI/AAAAAAAAAGQ/Y4rQPW26Toc/s1600/fx-embed.jpg"&gt;&lt;img style="WIDTH: 200px; HEIGHT: 200px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5659787229664147458" border="0" alt="" src="http://1.bp.blogspot.com/-BpqjxnazLKY/Touaf6BseAI/AAAAAAAAAGQ/Y4rQPW26Toc/s400/fx-embed.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For the demo, I had a total 4 Eclipses (two Windows, two Mac) and 6 Fx embeddings, each doing some sort of animation on my machine. The source Eclipses were full development environments with the source of Fx loaded into them. For extra fear, the Mac Eclipses were running JDK7. There were a few browsers running too on both operating systems and the slide software.&lt;br /&gt;&lt;br /&gt;You might think that it would lurch, but it didn't. Incredible.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-9156556810727435096?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/9156556810727435096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=9156556810727435096' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/9156556810727435096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/9156556810727435096'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2011/10/flogging-my-frankenmac.html' title='Flogging my FrankenMac'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-BpqjxnazLKY/Touaf6BseAI/AAAAAAAAAGQ/Y4rQPW26Toc/s72-c/fx-embed.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-793916310932216817</id><published>2011-10-01T18:30:00.002-05:00</published><updated>2011-10-01T19:12:36.490-05:00</updated><title type='text'>JavaOne</title><content type='html'>I'm speaking at JavaOne this year with Artem Ananiev.  The title of the talk is "Using JavaFX 2.0 UIs with Swing and SWT".  I've worked with Artem in the past but never actually met him.  That's always cool.&lt;br /&gt;&lt;br /&gt;Most of the hassles around interop with Swing and SWT were around threading.  It was possible to embed one toolkit in the other, but programmers needed to be very careful to avoid deadlock.  The rule of thumb was, "never wait" and use asyncExec() and invokeLater() to communicate between the two.&lt;br /&gt;&lt;br /&gt;I'm happy to say that FX and SWT have no such hassles.  Both are apartment threaded and share the same apartment.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-793916310932216817?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/793916310932216817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=793916310932216817' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/793916310932216817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/793916310932216817'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2011/10/javaone.html' title='JavaOne'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4773455829147871214</id><published>2011-05-09T14:38:00.000-05:00</published><updated>2011-05-09T14:38:00.626-05:00</updated><title type='text'>Joining Oracle</title><content type='html'>I guess I've always been a UI guy and my attempts to deny it have failed!  Don't get me wrong, I've been doing UI for the past couple of years but it's been on the application side.  That was a great experience but it was time for a change.&lt;br /&gt;&lt;br /&gt;Why join Oracle?  Oracle isn't kidding.  They are taking Java forward, removing roadblocks and doing whatever it takes.  We've seen a few examples of this already.  Oracle and IBM are working together.  Oracle and Apple are working together and the Mac JVM is going to be better than ever.  The old suspicions are gone and everyone is open for business.&lt;br /&gt;&lt;br /&gt;At this point it's not quite clear exactly where I fit in but I'm an Eclipse fan and Oracle is an Eclipse supporter, so it makes sense to post here.&lt;br /&gt;&lt;br /&gt;Now I'm off to fix some Swing bugs ...&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4773455829147871214?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4773455829147871214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4773455829147871214' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4773455829147871214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4773455829147871214'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2011/05/joining-oracle.html' title='Joining Oracle'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-7329161768464016697</id><published>2009-06-11T21:01:00.003-05:00</published><updated>2009-06-12T06:32:23.022-05:00</updated><title type='text'>After the break up ...</title><content type='html'>&lt;a href="http://www.butterflies-and-zebras.com/"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 359px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5343319093209641138" border="0" alt="" src="http://3.bp.blogspot.com/_FBBFb2akkhg/SidIZ7hSsLI/AAAAAAAAAFE/Go1vky7z1Ys/s400/CD-Cover.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"A lot of people knew I left. I was a fool not to do what Paul did, which was use it to &lt;a href="http://www.butterflies-and-zebras.com/"&gt;sell a record&lt;/a&gt;." John Lennon (1970)&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-7329161768464016697?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/7329161768464016697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=7329161768464016697' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7329161768464016697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7329161768464016697'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2009/06/after-break-up.html' title='After the break up ...'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_FBBFb2akkhg/SidIZ7hSsLI/AAAAAAAAAFE/Go1vky7z1Ys/s72-c/CD-Cover.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4396373204771707761</id><published>2009-06-10T20:57:00.008-05:00</published><updated>2009-06-10T22:46:04.892-05:00</updated><title type='text'>More from the archives</title><content type='html'>Good lord, my office was full of shit.&lt;br /&gt;&lt;br /&gt;Thanks to Jim des Rivieres for pulling out his camera and documenting some of the &lt;a href="http://picasaweb.google.ca/jeem123/SteveSOffice?authkey=Gv1sRgCIWM7I_U5tjwgQE"&gt;artifacts&lt;/a&gt; that we found there. There's a lot of OTI and IBM history amongst the rubble as well as a few things I thought were funny over the years.  I could explain it all but that would detract from the fun.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4396373204771707761?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4396373204771707761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4396373204771707761' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4396373204771707761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4396373204771707761'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2009/06/more-from-archives.html' title='More from the archives'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-6229492992281698819</id><published>2009-06-10T07:05:00.005-05:00</published><updated>2009-06-10T07:30:03.955-05:00</updated><title type='text'>Artifacts from Steve's Office</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_FBBFb2akkhg/Si-lqSy85QI/AAAAAAAAAFs/Axuf-13rV44/s1600-h/Java+Condom+1.JPG"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 266px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5345673428730701058" border="0" alt="" src="http://3.bp.blogspot.com/_FBBFb2akkhg/Si-lqSy85QI/AAAAAAAAAFs/Axuf-13rV44/s400/Java+Condom+1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_FBBFb2akkhg/Si-mFQ9oPpI/AAAAAAAAAF0/_1ZyaTkKfTM/s1600-h/Java+Condom+2.JPG"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 266px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5345673892095082130" border="0" alt="" src="http://3.bp.blogspot.com/_FBBFb2akkhg/Si-mFQ9oPpI/AAAAAAAAAF0/_1ZyaTkKfTM/s400/Java+Condom+2.JPG" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Can you believe that someone thought this was a good idea?&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-6229492992281698819?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/6229492992281698819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=6229492992281698819' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/6229492992281698819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/6229492992281698819'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2009/06/artifacts-from-steves-office.html' title='Artifacts from Steve&apos;s Office'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_FBBFb2akkhg/Si-lqSy85QI/AAAAAAAAAFs/Axuf-13rV44/s72-c/Java+Condom+1.JPG' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-1459345626287056607</id><published>2009-06-08T07:09:00.001-05:00</published><updated>2009-06-08T07:10:14.074-05:00</updated><title type='text'>Message from your Emperor - PLEASE READ - ACTION REQUIRED</title><content type='html'>Well guys, it's been a long fun strange trip. I've had a great time over the years with SWT and Eclipse, but it's time for this Sith Lord to be invading new galaxies.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_FBBFb2akkhg/ShTQ_Ixr6-I/AAAAAAAAAE8/_-4CAImZtkQ/s1600-h/emperor.jpg"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5338121241447099362" border="0" alt="" src="http://2.bp.blogspot.com/_FBBFb2akkhg/ShTQ_Ixr6-I/AAAAAAAAAE8/_-4CAImZtkQ/s400/emperor.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Over the years working on Eclipse, there have been many high points and a few low ones. Making everyone laugh at JavaOne during the height of the "Swing vs SWT wars" was really fun and helped ease the tension. Around that time, there was a full time blogger or two, FUD'ing and crapping on the toolkit and me personally (it seemed) for daring to make a few operating system calls. Who would have believed that?&lt;br /&gt;&lt;br /&gt;The best part of the job was working with everyone at OTI and IBM and meeting all sorts of different people from all over, either in person or through the bug system. Eclipse is a place where (almost) everybody plays and thanks to the Foundation and others in the community, this creates a lot of opportunity. Great work guys!&lt;br /&gt;&lt;br /&gt;It's never a good time to leave, but right now is a clean point. We are about to ship Eclipse 3.5 and this is the best time for me to untangle myself from my commitments. Silenio Quarti will be taking over as SWT team lead at IBM and he is one of the greatest engineers I know.&lt;br /&gt;&lt;br /&gt;June 12th will be my last day with IBM. I've accepted a position at &lt;a href="http://www.bedarra.com/"&gt;Bedarra Research Labs&lt;/a&gt;. The exact details have yet to be nailed down, but after a short break, I'm looking forward to new engineering challenges.&lt;br /&gt;&lt;br /&gt;Best wishes to everyone and thanks,&lt;br /&gt;&lt;br /&gt;Steve&lt;br /&gt;&lt;br /&gt;P.S. I can be reached as steve_northover confuse a spam bot somewhere near "mail that is hot" should there be an attack on the death star from the rebel base.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-1459345626287056607?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/1459345626287056607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=1459345626287056607' title='32 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1459345626287056607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1459345626287056607'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2009/06/message-from-your-emperor-please-read.html' title='Message from your Emperor - PLEASE READ - ACTION REQUIRED'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_FBBFb2akkhg/ShTQ_Ixr6-I/AAAAAAAAAE8/_-4CAImZtkQ/s72-c/emperor.jpg' height='72' width='72'/><thr:total>32</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-327061459048575521</id><published>2009-05-21T21:50:00.003-05:00</published><updated>2009-05-21T23:06:53.905-05:00</updated><title type='text'>You heard Ian!</title><content type='html'>Everyone that makes a donation of US$35 or more receives special ‘Friends’ benefits. So pay up and become "Friends with Benefits" with Eclipse!&lt;br /&gt;&lt;br /&gt;Remember, "&lt;a href="http://ianskerrett.wordpress.com/2009/05/21/friends-get-it-sooner-and-faster/"&gt;Friends get it sooner and faster&lt;/a&gt;."&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-327061459048575521?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/327061459048575521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=327061459048575521' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/327061459048575521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/327061459048575521'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2009/05/you-heard-ian.html' title='You heard Ian!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-159860421542078529</id><published>2009-04-24T17:45:00.003-05:00</published><updated>2009-04-26T07:42:31.084-05:00</updated><title type='text'>Eclipse on Cocoa now full of sheet!</title><content type='html'>Ok, we are crazy but you have to live on the edge every once in a while to prove that you are still alive. Therefore, as part of the polish pass for Eclipse 3.5, we implemented Mac sheet windows.&lt;br /&gt;&lt;br /&gt;A sheet is a temporary dialog that is attached under the title bar of the parent window like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_FBBFb2akkhg/SfCowe2JPtI/AAAAAAAAAE0/9rtmeVVTiKs/s1600-h/sheet.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5327943910046645970" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 226px" alt="" src="http://1.bp.blogspot.com/_FBBFb2akkhg/SfCowe2JPtI/AAAAAAAAAE0/9rtmeVVTiKs/s400/sheet.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The idea behind a sheet is that the parent window and the sheet are tightly coupled and won't get lost in the window stack. On Windows and other platforms, this is achieved by bringing all windows that are blocked forward, along with the dialog, when the user clicks on either the dialog or a blocked window. With a sheet window however, there is no visual confusion or mess on the desktop. The sheet is contained within the parent window.&lt;br /&gt;&lt;br /&gt;When sheets were first introduced on the Mac, they frustrated me. They appear with a wondrous sliding animated fanfare (whoosh!), prompting me while simultaneously blocking the content I need to see to answer the prompt. Thanks a lot! At the time, I considered this a typical case of style over substance but since then, I have lightened up and just hit cancel like everyone else.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;When is a dialog a piece of sheet?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;At first we thought that all dialogs were sheet, but we were wrong. There are dialogs in the world that are not sheet, for example, wizards. Then we thought all message boxes were sheet, but that was wrong too. A message box that warns of a preference change and offers to restart Eclipse is not sheet.&lt;br /&gt;&lt;br /&gt;Bottom line: You need to decide which of your dialogs are sheet. Eclipse can't do it for you and neither can SWT.&lt;br /&gt;&lt;br /&gt;To implement sheet, we added a single style bit SWT.SHEET that you can set on a dialog when it is created. This is typical SWT: a tiny API exposes tons of functionality. For example, the underlying Cocoa API for sheets has a special API to hide and show sheets rather than overloading the regular window hide and show API. We chose to use a style bit and keep the Control.setVisible() API the same.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-159860421542078529?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/159860421542078529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=159860421542078529' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/159860421542078529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/159860421542078529'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2009/04/eclipse-on-cocoa-now-full-of-sheet.html' title='Eclipse on Cocoa now full of sheet!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_FBBFb2akkhg/SfCowe2JPtI/AAAAAAAAAE0/9rtmeVVTiKs/s72-c/sheet.png' height='72' width='72'/><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4654728379373998522</id><published>2009-03-28T11:06:00.004-05:00</published><updated>2009-03-28T21:09:55.813-05:00</updated><title type='text'>Lots of good stuff at EclipseCon</title><content type='html'>There was a ton of interesting stuff this year at EclipseCon but my favourite was Kevin McGuire and Tim Wagner's key note, "&lt;a href="http://www.eclipsecon.org/2009/sessions?id=750"&gt;Darwin Among the IDEs&lt;/a&gt;". We are often so mired in our day to day work that we fail to step back, evaluate where we are, where we have come from and where we might be going. Keynotes are supposed to make you think and this one took my mind off throbbing default buttons and Mac toolbars that didn't make M6.&lt;br /&gt;&lt;br /&gt;During the "e4 in Review" talk, people were asking about backward compatibility with 3.x and Martin Oberhuber stressed that Eclipse was a platform and then innocently asked, "What would happen if Windows suddenly stopped running our old programs?"&lt;br /&gt;&lt;br /&gt;It took a second for the room to get it and then explode.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4654728379373998522?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4654728379373998522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4654728379373998522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4654728379373998522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4654728379373998522'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2009/03/lots-of-good-stuff-at-eclipsecon.html' title='Lots of good stuff at EclipseCon'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-2610376395934846554</id><published>2009-03-02T17:48:00.003-05:00</published><updated>2009-03-02T19:44:18.989-05:00</updated><title type='text'>Fighting the Cocoa default button!</title><content type='html'>On Mac Cocoa OS X 10.5, the throbbing default button animation is implemented as a separate thread that calls drawing methods directly from that thread. You would think that this wouldn't be a big deal but threads in a GUI toolkit are always a big deal.&lt;br /&gt;&lt;br /&gt;It's an amazing GUI toolkit 101 blooper!&lt;br /&gt;&lt;br /&gt;Who cares if the default button is painted from another thread? First off, SWT checks thread accesses to avoid operating system crashes. First attempts at a fix removed this check, causing operating system crashes.&lt;br /&gt;&lt;br /&gt;How about hacking so that drawing requests from the throbbing thread are serviced, but don't run any SWT listeners? No good. The Mac user-interface is composited so parents of the button are asked to a paint all the way up to the shell and the button paints last on top of them.&lt;br /&gt;&lt;br /&gt;Can't paint ... but must.&lt;br /&gt;&lt;br /&gt;It seems that there are only two fixes:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Lock and allow the throbbing thread to run as the Cocoa Gods intended&lt;/li&gt;&lt;li&gt;Throb somehow safely in the UI-thread&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Since introducing locking everywhere in SWT at Eclipse 3.5 M6 and hoping that it works at this point is insane, all we can do for now is attempt to throb safely. This fix involves remembering that you were asked to throb, telling the operating system that it has throbbed already and then later throbbing with impunity from the user-interface thread.&lt;/p&gt;&lt;p&gt;Steve&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-2610376395934846554?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/2610376395934846554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=2610376395934846554' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/2610376395934846554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/2610376395934846554'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2009/03/fighting-cocoa-default-button.html' title='Fighting the Cocoa default button!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4310429219369792611</id><published>2009-01-28T11:47:00.002-05:00</published><updated>2009-01-28T12:30:45.786-05:00</updated><title type='text'>Goodbye **early access** for Mac cocoa</title><content type='html'>The SWT team has been working really hard to complete the Mac cocoa port for Eclipse 3.5. As is typical with these things, about 95% of the code works but it's the last 5% that makes all the difference. What's in the 5%? The usual crashes, performance problems and stupid bugs that make things look bad, when in fact they are pretty good.&lt;br /&gt;&lt;br /&gt;Here are some bugs that have been fixed recently for Eclipse 3.5 M5 (&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=253227"&gt;253227&lt;/a&gt;, &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=260929"&gt;260929&lt;/a&gt;, &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=261854"&gt;261854&lt;/a&gt; and my personal favourite &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251021"&gt;251021&lt;/a&gt;). Some didn't make it because there wasn't enough time to get to them (&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=260592"&gt;260592&lt;/a&gt;) but we'll be looking into them and more for M6.&lt;br /&gt;&lt;br /&gt;Special thanks go to the committers Kevin Barnes, Grant Gayed, Scott Kovatch, Silenio Quarti and Felipe Heidrich as well as the community for testing and reporting bugs. We aren't done yet. As more people start running the code, we're going to see more problems and more crazy fixes in the code.&lt;br /&gt;&lt;br /&gt;Stay tuned!&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4310429219369792611?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4310429219369792611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4310429219369792611' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4310429219369792611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4310429219369792611'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2009/01/goodbye-early-access-for-mac-cocoa.html' title='Goodbye **early access** for Mac cocoa'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-1225375659746263922</id><published>2008-12-12T22:53:00.001-05:00</published><updated>2008-12-12T23:17:18.723-05:00</updated><title type='text'>Too many meetings ...</title><content type='html'>Remember folks ...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_FBBFb2akkhg/SUM1XXGS-pI/AAAAAAAAAEM/evembl4B4hU/s1600-h/meetings.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5279121863662041746" style="WIDTH: 250px; CURSOR: hand; HEIGHT: 170px" alt="" src="http://1.bp.blogspot.com/_FBBFb2akkhg/SUM1XXGS-pI/AAAAAAAAAEM/evembl4B4hU/s200/meetings.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-1225375659746263922?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/1225375659746263922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=1225375659746263922' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1225375659746263922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1225375659746263922'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/12/remember.html' title='Too many meetings ...'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_FBBFb2akkhg/SUM1XXGS-pI/AAAAAAAAAEM/evembl4B4hU/s72-c/meetings.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-7617042364133527565</id><published>2008-11-29T20:16:00.002-05:00</published><updated>2008-11-29T22:05:16.318-05:00</updated><title type='text'>Smog Computing</title><content type='html'>&lt;div&gt;&lt;div&gt;Announcing smog computing! I don't know about you, but I'm heading for the clouds. Enough computing on earth. The bits are much more delicious here in the stratosphere. Up here, a guy can really click on a button. It's different. It's better.&lt;br /&gt;&lt;br /&gt;Now to get here, I had to endure fog computing. That was me, in a fog, wondering where everything was. Where are the class hierarchies? Where are the visibility rules? Where are the components? But the fog cleared ... and here I am (cough, cough).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hurricanecandice.files.wordpress.com/2008/04/7smog.jpg"&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_FBBFb2akkhg/STIB_dMrD9I/AAAAAAAAAEE/jT57scPmKZc/s1600-h/smog.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5274280303285440466" style="WIDTH: 200px; CURSOR: hand; HEIGHT: 130px" alt="" src="http://1.bp.blogspot.com/_FBBFb2akkhg/STIB_dMrD9I/AAAAAAAAAEE/jT57scPmKZc/s200/smog.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Listen up ground dwellers, &lt;a href="http://javascript.crockford.com/javascript.html"&gt;Douglas Crockford&lt;/a&gt; says, "I have been writing JavaScript for 8 years now, and I have never once found need to use an uber function. The super idea is fairly important in the classical pattern, but it appears to be unnecessary in the prototypal and functional patterns. I now see my early attempts to support the classical model in JavaScript as a mistake."&lt;br /&gt;&lt;br /&gt;Steve&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-7617042364133527565?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/7617042364133527565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=7617042364133527565' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7617042364133527565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7617042364133527565'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/11/smog-computing.html' title='Smog Computing'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_FBBFb2akkhg/STIB_dMrD9I/AAAAAAAAAEE/jT57scPmKZc/s72-c/smog.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4766751986743832600</id><published>2008-10-10T10:16:00.002-05:00</published><updated>2008-10-10T10:31:40.327-05:00</updated><title type='text'>You gotta love the Mac!</title><content type='html'>For shear diversity in getting things wrong, the Mac wins. Windows just crashes or locks up, but the Mac fails creatively. The other day, I was giving a presentation from Mike Wilson (McQ)'s office using his Mac and this is what happened:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_FBBFb2akkhg/SO9yzqWLHoI/AAAAAAAAADs/L9iD7--JQgc/s1600-h/failure.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5255545522030845570" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_FBBFb2akkhg/SO9yzqWLHoI/AAAAAAAAADs/L9iD7--JQgc/s320/failure.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This failure is wonderful. If it has just drawn everything sideways rather than up and down and sideways, I could have tilted my head to read it.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4766751986743832600?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4766751986743832600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4766751986743832600' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4766751986743832600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4766751986743832600'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/10/you-gotta-love-mac.html' title='You gotta love the Mac!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_FBBFb2akkhg/SO9yzqWLHoI/AAAAAAAAADs/L9iD7--JQgc/s72-c/failure.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-255886323099631653</id><published>2008-09-14T09:17:00.000-05:00</published><updated>2008-09-14T08:30:56.707-05:00</updated><title type='text'>The GUI world is a mess</title><content type='html'>It's no secret that the GUI world is a mess. It was bad on the desktop, but it's worse on the web. Products that have both a desktop and web presence need to build and maintain both. That's two messes instead of one.&lt;br /&gt;&lt;br /&gt;Web and desktop applications, though maddeningly similar, have certain key differences. First off, there are two fundamental types of web applications. The first and the majority, are traditional hyperlink-based applications. They provide access to remote content using the familiar "document browsing" web metaphor. The second and the new breed, are desktop-like applications that create and manipulate complex content. They use the familiar "stay in the same window" desktop metaphor. Hybrids of the two are possible.&lt;br /&gt;&lt;br /&gt;Desktop-like web applications, especially AJAX ones, are difficult to build, debug and maintain. That's why there is such excitement over things like web spreadsheets and word processors that, while functional, are so basic they would be laughed off the desktop.&lt;br /&gt;&lt;br /&gt;This concludes today's edition of: Stating the Obvious.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-255886323099631653?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/255886323099631653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=255886323099631653' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/255886323099631653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/255886323099631653'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/09/gui-world-is-mess.html' title='The GUI world is a mess'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-5990340010919529412</id><published>2008-09-11T07:43:00.003-05:00</published><updated>2008-09-11T15:51:40.078-05:00</updated><title type='text'>Back to work!</title><content type='html'>Ok, so now it's September, the vacations are over we are on the hook for both Eclipse 3.5 and e4 work.  The planning is coming to an end soon and the work is about to begin (not that people haven't been working all along).&lt;br /&gt;&lt;br /&gt;For SWT, there are lots of fun and interesting things going on.  The cocoa port will be real.  My old friend Scott Kovatch of Adobe and Apple fame is working with us daily, not just submitting patches but owning and implementing entire areas.  For those of you watching the last little while, the cocoa port is classic SWT.  Hack, get a pile of code working, step back, evaluate, refactor, fix the tools, hack, get a pile of code working, step back, evaluate, refactor ...&lt;br /&gt;&lt;br /&gt;I'm hoping to get back to blogging more regularly.  Not that you care, but it's always fun when I say something stupid, like "The worst platform in the world is Mozilla", the subject of my next post.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-5990340010919529412?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/5990340010919529412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=5990340010919529412' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5990340010919529412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5990340010919529412'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/09/back-to-work.html' title='Back to work!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-5586253011805119737</id><published>2008-06-24T07:35:00.000-05:00</published><updated>2008-06-24T08:16:37.730-05:00</updated><title type='text'>I have a theory ...</title><content type='html'>... that methods come in two flavours.&lt;br /&gt;&lt;br /&gt;The first flavour is simple. For example, methods like runMessages() consist of an iteration that runs each message.  Heck, they might even send run() to each element in a list, but they don't do much else.  They are trivial to understand and easy to see working.&lt;br /&gt;&lt;br /&gt;Then there are the complex kind.  These are the hairy long methods that do interesting work.  They might be inlined, access the representation directly and have a ton of local variables and switches.  These methods need to be decoded each time you see them.&lt;br /&gt;&lt;br /&gt;The assertion is this:  If your code is all simple, then control is too decentralized and your program might be large and slow, making it difficult for others to understand, maintain and debug.  If your code is all complex, then control is too centralized and your code is a mess, making it difficult for others to understand, maintain and debug.&lt;br /&gt;&lt;br /&gt;A good program has the right mix of both.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-5586253011805119737?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/5586253011805119737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=5586253011805119737' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5586253011805119737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5586253011805119737'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/06/i-have-theory.html' title='I have a theory ...'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4168636395727240595</id><published>2008-06-03T06:58:00.001-05:00</published><updated>2008-06-03T07:54:39.735-05:00</updated><title type='text'>Fix only the one place</title><content type='html'>Like Sergent Pepper's Lonely Hearts Club Band (Reprise), &lt;em&gt;"It's getting pretty near the end"&lt;/em&gt; for Eclipse 3.4. As always, there is a stream of bug reports coming in, 99.9% won't get fixed for this release.&lt;br /&gt;&lt;br /&gt;We did fix 235219 yesterday (&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235219"&gt;Cheese in tree&lt;/a&gt;). It was a regression from 3.3 that had a big visual impact on Eclipse. Amazingly, it was only reported just now. The underlying problem was that the Windows message TVM_GETVISIBLECOUNT returns only the fully visible item count of a tree and we made the mistake of thinking that it included the partially obscured item at the bottom.  The fix was to change a "&lt;" to a "&lt;=".&lt;br /&gt;&lt;br /&gt;TVM_GETVISIBLECOUNT is used in other places.  After a careful analysis, we decided that we wouldn't change them.  The code is wrong, but we've done our testing, the impact is low and it's too late.  Better to fix only the one place and leave bugs in, than blow the release.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4168636395727240595?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4168636395727240595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4168636395727240595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4168636395727240595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4168636395727240595'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/06/fix-only-one-place.html' title='Fix only the one place'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-5133568593972309442</id><published>2008-03-22T11:51:00.000-05:00</published><updated>2008-03-22T12:00:12.736-05:00</updated><title type='text'>Schindl's list</title><content type='html'>If you've ever been on the list, you'll know it.  The one I'm talking about is Schindl's list.  Tom Schindl finds the bugs, reports them, patches when he can and forces the fixes through.  Thanks Tom.  The list is life.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-5133568593972309442?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/5133568593972309442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=5133568593972309442' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5133568593972309442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5133568593972309442'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/03/schindls-list.html' title='Schindl&apos;s list'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-1408953661022267126</id><published>2008-03-19T00:53:00.000-05:00</published><updated>2008-03-19T01:13:10.528-05:00</updated><title type='text'>The fake Steve Northover</title><content type='html'>The fake Steve Northover will be attending EclipseCon tomorrow and showing up at random in some of the talks.  You will be able to tell the real one from the fake one easily.  The fake one cannot play the guitar and will use manager-speak, saying things like "break down the silos".&lt;br /&gt;&lt;br /&gt;Meanwhile, the real Steve Northover is at home, working on e5.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-1408953661022267126?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/1408953661022267126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=1408953661022267126' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1408953661022267126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1408953661022267126'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/03/fake-steve-northover.html' title='The fake Steve Northover'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4452400646895454231</id><published>2008-03-14T23:00:00.002-05:00</published><updated>2008-03-15T23:05:04.040-05:00</updated><title type='text'>Exciting news!</title><content type='html'>We've begun working on e5, the new generation Eclipse platform based on e4. It will be written from top to bottom entirely in XML because the brackets have officially changed.&lt;br /&gt;&lt;br /&gt;In case you don't know what that means, first the brackets were Lisp (), then Smalltalk [], then Java {} and now XML &lt;&gt;.  The code between the brackets is about the same, except in the XML case where math is not allowed.&lt;br /&gt;&lt;br /&gt;All work is being performed behind closed doors in a evil lair.&lt;br /&gt;&lt;br /&gt;Steve Northover&lt;br /&gt;"... not the best community relations expert"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4452400646895454231?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4452400646895454231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4452400646895454231' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4452400646895454231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4452400646895454231'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/03/exciting-news.html' title='Exciting news!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-7547598970619049930</id><published>2008-03-07T20:44:00.001-05:00</published><updated>2008-03-08T21:27:08.442-05:00</updated><title type='text'>I'm speaking at e4Con</title><content type='html'>Holy crap, what a bunch of trouble I caused.  I'm not going to comment on the whole e4 thing because McQ and others have done this already way better.  The fact is, we're looking for smart people to help define e4 and work on it.&lt;br /&gt;&lt;br /&gt;It could be &lt;strong&gt;you&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;I'm a friend of e4!  Donate to e4!&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-7547598970619049930?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/7547598970619049930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=7547598970619049930' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7547598970619049930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7547598970619049930'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2008/03/im-speaking-at-e4con.html' title='I&apos;m speaking at e4Con'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-8335393646915189966</id><published>2007-12-21T08:19:00.000-05:00</published><updated>2007-12-21T01:34:15.612-05:00</updated><title type='text'>My talk was accepted</title><content type='html'>I'll be giving a long talk on SWT 4.0 at EclipseCon 2008 with Silenio Quarti, committer, technical lead and programmer extraordinaire. We're planning to explore today's fragmented GUI space and sketch out some possible futures for SWT. See you there!&lt;br /&gt;&lt;br /&gt;Steve&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_FBBFb2akkhg/R2tbKwLNpFI/AAAAAAAAACc/mCx6qFG64pE/s1600-h/sleeping2.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5146307239489676370" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_FBBFb2akkhg/R2tbKwLNpFI/AAAAAAAAACc/mCx6qFG64pE/s320/sleeping2.gif" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-8335393646915189966?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/8335393646915189966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=8335393646915189966' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/8335393646915189966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/8335393646915189966'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/12/my-talk-was-accepted.html' title='My talk was accepted'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_FBBFb2akkhg/R2tbKwLNpFI/AAAAAAAAACc/mCx6qFG64pE/s72-c/sleeping2.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-5471323876033887110</id><published>2007-11-29T00:35:00.000-05:00</published><updated>2007-11-29T01:00:17.264-05:00</updated><title type='text'>Insights and insults from GTK ...</title><content type='html'>Got this the other day while running Eclipse on Linux:&lt;br /&gt;&lt;br /&gt;** (SWT:5087): WARNING **: Some clown returned undeclared exception 'IDL:Bonobo/BadArg:1.0'&lt;br /&gt;&lt;br /&gt;That's it, I'm upgrading SWT's error messages to be more helpful and informative. How about, "You turd, you can't access a widget from outside the display thread"?&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-5471323876033887110?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/5471323876033887110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=5471323876033887110' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5471323876033887110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5471323876033887110'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/11/insights-and-insults-from-gtk.html' title='Insights and insults from GTK ...'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4600154391000128657</id><published>2007-11-20T09:57:00.000-05:00</published><updated>2007-11-20T10:45:46.039-05:00</updated><title type='text'>Assmetrics</title><content type='html'>I'd like to coin a new technical term: &lt;em&gt;Assmetrics&lt;/em&gt;. As you might imagine, an assmetric is exactly what you think it is. Programs are full of them but my favourite these days is from the slash and burn Mac cocoa port. If you don't resize a combo box to be exactly 26 pixels high, you get this message at runtime:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;2007-11-20 10:17:26.452 java[4523:10b] This application is trying to draw a very large combo box, 100 points tall. Vertically resizable combo boxes are not supported, but it happens that 10.4 and previous drew something that looked kind of sort of okay. The art in 10.5 does not break up in a way that supports that drawing. To avoid breaking existing apps, NSComboBox in 10.5 will use the 10.4 art for large combo boxes, but it won't exactly match the rest of the system. This application should be revised to stop using large combo boxes. This warning will appear once per app launch.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;By the time the guy who implemented NSComboBox typed all this in, he could have just centered the thing.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4600154391000128657?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4600154391000128657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4600154391000128657' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4600154391000128657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4600154391000128657'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/11/assmetrics.html' title='Assmetrics'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-5148936574468201060</id><published>2007-11-17T08:17:00.000-05:00</published><updated>2007-11-17T08:34:47.789-05:00</updated><title type='text'>Ok community, blow your brains out</title><content type='html'>As many of you know, a ton of Mac cocoa work was taking place over the last two weeks. We have now folded the lot from the cocoa_work stream into HEAD. At this point, despite the astounding progress that was made (including porting the browser), there is no more time to work on it.&lt;br /&gt;&lt;br /&gt;Right now, by commenting out NSObject.release() and using dark magic to get around the fact that there is no launcher, Eclipse comes up. Obviously, we are freeing something we shouldn't and crashing because of it. As you can imagine in a prototype that was developed so rapidly, there are many bugs and unimplemented features but ... holy shit, Eclipse starts.&lt;br /&gt;&lt;br /&gt;Please contact us on platform-dev-swt to find out how you can help.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-5148936574468201060?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/5148936574468201060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=5148936574468201060' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5148936574468201060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5148936574468201060'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/11/ok-community-blow-your-brains-out.html' title='Ok community, blow your brains out'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4845644274884753723</id><published>2007-11-09T03:56:00.000-05:00</published><updated>2007-11-09T16:44:11.286-05:00</updated><title type='text'>Great-a-success!</title><content type='html'>&lt;div&gt;Here is the ControlExample running under cocoa:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); "&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_FBBFb2akkhg/RzTTrLp0o_I/AAAAAAAAACM/qllCEW9ZeeY/s320/Untitled.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5130958614297879538" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;We started on Monday with nothing. Along the way, we hit an Objective-C compiler bug involving struct return types that caused a series of Apple trolls to visit us, each one expressing increasing disbelief. No problem though, I love these low level compiler guys. They are smart and fun.&lt;br /&gt;&lt;br /&gt;But crashing didn't stopped us. We just typed in custom natives each time we hit the problem and kept going. Eclipse allowed us to develop rapidly, almost as fast as the old Smalltalk days. Objective-C has lots of good stuff from Smalltalk like real meta-classes (Java static methods are crap) and dynamic dispatch.&lt;br /&gt;&lt;br /&gt;The week was an almost perfect example of prototyping. The code we have is utter crap and we have cut every corner, however, we have learned the technology and explored the area. Prototyping is about reducing risk using a short term, high energy, low quality approach to prove that a solution is possible and scope the time frame.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4845644274884753723?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4845644274884753723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4845644274884753723' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4845644274884753723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4845644274884753723'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/11/great-success.html' title='Great-a-success!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_FBBFb2akkhg/RzTTrLp0o_I/AAAAAAAAACM/qllCEW9ZeeY/s72-c/Untitled.png' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-2441918214458662146</id><published>2007-11-07T23:51:00.000-05:00</published><updated>2007-11-08T00:49:51.355-05:00</updated><title type='text'>Hacking at Apple</title><content type='html'>&lt;p align="left"&gt;Silenio and I are at Apple this week. We were invited to take a course which turned out to be a cocoa hack-a-thon. It's a good deal for me because I get to code and get away from distractions at IBM.&lt;br /&gt;&lt;br /&gt;As many of you know, cocoa is Objective-C and SWT is programmed from top to bottom in Java (otherwise, we couldn't possibly develop or maintain the toolkit). So the first order of business was to figure out how to call Objective-C from Java. We needed to convert this:&lt;br /&gt;&lt;br /&gt;[object message: 12];&lt;br /&gt;&lt;br /&gt;into Java.&lt;br /&gt;&lt;br /&gt;Obviously, we could have a billion natives, one for each message, but this would be too crazy, even for us. So we got the compiler to dump the assembler to see what was going on. It turns out that everything is a call to objc_msgSend() so we typed these guys in and were on our way.&lt;br /&gt;&lt;br /&gt;On Monday, Scott Kovatch (my friend at Apple) said, "Hey, we've got a description of all this stuff in XML". He showed us where it was and by the start of the next day, Silenio had all of the selectors and classes that we needed. So instead of typing:&lt;br /&gt;&lt;br /&gt;OS.objc_msgSend(id, OS.sel_message, 12);&lt;br /&gt;&lt;br /&gt;we were typing:&lt;br /&gt;&lt;br /&gt;object.message(12);&lt;br /&gt;&lt;br /&gt;Everyone else in the room thinks we're insane.&lt;/p&gt;&lt;p align="left"&gt;Steve&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-2441918214458662146?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/2441918214458662146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=2441918214458662146' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/2441918214458662146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/2441918214458662146'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/11/hacking-at-apple.html' title='Hacking at Apple'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-7043173596905646931</id><published>2007-10-29T23:27:00.000-05:00</published><updated>2007-10-29T22:43:34.449-05:00</updated><title type='text'>If I read this one more time, I will puke ...</title><content type='html'>Yesterday, I read yet another person quote Knuth saying, "Premature optimization is root of all evil". Knuth wrote that in 1974 in the era of punch cards. Over the years, I've seen this statement used to defend bloatware, slugware and complexware. I'm tired of it.&lt;br /&gt;&lt;br /&gt;Of course, when you are prototyping, don't be concerned with performance because you are prototyping. At the same time, if there is something simple you can do to be faster, do it! That way nobody has to come back later and optimize your code.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-7043173596905646931?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/7043173596905646931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=7043173596905646931' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7043173596905646931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7043173596905646931'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/10/if-i-read-this-one-more-time-i-will.html' title='If I read this one more time, I will puke ...'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-5659698989792490853</id><published>2007-10-16T09:16:00.000-05:00</published><updated>2007-10-16T07:51:38.649-05:00</updated><title type='text'>Lots of gradients, less functionality</title><content type='html'>If you use Hotmail, you'll notice that recently the user interface has changed. It's now super cool and gradient filled. The new login is spiffy and exciting, AJAX enabled and hover happy. Here it is:&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_FBBFb2akkhg/RxDWhN1uabI/AAAAAAAAABs/nbsosQqFTQM/s1600-h/login.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5120828642459281842" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_FBBFb2akkhg/RxDWhN1uabI/AAAAAAAAABs/nbsosQqFTQM/s320/login.png" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;You'll also notice that if you have multiple Hotmail accounts, it's less functional. Click 'Sign in with a different account' and you get something similar to the old login:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_FBBFb2akkhg/RxDYVN1uacI/AAAAAAAAAB0/4xxppki462E/s1600-h/login2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5120830635324107202" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_FBBFb2akkhg/RxDYVN1uacI/AAAAAAAAAB0/4xxppki462E/s320/login2.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Now you get to type the new email address in again, rather than editing the old one. Isn't that great?  Microsoft, keep those gradients coming.&lt;/div&gt;&lt;div&gt;&lt;p&gt;Steve&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-5659698989792490853?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/5659698989792490853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=5659698989792490853' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5659698989792490853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/5659698989792490853'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/10/lots-of-gradients-less-functionality.html' title='Lots of gradients, less functionality'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_FBBFb2akkhg/RxDWhN1uabI/AAAAAAAAABs/nbsosQqFTQM/s72-c/login.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-7847859910810484845</id><published>2007-10-11T12:32:00.000-05:00</published><updated>2007-10-11T12:52:17.944-05:00</updated><title type='text'>Armillaria Ostoyae</title><content type='html'>Sometimes I feel like I'm part of &lt;a href="http://www.extremescience.com/biggestlivingthing.htm"&gt;Armillaria Ostoyae&lt;/a&gt;, the worlds largest living thing. No surprise, it's a fungus that sneaks around underground, killing trees by the roots.&lt;br /&gt;&lt;br /&gt;What caused this revelation? I was shown a presentation where Eclipse (and SWT by proxy) was a tiny little box in a huge diagram that resembled modern art. I know how big SWT and Eclipse are. I'm part of the fungus!&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-7847859910810484845?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/7847859910810484845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=7847859910810484845' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7847859910810484845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7847859910810484845'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/10/armillaria-ostoyae.html' title='Armillaria Ostoyae'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-8588783543678569807</id><published>2007-08-21T19:41:00.000-05:00</published><updated>2007-08-21T18:42:15.901-05:00</updated><title type='text'>Backpfeifengesicht</title><content type='html'>German for a face that cries out for a fist in it.&lt;br /&gt;&lt;br /&gt;As part of the "API is forever" philosophy, SWT committers spend a lot of time exploring naming, package visibility and the way an API works, a long time after the code works. There is always tension between the smallest number of classes, methods and constants needed to get the job done, consistency with similar concepts in the toolkit and the future. The future is important because "API grows like fungus", however twisting today's API for a future that may never come makes today's API cumbersome and hard to maintain. So, before an API makes it out, we've considered the likely futures and have concrete ideas about what we will do should they arise. As you can imagine, all this discussion is very stressful.&lt;br /&gt;&lt;br /&gt;I love the fact that the Germans have a word for something I feel every once in a while.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-8588783543678569807?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/8588783543678569807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=8588783543678569807' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/8588783543678569807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/8588783543678569807'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/08/backpfeifengesicht.html' title='Backpfeifengesicht'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-1777932392772887075</id><published>2007-08-01T08:12:00.000-05:00</published><updated>2007-08-01T16:25:56.380-05:00</updated><title type='text'>API grows like fungus!</title><content type='html'>When you define an API, if you think you are done or have covered all the cases, you're dreaming. API grows! Fortunately, there are lots of things you can do to ensure that this can happen, without resorting to the dreaded IWhatever2's.&lt;br /&gt;&lt;br /&gt;Consider this interface method:&lt;br /&gt;&lt;br /&gt;public void onKeyPress(Widget sender, char keyCode, int modifiers);&lt;br /&gt;&lt;br /&gt;What's wrong here? First off, 4-byte Unicode is coming and char's won't cut it. Secondly, suppose I want to add the concept of raw keyCode (for example, to distinguish between and unshifted 'A')? There's no place for that information. How about the concept of a forwarder (ie. this key press was forwarded to this widget from another widget) or a "doit" flag to cancel the operation? Not possible.&lt;br /&gt;&lt;br /&gt;Fortunately, the fix is easy. The method should take an object rather than a list of parameters. The object is free to grow methods and fields without breaking the method signature.&lt;br /&gt;&lt;br /&gt;public void onKeyPress(KeyEvent keyEvent);&lt;br /&gt;&lt;br /&gt;Seems obvious, right? Not really. This method comes from GWT.  They have shipped and cannot make these sorts of changes to this method without breaking people.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-1777932392772887075?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/1777932392772887075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=1777932392772887075' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1777932392772887075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1777932392772887075'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/08/api-grows-like-fungus.html' title='API grows like fungus!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-8387615613801425732</id><published>2007-06-09T11:08:00.000-05:00</published><updated>2007-06-09T10:17:46.451-05:00</updated><title type='text'>It just works</title><content type='html'>The other day I remoted in from home to my Vista machine at work and noticed that the caret had stopped blinking. At first I thought it was a bug, but when more of the Vista animations weren't there, I realized that it was a feature.&lt;br /&gt;&lt;br /&gt;Animations take bandwidth and Vista was degrading (gracefully) to give me better performance. Of course, Eclipse, RCP, SWT and other native applications get this right.&lt;br /&gt;&lt;br /&gt;It's always cool when I find another feature that "just works".  So many things just don't these days.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-8387615613801425732?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/8387615613801425732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=8387615613801425732' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/8387615613801425732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/8387615613801425732'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/06/it-just-works.html' title='It just works'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-1993909761806259545</id><published>2007-05-31T08:50:00.000-05:00</published><updated>2007-05-31T08:12:31.478-05:00</updated><title type='text'>Analysis Paralysis</title><content type='html'>I've seen this happen to people before. They are given a problem with some really thorny cases and they thrash. Me, I think with my fingers.&lt;br /&gt;&lt;br /&gt;Thinking with your fingers can be dangerous. For example, the first code you write, the first code that solves the problem, is never the right code. Thinking with your fingers involves refactoring. Sometimes you need to throw everything out and start again but this time, you know the problem space.&lt;br /&gt;&lt;br /&gt;You can thrash with your fingers too. You'll know when you are thrashing. You hack and get nowhere. Everyone has experienced that sinking feeling. When that happens, turn the computer off!  Go talk to someone, google or read a book.  You are not alone.&lt;br /&gt;&lt;br /&gt;There is another version of analysis paralysis that affects managers. It leads to defeating meetings, phone drone and endless email. I won't discuss that in case I get fired. Besides, I don't want to limit my advancement opportunities.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-1993909761806259545?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/1993909761806259545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=1993909761806259545' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1993909761806259545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1993909761806259545'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/05/analysis-paralysis.html' title='Analysis Paralysis'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-6464724887620443633</id><published>2007-05-22T21:47:00.000-05:00</published><updated>2007-05-22T22:36:44.607-05:00</updated><title type='text'>I hate Windows</title><content type='html'>Ok, now I have your attention: I don't really hate Windows (any more than the rest of them). So what did Windows do to me this time you ask? We were looking good for Eclipse 3.3 RC2 when &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=188381"&gt;this&lt;/a&gt; came in.&lt;br /&gt;&lt;br /&gt;On Vista only (win32, not WPF) , it turns out that &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/treeview/messages/tvm_getnextitem.asp"&gt;TVM_GETNEXTITEM&lt;/a&gt; is really slow when called with TVGN_LASTVISIBLE during a tree item collapse when the item that is collapsing has more than 23 children and each child has at least one child and the collapsing item that started the whole thing going is about to become the new absolute last item in the tree. All this has to happen during a WM_NOTIFY for custom draw (NM_CUSTOMDRAW with subcode CDDS_POSTPAINT) or it's not slow. You got all that?&lt;br /&gt;&lt;br /&gt;Obviously, we have a broken fuxit .... as in, "What the fuxit doing?". My guess is that some cache way down deep in Windows is getting invalidated and someone is linear searching every item in the tree multiple times.&lt;br /&gt;&lt;br /&gt;Fortunately, SWT has no custom C code (yay!) so it was pretty easy to find the system call that was taking the time and come up with a work around. Even though the work around code will run on XP, I'll probably guard it with a test for Vista. After all, we're closing in on RC2. Gotta be careful.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-6464724887620443633?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/6464724887620443633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=6464724887620443633' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/6464724887620443633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/6464724887620443633'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/05/i-hate-windows.html' title='I hate Windows'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-8889368853299207574</id><published>2007-05-15T09:05:00.000-05:00</published><updated>2007-05-15T07:26:26.173-05:00</updated><title type='text'>Is that new IDE feature worthwhile?</title><content type='html'>I'm a simple guy and live by simple rules. One of them is: "That which obscures my code is bad". This rule isn't hard and fast, but generally turns out to be true.&lt;br /&gt;&lt;br /&gt;For example, the red squiggles that show up under your code (sometimes called "the red sea") are good. They tell me I have compile errors and let me see my code at the same time. Automatic Javadoc or code assist (sometimes called "code desist") is bad. It can steal focus, misdirect keystrokes, obscure code, insert random text fragments, slow my typing and most of all, confuse and frighten me. It's a completely different story when I ask for it. Then I'm not afraid.&lt;br /&gt;&lt;br /&gt;It's hilarious watching people give demos, fighting with their IDE as it inserts unwanted code fragments which they immediately delete. Fortunately, Eclipse allows you to configure everything so you get to choose whether you are being helped or hindered.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-8889368853299207574?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/8889368853299207574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=8889368853299207574' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/8889368853299207574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/8889368853299207574'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/05/is-that-new-ide-feature-worthwhile.html' title='Is that new IDE feature worthwhile?'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4640693170215551401</id><published>2007-04-17T07:36:00.000-05:00</published><updated>2007-04-17T09:53:31.300-05:00</updated><title type='text'>Announcing Avaj!</title><content type='html'>Avaj is a new strongly typed object oriented language. It features C syntax, a garbage collector and many other advanced features. The designers of Avaj know that "API is forever" and "@deprecated is a lie". Therefore, Avaj has a compact class library, starts fast and has a small memory footprint.&lt;br /&gt;&lt;br /&gt;Classes in Avaj are real. The concepts of "class" and "type" are the same. Each class has a meta-class to describe the class and support inheritance on the class side. Types that are built-in, such as "int" or "float" and concepts like arrays, are modeled by Avaj classes (although highly optimized at runtime).&lt;br /&gt;&lt;br /&gt;The designers of Avaj built on their experiences with other computer languages. For example, dynamic languages like Lisp and Smalltalk have closures, making concepts like iterators and inner-classes obsolete. These constructs and other redundancies were not added to the language.&lt;br /&gt;&lt;br /&gt;Unfortunately, all work stopped on Avaj when it was determined that no one could make any money off it.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4640693170215551401?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4640693170215551401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4640693170215551401' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4640693170215551401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4640693170215551401'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/04/announcing-avaj.html' title='Announcing Avaj!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-3508590769057145553</id><published>2007-04-05T08:41:00.000-05:00</published><updated>2007-04-05T09:20:09.802-05:00</updated><title type='text'>No code nirvana</title><content type='html'>The other day, I was reviewing our coop's code (a coop is an intern for those of you from the states). We get great coops who are smart and work hard and this guy is no exception. I always ask the person to clean up their code before I get there and make sure it's good.&lt;br /&gt;&lt;br /&gt;It is normal for me during the review process, even after cleaning, to delete 10 to 50% of the code, without removing any functionality. Some of it is unused variables, dupicate state, things that are stored instead of computed and all the usual things that cause "too much code". However, a surprising amount of it is simply duplicated or unnecessary work. Why?&lt;br /&gt;&lt;br /&gt;SWT committers are rewarded for implementing functionality, not writing code. We take pride in having the minimum amount necessary to do the job and strive to reach "no code nirvana" (an impossible state). Perhaps you reach it when you become a manager?&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-3508590769057145553?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/3508590769057145553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=3508590769057145553' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/3508590769057145553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/3508590769057145553'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/04/too-much-code.html' title='No code nirvana'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-889677988655348764</id><published>2007-03-28T08:25:00.000-05:00</published><updated>2007-03-28T07:27:07.798-05:00</updated><title type='text'>Insights from the Xlib Programming Manual</title><content type='html'>If you think X is dead, you are wrong. Widget toolkits like GTK try to hide it, but in the end, X is still the thing that handles events and puts pixels to the screen. Sometimes we need to reach through the muck and program it. Bogdan Gheorghe, a committer in training, discovered this the other day in the  official Xib Programming Manual (it's been there from day one, I knew it was there but had forgotten):&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Virtual Focus Crossing and the detail Member&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;We will now embark on specifying the types of events sent to each window and the &lt;strong&gt;detail&lt;/strong&gt; member in each event, depending on the relative position in the hierarchy of the origin window (old focus), destination window (new focus), and the pointer window (window containing pointer at time of focus change). Don't even try to figure this out unless you have to.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;At least these guys are honest, but how about defining API that is simple enough that it doesn't need to come with a warning?&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-889677988655348764?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/889677988655348764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=889677988655348764' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/889677988655348764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/889677988655348764'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/03/insights-from-xlib-programming-manual.html' title='Insights from the Xlib Programming Manual'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-382504301914272067</id><published>2007-03-21T07:29:00.000-05:00</published><updated>2007-03-21T06:51:03.317-05:00</updated><title type='text'>BYTE Magazine, January 1997: "Can Java Replace Windows?"</title><content type='html'>IBM Labs Ottawa is cleaning out the old OTI library (a long time ago, we used to be OTI).  I found a BYTE Magazine from January 1997 with the cover story, "Can Java Replace Windows?".  Interesting that it is now 10 years later.  I'd forgotten just how much hype there was at the time.&lt;br /&gt;&lt;br /&gt;Here are some titles of the articles inside:&lt;br /&gt;&lt;br /&gt;"Today the Web, Tomorrow the World"&lt;br /&gt;"Why Java Won't Repeat the Mistakes of Unix"&lt;br /&gt;"The Bitter Taste of Java"&lt;br /&gt;"Corel's New PDA and Java Suite"&lt;br /&gt;"Java to Power Flying Car"&lt;br /&gt;&lt;br /&gt;Ok, I made that last one up.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-382504301914272067?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/382504301914272067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=382504301914272067' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/382504301914272067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/382504301914272067'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/03/byte-magazine-january-1997-can-java.html' title='BYTE Magazine, January 1997: &quot;Can Java Replace Windows?&quot;'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-8345057615941778045</id><published>2007-03-15T08:11:00.000-05:00</published><updated>2007-03-15T08:24:11.358-05:00</updated><title type='text'>Useless dialog of the day</title><content type='html'>Carolyn Macleod, accessibility wizard, was starting up Eclipse M-whatever yesterday and got this:&lt;br /&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;a href="http://3.bp.blogspot.com/_FBBFb2akkhg/RflGPKv3MvI/AAAAAAAAAAY/Se2rOqD7VO4/s1600-h/useless.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5042138484215067378" style="MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_FBBFb2akkhg/RflGPKv3MvI/AAAAAAAAAAY/Se2rOqD7VO4/s320/useless.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;How useless is that? What file changed? How do you answer this question? At least tell me the file name.&lt;/p&gt;&lt;p&gt;I'm seeing a trend in software these days: attack the user with dumb dialogs. If you must attack, at least tell me something useful, like "All your base are belong to us".&lt;/p&gt;&lt;p&gt;Steve&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-8345057615941778045?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/8345057615941778045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=8345057615941778045' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/8345057615941778045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/8345057615941778045'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/03/useless-dialog-of-day.html' title='Useless dialog of the day'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_FBBFb2akkhg/RflGPKv3MvI/AAAAAAAAAAY/Se2rOqD7VO4/s72-c/useless.jpg' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-3762435443865716866</id><published>2007-03-10T10:29:00.000-05:00</published><updated>2007-03-10T09:32:50.483-05:00</updated><title type='text'>This blog has been accused of having no content</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-3762435443865716866?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/3762435443865716866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=3762435443865716866' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/3762435443865716866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/3762435443865716866'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/03/this-blog-has-been-accused-of-having-no.html' title='This blog has been accused of having no content'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-117020766643284564</id><published>2007-03-08T20:35:00.000-05:00</published><updated>2007-03-08T10:40:16.579-05:00</updated><title type='text'>The software Gods and the global cache</title><content type='html'>How many times have you done this: Scrolled through the code, saw something totally bogus, fixed it, and then got a bug report from someone just discovering the bug you fixed. This has happened too many times to be mere coincidence and it's not just bug reports. Discuss how you might implement a feature, and someone will request it right out of the blue.&lt;br /&gt;&lt;br /&gt;I believe there are software Gods who maintain a global cache of all project activity. When you think of something or touch the code, the cache gets updated and someone gets notified.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-117020766643284564?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/117020766643284564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=117020766643284564' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/117020766643284564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/117020766643284564'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/01/software-gods-and-global-cache.html' title='The software Gods and the global cache'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-1811242309560468509</id><published>2007-03-02T21:29:00.000-05:00</published><updated>2007-03-03T04:10:15.318-05:00</updated><title type='text'>Refuctoring your code</title><content type='html'>Have you ever done this: Tried to refactor your code ... and failed.&lt;br /&gt;&lt;br /&gt;Amongst the many masterpieces that sit at the bottom of the Eclipse stack, SWT is one of the gnarliest. Implemented in Java, it's coded to the metal. Many things are inlined. It's full of version checks, work arounds for operating system bugs and wild hacks that make everything go. It's backwards compatible to the day it first shipped, yet somehow embraces and exploits the latest operating systems features.&lt;br /&gt;&lt;br /&gt;Don't be afraid. This is normal for a high performance, operating system level library that isn't waiting for the hardware to get faster.&lt;br /&gt;&lt;br /&gt;Anyway, while attempting to refactor some of the more crufty code, I failed. The refactored code just wasn't any better so I ran away from the changes. It took strength to step back, evaluate the situation, weigh the pros and cons and decide to throw it away. Really, you are throwing out more than code. It's the investment in the new way of thinking, rather than the changes, that you have trouble parting with.&lt;br /&gt;&lt;br /&gt;Code that is refactored into worse code: that's refuctoring!&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-1811242309560468509?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/1811242309560468509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=1811242309560468509' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1811242309560468509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/1811242309560468509'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/03/refuctoring-your-code.html' title='Refuctoring your code'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-3598371194433549107</id><published>2007-02-28T09:55:00.000-05:00</published><updated>2007-02-28T21:44:29.603-05:00</updated><title type='text'>It's the end of an era</title><content type='html'>Here is Zoomin.exe, a pixel magnifier, running on Vista:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_FBBFb2akkhg/ReGwqq9XIOI/AAAAAAAAAAM/-SaI3zZVogw/s1600-h/Zoomin.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5035500105509576930" style="MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_FBBFb2akkhg/ReGwqq9XIOI/AAAAAAAAAAM/-SaI3zZVogw/s320/Zoomin.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Microsoft finally broke this program. It runs, but no longer sees the screen and only magnifies itself. If you look closely, you'll see it's a 16-bit Windows 3.0 program. Microsoft shipped it as part of the Windows SDK circa 1990.&lt;br /&gt;&lt;br /&gt;Do I care that it's broken? Nope, only cavemen (and possibly Voyager) are running applications this old. There are many, many, more and better programs like this around, but I kind of got a kick out of running this one. It's &lt;em&gt;only 7K&lt;/em&gt;. No DLL's, resource or config files, yet it has an icon . It really is just a 7K EXE.&lt;br /&gt;&lt;br /&gt;In my youth, I once built a Digitalk Smalltalk/V program that did the same thing. I used the tools of the day to throw out almost everything and managed to create something that was 37K. Of course, it needed the VM DLL's, but they were tiny too. I remember being mad when I figured out the Smalltalk VM was taking 256K at runtime (probably for the garbage collector old and new spaces).&lt;br /&gt;&lt;br /&gt;For me, Zoomin.exe was kind of a test that Microsoft passed, year after year. The program is 17 years old and is only now broken. Imagine trying the same thing with a Linux distribution.&lt;br /&gt;&lt;br /&gt;It was also a reminder. GUI programs could be tiny. Oh computing world, where did we bloat out and go wrong? I guess I'll have to get my kicks some other way.&lt;br /&gt;&lt;br /&gt;Finally, this is the sort of backwards compatibility that we aim to achieve with SWT, despite the fact we run on Linux!&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-3598371194433549107?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/3598371194433549107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=3598371194433549107' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/3598371194433549107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/3598371194433549107'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/02/its-end-of-era.html' title='It&apos;s the end of an era'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_FBBFb2akkhg/ReGwqq9XIOI/AAAAAAAAAAM/-SaI3zZVogw/s72-c/Zoomin.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-4795511329707886374</id><published>2007-02-23T10:37:00.000-05:00</published><updated>2007-02-24T09:54:39.390-05:00</updated><title type='text'>What happens when you don't fix a critical bug?</title><content type='html'>For a while now, there were a number of problems in our OLE support. The worst was &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=49098"&gt;49098&lt;/a&gt;. Some controls, such as Microsoft Word, wouldn't show scroll bars. I'm happy to say that this bug and a bunch more long standing OLE problems have been fixed.&lt;br /&gt;&lt;br /&gt;What happens when you don't fix a critical bug? Smart people find work arounds. For example, IBM wrote the &lt;a href="http://www.alphaworks.ibm.com/tech/swtactivexcontainer"&gt;IBM Container for ActiveX Documents&lt;/a&gt;. By using the OLE support in MFC, they were able to work around the problem. Why didn't we do this? SWT doesn't use MFC for performance, memory and maintenance reasons. We couldn't throw out our existing code or the SWT OLE API. The fact that we had no idea what MFC was doing to fix the problem and no one could tell us cinched the deal.&lt;br /&gt;&lt;br /&gt;Other people began to investigate and use &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=CE2CA4FD-2169-4FAC-82AF-770AA9B60D77&amp;displaylang=en"&gt;DSOFramer&lt;/a&gt;, a Microsoft control that embeds Office documents. This wasn't ideal, but it did solve the sizing issues.&lt;br /&gt;&lt;br /&gt;I'm not proud of these work arounds, but at least open source makes them possible. The design pattern that SWT uses is "just write the code" so people can see what we are doing and where we are doing it.&lt;br /&gt;&lt;br /&gt;OLE's not dead yet ... but we can only hope.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-4795511329707886374?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/4795511329707886374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=4795511329707886374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4795511329707886374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/4795511329707886374'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/02/what-happens-when-you-dont-fix-critical.html' title='What happens when you don&apos;t fix a critical bug?'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-7451198223862607309</id><published>2007-02-12T08:40:00.000-05:00</published><updated>2007-02-10T10:02:55.199-05:00</updated><title type='text'>No M5a?</title><content type='html'>What on earth happened? Traditionally, Eclipse M5 represents a low point in the Eclipse development cycle. If you saw Erich Gamma and John Wiegand's great JavaOne talk last year, it is the lowest dip in the rope. Teams scramble to get features in and stability suffers, causing us to blow the milestone. I know 'cause I've blown a few.&lt;br /&gt;&lt;br /&gt;This is normal for the Eclipse development cycle. Does this mean that the dreaded "a" is still to come?&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-7451198223862607309?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/7451198223862607309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=7451198223862607309' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7451198223862607309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/7451198223862607309'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/02/no-m5a.html' title='No M5a?'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-117068205050373632</id><published>2007-02-05T08:27:00.000-05:00</published><updated>2007-02-05T08:47:25.670-05:00</updated><title type='text'>Get the engineers together and get out of the way!</title><content type='html'>Those of you that know me know I avoid calls. I can always be reached through email, the bug system, the newsgroups and mailing lists.&lt;br /&gt;&lt;br /&gt;Sometimes, there's a critical situation and a call is dictated. Normally this consists of twelve or more people, only two of which know what is going on. Because nobody can see anyone else, people repeat themselves and state the obvious. There's no eye contact to tell you, "Yes, I understand. I get it."&lt;br /&gt;&lt;br /&gt;My reaction to all this is, "My smart people will talk to your smart people. Together they will either fix it, determine that it can never be fixed, or get an estimate of how long it will take to be fixed."&lt;br /&gt;&lt;br /&gt;Get the engineers together and get out of the way! Is your manager listening?&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-117068205050373632?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/117068205050373632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=117068205050373632' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/117068205050373632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/117068205050373632'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/02/get-engineers-together-and-get-out-of.html' title='Get the engineers together and get out of the way!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-117016096325810259</id><published>2007-01-30T07:35:00.000-05:00</published><updated>2007-01-30T20:35:01.336-05:00</updated><title type='text'>Vista Ships: "Show us your Wow"</title><content type='html'>Hello, I'm a Mac ... &lt;em&gt;and I'm a PC&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;PC, why do you look just like me?  &lt;em&gt;Well, rather than using the processor to do real work, like copying your files or searching your hard disk, I think it's important to show you pictures of puppies&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;That's just &lt;strong&gt;so cool &lt;/strong&gt;.  &lt;em&gt;Wait until I can put my windows in a blender, just like you (you'll need a hardware upgrade for that).&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Microsoft, I'd show you my "Wow", but I might get arrested.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-117016096325810259?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/117016096325810259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=117016096325810259' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/117016096325810259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/117016096325810259'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/01/vista-ships-show-us-your-wow.html' title='Vista Ships: &quot;Show us your Wow&quot;'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-116818066267707814</id><published>2007-01-07T09:29:00.000-05:00</published><updated>2007-01-07T09:48:56.550-05:00</updated><title type='text'>Best compile error ever!</title><content type='html'>Here is a boring line of C code:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;createJavaVM = findSymbol(jniLibrary, _T_ECLIPSE("JNI_CreateJavaVM"));&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;On a C compiler &lt;strong&gt;that shall remain nameless&lt;/strong&gt;, forgetting to cast the result (using (JNI_createJavaVM)) gives the following:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;"../eclipseJNI.c", line 193: warning: assignment type mismatch:&lt;br /&gt; pointer to function(pointer to pointer to pointer to const struct JNIInvokeInterface_ {pointer to void reserved0, pointer to void reserved1, pointer to void reserved2, pointer to function(..) returning int DestroyJavaVM, pointer to function(..) returning int AttachCurrentThread, pointer to function(..) returning int DetachCurrentThread, pointer to function(..) returning int GetEnv, pointer to function(..) returning int AttachCurrentThreadAsDaemon}, pointer to pointer to pointer to const struct JNINativeInterface_ {pointer to void reserved0, pointer to void reserved1, pointer to void reserved2, pointer to void reserved3, pointer to function(..) returning int GetVersion, pointer to function(..) returning pointer to struct _jobject {..} DefineClass, pointer to function(..) returning pointer to struct _jobject {..} FindClass, pointer to function(..) returning pointer to struct _jmethodID {..} FromReflectedMethod, pointer to function(..) returning pointer to struct _jfieldID {..} FromReflectedField, pointer to function(..) returning pointer to struct _jobject {..} ToReflectedMethod, pointer to function(..) returning pointer to struct _jobject {..} GetSuperclass, pointer to function(..) returning unsigned char IsAssignableFrom, pointer to function(..) returning pointer to struct _jobject {..} ToReflectedField, pointer to function(..) returning int Throw, pointer to function(..) returning int ThrowNew, pointer to function(..) returning pointer to struct _jobject {..} ExceptionOccurred, pointer to function(..) returning void ExceptionDescribe, pointer to function(..) returning void ExceptionClear, pointer to function(..) returning void FatalError, pointer to function(..) returning int PushLocalFrame, pointer to function(..) returning pointer to struct _jobject {..} PopLocalFrame, pointer to function(..) returning pointer to struct _jobject {..} NewGlobalRef, pointer to function(..) returning void DeleteGlobalRef, pointer to function(..) returning void DeleteLocalRef, pointer to function(..) returning unsigned char IsSameObject, pointer to function(..) returning pointer to struct _jobject {..} NewLocalRef, pointer to function(..) returning int EnsureLocalCapacity, pointer to function(..) returning pointer to struct _jobject {..} AllocObject, pointer to function(..) returning pointer to struct _jobject {..} NewObject, pointer to function(..) returning pointer to struct _jobject {..} NewObjectV, pointer to function(..) returning pointer to struct _jobject {..} NewObjectA, pointer to function(..) returning pointer to struct _jobject {..} GetObjectClass, pointer to function(..) returning unsigned char IsInstanceOf, pointer to function(..) returning pointer to struct _jmethodID {..} GetMethodID, pointer to function(..) returning pointer to struct _jobject {..} CallObjectMethod, pointer to function(..) returning pointer to struct _jobject {..} CallObjectMethodV, pointer to function(..) returning pointer to struct _jobject {..} CallObjectMethodA, pointer to function(..) returning unsigned char CallBooleanMethod, pointer to function(..) returning unsigned char CallBooleanMethodV, pointer to function(..) returning unsigned char CallBooleanMethodA, pointer to function(..) returning signed char CallByteMethod, pointer to function(..) returning signed char CallByteMethodV, pointer to function(..) returning signed char CallByteMethodA, pointer to function(..) returning unsigned short CallCharMethod, pointer to function(..) returning unsigned short CallCharMethodV, pointer to function(..) returning unsigned short CallCharMethodA, pointer to function(..) returning short CallShortMethod, pointer to function(..) returning short CallShortMethodV, pointer to function(..) returning short CallShortMethodA, pointer to function(..) returning int CallIntMethod, pointer to function(..) returning int CallIntMethodV, pointer to function(..) returning int CallIntMethodA, pointer to function(..) returning long long CallLongMethod, pointer to function(..) returning long long CallLongMethodV, pointer to function(..) returning long long CallLongMethodA, pointer to function(..) returning float CallFloatMethod, pointer to function(..) returning float CallFloatMethodV, pointer to function(..) returning float CallFloatMethodA, pointer to function(..) returning double CallDoubleMethod, pointer to function(..) returning double CallDoubleMethodV, pointer to function(..) returning double CallDoubleMethodA, pointer to function(..) returning void CallVoidMethod, pointer to function(..) returning void CallVoidMethodV, pointer to function(..) returning void CallVoidMethodA, pointer to function(..) returning pointer to struct _jobject {..} CallNonvirtualObjectMethod, pointer to function(..) returning pointer to struct _jobject {..} CallNonvirtualObjectMethodV, pointer to function(..) returning pointer to struct _jobject {..} CallNonvirtualObjectMethodA, pointer to function(..) returning unsigned char CallNonvirtualBooleanMethod, pointer to function(..) returning unsigned char CallNonvirtualBooleanMethodV, pointer to function(..) returning unsigned char CallNonvirtualBooleanMethodA, pointer to function(..) returning signed char CallNonvirtualByteMethod, pointer to function(..) returning signed char CallNonvirtualByteMethodV, pointer to function(..) returning signed char CallNonvirtualByteMethodA, pointer to function(..) returning unsigned short CallNonvirtualCharMethod, pointer to function(..) returning unsigned short CallNonvirtualCharMethodV, pointer to function(..) returning unsigned short CallNonvirtualCharMethodA, pointer to function(..) returning short CallNonvirtualShortMethod, pointer to function(..) returning short CallNonvirtualShortMethodV, pointer to function(..) returning short CallNonvirtualShortMethodA, pointer to function(..) returning int CallNonvirtualIntMethod, pointer to function(..) returning int CallNonvirtualIntMethodV, pointer to function(..) returning int CallNonvirtualIntMethodA, pointer to function(..) returning long long CallNonvirtualLongMethod, pointer to function(..) returning long long CallNonvirtualLongMethodV, pointer to function(..) returning long long CallNonvirtualLongMethodA, pointer to function(..) returning float CallNonvirtualFloatMethod, pointer to function(..) returning float CallNonvirtualFloatMethodV, pointer to function(..) returning float CallNonvirtualFloatMethodA, pointer to function(..) returning double CallNonvirtualDoubleMethod, pointer to function(..) returning double CallNonvirtualDoubleMethodV, pointer to function(..) returning double CallNonvirtualDoubleMethodA, pointer to function(..) returning void CallNonvirtualVoidMethod, pointer to function(..) returning void CallNonvirtualVoidMethodV, pointer to function(..) returning void CallNonvirtualVoidMethodA, pointer to function(..) returning pointer to struct _jfieldID {..} GetFieldID, pointer to function(..) returning pointer to struct _jobject {..} GetObjectField, pointer to function(..) returning unsigned char GetBooleanField, pointer to function(..) returning signed char GetByteField, pointer to function(..) returning unsigned short GetCharField, pointer to function(..) returning short GetShortField, pointer to function(..) returning int GetIntField, pointer to function(..) returning long long GetLongField, pointer to function(..) returning float GetFloatField, pointer to function(..) returning double GetDoubleField, pointer to function(..) returning void SetObjectField, pointer to function(..) returning void SetBooleanField, pointer to function(..) returning void SetByteField, pointer to function(..) returning void SetCharField, pointer to function(..) returning void SetShortField, pointer to function(..) returning void SetIntField, pointer to function(..) returning void SetLongField, pointer to function(..) returning void SetFloatField, pointer to function(..) returning void SetDoubleField, pointer to function(..) returning pointer to struct _jmethodID {..} GetStaticMethodID, pointer to function(..) returning pointer to struct _jobject {..} CallStaticObjectMethod, pointer to function(..) returning pointer to struct _jobject {..} CallStaticObjectMethodV, pointer to function(..) returning pointer to struct _jobject {..} CallStaticObjectMethodA, pointer to function(..) returning unsigned char CallStaticBooleanMethod, pointer to function(..) returning unsigned char CallStaticBooleanMethodV, pointer to function(..) returning unsigned char CallStaticBooleanMethodA, pointer to function(..) returning signed char CallStaticByteMethod, pointer to function(..) returning signed char CallStaticByteMethodV, pointer to function(..) returning signed char CallStaticByteMethodA, pointer to function(..) returning unsigned short CallStaticCharMethod, pointer to function(..) returning unsigned short CallStaticCharMethodV, pointer to function(..) returning unsigned short CallStaticCharMethodA, pointer to function(..) returning short CallStaticShortMethod, pointer to function(..) returning short CallStaticShortMethodV, pointer to function(..) returning short CallStaticShortMethodA, pointer to function(..) returning int CallStaticIntMethod, pointer to function(..) returning int CallStaticIntMethodV, pointer to function(..) returning int CallStaticIntMethodA, pointer to function(..) returning long long CallStaticLongMethod, pointer to function(..) returning long long CallStaticLongMethodV, pointer to function(..) returning long long CallStaticLongMethodA, pointer to function(..) returning float CallStaticFloatMethod, pointer to function(..) returning float CallStaticFloatMethodV, pointer to function(..) returning float CallStaticFloatMethodA, pointer to function(..) returning double CallStaticDoubleMethod, pointer to function(..) returning double CallStaticDoubleMethodV, pointer to function(..) returning double CallStaticDoubleMethodA, pointer to function(..) returning void CallStaticVoidMethod, pointer to function(..) returning void CallStaticVoidMethodV, pointer to function(..) returning void CallStaticVoidMethodA, pointer to function(..) returning pointer to struct _jfieldID {..} GetStaticFieldID, pointer to function(..) returning pointer to struct _jobject {..} GetStaticObjectField, pointer to function(..) returning unsigned char GetStaticBooleanField, pointer to function(..) returning signed char GetStaticByteField, pointer to function(..) returning unsigned short GetStaticCharField, pointer to function(..) returning short GetStaticShortField, pointer to function(..) returning int GetStaticIntField, pointer to function(..) returning long long GetStaticLongField, pointer to function(..) returning float GetStaticFloatField, pointer to function(..) returning double GetStaticDoubleField, pointer to function(..) returning void SetStaticObjectField, pointer to function(..) returning void SetStaticBooleanField, pointer to function(..) returning void SetStaticByteField, pointer to function(..) returning void SetStaticCharField, pointer to function(..) returning void SetStaticShortField, pointer to function(..) returning void SetStaticIntField, pointer to function(..) returning void SetStaticLongField, pointer to function(..) returning void SetStaticFloatField, pointer to function(..) returning void SetStaticDoubleField, pointer to function(..) returning pointer to struct _jobject {..} NewString, pointer to function(..) returning int GetStringLength, pointer to function(..) returning pointer to const unsigned short GetStringChars, pointer to function(..) returning void ReleaseStringChars, pointer to function(..) returning pointer to struct _jobject {..} NewStringUTF, pointer to function(..) returning int GetStringUTFLength, pointer to function(..) returning pointer to const char GetStringUTFChars, pointer to function(..) returning void ReleaseStringUTFChars, pointer to function(..) returning int GetArrayLength, pointer to function(..) returning pointer to struct _jobject {..} NewObjectArray, pointer to function(..) returning pointer to struct _jobject {..} GetObjectArrayElement, pointer to function(..) returning void SetObjectArrayElement, pointer to function(..) returning pointer to struct _jobject {..} NewBooleanArray, pointer to function(..) returning pointer to struct _jobject {..} NewByteArray, pointer to function(..) returning pointer to struct _jobject {..} NewCharArray, pointer to function(..) returning pointer to struct _jobject {..} NewShortArray, pointer to function(..) returning pointer to struct _jobject {..} NewIntArray, pointer to function(..) returning pointer to struct _jobject {..} NewLongArray, pointer to function(..) returning pointer to struct _jobject {..} NewFloatArray, pointer to function(..) returning pointer to struct _jobject {..} NewDoubleArray, pointer to function(..) returning pointer to unsigned char GetBooleanArrayElements, pointer to function(..) returning pointer to signed char GetByteArrayElements, pointer to function(..) returning pointer to unsigned short GetCharArrayElements, pointer to function(..) returning pointer to short GetShortArrayElements, pointer to function(..) returning pointer to int GetIntArrayElements, pointer to function(..) returning pointer to long long GetLongArrayElements, pointer to function(..) returning pointer to float GetFloatArrayElements, pointer to function(..) returning pointer to double GetDoubleArrayElements, pointer to function(..) returning void ReleaseBooleanArrayElements, pointer to function(..) returning void ReleaseByteArrayElements, pointer to function(..) returning void ReleaseCharArrayElements, pointer to function(..) returning void ReleaseShortArrayElements, pointer to function(..) returning void ReleaseIntArrayElements, pointer to function(..) returning void ReleaseLongArrayElements, pointer to function(..) returning void ReleaseFloatArrayElements, pointer to function(..) returning void ReleaseDoubleArrayElements, pointer to function(..) returning void GetBooleanArrayRegion, pointer to function(..) returning void GetByteArrayRegion, pointer to function(..) returning void GetCharArrayRegion, pointer to function(..) returning void GetShortArrayRegion, pointer to function(..) returning void GetIntArrayRegion, pointer to function(..) returning void GetLongArrayRegion, pointer to function(..) returning void GetFloatArrayRegion, pointer to function(..) returning void GetDoubleArrayRegion, pointer to function(..) returning void SetBooleanArrayRegion, pointer to function(..) returning void SetByteArrayRegion, pointer to function(..) returning void SetCharArrayRegion, pointer to function(..) returning void SetShortArrayRegion, pointer to function(..) returning void SetIntArrayRegion, pointer to function(..) returning void SetLongArrayRegion, pointer to function(..) returning void SetFloatArrayRegion, pointer to function(..) returning void SetDoubleArrayRegion, pointer to function(..) returning int RegisterNatives, pointer to function(..) returning int UnregisterNatives, pointer to function(..) returning int MonitorEnter, pointer to function(..) returning int MonitorExit, pointer to function(..) returning int GetJavaVM, pointer to function(..) returning void GetStringRegion, pointer to function(..) returning void GetStringUTFRegion, pointer to function(..) returning pointer to void GetPrimitiveArrayCritical, pointer to function(..) returning void ReleasePrimitiveArrayCritical, pointer to function(..) returning pointer to const unsigned short GetStringCritical, pointer to function(..) returning void ReleaseStringCritical, pointer to function(..) returning pointer to struct _jobject {..} NewWeakGlobalRef, pointer to function(..) returning void DeleteWeakGlobalRef, pointer to function(..) returning unsigned char ExceptionCheck, pointer to function(..) returning pointer to struct _jobject {..} NewDirectByteBuffer, pointer to function(..) returning pointer to void GetDirectBufferAddress, pointer to function(..) returning long long GetDirectBufferCapacity}, pointer to void) returning int "=" pointer to void&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;That was easy to figure out, wasn't it?&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-116818066267707814?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/116818066267707814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=116818066267707814' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116818066267707814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116818066267707814'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2007/01/best-compile-error-ever.html' title='Best compile error ever!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-116649507182193723</id><published>2006-12-18T21:02:00.000-05:00</published><updated>2006-12-19T16:16:07.186-05:00</updated><title type='text'>I am Eclipse</title><content type='html'>The other day, I found out I was Eclipse.  Apparently, Eclipse is a grizzled old platform hacker, whose every second word is f*ck ...&lt;br /&gt;&lt;br /&gt;Seriously, I can see both sides of the "Eclipse is You" thing.  Sometimes, people just complain and don't help (sometimes they are paid to do this but that's another story).  Those must be the people Ward is talking about.  Other people submit really good patches and we run out of time to process them.  Often in SWT land, patches contain the essence of a fix or feature, but the real implementation is much more work.  One thing that people don't seem to understand is that once an API is in, it can never come out.  It must be supported forever.  That's a long time (and a lot of work).&lt;br /&gt;&lt;br /&gt;Anyhow, please hang in there and ping those bug reports that contain patches.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-116649507182193723?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/116649507182193723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=116649507182193723' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116649507182193723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116649507182193723'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/12/i-am-eclipse.html' title='I am Eclipse'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-116598256319427482</id><published>2006-12-12T23:00:00.000-05:00</published><updated>2006-12-12T23:02:43.206-05:00</updated><title type='text'>Apocalypto</title><content type='html'>Watch for a surprise appearance by the Blue Man Group in Mel Gibson's newest blockbuster!&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-116598256319427482?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/116598256319427482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=116598256319427482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116598256319427482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116598256319427482'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/12/apocalypto.html' title='Apocalypto'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-116567836389026837</id><published>2006-12-11T10:13:00.000-05:00</published><updated>2006-12-11T10:18:36.723-05:00</updated><title type='text'>Big news!</title><content type='html'>There's been some negativity lately on EclipseZone (shame on you) and elsewhere about Eclipse, the number one, kick-ass, couldn't-live-without, Java IDE desert topping and floor wax.  Why?&lt;br /&gt;&lt;br /&gt;Big News:  Google joined Eclipse.  I know some of those guys.  They are smart.  They hacked their way through SWT, OLE, the browser, submitted patches and found bugs.  That's big news for me.&lt;br /&gt;&lt;br /&gt;Bigger news:  A Brazilian joined NetBeans.  Not such big news for me, I already have two.&lt;br /&gt;&lt;br /&gt;My advice: Don't drink the kool aid!  There's stuff in there that's bad for you.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-116567836389026837?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/116567836389026837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=116567836389026837' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116567836389026837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116567836389026837'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/12/big-news.html' title='Big news!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-116197287987400416</id><published>2006-11-06T16:45:00.000-05:00</published><updated>2006-11-06T16:54:50.863-05:00</updated><title type='text'>The smart bit</title><content type='html'>After lots of thought, discussion and hard work, I am pleased and proud to finally announce: the SWT smart bit.  Somehow, this new and exciting feature got left out of the Eclipse 3.3 M3 "New and Not-worthy". Here it is:&lt;br /&gt;&lt;br /&gt;public static int SMART = 0;&lt;br /&gt;&lt;br /&gt;Why settle for a dumb version of that old text control when you can spice it up with the smart bit:&lt;br /&gt;&lt;br /&gt;new Text (parent, SWT.BORDER | SWT.SMART);&lt;br /&gt;&lt;br /&gt;Even better, it works everywhere.  Given a choice between two components, wouldn't you always take the smart one?&lt;br /&gt;&lt;br /&gt;Swteve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-116197287987400416?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/116197287987400416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=116197287987400416' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116197287987400416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116197287987400416'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/11/smart-bit.html' title='The smart bit'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-116086452722426419</id><published>2006-10-16T16:57:00.000-05:00</published><updated>2006-10-16T17:08:39.283-05:00</updated><title type='text'>Windows 64-bit</title><content type='html'>I'm currently working with Grant Gayed, porting SWT to Windows 64.  Some smart guys from Intel submitted a great patch (&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57151"&gt;57151&lt;/a&gt;).  However, each line of code needs to be painfully checked.  Why?&lt;br /&gt;&lt;br /&gt;"Every line is sacred, every line is great ..."&lt;br /&gt;&lt;br /&gt;Ok, the real reason:  it's easy to make subtle mistakes and cause GP's.  We found only a few so far (because those guys did such a great job).  Anyway, during our travels, we got to see the Windows API again and I forgot how funny some of it was.  Here are a few things we ran across:&lt;br /&gt;&lt;br /&gt;#define TECHNOLOGY 2 // bet you didn't know that!&lt;br /&gt;&lt;br /&gt;typedef enum tagFUNCKIND {&lt;br /&gt;    FUNC_VIRTUAL,&lt;br /&gt;    FUNC_PUREVIRTUAL,&lt;br /&gt;    FUNC_NONVIRTUAL,&lt;br /&gt;    FUNC_STATIC,&lt;br /&gt;    FUNC_DISPATCH,&lt;br /&gt;} FUNCKIND  // FUNCKIND kids these days!&lt;br /&gt;&lt;br /&gt;BOOL InitCommonControlsEx(&lt;br /&gt;    const LPINITCOMMONCONTROLSEX lpInitCtrls&lt;br /&gt;); // Horny little devils&lt;br /&gt;&lt;br /&gt;STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4&lt;br /&gt;// What the ?!?!&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-116086452722426419?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/116086452722426419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=116086452722426419' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116086452722426419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/116086452722426419'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/10/windows-64-bit.html' title='Windows 64-bit'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115922466358562620</id><published>2006-09-25T17:43:00.000-05:00</published><updated>2006-09-26T09:31:12.776-05:00</updated><title type='text'>How many times have you done this?</title><content type='html'>You've got a problem to solve.  It's really complicated.  Rather than attempt the final solution, you hack and slash a way through it.  The code you wrote is not real.  It is total garbage.  It proves that the problem can be solved, but you could never ship like that.&lt;br /&gt;&lt;br /&gt;What now?  Time to step back, write the general solution, rework everything, fix the corner cases, check for error conditions, change all places that do it the old way to do it the new way, check for leaks and clean up the code.  Now you are done and ... nothing works.&lt;br /&gt;&lt;br /&gt;By this time, you've blown away the old code so you have no idea what the problem is.  Did it ever work at all?  What did I change?  Was I doing a &lt;a href="http://inside-swt.blogspot.com/2006/06/i-pulled-billy.html"&gt;Billy&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115922466358562620?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115922466358562620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115922466358562620' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115922466358562620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115922466358562620'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/09/how-many-times-have-you-done-this.html' title='How many times have you done this?'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-114997310883969527</id><published>2006-09-18T12:13:00.000-05:00</published><updated>2006-09-18T12:19:56.196-05:00</updated><title type='text'>Alphabet soup</title><content type='html'>The other day I had to make a presentation and started listing the various different technologies that we support.  Here are some of them:&lt;br /&gt;&lt;br /&gt;Win32, GDI, GDI+, OLE, IE, Carbon, Cocoa, Core Graphics, Quick Draw, Safari, ATSUI, X Windows, X/t, Motif, GTK, GDK, Pango, cairo, ATK, Photon, Mozilla, QNX Voyager, Uniscribe and I almost forgot AWT/Swing.&lt;br /&gt;&lt;br /&gt;What's the message?  Forget about technology wars.  Go forth and build something!&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-114997310883969527?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/114997310883969527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=114997310883969527' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114997310883969527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114997310883969527'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/09/alphabet-soup.html' title='Alphabet soup'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115777528175595247</id><published>2006-09-11T09:52:00.000-05:00</published><updated>2006-09-11T09:58:54.390-05:00</updated><title type='text'>ayahuasca</title><content type='html'>Have you heard of this stuff?  It's a brew made out of vines and leaves from the Amazon rain forest.  It causes blinding, vivid, hyper-real hallucinations.  It's so strong that people who take it sometimes wear Depends because they shit themselves and/or vomit uncontrollably.  Mmmm ... gimme some of that!&lt;br /&gt;&lt;br /&gt;What does this have to do with software?  I was wondering whether ayahuasca might help me debug a problem I was having with SWT on Vista.  As you may not know, multi-select trees are not supported natively on Windows.  We emulate them using the &lt;em&gt;wad of code&lt;/em&gt; pattern on top of the native tree.  It seems that Microsoft finally got around to trying to implement multi-selection, but bailed at the last minute (see &lt;a href="http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/treeview/ex_styles.asp"&gt;TVS_EX_MULTISELECT&lt;/a&gt;).  My guess is that some of that code still remains in Vista.&lt;br /&gt;&lt;br /&gt;Anyway, the &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=151150"&gt;bug&lt;/a&gt; was that when you selected the nth item, the n-2th selected item was deselected for free (NOTE: not the n-1th).  Ok, I'm easy.  I went and happily remembered the n-2th item and reselected it.  Then, Vista started deselecting the n-3rd item.  The chase was on!  No matter how many I remembered and reselected, Vista deselected one more.  Then I took the ayahuasca.&lt;br /&gt;&lt;br /&gt;The fix came in a blinding flash!&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115777528175595247?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115777528175595247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115777528175595247' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115777528175595247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115777528175595247'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/09/ayahuasca.html' title='ayahuasca'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115093380538201105</id><published>2006-08-28T08:52:00.000-05:00</published><updated>2006-08-28T08:59:50.950-05:00</updated><title type='text'>Code Ownership</title><content type='html'>I can't praise code ownership enough.  Do you know some code that is unowned?  If so, I bet you also know code that is unloved.  What sorts of benefits does code ownership bring?&lt;br /&gt;&lt;br /&gt;Owning code promotes pride and responsibility.  Owning code, especially over a long period of time, allows us to become known for quality work.  Even more important, we get to see the results of both good and bad design decisions.  From mistakes, we improve our skills.&lt;br /&gt;&lt;br /&gt;If you flop around from project to project, submit code and never maintain it, you'll never get to see any of this.  You'll think you're a better programmer than you are.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115093380538201105?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115093380538201105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115093380538201105' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115093380538201105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115093380538201105'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/08/code-ownership.html' title='Code Ownership'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115023426144262495</id><published>2006-08-21T22:26:00.000-05:00</published><updated>2006-08-21T10:32:43.856-05:00</updated><title type='text'>SWT Speak (Part 2)</title><content type='html'>Here are some more SWT technical terms for you.  Use them and abuse them!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;cake &lt;/strong&gt;- code that is unnecessarily complex, multi-layered, and full of indirection.  "The cake clouds everything.  Impossible to see the code is."&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;pinhead &lt;/strong&gt;- a very small widget.  "Where is the stupid thing?  Oh, it's a pinhead."&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;fly shit &lt;/strong&gt;- small graphical output.  "Of course you can't read it, you chose the fly shit font!"&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115023426144262495?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115023426144262495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115023426144262495' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115023426144262495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115023426144262495'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/08/swt-speak-part-2.html' title='SWT Speak (Part 2)'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-114997234253531103</id><published>2006-08-14T19:25:00.000-05:00</published><updated>2006-08-14T07:38:40.683-05:00</updated><title type='text'>SWT Speak (Part 1)</title><content type='html'>There are lots of technical terms the SWT committers use without thinking, assuming that the rest of the world understands. So, if you enter a bug report against Platform SWT, you're cool if you use any of these:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;cheese &lt;/strong&gt; - pixel corruption. "I just clicked and look, cheese everywhere, all over the screen!"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;new and improved&lt;/strong&gt; - a bug was introduced.  "The extra mouse up event is new and improved for 3.2."&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;spew &lt;/strong&gt; - debugging messages to a console. "Run the example, observe all the GTK spew when you click on the button.  Yikes!"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;wad &lt;/strong&gt; - lots of code.  "Just cut, paste and exec the wad."&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-114997234253531103?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/114997234253531103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=114997234253531103' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114997234253531103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114997234253531103'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/08/swt-speak-part-1.html' title='SWT Speak (Part 1)'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115496168444779354</id><published>2006-08-07T09:31:00.000-05:00</published><updated>2006-08-07T20:23:22.170-05:00</updated><title type='text'>Hello from WWDC!</title><content type='html'>I'm here at &lt;a href="http://developer.apple.com/wwdc/"&gt;WWDC&lt;/a&gt; (Apple's World Wide Developer Conference) in California.  Right now, I'm listening to Steve Jobs and he's not jumping around the room screaming, "Developers, developers, developers ...".  Instead, we're seeing great demos.  As I look around, I see true believers.  Heck, if you cut these guys, they'd bleed rainbow.&lt;br /&gt;&lt;br /&gt;The more I think about it, the more I come to the conclusion that Apple has worked hard to embrace Java.  They ship Java as part of their operating system.  No need to ask users to download a JVM or ship one with your product.  Microsoft doesn't ship Java (they used to but they got sued -- now we have C#).  Linux distributions don't ship Java (the licensing is wrong but Sun is fixing this).&lt;br /&gt;&lt;br /&gt;Apple worked hard from the start to let people build real Java applications.  They are the only guys I know who let you easily create &lt;a href="http://www.eclipse.org/swt/macosx/"&gt;double clickable applications&lt;/a&gt; that have the right icons and start just like native ones.  They fixed Swing way back when to have the Macintosh look and feel.  They run a version of the JVM that does the MVM (multiple virtual machine) thing that shares class files between processes and cuts down on memory usage.&lt;br /&gt;&lt;br /&gt;Thanks guys for all the hard work!&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115496168444779354?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115496168444779354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115496168444779354' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115496168444779354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115496168444779354'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/08/hello-from-wwdc.html' title='Hello from WWDC!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-114995674979672275</id><published>2006-08-02T09:21:00.000-05:00</published><updated>2006-08-02T17:29:50.440-05:00</updated><title type='text'>We just keep fixin' em</title><content type='html'>The SWT committers just keep hammering away, making things better.  Lots of major bugs are getting fixed and new features implemented, but no one makes a fuss.  Code speaks louder than words, right?  Let the "New and Noteworthy" do the talking.  That's the SWT motto.  Why do I have this blog then?&lt;br /&gt;&lt;br /&gt;Some say a BLOG is a ...&lt;br /&gt;&lt;br /&gt;B - loated&lt;br /&gt;L - ying&lt;br /&gt;O - verblown&lt;br /&gt;G - lorification&lt;br /&gt;&lt;br /&gt;Yikes!  I feel "New and Not Worthy".  Time to stop typing and go fix something.  How about &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=138528"&gt;138528&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-114995674979672275?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/114995674979672275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=114995674979672275' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114995674979672275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114995674979672275'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/08/we-just-keep-fixin-em.html' title='We just keep fixin&apos; em'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-114997117480210255</id><published>2006-07-31T09:55:00.000-05:00</published><updated>2006-07-31T10:36:26.836-05:00</updated><title type='text'>Kids these days</title><content type='html'>The last conference I was at, I went to dinner with a professor from a well known university.  Ever known someone who just wants to argue with you and make his point, no matter what you say?  This guy was a macro expansion.  I said one word and he expanded!&lt;br /&gt;&lt;br /&gt;Anyways, this guy began frothing at the mouth when I suggested that learning Lisp, Prolog, Smalltalk and other computer languages was good for the students.  Don't get me wrong, I wasn't suggesting that they dump C, HTML and Java (or whatever else will get you a job these days).  My point was that these sorts of languages contain different concepts that open up your mind to new ideas and new ways of thinking.  If you don't see these things in school, then where else will you see them?  You are in danger of never learning what a closure is (Java sure don't have 'em) or really understanding recursion or backtracking.  Where better to learn than in school, where you don't need to ship and bugs don't cost people money?&lt;br /&gt;&lt;br /&gt;Alas, I failed.  Kids these days are missing out.  Sad but true.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-114997117480210255?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/114997117480210255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=114997117480210255' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114997117480210255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114997117480210255'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/07/kids-these-days.html' title='Kids these days'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115020531952656606</id><published>2006-07-26T10:49:00.000-05:00</published><updated>2006-07-26T10:54:39.523-05:00</updated><title type='text'>"I just click around all day ..."</title><content type='html'>Fixing bug &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=125656"&gt;125656&lt;/a&gt; was a real challenge.  You can go read the bug report, but the summary is that a certain combination of hover help windows and clicking caused the operating system (MacOS X 10.4) to lose track of top level shells, making them dead to mouse clicks.  This problem was particularly hard to find because it was intermittent.  Attempts to construct a simple case outside of Eclipse failed.&lt;br /&gt;&lt;br /&gt;So how did we fix it?  First of all, we investigate the obvious.  Is the shell somehow disabled?  Are the mouse events going somewhere else?  Is there a mouse grab stuck?  Is the shell somehow disposed but still drawing?  Then we discovered that &lt;a href="http://developer.apple.com/documentation/Carbon/Reference/Window_Manager/Reference/reference.html#//apple_ref/doc/uid/TP30000176-CH1g-F01497"&gt;FindWindow&lt;/a&gt;, the MacOS X carbon call that is used to locate a window given a point on the screen, couldn't find our window.  Calls to &lt;a href="http://developer.apple.com/documentation/Carbon/Reference/Window_Manager/index.html"&gt;IsValidWindowPtr&lt;/a&gt; showed that the window was still alive.  What could possibly be the problem?  &lt;br /&gt;&lt;br /&gt;To find out, we wrote a method that traversed the operating system window list and soon noticed that there were shells in SWT data structures that were not in the list.  We called the method after every event was dispatched and traced all the operating system calls to find out when the bad thing happened.  We did all this in Java, not C, which is one of the great things about SWT.  &lt;strong&gt;No custom C code&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;I almost forgot.  When a problem is intermittent, you can't ever really know for sure that it's fixed.  You have to rely on statistics.  So Silenio spent two days on and off, narrowing down the mouse clicks until he could get the problem to happen within 5 minutes.  During that time, I asked him what he was doing and he said, "I just click around all day ..."&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115020531952656606?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115020531952656606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115020531952656606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115020531952656606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115020531952656606'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/07/i-just-click-around-all-day.html' title='&quot;I just click around all day ...&quot;'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115236340648196281</id><published>2006-07-23T10:35:00.000-05:00</published><updated>2006-07-24T11:09:38.733-05:00</updated><title type='text'>Closing 37683</title><content type='html'>We closed &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=37683"&gt;37683&lt;/a&gt;.  At times, this bug resembled a blog rather than a bug report.  It was used by some to spread FUDge about the toolkit and that's bad.  Fortunately, I don't have a sweet tooth.&lt;br /&gt;&lt;br /&gt;Let's be clear.  Some people were seeing problems and we worked hard to isolate them (the problems - not the people).  When there was a bug we could recreate, we opened a new bug report and fixed it.  We wrote example code that created the same window using GTK calls in C, then GTK calls in Java and finally in pure SWT code to see whether there were fundamental problems in the event loop or elsewhere in the toolkit.  There weren't.&lt;br /&gt;&lt;br /&gt;Some of the focus was on the speed of popup menus.  Menus come up fast in SWT, but application programs like Eclipse do lots of domain specific work to enable or disable items and in some cases, build a new menu each time a menu is requested.  If this work involves file i/o and threads, then performance numbers are variable.&lt;br /&gt;&lt;br /&gt;Was this bug worth it?  I'd have to say "yes".  We found and fixed real problems and that makes me happy.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115236340648196281?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115236340648196281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115236340648196281' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115236340648196281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115236340648196281'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/07/closing-37683.html' title='Closing 37683'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115012942147289328</id><published>2006-07-08T16:14:00.000-05:00</published><updated>2006-07-08T16:22:30.433-05:00</updated><title type='text'>Code == crap</title><content type='html'>Back in university, there were two kinds of students.  For arguments sake, let's call them the &lt;em&gt;cleans &lt;/em&gt;and the &lt;em&gt;scruffs&lt;/em&gt;.  The cleans were smart guys, interested in algorithms, computability and understanding that work could be done.  The scruffs were smart too.  They studied and understood the same sorts of things, but in the end, they just got in there and made things go.  I'm a scruff.&lt;br /&gt;&lt;br /&gt;As a scruff, I've come to the conclusion that code is crap.  I hate code.  Any code.  Mine too.  Code is slow.  Code has bugs.  Given two solutions to a problem, I'll pick the one with the fewest number of lines.&lt;br /&gt;&lt;br /&gt;As a community in the broadest sense of the word (Microsoft included), we design these monstrous layered architectures, then wonder why our systems are slow.  Want to know how to make something faster?  Run less code.  Do you care how a library is implemented?  You shouldn't.  Want me to write a bunch of code in the name of truth and beauty?  I won't.&lt;br /&gt;&lt;br /&gt;Ok, I'm a closet clean but don't tell anyone ... I like binary search.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115012942147289328?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115012942147289328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115012942147289328' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115012942147289328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115012942147289328'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/07/code-crap.html' title='Code == crap'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115050800042864798</id><published>2006-07-05T21:56:00.000-05:00</published><updated>2006-07-05T10:44:06.213-05:00</updated><title type='text'>How does anything work?</title><content type='html'>When I think about all the places SWT runs and the things we do to make it work, it blows my mind.&lt;br /&gt;&lt;br /&gt;Windows flavours include Windows 98, CE, NT, 2000, ME, XP and soon Vista.  The win32 API has two identical calls for everything, one for ANSI and one for Unicode.  Windows 98 and ME support only ANSI, while CE supports only Unicode.  Windows NT, 2000, XP and Vista support both.  This means no single API is available on all Windows platforms.  C programs are supposed to compile for one or the other.  Instead, we build one set of jars and native libraries for both and call the right API on the fly.  It's ugly, but it works.&lt;br /&gt;&lt;br /&gt;GTK is version hell.  We run all the way back to 2.0.6.  Lots of new API has been added since then so we look them up dynamically because Linux won't load a shared library with unsatisfied references.  Somehow, when an operating system API isn't there, we run alternate code or fail gracefully.  Whew!&lt;br /&gt;&lt;br /&gt;Mozilla is it's own nightmare.  Until recently, rather than using the Mozilla that you had installed on your machine, Mozilla.org expected you to ship a copy of Mozilla statically linked to your application.  Somehow we don't do this, find the installed Mozilla and use it.  We work with Mozilla versions as old as 1.2 all the way up to 1.8, which was the latest at the time this article was written.  The Linux C++ binary format changed somewhere along the way, breaking us.  We detect the right version dynamically and load the one of two identical libraries, compiled differently.  Wow.&lt;br /&gt;&lt;br /&gt;Advanced graphics on Linux uses the cairo graphics library but this doesn't ship with the current Linux distributions, so we compile and ship our own, just in case.  On the fly, we detect whether you already have cairo installed and use that one.  Otherwise, we use the one we compiled.  It's magic.&lt;br /&gt;&lt;br /&gt;The Macintosh comes with two complete and separate native toolkits, carbon and cocoa.  We use carbon, the C based API.  However, new features in the operating system are very often only available in cocoa.  Cocoa is Objective C, not C.  Safari, the Mac browser, is written in cocoa.  So we call it, leading to wild clipping problems and all sorts of amazing interop issues that we work around.  Did I mention that Macintosh controls didn't clip against each other until a few years ago so we had to roll our own sibling and parent clipping code?&lt;br /&gt;&lt;br /&gt;AWT is a free threaded widget toolkit that comes with it's own event loop.  On Windows, we hook into the event queue and cross post keystrokes.  On Motif and GTK, life is easier, we implement the XEmbed protocol, which is a bunch of low level X windows calls.  On the Mac, after being broken for ages, we got help from Apple.  The Mac operating system has no concept of multiple event loops.  Somehow, Apple found a way to make it work.  The icing on the cake is that AWT is implemented in cocoa, not carbon.&lt;br /&gt;&lt;br /&gt;On the Java side, we need 1.2 VM's or greater and run on J2SE and J2ME.  If you recompile the native libraries, we'll run on 1.1.8.&lt;br /&gt;&lt;br /&gt;My gawd.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115050800042864798?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115050800042864798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115050800042864798' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115050800042864798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115050800042864798'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/07/how-does-anything-work.html' title='How does anything work?'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-114997174739824654</id><published>2006-06-28T10:47:00.000-05:00</published><updated>2006-06-28T12:29:19.676-05:00</updated><title type='text'>Printing on GTK</title><content type='html'>For the longest time, printing was not supported in GTK. That's bad. Heck, even Motif applications can print and they've been doing it since the beginning of time. Now, thanks to the magic of &lt;a href="http://cairographics.org/"&gt;cairo&lt;/a&gt;, GTK applications can print too and so can SWT ... we just need to write the code.&lt;br /&gt;&lt;br /&gt;CAR is off hacking this up right now with SSQ and FH. In fact, something was just printed, but the font is small like fly shit.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/7310/3146/200/flysh.1.jpg" border="0" alt="fly shit"/&gt;&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-114997174739824654?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/114997174739824654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=114997174739824654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114997174739824654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114997174739824654'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/06/printing-on-gtk.html' title='Printing on GTK'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115055104733462711</id><published>2006-06-24T13:45:00.000-05:00</published><updated>2006-06-25T08:51:46.640-05:00</updated><title type='text'>Conspiracies?  What rubish!</title><content type='html'>I've worked in software for a long time.  In the early days, I thought that "software was out to get me".  Those guys at Microsoft were evil, making API's impossible to use on purpose, just to make my life hard.  Technologies were out to kill other technologies and put people out of work.  Companies didn't ship features on time because other companies needed them.  Not true!&lt;br /&gt;&lt;br /&gt;Ok, &lt;em&gt;sometimes &lt;/em&gt;this is true, but it's the exception, rather than the rule.  I know, because some people think I'm part of a conspiracy and I'm not!&lt;br /&gt;&lt;br /&gt;Here are some popular Eclipse ones:&lt;br /&gt;&lt;br /&gt;The name "Eclipse" was chosen to offend Sun.  That's false.  I was there.  It was the age of e-everything and someone said "e-clipse".  The name stuck.&lt;br /&gt;&lt;br /&gt;SWT is out to get Swing.  That's false.  SWT is native and Swing isn't.  If you believe that native is critical, then Java is a non-starter for you without SWT.  It's about bringing more people to the Java platform by embracing technology, not starting flame wars.&lt;br /&gt;&lt;br /&gt;Eclipse.org is controlled by IBM.  Not true.  The foundation is completely independent.  When it first started, my CVS connection got slower!  Seriously, IBM has one vote and no special status in the charter.  Go ahead and search it for the string "IBM".&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115055104733462711?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115055104733462711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115055104733462711' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115055104733462711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115055104733462711'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/06/conspiracies-what-rubish.html' title='Conspiracies?  What rubish!'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115023321943177521</id><published>2006-06-21T21:28:00.000-05:00</published><updated>2006-06-21T17:58:32.893-05:00</updated><title type='text'>"I pulled a Billy ..."</title><content type='html'>Any of you fortunate enough to know &lt;a href="http://www.billybiggs.com/"&gt;Billy Biggs&lt;/a&gt;, know that there is only one word to describe him.  That word is &lt;strong&gt;awesome&lt;/strong&gt;.  He's a fantastic programmer, cares about your problem, knows everything about everything and even better, knows the guys who can get you the answer.  However, as you might have already guessed, he has one particular disturbing flaw.&lt;br /&gt;&lt;br /&gt;Ever debug something for hours, only to find out that your test case was wrong and it was working all along?  Ever write a piece of code, test it, find a bug, change it, test again, change it, and so on, only to find out that some hack of yours elsewhere in the code meant that you were testing nothing?  Ever come to the conclusion that all those assumptions that you were making for the past two hours were completely wrong?  If this happens to you, then you pulled a "Billy".&lt;br /&gt;&lt;br /&gt;The longest Billy on record: 2 days (but not pulled by the man himself).&lt;br /&gt;&lt;br /&gt;I asked him if he cared that we call this a Billy and he said, "Naw, I just want to be famous".  Well, you are.  The legend lives on.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115023321943177521?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115023321943177521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115023321943177521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115023321943177521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115023321943177521'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/06/i-pulled-billy.html' title='&quot;I pulled a Billy ...&quot;'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-115038093729624929</id><published>2006-06-19T09:14:00.000-05:00</published><updated>2006-06-19T15:01:53.470-05:00</updated><title type='text'>@deprecated is a lie</title><content type='html'>API is serious business.  If you don't need to build reusable libraries, your life is easy.  Refactoring tools will help you grow your code for the future.  If you build in-house libraries and have only a few well known clients, your clients will hate you, but you can still make changes.  For reusable public libraries such as SWT, nothing can change.  &lt;strong&gt;Ever&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;To really understand this, I think you need to have been burned by it at least once. Fortunately for me, this happened early in my career, in a different language and on a different project.  I learned my lesson.&lt;br /&gt;&lt;br /&gt;You can tell when API failure occurs.  A quick search for @deprecated is all it takes.  Some people think nothing of leaving a trail of dead API behind them, @deprecating all the way.  "We'll just deprecate that" they say, like it fixes everything.&lt;br /&gt;&lt;br /&gt;What's wrong with this thinking?  For one, API never goes away. It still needs to be tested, debugged and maintained.  It takes up space in memory and on disk.  But there is a deeper cost.  Clients have invested their time and energy learning your API and now you tell them, "Throw that away and start again, it's better this time".&lt;br /&gt;&lt;br /&gt;Here is my rule of thumb:  If there is any way, &lt;strong&gt;I mean any way&lt;/strong&gt;, to keep an API going, then I'll do it.&lt;br /&gt;&lt;br /&gt;We've done a good job of API in SWT over the years and I'm proud of it. SWT is particularly hard because the underlying platforms are so different.  One false step leads to disaster.  In SWT terms, this is an API where a native implementation is impossible.  If you search the source of SWT 3.2 for @deprecated, you'll find only 39 matches in the entire toolkit.  Some of these are duplicates because the Javadoc is copied onto all the different platforms.  The actual number is 19.&lt;br /&gt;&lt;br /&gt;Someday, I'll talk about a few of the things we do to keep it this way.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-115038093729624929?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/115038093729624929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=115038093729624929' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115038093729624929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/115038093729624929'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/06/deprecated-is-lie.html' title='@deprecated is a lie'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-114997035268877900</id><published>2006-06-14T11:55:00.000-05:00</published><updated>2006-06-19T16:14:25.820-05:00</updated><title type='text'>"Eclipse is not crap ..."</title><content type='html'>The other day, I was out somewhere and a guy found out that I was Mr. SWT and started haranguing me, saying "Eclipse is crap". Usually, I don't bother with this sort of thing. For one thing, who cares? Also, SWT is my baby, not Eclipse. Anyhow, the guy expected me to start bashing him, his company, his product or at least quote a few statistics. Then we could argue over those!  Pointless, pointless, pointless.&lt;br /&gt;&lt;br /&gt;But then it occurred to me, "Eclipse is not crap ... and I can prove it". Here goes, "SWT is a large pile of Java and C code, build scripts, directories and other random artifacts.  It's complicated and runs on five different platforms.  I use Eclipse exclusively to develop and maintain it and Eclipse works &lt;strong&gt;well&lt;/strong&gt;. Therefore, it &lt;strong&gt;cannot &lt;/strong&gt;be crap".&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-114997035268877900?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/114997035268877900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=114997035268877900' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114997035268877900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114997035268877900'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/06/eclipse-is-not-crap.html' title='&quot;Eclipse is not crap ...&quot;'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29517835.post-114994893168563160</id><published>2006-06-10T09:07:00.000-05:00</published><updated>2006-06-10T10:19:39.970-05:00</updated><title type='text'>We care ...</title><content type='html'>One of the things that's great about open source is the interaction that you have with the community. I've worked on both closed and open source systems and let me tell you, open source is just way more fun.  There is no substitute for the level of interaction, quick turn around and raw power in working this way. Give me a guy ranting at me over some processed, filtered and predigested bug list any day!&lt;br /&gt;&lt;br /&gt;We helped this guy out yesterday with a &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=145662"&gt;bizarre problem &lt;/a&gt;that didn't happen on my machine. This &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67384"&gt;bug report&lt;/a&gt; resembles a blog with people who &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67384#c136"&gt;hate my guts&lt;/a&gt;. Interesting, that all we are doing is writing code, solving problems and trying to ship, just like everyone else. But hey, all it takes is &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67384#c147"&gt;one comment &lt;/a&gt;like this to make it all worthwhile.&lt;br /&gt;&lt;br /&gt;Steve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29517835-114994893168563160?l=inside-swt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inside-swt.blogspot.com/feeds/114994893168563160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29517835&amp;postID=114994893168563160' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114994893168563160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29517835/posts/default/114994893168563160'/><link rel='alternate' type='text/html' href='http://inside-swt.blogspot.com/2006/06/we-care.html' title='We care ...'/><author><name>Steve</name><uri>http://www.blogger.com/profile/13909619505765258618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_FBBFb2akkhg/Rfwhr6v3M2I/AAAAAAAAABQ/RbstleZgseE/s320/Guitar.jpg'/></author><thr:total>2</thr:total></entry></feed>
