Lilac breasted roller.
Min wants to make Roller as easy to install as Blojsom.
Everybody has trouble installing Roller and it's really not Roller's fault. I lay all of the blame on DBCP. That's a lame excuse, I know. Anyhow... Min has a plan to build an awesome Roller installer. Go Min!
And, speaking of Blojsom: Blojsom 2.0 was released today. Coincidentally, Blojsom co-developer David Czarnecki bumped up his revision number too. Happy Birthday David!
Dreamweaver: what's the point?
I've been evaluating Dreamweaver MX 6.1 for 16 days now. I downloaded the 30-day trial, so I have 14 more days to figure this out. For a Java web application developer, what is the point of Dreamweaver?
I already have a couple of favorite code/text editors and access to simple Wysiwyg HTML editors like Mozilla Composer and Open Office, so I've got simple HTML editing pretty well covered. What I would like from a high end web application development tool like Dreamweaver is full Wysiwyg support for JSP, for custom JSP form tags like those in Struts, for page templating/layout systems like Struts Tiles, and for CSS-based layouts. So far, Dreamweaver has fallen short:
- Dreamweaver doesn't support Struts (or Webwork, I assume) custom JSP form tags. Sure, Dreamweaver supports custom JSP tags, but support only goes so far. You can use the taglib directive and you can place custom tags on the page, but they show up as invisible elements or tiny icons. So, if you are using the Struts form tags such as
<html:form>,<html:text>, and<html:submit>instead of the standard HTML form tags, then your form will not look like a form in Dreamweaver. - Dreamweaver's support for CSS-based layouts support is a little flakey. Sites that look fine in MS Internet Explorer and Netscape7/Mozilla don't always look quite right in Dreamweaver. If you want to use Dreamweaver to design a site with CSS-based layout, then you are effectively adding a third browser to your support matrix. Not only do you have to make your pages pixel-perfect in IE and Netscape, now you have to please Dreamweaver's HTML renderer as well.
- Site template/layout frameworks like Struts Tiles (or Open Symphony Sitemesh, I assume) don't work well in Dreamweaver. The Struts Tiles tags don't show up in Dreamweaver, so there is no way to view your pages in the Dreamweaver design view.
In addition to HTML editing, Dreamweaver also supports multiple server technologies including JSP, ASP, ASP.NET, PHP, and ColdFusion. I would imagine that developing, maintaining, and supporting a full-featured HTML editor and web application development environment like Dreamweaver is a huge engineering effort. Maybe that explains why JSP support is so shallow.
I hope I am missing something here. If you find Dreamweaver MX useful for JSP development in this age of MVC frameworks like Struts, Webwork, and others, then I'd like to hear from you. Are there any Dreamweaver extensions that solve or help with some of the problems I mentioned above?
See what I mean, Daypop is broken!
Apparently Struts Validator and java.math.BigDecimal is the number 1 hot topic in the weblogging community today. Take that, WebWork!
<img src="http://www.rollerweblogger.org/resources/roller/no1.png" alt="screenshot of daypop showing me at #1"/>More links.
I'm working on a couple of posts and a couple of new Roller themes, but all I have for you tonight are these links:
- Matt Raible asks which is better, PHP or Java. That reminds me. This is old news, but this presentation by Michael Radwin is interesting: Making the Case for PHP at Yahoo.
- Lance is working on Atom support for Roller and his site now features and Atom feed
- Russell looks at the Dot-Net compact toolkit and likes what he sees.
- Arjun Ram takes on Sue Speilman's outsourcing rant point-by-point.
- Clay Shirky points out IBM's HistoryFlow project and discusses patterns of Wiki use in Visualizing how wikis work
Links
- Arjum Ram explains how to use Firebird's Midas HTML editor with Roller.
- Brave New Apps: The Application Servers: ZDNet reviews app servers including Weblogic, Websphere, SunONE, OracleAS, Windows Server, and JBoss. Also covered are .NET vs. Java, caching, and performance benchmarks.
- Via Simon Brunning: The
comp.lang.pythonWhat's better about Ruby than Python? thread. - Via Russell Beattie: Scott Water's .Text is .Net based server-side weblogging software.
FreeRoller update.
A number of Roller performance/load fixes have been applied to FreeRoller over the last month or so including: persistence session per request, upgrade to OSCache 2.0-beta2, enabling OSCache unlimited disk cache, and upping the page cache timeouts from 1 to 3 hours. The unlimited disk cache was enabled this morning and the performance and load improvements seem to be pretty significant, but there are still reports of some 404 errors that need to be investigated.
If you display referers on your site, you'll notice the higher page cache timeouts because your referers list will only be refreshed every three hours (unless you post or manually flush your cache).
Links.
- Via Mike Cannon Brookes: Erik Hatcher says good-bye to the Struts-Dev list and moves on to Tapestry for his next project.
- Via Simon Bruning: side-by-side comparison of Java and Python
- StrutsTestCase Tutorial at Java Boutique: Shows you how to unit test your Struts actions using mock objects via StrutsTestCase.
- Dan Gillmore: Microsoft is hiring developers to work on blogging software for MSN and for "not product specific' projects.
- Robert X. Cringley: off-shoring IT jobs is tantamount to age-discrimination and suicidal for US companies.
- Rafe hears that natively compiled Eclipse is "blazingly fast": I need to try this on my Redhat homebox.
- Shifted Librarian: Roller Stone allows you to create RSS feeds for your favorite artists.
Clearly, something is wrong with Daypop.
I knew something was amiss when yesterday my four year old WFC vs. JFC article rose up into the Daypop 15 Top News Stories. My day-popularity is still going strong today. At this moment, 4 of the 15 Top Posts on Daypop point to my weblog entries. Clearly, something is wrong with Daypop.
What's the problem? The other day I tweaked the layout of my site the other day and,apparently, the changes that I made sent irritating ripples through Daypop. Daypop tracks the most popular news stories and weblog posts by counting the number of weblogs that link to those news stories and weblog posts. By changing my site layout, I effectively changed the contents of hundreds of web pages on my site. Daypop's flawed top post algorithm saw this as a giant burst of day-popularity for the various links that decorate the right hand side of my weblog.
Why doesn't Daypop account for this type of site-layout change, I mean, don't layout changes like this happen all the time in the world of weblogs? I wonder: is there something that I could have done to keep my changes from driving Daypop bonkers?
JSP-based tree controls?
If you search for HTML tree control on google, you'll find lots of links for JavaScript-based tree controls. To allow tree expansion/collapse without going server-side, these components require that all tree data is downloaded to the browser. This approach is not suitable for situations where your tree has thousands of items. What I'd like to see is a tree control that keeps the tree data on the server-side and allows you to "page next" and "page prev" paging through multiple pages of tree data for tree nodes that have more than a page-full of children.
Searching for JSP tree control, I happened upon the BEA Weblogic Workshop's JSP tree control tag <a href=
"http://edocs.bea.com/workshop/docs81/doc/en/workshop/taglib/www.bea.com/workshop/netui-tags-html-1.0/tree.html">
<netui:tree>. The BEA tree control uses an MVC approach where tree data is held in a server-side model baed on a TreeNode interface; close, but not exactly what I want. The BEA control does not seem to support paging. Are there any open source components similar to the BEA tree control?
Software is never perfect.
James Robertson of the Cincom Smalltalk blog picked up on my post about the final keyword and one of his readers, Blaine Buxton, made an interesting comment on the topic. Software is never perfect, as Blaine says, and I agree, but if you allow your users to customize your software by extending classes and overriding methods, you can get yourself into trouble very quickly. When you deliver a new version of your software to them, you might find that you have broken many of their customizations and enhancements. It takes some thought to write a class that is truly safe for users to extend. An typical object is like a state machine and by calling methods in the wrong order or incorrectly overriding a method, your users can easily put that state machine in a bad state. Open source helps, of course, because users of an open source application or class library can see the internals of the classes and, one hopes, understand how to correctly extend them.
I'm not saying you should never allow users of your class libraries or applications to extend your classes and override your methods, but I think, in general, it is better to provide them with extension points in the form of interfaces that they can implement to extend and customize the behaviour of your library.
Blaine Buxton In this context, it would be more natural thought for a Schemer/Functional programmer. Functional languages frown upon mutable variables because they make "proving the correctness of the code" more difficult. They see variables as you would in mathematics, they never change. Personnally, I forbid the use of final on methods in any projects that I have anything to do with because of the exact problem you explained. Software is never perfect. But, I do advocate using final on variables for constants and that's it. I think trying to turn Java into a functional language (in the sense of Scheme and Haskell) is like trying to make pigs fly. Now, just don't even get me started on the use of the private keyword on methods! My hatred for it is the same as final on methods and you should NEVER do it.
Wiki asshole on the attack.
The past couple of days, I have noticed that some little twerp has been changing random words in the Roller wiki. I'm getting tired of making little corrections to the wiki, so I've turned security back on. The Roller developers have user name and passwords for the wiki. If you want one too, let me know. I might grant you one. I know, I know! it's not the wiki way. It's my way - or the highway! Mama Musings was right all along. Foo!
Testing 123...
This site is again running the latest from Roller's CVS. Everything looks good, but OSCache 2.0-beta2 isn't writing to the disk cache on this site either. I'm not sure this is a bug (but I filed one anyway), perhaps OSCache 2.0-beta2 no longer needs to write to disk when cache.memory and the cache.entries is set to a low value.
UPDATE: It is an OSCache bug and a fix is forthcoming (thanks OSCache crew), the recommended work-around is to add the following to oscache.properties
cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener
Best practice or final fetish.
I work with a couple of Programming Languages geeks who are, it seems, always Scheme-ing and Smalltalking behind Java's back. One of these guys has a thing about the final key word. He believes that all fields, variables, classes, arguments, etc. should be final be default and that, instead of having a final keyword to declare immutables, Java should have a mutable keyword to declare those that may be mutated.
He argues that, wherever possible, fields, variables, classes, arguments, etc. should be declared final. Since Java does not default to final, you should default to final. Here are some advantages to this:
- If you declare and initialize a variable final, you never have to worry about it being null later. Nobody can change it, so it will never be null.
- Extending classes that are not carefully designed for extension, and let's face it most are not, is problematic. By mentally defaulting to final classes, you prevent potential problems.
- If you need to declare an anonymous class, you don't need to wory about redeclaring your variables as final because you already declared them that way.
- Other reasons? ...
WellformedWeb(TM) Services
Most folks out there in corporate IT land believe that webServices == wsdl + soap. Joe is fighting that notion. BTW, I don't think Joe means to imply that SOAP and WDSL are not well-formed.
Joe Gregorio: Barring any rename, which in all honesty I know won't happen, I'll just have to start referring to non-SOAP based services as Well-Formed Web Services.
Inspiration for a sniper.
I love the way that James Robertson of the Cincom Smalltalk Blog monitors my weblog for material to use against Java, J2EE, and static typing. I'm serious. I learn something everytime he fires a shot from the tower. You can learn a lot from a Smalltalker with an I-told-you-so attitude.
FreeRoller OSCache misconfiguration.
I logged into the FreeRoller server for the first time in long time and, on a hunch, I started investigating the OSCache configuration. Turned out, the disk cache directory did not exist. I created the directory and gave it the right write permissions, but OSCache is still not using the disk cache. I'm not sure why. I turned on DEBUG logging for OSCache and I saw the message below, so OSCache clearly knows the location of the cache directory. These settings were good enough for OSCache 1.7.5. What's the deal with 2.0?
INFO HttpProcessor[80][2] com.opensymphony.oscache.base.Config - Properties {
cache.debug=false,
cache.path=/sites/hosted/freeroller/cache,
cache.unlimited_disk=false,
cache.capacity=600,
cache.memory=true
}
I'd like to set cache.unlimited_disk=true and then use a cron job to clear the cache every night, but right now I just want to get the disk cache working. Any ideas?