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.

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

Alfresco Code Camp : Chicago - Complete

Tuesday, February 3rd, 2009

Today, John and I spoke at the Alfresco Code Camp in Chicago.

I discussed the Surf framework, Alfresco Share, and CMIS.

John did a outstanding job discussing Site Studio and provided some great exercises.

Update: The updated Share exercises (for the attendees) can be downloaded here.

A few notes about the exercises:

  • It is best to use a fresh copy of the VM provided. If you don’t have the original zip you can use your existing VM, but you’ll be overwriting some of the files instead of creating new ones.
  • I specified a path to the Share home at the beginning. The paths specified for each of the files to be created are relative to this Share home path unless otherwise specified.
  • It is important to do the steps in the order specified. You will need to copy over the artifacts from the zip as well as delete and recreate the sample content.
  • If you have any issues, feel free to post a comment here. If you don’t, also feel free to post a comment here.

Read More

posted by Shane Johnson

Flex/AIR, CMIS, & Alfresco

Wednesday, January 28th, 2009

Intro

Last week I started building a CMIS browser with Adobe AIR.

I have built POCs with Flex before, but that was about it. Then, I downloaded thwirl and I remembered why I like AIR so much. It was easy to install, the UI is nice, and I imagine it was not too difficult to write. This is also a great example of why I like RESTful services too. I believe in the physical separation of the presentation tier, and working with RESTful services is a breeze. So is writing them for that matter. Twitter is a great example of building a social services platform and allowing for the development of third party applications to utilize it. It is a win, win situation. Perhaps ‘platform’ is the key word there. I’d like to shift from building web applications to building web platforms.

So, I decided to build a CMIS browser with AIR.

Update: The CMIS Explorer is now available for download. See this post.

Read More

posted by Shane Johnson

CityTech Home