JBoss DNA, Revisited

Wednesday, October 14th, 2009

I decided to take another look at JBoss DNA the other day, and it turned out to be quite a surprise.

It seems that the focus has been refined, and the vision clarified.

The first time I looked at it, DNA was not a repository. Rather it was something that could federate multiple content stores (e.g. – repository/database/file system). I just wasn’t sure what that something was. I believe that is what led me to question how practical it was.

Now, DNA is a repository. However, with this particular repository you can access multiple content stores via the JCR API.

Read More

posted by Shane Johnson

How I learned to say ‘No’ to SQL

Wednesday, September 30th, 2009

This is the story of how I learned to say ‘No’ to SQL and to cope with my wife’s addiction to Coach bags.

The answer is support groups. I kid. No, I don’t.

There are a number of alternatives to relational databases. However, for the purposes of this post, I am focusing on persistent, distributed key/value stores.

It all seems to have started with Amazon’s Dynamo.

Clarification: I’m not saying that Dynamo was the first distributed key/store. I imagine most developers are familiar with memcached and products such as Oracle Coherence when it comes to caching and data grids. There is also Berkely DB, a persistent key/value store. However, Dynamo is both distributed and persistent. That, and it seems to have lead (indirectly and directly) to the development of numerous open source implementations as I’ll explain below. It appears that Dynamo and Google BigTable had a one night stand and their illegitimate children formed the NoSQL movement.

In order to understand how today’s key value stores are borrowing heavily from Dynamo, it is worth briefly going over some of its characteristics.

  • Fault Tolerance – The data is replicated and/or partitioned.
  • Distributed Hash Table (DHT)
  • Consistent Hashing – The mechanism behind distributed hash tables.
  • Eventually Consistent
  • Distributed Consistency

Read More

posted by Shane Johnson

Upcoming Day/Alfresco Events with CITYTECH

Thursday, April 16th, 2009

It is turning out to be quite a busy month. I am going to be speaking at 3 events over the next couple weeks.


Day CQ5 Product Tour

CITYTECH will be supporting the midwest leg.

4/21 – Minneapolis
4/22 – Chicago
4/23 – Columbus

I’ll be speaking in Columbus while Jeff & Satish will be speaking in Chicago.

It should come as no surprise to anyone that I’m a huge fan of CQ5. At CITYTECH, we call it the Cadillac of web content management systems. In addition to covering CQ5, I’m going to be dicussing aspects of web content management in general. If web content management is important to your business, I think you’ll find a great deal of value in attending.

info/registration

Alfresco Chicago Meetup

I’ll be presenting on CMIS during the “barcamp”.

4/29 – Chicago

Nancy has done a great a job with the Alfresco community events. I always enjoy them. They are casual, informative, social, and a great time in general. I’d strongly encourage anyone to attend regardless of their level of experience with Alfresco.

info/registration

CMS Expo Learning & Business Conference

CITYTECH is going to be presenting on Alfresco (DM/WCM) and CMIS.

4/30 & 5/1 – Evanston (Chicago)

Thursday morning Jeff and Tom will be discussing document management/collaboration. In the afternoon I’ll be dicussing CMIS. Finally, on Friday, John will be discussing web content management.

In addition to Alfresco, CMS Expo will be featuring professional training on Joomla! and Drupal.

info/registration




You can always find my dropping some tweets on Alfresco, Day CQ, CMIS, architecture, and Battlestar Galactica on Twitter.
http://twitter.com/shane_dev

So until next time, good fight, good night.



posted by Shane Johnson

What makes a great developer?

Thursday, April 16th, 2009

Simplicity

This is what it all comes down to. A lot of developers tend to write complex code. I think it is a result of the ad-hoc nature of programming. The truth is that it is much more difficult to write simple code. I think there are two facets to writing simple code. One is experience, and the other is patience. Experienced developers are better prepared to write simple code from the start. However, simplicity is ultimately achieved by continuously refactoring the code.

Elegance

The code may be simple, but is it elegant? Elegant code is a sure sign of a great developer. It is no longer about efficiency or effectiveness. It is about pride.

Balance

In order to achieve simplicity and elegance, a developer needs to find the right balance between framework/libraries and code. A lot of developers assume that when a framework/library can be used, it should be. Others insist on writing code without the use of any frameworks/libraries. It is all about finding the right balance between the two.

Cleanliness

If the code is simple, elegant, and balanced then there is no reason why it shouldn’t be clean. It should be formatted and follow the proper naming conventions.

Learning Curve

The breadth and depth of knowledge is not nearly as important as a developers ability and desire to learn. As a matter of fact, I’d say that a significant amount of breadth or depth may be detrimental. It may indicate a lack or awareness or flexibility. It is not about knowing X and Y for years. It is about being able to learn Z in days.

Domination

A great developer dominates the entire code base. While some developers may be comfortable in their area of responsibility, great developers have a need to know and understand the entire code base.

Vision

It is important to consider aspects such as maintainability when developing code. The focus should not just be on whether it is functional or not. A great developer considers the long term consequences in addition to the short term goals.

Well, this is my option anyways. I’d welcome any thoughts and/or suggestions.

So until next time, good fight, good night.

posted by Shane Johnson

I purchased a cloud. Did you? Wait. What is a cloud?

Tuesday, April 14th, 2009

Reality Television Shows

Buzzwords are a lot like reality television shows. Every time one is canceled, two more take its place. You know what else they have in common? They lack originality. They are just putting on a new face.

Zombie Viruses

Actually, buzzwords are a lot like zombie viruses too. Somewhere in a secret lab, a vendor and a research analyst are splicing buzzwords looking to create a more perfect buzzword. Then they go to a conference and discretely drop the buzzword. Next thing you know, you’re holed up in bar with a Winchester picking off evangelists one at a time.

For me, it is being holed up in an IRC channel along with my friends/colleagues and other prominent members of the Java community. I thought I was safe. Then, I see that some of them have actually been infected. The Winchester will suffice for now, but I may need to go sawed off, double barrel style soon.

I guess that means a buzzword is a lot like a reality television show featuring zombies.

Read More

posted by Shane Johnson

AIR / Flex – Drap & Drop (to Desktop)

Wednesday, February 25th, 2009

In order to drag one or more files from an AIR application to the desktop you have to handle just one event: DragEvent.

public function downloadFiles(event:DragEvent):void
{
   this.docs = List(event.target).selectedItems;

   var clip:Clipboard = new Clipboard();

   clip.setDataHandler(ClipboardFormats.FILE_LIST_FORMAT,
      getDownloadFiles);

   var dragOptions:NativeDragOptions = new NativeDragOptions();

   dragOptions.allowCopy = true;

   NativeDragManager.doDrag(event.currentTarget as InteractiveObject,
      clip, null, null, dragOptions);
}

Read More

posted by Shane Johnson

Web Applications, Services, & Loose Coupling

Tuesday, February 24th, 2009

I think it’s pretty safe to say that most web applications fall into one of two categories.

  • Content Driven
  • Data Driven

I also think it is pretty safe to say that they are easy to build. However, things can get a little dicey when it comes time to integrate services. The fact is that we are implementing reusable functionality as services and that means that our web applications must now include service clients.

That means we are now responsible for maintaining the client and the UI.

Here is a thought. How about we allow the services to generate their own forms and allow the users to interact with them directly? I do not want to continue playing the middle man.

Read More

posted by Shane Johnson

Alfresco Tech Talk – CMIS

Monday, February 23rd, 2009

What went right?

  • I was able to demo the CMIS explorer live.
  • I was able to demo Sten’s CMIS visualizer live.
  • I was able to walk through my prepared OO presentation.

What went wrong?

Read More

posted by Shane Johnson

SOA – Composition vs Integration

Monday, February 16th, 2009

I think I’ve finally figured out what bothers me about SOA.

It is responsible for the notion of composition via remoting.

The problem I have with web services is that they are just another method of remoting, and remoting requires messaging. The fact that you are using web services does NOT mean that you have built a distributed system. As a matter of fact, you haven’t. Especially since web services rely on synchronous point-to-point communication. It means that you have mistakenly used remoting as a means of composition.

I don’t have a problem with messaging. I’m down with message queues.
I don’t have a problem with remoting. It is useful for integration.

I have a problem with using remoting as a means of composition.

Can we all agree that remoting (web services) should only be used as a method of integration with non-Java and/or remote clients?

I’ve actually seen organizations where every new feature is implemented as a web service written in Java to be consumed by one or more Java applications. There were no non-Java clients and there were no remote clients. How can any architect justify this?

I’m down with composition & reuse, loose coupling, and other principals often associated with SOA. However, they are best achieved by deploying services as OSGi bundles alongside their clients.

If you need to integrate with non-Java and/or remote clients then simply expose those bundles as web services, but allow the Java applications to run their bundles locally.

So until next time, good fight, good night.

posted by Shane Johnson

CMIS Explorer – Download

Thursday, February 12th, 2009

I’ve been working on the CMIS explorer on and off for the past few weeks. I think it is about time I made it available for download. I’d be interesting in hearing feedback on it.

Update: The project is now available on Google Code here.

Or, you can go straight for the download. The current download is for the CMIS 1.0 specification.

Update: I have fixed the code so that there are no more hard coded URLs. It has been tested in both Windows and Ubuntu against both local and remote repositories. Have fun.

Update: I just realized that there is still a hard coded URL in the source. That means it will only work against Alfresco running locally on port 8080. I’ll get that fixed up right away. I’ll be curious to see if it will work against another repository afterwards.

Read More

posted by Shane Johnson

CityTech Home