<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-7207235379759848020</atom:id><lastBuildDate>Fri, 25 Apr 2008 00:49:42 +0000</lastBuildDate><title>Scruffles.net</title><description/><link>http://www.scruffles.net/blog/</link><managingEditor>Bryan</managingEditor><generator>Blogger</generator><openSearch:totalResults>71</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-2301332251455398280</guid><pubDate>Fri, 25 Apr 2008 00:43:00 +0000</pubDate><atom:updated>2008-04-24T18:49:42.138-06:00</atom:updated><title>Springy</title><description>&lt;p&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;How long do you need to work with Spring Webflow before it clicks and you wonder how you ever lived without it?&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;I only ask because I desperately look forward to that day.  Today I'm still doing repetitive text searches through a half-dozen xml files to find out what happens when the user presses the OK button.  &lt;/span&gt;&lt;/p&gt;</description><link>http://www.scruffles.net/blog/2008/04/springy.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-196766478996811869</guid><pubDate>Fri, 18 Jan 2008 03:33:00 +0000</pubDate><atom:updated>2008-01-17T22:40:48.182-06:00</atom:updated><title>Parleys Flex Client</title><description>I consume a lot of technical media, and one of my favorite sources is &lt;a href="http://www.Parleys.com"&gt;Parleys.com&lt;/a&gt;.  They provide recorded presentations from Javapolis, SpringOne and other shows.  They recently rolled out a beta &lt;a href="http://parleys.com/display/PARLEYS/Parleys.com+V2+BETA+Program?showComments=true"&gt;Flex version&lt;/a&gt; of their site and a companion Air desktop app.  It's a very cool application, offering a lot of long awaited features including local downloading of video and full screen viewing. &lt;br /&gt;&lt;br /&gt;Parleys is making this release just as I'm pushing out the first milestone of a small flex app at work. I may post a little about Flex after I've had a little time to absorb it.  Right now, I'm well within the honeymoon period, and don't think I can give a real balanced viewpoint.</description><link>http://www.scruffles.net/blog/2008/01/parleys-flex-client.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-2958361572447341458</guid><pubDate>Wed, 16 Jan 2008 13:44:00 +0000</pubDate><atom:updated>2008-01-16T08:04:37.993-06:00</atom:updated><title>Lines Of Code</title><description>There is a reoccurring misconception that I've seen at several job sites now.  Developers seem to be proud of their API, Framework or Library because of how few lines of code the user needs to write, without concern for how many concepts a user must understand.  A well written Library will expose as little of its implementation as possible.  It will provide a single mental model for the user and a consistent way of interacting with it.  While generally, this results in less repeated code, the success of the library cannot be judged on a strict line count. &lt;br /&gt;&lt;br /&gt;Too many times, I've seen internals of a library exposed for the sake of removing a 2-3 lines of code from the caller (usually a simple if or for loop).  The result is often obviously messy APIs, and a lot of learning on the user's part.  It seems that when developing APIs for use internal to their company, developers simply don't have much regard for usability.</description><link>http://www.scruffles.net/blog/2008/01/lines-of-code.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-4876825032395720233</guid><pubDate>Tue, 15 Jan 2008 01:40:00 +0000</pubDate><atom:updated>2008-01-14T19:45:24.738-06:00</atom:updated><title>Microsoft Volta</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.scruffles.net/blog/uploaded_images/logo-volta-768351.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://www.scruffles.net/blog/uploaded_images/logo-volta-768345.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I first heard about Volta on the Java Posse (&lt;a href="http://javaposse.com/index.php?post_id=288458"&gt;#154&lt;/a&gt;).  It was carelessly referred to as a GWT rip-off.  Being a long-time listener (and fan) of the Java Posse, I was well aware that opinions expressed about Microsoft products are seldom well researched.   I did a little more reading and was interested in what I found.&lt;br /&gt;&lt;br /&gt;While Volta does generate Javascript, it does so in a slightly different way than GWT.  While GWT reads Java code and compiles to Javascript, Volta reads bytecode (.NET IL) and compiles to Javascript.  And while GWT defines its own UI APIs, Volta uses the existing .Net APIs.  This means, you can write an app in C# or VB using the form designer, add some annotations to tell the system which parts are client code, and compile the same source to both a thick client and a web app.&lt;br /&gt;&lt;br /&gt;Of course, while I can't attest to how well it works (like those at the Java Posse, I don't own a Windows PC), I do think it give us some interesting things to think about in the Java community.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If GWT read bytecode rather than source code, it could support Groovy as well. For those who haven't tried, Groovy builders are a very clean way to write Swing code. They could have been helpful for GWT as well.&lt;/li&gt;&lt;li&gt;Could a single set of UI APIs apply for Applets, Applications and GWT-like Web apps, like Microsoft's Avalon APIs span Silverlight, Windows Apps and Volta UIs?&lt;/li&gt;&lt;li&gt;How many interesting ideas do we miss because we don't watch developments in competing environments?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>http://www.scruffles.net/blog/2008/01/microsoft-volta.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-5831004248248591637</guid><pubDate>Thu, 13 Dec 2007 22:11:00 +0000</pubDate><atom:updated>2008-01-13T16:51:58.017-06:00</atom:updated><title>Applets Still Suck</title><description>Despite all the effort Sun announced at the last Java One, applets still suck.  They have for years, so why would it matter?  Because JavaFX Script, Sun's latest whiz-bang technology still needs a container to run in.  Embed one in a web page, and they still have all the disadvantages of an Applet.&lt;br /&gt;&lt;br /&gt;Recently, I've worked on a web project that took advantage of both Applets and Flash technology.  The difference in user experience is clear.  And despite a complete rewrite of the Java plugin in Java6 Update 10, Sun is still a day late and a dollar short.&lt;br /&gt;&lt;br /&gt;First the good news: Sun's version detection scripts work fairly well.  The rewrite of the plugin for Firefox was sorely needed and will make a dramatic difference.  And although I haven't seen the results, I suspect the modular nature of the new JRE will make for a much lighter weight experience for users. &lt;br /&gt;&lt;br /&gt;So what's still missing?&lt;br /&gt;&lt;br /&gt;The Applet framework has not been altered in any way.  An Applet is still heavy-weight.  It still makes an OS call to draw its window.  This means that applets (and by extension JavaFX scripts) embedded in your web site will not play nice with CSS Z-orders.  You cannot open a CSS dialog or popup on the same page as your applet, as your applet will always be on top.&lt;br /&gt;&lt;br /&gt;Although the new plugin will be available as part of Java 6 (beginning with Update 10), it will need to be manually enabled by the user from the control panel.  I assume this is because Sun doesn't want to ship new features in an update, which seems reasonable.  But because of this, it won't be safe to assume your users can view your applet in a reliable way until Java 7 is widely available.  Of course the new plugin won't work in Firefox 2 anyway. It requires Firefox 3. Oh, and it doesn't support Safari.  If you run Safari, your at the mercy of Apple.  Lets hope none of those JavaFx libraries get compiled to Java 6, because Apple doesn't seem to have plans to support my Powerbook with Java 6... ever.&lt;br /&gt;&lt;br /&gt;What about the current plugin? Using the existing plugin can cause unpredictable results.  In Firefox, resizing the applet can cause your applet to re-initialize (not just fire events, or call start() again).  I've also seen the plugin randomly ignore the page layout and get stuck in an odd place on the screen.  Refreshing the page usually fixes the problem, but that isn't something I really want to tell my end user to do. And of course the current plugin has none of the performance improvements made to the new plugin.&lt;br /&gt;&lt;br /&gt;With all the excitement over JavaFx lately, I thought it might be a good time to remind people that there isn't a JavaFx plugin.  JavaFx in the browser will still suck for all the same reasons Applets do.  I expect them to continue to suck, as I see no evidence from Sun that they plan to follow through and actually fix any of this.</description><link>http://www.scruffles.net/blog/2007/12/applets-still-suck.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-8862190080806174979</guid><pubDate>Fri, 24 Aug 2007 01:39:00 +0000</pubDate><atom:updated>2007-08-23T20:20:59.695-06:00</atom:updated><title>JLINQ - Lame</title><description>Wow.&lt;br /&gt;&lt;br /&gt;IBM has outdone themselves.  I'm struggling to find words to express what I think of &lt;a href="http://www.ibm.com/developerworks/db2/library/techarticle/dm-0708ahadian/index.html?ca=drs"&gt;their latest announcement&lt;/a&gt;.  IBM has released a new Eclipse plugin that they call JLinq.  It's essentially an O/R mapping tool that does most of its work using design time code generation.  It generates SQL from beans or beans from SQL.  It's essentially a bunch of Eclipse wizards that generate code.  Not especially impressive, and a surprising direction after all the recent hype about JPA, Hibernate and EJB 3.&lt;br /&gt;&lt;br /&gt;Of course bad software being released from IBM is nothing new.  What I find truly exasperating about JLinq is the name.  Surly a Java technology named JLinq would have some resemlence to Microsoft's LINQ technology.  It's not only the same acronym, but it stands for the same thing in both technologies: "Language Integrated Query".  But while Microsoft's LINQ, is a query language integrated into the programming language (go figure), IBM's LINQ is a code generator integrated into an IDE.  WTF?&lt;br /&gt;&lt;br /&gt;These kinds of projects are not just an embarrassment to IBM, but might be harmful to the Java community as well.  Too many Java developers are completly ignorant of advancements outside thier own community. This kind of confusion isn't helpful.  How many developers are going to assume this is a Java port of LINQ, and judge LINQ on the merits of IBM's 3rd rate Eclipse plugin?</description><link>http://www.scruffles.net/blog/2007/08/jlinq-lame.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-8750064119741549432</guid><pubDate>Sat, 07 Jul 2007 17:30:00 +0000</pubDate><atom:updated>2007-07-07T11:45:47.972-06:00</atom:updated><title>LINQ ScreenCast</title><description>&lt;a href="http://weblog.infoworld.com/udell/screenroom/"&gt;The Screening Room&lt;/a&gt; has a great &lt;a href="http://weblog.infoworld.com/udell/screenroom/linq_flv.html"&gt;screencast on LINQ&lt;/a&gt;.  It's a little early to get too excited about LINQ, but the demos are very impressive.  The combination of declarative type-safe queries and object oriented code makes many of our hot new trendy languages and language features seem like dirty hacks.  Specifically many of the new Java features and JSRs take advantage of EL or queries embedded in Strings to get the job done -- effectively dropping down into a dynamic language.  While dynamic languages may be the most pragmatic solution today, its nice to see someone is working on a more practical permanent solution.&lt;br /&gt;&lt;br /&gt;On a related note, O'Reilly has a good shortcuts book on the under-pinnings of LINQ (&lt;span class="book-title" style="font-weight: bold;"&gt;&lt;/span&gt;&lt;a href="http://www.oreilly.com/catalog/language1/index.html"&gt;&lt;span class="book-title"&gt;LINQ: The Future of Data Access in C# 3.0&lt;/span&gt;&lt;/a&gt;). My interest in it wasn't about learning about LINQ itself, but what language features had to be added to support it. It does a good job of showing how ambitious this project is.</description><link>http://www.scruffles.net/blog/2007/07/linq-screencast.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-6803592204028528949</guid><pubDate>Sun, 01 Jul 2007 04:22:00 +0000</pubDate><atom:updated>2007-06-30T22:43:11.955-06:00</atom:updated><title>Bob on Design</title><description>Bob Lee had some &lt;a href="http://crazybob.org/2007/06/lies-damned-lies-and-xml.html"&gt;interesting comments&lt;/a&gt; on the advantages of using annotations rather than XML for configuration.  I didn't find the original post as interesting as the comments that followed.  Among them was a little pearl of wisdom I think deserves to be embroidered on a pillow:&lt;br /&gt;&lt;blockquote&gt;Contrary to Spring's philosophies, I think very few design decisions are "a matter of taste." Some ways of doing things are provably better than others, and one way of doing something is almost always better than two. Otherwise, you end up with the Perl of frameworks.&lt;/blockquote&gt;Ok. So it would have to be a big pillow. But I've regularly had to deal with co-workers who write code with all public members or write extra methods that are never called -- just in case.  They almost always plea &lt;span style="font-style: italic;"&gt;'a matter of taste'&lt;/span&gt;.</description><link>http://www.scruffles.net/blog/2007/06/bob-on-design.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-5484848923369960365</guid><pubDate>Wed, 20 Jun 2007 02:24:00 +0000</pubDate><atom:updated>2007-06-19T20:44:18.921-06:00</atom:updated><title>Hand Coded</title><description>Josh Marinacci recently wrote about using a &lt;a href="http://weblogs.java.net/blog/joshy/archive/2007/06/a_response_to_g.html"&gt;tool vs hand coding&lt;/a&gt; your Swing UI. While I don't completely disagree with all of his arguments, he tries to make a couple of points that burn me a bit. &lt;br /&gt;&lt;br /&gt;1) He tries to argue that you don't have to worry about vendor lock-in with Matisse because its open source&lt;br /&gt;2) Because the files generated by Matisse are hand-hackable, you don't need to be concerned with lock-in&lt;br /&gt;&lt;br /&gt;In my 8 years of Swing programming, I've used 5 visual editors for writing Swing GUIs.  While Matisse is currently the leader, I don't see any reason why it would still be the best next year.  The previous 4 visual editors didn't last long, I fail to see why Matisse's open source license is going to keep it in the number 1 spot throughout eternity.&lt;br /&gt;&lt;br /&gt;Also, each of the 5 visual editors I refer to generated hand-hackable code.  While we could always &lt;span style="font-style: italic;"&gt;survive&lt;/span&gt; without our old GUI tools, the crap code generated by those tools were never &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; maintainable. &lt;br /&gt;&lt;br /&gt;While standardizing the XML format Matisse uses won't hurt anything, I really don't see how it would help either.  It's not as if Eclipse, IDEA and JBuilder are all going to start playing nice with Matisse-generated code. &lt;br /&gt;&lt;br /&gt;We need more than just a defacto-standard JavaBeans editor.  We need a well thought out component model.</description><link>http://www.scruffles.net/blog/2007/06/hand-coded.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-4913819653279506090</guid><pubDate>Fri, 01 Jun 2007 02:21:00 +0000</pubDate><atom:updated>2007-06-03T16:17:19.530-06:00</atom:updated><title>More video content</title><description>I'm a big fan of the recent trends towards webinars and recorded presentations.  It's a great way to get a 1000 foot view of a topic with very little effort.  I've posted a few sources for &lt;a href="http://www.scruffles.net/blog/2006/08/presentations-reading-material.html"&gt;videos&lt;/a&gt; and &lt;a href="http://www.scruffles.net/blog/2006/06/good-audio-content.html"&gt;audio&lt;/a&gt; in the past, but I've recently found a couple new interesting links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ted.com/talks"&gt;TED Talks&lt;/a&gt; are online and&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developers.sun.com/learning/javaoneonline/j1online.jsp?track=1&amp;yr=2007"&gt;JavaOne 2007 sessions&lt;/a&gt; are being released gradually (although I'm a little disappointed that the 2005 sessions have disappeared)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;EDIT (6/3)&lt;/span&gt;: It looks like I missed the release of the &lt;a href="http://www.javapolis.com/confluence/display/JP06/JavaPolis+2006+Conference+DVD"&gt;JavaPolis 2006 DVD&lt;/a&gt;.  I just ordered it, so I can't vouch for its content yet, but quite a few of the presentations are available from  &lt;a href="http://www.bejug.org/confluenceBeJUG/display/PARLEYS/Home"&gt;Parleys&lt;/a&gt;, and the &lt;a href="http://www.javapolis.com/confluence/display/JP05/JavaPolis+2005+DVD"&gt;2005 DVD&lt;/a&gt; was a great resource.  At 49€ (about $65) it's considerably cheaper than attending a conference in person.&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;EDIT (6/4): &lt;/span&gt; Google has released &lt;a href="http://www.youtube.com/rss/tag/googledeveloperday.rss"&gt;video from Google Developer Days&lt;/a&gt; including &lt;a href="http://youtube.com/watch?v=HsODVUvgvdk"&gt;a presentation on Google Gears&lt;/a&gt;, which is a neat little framework for writing off-line web apps.  They use a local database to store content.  And, of course, it's fully searchable.  They also have &lt;a href="http://youtube.com/watch?v=x_NpraeC3tk"&gt;a presentation on Juice&lt;/a&gt;, which was pretty interesting.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>http://www.scruffles.net/blog/2007/05/more-video-content.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-3503636044916548153</guid><pubDate>Mon, 21 May 2007 03:40:00 +0000</pubDate><atom:updated>2007-05-20T22:10:57.890-06:00</atom:updated><title>New Lens</title><description>Last week I got a macro lens I've been looking at for quite a while (Canon EF 100mm f/2.8).  I have mixed feelings about it so far. It does its job very well, but I'm a little frustrated at how completely useless it is outside of macro photography.  With my other lenses, I can work a little outside their area of expertise when a good shot presents itself, but because this lens is fixed at 100mm, using it for a casual photo in a pinch is a bit of a pain.  That aside, I really love what it does with macro photos.  It gives me a decent working distance from the subject and the short focal distance, while a little difficult to work with, can really make a photo stand out.&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/scruffles/507010930/" title="frog"&gt;&lt;br /&gt;&lt;img src="http://farm1.static.flickr.com/193/507010930_21dcab6d99.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;The detail in the Frog's eye is great (check out the full size version on flickr).  What you can't really see from this picture, is that the entire frog is about the size of my thumbnail.&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/scruffles/507006574/" title="ant"&gt;&lt;br /&gt;&lt;img src="http://farm1.static.flickr.com/212/507006574_65d273e46d.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I cropped this one a little.  Keeping the ant's head in focus was a bit tricky with a monopod.  I may need to start using my tripod a bit more often.</description><link>http://www.scruffles.net/blog/2007/05/shallow-dof-frog-eye.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-5964654445553315804</guid><pubDate>Fri, 18 May 2007 03:27:00 +0000</pubDate><atom:updated>2007-05-17T21:45:55.382-06:00</atom:updated><title>Distributed Version Control</title><description>&lt;a href="http://www.youtube.com/watch?v=4XpnKHJAok8"&gt;Linus gave a presentation&lt;/a&gt; on &lt;a href="http://en.wikipedia.org/wiki/Git_%28software%29"&gt;git&lt;/a&gt;, his distributed version control system.  I've heard a lot about git and &lt;a href="http://en.wikipedia.org/wiki/BitKeeper"&gt;bitkeeper&lt;/a&gt;, but hadn't paid much attention until this presentation.  If you haven't taken the time to learn about distributed version control, you should take an hour tonight and watch the presentation.&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://kylecordes.com/2007/05/17/linux-git-distributed/"&gt;Kyle Cordes&lt;/a&gt; for posting the link on the JUG mailing list.</description><link>http://www.scruffles.net/blog/2007/05/distributed-version-control.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-6364723202204370130</guid><pubDate>Sun, 13 May 2007 03:19:00 +0000</pubDate><atom:updated>2007-05-12T22:01:16.070-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Programming</category><title>Building the IDEA Groovy Plugin</title><description>It took me a little effort to get Idea's Groovy Plugin built, so I thought I'd share my experiences for those who don't want to fall in the same traps.&lt;br /&gt;&lt;br /&gt;I started from some &lt;a href="http://intellij.net/forums/thread.jspa?threadID=267193&amp;tstart=0"&gt;instructions on the forums&lt;/a&gt;, but still had trouble. Some filenames were wrong, and working on the mac changed some of the details.  Here are my revised instructions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Update to a new EAP of IDEA. The plugin wasn't built for IDEA 6&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Checkout the project from  &lt;a href="http://svn.jetbrains.org/idea/Trunk/groovy/"&gt;http://svn.jetbrains.org/idea/Trunk/groovy/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;When you first open the project, you may be asked to make a variable association. I pointed the templates variable to ${project}/resources/fileTemplates&lt;/li&gt;&lt;li&gt;I had to create a new &lt;span style="font-style: italic;"&gt;Intellij IDEA SDK&lt;/span&gt; pointing it to my IDEA installation&lt;/li&gt;&lt;li&gt;Add &lt;span style="font-style: italic;"&gt;tools.jar&lt;/span&gt; (on windows) or &lt;span style="font-style: italic;"&gt;classes.jar&lt;/span&gt; (on the mac) from your JDK installation to the SDK classpath&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add &lt;span style="font-style: italic;"&gt;idea.jar&lt;/span&gt; from your idea installation (on the mac, the file is &lt;span style="font-style: italic;"&gt;/Applications/Selena-6951.app/lib/idea.jar&lt;/span&gt;) to your SDK classpath&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There are already two ant scripts in the ant window. Run the one called &lt;span style="font-style: italic;"&gt;generate lexer from groovy&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Run the &lt;span style="font-style: italic;"&gt;build&gt;make&lt;/span&gt; command from IDEA's menu&lt;/li&gt;&lt;li&gt;Run the &lt;span style="font-style: italic;"&gt;build&gt;Prepare Plugin Module 'groovy' for deployment&lt;/span&gt; command from IDEA's menu&lt;/li&gt;&lt;li&gt;A zip file will be generated to the project directory. Copy it to IDEA's plugin directory and unzip it.&lt;/li&gt;&lt;li&gt;Restart IDEA&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I've attached the file for those daring enough to install software from some stranger's blog: &lt;a href="http://www.scruffles.net/blog/groovy.zip"&gt;groovy.zip&lt;/a&gt;</description><link>http://www.scruffles.net/blog/2007/05/building-idea-groovy-plugin.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-5029612539437943828</guid><pubDate>Thu, 10 May 2007 03:47:00 +0000</pubDate><atom:updated>2007-05-09T22:59:26.373-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Programming</category><title>JavaFX in Perspective</title><description>The large number of discussion about JavaFX over the last few days seems be very polarized.  So far I have only read two opinions repeated over and over:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;JavaFX is the competitor to Flash and SilverLight that we've all been waiting for.&lt;/li&gt;&lt;li&gt;JavaFX is a weak attempt to cash in on the recent SilverLight announcements and has no chance for success.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;What most people don't seem to get, is that JavaFX isn't even in the same market as Flash and SilverLight.  It's much more appropriate to compare JavaFX with XAML or Flex (just the markup language, not the action script, runtime environment, multimedia support or animation).&lt;br /&gt;&lt;br /&gt;Both Adobe's product line and Microsofts are made up of several packages:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A runtime environment - The Flash VM and the .Net Runtime&lt;/li&gt;&lt;li&gt;A declarative UI language including widgets - Flex and a light version of XAML&lt;/li&gt;&lt;li&gt;A declarative animation language - Flash and XAML&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A scripting language for procedural logic - Action Script and JavaScript&lt;/li&gt;&lt;li&gt;A development environment for each of these three languages&lt;/li&gt;&lt;li&gt;Multimedia components - video and audio playback is supported well as first class components in both frameworks&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Of course JavaFX runs on the Java runtime environment, and it defines a very nice language for declarative UI building and a decent language for animation... but that's all it tries to do.&lt;br /&gt;&lt;br /&gt;Sun has yet to show any interest in completing the rest of the picture.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It could be argued that some work would need to be done to the JRE before it could be light enough to compete with Flash or Silverlight as a runtime environment (at least ease of installation could use some work).&lt;/li&gt;&lt;li&gt;JavaFX has no equivalent to JavaScript.  Although one could theoretically use Java, Groovy, Javascript or some other language for procedural code, the binding isn't nearly as nice as the integration the other two frameworks have with their scripting languages.&lt;/li&gt;&lt;li&gt;Netbeans provides some syntax highlighting and code completion for the language, but it's barely better than notepad when compared to the authoring tools being offered by Adobe.  To take on the competition, Netbeans will need timeline driven animation and Matise-like component layout from day one.  On day two, we need vector drawing tools to compete with Illustrator and Expression (tie-in with existing tools might be a nice stop gap).&lt;/li&gt;&lt;li&gt;Multimedia support has always been a weakness in Java.  JavaFX is the neon sign pointing out one of Sun's often ignored weakesses. &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;With all that said, JavaFX compares very nicely to Flex and XAML when ignoring their sister technologies.  Feature for feature it compares nicely.  Without the rest of the package, of course, it's all pretty academic. Assuming Sun is really serious about taking on Adobe and Microsoft, they still have a lot of work ahead of them.</description><link>http://www.scruffles.net/blog/2007/05/javafx-in-perspective.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-4361903307850613131</guid><pubDate>Tue, 20 Mar 2007 02:35:00 +0000</pubDate><atom:updated>2007-03-19T21:52:44.488-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Programming</category><title>WPF &amp; Flex</title><description>I went to a &lt;a href="http://www.stlnet.org/DesktopDefault.aspx?tabid=1"&gt;.Net User's Group&lt;/a&gt; meeting about WPF tonight. The speaker was Walt Ritscher.  The presentation was a pretty decent intro.  I was expecting it to be quite a bit more in depth.  I guess I figured .Net developers would already be up to speed on WPF and an intro presentation would be beyond them at this point.  I seem to make a habit of setting my expectations a little too high for most user group presentations.&lt;br /&gt;&lt;br /&gt;I recently signed up for a membership at &lt;a href="http://www.lynda.com"&gt;lynda.com&lt;/a&gt;, which provides instructional videos on many technical topics.  The subject matter tends to lean towards creative tools (Photoshop).  I've been watching the Flex training videos and I can't help notice the similarities to what Microsoft is doing with WPF.  Macromedia really seemed to have missed the boat by brining application development to Flash so late in the game, but they seem to be catching up well now that Microsoft has put some fear into them.  Since Adobe took over, they've kept going strong.&lt;br /&gt;&lt;br /&gt;Of course both Flex and WPF/E are both proprietary technologies that have fairly useless free SDKs and $600 development environments for the serious user.  I haven't seen any free alternatives with anything close to the capabilities.  Both SVG and &lt;a href="http://blogs.sun.com/chrisoliver/entry/f3"&gt;F3&lt;/a&gt; have similar capabilities, but F3 isn't open and lacks the development tools and SVG lacks good browser support.&lt;br /&gt;&lt;br /&gt;Oh well... guess we'll have to put up with Ajax for a few more years.</description><link>http://www.scruffles.net/blog/2007/03/wpf-flex.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-8115058751766322</guid><pubDate>Thu, 15 Mar 2007 05:50:00 +0000</pubDate><atom:updated>2007-03-14T22:52:59.299-06:00</atom:updated><title>IntelliLang</title><description>&lt;a href="http://www.jetbrains.net/confluence/display/CONTEST/IntelliLang"&gt;IntilliLang&lt;/a&gt; is a very cool plugin for Idea that (among other things) allows &lt;em&gt;stringified &lt;/em&gt;code to be parsed as any other code.  This means those regular expressions and html fragments you store as a Java String can be parsed, checked and auto-completed as a first-class citizen.&lt;br /&gt;&lt;br /&gt;Jetbrains shows some very cool examples including regular expressions, javascript and el.  It still has some rough edges, but once its cleaned up a bit, it could be a great tool for HQL queries and embedded SQL.</description><link>http://www.scruffles.net/blog/2007/03/intellilang.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-7442867019338076065</guid><pubDate>Mon, 26 Feb 2007 05:30:00 +0000</pubDate><atom:updated>2007-02-26T08:08:37.293-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Photography</category><category domain='http://www.blogger.com/atom/ns#'>Photoshop</category><title>Lightroom</title><description>I had been using the beta of Lightroom since its first release.  Initially I wanted to use it rather than Apature because of Apature's lack of good Photoshop integration.  Ironically, Lightroom didn't play well with Photoshop either.  My biggest complaint was that Bridge and Camera Raw didn't recognize edits made from Lightroom. Although this is fixed in Lightroom 1.0, at the time I had to work in either Bridge/Camera Raw/Photoshop or Lightroom/Photoshop.&lt;br /&gt;&lt;br /&gt;I like the Bridge/Camera Raw workflow because it's filesystem based.  I don't like applications managing my files.  But Camera Raw, as powerful as it is, is a clunky tack-on dialog where I really want an emersive tool.  When I'm editing my photos, I work on them for hours at a time.  I don't want to jump around between dialogs and have to save copies of my files.&lt;br /&gt;&lt;br /&gt;After a couple months, I gave up completly on Bridge/Camera Raw.  I was soon using Lightroom for all my post-processing, and doing touchups in Photoshop.  As sad as it might be, I was using Photoshop solely for removing zits and cleaning up tape marks on my son's face (because of medical issues, he uses oxygen at night. His cannula has to be taped to his face).  $600 of image processing power, devoted to removing tape and pimples.&lt;br /&gt;&lt;br /&gt;And then Lightroom 1.0 was released.  One of it's new features: Spot Removal.  Here's the twist.  Rather than saving a copy of the RAW file to edit in Photoshop, Lightroom's edits are lossless changes to the RAW file.  While the Photoshop tool is more like a raster based brush, in Lightroom all the corrections are circles with source and destination references.  Those references can be altered or cleared at any time in the future.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.scruffles.net/blog/uploaded_images/lightroom-772923.jpg"&gt;&lt;img style="cursor: pointer;" src="http://www.scruffles.net/blog/uploaded_images/lightroom-768917.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the example above, I've made several corrections.  The active one is represented by the two circles at either end of the arrow.  The arrow is saying "copy everything in this circle to this one".  At first it seemed rather limiting to have to use circles rather than a brush, but after a little time, I've found it to be very powerful.&lt;br /&gt;&lt;br /&gt;What's more, this single tool has completely eliminated Photoshop from my regular workflow. While I still use Photoshop from time to time for other projects, I don't really need it for photo processing any more.</description><link>http://www.scruffles.net/blog/2007/02/lightroom.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-6641591511641857763</guid><pubDate>Thu, 08 Feb 2007 01:10:00 +0000</pubDate><atom:updated>2007-02-07T19:14:24.107-06:00</atom:updated><title>Thoughts On Music</title><description>For those who haven't read it, &lt;a href="http://www.apple.com/hotnews/thoughtsonmusic/"&gt;Steve Job's article denouncing DRM&lt;/a&gt; is a good read.  I was expecting typical corporate finger pointing related to the problems Apple is having in Europe, but Jobs makes some very good points.  He also points out a pretty decent explanation to why the Zune doesn't use playsforsure DRM.</description><link>http://www.scruffles.net/blog/2007/02/thoughts-on-music.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-2626513933536847076</guid><pubDate>Tue, 06 Feb 2007 13:03:00 +0000</pubDate><atom:updated>2007-02-06T10:33:55.516-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Programming</category><title>Swing and Vendor Lock-in</title><description>10 years ago Sun introduced Swing, and with it, JavaBeans. JavaBeans were supposed to allow UI widgets to be defined as components. It would allow Swing developers to take advance of graphical layout editors without vendor lock-in. It failed.&lt;br /&gt;&lt;br /&gt;Those who tried to develop Swing apps with their IDE's drag and drop editor forced their way through limitations and learned how to hand-code fixes that wouldn't break their IDE's code parsing. Then support would dry up for their favorite tool and they would be left with no alternative, but to hand-code their Swing apps. Others recognized the graphical tools as Microsoft-style lock-in and avoided it early on. For almost a decade, hand-coded Swing apps have been the norm.&lt;br /&gt;&lt;br /&gt;10 years later, Sun is trying again. They seemed to have missed the point of their initial failure. They seem to be under the impression that had the first tools been of higher quality, people would have never resorted to hand-coding their Swing apps. In reality, it was the proprietary nature of the IDE-generated code that caused the failure. No matter how well the tools would have worked, Java developers have been conditioned to demand vendor neutrality.&lt;br /&gt;&lt;br /&gt;Vendor neutrality is not something developers get from Netbeans and Mattise. As nice as the platform is, the code it generates is not parseable by any other platform. Because it doesn't generate code to a standard, such ad-hock compatibility wouldn't be enough anyway.&lt;br /&gt;&lt;br /&gt;This problem has already been solved, of course. Ironically, one of the latest solutions is from Microsoft. Although XAML is a closed standard, it is a standard. It's well defined and parsable by multiple editors. A Swing solution wouldn't have to be as feature heavy as XAML. There are many open source solutions that fill the need. Of course they would need to be adoped by Sun (presumably via a JSR) and the IDE vendors to be a useful vendor-neutral solution. Until this happens, Mattise is just another way to lock your application to your IDE.</description><link>http://www.scruffles.net/blog/2007/02/swing-and-vendor-lock-in.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-3999200828919001526</guid><pubDate>Sat, 03 Feb 2007 20:57:00 +0000</pubDate><atom:updated>2007-02-03T15:08:49.831-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Programming</category><title>Saving Files</title><description>I'm not sure when it happened, but at some point since I started using IDEA I lost the concept of saving my source code.  Since version 2* IDEA has automatically saved changes when focus to the window was lost.  I don't really know how long it took, but over time I stopped paying attention to file saving.  From time to time, I would edit a text file in notepad or use someone else's IDE and bang my head against the wall as I tried to run without committing my changes.  Apparently it was a common mistake.  Eclipse eventually added a warning dialog: "You have unsaved changes. Would you like to save them before you run your program?".  What the hell kind of question is that?!?  Why would I have changed my code, and run my program if I didn't want to see those changes reflected in my application?!? &lt;br /&gt;&lt;br /&gt;I guess having a warning is better than what notepad does... but then again, is that really the mark of a great IDE: "at least we're better than notepad!"&lt;br /&gt;&lt;br /&gt;*version 1 of IDEA was a JBuilder plugin, so it might have been a little silly to do it then</description><link>http://www.scruffles.net/blog/2007/02/saving-files.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-8359465369664931406</guid><pubDate>Thu, 01 Feb 2007 14:24:00 +0000</pubDate><atom:updated>2007-02-01T09:37:06.431-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Programming</category><title>Plain Old Java COMPONENTS</title><description>I've been reading about the various proposals for adding properties and events to the Java language. In the process, I stumbled across an interesting blog entry by &lt;a href="http://weblogs.java.net/blog/rbair/archive/2007/01/properties_in_j.html"&gt;Richard &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)"&gt;Bair&lt;/span&gt;&lt;/a&gt; which he starts by describing why &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;JavaBeans&lt;/span&gt; don't break encapsulation. For a long time, I've believed &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2" onclick="BLOG_clickHandler(this)"&gt;Javabeans&lt;/span&gt; were an abomination. Despite the intentions of the creators a technology is eventually defined by how it is used. With the exception of a couple dozen Swing components, the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3" onclick="BLOG_clickHandler(this)"&gt;JavaBeans&lt;/span&gt; patterns is used by most developers as a loophole allowing programmers to break encapsulation.&lt;br /&gt;&lt;br /&gt;When Richard describes the original purpose of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4" onclick="BLOG_clickHandler(this)"&gt;JavaBeans&lt;/span&gt;, he's describing a framework that was needed very badly for allowing tools to interact with components. If properties and events are added to the language, it would go a long way towards cleaning up the interface between components and their tools.&lt;br /&gt;&lt;br /&gt;What I don't see it helping with, however is the programmer's understanding of what they are doing when they make a component. When someone implements the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5" onclick="BLOG_clickHandler(this)"&gt;JavaBean&lt;/span&gt; pattern, they are agreeing to an existing contract. I know very few programmers who understand that contract. None of them seem to understand that they are building a component. They have been told by the good people at Hibernate or the people who made their &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6" onclick="BLOG_clickHandler(this)"&gt;databinding&lt;/span&gt; framework that they were making plain-old-java-OBJECTS.&lt;br /&gt;&lt;br /&gt;Plain Old Java Objects. Like every other Java object out there. But Hibernate doesn't work with just any Java object, does it? It only works with Java objects that strictly meet the contract set by the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7" onclick="BLOG_clickHandler(this)"&gt;JavaBeans&lt;/span&gt; pattern.&lt;br /&gt;&lt;br /&gt;Of course the market has picked the term &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8" onclick="BLOG_clickHandler(this)"&gt;POJO&lt;/span&gt; to &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;emphasize&lt;/span&gt; the difference between &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;today's&lt;/span&gt; tools and those requiring implementation of multiple interfaces and the addition of specific behaviors to your objects. As horrible as those frameworks were, they were object-oriented. Of course, since the buzz of the term &lt;em&gt;object-oriented&lt;/em&gt; hasn't died down, we don't want to tell people that we've transitioned them to &lt;em&gt;component-oriented&lt;/em&gt; programming already.</description><link>http://www.scruffles.net/blog/2007/02/plain-old-java-components.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-4991936378916155504</guid><pubDate>Tue, 16 Jan 2007 05:01:00 +0000</pubDate><atom:updated>2007-01-15T23:04:27.088-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Programming</category><title>Cruise Control Montior</title><description>When moving my blog to from Movable Type, I noticed a handful of posts that were still unpublished.  One was a reference to a tool I put together about a year ago.  It's a &lt;a href="http://www.scruffles.net/ccMonitor/"&gt;status screen for Cruise Control build results&lt;/a&gt;.  If you're monitoring more than just one project, lava lamps are a bit of a pain.</description><link>http://www.scruffles.net/blog/2007/01/cruise-control-montior.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-4114304153172475928</guid><pubDate>Sat, 13 Jan 2007 02:13:00 +0000</pubDate><atom:updated>2007-01-12T20:12:51.824-06:00</atom:updated><title>Comicly Bad Code</title><description>You're creating a button that toggles back and forth between two states.  You want the button's text to change depending on the state it's in.  Ignoring the obvious usability issues involved, how would you go about implementing that?  It's a simple problem, so it should have a simple answer:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;button.setText(isInWhateverState ? "text 1" : "text 2");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I just ran into some code that works a little different than one might expect.  It uses two buttons, each with different text.  Each button has a complicated set of lazy initializers and it's own listeners.  The two buttons are on a panel with a CardLayout.  Pressing either button switches the card layout making the other visible.&lt;br /&gt;&lt;br /&gt;Sometimes writing really bad code takes a bit of creativity.</description><link>http://www.scruffles.net/blog/2007/01/comicly-bad-code.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-9196893027387211715</guid><pubDate>Fri, 12 Jan 2007 04:32:00 +0000</pubDate><atom:updated>2007-01-12T07:47:40.206-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Blogging</category><title>Moving to Blogger</title><description>After 4 years of maintaining Movable Type on my web server, I've decided to switch to Blogger.  Moveable Type was just becoming a maintenance nightmare, and it was easier to move than to get it back into working condition.  I'm still maintaining my son's blog in Movable Type, but I'm shutting down my photography blog.  Since I started using flickr, I really hadn't been maintaining it anyway.  I may start posting pictures here instead. My thoughts so far:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The author's interface in Blogger is a decade ahead of MovableType. That alone made it worth the switch.  The blogger interface is similar to that of most Google services. Very smooth and clean.&lt;/li&gt;&lt;li&gt;None of Bloggers templates were wide enough to display landscape flickr images.  Altering an existing one to fit took about an hour of tinkering (resizing images, took most of the time).  Now I won't be able to switch themes again without sitting back down in front of Photoshop.  Kind of a pain.&lt;/li&gt;&lt;li&gt;There were a lot more publishing options with Blogger than I expected.  I haven't used a free hosting service since before Geocities was bought up by Yahoo.  I hadn't expected it to cater to secure-ftp or hosted domains.&lt;/li&gt;&lt;li&gt;The help on Blogger is pretty good, but I would have loved a feature matrix showing the pros and cons of each hosting method.  I had find out which to use by trial and error.&lt;/li&gt;&lt;/ul&gt; I'm looking forward to getting rid of this template and putting something together that's a little more personalized, but for now, at least I'm not spending time removing spam from my comments.</description><link>http://www.scruffles.net/blog/2007/01/moving-to-blogger.html</link><author>Bryan</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7207235379759848020.post-3405505452930564258</guid><pubDate>Fri, 05 Jan 2007 16:27:00 +0000</pubDate><atom:updated>2007-01-06T01:18:18.793-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Programming</category><title>IDEA 7 Milestone 1 Roadmap</title><description>Intellij has made their &lt;a href="http://www.jetbrains.net/confluence/display/IDEADEV/Selena+roadmap"&gt;roadmap for version 7&lt;/a&gt; available. I don't see anything real exciting at this point, but I'm usually more impressed by their implementation than their feature list.</description><link>http://www.scruffles.net/blog/2007/01/idea-7-milestone-1-roadmap.html</link><author>Bryan</author></item></channel></rss>