McQueeney.com
 

Tom's Blog

A pre-dawn visit to Thomas Jefferson for the Cherry Blossom Festival
Published by Tom | April 04, 2009 04:04 PM EST |
Jefferson Memorial at dawn with cherry blossoms
Jefferson Memorial at dawn this morning during the D.C. Cherry Blossom Festival
The bloom of the Japanese cherry trees in Washington, D.C. is at its peak, so Renee and I went over to the Tidal Basin at dawn this morning to watch the sun come up behind the Jefferson Memorial. We got some nice photos.

I was surprised at how popular the Tidal Basin was at 6 a.m. During the Cherry Blossom Festival, D.C. has turned Ohio Drive SW into a one-way street going north, with parking available on the west side along the Potomac. By sunrise at 6:47 a.m., there almost wasn't a parking spot left. There was a plethora of photographers lined up along the Tidal Basin walking path, all prepared with their tripods and telephotos. Renee set up her tripod near one tree, while I roamed around shooting hand-held, which made for a lot of blurry photos in the pre-dawn twilight. I shot at ISO 800 initially, then switched to ISO 200 in the hopes that it would let me blow-up the photos extra-large without as much graininess. Still, I was shooting at 1/30 of a second and slower for a lot of the early photos. That's what I like about shooting digital: I deleted about 60% of my photos with no thought to all the "film" I wasted.

Visiting the Tidal Basin before dawn to enjoy the cherry blossoms was a good idea. The area around the basin was packed a couple of hours later, with the usual gridlock traffic on Independence Avenue SW and the Memorial Bridge entering the district from Virginia. If you're in D.C. and plan to visit the cherry blossoms on Sunday, definitely arrive early. I saw a lot of cars idling along the Memorial Bridge, slowly crawling toward D.C. -- and probably not finding a close space to park.
Jefferson Memorial at dawn with cherry blossoms
Framing Thomas Jefferson through the cherry blossoms


I uploaded several of my photos from today and from last weekend to Picasa Web Albums.

Some cherry tree facts: There are 1,678 cherry trees around the Tidal Basin, with more surrounding neighboring roads and parks. Trees originally were planted around the Tidal Basin in 1912 as a gift of friendship from the people of Japan. About 400 of the present trees were propagated from the original 1912 trees. The health of the trees often suffers as a result of their beauty. The crowds who visit the area often tromp around the base of the trees, compacting the soil. The drainage in the area could use some improvement, too, as you'll notice when you have to walk around some of the flooded areas along the Tidal Basin path -- forcing you to compact the soil even more around those trees. New trees need to be planted regularly to replace the suffering ones, which is probably one reason none of the trees you see there are ancient.

If you are interested in planting a Yoshino cherry tree at your home like the ones along the Tidal Basin, the non-profit American Forests sells them online. My "green" plug for the planet.


20090404 Saturday April 04, 2009 Permalink Comments [0]
Alfresco Software says freeloading corporations led them to closed-source strategy
Published by Tom | April 01, 2009 06:59 AM EST |
Alfresco Software said Tuesday it will not release certain new enterprise features of the Alfresco content management products, such as high-availability clustering, as open source as a way to persuade freeloading companies to pay up. John Newton, CTO and co-founder of Alfresco Software Inc., posted notice of this new business strategy in a blog entry that effectively says Fortune 50 users of the free version of Alfresco are cheapskates. He reassures everyone in his blog that core components of Alfresco will remain open source and free. Alfresco thus joins other commercial open source projects, such as MySQL, in bifurcating their source code into a core version licensed as open source, and a version with features important to large businesses (the ones with money) available for a fee.

In a blog last August, Andrew Lampitt called this division an "open-core licensing" model. This division is now officially reflected in Alfresco Software's release Tuesday of Alfresco Enterprise 3.1.

Newton implied in his blog that Alfresco Software was pushed to close-source enterprise features of Alfresco for financial reasons. Many "world-class companies" with "household brands" are using Alfresco's free and open source Labs version, he wrote, and not paying the annual Enterprise subscription. Enterprise subscriptions are a source of revenue for Alfresco Software. Subscribing customers receive a more stable "Enterprise Edition" of the Alfresco content management suite, dedicated support, and optional training and consulting. By releasing enterprise features of Alfresco only to paying customers, Newton said, he hopes Alfresco's largest users will see the benefit of paying Alfresco an annual subscription rather than paying their own developers to figure out how to deploy Alfresco in a high-availability environment or writing their own management tools.

If indeed Alfresco Software won't be able to survive (or at least thrive) without finding a more sustainable revenue source, this move sounds like a good strategy. It will allow Alfresco to continue to improve its already excellent enterprise content management system while allowing smaller companies to use Alfresco's core products for free. If, however, this bifurcated source code strategy is merely a way to return higher profits to Alfresco's founders and funders, the change might negatively impact how Alfresco Software is perceived by developers writing useful extensions and integrations and releasing them as free, open source. Open source developers release their code for the community's benefit as a whole, but might hesitate to do so when a corporation profits indirectly from their work.

There is nothing wrong with a corporation out to make money, and adopting the "open core" model might be the best move for Alfresco's future -- as a product and as a company. I don't know whether much or any of the Alfresco "core" code base was written by non-Alfresco employees. If not, the risk of Alfresco losing contributions from external open source developers is small. Other "community" contributions, like free technical support offered by fellow users on the Alfresco forums, likely will continue unaffected by the licensing change because much of that free exchange of information is among users of the free Labs version.

From what the privately held Alfresco Software says publicly, it isn't hurting for money. Alfresco employees I spoke with last year say the company is profitable. Matt Asay, Alfresco's vice president of business development, said in a CMS Wire story Tuesday by Barb Mosher that sales have been increasing recently by more than 27% from the quarter before. On Monday, Alfresco Software released limited financial information for its fiscal year ended Feb. 28. The news release says Alfresco Software Inc. closed the 2008 fiscal year with a 103% year-over-year revenue growth and a 92% increase in revenue from the fourth quarter of 2008 compared to the same quarter in 2007. It also added 270 paying customers during the 2008 fiscal year.

Newton wrote in his blog that Alfresco Software looked at options other than close-sourcing enterprise features. Alfresco considered "crippling" the open source version, he said, or letting the open source branch become so cutting-edge that it fell "into a destabilized state." But going that route "would make it difficult for certain governments to use our product," he said, and could cause the open source community to create competing forks to fix the crippleware.

Newton said Alfresco's new software model will adhere to these six principals:
  1. Alfresco extensions to create high-availability, clustered systems and provide better monitoring and and administration will be developed as closed source.
  2. The core system and interfaces will remain 100% open source.
  3. Bugs fixed for Enterprise customers will be folded into the next open source Labs release.
  4. Code that Alfresco Software writes for paying customers to integrate Alfresco with proprietary systems will remain closed source.
  5. Integrations to "ubiquitous" proprietary systems, like SharePoint, will remain open source.
  6. Alfresco will continue to support paying customers to the levels of their SLAs.



20090401 Wednesday April 01, 2009 Permalink Comments [3]
Installing Groovy from RPM on Fedora
Published by Tom | March 21, 2009 06:11 PM EST |
I installed Groovy 1.6 on Fedora from an RPM as offered on the Groovy download page and immediately got an exception stack trace when running groovysh or groovyConsole. I installed the groovy-1.6.0-2.noarch.rpm file, kindly packaged by Federico Pedemonte, then tried to run groovyConsole:
[tom@dev ~]$ groovyConsole 
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/groovy/tools/GroovyStarter
Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.tools.GroovyStarter
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: org.codehaus.groovy.tools.GroovyStarter.  Program will exit.
I then tried to run groovysh with no better luck:
[tom@dev ~]$ groovysh 
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/groovy/tools/GroovyStarter
Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.tools.GroovyStarter
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: org.codehaus.groovy.tools.GroovyStarter.  Program will exit.
The problem turned out to be quite simple to solve: a missing GROOVY_HOME. The packager adds the environment variable GROOVY_HOME to the shell by adding the file /etc/profile.d/groovy.sh so bash picks it up at startup via the /etc/profile script, but my current shell hadn't had a chance to read in that file yet.

The solution was as easy as exiting and starting a new shell, or manually setting:
[tom@dev ~]$ export GROOVY_HOME=/usr/share/groovy
[tom@dev ~]$ groovyConsole
and everything works.


20090321 Saturday March 21, 2009 Permalink Comments [0]
How to modify the Alfresco Share page footer
Published by Tom | March 18, 2009 09:18 AM EST |
Share is Alfresco Software's open source collaboration server. It's a Java web application that stands as a free competitor to Microsoft SharePoint. Since I wrote earlier this month about how to modify the default footer text in the Alfresco content management server's web client, I thought I'd follow up with even simpler instructions on how to modify the global footer in Alfresco Share. You don't even need to stop and restart the web application server for this modification.

Share is part of the open source Alfresco Labs 3 and the commercial Alfresco Enterprise Edition enterprise content management server and is built using Alfresco's Surf web framework. The Share application comes fully functional out of the box (more precisely, out of the share.war file). But it also is highly customizable with a little HTML, JavaScript and FreeMarker script modifications or additions. Thus, the default footer text in Share is much easier to modify than it is in the Alfresco web client I wrote about earlier.

The web client, which is a JavaServer Faces application, embeds the footer text inside a Java tag library inside a JAR file inside the alfresco.war file. You need the source code and a JDK to modify the global footer text. The Share web application, more simply, places its footer text inside a properties file inside the share.war file, which you can customize with a plain text editor. If you deploy Share as a WAR file instead of an exploded WAR, you'll need to unzip the WAR, edit the text file, then rezip. But that's about as complex as this change gets.

To customize the footer text for Share, unzip the share.war file if necessary to a directory of your choosing or just find the exploded WAR file you have currently deployed. If you run Share on Tomcat, your deployed Share application likely is in the directory $CATALINA_HOME/webapps/share (or %CATALINA_HOME%\webapps\share under Windows). The file to modify is in the directory
    WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/footer
called footer.get.properties. On my version of Alfresco Share, this default footer file looks like this (but all on one line):
label.copyright=Supplied free of charge with
  <a href='http://www.alfresco.com/services/support/communityterms/#support'>no support</a>,
  <a href='http://www.alfresco.com/services/support/communityterms/#certification'>no certification</a>,
  <a href='http://www.alfresco.com/services/support/communityterms/#maintenance'>no maintenance</a>,
  <a href='http://www.alfresco.com/services/support/communityterms/#warranty'>no warranty</a> and
  <a href='http://www.alfresco.com/services/support/communityterms/#indemnity'>no indemnity</a>
  by <a href='http://www.alfresco.com'>Alfresco</a> or its
  <a href='http://www.alfresco.com/partners/'>Certified Partners</a>.
  <a href='http://www.alfresco.com/services/support/'>Click here for support</a>.<br />
  Alfresco Software Inc. © 2008-2009 All rights reserved.
This text gets rendered on every Share page as a footer that looks like this:



You can see why someone might want to change this global footer text.

Change the text to anything you like and save footer.get.properties file. Mine now says:
    label.copyright=Alfresco Software Inc. © 2008-2009 All rights reserved.
To see your change, you can either restart your web application server if no one is using Share, or you can tell Share to refresh its web components cache without inconveniencing anyone currently using the server. Here's how.

Login to Share as the "admin" user and visit the service /share/service path of the Share application. If you are running Share on your Tomcat local server, the path is probably http://localhost:8080/share/service/. This page will have a button at the bottom labeled "Refresh Web Scripts". Click it, and your footer text change should be loaded the next time the footer component script is called.



Ahh. Much better.

If you build Share from source, you can make your footer text change there by making the change to the "slingshot" project. That apparently was the earlier name of the Share application. The file is config/alfresco/site-webscripts/org/alfresco/components/footer/footer.get.properties

Making this footer change might whet your appetite for making other customizations to your Share application. The Surf component framework makes customization fairly easy once you get the hang of how Surf works. By being able to see your changes quickly by interactively refreshing the web scripts rather than restarting the server, your feedback comes quickly.


20090318 Wednesday March 18, 2009 Permalink Comments [0]
Google doesn't trust itself when it comes to spam
Published by Tom | March 12, 2009 02:46 PM EST |
I created a Google Alerts to be sent daily to my Google mail account. I received daily emails for a week, then one day it stopped. Turns out Gmail filtered the Google alert to the Spam folder.

When it comes to spam, Google doesn't even trust itself.


20090312 Thursday March 12, 2009 Permalink Comments [2]