Alfresco Developer Guide

imageMy friend Jeff Potts announced today that his book, “Alfresco Developer Guide”, has been released.   Jeff’s been working on the book for quite a while, and it looks to be packed with great examples and information about the ins and outs of the Alfresco content management system.

I’ve ordered my copy.


The Weekly Squeak: ‘Smalltalk is cool again’, says Gartner

Via: The Weekly Squeak: ‘Smalltalk is cool again’, says Gartner

There is an article from a Gartner analyst talking about a renewed interest in Smalltalk.  Speaking for myself, I’ve come around to Smalltalk over the last couple of years and I’m very glad that I did.  It’s one of the coolest languages/platforms I’ve ever laid my hands on.

In fact, in case you were wondering, I’ve temporarily put Erlang aside to go back and visit Smalltalk land.  It’s just much more productive when you have limited time available.


Finished the Erlang Book

I finished reading Joe Armstrong’s “Programming Erlang” book a couple of nights ago. It’s a great introduction to Erlang as well as a great programming book. I’ve always loved the Pragmatic Programmer books, and this one is no exception. It’s filled with non-trivial working examples and pointers to more information. It left me feeling ready to dive into the Erlang docs and write some code!

So, that’s exactly what I’m going to do. I’m currently plotting a program that I’m going to write in Erlang. I want to make sure that it’s non-trivial and that it benefits from concurrency. I’ll loop you in when my scheme is ready to hatch.

Erlang Podcast with Joe Armstrong

I just listened to a good podcast interview with Joe Armstrong on Software Engineering Radio. Joe talks about the history of Erlang, its features, how the VM is implemented, and how you can use it to scale on multi-cores or across multiple machines. It’s a good introduction to what Erlang is from the man himself.


Erlang Update

I’ve been tearing through Joe Armstrong’s book “Programming Erlang”.  I started reading it about 14 days ago, and I’m already in Chapter 17.  It’s a well written book and a great introduction to the language and some key libraries.

I think the reason I’m working through it at such a rapid clip is that Erlang has captured my imagination.  I’m fascinated by how easy it is to program multi-process applications and distribute those processes across machines.  I’ve written multi-threaded code in Java, Python, and Common Lisp.  Erlang is BY FAR the easiest language for writing MP code.

I can’t wait to finish the book and write my own application. I’m forcing myself to finish the book first because I want to make sure I know all the right tricks before I get started. I think that’s the right idea because I’m now learning about Mnesia and soon I will learn about advanced OTP techniques.

I can’t convey how excited I am by this language/platform. I saw my friend Jeff last night and I bored him to death as I gushed about Erlang. He mentioned that he had recently posted about CouchDB and that it would be cool to develop something social on top of that. Indeed…


Erlang: Lovin’ It

OK, I couldn’t resist. I pulled the Erlang book off the shelf this week and dove in. I needed a distraction from work, then the whole idea of writing concurrent programs caught my fancy, and I saw the syntax that made me go hmmm…  now I’m hooked.

First impression of “Programming Erlang” – it’s not for beginning programmers. Which I really like, but I can imagine that if you don’t have programming experience, you’d struggle. Also, it helps alot to know another functional language (like Lisp) when Joe starts talking about list comprehensions and anonymous functions. I would rate the book at the "advanced” level.

All that said, I’m loving the book and loving learning the language. It’s entertaining and gives me the excuse to use Emacs, which I don’t use often enough these days. :-) I’m using Luke Gorrie’s excellent Distel mode for Emacs.

I’m going to try to refrain from giving you a blow-by-blow of my Erlang experience until I get to concurrent programming. Then, all bets are off.  :-)


Erlang in My Future

jaerlang I’ve been thinking about trying out Erlang for a couple of years. Last night, my wife and I were in the bookstore… alone… with time to look at books. I picked up “Programming Erlang”. Reading through the cover and some of the front matter drew me in. So, after some deliberation, I bought it.

I read through Chapter 2 last night. Boy, Erlang is unique. However, I think I’m going to enjoy it.

I’ve put it on the bookshelf for now. I have some other reading and techie stuff to knock out before I really dive in. But, I’m getting excited.


EnterpriseBlend – My Enterprise 2.0 Blog

One of the things I’ve steadily grown more passionate about over the last 6 months or so is Enterprise 2.0.  I characterize it as the move of Web 2.0 technologies and ideas into business contexts.  The reason I’m so passionate about it is because I’m witnessing the technologies that I’ve been using in my private life move into the enterprise and make meaningful contributions.  In addition, these technologies and ideas usually challenge the status quo of business and it’s fascinating to watch businesses respond to this.

If you agree, or your just curious, please join me on EnterpriseBlend.  Hope to see you there!



Web 2.0 companies failing to produce cash

Financial Times has an article called Web 2.0 fails to produce cash. The article talks about how Web 2.0 companies have not produced alot of revenue despite changing the way that people interact on the Internet and introducing new capabilities.

I think it would be interesting if Web 2.0 had more commercial as Enterprise 2.0 than in the Internet at large. I think to the Internet community, it becomes just the normal course of interaction. However, within enterprises it seems to have the potential to dramatically change how we design and implement information systems.

Plus, I'd just like to be able to use these technologies on the job. :-)


Vista Backup Leaves Me High and Dry

OK, guess what - when Vista Backup says it does not backup any program files, it turns out that means ASP and ASPX files as well.  I wish I had seen the comments on this post first.  But I didn't.  So, now it looks like I've lost some ASPX files for a charity project I was working on in my latest round of laptop shenanigans.  GRRRRRRR!!!!

Unlike the guy in the comments, it seems to have saved my CS files.  In fact, it saved the code behind files for the ASPX files, but not the ASPX files themselves.  GRRRRRR!!!!

I'm pretty hacked right now.


Emacs Quit under Cygwin

I've never used Emacs under Cygwin. I've always installed the Windows version. However, today I'm in a hurry, EmacsW32 site is down, and I decided to use Cygwin. Unfortunately, some of the keys like C-x C-c (quit) are wonky. But Newbie, Emacs won't quit - gnu.emacs.help | Google Groups describes a simple modification to the Cygwin bash shell batch script that makes everything good to go.


Application vs. OS Clustering

I recently had the opportunity to discuss computer clustering with a colleague of mine. I decided to post my take on things in case it might be helpful to others.

Computer clustering is a deep subject. There are many facets to how to cluster computers and/or applications together. Wikipedia has a nice article on clustering. I’m no expert, but I’m going to describe my simplistic view of hardware/OS level clustering vs. application clustering and how they fit together.

The ultimate computer cluster would be a group of computers working together to seamlessly provide services and appear as one computer. This cluster would make its services available to applications transparently. This means that an application written to run on a single computer, would see no difference in running on the cluster. In addition, it would get all the benefits of being on the cluster without impacting its operation at all – scalability, high availability, memory management, etc. To my knowledge, this type of cluster does not exist.

Hardware and OS level clustering allows multiple computers to work together for a purpose, but the computers generally don’t appear to applications as 1 big computer. When the OS makes this possible, special programming is usually required to make an application take advantage of the clustered OS services. Most of the time, OS clusters are geared toward providing high-availability (HA) for fault tolerance rather than seamless scalability of applications running on the cluster (HPC – high performance computing). Windows 2003 server clustering and SQL Server clusters are examples of clusters that are geared toward HA rather than HPC.

Grid computing has ushered in a new set of technologies and patterns for trying to achieve the ultimate computing cluster. Grid computing does a good job of providing HA and HPC for applications running on the grid. The standards specify a pretty flexible environment with scheduling and accounting facilities that make management of applications much easier. Grid computing tries to make computing resources a commodity that can just be doled out as needed to run applications. However, for applications to take full advantage of grid computing, they still must incorporate special programming. This may change in the future as advances in grid frameworks and operating systems emerge. Examples of grid computing is the Amazon EC2 for computing and Amazon S3 storage grid.

Application level clustering is when an application is designed so that its components can be distributed across multiple machines and the application can identify and manage those components to cluster itself. This usually involves distributing components with specific capabilities to nodes in a server farm and having some controller components that identify the worker components, monitor their availability, and delegate incoming requests. (These are sometimes called dispatchers.) Applications that cluster themselves don’t need an underlying hardware/OS clustering solution since they take care of their own clustering services. Further, there’s no need to have computers in the cluster be homogeneous since the cluster is not dependent upon synchronization at the machine or OS level. Application clusters can provide HA as well as HPC. Examples of application clusters are Oracle RAC and FAST ESP.

Again, this is Tom’s view of clustering and probably contains errors and omissions. My simple mind summarizes and simplifies things it takes in. So, you should do your own research if you seek the ultimate in accuracy and reliability of this information! :-)


Tweets Available

I resisted using Twitter for years. However, I've lately decided that I need to understand it. So, I created a Twitter account and started playing. Like many others, I'm becoming addicted.

I've made my tweets (Twitter speak for messages) available on this blog. If you visit the web site, you'll see them in the far right column.

I stopped short of using LoutTwitter to create a daily tweet summary post in this blog. It looks very cool, but I'm not sure all of my HUGE (haha) cares about my micro-blogging.


PortableApps Saves My Bacon

I have been a fan of PortableApps for a couple of years. It's a really neat concept - package useful applictions in a small, self-contained format so that they can easily be run from a USB stick or drive. This way, you can take your apps with you as you move from computer to computer. Over the last week however, I've been using PortableApps in a different manner.

Lately I've been having numerous computer problems. I've been resisting reloading the operating system because I just did that a month ago. But the operating system didn't care - it just continued to degrade. First it was its distaste for USB hard drives, then came my mouse, finally (its pièce de résistance) it would just stop responding soon after I logged in. This rendered me completely unproductive at the client site.

Fortunately I was able to boot to Windows PE (pre-installation environment with very little features and services - like safe mode only safer and more padded - like an asylum). I jammed my PortableApps USB stick in a USB slot. The menu did not work, however you can navigate to the exe's in a command line and launch them. This allowed me to use Firefox, 7-Zip, and OpenOffice to maintain some productivity while I worked to fix my system. Brilliant!

In short, as part of your personal disaster recovery strategy I recommend that you create a PortableApps device. It can help you keep working on some level until you can get your system restored to working order.


Outlook 2007 Slow To Open Messages With Attachments

I recently had to reload my Vista machine and this weekend I installed SP1 for Office 2007. This week I've noticed that Outlook 2007 was very slow to open messages that had attachments. After much digging on the Internet, I finally saw a comment from someone that mentioned turning off Attachment Preview to speed up Outlook. So, I went to

Tools -> Trust Center -> Attachment Handling

and turned off attachment preview. This solved my problem!

Thank you Lazy Web!

Updated 04/24/2008 2:26PM: WRONG!!! Turns out the problem was Symantec Antivirus. Don't know how to fix it, so for now I've disabled the email scanning. :-( Not happy.


Django on Windows

I've been considering options for playing around with mashups. There's alot of options. However, since I'm back in the Python mindset (see earlier post), I'm going with Django. Further, to make this quick to hack on, I'm going for Django on Windows.

This article talks about "Installing Django on Windows in less than 5 minutes". It's great, and I love it. Thank you!!!!

Programming Collective Intelligence

I've started reading Programming Collective Intelligence, and I'm really enjoying it. It's a really well written book that gives you a good introduction to the emerging field of Collective Intelligence. Segaran does a great job of taking the theory and mathematics and applying them in practical ways to real world problems.

The examples in the book are written in Python. I'd love to have the time to play with rebuilding them in Smalltalk or Common Lisp. However, I barely have time to even read the book. So, it's back to Python for me for a while. (Just between you and me, it's making me giddy to get back to Python, Emacs, and the down and dirty hacking that I used to love.)

So, if you're interested in Web 2.0, the modern application of Artificial Intelligence techniques, or doing really cool things with Python then you should grab a copy of this book.