google
yahoo
bing

Just finished reading a fabulous book… for the second time. It’s a very popular book called Who Moved My Cheese.

It’s really a great book. It’s very easy read (under 100 pages) but it gets you thinking a lot about changes in life and how to deal with them positively. It actually suggests that we create changes in our lives on regular basis and not be afraid of them! How scary is that for most of us!

I know for myself that I used to be (and my business partner/brother might say I still am) a very structured person. I used to want to plan out everything in my life and pretend that I actually had it under control :) When changes would occur, I would be floored and take awhile to get back up on my feet. Of course, there are things we CAN’T prepare for and are serious changes that hurt us all… however, I’m starting to come around and actually enjoy change… bit by bit… I’m not so worried about planning everything out and have begun to go with the flow a lot more! So far so good… it seems to be working in my personal life and even in my business life.

Going with the flow however is not an excuse to blame everything on everyone else and thinking we don’t have control. I think there needs to be a nice balance there. We are partially responsible for some changes that occur and it’s hard to believe we don’t see them coming sometimes. Anyhow, if you haven’t read the book, I strongly suggest picking it up… It’s presented in a neat way and really grabs your attention!

So, while your looking/waiting for changes in your life, check it out! Here’s a link to find out more about the book… enjoy!
Who Moved My Cheese

– Adrian

Gonna steal a quote from a Business/Life Coach that I read up on a lot… Robin Sharma. He is doing many great things, writing books, blogging, running seminars, etc. Check out some of his stuff, it’ll change your life.

One thing Robin has taught me is to “Just Be Nice” or JBN :) This pertains to our personal lives as well as our business lives. For the personal side it’s quite obvious why we should treat each other with respect and be nice to each other (well, hopefully it’s obvious!). In business I don’t know if some people get it though. Here’s a few examples from my day already and it’s only 11:30am.

I woke up today to some major flooding in my closet. It wasn’t even raining out so I was curious where the down pour was coming from. I called my landlord and tried to be nice ;) and chatted with him about it. I think it’s important to be nice even when you are extremely frustrated or angry (I would never suggest getting pushed around or any type of abuse, we’ll leave it at that, but you get my point). So, I think the landlord appreciated the tone of my voice and he was very nice as well. Told me to take all my clothes to the dry cleaner, get them cleaned and he’ll cover the bill. So, hopefully nothing is ruined but we’ll deal with it if we have to… by being nice to each other.

So, I drove my clothes to the landromat that I visit regularly (hint: lots of business from me since I don’t have a washer and dryer in my apartment). I walk in… with a couple extra bags because of the flood and I get a look from the guy there like “what are you doing man, you can’t bring in that much stuff for cleaning!”… basically a real dirty look… so I try to explain what happened.. in a nice way, cause I’m trying to be nice :) . He doesn’t say much… so, I’m about to leave and I explain

“If possible, could you please do the clothes in the bags first, they are pretty wet from the damage”…

And the response almost blew me away. Hopefully the dude was having a bad day or something:

“Well, I don’t know about that, we can only do them as we can… they’ll all be done at the same time… blah blah”

Basically told me to shutup :)

So, I walked out thinking… “wow, that guy doesn’t know much about customer service” and then my next thought was “maybe I’ll find a different place to take my clothes next time”.

Then I arrived back home to the Rogers guy fixing the cable and internet connection (it’s been quite a morning) and the guy is one of the nicest guys in the world probably! lol He’s adding extra things to the lines… giving me my own one for the Internet, etc, etc… and being really nice about it too! So, he fixes everything up and says “thank you, have a great day Adrian!” to me at the end… like I had done something for “Jim” from Rogers. So, Jim’s got it figured out… Just Be Nice. Even though I had some problems with my Internet, it was dealt with quickly and they were very nice about the whole situation. I won’t be looking for another Internet provider anytime soon (hint: Landromat dude).

Anyway, enough about that, I think I got my point across. Everyone just be nice, it’ll get you a lot further in business and in your personal life and it might just make the world a better place to live.

JBN,
Adrian

Hey Everyone.. if there is anyone that reads this blog still :)

I haven’t been blogging much over the past few months. Basically I wanted to review different types of software or try to help developers with different types of Open Source projects, etc. However, it became tougher to think of things to write about so I’m switching it up a bit here. I still will do that if I find something worth while to write about. However, I’m just gonna blog about whatever is on my mind. Could be a good place for me to vent (thanks everyone for listening)… could be a spot for me to talk about some great things also (Personal, company, family, friends, blah blah). So, I already have my first blog ready on Customer Service. I had a couple different experiences today from Rogers and the Landromat I visit regularly… or used to anyway :) . So, here goes!

Cheers,
Adrian

The following is a paid review:

Hey everyone,

It’s been awhile for me to write a blog but I’m going to give it another go here. My brother has stumbled across a neat tool that might help me find some topics to blog about (one of the reasons I haven’t blogged much is because it’s hard to find technical stuff to blog about everyday). So, he came across a new system called ReviewMe. Seems quite interesting. There is an advertising component, where people can pay others to blog and review their products and there is also a blogging spot where people can blog and review the products.

I’m hoping that some technical products will need a quick review from a Technical person… that is where I might be able to help out. That’s basically what I was trying to do before so if someone can send me products to review that would be great!

First thing I noticed about ReviewMe is that it’s very easy to get setup and started, took me about 3 or 4 minutes probably and I was approved and in the system. I haven’t looked around much more at it, but I will definitely keep you posted on how it turns out. I’m still a bit confused but hopefully I can figure it out :)

Should be interesting to see how it evolves, if anyone want’s to check out the system, here is the link again: ReviewMe

Regards,
Adrian

Hey Everyone,

Time for another post. I know it's been awhile but I've been pretty heavy into the Google API stuff. Honestly was kinda tricky to work with a first but I finally might be onto it... yeah, I'm just a bit of a slow learner I guess :)

In my last post I briefly mentioned using the Java Client Library. I've now got some code examples that might help some people who might have bumped into some of the same issues I was having (mostly grabbing an individual event from the Google Calendar). We are working on building a free online application called YourTeam. It's going to combine a community for Hockey Coaches, Players and Parents and also a Private Team area for teams to stay informed and have fun! If you'd like to read all about it and how excited we are about the new beta release about to come out, click here to read my brothers post!

Here is the code that I was pulling my hair out for a few days over. These examples use the client library and are Java Server Pages. Enjoy! I hope they help. You will have to replace a few variables to get it working with your own code (ie: ACCOUNTNAME is your Google account name)

Adding an Event to the Google Calendar:

JAVA:
  1. try{
  2.   //get connection
  3.   URL feedUrl = new URL("http://www.google.com/calendar/feeds/ACCOUNTNAME/private/full");
  4.   GoogleService myService = new GoogleService("cl", str_service);
  5.   myService.setUserCredentials(ACCOUNTNAME, ACCOUNTPASSWORD);
  6.                        
  7.   //create event here
  8.   URL postUrl = new URL("http://www.google.com/calendar/feeds/"+str_email+"/private/full");
  9.   EventEntry myEntry = new EventEntry();
  10.   myEntry.setTitle(new PlainTextConstruct(request.getParameter("event_name")));
  11.   myEntry.setContent(new PlainTextConstruct(request.getParameter("event_desc")));
  12.  
  13.   //these are your date values for the calendar   
  14.   DateTime startTime = DateTime.parseDateTime("2006-09-14T15:00:00-08:00");
  15.   DateTime endTime = DateTime.parseDateTime("2006-09-14T17:00:00-08:00");
  16.                        
  17.   When eventTimes = new When();
  18.   eventTimes.setStartTime(startTime);
  19.   eventTimes.setEndTime(endTime);
  20.   myEntry.addTime(eventTimes);
  21.            
  22.   Where eventWhere = new Where();
  23.   eventWhere.setValueString(request.getParameter("event_location"));
  24.   myEntry.addLocation(eventWhere);
  25.            
  26.   // Send the request and receive the response:
  27.   EventEntry insertedEntry = (EventEntry)myService.insert(postUrl, myEntry);
  28.   str_msg="Event Added Successfully.";
  29. }
  30. catch(Exception ex){
  31.     System.out.println("google ad event ex:"+ex);
  32.     str_msg="Error adding Google Calendar Event:"+ex;
  33. }

Getting a Date Range of Events from the Google Calendar:

Note: This code might not compile, I tried to take out a lot of code to shorten it but it should be a good starting point.

JAVA:
  1. try{
  2.     //get connection
  3.     URL feedUrl = new URL("http://www.google.com/calendar/feeds/ACCOUNTNAME/private/full");
  4.     CalendarQuery myQuery = new CalendarQuery(feedUrl);
  5.                                
  6.     String str_start="2006-09-14T00:00:00";
  7.     String str_end="2006-09-21T23:59:59";
  8.                                
  9.     myQuery.setMinimumStartTime(DateTime.parseDateTime(str_start));
  10.     myQuery.setMaximumStartTime(DateTime.parseDateTime(str_end));
  11.     myQuery.addCustomParameter(new Query.CustomParameter("orderby", "starttime"));
  12.     myQuery.addCustomParameter(new Query.CustomParameter("sortorder", "ascending"));
  13.     myQuery.addCustomParameter(new Query.CustomParameter("singleevents", "true"));
  14.                                
  15.     CalendarService myService = new CalendarService(str_service);
  16.     myService.setUserCredentials(ACCOUNTNAME, ACCOUNTPASS);
  17.                                
  18.     // Send the request and receive the response:
  19.     Feed resultFeed = (Feed)myService.query(myQuery, Feed.class);
  20.                                
  21.     new EventFeed().declareExtensions(myService.getExtensionProfile());
  22.             EventFeed calFeed = (EventFeed) myService.query(myQuery,EventFeed.class);
  23.                            
  24.              EventEntry calEntry = null;
  25.            
  26.             if (calFeed.getEntries().size()> 0) {
  27.                          java.util.List lTimes = null;
  28.                          java.util.List lLocs = null;
  29.                                    
  30.                 for (int n=0; n<calFeed.getEntries().size();n++){
  31.                       calEntry = (EventEntry) calFeed.getEntries().get(n);
  32.                       
  33.                                //grabs description for event
  34.                                TextContent tc = (TextContent)calEntry.getContent();
  35.               PlainTextConstruct ptc = (PlainTextConstruct)tc.getContent();
  36.                                        
  37.              calEntry.getTitle().getPlainText();
  38.                               lTimes=calEntry.getTimes();
  39.                      When when =null;
  40.                
  41.                                for (java.util.Iterator iterator1 = lTimes.iterator();iterator1.hasNext();) {
  42.                       when = (When)iterator1.next();
  43.             strTempStart=when.getStartTime().toUiString();
  44.             strTempStart=strTempStart.substring(strTempStart.indexOf(" "),strTempStart.length());
  45.                                        
  46.                     strTempEnd=when.getEndTime().toUiString();
  47.                     strTempEnd=strTempEnd.substring(strTempEnd.indexOf(" "),strTempEnd.length());
  48.             strTempEnd=convertTime(strTempEnd);
  49.               }
  50.                            
  51.                       lLocs=calEntry.getLocations();
  52.                       for (java.util.Iterator iterator1 = lLocs.iterator();iterator1.hasNext();) {
  53.                       Where where = (Where)iterator1.next();
  54.             where.getValueString();
  55.               }
  56.                            }
  57.     }
  58.     catch(Exception ex){
  59.         System.out.println("google view events ex:"+ex);
  60.         str_msg="Error viewing Team Google Calendar:"+ex;
  61.     }

Editing a Google Calendar Event:

JAVA:
  1. //get connection
  2. CalendarService calendarService = new CalendarService(str_service);
  3. calendarService.setUserCredentials(ACCOUNTNAME, ACCOUNTPASSWORD);
  4.  
  5. //call calEntry.getSelfLink().getHref() to get the url
  6. //example: http://www.google.com/calendar/feeds/ACCOUNTNAME/private/full/d1gn05stk3175uthp30s3et3is 
  7. URL entryUrl = new URL(str_event_url);
  8.            
  9. // Mark the feed as an Event feed:
  10. final ExtensionProfile profile = calendarService.getExtensionProfile();
  11. new EventFeed().declareExtensions(profile);
  12. final EventFeed feed = (EventFeed)calendarService.getFeed(entryUrl, EventFeed.class);
  13.             
  14. EventEntry retrievedEntry = (EventEntry)calendarService.getEntry(entryUrl, EventEntry.class);
  15. retrievedEntry.setTitle(new PlainTextConstruct(request.getParameter("event_name")));
  16. retrievedEntry.setContent(new PlainTextConstruct(request.getParameter("event_desc")));
  17.  
  18. //same date format as adding       
  19. DateTime startTime = DateTime.parseDateTime(str_start_time);
  20. DateTime endTime = DateTime.parseDateTime(str_end_time);
  21.            
  22. java.util.List lTimes=retrievedEntry.getTimes();
  23. When when =null;
  24. for (java.util.Iterator iterator1 = lTimes.iterator();iterator1.hasNext();) {
  25.       when = (When)iterator1.next();
  26.       when.setStartTime(startTime);
  27.       when.setEndTime(endTime);
  28. }
  29.            
  30. java.util.List lLocs=retrievedEntry.getLocations();
  31. for (java.util.Iterator iterator1 = lLocs.iterator();iterator1.hasNext();) {
  32.               Where where = (Where)iterator1.next();
  33.      where.setValueString(request.getParameter("event_location"));
  34. }
  35.            
  36. // Update the info
  37. // call retrievedEntry.getEditLink().getHref() to get the edit url like this: http://www.google.com/calendar/feeds/info%40webscope.ca/private/full/d1gn05stk3175uthp30s3et3is/63294552679
  38. URL editUrl = new URL(str_edit_event_url);
  39. EventEntry updatedEntry = (EventEntry)calendarService.update(editUrl, retrievedEntry);
  40. str_msg="Event Updated Successfully.";

So, hopefully that code can help someone out there. It might be a bit messy and long to look at but if you grab it and use it along with the Tutorials from Google I hope it can start working. Up next for me will be deleting Google Calendar Events from our webapp (YourTeam) and then hopefully some other enhancements!

So, if anyone has any questions about the information above let me know and I'll try my best :) and if anyone knows any hockey coaches, players or fans out there that are looking for a great, fun team software package send them to YourTeam!

YourTeam

Cheers,
Adrian

Hey Everyone! Yeah, it's been awhile since my last blog... been traveling a bit... waiting for a laptop to get fixed... blah blah.

So, Google is in the news a lot these days. Google and Web 2.0 seem to almost go hand in hand. Almost as much as Microsoft trying to take down Google :O (sorry MS fans... just a cheap shot)

Our company Evolving Solutions is working on a new web application that is going to try and integrate a few Web 2.0 applications within it... let's say a Calendar (Google Calendar possibly?)... maybe some uploading of videos (Google Video possibly?) and maybe a couple other features. So, I figured it was time to dive into the Google API's that I've heard so much about.

First thing I have to say is their site is very difficult to navigate around. I think partly it's just because they have so much on the go, but I found it difficult to find the information for "Integrating the Google Calendar". But after searching around and reading some (which I'm terrible at when looking for something new... as most developers are). I stumbled across 2 important links:

One nice thing is that Google is trying to develop all their services to be accessed through similar API code... the technical term is: The Google data APIs ("GData" for short) and you can read more about it at the following link: http://code.google.com/apis/gdata/overview.html

Now, it might seem a bit overwhelming at first... but if you are a Java developer (or C# developer, there is a client library also) I suggest taking an afternoon and looking into this stuff. For example, if you or a client of yours has a Google Account and use the Calendar service to organize their life, you can easily integrate it within your web applications. So, basically you can set it up so they can add/edit/remove events directly to and from their Google Calendar while logged into your application. You can also grab all the events and have them displayed. Very powerful stuff when you think about it. Takes them 5 seconds to sign up and you gain the advantage of a powerful Web 2.0 application supported by one of todays best technology companies (not a bad deal really for free)... well, I guess you have to build a few pages to interact with it, but that's about it. Welcome to WEB 2.0 my friend!

I won't put many code examples here, they step you through it pretty well in the Java Client Library Tutorials (working with the Calendar actually).

After about a day or 2 of working with the Google API's, I feel very comfortable and excited to look into more potential integration with Google services. I don't think they are going away any time soon... so it wouldn't hurt to jump on board! It's only gonna get better!

Cheers,
Adrian

WEB 2.0 IS HOT RIGHT NOW! A lot of people are talking big about the new way of technology and building applications. It's hard to describe WEB 2.0 because it can mean so many different things to so many people. So, I'm going to steal a quote from the Wikipedia documentation on it:

The term Web 2.0 refers to a second generation of services available on the World Wide Web that lets people collaborate and share information online. In contrast to the first generation, Web 2.0 gives users an experience closer to desktop applications than the traditional static Web pages. Web 2.0 applications often use a combination of techniques devised in the late 1990s, including public web service APIs (dating from 1998), Ajax (1998), and web syndication (1997). They often allow for mass participation (web-based social software). The concept may include blogs and wikis.

So, me being the prototypical techie, I am always interested in new technologies... so I've gotten myself involved in Web 2.0... which involves a lot of AJAX. AJAX is new... and it can be a bit overwhelming at first (as I posted previously).

I bought a book to start off with (AJAX Hacks)... which was a good starting point. Lots of good examples to get started with AJAX and WEB 2.0. I read an interesting chapter that talked about an AJAX Framework called script.aculo.us. First thing I thought was weird name, still not sure how to say it to be honest :) . Then, I read how it's used to create some really, really neat (and useful) AJAX effects for applications. Even they state the obvious on their homepage:

script.aculo.us provides you with easy-to-use, compatible and, ultimately, totally cool JavaScript libraries to
make your web sites and web applications fly, Web 2.0 style.

Visit the site to read up more on it. There site can be a bit confusing, but basically it's a refreshing JavaScript library that is very easy to setup and use. Here are some key links to the site to assist if you want to looking into it more:

I think the best way to figure out this library is to dive in, setup up the files (very easy 5 step process) and play around with all the different method calls. If you need assistance, here is what I did to become familiar with the library. I created a JSP Page with the following code:

HTML:
  1. <title>Evolving Solutions Ajax Examples</title>
  2.  
  3. <script src="/evolve/javascripts/prototype.js" type="text/javascript"></script>
  4. <script src="/evolve/javascripts/scriptaculous.js" type="text/javascript"></script>
  5. <script src="/evolve/javascripts/custom/ade_functions.js" type="text/javascript"></script>
  6.  
  7. <div id="ade_test">
  8. <table width="500" border="1" cellpadding="0" cellspacing="0">
  9.     <tr>
  10.         <td valign="top">
  11.             <b>Text box:</b>
  12.         </td>
  13.         <td valign="top">
  14.             <input type="text" size="40" maxlength="100"  id="txBox" value="Type something here, it will stay...">
  15.         </td>
  16.     </tr>
  17. </table>
  18. <table width="500" border="0" cellpadding="0" cellspacing="0">
  19.     <tr>
  20.         <td valign="top">
  21.             <center><img src="anadeau_482_portrait.jpg"></center>
  22.         </td>
  23.     </tr>
  24. </table>
  25. </div>
  26.  
  27.  
  28. <table width="500" border="0" cellpadding="0" cellspacing="0">
  29.     <tr>
  30.         <td valign="top">
  31.             <input type="button" value="Appear" onclick="testFunction('appear');">&nbsp;
  32.             <input type="button" value="Fade Me" onclick="testFunction('fade');">&nbsp;
  33.             <input type="button" value="Fade Slow" onclick="testFunction('fadeslow');">&nbsp;
  34.             <input type="button" value="Puff Up" onclick="testFunction('puff');">&nbsp;
  35.             <input type="button" value="Drop Me" onclick="testFunction('dropme');">&nbsp;
  36.             <input type="button" value="Shake Me" onclick="testFunction('shake');">&nbsp;
  37.            
  38.             <BR><BR>
  39.            
  40.             <input type="button" value="Hilite" onclick="testFunction('hilite');">&nbsp;
  41.             <input type="button" value="Switch Off" onclick="testFunction('switchoff');">&nbsp;
  42.             <input type="button" value="Blind Up" onclick="testFunction('blindup');">&nbsp;
  43.             <input type="button" value="Blind Down" onclick="testFunction('blinddown');">&nbsp;
  44.             <input type="button" value="Slide Up" onclick="testFunction('slideup');">&nbsp;
  45.             <input type="button" value="Slide Down" onclick="testFunction('slidedown');">&nbsp;
  46.            
  47.             <BR>
  48.             <input type="button" value="Pulse" onclick="testFunction('pulse');">&nbsp;
  49.             <input type="button" value="Squish" onclick="testFunction('squish');">&nbsp;
  50.             <input type="button" value="Fold" onclick="testFunction('fold');">&nbsp;
  51.             <input type="button" value="Grow Top Left" onclick="testFunction('growtl');">&nbsp;
  52.             <input type="button" value="Grow Center" onclick="testFunction('growc');">&nbsp;
  53.             <input type="button" value="Shrink" onclick="testFunction('shrink');">&nbsp;
  54.         </td>
  55.     </tr>
  56. </table>
  57.  
  58. </BODY>
  59. </HTML>

Then inside the file referenced at the top of the JSP page named ade_functions.js, I added this simple method call to test all the different methods available:

JavaScript:
  1. function testFunction(affect_type) {
  2.  if(affect_type=="fade"){
  3.         Effect.Fade('ade_test');
  4.  }
  5.  else if(affect_type=="fadeslow"){
  6.        Effect.Fade('ade_test',{duration:5, from:1.0, to:0.0});
  7.  }
  8.  else if(affect_type=="puff"){
  9.        Effect.Puff('ade_test');
  10.  }
  11.  else if(affect_type=="dropme"){
  12.        Effect.DropOut('ade_test');
  13.  }
  14.  else if(affect_type=="appear"){
  15.        Effect.Appear('ade_test', { duration: 3.0 });
  16.  }
  17.  else if(affect_type=="shake"){
  18.        Effect.Shake('ade_test');
  19.  }
  20.  else if(affect_type=="hilite"){
  21.        new Effect.Highlight('txBox', {startcolor:'#ff99ff', endcolor:'#999999', duration: 3.0});
  22.  }
  23.  else if(affect_type=="switchoff"){
  24.        Effect.SwitchOff('ade_test');
  25.  }
  26.  else if(affect_type=="blindup"){
  27.        Effect.BlindUp('ade_test');
  28.  }
  29.  else if(affect_type=="blinddown"){
  30.        Effect.BlindDown('ade_test');
  31.  }
  32.  else if(affect_type=="slideup"){
  33.        Effect.SlideUp('ade_test');
  34.  }
  35.  else if(affect_type=="slidedown"){
  36.        Effect.SlideDown('ade_test');
  37.  }   
  38.  else if(affect_type=="pulse"){
  39.        Effect.Pulsate('ade_test');
  40.  } 
  41.  else if(affect_type=="squish"){
  42.        Effect.Squish('ade_test');
  43.  }
  44.  else if(affect_type=="fold"){
  45.        Effect.Fold('ade_test');
  46.  }
  47.  else if(affect_type=="growtl"){
  48.        new Effect.Grow('ade_test', {direction: 'top-left'});
  49.  }
  50.  else if(affect_type=="growc"){
  51.        new Effect.Grow('ade_test', {direction: 'center'});
  52.  }
  53.  else if(affect_type=="shrink"){
  54.        new Effect.Shrink('ade_test');
  55.  }
  56.  
  57. }

That was it really... once you have this setup you can load the page and click on all the buttons to see the different effects that script.aculo.us provides. I'm now using this library in a number of applications and clients really seem to enjoy the refreshing new look and features... nice work script.aculo.us!!!

Cheers,
Adrian

Hello All,

It's been a few days since my last post... I was on vacation for a few days. Visited the beautiful Island of Holbox. I know... WHERE?! Here's a site that talks a bit about Holbox: http://www.holboxisland.com/. Wow, what an interesting place & what a journey to arrive. I'm currently in Mexico City, so my girlfriend Gabi and I had a 2 hour flight to Cancun, then a 2 hour drive by taxi through a number of small, small towns... then a 30 minute ferry ride on a very small ferry to the Island!

So, no cars, not many telephones or Televisions... just us, the beach, Casa Sandra (our beautiful resort), the ocean and the 2000 mexican people that live there! Very refreshing place to visit for a vacation from everything! The only way to get around "town" is by golf cart... as mentioned earlier no cars so that is pretty cool! A bit of a difference than the 23 million people here in Mexico City... lol.

I guess I wasn't totally without technology... for my days on the beach, I had my Rum and Coke in one hand and a really great book in the other hand. The book is called Google Story and it focuses on how Google came to be the powerhouse Tech company they are today... as well as some bumps along the road for them. I strongly recommend it to anyone who has their own IT company. We can learn a lot from how Sergei Brin and Larry Page built Google from the ground up...

Anyway, enough technology talk :) Here are a couple pictures of the beach in Holbox. If anyone wants a place to lay around for a couple days on a beautiful beach, check it out! If you are looking for a place with lots of things to do... don't bother! haha ENJOY THE PHOTOS!


Holbox


Holbox


Holbox


Cheers... thank you Holbox!

Adrian

A Web Content Management System is a type of Content management system (CMS) software used for managing websites.

The software manages content (text, graphics, links, etc.) for distribution on a web server. Usually the software provides tools where users with little or no knowledge of programming languages and markup languages (such as HTML) can create and manage content with relative ease of use. Most systems use a database to hold content, and a presentation layer displays the content to regular website visitors based on a set of templates. Management of the software is typically done through a web browser, but some systems may be modified in other ways.

Ok, sounds simple right? Not always the case... or so it seems with OpenSource tools for providing these features to clients. Our company, Evolving Solutions has been building CMS systems for some time now and we've been looking for an OpenSource CMS solution that might help us and speed up development time... which in turn lets us get more work done and also charge our clients less! a win-win situation.

So, after many attempts at searching, I've found that most CMS systems are just way to confusing for everyday users... the users that are going to be updating their sites, everyday ;)

I decided to look around again a couple weeks ago and I found MeshCMS I read about the OpenSource project on another site and decided to check it out. I wasn't really excited when I saw the project homepage... I honestly think that they could update it maybe and make it a little catchier since they say that the site is running off MeshCMS. Just my humble opinion.

Anyway, I didn't judge a book by it's cover and I decided to give it a shot. Here are a few key points to what I've found out so far:

  • I was pleasantly surprised at first how easy it was to setup... real easy... you just deploy it as a webapp if you are using Tomcat or any other Servlet Container and it's ready to rock! Refreshing start.

  • No database required for MeshCMS. It's all file driven (templates and JSP's), could be good, good be bad I guess, all depends on what you prefer. But eliminates one step of the setup (creating a DB)

  • All theme/template based. So basically you can set up a theme really easy, here's a quick glimpse if you are curious on simple it really is: http://www.meshcms.org/userguide/index.html#create_theme. Anyone familiar with JSP's and Tag Libraries will appreciate how easy it is to setup a Theme.

  • Extremely user friendly for the end user (which is most important!).

Now, someone looking for a more robust, permission based, blah blah type of Document/CMS system will not be interested in MeshCMS. It's definitely more for someone or some company looking to get a CMS system up and running smoothly and quickly. They even state it on their website:

MeshCMS has been thought as a quick tool to edit pages online, manage files and create some common components like menus, breadcrumbs, mail forms, image galleries and so on.

So, in conclusion, I haven't had a chance to dive in and really use MeshCMS for a production website yet (just being honest, hopefully will soon), but if you are in the market for an easy to use and easy to setup CMS System, I would recommend looking at the features and trying it out for yourself. It'll only take a few minutes and it'll be well worth it!

If anyone has used it or tried it out and has any suggestions or comments, please feel free to share!

Good luck, happy CMS'n!
Adrian

Has you ever looked for an easy way to add searching capabilities to your web site or application?

For some reason when I started looking a year ago I didn't have much luck. I was fairly familiar with an Apache Product named Lucene (probably one of my favorite product names ever... I just love how it sounds), but it really didn't seem to work well with web applications. It seems much more useful to search documents (word docs, text, pdf, etc) and index them for a search. A very useful tool for a company portal, but not for a website that is built with dynamic content or has jsp includes.

Then I stumbled across another Apache Project named Nutch (pretty neat name also).

Nutch is open source web-search software. It builds on Lucene Java, adding web-specifics, such as a crawler, a link-graph database, parsers for HTML and other document formats, etc.

In a nutshell, that means you can search your website or application with Lucene :) Probably may not be really useful for smaller sites, but some of our applications have around 100 pages of content so users always appreciate a search option. Nutch is still in the early stages but we have used it a few times and it seems very solid already. The crawling part can be a bit confusing if you have to setup CYGWIN on your Windows OS for the first time. But once that step is completed and you index a few sites it becomes pretty easy. As with most Open Source tools, the documentation is a bit tricky but give it a shot if you need to integrate search capabilities into your applications!

Here are a couple examples of sites that use Nutch:

OfficeGateway
More of a basic implementation for searching the website for information.
OfficeGateway.ca

Krugle
A more in depth implementation that searches thousands (guessing) of files when you enter a search criteria.
Krugle.com

Searching may not seem to important to some, but it seems to come up quite a bit in our projects... so I guess it might just be important after all! Check out Nutch if you need to find a solid search feature today!

Cheers,
Adrian

Next Page »