tag:blogger.com,1999:blog-71199324685494957102024-03-12T18:29:32.948-04:00Burr BlogAnonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.comBlogger23125tag:blogger.com,1999:blog-7119932468549495710.post-75039003055538822392015-04-22T15:55:00.002-04:002015-04-22T15:55:54.087-04:00An Enterprise Developer's Journey to Internet-of-Things (IoT)<br />
From Enterprise to Mobile to IoT (Internet-of-Things) Developer<br />
<br />
This <a href="https://www.linkedin.com/pulse/becoming-iot-developer-alok-batra">article by Alok Batra</a> started me thinking about the unique differences between the Enterprise vs Mobile vs IoT development spaces and my own personal journey down this path. I am sure my thinking will change as my IoT skills and knowledge mature - this is just a moment in time - but I thought writing it all down would be valuable.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://media.licdn.com/mpr/mpr/AAEAAQAAAAAAAAFxAAAAJGNkNDc5ZmE5LWIxNzEtNDExMS05OTU5LWQyZmNkMzQ5NDE5ZQ.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://media.licdn.com/mpr/mpr/AAEAAQAAAAAAAAFxAAAAJGNkNDc5ZmE5LWIxNzEtNDExMS05OTU5LWQyZmNkMzQ5NDE5ZQ.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Source: <a href="https://www.linkedin.com/pulse/becoming-iot-developer-alok-batra">https://www.linkedin.com/pulse/becoming-iot-developer-alok-batra</a></div>
<br />
<br />
<b>Enterprise</b>: I have primarily been an enterprise Java and .NET developer, building applications that had a browser/web front-end, a middle-tier on the server and a database tier. Of course there are batch apps, reporting/business intelligence apps, integration via messaging and perhaps ESBs (enterprise service bus) in the average enterprise IT shop. But at the end of the day, the vast majority of enterprise applications are used to shove data into a relational database and retrieve it back out again, normally using a web browser for data entry and display purposes. For most of the early 2000's the enterprise web application developer only had to worry about one target desktop OS (Windows) and one target browser (Internet Explorer). I have also spent time building things in Node.js - and the development model is fairly similar - web UI built in a HTML5 framework interacting with RESTful APIs/services and perhaps instead of a RDBMS taking advantage of a NoSQL db like <a href="http://www.mongodb.org/">Mongo</a>. Besides Java, .NET and Node.js, I have also spent a fair bit of time working with <a href="http://vertx.io/">Vert.x</a> - its <a href="https://www.youtube.com/watch?v=fb3F9vyXXGk">asynchronous, reactive programming model</a> gives you a result very similar to Node.js based <a href="https://www.youtube.com/watch?v=6yOa6WY2jSs">real-time web apps</a>.<br />
<br />
<b>Mobile</b>: When it came to learning <a href="https://www.youtube.com/playlist?list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">mobile application development</a> a few years ago, it turned out that a fair bit of the architectural patterns from enterprise web app development could be reused. For instance, most mobile applications that communicate with a back-end leverage HTTP and/or REST. The good old GET, PUT, POST and DELETE HTTP verbs that we have been actively working with for 20 years. Building of the mobile front-end could be achieved via the smartphone's web browser or perhaps using something like <a href="https://www.youtube.com/playlist?list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">Phonegap/Apache Cordova</a> - the programming model was basically the same as it was for the average enterprise application. The biggest learning curve was related to having more than a single target OS, a single target browser client and a single form-factor. iOS + Safari, Android + Android's native browser and Android + Chrome become critical combinations for us to test our user interfaces on. At the same time, FireFox and Chrome took marketshare from IE on the corporate desktop. Responsive design became a thing and many developers simply took advantage of CSS libraries like Bootstrap to help address the differences in screen sizes. In general, the transition to mobile was relatively easy - as many of the same skills you used in pre-mobile enterprise web application development could still be applied. <br />
<br />
<b>IoT</b>: I have been pushing myself through the IoT learning curve over the last few months. It turns out that IoT is fairly unique and very different from the mobile universe. IoT + Enterprise will be a much greater challenge for the following reasons:<br />
<br />
<b>1) Hardware</b>: Most every developer has a smartphone, likely running either iOS or Android and those smartphones have all the same basic sensors and capabilities. In the case of IoT development/prototyping boards, there are dozens of vendors running a myriad of operating systems. No two platforms have the same sensors and capabilities. You also have two major classes of a programmable Thing: microcontrollers (e.g. Arduino, mbed) and microcomputers (e.g. <a href="http://www.raspberrypi.org/">Raspberry Pi</a>, <a href="http://beagleboard.org/BLACK">BeagleBone Black</a>, <a href="http://www.intel.com/content/www/us/en/do-it-yourself/edison.html">Intel Edison</a>). There are 'hobbyist' or maker platforms such as the insanely popular Arduino and its derivatives such as <a href="http://www.rfduino.com/">RFduino</a>, <a href="https://www.sparkfun.com/categories/135">LilyPad</a> or <a href="https://www.adafruit.com/product/659">Adafruit's FLORA</a>. Plus, Linux-based platforms such as the best selling UK-based computer Raspberry Pi (<a href="http://www.raspberrypi.org/five-million-sold/">5 million units sold</a>). There are also many "professional" grade dev boards/kits from Freescale, TI and many others, therefore, the developer will have a whole lot to think about in terms of hardware selection.<br />
How do you choose which of these platforms to invest your limited time and energy? I am still forming opinions about that myself - at this moment, I have the following sitting on my desk: <a href="http://www.arduino.cc/">Arduino</a>, <a href="http://www.raspberrypi.org/">Raspberry Pi Model B (1 and 2)</a>, <a href="https://www.spark.io/">Spark Core</a>, <a href="https://www.sparkfun.com/products/12968">mbed LPC1768</a> and a <a href="http://beagleboard.org/BLACK">BeagleBone Black</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
Here is the ultra-short (90 seconds) demo teaser video:</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/JXfkIRHfDzY/0.jpg" src="https://www.youtube.com/embed/JXfkIRHfDzY?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Here is a video, drilling down on my exploration of IoT development hardware:</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/4U6T1UWEnj0/0.jpg" src="https://www.youtube.com/embed/4U6T1UWEnj0?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
<br />
<b>2) Networking</b>: Unlike the average smartphone, the average programmable Thing does not include network connectivity out-of-the-box. That is changing with companies like <a href="https://www.spark.io/">Spark</a> pushing hard not only into Wifi-connected programmable controllers like the <a href="https://store.spark.io/?product=spark-core">Core</a> and <a href="https://store.spark.io/?product=spark-photon">Photon</a> but also with the recently announced cell-based (think 2G/3G) developer kits like <a href="https://www.kickstarter.com/projects/sparkdevices/spark-electron-cellular-dev-kit-with-a-simple-data">Electron</a>. For the typical enterprise web developer, having network access is assumed and this particular area is changing VERY rapidly. In addition, the systems designer must consider power (battery or not) implications of various radios, ethernet and network stacks. <br />
<br />
<b>3) Client-side Operating Systems</b>: The client in the case of IoT is often known as the Edge. The microcontrollers are basically running C/C++ on their chip architectures, there is not really an OS in the traditional sense. ARM's mbed offers a nice web-based IDE for crafting your C++ code and the "deployment" is a simple <a href="https://learn.sparkfun.com/tutorials/mbed-starter-kit-experiment-guide">drag & drop</a> of the binary to your USB-connected device. In the case of various types of microcomputers, there are many derivatives of Linux and one of the more interesting flavors is <a href="https://www.yoctoproject.org/">Yocto</a> - because you roll-your-own, including only the packages that you need to support your use case. The bottom-line here is that unlike "desktop web" with primarily Windows or "mobile web" with primarily iOS and Android, your device-side operating systems will be highly varied and multifaceted.<br />
<br />
<b>4) Client-side Programming Language</b>: In the case of desktop and mobile, you could get by with just knowing HTML, JavaScript and CSS. It was possible that someone in your IT organization might also know Objective-C or Android Java but in general, you do not need to "go native" for many classes of enterprise-focused mobile apps. In the land of IoT, with some microcontrollers, you could use JavaScript: <a href="https://tessel.io/">Tessel</a> or <a href="http://www.espruino.com/">Espruino</a>. But in general you will mostly be working with C/C++ in that space. For the microcomputer class of devices, running Linux, you can get back to more enterprise developer friendly programming languages like Java, Python, JavaScript via Node.js and Ruby. Even though I have primarily lived in the enterprise Java space and certainly do enjoy programming in Java, I do not expect Java to be the dominate language on IoT-focused devices. My programming preference running on the edge gateways/devices is Node.js at this time.<br />
<br />
<b>5) Physical Assembly</b>: The phrase "Hardware is Hard" is tossed about a fair bit. While I own a soldering iron, I have only recently learned to use it. I think many enterprise developers will need to partner with someone who specializes in hardware and understands voltage, resistance, capacitance, and RF (radio frequency) intuitively. Someone who can design the ultimate sensor/actuator/device package, with just the key attributes and capabilities you need. Someone who is happy to design with <a href="https://learn.sparkfun.com/tutorials/how-to-install-and-setup-eagle">Eagle CAD</a> and create custom PCBs (printed circuit board) or at least work with the design house helping you build your custom field-deployed devices. This is very different than <a href="https://www.youtube.com/watch?v=Coal4lAiI5g#t=34">buying your employees an iPhone</a>.<br />
<br />
<b>6) Enterprise Architecture</b>: In the desktop web, mobile web and even mobile apps (native, hybrid) we primarily focused on HTTPS access. While HTTPS is still possible within the IoT universe, it is not the only connectivity protocol - it is one of MANY protocols vying for dominance: <a href="http://mqtt.org/">MQTT</a>, <a href="http://www.amqp.org/">AMQP</a>, <a href="http://xmpp.org/">XMPP</a>, <a href="http://www.opendds.org/">DDS</a> and <a href="http://coap.technology/">CoAP</a> are all possible candidates - and many of these are messaging-oriented, async pub-sub, not request-response. Furthermore, some of the devices are simply too low-powered to handle any real encryption for messages. This is something to be considered in your overall systems design.<br />
<br />
<b>7) Ingestion</b>: It is predicted that the Internet of Things will include billions of connected devices and if you work for a large enterprise, you should have a feel for the volume of trucks, pallets, boxes, warehouses, fork lifts, retail stores, bins, utility poles, meters, EKG machines, etc that are part of your organization. What happens when many of these normally silent things begin to provide data, every few seconds? For many enterprises, the average desktop web or mobile app, does not receive vast amounts of inbound data as human employees can only type so fast, but in the land of IoT, you can be overwhelmed with data. As an enterprise developer, my 'tried and true' weapon of choice, the application server, may no longer be the most appropriate solution - some form of distributed message broker becomes a better solution, allowing you to more easily ingest the sheer volume of data coming your way.<br />
<br />
<b>8) Analytics</b>: A traditional, CRUD (Create-Read-Update-Delete) focused enterprise web application, deposits data from your human users into a relational database like Oracle, DB/2 or SQL Server. Countless technologies, both paid and FOSS (<a href="http://en.wikipedia.org/wiki/Free_and_open-source_software">Free Open Source Software</a>), exist for exploring, mining, reporting, dashboarding, etc. Your web server logs can be digested and dissected using technologies like <a href="http://www.splunk.com/">Splunk</a> or ELK (<a href="http://www.elasticsearch.org/overview/">Elasticsearch Logstash Kibana</a>). Some of these tools and techniques still apply in the world of IoT. However, the volume and speed of the inbound data (sensor readings from your manufacturing lines) and the potential need for "real-time" analysis to prevent outages (e.g. motor temperature signals poor performing wheel bearing) may make you reconsider this area of your architecture. Technologies like <a href="https://spark.apache.org/streaming/">Apache Spark Streaming</a> or <a href="https://storm.apache.org/">Apache Storm</a> become much more interesting as potential solutions.<br />
<br />
<br />
<b>In summary</b>, as of early 2015, Internet of Things (IoT) development is fairly different from today's average enterprise web and mobile app development. Now, the space is absolutely exploding in terms of new innovations and a massive amount of R&D investment is being liberally applied. It could be that by the time you need to start exploring the IoT, that the average sensor/actuator device has a 64-bit multi-core processor, wifi connectivity, months of battery life, fits on your fingertip, runs a fairly standard Linux, Java and Node.js giving you a powerful yet simple programmable platform.<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-40211084296694867842015-03-11T21:42:00.000-04:002015-03-11T21:42:07.700-04:00DevNexus Docker for Java Developers: Hands-On LabHello DevNexus 2015<br />
March 12 2015 at 1:00 PM<br />
<br />
We have 75 minutes to get your laptop setup with Docker for building and running Java EE applications. The good news is that you can come to the session prepared. I made the assumption that most folks will have a Windows or Mac OSX laptop and can use <a href="http://boot2docker.io/">boot2docker</a> which bundles VirtualBox.<br />
<br />
The complete tutorial (the core of the overall talk) is available on Github<br />
<a href="https://github.com/burrsutter/docker_tutorial">https://github.com/burrsutter/docker_tutorial</a><br />
and<br />
<a href="https://github.com/burrsutter/docker_mysql_tutorial">https://github.com/burrsutter/docker_mysql_tutorial</a><br />
<br />
If you can, make the attempt at getting boot2docker running on your Windows or Mac laptop prior to the session. There can be numerous challenges with the installation process, most of which I have tried to describe workarounds in the tutorial document. Once you have successfully executed:<br />
<br />
<div style="text-align: center;">
<span style="background-color: rgba(0, 0, 0, 0.0392157); color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6000003814697px; line-height: 24.1777782440186px;"><b>docker run centos /bin/echo "Hello World"</b></span></div>
<br />
You are ready to go!<br />
<br />
You can also simply install Docker on your Linux machine directly:<br />
Ubuntu: <a href="https://docs.docker.com/installation/ubuntulinux/">https://docs.docker.com/installation/ubuntulinux/</a><br />
Debian: <a href="https://docs.docker.com/installation/debian/">https://docs.docker.com/installation/debian/</a><br />
Centos: <a href="https://docs.docker.com/installation/centos/">https://docs.docker.com/installation/centos/</a><br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-4394080198175165312015-03-07T18:00:00.002-05:002015-03-07T18:44:06.376-05:00Publish Subscribe with Spark Core (1+1=3)<br />
Do not make the same mistake that I made. I purchased a solitary <a href="https://store.spark.io/?product=spark-core">Spark Core</a> and nearly missed the awesomeness of Spark. You must buy two (2) from <a href="https://www.spark.io/">Spark.io</a>, Sparks need friend!<br />
<br />
A few years ago, I spent many hours with Arduino Uno but did not find it to be that engaging. By default an Arduino Uno lacks networking and it is not a member of the "Internet of Things" unless you add on an appropriate shield or integrate another component. At the time, the ethernet shield was somewhat expensive and Wifi fairly challenging. Fast forward to 2015 and the world has changed dramatically.<br />
<div>
<br /></div>
I started exploring the Spark Core, the Open Source IoT Toolkit, essentially a Wifi-enabled Arduino for $39 (I have two <a href="https://store.spark.io/?product=spark-photon">Photons</a> on backorder and backed the <a href="https://www.kickstarter.com/projects/sparkdevices/spark-electron-cellular-dev-kit-with-a-simple-data">Electron</a> on <a href="https://www.kickstarter.com/">Kickstarter</a>), just last weekend. This included my dusting off my Arduino Uno for testing various resistors, sensors, actuators, logic, etc prior to trying those so things on the Spark. By this weekend, I wanted to see what it would take to "integrate" a couple of Spark Cores.<br />
<br />
The Spark Core is inherently network-aware, in its default state, you must have a Wifi connection even to flash/program it (which does mean it is slower to flash than a USB-connected Arduino). More importantly, your code can expose <a href="http://docs.spark.io/firmware/#spark-variable">variables</a> or <a href="http://docs.spark.io/firmware/#spark-function">functions</a> which can be invoked via a REST API call to the Spark Cloud. You can use curl to interact with the physical world - for a Java/JavaScript coder like myself...this is pretty incredible.<br />
<br />
In addition, you can engage in <a href="http://docs.spark.io/firmware/#spark-publish">publish</a>/<a href="http://docs.spark.io/firmware/#spark-subscribe">subscribe</a> messaging between two or more Spark devices.<br />
<br />
My thinking is that an intelligent sensor (based on Spark Core) in one location can take readings and based on need (e.g. stock needs replenishing, conveyor motor offline, temperature is rising), can alert other intelligent actuators to take some action in the physical world. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/_ohlwekZZt0/0.jpg" frameborder="0" height="266" src="http://www.youtube.com/embed/_ohlwekZZt0?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
In this case, I used a <a href="https://www.sparkfun.com/products/9375">Force Sensitive Resistor</a> where its reported value rises based on the amount of pressure (squeeze) you apply and I used the super simple Spark.publish API to send out the event to the Internet. On the other Spark Core, I set up a subscriber that invokes a simple function to "animate" the <a href="https://www.sparkfun.com/products/9065">servo</a>+<a href="https://www.sparkfun.com/products/13176">gripper</a> also from <a href="https://www.sparkfun.com/">SparkFun</a>. Both Spark Cores are sitting on their respective breadboards (the Core ships with a breadboard) and the subscriber core (the gripper) is being powered by the <a href="https://store.spark.io/?product=battery-shield">Spark Battery Shield</a>.<br />
<br />
<b>Publisher (with Force Sensitive Resistor) Code</b><br />
<br />
<br />
<pre>#include "application.h"
/*
From the article: http://bildr.org/2012/11/force-sensitive-resistor-arduino
https://www.dropbox.com/s/dodvjb814uxfscs/2015-03-04%2019.59.21.jpg?dl=0
https://www.dropbox.com/s/rduygfde2irjyv7/2015-03-04%2019.59.34.jpg?dl=0
*/
int FSR_Pin = A0; //analog pin 0
int ledPin = 7;
bool wasHigh = false;
void setup(){
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop(){
int fsrReading = analogRead(FSR_Pin);
Serial.println(fsrReading);
if (fsrReading > 3000) {
Serial.println(wasHigh);
if (!wasHigh) {
Serial.println("sending HIGH");
wasHigh = true;
digitalWrite(ledPin, HIGH);
Spark.publish("burrsqueeze", "HIGH", 60, PRIVATE);
}
} else {
if (wasHigh) { // the state is normally sub-3000
Serial.println("sending LOW");
digitalWrite(ledPin, LOW);
Spark.publish("burrsqueeze", "LOW", 60, PRIVATE);
wasHigh = false;
}
}
delay(400); //just here to slow down the output for easier reading
}
</pre>
<br />
<b>Subscriber (with Servo+Gripper)
</b><br />
<br />
<pre>#include "application.h"
/*
Receives a 'squeeze' HIGH event and closes the servo+gripper to close
*/
Servo myservo;
const bool DEBUG=true;
int minPos = 32;
int pos = 0;
int maxPos = 160;
int ledPin = 7;
int i = 0;
void close_gripper() {
if (DEBUG) Serial.println("close");
// close
for(pos = maxPos; pos >= minPos; pos-=1) {
myservo.write(pos);
delay(25);
}
}
void open_gripper() {
if (DEBUG) Serial.println("close");
// open
for(pos = minPos; pos < maxPos; pos += 1) {
myservo.write(pos);
delay(25);
}
}
void eventHandler(const char *event, const char *data)
{
if (DEBUG) Serial.print(event);
if (DEBUG) Serial.print(", data: ");
if (data) {
if (DEBUG) Serial.println(data);
// assume LOW unless HIGH arrives
if (String(data) == "HIGH") {
digitalWrite(ledPin, HIGH);
close_gripper();
} else {
open_gripper();
digitalWrite(ledPin, LOW);
}
}
else {
Serial.println("NULL");
}
}
void setup() {
if (DEBUG) Serial.begin(9600);
Spark.subscribe("burrsqueeze", eventHandler, MY_DEVICES);
pinMode(ledPin, OUTPUT);
myservo.attach(A0);
myservo.write(maxPos);
}
void loop() {
delay(400);
if (DEBUG) {
i++;
Serial.print("I'm Alive: ");
Serial.println(i);
}
}
</pre>
<b>Note: </b>I use the Spark Dev (on desktop Atom-based Spark tool) so I include application.h<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-6319932691973418162015-02-16T15:50:00.000-05:002015-02-16T15:50:03.680-05:00docker, Docker, DOCKER!My first run of the <a href="http://www.meetup.com/Triangle-Java-Users-Group/events/219476447">Docker Tutorial Live</a> has been canceled for today, February 16 at <a href="http://www.meetup.com/Triangle-Java-Users-Group/">TriJUG</a>, alas, Old Man Winter has intervened and we are expecting snow & freezing rain during the TriJUG meeting time window. And for those of you who have lived in the South, snowflakes are a cause for major alarm - I suspect the grocery stores have already been raided for bread, milk, eggs and ammunition :-)<br />
<br />
The next live event will be <a href="http://devnexus.com/">DevNexus</a> in Atlanta on March 10 to 12th 2015. DevNexus is an excellent <a href="http://www.ajug.org/">JUG</a>-organized developer-focused event which basically equates to a great speaker line-up at a great price point. <br />
<br />
For those of you following along at home (not physically making it to TriJUG or DevNexus), please check out the written <a href="https://github.com/burrsutter/docker_tutorial">Docker Tutorial</a> materials - the focus is on the Windows-based enterprise Java Developer. With our JBoss Tools project, we receive opt-in usage data that shows us that the vast majority of enterprise Java developers run Windows as their primary desktop. While Docker is a Linux innovation, it can be run on Windows via boot2docker (which includes VirtualBox in its installation). And Java developers do want to understand how building Docker images and running containers could impact their future toolchain and workflow.<br />
<br />
I wrote the tutorial documents in markdown (many thanks to Pete Muir for helping my formatting) and stored them in github to make them "forkable" - hopefully allowing anyone who wishes to run their own Docker Workshop use the materials and perhaps even send back a pull request.<br />
<br />
<a href="https://github.com/burrsutter/docker_tutorial">Getting Started with Docker, boot2docker, on Windows for the Java Developer</a><br />
<br />
<a href="https://github.com/burrsutter/docker_mysql_tutorial">Adding MySQL and additional tips for Java EE on Docker</a><br />
<br />
Once you have a comfort level with Docker builds and runs...then it is time to learn one of the orchestration solutions - basically tools that allow you to start multiple docker containers, linking them, declaratively. We (Red Hat) are focused on Kubernetes by Google as that piece of the infrastructure. Check out this short recorded demo of <a href="https://www.youtube.com/watch?v=IR9UhW8k6Ag#t=1049">Kubernetes in action</a>.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-49567517825997239372015-02-09T22:50:00.001-05:002015-02-09T22:50:29.260-05:00New Technology Learning ProcessI love learning. I was a curious child and became an even more curious adult. When it comes to all sorts of enterprise-related software development, I really wish to know what a new technology or technique might bring to the table.<br />
<br />
One trick that I will use on myself is to sign up for a presentation as that will force me to learn the technology (or technique) well enough to at least get through a 60 to 90 minute presentation and demonstration...with a hard deadline. The demonstration being the key thing for me - I tend to work backwards from the demos to the slides - so that the slides reflect what I can actually show off in the demos. <br />
<br />
In the last few years, the set a presentation date trick was how I learned:<br />
- <a href="https://vimeo.com/117678952">Platform-as-a-Service</a> and cloud computing in general<br />
- <a href="https://www.youtube.com/watch?v=I-GD4ro9fh4">HTML5</a><br />
- <a href="https://www.parleys.com/talk/push-mobile-cloud-oh-my">Vert.x</a> (minute 46)<br />
- <a href="https://www.youtube.com/playlist?list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">Apache Cordova (Phonegap)</a><br />
and now I am doing it with <a href="https://github.com/burrsutter/docker_tutorial">Docker</a> for <a href="http://www.meetup.com/Triangle-Java-Users-Group/events/219476447/">TriJUG</a> and <a href="http://devnexus.com/s/index">DevNexus</a>.<br />
<br />
My basic learn something new technique is as follows:<br />
1) 30 seconds: when I first hear about something check the term out on Wikipedia (e.g <a href="http://en.wikipedia.org/wiki/6LoWPAN">6LoWPAN</a>)<br />
2) If the term is so new or esoteric that wikipedia does not have a entry, search Twitter<br />
3) 5 minutes: try to find a sub-10 minute YouTube video on the subject. <br />
4) 30 minutes: find a decent tutorial/getting started guide - these are very critical to my learning path - therefore I try to craft my own <a href="https://github.com/burrsutter/docker_tutorial">tutorials</a> when possible. <br />
5) 1 hour: find some decent examples - I am definitely a learn by example kind of person. Some folks call it a "copy & paste" programmer. As part of my first hour or three of learning...finding some good examples and "playing" with the new technology is critical. That early feeling of success is a huge motivational factor. And if the examples fail, then you feel challenged.<br />
6) Look for the deeper dive presentation on YouTube or if I am lucky, seeing it presented at a conference. I find that the way someone presents the high points of a technology - the advantages and its warts is very helpful in my initial "wrapping my head around it".<br />
7) Find the forums, the better technologies should have a community forum, perhaps a simple Google Group and/or tags out at StackOverflow. I like scanning through the questions as that gives you a feel for how the technology is being used in the real world. You can then compare the use cases to your own needs. I use this same basic technique when reading reviews - does the reviewer (question asker) think as I would?<br />
<br />
What is your learning process? How do you prioritize the list of things to be learned and then what steps do you follow to gain some (or great) insight into the new technology?<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com1tag:blogger.com,1999:blog-7119932468549495710.post-82884185096695716212015-02-07T14:55:00.000-05:002015-02-07T14:55:09.878-05:00HTML5, Vert.x, Leap Motion and other goodies<div>
What follows are some of my favorite presentations/demonstrations of some very fun technology. Leveraging technologies like HTML5 Canvas, Vert.x - a reactive async platform and Leap Motion for gesture UI. </div>
<div>
<br /></div>
<div>
<b><a href="https://www.youtube.com/watch?v=jI6DVLX1kDY&list=UU8lACqV5tnawGhqQjv5eVhA">Multi-user Painting with Vert.x</a></b></div>
<div>
<br /></div>
One of most fun demos I have created was related to <a href="https://github.com/burrsutter/vertx_intro">Vert.x</a> 2 and allowing for audience participation...in a live demonstration. Here is a <a href="https://www.youtube.com/watch?v=jI6DVLX1kDY&list=UU8lACqV5tnawGhqQjv5eVhA">single-user recording</a> of the demonstration I called "<a href="https://github.com/burrsutter/paint">paint</a>" as it is a multi-user painting tool. Audience members use their phones to touch draw via HTML5 canvas something on their smartphone web browser, those events were captured via JavaScript, sent up to Vert.x running on Openshift and then back to the dashboard running on my laptop's browser. <div>
This demonstrates not only the power of HTML5 Canvas, but also Websockets and a reactive async platform like Vert.x. Warning: some of your audience members may draw some rated R or NC-17 images when you are displaying all the individual images via the dashboard, I have had that happen. I used this demo at <a href="http://greatwideopen.org/">Great Wide Open 2014</a> and <a href="https://www.parleys.com/talk/528e6ecbe4b084eb60ac791a">Devoxx 2013</a> (Vert.x is toward the very end). </div>
<div>
<br /></div>
<div>
Note: <a href="https://github.com/burrsutter/paint">Paint</a> is NOT a representation of great coding - it is cool hacking - to make something work with the least amount of pain. :-)</div>
<div>
<br /></div>
<div>
<a href="https://www.youtube.com/watch?v=JIMl9YM-7tg&list=UU8lACqV5tnawGhqQjv5eVhA">Leap Motion Finger Painting</a></div>
<div>
<br /></div>
<div>
Taking advantage of Leap Motion and Leap.js to capture the figure gestures to draw on my desktop browser but also leverage Vert.x EventBus to reflect the gestures out to mobile devices. I think of it as a "reach out and touch somebody" kind of demo - where I can put my hands on the audience's phones. In this case Leap's gestures are being sent up "to the Cloud" (Openshift) and then back out to the mobile devices. Basically the opposite flow from the multi-user painting demonstration above.</div>
<div>
</div>
<div>
<a href="https://github.com/burrsutter/leap">Finger painting code</a></div>
<div>
<br /></div>
<div>
<a href="https://www.youtube.com/watch?v=S_FWCuCGJjc&list=UU8lACqV5tnawGhqQjv5eVhA">Reveal.js and Leap Motion</a></div>
<div>
<br /></div>
<div>
The <a href="https://github.com/burrsutter/hitchhikers">Hitchhikers Guide to the JBoss Galaxy</a> presentation has been used on several occasions and different events and I took some time to move it from PowerPoint to Reveal.js. Based on the experience with gesture tracking and finger painting, I thought I can hack in simple gesture-based navigation. It works fairly well but it is hard to capture via video. </div>
<div>
I used the ZiggiHD USB-powered document camera to make the Leap Motion controller visible in the bottom left corner - <a href="https://www.youtube.com/watch?v=S_FWCuCGJjc">see video</a>.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /><div>
<div>
<br /></div>
<div>
<br /></div>
</div>
</div>
Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-1619238116445987952015-01-07T07:07:00.000-05:002015-01-07T07:07:13.172-05:00Docker for Java Developers (Lab) <b>Docker for Java Developers (Lab) </b><br />
<br />
We have been working on a hands-on tutorial to help people ram up on Docker!<br />
<br />
Containers are enabling developers to package their applications (and underlying dependencies) in new ways that are portable and work consistently everywhere? On your machine, in production, in your data center, and in the cloud. And Docker has become the de facto standard for those portable containers in the cloud, whether you’re working with Amazon Web Services, Google Cloud Platform, or Microsoft Azure. Docker is the developer-friendly Linux container technology that enables creation of your stack: OS, JVM, app server, app, and all your custom configuration. So with all it offers, how comfortable are you and your team taking Docker from development to production? Are you hearing developers say, “But it works on my machine!” when code breaks in production? And if you are, how many hours are then spent standing up an accurate test environment to research and fix the bug that caused the problem? This lab offers developers an intro-level, hands-on session with Docker, from installation (including boot2docker on Windows/Mac), to exploring Docker Hub, to crafting their own images, to adding Java apps and running custom containers. This is a BYOL (bring your own laptop) session, so bring your Windows, OSX, or Linux laptop and be ready to dig into a tool that promises to be at the forefront of our industry for some time to come.<br />
<br />
The First Tutorial (planning on more in the series)<br />
<a href="https://github.com/burrsutter/docker_tutorial">https://github.com/burrsutter/docker_tutorial</a><br />
<br />
And recommended blogs by Arun Gupta for more concepts:<br />
<br />
<br />
<ul>
<li><a href="http://blog.arungupta.me/2015/01/wildfly-admin-console-docker-image-techtip66/">Accessing the Wildfly Admin Console</a></li>
<li><a href="http://blog.arungupta.me/2014/12/wildfly-javaee7-mysql-link-two-docker-container-techtip65/">Hooking up a MySQL container to the Java EE/Wildfly container</a></li>
</ul>
<br />
<br />Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com1tag:blogger.com,1999:blog-7119932468549495710.post-32066225537996068462014-12-01T13:44:00.000-05:002014-12-01T13:44:10.518-05:00Hybrid Mobile - Apache Cordova Training Series with Eclipse via JBoss Developer StudioWe have been developing Eclipse tools for HTML5 Hybrid Mobile applications, leveraging Apache Cordova, jQuery and AngularJS/Ionic for a few years now. This set of videos is primarily for "training purposes". The ultimate goal is to get you started and making you productive with our mobile-focused Eclipse tools.<br />
<br />
The series has been published to YouTube.
<a href="https://www.youtube.com/playlist?list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">JBoss Mobile (Cordova, jQuery, AngularJS, Ionic, Push) - YouTube</a><br />
<br />
<b>1</b> - <a href="https://www.youtube.com/watch?v=H5ry5WpziVw&index=1&list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">Installation</a>: Walks through the installation of the Hybrid Mobile Tools into JBDS 8 - allowing you to create Apache Cordova based applications leveraging HTML5, jQuery Mobile or AngularJS+Ionic. In this video, you are introduce to CordovaSim and LiveReload features for interactively building your mobile UI. Integration with the iOS Simulator is also demonstrated (note: iOS Simulator requires Mac OSX)<br />
<b>2</b> - <a href="https://www.youtube.com/watch?v=FstGLMr3W8s&index=2&list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">REST</a>: Addition of a localhost EAP server, configuration to allow for remote connections (mobile clients are remote), deployment of a REST endpoint. Creation of a mobile application that interacts with the EAP hosted REST endpoint.<br />
<b>3</b> - <a href="https://www.youtube.com/watch?v=E-EMx1zlW68&index=3&list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">Native API</a>: Demonstrates how to use Apache Cordova Plug-ins to leverage native device functionality, in this case, access to the Contacts on the device itself. Also demonstrates deployment to a USB-connected Android phone.<br />
<b>4</b> - <a href="https://www.youtube.com/watch?v=UFuMuEqonkQ&index=4&list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">AngularJS + Ionic</a>: Demonstrates how to start an AngularJS + Ionic project and import into JBDS. Use of the new Ionic Palette in JBDS.<br />
<b>5</b> - <a href="https://www.youtube.com/watch?v=SviOjPMhc2M&index=5&list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">Push</a>: Introduces how to configure Push Notifications - primarily focused on the EAP setup required to install our UnifiedPush Server to a localhost EAP. Includes the configuration of Android Google Cloud Messaging push notifications - demonstrated on actual Android device. <br />
<b>6</b> - <a href="https://www.youtube.com/watch?v=IJmkHkLaubc&index=6&list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">More Native</a>: Brings in some additional Apache Cordova Plug-ins to demonstrate use of the accelerometer and battery status APIs. CordovaSim providing interactive testing support, deployment to real Android device.<br />
<b>7</b> - <a href="https://www.youtube.com/watch?v=aio9y-rVqN0&index=7&list=PLuWlr4oKSRUb7T69rE557VCRFNFeZMZud">iOS</a>: Taking the same application created for Contacts and deploying it to an iPhone. Demonstrates the steps involved with using http://developer.apple.com, JBDS' Export Native Project and XCode with actual deployment to a local iPhone.Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-91071556658274165962014-01-31T10:34:00.001-05:002014-01-31T10:34:35.079-05:00iOS APNS & Android GCM Push with Apache Cordova (Phonegap)Here are my instructions for Hello World, a tutorial with Aerogear's Unified Push Server that allows you to send iOS and Android push notifications to Apache Cordova/Phonegap/HTML5 client applications. If you need help, the best place to hang out is on irc.freenode.net #aerogear channel
<p>
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-GmvcLy1BWXo/UuuyTURynnI/AAAAAAAACno/QeuApr-XFss/s1600/HelloAerogear.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-GmvcLy1BWXo/UuuyTURynnI/AAAAAAAACno/QeuApr-XFss/s320/HelloAerogear.jpg" /></a></div>
<p>
The instructions can be found in the readme.txt file and the sample code, while not necessary to follow the tutorial is also available at github
<a href="https://github.com/burrsutter/hellopush">https://github.com/burrsutter/hellopush</a>
The primary difference between the instructions in the readme.txt and the provided solution is that I added logic to address the OS configuration.
If you are an Eclipse user, JBoss is adding a plugin for Phonegap/Apache Cordova project creation - here is a video to see it in action:
<a href="https://vimeo.com/82204444">https://vimeo.com/82204444</a><br>
<a href="https://vimeo.com/81565404">https://vimeo.com/81565404</a><br>
<p>
My Aerogear Unified Push Server instance is running at OpenShift - sign-up is free and it only takes a few clicks to select the Aerogear Push 0.X quickstart and you are up and running.
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-6EPuYnh1s0c/Uuu2TQal30I/AAAAAAAACn0/c6djtNxuLC8/s1600/2014-01-31_0940.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-6EPuYnh1s0c/Uuu2TQal30I/AAAAAAAACn0/c6djtNxuLC8/s320/2014-01-31_0940.png" /></a></div>
<p>
Aerogear Cordova Push Plugin (HelloWorld)
<p>
0. getting the Cordova command line tool installed for Mac <br>
sudo npm install -g cordova<br>
cordova -version<br>
3.3.1-0.1.2<br>
<a href="http://cordova.apache.org/blog/releases/2013/07/23/cordova-3.html">http://cordova.apache.org/blog/releases/2013/07/23/cordova-3.html</a>
<p>
Cordova Command Line Guide<br>
<a href="http://cordova.apache.org/docs/en/3.0.0/guide_cli_index.md.html">http://cordova.apache.org/docs/en/3.0.0/guide_cli_index.md.html</a>
<p>
npm itself comes from Node.js <a href="http://nodejs.org/download">http://nodejs.org/</a><br>
npm -version<br>
1.3.25<br>
node --version<br>
v0.10.25<br>
You will also need the Android SDK installed for your OS and in your PATH -
commands like "android" and "adb devices" should execute <br>
You will also need "curl", if you type in "curl" and hit return <br>
<code>curl: try 'curl --help' or 'curl --manual' for more information</code>
<p>
1. Cordova create has the following sequence: "cordova create folderName bundleID appName"<p>
<code>cordova create hellopush com.burrsutter.hellopush "Hello Push"</code>
<p>
2. edit hellopush (bring up your editor)
if you open config.xml, you should see
<code>
<name>Hello Push</name>
<widget id="com.burrsutter.hellopush"
</code>
the widget id becomes the bundle identifier, it must unique identify your iOS app,
globally when you setup your iOS provisioning profile, you will need this unique bundle ID
<p>
3. cd hellopush
<p>
4. cordova platform add android
<p>
5. cordova plugin search push
<p>
6. cordova plugin add org.jboss.aerogear.cordova.push
<p>
7. There is a console.log in the default project as well as in the
suggested example code, so make sure to also add the console plugin<p>
<code> cordova plugin add org.apache.cordova.console</code>
<p>
and to know the mobile OS install the device plugin<p>
<code> cordova plugin add org.apache.cordova.device</code>
<p>
8. index.html - insert the following below <div id="deviceready"> but inside <div class="app">
<code>
<font size="6">
<div id="notify">notifications </div>
<div id="debug">debug </div>
</font>
</code>
<p>
9. index.js<p>
<pre>
successHandler: function (message) {
var debug = document.getElementById("debug");
console.log(message);
debug.innerHTML = "success: " + message;
},
errorHandler: function (message) {
var debug = document.getElementById("debug");
console.log(message);
debug.innerHTML = "error: " + message;
},
onNotification: function (e) {
// alert(e.alert);
var notify = document.getElementById("notify");
notify.innerHTML = e.alert;
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the
// 'receivedEvent' function, we must explicity call
// 'app.receivedEvent(...);'
onDeviceReady: function() {
var config = {
senderID: "492580885002",
pushServerURL: "https://aerogear-html5.rhcloud.com",
variantID: "b3852e72-92e1-4b05-a4bd-b549438d4943",
variantSecret: "13c9daca-457e-4837-bc26-769ba572a940"
};
push.register(
app.successHandler,
app.errorHandler,
{
"badge": "true",
"sound": "true",
"alert": "true",
ecb: "app.onNotification",
pushConfig: config
});
app.receivedEvent('deviceready');
},
</pre>
Note: senderID, variantID and variantSecret were all setup in the Push Console
at pushServerURL <p>
<a href="http://aerogear.org/docs/guides/aerogear-push-android/google-setup/">http://aerogear.org/docs/guides/aerogear-push-android/google-setup/</a><p>
<a href="http://aerogear.org/docs/guides/AdminConsoleGuide/">http://aerogear.org/docs/guides/AdminConsoleGuide/</a>
<p>
10. Run "adb devices" to see if an android device is plugged in correctly then
<code>cordova run android</code>
<p>
this will install and launch the app on your plugged in, developer-ready
Android phone/tablet
<p>
11. then send a message
<pre>
curl -3 -u \
"f07c43a6-bb0a-4bb7-a1eb-a368db272212:e2cf19c3-6636-4712-bbe8-26b7c1ac9c09" \
-v -H "Accept: application/json" -H "Content-type: application/json" \
-X POST -d '{"message": {"alert":"Hello AeroGear", "badge":1}}' \
https://aerogear-html5.rhcloud.com/rest/sender
</pre>
NOTE: this is not wrapping correctly here in Blogger, here is the <a href="https://gist.github.com/burrsutter/8734226">gist</a>
and I included a send.sh to make sending in numerous messages a little easier. Usage:
<code> ./send.sh "My Message" 3</code>
<p>
where f07c43a6-bb0a-4bb7-a1eb-a368db272212 <br>
is your Application ID from the web console <br>
where e2cf19c3-6636-4712-bbe8-26b7c1ac9c09 <br>
is the Master Secret also from the web console
<p>
Success, send a few more messages, changing the "Hello AeroGear Unified Push!"
<p>
Note: If you wish to deploy the app to another Android device, unplug the
current one and plug in the new one - use "cordova run android" again and it
will deploy to the new device - the app will still function and receive push
notifications without being plugged in on USB.
<p>
12. Add iOS, if on Mac OS X, with XCode installed (via Mac AppStore is
easiest) and you have previously paid your $99 and know how to get
around at http://developer.apple.com
<pre>
cordova platform add ios
</pre>
13. Setup your provisioning profile:<p>
<a href="http://aerogear.org/docs/guides/aerogear-push-ios/app-id-ssl-certificate-apns/">http://aerogear.org/docs/guides/aerogear-push-ios/app-id-ssl-certificate-apns/</a>
and <p> <a href="http://aerogear.org/docs/guides/aerogear-push-ios/provisioning-profiles/">http://aerogear.org/docs/guides/aerogear-push-ios/provisioning-profiles/</a>
and<p>
<a href="http://aerogear.org/docs/guides/AdminConsoleGuide/">http://aerogear.org/docs/guides/AdminConsoleGuide/</a>
<p>
14. Add the variant for iOS via the Unified Push Server web console
- uploading the .p12 file and its associated passphrase
<p>
15. look under platforms\ios and you should see a Hello Push.xcodeproj -
double click on the .xcodeproj
<p>
If you see the General tab, double check the bundle identifier of
com.burrsutter.hellopush or whatever you made yours
<p>
Modify the index.js (in XCode) for the proper variantID and variantSecret
from the Unified Push Server console
<p>
16. Assuming you have previously registered your plugged in iOS device
with the developer.apple.com portal, you can now hit the big arrow and
target your device.
<p>
When the app installs it should prompt you to accept push notifications.
<p>
17. Look for a new installation/device token under your newly added iOS
variant in the UPS web console. If you see no instance/device token
then something failed.
<p>
18. Finally, send a message, it should hit all the android & iOS devices
that you have deployed the app to.
<p>
Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com8tag:blogger.com,1999:blog-7119932468549495710.post-48352688713466673792013-12-18T08:36:00.001-05:002013-12-18T19:39:14.567-05:00Eclipse does not contain the JNI_CreateJavaVM - Mac OS X (10.9) MavericksBased on a recent experience, I thought it would be useful to post this blog for others who might also be struggling with this particular error message.
After the Mac OS X Mavericks (10.9) upgrade, I hit the following error message from Eclipse Kepler (4.3.1) 32-bit
<blockquote>The JVM shared library "/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/../jre/lib/server/libjvm.dylib"
does not contain the JNI_CreateJavaVM symbol.</blockquote>
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-I1hWOWN-p6s/UrGd1g0p6PI/AAAAAAAACmk/qT9OC0c6wec/s1600/2013-12-18_0747.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-I1hWOWN-p6s/UrGd1g0p6PI/AAAAAAAACmk/qT9OC0c6wec/s320/2013-12-18_0747.png" /></a></div>
Also, there is another error message you might receive from Eclipse:
<blockquote>
To open “Eclipse.app” you need a Java SE 6 runtime. Would you like to install one now?
</blockquote>
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-n3GVMExQ-9o/UrGiYMkY0OI/AAAAAAAACm8/x-8vRdif7Y4/s1600/2013-12-18_0822.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-n3GVMExQ-9o/UrGiYMkY0OI/AAAAAAAACm8/x-8vRdif7Y4/s320/2013-12-18_0822.png" /></a></div>
I read through this bug report at eclipse.org - <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=411361">https://bugs.eclipse.org/bugs/show_bug.cgi?id=411361</a> and that gave me some ideas as to how to workaround my Eclipse on Mavericks issues.
Easy solution, download & install the Oracle JDK 7 and make sure to use the 64-bit version of Kepler. I have had Java 7 on the machine for a while and Java 8. I have historically used the 32-bit version of Eclipse which worked great with Java 6 which was the default from the Mac OS X perspective.
Here is what I think happened, Mac OS X Lion (10.7) included Apple's Java 6 JRE, with Mac OS X Mavericks (10.9) it is no longer included. The Apple Java 6 supported 32-bit & 64-bit with a command line switch, Eclipse Juno & Kepler were seemingly able to handle that scenario. Now, Java 7 comes directly from Oracle and is installed separately on my box.
In order to address the "you need a Java SE 6 runtime" specifically, I also needed to update your Info.plist in the JDK7 at /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Info.plist with the following in the JVMCapabilities section:
<pre>
<key>JVMCapabilities</key>
<array>
<string>CommandLine</string>
<string>JNI</string>
<string>BundledApp</string>
<string>WebStart</string>
<string>Applets</string>
</array>
</pre>
Once the changes to Info.plist have been made you will need to reboot for it to take effect.
Some other settings that might be important:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home
<strike>And I do not recall making any changes to Eclipse.ini that mattered, what follows is what I have right now on my machine, provided in case there is something tweaked in your installation.
</strike>
EDIT: It turns out that I did need to update my eclipse.ini, eclipse was picking up a Java 8 installation that I had and I needed to force it back to Java 7 as it was causing some other problems.
Eclipse.ini for the 64-bit installation of Eclipse (underneath Eclipse.app-Contents-MacOS)
<pre>
-startup
../../../plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.standard.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vm
/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/java
-vmargs
-Dosgi.requiredJavaVersion=1.6
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XX:MaxPermSize=256m
-Xms40m
-Xmx512m
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
</pre>
Also, I did make the change recommended at <a href="http://www.eclipse.org/downloads/mac_gatekeeper.php">Eclipse.org/downloads</a>. It should be noted that you won't actually see something named "gatekeeper" in the UI.
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-73x49WLTuiY/UrGfVH5LPeI/AAAAAAAACmw/HiRYPVRpCyw/s1600/2013-12-18_0812.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-73x49WLTuiY/UrGfVH5LPeI/AAAAAAAACmw/HiRYPVRpCyw/s320/2013-12-18_0812.png" /></a></div>
Hopefully that helps, I spent plenty of time using Google looking at Bugzilla and StackOverflow entries but could not find something like this blog post that helped me address both issues (64-bit required, missing Java SE 6 runtime).
Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com4tag:blogger.com,1999:blog-7119932468549495710.post-16563014958820790452013-11-26T11:44:00.000-05:002013-11-26T11:44:02.903-05:00Personal Technology Radar: How to keep up?I gave a short presentation/demonstration to NCSU Computer Science students last night, it was full of various buzzwords, thoughts, random associations, high speed talking, etc. :-)
<p/>
I focused on things like Aerogear (SDKs for mobile app dev, Push Notifications, storage), Vert.x (polyglot async services for the JVM) and showed off JBoss Tools for mobile app dev (<a href="https://vimeo.com/67480300">https://vimeo.com/67480300</a>).
<p/>
One fellow posed a very interesting question to me, "how do you keep up?" and what follows was my off-the-cuff response.
<p/>
Personally,
<ul>
<li> I am no longer able to follow news sites such as HackerNews </li>
<li> I am no longer to follow RSS feeds </li>
<li> I am no longer to keep up with the blogs (via RSS) that show up in my Flipboard account and </li>
<li> I am unable to read even 10% of the messages that follow through Google+ or Twitter, which is where I follow key colleagues and industry experts. </li>
</ul>
Basically, I am unable to consume the "push" news, I am only able to consume the topics I seek out.
<p/>
So, how does a topic show up on my personal technology radar, I follow conference agendas. If you simply look at key conference agendas and then drill-down on those topics yourself it is pretty easy to keep your finger on the pulse of things. Conferences that I have participated in and always enjoy attending when I can are:
<ul>
<li> <a href="http://devoxx.be/">Devoxx</a> - you can watch recordings at <a href="http://www.devnexus.com/">parleys.com</a> </li>
<li> <a href="http://www.devnexus.com/">DevNexus</a> (I founded that one so I have a bias) </li>
<li> <a href="http://nofluffjuststuff.com/">No Fluff Just Stuff</a> </li>
<li> <a href="https://springone2gx.com">SpringOne</a> </li>
</ul>
and we, Red Hat folks, are working on a really cool developer conference ourselves - watch the twitter stream for that announcement. Plus, I am also very interested in <a href="http://uberconf.com/">UberConf</a> and <a href="http://therichwebexperience.com/">The Rich Web Experience</a> - anything that Jay Zimmerman is putting on.
<p/>
There is one slight disadvantage of using this particular filtering mechanism, your feeling for how important a topic is can be slanted based on the abilities of the associated speakers. For instance, someone like James Ward, who is one of the best developer advocates in our industry is not only a great public speaker but he is also fairly high volume - therefore you may be more inclined to delve deeper into one of his topics. The same could be said for many of the excellent presenters that show up for these conferences.
<p/>
There is another more significant disadvantage, if a particular innovation/tool/technique has no evangelist, nobody to talk about it, is so "unpopular" that it does not show up at a conference...well then it tends to miss my radar. So I do have a personal bias towards "popular" topics, ones with buzz, ones with somebody willing to talk about it in public. I allow for this bias because, at the end-of-the-day, I have found that "popular" topics are more likely to have staying power over the course of several years.
<p/>
You would rather not invest dozens if not hundreds of hours in learning a new thing to only have that item fade into history with nobody left using it. Granted, learning for learning sake is still a very good thing. :-)
<p/>
BurrAnonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com1tag:blogger.com,1999:blog-7119932468549495710.post-88689688536221225242012-07-19T08:02:00.001-04:002012-07-19T08:04:10.213-04:00JBoss Toy Store ScreencastIn a <a href="http://burrsutter.blogspot.com/2012/07/jboss-world-keynote-demo-2012.html">previous blog</a>, I wrote an introduction to the various components included in the JBoss Toy Store - that is the name we gave our demo application for JBoss World 2012's Keynote address. The name "toy store" was because we were allowing our "sales staff" to acquire/giveaway cool electronic gadgets or JBoss "schwag" like t-shirts and coffe mugs.
I recently sat down and recorded a screencast of the demo application, making it much easier to see and hopefully easier to following than the recording of the staged event.
Your feedback and comments are always welcome - plus, the <a href="https://github.com/jboss-jdf/jboss-keynote-2012">JBoss Toy Store codebase</a> is open source, I would love to see others forking it on github, making improvements, running the demo at their local JUG with a room full of attendees and then making contributions of code, videos, blogs, etc.
<br />
<br />
<iframe src="http://player.vimeo.com/video/45731657" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe> <p><a href="http://vimeo.com/45731657">JBoss Toy Store Demonstration</a> from <a href="http://vimeo.com/jbossdeveloper">JBoss Developer</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<br />
And if you are interested in JBoss technical content, we have over 150 videos hosted at <a href="https://vimeo.com/jbossdeveloper/videos">Vimeo.com/jbossdeveloper</a>Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-63978728338440481462012-07-02T12:56:00.001-04:002012-07-02T13:04:34.434-04:00JBoss World Keynote Demo 2012In June 2011, we focused our <a href="https://vimeo.com/25258416" target="_blank">keynote demonstration</a> on JBoss' AS7 and Infinispan technology which we delivered as fully supported products (<a href="http://www.redhat.com/products/jbossenterprisemiddleware/application-platform/" target="_blank">Enterprise Application Platform 6</a> and <a href="http://www.redhat.com/products/jbossenterprisemiddleware/data-grid/" target="_blank">JBoss Data Grid 6</a>) this year.<br />
<br />
For 2012, we wanted to make a killer demonstration that was more accessible today - leveraging a core technology that is already officially supported - jBPM 5 in <a href="http://www.redhat.com/products/jbossenterprisemiddleware/business-rules/" target="_blank">JBoss BRMS 5.3</a>. The BPM landscape, normally only accessible by large corporations due to license costs and complex proprietary software offerings...is changing. This blog provides a high-level overview for the various elements that went into the making of the demonstration. We have already opensourced the codebase at <a href="https://github.com/jboss-jdf/jboss-keynote-2012" target="_blank">JBoss Developer Framework</a> (jdf). <br />
<br />
<br />
Recording of the <a href="http://www.youtube.com/watch?v=t1cud4tP4Us" target="_blank">JBoss World 2012 Keynote</a> on YouTube. The demonstration starts at 14:33.<br />
<br /><br />
- BPMN2 modeling (jBPM & Drools - BRMS 5.3)<br />
- Mobile Tasks - HTML5 based task interactions (<a href="http://www.jboss.org/aerogear" target="_blank">Aerogear</a>)<br />
- Enterprise Application Provisioning (<a href="https://appblade.com/" target="_blank">AppBlade</a>)<br />
- Real-time web-based dashboard (<a href="http://www.jboss.org/errai" target="_blank">Errai</a>)<br />
- Cloud/Platform-as-a-Service (<a href="http://www.jboss.org/openshift" target="_blank">OpenShift</a>)<br />
- Gamification <br />
- <a href="https://github.com/jboss-jdf/jboss-keynote-2012" target="_blank">Open Source</a> - makes all of this technology more accessible to all developers<br />
<br /><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-yVDn9enEztI/T_HPed4GLZI/AAAAAAAAAhc/wC0nA5Fym0E/s1600/BRMS_BPMN2_Modeler.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="182" src="http://2.bp.blogspot.com/-yVDn9enEztI/T_HPed4GLZI/AAAAAAAAAhc/wC0nA5Fym0E/s320/BRMS_BPMN2_Modeler.png" width="320" /></a></div>
<div style="text-align: center;">
BPMN2 Web Designer</div>
<br />
<b>BPMN2 + Business Process, Rules & Events</b><br />
<br />
With jBPM & <a href="http://www.jboss.org/drools/" target="_blank">Drools</a>, we are able to model the core business logic via BPMN2 and a decision table using a web-based repository and modeling tool. This means the workflow and its associated rules can easily be changed, in production, without programming and without service disruption.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-oBY2voeoIww/T_HQUR7uhNI/AAAAAAAAAhk/i1i2uA1oo40/s1600/catalog_iphone.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/-oBY2voeoIww/T_HQUR7uhNI/AAAAAAAAAhk/i1i2uA1oo40/s320/catalog_iphone.png" width="169" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
HTML5 + Cordova Application</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-w7Y6TSQKgLU/T_HQXfQaDSI/AAAAAAAAAhs/ufQITzSinQ8/s1600/Screen+Shot+2012-06-30+at+6.31.50+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" src="http://1.bp.blogspot.com/-w7Y6TSQKgLU/T_HQXfQaDSI/AAAAAAAAAhs/ufQITzSinQ8/s320/Screen+Shot+2012-06-30+at+6.31.50+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
AppBlade Provisioning</div>
<div>
<br /></div>
<div>
<b>HTML5, Apache Cordova & AppBlade</b></div>
<br />
We then extended the business logic layer via RESTful services that were consumed by a HTML5 application wrapped with Apache Cordova and delivered via AppBlade - the application was to enable "employees" to use a simple catalog and shopping cart to order schwag (promotional items, giveaways), we had a little sales contest, encouraging audience members to pound in orders via the AppBlade provisioned application or the mobile web using their smartphone's browser.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-twhZ3UaIDHU/T_HQvD6ZSgI/AAAAAAAAAh0/_F7RUcxdfNE/s1600/LeaderBoard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="210" src="http://1.bp.blogspot.com/-twhZ3UaIDHU/T_HQvD6ZSgI/AAAAAAAAAh0/_F7RUcxdfNE/s320/LeaderBoard.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Leaderboard - Errai-based Dashboard</div>
<br />
<b>Dashboard</b><br />
As a live, audience-interactive demonstration, we needed a "dashboard" that could tell us, instantly, how a particular participant was performing - much like any organization would love to have to real-time analytics - we took advantage of Drools Fusion (BRMS 5.3), eventing and then leveraged Errai+GWT to push those events out to a waiting web browsers running on Linux, Mac and Windows. Our dashboard is also an HTML5 application that can leverage the current capabilities of advanced web browsers. This was a great risk - we had several hundred people in the audience, with a saturated WIFI and leveraging free resources at OpenShift. Our Errai-based Leaderboard turned out to be a huge hit! And it clearly demonstrates how the average web browser can be used for real-time process monitoring and it runs great on the iPad.<br />
<br />
<br />
<b>Cloud</b><br />
Not only do we believe that HTML5 and the explosion of mobile devices is having a profound impact on the BPM industry, PaaS, Platform-as-a-Service, will enable many more organizations who could not afford a large IT capital expenditure to roll-out a new system to leverage business rule and business process systems. We also needed to leverage the cloud for a purely practical reason - we were enabling random individuals using their 3G/4G (or conference WIFI) mobile devices - this meant the system had to have a public IP address - <a href="https://openshift.redhat.com/" target="_blank">OpenShift</a> was the answer.<br />
<br />
<b>Gamification</b><br />
We were doing a live, in-person event, where we required audience participation for the software to even function properly. No volunteers, software that was too hard to use or simply the lack of motivation, would have completely changed the dynamic of the demonstration. The leaderboard was the secret ingredient - players were able to see their name on the board and instantly see how their activities on their phones were impacting the business scenario. The concepts of gamification for BPM can obviously get much more sophisticated than what you see in our demo, however, the core concepts are there - make it competitive, recognize and reward the winner, build a team to play along and acknowledge and reward as many random players as possible - encouragement & motivation. Perhaps in a future version we would offer badges!<br />
<br />
<b>Open Source</b><br />
Not only is are the key products behind this demonstration open source, the actual <a href="https://github.com/jboss-jdf/jboss-keynote-2012" target="_blank">demo code</a> is itself also open source - we hope that many of you grab the codebase and run this same presentation at your local JUG - run it on OpenShift - have your audience break out their phones and give it a try!<br />
<br />
A huge thank you to Kevin Conner who served as a our overall architect and engineering lead for the project. All of us took this project on knowing that the actual products upon which the demonstration was based was also being delivered in the same month. It was an exciting challenge and we had a fantastic team - now we get a weekend off and it is time to start planning our next crazy demo - bring on the robots and gesture UI. ;-) <br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-39762984793512783192012-04-23T07:50:00.000-04:002012-04-23T07:50:38.433-04:00My Getting Started Experience/Tutorial with Appcelerator Titanium 2.0 and Appcelerator Cloud Services (formerly known as CocoaFish)<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-cmD3LToUCo0/T5MoUGlRjxI/AAAAAAAAAMk/xyIkHUaBss8/s1600/Screen+Shot+2012-04-21+at+5.35.59+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="121" src="http://4.bp.blogspot.com/-cmD3LToUCo0/T5MoUGlRjxI/AAAAAAAAAMk/xyIkHUaBss8/s320/Screen+Shot+2012-04-21+at+5.35.59+PM.png" width="320" /></a></div>
<br />
First, I am a complete newbie when it comes to Appcelerator though I am comfortable with JavaScript and cloud related technologies. I have spent time with Azure (C# via Visual Studio), Cloud Foundry, Heroku, Google App Engine, Amazon's Beanstalk and of course Red Hat's OpenShift as PaaS (platform-as-a-service) offerings.<br />
And I have been able to start digging into various client-side development technologies like jQuery Mobile + PhoneGap/Apache Cordova (<a href="https://community.jboss.org/wiki/ConvertingAnAeroGearPOH5WebAppToAHybridAppWithApacheCordova" target="_blank">see Kris' article</a>) and just recently I tried out some Objective-C via XCode and the fantastic <a href="https://console.kinvey.com/#docs/iOS/iOS-Quickstart-Tutorial" target="_blank">Kinvey quickstart tutorial</a>.<br />
<br />
Recently, I have had several people I know and respect tell me that Appcelerator Titanium is the best solution for cross-platform mobile application development, it uses JavaScript as its primary language therefore the average jQuery front-end to Java back-end guy like myself should be able to learn it easily. Plus, Appcelerator Titanium is based on Eclipse which is something I have spent a lot of time with for my JBoss "day job" as evidenced by all kinds of <a href="http://docs.jboss.org/tools/movies/" target="_blank">screencasts</a>.<br />
<br />
My specific interest in mobile is mostly related to how to communicate with a "backend" - and now it seems the term "BaaS" for backend-as-a-service is starting to become more popular with several offerings now available such as <a href="https://parse.com/" target="_blank">Parse</a>, <a href="http://www.kinvey.com/" target="_blank">Kinvey</a>, and <a href="http://stackmob.com/" target="_blank">StackMob</a>. The primary difference between a BaaS vs a PaaS is that BaaS assumes the developer wishes to focus only on his/her client-side code written in Objective-C, Android Java, JavaScript, HTML5 + a JS lib (e.g. Backbone) - all the user management, data & blob storage, push notifications, etc are all managed through a client-side API and a web console. In other words, a BaaS has no server-side coding to worry with. A <a href="https://openshift.redhat.com/app/" target="_blank">PaaS</a> on the other hand, assumes the developer wishes to write custom server-side logic in PHP, Perl, Java, JavaScript for Node.js, etc.<br />
<br />
On April 17. 2012, <a href="http://www.appcelerator.com/company/news/press/release-04-2012-two-launch" target="_blank">Appcelerator announced Titanium 2.0</a> where the most important feature (IMHO) is integration with the recently acquired CocoaFish - cloud services for the mobile developer, now called Appcelerator Cloud Services.<br />
<br />
And here it is April 21st and I decided to spend my Saturday giving it a try and writing up this blog. :-)<br />
<br />
Keep in mind that my primary goal is to be able to store & retrieve data associated with my mobile application "in the cloud" and ideally, share data between multiple instances (multiple devices) of my application. Unfortunately, that particular use case does not have a tutorial and what follows are the basic steps that I followed to get some simple things working.<br />
<br />
Note: There are a few documents that I found to be useful:<br />
<br />
<div class="p1">
<a href="http://cloud.appcelerator.com/docs/quickstart" target="_blank">Quickstart</a></div>
<div class="p1">
<a href="http://docs.appcelerator.com/titanium/2.0/index.html#!/guide/Integrating_with_Appcelerator_Cloud_Services" target="_blank">Integrating with Appcelerator Cloud Services</a></div>
<div class="p1">
</div>
<div class="p1">
<a href="http://docs.appcelerator.com/titanium/2.0/index.html#!/guide/Integrating_with_Appcelerator_Cloud_Services" target="_blank">API Docs</a></div>
and there are some examples that are installed on your local machine. In the case of a Mac, you might be able to find them at:<br />
<br />
<div class="p1">
$HOME/Library/Application Support/Titanium/modules/commonjs/ti.cloud/2.0.1/example</div>
<br />
For this particular weekend (April 21st), I was unable to find a "from scratch" tutorial, so I had to dig around and follow some hunches. Hopefully this blog post inspires the good folks at Appcelerator to provide a nice getting started/tutorial for ACS with a Titanium client application.<br />
<br />
1) Register at Appcelerator.com - this was a little bit tricky, I had originally went to "cocoafish.com" which redirected me to http://www.appcelerator.com/cloud and from there I clicked on the Start Using Cloud Services For Free button. This was a bit awkward as it had me fill in a form and await an email verification, it then would ask me to login, sign-up, login again. After about four attempts at the login it seemed to feel that I belonged and settled down. It could be I was just trying to move to fast for the system. Preserving pays off - just login a couple of more times. :-) Why did I start with "cocoafish"? Because I did not read the press release until after I attempted to sign up, so I did not really know what the new name/website was.<br />
<br />
2) Download Titanium Studio - I won't bore you with the details of download & installation as it is very straightforward - and I had previously installed Titanium Studio but never really used it - so upon launching it this past Friday night - it automatically knew the 2.0 update was ready - I just followed the typical Eclipse update process and was painlessly upgraded. I do believe you will need XCode and the iOS SDK installed on your machine as well and I already had that installed from previous attempts at using PhoneGap and Objective-C.<br />
<br />
3) Back at the <a href="https://my.appcelerator.com/apps" target="_blank">ACS web console</a>, I created a ACS only application called ToDo - why did I choose ACS only and name it ToDo? I really cannot say, it was somewhat random and "felt right".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-X_wn7bthOwM/T5MKrAkclrI/AAAAAAAAAK0/JAgsUVvjATY/s1600/Screen+Shot+2012-04-21+at+12.39.19+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="106" src="http://1.bp.blogspot.com/-X_wn7bthOwM/T5MKrAkclrI/AAAAAAAAAK0/JAgsUVvjATY/s320/Screen+Shot+2012-04-21+at+12.39.19+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-jqFRzlOUKx0/T5MLCcria5I/AAAAAAAAAK8/BLBKxG6J9iY/s1600/Screen+Shot+2012-04-21+at+3.31.06+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="104" src="http://2.bp.blogspot.com/-jqFRzlOUKx0/T5MLCcria5I/AAAAAAAAAK8/BLBKxG6J9iY/s320/Screen+Shot+2012-04-21+at+3.31.06+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Then I went back to Titanium Studio to begin the development project - perhaps it was possible to create the ACS App from within Studio but I did not/have not notice it - so my process is to build both halves, client & server and then connect the two.<br />
<br />
4) File -> New -> Titanium Mobile Project<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-WngbL7QkfnI/T5MNu6aa5JI/AAAAAAAAALE/iUrbDnIay7k/s1600/Screen+Shot+2012-04-21+at+3.42.06+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="48" src="http://3.bp.blogspot.com/-WngbL7QkfnI/T5MNu6aa5JI/AAAAAAAAALE/iUrbDnIay7k/s320/Screen+Shot+2012-04-21+at+3.42.06+PM.png" width="320" /></a></div>
<br />
<br />
Project name: CloudUsers (note: screenshot shows CloudUsers2 because I ran through this twice)<br />
App Id: com.yourcompany.cloudusers (note: I am Java guy so I used a "package name")<br />
Company/Personal URL: http://www.yourcompany.com<br />
and Automatically cloud-enable this application should be checked by default.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-bVRyXiaGwzY/T5MOu2rUOaI/AAAAAAAAALM/R8hCF6b9KQc/s1600/Screen+Shot+2012-04-21+at+3.43.45+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-bVRyXiaGwzY/T5MOu2rUOaI/AAAAAAAAALM/R8hCF6b9KQc/s320/Screen+Shot+2012-04-21+at+3.43.45+PM.png" width="313" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Select Next</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Select Single Window Application</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-TDt0uUanhLg/T5MPCNuflCI/AAAAAAAAALU/1p43ClPrjxU/s1600/Screen+Shot+2012-04-21+at+11.13.27+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-TDt0uUanhLg/T5MPCNuflCI/AAAAAAAAALU/1p43ClPrjxU/s320/Screen+Shot+2012-04-21+at+11.13.27+AM.png" width="313" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
and Select Finish</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Note: After working with several cloud offerings, I was expecting that the New wizard would prompt me for my ACS app - ideally provide a list of the apps described in the ACS web console. The next step is how I addressed this disconnect between my client-side app and the ACS service.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
5) Edit tiapp.xml to inject your ACS App's keys. You will wish to match up the various ACS keys with what is in the web console. Unfortunately, the web console and this XML file have slightly different names for each key - that can be an issue for the newbie.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-HZlUQW59M-Q/T5MRINDIenI/AAAAAAAAALc/HqTwgeBvNkc/s1600/Screen+Shot+2012-04-21+at+3.56.41+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="102" src="http://2.bp.blogspot.com/-HZlUQW59M-Q/T5MRINDIenI/AAAAAAAAALc/HqTwgeBvNkc/s320/Screen+Shot+2012-04-21+at+3.56.41+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="p1">
"acs-api-key-development"= APP Key</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-JaVD8gEoEdU/T5MRoYtnDxI/AAAAAAAAALk/pO1QnbPX_Cg/s1600/Screen+Shot+2012-04-21+at+3.59.09+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="136" src="http://2.bp.blogspot.com/-JaVD8gEoEdU/T5MRoYtnDxI/AAAAAAAAALk/pO1QnbPX_Cg/s320/Screen+Shot+2012-04-21+at+3.59.09+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Note: double clicking on the APP Key data does not highlight it correctly in the web console. So be a little cautious with your highlight to copy & paste - double clicking tends to also grab the string "Key".</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
In the top right-hand corner of the web console, there is an option for PRODUCTION and DEVELOPMENT, make sure DEVELOPMENT is selected for the "acs-api-key-development" property. Then click on PRODUCTION to get it's APP Key.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Click on Show OAuth Credentials</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-fNniwcz0moY/T5MTWpjMK0I/AAAAAAAAALs/oyo_w_eyPq8/s1600/Screen+Shot+2012-04-21+at+4.03.51+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="http://3.bp.blogspot.com/-fNniwcz0moY/T5MTWpjMK0I/AAAAAAAAALs/oyo_w_eyPq8/s320/Screen+Shot+2012-04-21+at+4.03.51+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="p1">
"acs-oauth-key-development"= OAuth Consumer Key<br />
"acs-oauth-secret-development" = OAuth Secret</div>
You can follow the same basic steps to get the Production keys.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Save your changes to tiapp.xml </div>
<br />
6) Create some users, you can not create data (custom objects) without first having a user. Open up ui/common/FirstView.js and modify it so you have several textfields and a button - to create a new user. First, declare the Cloud variable to interact with ACS:<br />
<br />
<div class="p1">
<span class="Apple-tab-span"> </span><span class="s1">var </span>Cloud <span class="s2">= </span>require(<span class="s3">'ti.cloud'</span>);</div>
<div class="p1">
<span class="Apple-tab-span"> </span>Cloud.debug <span class="s2">= </span><span class="s4">true</span>;</div>
<div class="p1">
<br /></div>
<div class="p1">
I placed these lines directly inside of "function FirstView", perhaps they should have gone elsewhere but I am brand new to Appcelerator and it worked fine in this location.</div>
<div class="p1">
<br /></div>
<div class="p1">
Then add a series of textfields, I found that if you type in "text" and hit Control-Space, Titanium Studio will then drop in a generic declaration of a Ti.UI.createTextField block as well as an eventlistner. This is a tremendous aid to developer productivity. Just note that there are some odd things about this content assist feature:</div>
<div class="p1">
a) A textfield comes with the following property set:</div>
<div class="p1">
softKeyboardOnFocus : Ti.UI.Android.SOFT_KEYBOARD_DEFAULT_ON_FOCUS</div>
<div class="p1">
which causes a runtime error in the iOS simulator, you will need to comment it out.</div>
<div class="p1">
Ideally, Titanium Studio would recognize that my project is not setup for Android and would leave that property out.</div>
<div class="p1">
b) Any component added via this trick "text" with Control-Space or "button" with Control-Space, creates a particular line of code to add the component to the overall "window":</div>
<div class="p1">
parentView.add(componentName);</div>
<div class="p1">
"parentView" needs to be changed to "self" for these Single Window Applications.</div>
<div class="p1">
c) If you use "button" and Control-Space, it creates a button with myHeight, myWidth, myTop and myLeft - those are not valid values - you will need to change them to numbers. Leaving those variable names in your project will result in a nice big red error message.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-07RWJmjzXik/T5Msgt6GeaI/AAAAAAAAAMs/fwmOqk6v1xw/s1600/Screen+Shot+2012-04-21+at+1.04.30+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://2.bp.blogspot.com/-07RWJmjzXik/T5Msgt6GeaI/AAAAAAAAAMs/fwmOqk6v1xw/s200/Screen+Shot+2012-04-21+at+1.04.30+PM.png" width="101" /></a></div>
<br /></div>
<br />
<div class="p1">
<br /></div>
<div class="p1">
The fields you need for a new user form are:</div>
<div class="p1">
username</div>
<div class="p1">
password</div>
<div class="p1">
password_confirmation</div>
first_name<br />
last_name<br />
email<br />
<br />
and then you will need a button, in my case, I called it "Create"<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code> // Listen for click events.
Create.addEventListener('click', function() {
Cloud.Users.create ({
username: userNameField.value,
password: passwordField.value,
password_confirmation : passwordConfirmation.value,
first_name: firstName.value,
last_name: lastName.value,
email: emailAddress.value
}, function (e) {
if (e.success) {
alert('Success');
} else {
alert('Fail');
}
});
});
</code></pre>
<br />
<a href="https://github.com/burrsutter/acscloudusers/blob/master/Resources/ui/common/FirstView.js" target="_blank">Complete listing</a><br />
<br />
7) Test - Hitting the small green arrow in the Titanium Studio toolbar will launch the iOS Simulator (on a Mac, not sure what happens on a Windows machine). <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-_WbfrFamidk/T5McdtMy5fI/AAAAAAAAAL0/14Tov9n5eRk/s1600/Screen+Shot+2012-04-21+at+4.45.22+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/-_WbfrFamidk/T5McdtMy5fI/AAAAAAAAAL0/14Tov9n5eRk/s320/Screen+Shot+2012-04-21+at+4.45.22+PM.png" width="163" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Enter some data in the fields that should be valid and hit the Create button, I am not sure if invalid data (e.g. poorly formed email address) will be rejected by ACS. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-neu_S8I5mLI/T5Mc-qzgTNI/AAAAAAAAAL8/OHf5zePSJCc/s1600/Screen+Shot+2012-04-21+at+4.47.38+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-neu_S8I5mLI/T5Mc-qzgTNI/AAAAAAAAAL8/OHf5zePSJCc/s1600/Screen+Shot+2012-04-21+at+4.47.38+PM.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And then check out the <a href="https://my.appcelerator.com/apps/acs" target="_blank">ACS web console</a> for your application - as you create new users.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-SQz3lIjv794/T5MdO6k_krI/AAAAAAAAAME/3J2-RdI_K2Y/s1600/Screen+Shot+2012-04-21+at+4.48.47+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="56" src="http://2.bp.blogspot.com/-SQz3lIjv794/T5MdO6k_krI/AAAAAAAAAME/3J2-RdI_K2Y/s320/Screen+Shot+2012-04-21+at+4.48.47+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
and drill-down on "Users"</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-Z9ilFnbjzNI/T5MdcfwDu8I/AAAAAAAAAMM/WtqwqRNLjTM/s1600/Screen+Shot+2012-04-21+at+4.49.35+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="163" src="http://1.bp.blogspot.com/-Z9ilFnbjzNI/T5MdcfwDu8I/AAAAAAAAAMM/WtqwqRNLjTM/s320/Screen+Shot+2012-04-21+at+4.49.35+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Like magic, your mobile application's, client-side code is able to modify server-side resources - with no server-side coding required.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
8) Now that you have some users in the system, you can create custom objects with the following block of code:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code> label.addEventListener('click', function(e) {
Cloud.Users.login({
login : 'username3',
password: '123password',
}, function(e) {
if (e.success) {
Cloud.Objects.create({
classname : 'cars',
fields : {
make : 'Ford',
color : 'green',
year : 2010
}
}, function(e) {
if(e.success) {
var car = e.cars[0];
alert('Success:\\n' + 'id: ' + car.id + '\\n' + 'make: '
+ car.make + '\\n' + 'color: ' + car.color + '\\n' + 'year: '
+ car.year + '\\n' + 'created_at: ' + car.created_at);
} else {
alert('Create Error:\\n' + ((e.error && e.message) || JSON.stringify(e)));
}
}); // Cloud.Objects.create
} else {
alert('Login Error:\\n' +
((e.error && e.message) || JSON.stringify(e)));
}
}); // Cloud.Users.login
}); // label.addEventListener
</code></pre>
<br />
<div class="separator" style="clear: both; text-align: left;">
And the result of running this code will create new custom objects which are visible in the <a href="https://my.appcelerator.com/apps/acs" target="_blank">ACS web console</a>.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-NkrxF7S8Dd8/T5MfyQZS6nI/AAAAAAAAAMU/GHC5GI6T9Y4/s1600/Screen+Shot+2012-04-21+at+4.59.34+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="65" src="http://4.bp.blogspot.com/-NkrxF7S8Dd8/T5MfyQZS6nI/AAAAAAAAAMU/GHC5GI6T9Y4/s320/Screen+Shot+2012-04-21+at+4.59.34+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
and when you drill-down on Custom Objects</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-qM6a4uBwBwA/T5Mf8IAZO1I/AAAAAAAAAMc/Idj7qFTZphA/s1600/Screen+Shot+2012-04-21+at+5.00.19+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="132" src="http://2.bp.blogspot.com/-qM6a4uBwBwA/T5Mf8IAZO1I/AAAAAAAAAMc/Idj7qFTZphA/s320/Screen+Shot+2012-04-21+at+5.00.19+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now, one trick that I use is to start new projects to test out new things. In the case of adding a custom object, I made yet another <a href="https://github.com/burrsutter/acscloudcustomobjects" target="_blank">Titanium Mobile Project</a> following the same steps as the one for CloudUsers.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Warning: If you do not first login then you will receive a runtime error of "401: You need to sign in or sign up before continuing" </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-ceW66wMsuuo/T5MtpHdc_xI/AAAAAAAAAM0/kyhKHBuQLrM/s1600/Screen+Shot+2012-04-21+at+12.03.04+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-ceW66wMsuuo/T5MtpHdc_xI/AAAAAAAAAM0/kyhKHBuQLrM/s320/Screen+Shot+2012-04-21+at+12.03.04+PM.png" width="162" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
This error message can be a real head scratcher. Searching in Appcelerator's Q&A (pitiful attempt at forum) does not yield great results (I have a screenshot of that as well). It is also funny that the documentation tells you how to put in the Error message but the result has the "\n" in the string. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
9) Querying for the custom objects does not actually require a user/login - I was able to query in a completely different project using the following block of code in FirstView.js</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>function FirstView() {
//create object instance, a parasitic subclass of Observable
var self = Ti.UI.createView();
var Cloud = require('ti.cloud');
Cloud.debug = true;
// Create a Button.
var Query = Ti.UI.createButton({
title : 'Query Cars',
height : 35,
width : 100,
top : 50
});
// Listen for click events.
Query.addEventListener('click', function() {
Cloud.Objects.query({
classname: 'cars',
page: 1,
per_page: 10
}, function(e) {
if (e.success) {
alert('Success:\\n' +
'Count: ' + e.cars.length);
} else {
alert('Error:\\n' +
((e.error && e.message) || JSON.stringify(e)));
} // else - fail
}) // Cloud.Objects.query
});
// Add to the parent view.
self.add(Query);
return self;
}
</code></pre>
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
With this level of effort, one real day of digging in, including writing up this long blog post. I think I could finish my little application with Appcelerator. My 14 year old son is more interested in using Objective-C and ACS does have a iOS SDK for that style of development. You might see a future blog post where we compare our experiences with building a mobile based apps using both Objective-C and Appcelerator with the same backend services.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Project Sources</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://github.com/burrsutter/acscloudusers" target="_blank">Adding ACS Users at Github</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://github.com/burrsutter/acscloudcustomobjects" target="_blank">Adding ACS Custom Objects at Github</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Why did I put all of this into a blog? I may not get back to looking at ACS and Appcelerator Titanium for several days or weeks - so this posting will help jog my memory and it might be useful for someone else who is trying to get started with <a href="https://www.appcelerator.com/cloud" target="_blank">Appcelerator Cloud Services</a>. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<br />Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com14tag:blogger.com,1999:blog-7119932468549495710.post-3043665923252105512012-04-17T12:23:00.002-04:002012-04-18T08:09:01.059-04:00StartupWeekend with jQuery Mobile, Node.js and MongoDBI recently participated in the <a href="http://triangle.startupweekend.org/" target="_blank">Triangle Startup Weekend</a>, one of many happening around the globe on April 13th -15th as part of the overall <a href="http://startupweekend.org/">StartupWeekend.org</a>. An organization whose goal is to spark entrepreneurship and what follows is my personal experience. Bottom line: everybody with passion & energy should give this a try. It was a great (and exhausting) experience.<br />
<br />
This is an insane event where a team of strangers has to meet on Friday, where someone has the spark of an idea, organizes instantly and attempts to build a business plan, a go to market strategy and an initial MVP - minimum viable product by Sunday before lunch. The majority of the initial ideas involve some form of web or mobile product and that is what interested a technologist like myself. There were hundreds of people at the event, over 50 "founders" with initial ideas who had 60 seconds to pitch to the overall crowd. The audience voted on those ideas - narrowing them down to a top 20. Those idea generating founders were then told, form your team, get to work - final presentations are due on Sunday by noon - the chaos begins!<br />
<br />
There is not even time to learn your teammates last names and you end up remembering folks as "marketing guy", "design girl" or "kid coder". <br />
<br />
I have always been a big believer in that you need to be moving to be learning. And when your time to market as been reduced to a few hours then getting up to pace is critical - get your product to market instantly.<br />
<br />
We formed "Team Truxie" on Friday night, with the initial team meeting around 10pm when we had made grabbed space in a NCSU classroom. The team founders (guys with the idea) attracted a great team - a group that covered business leadership, marketing talent, design and development. We had about 10 minutes to discuss the business problem that we were trying to solve and about 20 minutes to figure out who had what skills. <br />
<br />
That was when one of our founders (Ed) dropped the bomb on us - we needed our product to be in production by 6pm on Saturday, forget noon on Sunday, we had less than 16 hours to build a working mobile application that we would put in front of all the other competitors. And this was one of the secrets to our success - MVP - that minimum viable product - where you can get a very clear understanding of who your potential customers are and what those customers are willing to pay for. Luckily for me, I had spent many hours in the book just a few months ago and it still sits beside my bed - <a href="http://www.amazon.com/The-Lean-Startup-Entrepreneurs-Continuous/dp/0307887898/ref=sr_1_1?ie=UTF8&qid=1334671930&sr=8-1" target="_blank">The Lean Startup by Eric Ries</a>. If you are a professional software developer with an interest in business, this book will appeal to you. My interpretation of the Lean Startup is that the most important goal is learning, product & business model experimentation that drives learning and that you need to iterate rapidly. <br />
<br />
A great example from Lean Startup, did you know that you needed DropBox before you saw it? Well, how do you put your product in front of people who must SEE it to GET it? The demonstration is the best explanation - that creates the best feedback.<br />
<br />
On Saturday evening at 6pm, we had the opportunity to turn all of our competitors into potential customers - the (Ed & Rob) business idea was to automate food trucks - basically mobile restaurants. And one was arriving at the Triangle Startup Weekend event to feed the contestants that Saturday.<br />
<br />
To that end, our founders also saw this as a learning opportunity and other members of the newly founded team understood that Startup Weekend is a competition. The team immediately coalesced around that basic truth - Startup Weekend is a competition, it has rules that are described in a book that defines MVPs, pivots and validation (validated learning), everything most be honed for the 5 minute final presentation. <br />
<br />
With this understanding, the team split into two groups - the business folks focused on the business plan, who are the customers, what are their major pain points, pricing models, marketing strategy, scalability, defensibility etc. This is a critical element of Startup Weekend - can your team identify potential customers and put your idea and your product in front of them?<br />
<br />
Ed (founder numero uno), as a programmer himself, had the idea that we should learn some new technology - he had initially started prototyping with JQuery Mobile (+Phonegap) with a Node.js + Express + MongoDB backend before the event and he already had worked out a contract with Rackspace for hosting our application. Now this was the real trick, the developers joined up because that sounded like cool tech to work with - but no one on the team had used jQuery Mobile nor Node.js in production before - it would be fun, right? :-) At best, a couple of us had worked through a tutorial or two. For myself, I had just built a simple demo application using JQuery Mobile to talk to a JAX-RS endpoint hosted on JBoss the week before. That demo application became the proof-point that illustrated something could be done quickly. Besides, I had been <a href="http://www.youtube.com/watch?v=2msIjsoQcls&list=UU8lACqV5tnawGhqQjv5eVhA" target="_blank">preaching HTML5 style application development</a> for some time now and it was an opportunity to put my thoughts to the test. <br />
<br />
The pressure cooker - we had to build an app, deploy it and put it in front of...our fellow Startup Weekend participants in a few hours. It is hard to describe how challenging it is to meet your fellow developers for the very first time, understand the business problem, identify the key priorities, consider the architecture, setup people's workstations for sharing files, split up tasks, etc. And every possible corner than can get cut does - because the goal is the MVP - the barest minimum that impresses your audience, establishes the vision of the product and for the features it implements, it just works. We could have attempted this with "paper prototypes" or simple mock-ups but for one of the key elements of the overall competition - how fast and how well can the team "gel". And in our case, the core development team (Chris, Corey, Andrew and myself) came together fast. I have never met any of those guys before that Friday night. And by mid-afternoon Saturday, I can honestly say that that team could build most any web-based (or mobile web-focused) application needed by most businesses. A startup's dream - an engineering team that can learn new technology and can crank out value immediately.<br />
<br />
Granted, many of you reading this blog may have more than a couple of hours of experience with JQuery Mobile & Node.js - but our team did not have that level of experience - two of us were Java EE guys, another a Objective-C/C++ desktop developer and another having worked on Java applications that integrated with Google Earth. <br />
<br />
jQuery and jQuery Mobile are incredibly simple to learn if you have a basic understanding of HTML and JavaScript. Moving JSON back and forth between a RESTful endpoint is very easy. This makes prototyping the front-end go incredibly fast. There are plenty of gotchas or "aha" moments associated with having multiple pages in a single HTML file and dynamically rendered elements that also have their own event listeners that caused some initial bewilderment - especially by a Java EE guy like me, who has mostly lived on "the server side".<br />
<br />
In addition, we were working in the same room as the business strategy folks who were filling up the walls with notes, conducting online surveys, debating the pricing model, discussing market dynamics - and discussing these items with outside observers and mentors - there was a constant parade of people coming into the room to chat with us. <br />
<br />
Another interesting aspect of this adventure was using MongoDB, most of us had worked with a RDBMS before, so you make some early mistakes - especially when you have a crazy deadline and you just met your fellow adventurers a few hours before. While Node.js + Express + Mongo makes it very easy to retrieve data and throw that JSON out to a jQuery client application (using $.getJSON) and it is also easy to receive a POST with a JSON payload to be persisted - it is NOT a RDBMS - do not normalize the data model. We made that initial mistake - and when we had to write our first report - we realized that there was no simple join to get the data back out again. Luckily, <a href="http://mizage.com/" target="_blank">Chris</a> (strong code-fu) was able to show off his python skills to rip through the data to produce the report we needed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-t6nQF0Xy4uc/T42Lcf1JLPI/AAAAAAAAAKo/jU7zcgcqxlw/s1600/truxie-1.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="http://3.bp.blogspot.com/-t6nQF0Xy4uc/T42Lcf1JLPI/AAAAAAAAAKo/jU7zcgcqxlw/s320/truxie-1.jpeg" width="320" /></a></div><br />
Remember, the key thing is validation (and learning), we put our application out in front of a live audience. Taking all the orders for the food truck that specific evening, asking all parties what they thought of the idea. And of course we had to interview the food truck operator.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/fISCdrz4cNE?feature=player_embedded' frameborder='0'></iframe></div><br />
<br />
This story might terrify you - and it certainly caused me to lose a fair bit of sleep over the weekend - but I have had crazier projects in the past as a consultant. For those of you who have worked with small businesses or simply been in the consulting game - you get the assignment of "you are now an expert in technology X, show up at the customer site this coming Monday, you get the whole weekend to prepare". Or better still, the small business owner that has contracted you to build him a new custom application, who does not understand things like what an "alpha" test is and the next thing you know...you are taking millions of dollars in real transactions on a piece of code that you were not able to test and was not completed. Performing surgery on the live system on the production server - yep, I have done that.<br />
<br />
Now, I have purposely been somewhat vague about the overall idea and the details of the architecture. That is because the Truxie founders will likely wish to pursue this opportunity further. And while my day job is focused on open source - I consider the code we prototyped to be Truxie's IP, not something I can publish to the world at large. With that said, I am working on a tutorial that uses jQuery Mobile with a Java EE 6 backend - JAX-RS & JPA to target a RDBMS. One of the coolest things about a jQuery front-end is that it is completely portable - build the backend in anything you like. <br />
<br />
I did manage to make a demo video of the application, navigating the application with my lefthand while filming with right hand - that was a trick all by itself. Yes, I removed the sound - but I should have left it in, you could have experienced all the discussion and chaos going on around me. <br />
<br />
<div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/wCsPcWlvjYU?feature=player_embedded' frameborder='0'></iframe></div><br />
<br />
Myself and my JBoss by Red Hat teammates will be publishing some additional tutorials that show off how to use JBoss as your backend and jQuery + Backbone.js + Underscore.js as your frontend over the next few weeks. Keep an eye on <a href="http://www.jboss.org/developer">www.jboss.org/developer</a> for updates.<br />
<br />
And I plan to continue experimenting with Node.js + Express + MongoDB. But that will have to wait a bit longer, my son wishes to learn more about iOS game development. So I installed XCode and will start digging into Cocos2D tonight - keeps you young. :-)<br />
<br />
Perhaps next year's Triangle Startup Weekend will have a father + son team competing. Plus, my wife is an <a href="http://kudzucreative.com/" target="_blank">amazing marketer</a> - we almost have a complete team - just need the idea person!Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com2tag:blogger.com,1999:blog-7119932468549495710.post-6309131413088164242012-02-18T11:44:00.000-05:002012-02-18T11:44:40.732-05:00Barnes and Noble FAIL<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-XWbCOhveP7M/Tz_SI5ZCSeI/AAAAAAAAAKA/l3JiIx1NHFs/s1600/Screen+Shot+2012-02-18+at+11.22.43+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="270" src="http://4.bp.blogspot.com/-XWbCOhveP7M/Tz_SI5ZCSeI/AAAAAAAAAKA/l3JiIx1NHFs/s320/Screen+Shot+2012-02-18+at+11.22.43+AM.png" width="320" /></a></div><br />
I know, I rarely blog. I tweet some but otherwise blogging is a challenge - just too many communication tools to keep up with. :-) I only login into Facebook about once a month and into LinkedIn about once every 3 months. And my email inboxes normally have several hundred unread emails. Well, enough about my communication challenges. Why am I writing this blog? Because I used to like Barnes & Noble, I still enjoy walking into the store, browsing the shelves of books, picking up a cup of coffee, etc. I am the owner of many hundreds of books and I have spent more time in bookstores than most people have spent at movie theaters. The problem is that years ago I started buying almost everything from Amazon, as a Plus member, shipping is free and insanely fast. Furthermore, I am starting to get most of my books directly to the Kindle app on my Android phone or iPad. <br />
<br />
Well, I tried to make an impulse buy/online purchase from <a href="http://barnesandnoble.com/">barnesandnoble.com</a> today and the stupid checkout process requires a phone number? Which is fine but when I entered my name/address, I skipped over the phone number field - it was not marked as mandatory. And then I was stuck - I could not return to change my contact information but I also could not move forward to complete the transaction. Perhaps I am a dumb-user but I hope B&N is tracking failed transactions. I tend to be a hurried end-user and I like my shopping carts/checkout process to be nearly brain-dead easy - otherwise I will just go find the product on Amazon.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-xX6UcbAoW6k/Tz_TrYSF2eI/AAAAAAAAAKI/Xo2cVgfW2Kk/s1600/Screen+Shot+2012-02-18+at+11.13.49+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="134" src="http://3.bp.blogspot.com/-xX6UcbAoW6k/Tz_TrYSF2eI/AAAAAAAAAKI/Xo2cVgfW2Kk/s320/Screen+Shot+2012-02-18+at+11.13.49+AM.png" width="320" /></a></div><br />
<br />
And did I mention that I really hate, contact us HTML forms? Especially ones presented as modal dialogs? Plus, broken image links, especially in your "Contact Customer Service" section really make you look bad. After all, I have navigated to this section because I have a question or a concern to raise. And I wrote this blog because the "Send Email" web form failed to accept my gmail address.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-vVUKVp72Si4/Tz_VE4tOgCI/AAAAAAAAAKQ/wYoTHOb96ks/s1600/Screen+Shot+2012-02-18+at+11.40.54+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="113" src="http://1.bp.blogspot.com/-vVUKVp72Si4/Tz_VE4tOgCI/AAAAAAAAAKQ/wYoTHOb96ks/s320/Screen+Shot+2012-02-18+at+11.40.54+AM.png" width="320" /></a></div><br />
<br />
I guess I can still go to B&N to get the coffee and sit down and read my Kindle-based books!Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-70103416849125004572011-03-02T13:41:00.000-05:002011-03-02T13:41:21.344-05:00Java, Spring, Google, JBoss, Scala, Git, jQuery...DevNexus 2011DevNexus 2011 - March 21st & 22nd (<a href="http://www.devnexus.com/">www.devnexus.com</a>) - Registration will be closing soon.<br />
<br />
Several large teams have already registered and this is the best event to have your team attend - the injection of new technologies, techniques and ideas from some of the world's best technologists as well has having other professional software developers to mingle with. We will soon hit max capacity for the event so please complete your registrations today.<br />
<br />
The DevNexus organizing committee looks for the best speakers and hottest topics in the software development industry and this year we have had a tremendous response from notable presenters. The following are just a few of the DevNexus speakers:<br />
* Jevgeni Kabanov - the founder and CTO of ZeroTurnaround (JRebel) will be addressing JVM memory management and classloading - these are excellent sessions for your most hardcore Java coders<br />
* Dick Wall - of the JavaPosse will dive into functional languages and overall best practices for software practitioners<br />
* Bob McWhirter - the prolific founder of open source solutions such as Codehaus.org, Drools and Groovy will address Ruby/JRuby on his new project TorqueBox - the power of Ruby raised to the power of JBoss<br />
* Claus Ibsen - the project lead for Camel and co-auther of the "Camel in Action" book will focus on enterprise integration<br />
* Mark Fisher - the project lead for Spring Integration will address AMQP and the "Cloudy Future of Integration"<br />
* Hans Dockter - the founder and project lead for Gradle will focus on automated build systems<br />
<br />
And many more notable speakers discussing great topics...<a href="http://www.devnexus.com/s/speakers">http://www.devnexus.com/s/speakers</a><br />
<br />
Hadoop * Git * Scala * Arquillian * Flex * jQuery * Sproutcore * Selenium * Gradle * Camel * Spring Integration, Mobile, Social * JBoss TorqueBox * Shiro * GWT * Google App Engine * NoSQL * The Future of Java...<br />
<br />
If you wish to subscribe to future Atlanta Java Users Group Announcements, please visit <a href="http://www.ajug.org/confluence/display/AJUG/MailingLists">http://www.ajug.org/confluence/display/AJUG/MailingLists</a><br />
<br />
We look forward to seeing you at future AJUG Events and DevNexus 2011.<br />
<br />
Sincerely,<br />
BurrAnonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-46086699053721861512011-02-23T15:02:00.005-05:002011-02-23T16:53:50.939-05:00HTML5 WebSockets AdventureI just recently spent a few days exploring the jungle that is <span class="blsp-spelling-error" id="SPELLING_ERROR_0">WebSocket</span> support in browsers and servers and I lived to tell about it. I say that it is a jungle because it is obvious to me that with the specification (<span class="blsp-spelling-error" id="SPELLING_ERROR_1">IETF</span>) not yet finalized this technology is still on the "bleeding edge".<br /><br />I think it is important to note my particular frame of reference, my world view...I normally do not wish to pull the sources, build my own binary, hack on the default app server jar files, etc. My preference is to find a solution, download a binary version, install/unzip, run and load an out-of-the-box example. In addition, I am looking for a Java-based server, one I can extend with my own custom Java components - ideally a Java <span class="blsp-spelling-error" id="SPELLING_ERROR_2">EE</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_3">Servlet</span> container.<br /><br /><span style="font-weight:bold;">My <span class="blsp-spelling-error" id="SPELLING_ERROR_4">WebSockets</span> Use Case</span><br />Thinking like the average Java web developer, I wish extend pieces of my server-side enterprise infrastructure out to the client browser application. One of the reasons that I am excited about HTML5 is that feels like client-server development of the mid-90s - back in the dark ages of <span class="blsp-spelling-error" id="SPELLING_ERROR_5">PowerBuilder</span> and Delphi. :-) Today, you primarily have to use Adobe Flash Flex for those ultra-rich, real-time capable browser-based <span class="blsp-spelling-error" id="SPELLING_ERROR_6">UIs</span> but that could change with HTML5. Note: I do not consider <span class="blsp-spelling-error" id="SPELLING_ERROR_7">Silverlight</span> nor <span class="blsp-spelling-error" id="SPELLING_ERROR_8">JavaFX</span> to be a real competitor to Flash-based applications at this time.<br /><br />So, I want to build "dashboards", in <span class="blsp-spelling-error" id="SPELLING_ERROR_9">jQuery</span>, where the client-side browser is pushed data in real-time. Where my server-side Java architecture is likely a distributed fabric/grid or messaging and where particular data of interest can flow easily to my end-users just as it does around the average <span class="blsp-spelling-error" id="SPELLING_ERROR_10">datacenter</span>. OK, that might not be the average web app use case, but it is the one I am most interested in.<br /><br /><span style="font-weight:bold;"><br />Step 1: Find a Browser</span><br />First thing to point out is that I am not one of the cool kids - I am still running Windows (v7 64-bit). I haven't joined the rush of hardcore techies who are sporting sexy <span class="blsp-spelling-error" id="SPELLING_ERROR_11">MacBook</span> Pros or big iron Linux workstations.<br />* Chrome 9.0.597.98 - supports <span class="blsp-spelling-error" id="SPELLING_ERROR_12">WebSockets</span> out of the box<br />* Safari 5.0.3 (7533.19.4) - supports <span class="blsp-spelling-error" id="SPELLING_ERROR_13">WebSockets</span> out of the box<br />* Opera 11.01 build 1190 - needs to be enabled by end-user<br /><a href="http://my.opera.com/ODIN/blog/2010/12/17/new-html5-features-inhttp://www.blogger.com/img/blank.gif-opera-11">http://my.opera.com/ODIN/blog/2010/12/17/new-html5-features-in-opera-11</a><br />* <span class="blsp-spelling-error" id="SPELLING_ERROR_14">Firefox</span> 4.0b11 - needs to be enabled by end-user<br /><a href="https://developer.mozilla.org/en/WebSockets">https://developer.mozilla.org/en/WebSockets</a><br />* <span class="blsp-spelling-error" id="SPELLING_ERROR_15">iOS</span> 4.2.1 (8C148) on my iPhone 3G (<span class="blsp-spelling-error" id="SPELLING_ERROR_16">wifi</span> only supported, killed AT&T service plan)<br />* Android 2.2 on my Motorola <span class="blsp-spelling-error" id="SPELLING_ERROR_17">DroidX</span> - no - I also looked at Opera Mobile for the Android but that did not seem to support <span class="blsp-spelling-error" id="SPELLING_ERROR_18">WebSockets</span><br /><br /><span style="font-weight:bold;">Testing browsers for <span class="blsp-spelling-error" id="SPELLING_ERROR_19">WebSockets</span> support</span><br /><a href="http://websocket.org/echo.html">http://websocket.org/echo.html</a><br /><a href="http://jimbergman.net/websocket-web-browser-test/">http://jimbergman.net/websocket-web-browser-test/</a> - however, this one malfunctioned with my FireFox4<br /><br /><span style="font-weight: bold;">Step 2: Learn</span><br /><br />Learn enough to be dangerous, never enough to be great. I am just getting started with a new capability and only had a couple of days to invest so far - needed to get moving as fast as possible. How does every technology explorer get moving these days? Google. Not only is Google your secret weapon for trivia night at the local pizza joint/bar, it can become your lifeline. I found many examples and several of those are now outdated, they just do not work. A few examples are provided by <span class="blsp-spelling-error" id="SPELLING_ERROR_20">Aditya</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_21">Yadav</span> for the book <a href="http://adityayadav.com/DeployingHTML5.aspx">Deploying HTML5</a>. One using Netty and another using Jetty - I could not get either one to work - could be user error or could be they are based on the older version of the spec.<br /><br />One thing that I noticed that demonstrates the relative immaturity of this space, when things do fail, you often do not receive error messages on the servers, nor in the browsers. If you are using a browser-based debugger (e.g. Firebug, Dragonfly), at least you will receive JavaScript error messages, but nothing specific to <span class="blsp-spelling-error" id="SPELLING_ERROR_22">WebSockets</span> malfunction. In the vast majority of my tests there was only silent (but deadly) failure.<br /><br /><span style="font-weight: bold;">Step 3: Find a Server</span><br />My "short-list" of solutions to explore included:<br /><span class="blsp-spelling-error" id="SPELLING_ERROR_23">Kaazing</span><br />Resin<br />Jetty<br />Atmosphere (with <span class="blsp-spelling-error" id="SPELLING_ERROR_24">JBoss</span>, Spade, Tomcat and Jetty)<br /><span class="blsp-spelling-error" id="SPELLING_ERROR_25">Infinispan</span><br /><br /><a style="font-weight: bold;" href="http://www.kaazing.com/"><span class="blsp-spelling-error" id="SPELLING_ERROR_26">Kaazing</span></a><br />Obviously a commercial product with a professional grade website, cited in the <a href="http://slides.html5rocks.com/">html5rocks.com presentation</a> for <span class="blsp-spelling-error" id="SPELLING_ERROR_27">WebSockets</span> and hosts a really cool online demo at <a href="http://kaazing.me/"><span class="blsp-spelling-error" id="SPELLING_ERROR_28">Kaazing</span>.me</a>.<br /><br />Download, installation, running example in mere moments, it just works. I did not spend more time on <span class="blsp-spelling-error" id="SPELLING_ERROR_29">Kaazing</span> because I am looking for something that is more Java <span class="blsp-spelling-error" id="SPELLING_ERROR_30">EE</span> server like.<br /><br /><a style="font-weight: bold;" href="http://www.caucho.com/">Resin</a> by <span class="blsp-spelling-error" id="SPELLING_ERROR_31">Caucho</span><br />The Resin team provides a nice write-up on <span class="blsp-spelling-error" id="SPELLING_ERROR_32">WebSockets</span> at <a href="http://caucho.com/resin-4.0/examples/websocket-java/index.xtp">caucho.com/resin-4.0/examples/websocket-java/index.xtp</a><br />This particular tutorial broke down for me when I noticed that the client portion of the example was written in <span class="blsp-spelling-error" id="SPELLING_ERROR_33">PHP</span>. I just do not have the patience to translate the <span class="blsp-spelling-error" id="SPELLING_ERROR_34">PHP</span> into <span class="blsp-spelling-error" id="SPELLING_ERROR_35">JSP</span> - call me lazy.<br /><br /><a style="font-weight: bold;" href="http://www.webtide.com/">Jetty</a> by <span class="blsp-spelling-error" id="SPELLING_ERROR_36">Webtide</span><br />While Jetty is very popular amongst Java developers who use it as a solution for <span class="blsp-spelling-error" id="SPELLING_ERROR_37">localhost</span> automated testing (<span class="blsp-spelling-error" id="SPELLING_ERROR_38">JUnit</span>, <span class="blsp-spelling-error" id="SPELLING_ERROR_39">TestNG</span>, Selenium, etc), it is not a server that I have spent a lot of time on. The Jetty world is a bit confusing on its own - there are many, many versions, from multiple download sites and multiple Eclipse plug-ins. Just google for "Jetty Download" or "Jetty Eclipse <span class="blsp-spelling-error" id="SPELLING_ERROR_40">plugin</span>" and you will see what I mean. It can take you several attempts to find the right combination to get everything working.<br /><br />Then, if you google for "Jetty <span class="blsp-spelling-error" id="SPELLING_ERROR_41">WebSockets</span>" you end up with a lot of results, but no tutorial, no documented "getting started" that I could find. <br /><br /><a style="font-weight: bold;" href="http://atmosphere.java.net/">Atmosphere</a><br />Atmosphere is not specifically a server, it is an open source library/framework that can be added to your favorite Java server (e.g. Tomcat, <span class="blsp-spelling-error" id="SPELLING_ERROR_42">JBoss</span>, etc). Atmosphere is where I spent the largest portion of my exploratory time - I really wanted to make this one work. It has many examples, including pub-sub with <span class="blsp-spelling-error" id="SPELLING_ERROR_43">jQuery</span>, my specific area of interest. This one certainly looked the most promising before I dove in.<br /><br /><span style="font-weight: bold;">Atmosphere + </span><span style="font-weight: bold;" class="blsp-spelling-error" id="SPELLING_ERROR_44">JBoss</span><span style="font-weight: bold;"> 6</span><br />I started with this combination because I get a paycheck from Red Hat so it tends to be my favorite Java application server. Well, that turned into a few hours of hacking away for no positive results. There was someone who wrote up his notes in the <a href="http://permalink.gmane.org/gmane.comp.java.jersey.user/8415">Atmosphere Users List</a> but I was unable to follow the same path to make it work.<br /><br /><span style="font-weight: bold;">Atmosphere + Tomcat</span><br />I also failed to make Tomcat 6 and Atmosphere work together. Some of the setup/errors are identical to <span class="blsp-spelling-error" id="SPELLING_ERROR_45">JBoss</span> (it embeds Tomcat) like getting the right version of <span class="blsp-spelling-error" id="SPELLING_ERROR_46">tc</span>-native1.<span class="blsp-spelling-error" id="SPELLING_ERROR_47">dll</span> but I was weary after the <span class="blsp-spelling-error" id="SPELLING_ERROR_48">JBoss</span> attempt and didn't really push hard on Tomcat.<br /><br /><span style="font-weight: bold;">Atmosphere's Spade Server</span><br />After a few hours of frustration, I then realized that Atmosphere has an "out-of-the-box" ready to go server so I assumed THAT had to be the answer - downloaded, unzipped, started, fail! The <span class="blsp-spelling-error" id="SPELLING_ERROR_49">startup</span> looks like<br />java -jar atmosphere-spade-server-0.6.5.jar -a atmosphere-websocket-chat-0.6.5.war<br />As I said earlier in the post, you often get no error messages and this was a specific example that I remember. It even loads the page into your browser but nothing happens, clicking the buttons does not work.<br /><br />At this point, I realized that I was going to need some help - Google, reviewing blog posts and digging through email list archives via <span class="blsp-spelling-error" id="SPELLING_ERROR_50">Nabble</span> was simply not getting me anywhere. So I jumped on the <span class="blsp-spelling-error" id="SPELLING_ERROR_51">IRC</span> channel and found <span class="blsp-spelling-error" id="SPELLING_ERROR_52">jfarcand</span>, the fellow who basically answers all the questions on the email list and blogs for Atmosphere. He was very kind and helpful, my basic question was...is there a setup that is just known to work? answer: Atmosphere + Jetty<br /><br /><span style="font-weight: bold;">Atmosphere + Jetty</span><br />Wow, it just works. After several hours of beating my head against the proverbial wall with standalone Resin, standalone Jetty and other Atmosphere combinations this was an amazingly blissful moment. I was able to get the atmosphere-websocket-chat-0.6.5.war to work immediately. And I was also able to figure out what combination of Jetty's WTP plug-in and server played nicely with each other - so I have this little demo editable inside of Eclipse Helios with drag & drop deployment to Jetty.<br /><br /><a href="http://www.jboss.org/infinispan"><span style="font-weight: bold;"><span class="blsp-spelling-error" id="SPELLING_ERROR_53">Infinispan</span></span></a><br /><span class="blsp-spelling-error" id="SPELLING_ERROR_54">Infinispan</span> was actually the first place I started when I begin this journey. There is a nice write-up/tutorial on using <a href="http://community.jboss.org/wiki/InfinispanWebSocketServer"><span class="blsp-spelling-error" id="SPELLING_ERROR_55">WebSockets</span> with <span class="blsp-spelling-error" id="SPELLING_ERROR_56">Infinispan</span></a> and an example that ships with the distribution. Unfortunately, like almost all of my attempts, version 4.2.0.Final fails "out-of-the-box" with current browsers. The good news is that <span class="blsp-spelling-error" id="SPELLING_ERROR_57">Galder</span> Z was able to dig in immediately, figure out the<a href="https://issues.jboss.org/browse/ISPN-943"> specific problem and get it fixed</a> - I have tested his patch and things look very good for 4.2.1.Final.<br /><br /><span style="font-weight: bold;">Conclusion</span><br />I had originally thought I could have my own custom application built using <span class="blsp-spelling-error" id="SPELLING_ERROR_58">WebSockets</span> with the weekend + two business days I had budgeted for the effort. Alas, I was only able to get some out-the-box-examples working with Atmosphere + Jetty and with <span class="blsp-spelling-error" id="SPELLING_ERROR_59">Infinispan</span> + patch. With that said, I am still very excited about the next generation of web development using the new features that fall under the HTML5 umbrella. The best part about being in the IT business is the constant change - tough to get bored - but that is obviously a double-edged sword. :-)Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com13tag:blogger.com,1999:blog-7119932468549495710.post-59620275864616962272009-03-16T23:18:00.011-04:002009-03-17T21:25:11.985-04:00Tulum, Holbox Mexico Trip Report July 2008Tulum & Holbox - July 2008 Family Adventure<br /><p></p>I'm writing this trip report as a way to give back to the community that allowed me to plan for an excellent adventurous family vaction in the Yucatan Peninsula. I spent many, many hours reviewing other trip reports, forum postings & reviews at sites like: tulum.info (<a href="http://www.tulum.info/">http://www.tulum.info</a>) and TripAdvisor (<a href="http://www.tripadvisor.com/">http://www.tripadvisor.com</a>) and I hope this report/review provides some insight into someone else's future vacation planning efforts.<br /><p></p>This report covers the following major points of interest:<br /><ul><li> Tulum Mexico</li><br /><li> Tita Tulum - beach cabanas - <a href="http://www.titatulum.com">www.titatulum.com</a><br /></li><br /><li> Tulum Ruins</li><br /><li> Hidden Worlds - <a href="http://www.hiddenworlds.com.mx">www.hiddenworlds.com.mx</a><br /></li><br /><li> Coba</li><br /><li> Grand Cenote (Gran Cenote)</li><br /><li> Punta Laguna</li><br /><li> Akumal Bay</li><br /><li> Isla Holbox</li><br /><li> Holbox Whale Shark Tours with Whale Shark Daddy (Rodd Sidney) <a href="http://www.holboxwhalesharktours.com/">www.holboxwhalesharktours.com</a><br /></li><br /><li> Casa Iguana - <a href="http://www.casa-iguana.net/">www.casa-iguana.net</a><br /></li><br /><li> Continental Rent-a-car - <a href="http://www.continental-rentacar.com/">www.continental-rentacar.com</a> </li><br /></ul><br />Most of the trip reports that I've seen are organized by the travel day much like it was fashioned from a travel diary, which is exactly how I captured my thoughts and organized this report. At the end of each day or early the next morning I would write a few paragraphs in a small journal, plus I have the chronological ordering of hundreds of photographs to help jog my memory and to weave the story.<br /><br />Of the places visited and vendors used, I only have negative things to say about one of them - Continental Rent-a-car. I'll not use their services again, you can read through Day 1 (car pick-up), 2 (car swap) and Day 8 (car drop off) to get a feeling for the lack of organization and while they were polite, I expect a little bit more sophistication from a car rental agency.<br /><br />The other activities and vendors (e.g. Hidden Worlds, Holbox Whale Shark Tours, Tita Tulum, Casa Iguana) I wholeheartedly endorse and recommend. This was a trip of a lifetime and I'm not sure if I'll be able to top it, certainly not for so little expense.<br /><br />Consider the following to be the Table of Contents:<br /><ul><li><a href="#background">Background</a><br /></li><li><a href="#day1">Day 1 - Travel Day & Continental Rent-a-car</a><br /></li><li><a href="#day2">Day 2 - Arrive at Tita Tulum</a><br /></li><li><a href="#day3">Day 3 - Coba, Grand Cenote, Tulum Ruins</a><br /></li><li><a href="#day4">Day 4 - Hidden Worlds</a><br /></li><li><a href="#day5">Day 5 - Cenote Cristal, Akumal Bay</a><br /></li><li><a href="#day6">Day 6 - Punta Laguna, Chiquila ferry, Holbox, Casa Iguana</a><br /></li><li><a href="#day7">Day 7 - Holbox Whale Shark Tours</a><br /></li><li><a href="#day8">Day 8 - Return to civilization, Cancun</a></li><br /></ul><hr /><br /><a name="background"><b>Some Background</b></a><br /><br />First, I think it is important that I provide a little bit of insight into the travelers. Our family consists of one father, two daughters (ages 17 and 14) and one son (age 10). I'm originally from Hawaii, love the tropics, get bored easily and wanted my southern-fried suburban mallrats to really experience another culture. In addition, I'm fairly frugal and Cancun (CUN) is one of the least expensive places to visit from a flight standpoint (from ATL), plus I now know that Tulum & Holbox are absolutely beautiful, have great beaches, great people and have no McDonald's, Pizza Hut nor Walmart which are my simple measurements of obvious US-exported commercialism and culture. Our home life is frenetic and a single day of the week might include soccer practice, baseball practice, guitar lessons, cell phones buzzing with dozens of text messages per hour, school work, Myspace/Facebook, video games, Disney Channel, etc. My goal was to really unplug, see something of our beautiful planet, gain some perspective on American lifestyle vs the rest of the world and Tulum + Holbox were absolutely perfect. I took two teenagers "off the grid" (no phones) and one boy (no video games) for 8 days and lived to tell about it. ;-)<br /><p></p><br /><hr /><br /><a name="day1"><b>Day 1</b> - Monday July 7th (Travel Day - ATL to CUN then drive to PDC)</a><br /><br />I used Delta Frequent Flier miles to pay for the plane tickets and that meant no direct flight options so we went through Memphis on the way down to Mexico and then came back by way of Houston. I could have expended more miles (or dollars) for the direct flights but the layovers were short and the kids felt that the changing of planes was part of the adventure.<br /><p></p>Hotel and car reservations were meticulously researched and booked online multiple months prior to the trip. I was taking three kids out of the country for the first time so planning was essential. Plus I'm a planning freak - that is half the fun.<br /><p></p>We land in Cancun around 5pm and are immediately greeted by a huge line for passport control, this was NOT the most ideal greeting for three children who had just been unplugged from their phones and video games, I was ready for convulsions and even considered bribing some folks to get ahead in the line. This was not something that I had factored into my very detailed planning efforts but unfortunately there was nothing to be done, just wait, shuffle forward, focus on lowering your blood pressure, insure no incent bystanders were wounded by bored children. A little over two hours later, we are officially welcomed into Mexico, allowed to pick up our bags, exit the building, praying that our rental car company hadn't deserted us. I was overjoyed to find a fellow holding a sign with my name on it and the kids felt like they were celebrities.<br /><p></p><a href="http://www.flickr.com/photos/27391396@N08/2696565846/" title="P1000134 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3160/2696565846_568d381d36.jpg" alt="P1000134" width="500" height="375" /></a><br /><p></p><br />I had booked the car rental from Continental Rent-a-car online at www.continental-rentacar.com which was recommended by the great folks participating in the www.tulum.info forums. My research had shown that Continental would be about half the the cost of Budget which is the company I normally use when traveling around the US. The quote was for $288 USD for a compact, 7 day rental, 4-door Nissan Tsuru automatic with A/C including a "free upgrade". Now, the fellow with my name on his sign actually had a shirt on that said "America Car Rental" but I shrugged it off and we waited a few minutes with him for a picked up by a fellow in a mini-van. As we are leaving the airport, we see flashing blue lights and are pulled over by the police! Of course my brain goes into overdrive with visions of Mexican prison life and a great deal concern about getting into the van with the fellow from "America Car Rental". Our agent (fellow with the sign) and driver pull over and jump out of the car for a fast paced conversation in Spanish with the police officer. My kids thought it was pretty exciting stuff and captured part of the exchange on the video recorder. The rental agent showed his instructions to the officer who then approached the van and asked me if I had in fact rented a car, I answered in the affirmative and he let us go.<br /><p></p>When you don't speak the local language you just have to assume that the locals are looking out for your best interests (or suffer an anxiety attack).<br /><p></p>We drove a few more minutes and arrive at a small strip mall and walk into the rental agency which had a sign that listed Continental as well as America and I immediately felt better. I had a printed copy of my reservation which I provided the agent, unfortunately, they informed me that my automatico was unavailable, I would need drive an older Nissan standard (stick shift) for the next 7 days or swap cars in the morning (it was about 8 pm in the evening at this point) and I was too tired to fight, plus I don't know any proper Spanish curse words. I didn't have a lot of options and I knew I was sleeping in Playa Del Carmen (PDC) for the evening as I didn't wish to make the much longer trip to Tulum in the middle of the night. They agreed to let me swap out cars in PDC. The next step was to find gas and the PEMEX was just up the street from the rental agency. I had read about the fact that rental cars tend to start off on empty instead of full and about the gas station scams in Tulum plus I had forgotten to hit the ATM in the airport for some pesos. So I paid in USD and received change in pesos and it turns out that the exchange seemed to work out OK. We had officially survived passport control, encounter with the police, some "bait and switch" with the car rental agency and a gas station attendant who spoke no English - not exactly the adventure I was looking for but we were finally on the road.<br /><p></p>The trip to PDC was uneventful and we navigated around until we found the Coco Rio hotel which I had booked via BestDay.com and had paid the $111 in advance. I had printed a map of PDC online (<a href="http://www.travelyucatan.com/playa_del_carmen_hotel_map.php">www.travelyucatan.com/playa_del_carmen_hotel_map.php</a>) and had purchased several of Map Chick's Can-Do travel guides (<a href="http://www.cancunmap.com/">www.cancunmap.com</a>) which was another recommendation from the tulum.info forum posters. Coco Rio is on "the strip" in PDC, 5th Avenue which is for pedestrians (running North to South). We left the rental car parked on the street, checked in, walked down 5th, found some dinner at a highly Americanized sports bar and eventually turned in for the night - exhausted from a day of traveling and a lot of unplanned for adventure. Best quote of the day belongs to the 10-year old boy while navigating through Coco Rio's warren of halls and stairs: "Don't they know about elevators in Mexico" - culture shock is entering a world which isn't wheel chair friendly.<br /><p></p><br /><hr /><br /><a name="day2"><b>Day 2</b> - Tuesday July 8th (arrive in Tulum)</a><br /><br />I wake up earlier than the kids and set off on foot to find the rental agency for the exchange of rental cars. I first verified that the current rental car hadn't been towed from the street where I had left it, then found the agency office which was South down 5th. It is tricky navigating in a foreign country when the street signs and directions are in Spanish, with no cell phone to call for help. Luckily the people at the front desk were able to point out my destination on the maps I was carrying and I was helped by another rental car agency who I assumed would know where his competitor was. As it turns out, the rental car office seemed to know I was coming but didn't have a car ready for me. Plus, I had to go through making a whole new contract! This was a bit painful but I'm a patient man. I had taken 5-mile capable walkie talkies on the trip and I had left one with the kids in case they awoke and found me missing so I felt like it was reasonable to wait. While waiting I was able to find an ATM for some much needed cash and generally watch the shops on 5th begin to open up for the day. The most exciting element was watching the armored car and heavily armed (shot guns, bullet-proof vests, automatic weapons) team arrive to replenish the ATM. After about an hour wait, I was presented with a much nicer Dodge Neon-looking but built by Hyundai automatic with great A/C, all sparkling clean and ready to go. I returned to the hotel, got the kids packed and moving, stopped at McDonald's on the way out of PDC for some breakfast where I told them this was their last bit of recognizable American culture they were going to see. There was some concern during the planning phase with my 10-year old's diet of Kraft Macaroni and Cheese and chicken McNuggets, so I informed him he would just have to starve from that point forward (my idea of tough love).<br /><p>The trip down to Tulum was really easy, 307 isn't a coastal road but you see exit signs for many of the major places to visit (e.g. Xcaret park, Puerto Aventuras, Xpu-Ha, Akumal, Xel-Ha, Hidden Worlds) and it is really hard to get lost. Plus I had studied the path via Google Maps (including the satellite view) and had great maps in hand - I was taking no chances. You get to Tulum Pueblo and hang a left by the 7-11, at their one and only one stoplight (a right takes you to Grand Cenote and on to Coba). Again this road is fairly straight forward to navigate and you'll see many of the various "hotels" that are asked about and debated on the tulum.info forums. Check out this map: <a href="http://www.todotulum.com/downloads/tulum_map.pdf">www.todotulum.com/downloads/tulum_map.pdf</a>, you'll see the road runs along the beach with cabanas/restaurants mostly on your left (oceanside), in one area the road has been washed out and is no longer nicely paved so expect some bumps but it is only a short distance of rough riding.<br /></p><p>We arrive at Tita Tulum and it is truly beautiful. The walk up from the "parking lot" (some sandy areas between palm trees) into the U shaped arrangement of thatch-roof huts is spectacular. Here is picture of their "entrance" from the parking lot.<br /></p><a href="http://www.flickr.com/photos/27391396@N08/3148959650/" title="P1000221 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3220/3148959650_a748f63528.jpg" alt="P1000221" width="500" height="375" /></a><br /><p></p><br />And the "lobby" was incredible:<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2696611662/" title="P1000222 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3292/2696611662_1f209ee567.jpg" alt="P1000222" width="500" height="375" /></a><br /><p></p><br />Cabana number 1 was selected as it was one of the forward most cabanas in the small complex and you walk through what is basically a sand dune to get there. While the distance is short, it can be tough on people with heavy baggage, no paved walkways, just some paths through the tiki torches and palm trees.<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2695889995/" title="DSC00885 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3064/2695889995_dd8d91c730.jpg" alt="DSC00885" width="375" height="500" /></a><br /><br /><p></p>We had arrived in <bold>paradise</bold> and the previous days challenges were immediately forgotten.<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/3148129827/" title="P1000225 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3226/3148129827_40b41f6293_m.jpg" alt="P1000225" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/2772317691/" title="P1000206 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3047/2772317691_692311e6c4_m.jpg" alt="P1000206" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/2772320693/" title="P1000212 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3092/2772320693_76f9589425_m.jpg" alt="P1000212" width="180" height="240" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3151399948/" title="P1000993 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3215/3151399948_638e2b5c6b_m.jpg" alt="P1000993" width="240" height="135" /></a><br /><br /><p></p>In the planning phase, it was tough for me to envision what Tita Tulum really looked like. The pictures on their website are a bit basic so I prepared this video for anyone who might wish to take a quick walkthrough on the grounds from the street, through the "parking lot", through the "lobby" and down to the beach (<a href="http://www.youtube.com/watch?v=0IXQspwfDV0">http://www.youtube.com/watch?v=0IXQspwfDV0</a>). I found that searching through YouTube and Flickr are effective ways to find out more about a destination. We paid approximately $110 a night that was prepaid via Paypal. Now, this was part of the adventure as well. The folks at Tita respond fairly slowly to email (it takes a day or two) and they didn't confirm the receipt of my Paypal transaction until I asked if everything was OK. With that said, I had read several reviews/reports in the tulum.info forums that suggested this was the case and I went on blind faith that everything would be fine and they were ready for me when we arrived.<br /><br />We spent the afternoon on the beach where the best entertainment came from a couple of very friendly dogs. We nicknamed this one Max<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2695892781/" title="DSC00890 by burr.sutter, on Flickr"><img src="http://farm3.static.flickr.com/2357/2695892781_b6de6a144f.jpg" alt="DSC00890" width="500" height="375" /></a><br /><p></p><br />They loved playing fetch in the surf<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/3148134123/" title="P1000263 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3108/3148134123_ccf1438ebb.jpg" alt="P1000263" width="500" height="375" /></a><br /><p></p><br />The dogs were a huge hit and I captured some of this on video as well<br /><p><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/pY9Qo-L7FZs&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/pY9Qo-L7FZs&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /></p><br />At this point, I could declare victory as the kids finally understood "why Mexico".<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2772334845/" title="P1000278 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3232/2772334845_50ab0082de.jpg" alt="P1000278" width="500" height="375" /></a><br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2773175604/" title="P1000253 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3035/2773175604_1571d81d15_m.jpg" alt="P1000253" width="240" height="180" /></a><br /><p></p><br />I celebrated with a massage at A'Kiin on the beach and the kids swung in the cabana's front porch hammocks and played in the surf and sand. The beach is large and uncrowded, the sand similar to what you'll find in Destin, Florida white, fine and soft.<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2695804463/" title="P1000265 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3059/2695804463_dc04830071_m.jpg" alt="P1000265" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/2695791361/" title="P1000201 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3262/2695791361_cd1584f821_m.jpg" alt="P1000201" width="240" height="180" /></a><br /><p></p><br />Immediately after check-in there was one cause for concern, water pressure. While I signed up for a thatch roof hut with limited power and no A/C, I had assumed there would be enough water pressure for a shower!<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/3148132049/" title="P1000256 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3078/3148132049_e690bdca59_m.jpg" alt="P1000256" width="180" height="240" /></a><a href="http://www.flickr.com/photos/27391396@N08/3148964284/" title="P1000257 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3229/3148964284_b8cb2c3d67_m.jpg" alt="P1000257" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/3148130955/" title="P1000235 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3222/3148130955_74b17ffab2_m.jpg" alt="P1000235" width="240" height="180" /></a><br /><p></p><br />Luckily this was only a temporary issue that was corrected within an hour. Based on a tip that I picked up in the tulum.info forums, I picked up this little light socket/power outlet gadget before leaving home.<br /><p></p>(note: all of these photos are high-res and you can drill down into the much larger version by clicking and following the link to Flickr where they are hosted - when viewing in Flickr click the ALL SIZES link just above the photo)<br /><p></p>One of my selection criteria was to find a cabana that had power and while Tita cabanas do have lights, they don't have power sockets. I needed a way to charge my camera batteries. It should be noted that these sockets wouldn't handle a hair dryer nor a laptop (I did try and triggered the breaker) but the most critical things were the walkie-talkies & camera rechargeable batteries which it handled well.<br /><p></p>We finished our day with a brief tour Tulum Pueblo, dinner at Don Cafetos (highly recommended in tulum.info) and some shopping.<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2696623584/" title="P1000284 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3108/2696623584_7be81c6e9f.jpg" alt="P1000284" width="375" height="500" /></a><br /><br /><p></p><p></p>The first night at Tita Tulum was a little rough on me. The air temperature was high enough to make it uncomfortable, and as advertised these cabanas only had natural sea breeze air conditioning. The trick was to move the beds closer to the open windows so that you could lay in the constant cross breeze. On this particular adventure, it was important to understand that you'll always be a little bit sticky and sandy. We packed only one pair of jeans and one hoodie each and never used them.<br /><p></p><hr /><br /><a name="day3"><b>Day 3 </b>- Wednesday, July 9th (Coba, Grand Cenote, Tulum ruins)</a><br /><br />I awoke before 6:00 am to catch the sunrise which I had heard was absolutely beautiful, I was not disappointed.<p></p><a href="http://www.flickr.com/photos/27391396@N08/2773188426/" title="P1000338 by burr.sutter, on Flickr"><img src="http://farm3.static.flickr.com/2270/2773188426_4627926a1c.jpg" alt="P1000338" width="375" height="500" /></a><br /><p></p><br />We planned to visit Coba which is a bit of a drive away from Tulum so the first stop was the Pemex gas station by the San Francisco market. I asked for "dos cientos" which turned out to be too much and received correct change (it must have been the highly suspicious on my face). We also hit the 7 Eleven for some snacks & drinks for the road to Coba. There is very little on the road once you get past a few cenotes (Grand cenote is along this road), some houses made of sticks, a few failed businesses and small villages. A section of the road had hundreds of butterflies. There was one local shopkeeper that I made a mental note to stop at on the return trip. <p></p><a href="http://www.flickr.com/photos/27391396@N08/2696123867/" title="P1000357 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3218/2696123867_9d9aeb7fbb_m.jpg" alt="P1000357" width="240" height="180" /></a><br /><p></p><br />The goal was to arrive before 9:00 am, before the tour buses from Cancun arrived and we made it. We paid our admission fees, said no to the first round of tour guide offers and went straight to the bike rental. Granted, I ignored the educational opportunity but I really wanted to beat the crowd. Our family has never taken a bike ride together and my son had only recent gotten his cast off due to a broken arm from a previous bike riding accident. It was great fun racing around a still fairly deserted Mayan city which had been overtaken by the jungle. The jungle was full of birds at full song and it was quiet whenever we stopped as there were only a handful of others on the trails. I thoroughly enjoyed our ride through the forest, in some cases the trees were so thick that the trails were overshadowed.<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2772342105/" title="P1000365 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3149/2772342105_1c11d6f547.jpg" alt="P1000365" width="500" height="375" /></a><br /><br /><p></p><br />We stopped at an ancient Mayan ball court.<p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2696943360/" title="P1000370 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3017/2696943360_bd09e78cc2_m.jpg" alt="P1000370" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/2696146813/" title="P1000420 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3282/2696146813_0e71f904c8.jpg" alt="P1000420" width="281" height="500" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696964736/" title="P1000422 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3067/2696964736_70e9b4c003.jpg" alt="P1000422" width="500" height="375" /></a><br /><p></p><br />I really don't understand how someone could play a ball through that hoop with their hips, perhaps that is something I should have learned more about but we were having too much fun on the bike ride and wanted to get to the big pyramid. Along the way we found this structure so we dismounted and used it for a photop. <p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/3149642744/" title="P1000373 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3124/3149642744_5636d6d0e8.jpg" alt="P1000373" width="375" height="500" /></a><br /><p></p><br />We finally arrived at the big pyramid and there were only a few other people there! Time to climb and enjoy the view from the top. <p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/3148845671/" title="P1000379 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3211/3148845671_a8f2f73d31.jpg" alt="P1000379" width="281" height="500" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696948204/" title="P1000380 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3094/2696948204_26eb2e87de.jpg" alt="P1000380" width="500" height="281" /></a><br /><p></p><br />I sent the kids up first to capture the moment and this video gives you an appreciation for how high up you have to go.<br /><p></p><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/mSoVG4o5iJ4&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/mSoVG4o5iJ4&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><p></p><br />I hate to admit it but they scampered up to the summit without a break and it took me at least one stop to catch my breath. It was quite a hike but the view from the top was totally worth it.<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2772348065/" title="P1000395 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3038/2772348065_cbfe5c92ce.jpg" alt="P1000395" width="500" height="375" /></a><br /><p></p><br />We enjoyed biking around Coba for a while longer.<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2772351657/" title="P1000412 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3170/2772351657_94dffb9b84_m.jpg" alt="P1000412" width="180" height="240" /></a><br /><p></p><br />My son found a local critter to chase. <p></p><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/_YC2zV_9544&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/_YC2zV_9544&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><p></p><br />which also turned into a great photop.<p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2772357267/" title="P1000444 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3173/2772357267_fcc9918e47.jpg" alt="P1000444" width="500" height="375" /></a><br /><p></p><br />At one point, we encountered a man who was sweeping the trail and while he didn't seem to speak a word of English he did know how to point & shoot with the camera. I've not seen too many trees like this one aside from the ones in Hawaii so I thought it would make a great background.<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2772359027/" title="P1000449 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3156/2772359027_a378dd315b.jpg" alt="P1000449" width="500" height="375" /></a><br /><p></p><br />As a child, I had an aunt that would purchase a National Geographic subscription for me at Christmas time. While other little boys were getting new radio controlled cars or cap guns, I was reading about pandas and the rain forest so to this day I have a huge love of all things green. You'll notice that this was a bit of theme for us on this trip. I hope my children would learn something about our planet and see a bit of it still unspoiled by man.<br /><p></p><br />After visiting all the major ruins (we really moved along on those bikes), we were on our way out just in time to see the mob arriving. <p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/3149749664/" title="P1000450 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3278/3149749664_14c31b4032_m.jpg" alt="P1000450" width="240" height="180" /></a><br /><p></p><br />There were people waiting for our bikes when we returned them and I was quite pleased with having seen Coba with only a handful of others and avoiding the rush. Now we could be on our way back towards Tulum but first a quick stop at the shop with the colorful "blankets".<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2696157333/" title="P1000459 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3109/2696157333_caccbfbdd2_m.jpg" alt="P1000459" width="180" height="240" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696973728/" title="P1000462 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3292/2696973728_8f4feeb1a5_m.jpg" alt="P1000462" width="180" height="240" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696977930/" title="P1000467 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3178/2696977930_3b79f2f27e_m.jpg" alt="P1000467" width="240" height="135" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696974940/" title="P1000463 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3233/2696974940_a21d0e43c0_m.jpg" alt="P1000463" width="180" height="240" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3148980355/" title="P1000468 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3132/3148980355_980ece3880_m.jpg" alt="P1000468" width="135" height="240" /></a><br /><p></p><br />The "store" was actually a family's home where the local shopkeeper was initially a young boy and his adorable little sister. They had kittens so we spent some time just browsing and playing with the cute little kitties. Eventually what I assume to be the mother must have noticed the gringos hanging around and she appeared to negotiate. As far as I could tell, she spoke no English so I put my high-school-Spanish translator to the test to strike up a bargain.<br /><p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2696975992/" title="P1000465 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3177/2696975992_b3061a4394.jpg" alt="P1000465" width="500" height="281" /></a><br /><p></p><br />We rolled out of there with a couple of colorful "blankets", some great photos and feeling great about our ability to communicate, at least in pesos. I put "blankets" in quotes because it turns out they are actually tableclothes that we found in some of the Tulum stores where someone could actually tell us their purpose but they were twice the price and we appreciated supporting the local family on the road to Coba.<br /><p></p><br />At this point, it is only about 10:30 in the morning and Grand Cenote was on the road back towards to Tulum. I had instructed the kids to have their swimsuits ready and we had brought our own snorkel gear so we were prepared for anything. We paid our admission and on the walk in found a cage full of peacocks. This particular one really got my attention, I've never seen one that was all white <p></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2696980758/" title="P1000476 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3273/2696980758_ec26c44a26_m.jpg" alt="P1000476" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696169019/" title="P1000478 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3217/2696169019_64df9aa918_m.jpg" alt="P1000478" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696989108/" title="P1000500 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3251/2696989108_93c7868997_m.jpg" alt="P1000500" width="180" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696987616/" title="P1000491 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3156/2696987616_34cd399e75_m.jpg" alt="P1000491" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696735408/" title="DSC00991 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3247/2696735408_16f8d3c7ba_m.jpg" alt="DSC00991" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2695926461/" title="DSC01007 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3124/2695926461_247e46605a_m.jpg" alt="DSC01007" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2695914989/" title="DSC00967 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3107/2695914989_ccb3863d11_m.jpg" alt="DSC00967" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696727502/" title="DSC00956 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3189/2696727502_d53fdfd7bf_m.jpg" alt="DSC00956" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696744756/" title="DSC01013 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3022/2696744756_abfcbdbfed_m.jpg" alt="DSC01013" width="180" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696745638/" title="DSC01015 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3240/2696745638_2813d3c7a8_m.jpg" alt="DSC01015" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696746686/" title="DSC01017 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3293/2696746686_4cfedcd3e6_m.jpg" alt="DSC01017" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2772360869/" title="P1000495 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3065/2772360869_fa3d81540d_m.jpg" alt="P1000495" width="180" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2695898547/" title="DSC00914 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3117/2695898547_138b53336f_m.jpg" alt="DSC00914" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696715392/" title="DSC00917 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3063/2696715392_2ce0a57c84_m.jpg" alt="DSC00917" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2695897779/" title="DSC00913 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3122/2695897779_6a37725920_m.jpg" alt="DSC00913" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696717772/" title="DSC00925 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3280/2696717772_89afda5308_m.jpg" alt="DSC00925" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2695916011/" title="DSC00969 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3179/2695916011_a199ff4c4c_m.jpg" alt="DSC00969" width="240" height="180" /></a><br /><p></p><br />It is hard to describe how incredible Grand Cenote is. It was a absolutely beautiful sunny day, there were small trees growing up from the "floor" of the cavern. We could snorkel back into the overhanging rock while birds (swallows I guess) flashed by in a blur above our heads and I brought some waterproof flashlights to have a look around in the dark corners of the "cave". There was even a swim thru to another area where you could see the sky and the jungle around you. The water was perfectly clear and it was just an amazingly beautiful natural setting with lots of tropical plants and small fresh water fishes. I had heard that there was an area to jump into the cenote but I didn't see a good jumping off point and there were relatively few people there overall. There was a small booth where you could rent snorkel gear but I always come prepared. I learned while living in and on multiple visits to Hawaii that you always keep your snorkel gear handy for just those moments were you decide to pull over on the side of the road and jump in the water. If you can't tell this was one of my favorite places and photo opportunities. I had one digital camera wrapped in a DiCapac (basically a heavy duty zip lock bag) that I had picked up for this trip. This allowed me to snap some underwater (or just in water) photos and vids.<br /><p><br />After a couple of hours exploring Grand Cenote, the crew was getting hungry and we had eaten up most of our 7 Eleven snacks. The drinks were kept cool in one of those collapsible/soft coolers that I had packed in my baggage (another tip from reading tulum.info forum posts). We used that cooler for all of our day trips and to bring home a few drinks back to the cabana every night so it was one of our better investments and it turns out that we stopped at the convenience store (OXXO or 7 Eleven) every morning & evening for more ice and drinks.<br />At this point, we jumped back in the car and headed to Tulum ruins as I felt we could pack a little more into the day and we're a high energy family!<br />The Tulum ruins are north of the pueblo and the main intersection on the road back towards Cancun/Playa Del Carmen but it was a relatively short trip. We parked, talked to a couple of fellows about some a tour of the Tulum site as well as other opportunities. They were very pleasant and there was no hard selling at all. We politely declined the offers and hit the "food court". </p><br /><a href="http://www.flickr.com/photos/27391396@N08/2696747698/" title="DSC01026 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3016/2696747698_56781ff029_m.jpg" alt="DSC01026" width="240" height="180" /></a><br /><p></p><br />Where it turns out they actually have a Subway so I gave in and we ate "American" food. It just so happens that produce (lettuce, tomatoes) and condiments (mayonnaise, mustard, ketchup) have a slightly different taste.<br /><br />After our quick meal we walked out to where the tram picks up passengers for the trip up to the ruins. This is where you'll find the "flying men" - guys who dangle themselves from ropes while spinning around a pretty high pole. I had read online that the show was "free" and the boys worked for tips. When we walked up they seemed to be resting and it was a little warm at this point so I asked one fellow when the next show would start. He looked at us and said basically "dos cientos and we start right now". For a moment, I was a bit taken aback but then, well, to be honest, I'm a sucker for a show and we were waiting for the tram. They even gave us a nice photop at the end and were a neat bunch of guys.<br /><p><br /><a href="http://www.flickr.com/photos/27391396@N08/2695933587/" title="DSC01028 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3166/2695933587_681e9bd02e_m.jpg" alt="DSC01028" width="180" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696749632/" title="DSC01030 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3091/2696749632_a2cd8cd800_m.jpg" alt="DSC01030" width="180" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696750560/" title="DSC01031 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3165/2696750560_f16a5e97ae_m.jpg" alt="DSC01031" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696751368/" title="DSC01033 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3113/2696751368_bffe74cbd7_m.jpg" alt="DSC01033" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2695937427/" title="DSC01034 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3113/2695937427_45424bccb9_m.jpg" alt="DSC01034" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696178635/" title="P1000519 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3171/2696178635_ece97c1115_m.jpg" alt="P1000519" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696994766/" title="P1000520 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3148/2696994766_ca7dc3df29_m.jpg" alt="P1000520" width="240" height="180" /></a><br /></p><p><br />Their version of "say cheese" sounded a lot like "tequila" but I'm sure I misheard that bit. ;-)<br /></p><p><br />There were actually several other photops and I'm that guy who actually buys that photo of the kids screaming their heads off that you are shown at the end the Disney ride, so I'm thinking $5 was a bargain for the Mayan family photo, one extra large iguana and a very big snake!<br /></p><br /><a href="http://www.flickr.com/photos/27391396@N08/2772364367/" title="P1000515 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3116/2772364367_4179ab858a_m.jpg" alt="P1000515" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149136615/" title="P1000578 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3266/3149136615_893e805362_m.jpg" alt="P1000578" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2697012298/" title="P1000585 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3077/2697012298_6d14edf204_m.jpg" alt="P1000585" width="240" height="180" /></a><br /><p></p><br />Perhaps the exchange rate was getting to me so I asked the kids about the previous pitch for the guided tour. They thought it was a good idea so I then forked over some money for a tour with Florencio. I really don't remember the price but it was on the standard price sheet posted where the tram picks up.<br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2697001836/" title="P1000542 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3229/2697001836_53e6fc90e8_m.jpg" alt="P1000542" width="135" height="240" /></a><br /><p><br />Florencio wasn't very high energy, didn't seem all that excited though he was seemingly knowledgeable and tolerant of my constant questions (I paid the toll so teach me something). It was warm and late afternoon. I'm not sure how much the kids learned from the experience because the boy was chasing iguanas all over the complex (we left with over a dozen cool iguana "action" photos since he had one of the cameras) but overall I was happy with the tour and of course the ruins overlooking the ocean are just breathtaking.<br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773215482/" title="P1000536 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3264/2773215482_ef518795a7_m.jpg" alt="P1000536" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2697007990/" title="P1000576 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3005/2697007990_e48f6fdae0_m.jpg" alt="P1000576" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2772378595/" title="P1000564 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3056/2772378595_a9cf9fbd57_m.jpg" alt="P1000564" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2772380303/" title="P1000569 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3171/2772380303_d71cc1ccea_m.jpg" alt="P1000569" width="240" height="135" /></a><br /></p><br />At this point in the day, we were starting to get a little bit tired so we went back to the cabana for some R&R in the hammocks and beach. My son found a stick that he liked, you'll see it in a few photos and in retrospect, this was a dramatic shift away from Suite Life of Zack and Cody and video games. Mission accomplished! <p><br /><a href="http://www.flickr.com/photos/27391396@N08/3149193849/" title="P1000872 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3123/3149193849_cd5273d917_m.jpg" alt="P1000872" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2772755295/" title="P1000877 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3240/2772755295_20771ef408_m.jpg" alt="P1000877" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/3149194703/" title="P1000878 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3130/3149194703_3294624515_m.jpg" alt="P1000878" width="240" height="180" /></a><br /></p><br />After a short recovery and some showers we were refreshed enough to head out to Zamas for some dinner. We had a table directly on the sand, looking over a shallow cove by candlelight. We tried the potato skins, chips & pico de gallo, garlic fish, spaghetti, pizza and enchiladas and loved all of it. We remembered to take some photos of our food for the great folks at tulum.info.<br /><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149199349/" title="P1000604 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3293/3149199349_11ee006a55_m.jpg" alt="P1000604" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/3150042750/" title="P1000605 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3208/3150042750_45e0116855_m.jpg" alt="P1000605" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/3150043566/" title="P1000606 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3243/3150043566_470f063711_m.jpg" alt="P1000606" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2773231666/" title="P1000596 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3284/2773231666_108871c180_m.jpg" alt="P1000596" width="240" height="135" /></a><br /><p><br /><a href="http://www.flickr.com/photos/27391396@N08/2790130252/" title="P1000609 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3118/2790130252_368721d7a3_m.jpg" alt="P1000609" width="240" height="180" /></a><br /></p><br />One word of warning, bring your bug repellant, the mosquitoes descended upon us vigorously when the sun went down so we had to run back to the car and spray everybody down before the food actually arrived.<br /><br /><br />The next stop was the "Internet cafe" at this point the kids had survived being unplugged for a very long period of time, plus I needed to check on a couple of important emails.<br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696815340/" title="P1000616 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3154/2696815340_3e31bf7f30_m.jpg" alt="P1000616" width="240" height="180" /></a><br /><br /><br />We then went to the local city park in Tulum where we had the opportunity to watch some pickup soccer games plus we could put our high school spanish translator back to work. Now we were really becoming immersed in the local culture.<br /><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2697243994/" title="P1000637 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3016/2697243994_b743e5e874_m.jpg" alt="P1000637" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2697244992/" title="P1000641 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3282/2697244992_eaff8876ee_m.jpg" alt="P1000641" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/3150068808/" title="P1000653 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3243/3150068808_f54c5065d6_m.jpg" alt="P1000653" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/3150075070/" title="P1000661 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3118/3150075070_529b7a9645_m.jpg" alt="P1000661" width="240" height="135" /></a><br /><p></p><br />It was a great and enthusiastic game. One that we have played in our own soccer practices back home. It is neat to watch groups of people playing a game where there are no uniforms, cleats or shin guards. We returned the Tita's fairly late that night, I believe the parking lot gate had been shut but not locked. So we quietly made our way back through the sand dunes to the cabana. It was a beautiful night so we looked at the stars and the moon and chased around a few sand crabs via flashlight.<br /><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149245603/" title="P1000683 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3133/3149245603_0db98a8b96_m.jpg" alt="P1000683" width="180" height="240" /></a><br /><p></p><br /><hr /><br /><a name="day4"><b>Day 4 </b>- Thursday, July 10th (Hidden Worlds) </a><br /><br /><br /><br />I was up early again, my body seemed determined to catch the sunrise and the friendly grounds keeper for Tita was always up and he also enjoyed watching Sol come up in the morning. <p><br /><a href="http://www.flickr.com/photos/27391396@N08/2772672125/" title="P1000697 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3227/2772672125_416e976891_m.jpg" alt="P1000697" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2772670759/" title="P1000696 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3227/2772670759_b19cca0980_m.jpg" alt="P1000696" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2772669399/" title="P1000689 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3210/2772669399_ba0422b10b_m.jpg" alt="P1000689" width="180" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696820902/" title="P1000692 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3162/2696820902_609b7ea350_m.jpg" alt="P1000692" width="180" height="240" /></a><br /></p><p><br />This particular morning I was able to catch a brief glimpse of the bats that lived in the tree just outside of our cabana and with the sun coming up they were headed back home after a long night of feasting. They were very hard to catch via my simple point & shoot digital camera but I managed to get a couple of photos.<br /><br />Today was the day for Hidden Worlds. I had previously made the reservation online and had made a tough decision between Hidden Worlds (www.hiddenworlds.com.mx) vs Selvatica (www.selvatica.com.mx). Hidden Worlds just happened to have great deal on their website of about $59 a person for unlimited access and what swayed me in the end was the ability to do whatever I wanted whenever I wanted. I hate cattle style "tours" and all of the reviews of Selvatica suggested that groups of people where herded together to each zip line, rode it once and then moved on to the next event. While Selvatica had many more zip lines, I was sold on the freedom offered by Hidden Worlds, the snorkeling in the "bat cave" and the SkyCycle. I can tell you that for my family, I totally made the right decision.<br /><br /><br />The Hidden Worlds entrance is directly off of 307 and its impossible to miss, we had seen it on our drive down from Cancun and knew exactly where to go. After checking in for confirmation of my reservation and payment, they provided us with wristbands and told us to jump on one of the jungle buggies for the jolting, jarring and wild ride. The jungle buggies make frequent trips from the entrance to the area where the activities are (it is too long to walk) and they will also transport you between the SkyCycle launching point and the main activity area. I was able to capture a few moments of one of these rides on video. My kids held on for dear life and loved every second of it. </p><p><br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/bLlIjFTQF9U&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/bLlIjFTQF9U&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /></p><p><br />Upon arrival at the main activity area, we were strapped into our safety gear and prepared for the zipping, splashing, rapelling, skycyling, etc. The team at Hidden Worlds were extremely friendly and welcoming. They were absolutely a joy to be around and they spoke great English. There were 3 photographers who captured a lot of your adventures and sold the digital pics on a burned CD to you at the end of the day - $25, of course I bought them.<br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/2696247821/" title="jackO 469 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3221/2696247821_dd9f6c3279_m.jpg" alt="jackO 469" width="160" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2773525300/" title="P1000710 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3023/2773525300_6c62bb737b_m.jpg" alt="P1000710" width="180" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2772679215/" title="P1000714 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3238/2772679215_24c391d2e1_m.jpg" alt="P1000714" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696831038/" title="P1000760 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3104/2696831038_0dcdfeb73f_m.jpg" alt="P1000760" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696238513/" title="DSC_0135 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3284/2696238513_d0bc03f54d_m.jpg" alt="DSC_0135" width="159" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2697053992/" title="DSC_0147 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3279/2697053992_79a6b30102_m.jpg" alt="DSC_0147" width="159" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2697054550/" title="DSC_0176 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3224/2697054550_7c87843663_m.jpg" alt="DSC_0176" width="240" height="159" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2773553336/" title="P1000770 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3077/2773553336_aa27d7b9d8_m.jpg" alt="P1000770" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2772703953/" title="P1000769 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3035/2772703953_437872932d_m.jpg" alt="P1000769" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2772703953/" title="P1000769 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3035/2772703953_437872932d_m.jpg" alt="P1000769" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2773581648/" title="P1000826 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3234/2773581648_38461da3e6_m.jpg" alt="P1000826" width="180" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2696841306/" title="P1000828 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3057/2696841306_14e6ecfed2_m.jpg" alt="P1000828" width="240" height="180" /></a><br /></p><p><br />I'll say that the "adventures" don't give you much of adrenaline rush as they've been made safe enough for the average tourist, however, the staff was so nice and made it so much fun the kids completely loved it. How often do you get to say that you ziplined through the opening of a cenote for a splashdown? I highly recommend Hidden Worlds for anyone that has adventurous children. I personally enjoyed the SkyCycle the best. Being alone, quietly peddling along through the jungle canopy, plus the SkyCycle lines take you through a couple of caverns as well. We were never rushed, never herded and my son wanted to do the long zip line three times. The best aspect of that was they normally have a staff member sending the person down the line and a staff member waiting to receive them. In one instance, where my son declared he wanted to ride down again, they couldn't find the fellow who was supposed to be on the receiving end, after a few attempts on the radio, the "launch" guy didn't wish to keep us waiting so he grabbed the zip and went on down the line himself, waiting for my son to arrive. </p><p><br /><br />A few photos from/on the SkyCycle<br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773584728/" title="P1000830 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3296/2773584728_44c67da441_m.jpg" alt="P1000830" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773586228/" title="P1000831 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3061/2773586228_00b2031c45_m.jpg" alt="P1000831" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696241997/" title="DSC_0216 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3125/2696241997_37ef504f0b_m.jpg" alt="DSC_0216" width="240" height="159" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773587208/" title="P1000838 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3251/2773587208_bef42df745_m.jpg" alt="P1000838" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2772743303/" title="P1000850 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3041/2772743303_d6370f8e02_m.jpg" alt="P1000850" width="180" height="240" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773594760/" title="P1000849 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3139/2773594760_324465c2bc_m.jpg" alt="P1000849" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773571864/" title="P1000812 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3111/2773571864_0e7d2580da_m.jpg" alt="P1000812" width="180" height="240" /></a><br /><br /></p><p><br /><br />Lunch wasn't included in the price of admission but it was inexpensive,tasty and provided by a wonderful lady.<br /><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696833224/" title="P1000784 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3163/2696833224_3704d49f8c_m.jpg" alt="P1000784" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773556702/" title="P1000785 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3044/2773556702_8f6927c208_m.jpg" alt="P1000785" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696834474/" title="P1000786 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3249/2696834474_ce40010573_m.jpg" alt="P1000786" width="240" height="180" /></a><br /></p><p><br />Our photographers were Solomon, Eduardo and Jack and they were all gracious and helpful. I didn't make note of the other staff members names but they were all quick to greet you with a sincere smile and make you feel at home.<br /></p><p><br />Just like the previous days, we returned to the cabana for some beach time, clean up, then out to Charlie's for dinner, some shopping and even more soccer. This time we found an upscale city park that had organized games but there are no public restrooms to be found. We even found a ladies team working with their coach.<br /><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149362781/" title="P1000879 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3293/3149362781_6bbbd63c76_m.jpg" alt="P1000879" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149363339/" title="P1000880 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3284/3149363339_20e1667d26_m.jpg" alt="P1000880" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149365997/" title="P1000881 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3233/3149365997_2146c8b734_m.jpg" alt="P1000881" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149366611/" title="P1000898 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3112/3149366611_d76192665b_m.jpg" alt="P1000898" width="240" height="135" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3150198300/" title="P1000886 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3281/3150198300_4b953a8e8d_m.jpg" alt="P1000886" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149367285/" title="P1000903 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3227/3149367285_d5c52ab9b7_m.jpg" alt="P1000903" width="240" height="180" /></a><br /><br /></p><p><br /></p><hr /><br /><a name="day5"><b>Day 5 </b>- Friday, July 11 (Cristal Cenote and Akumal Bay)</a><br /><br /><br /><br />This morning I actually "slept in" and just missed the sunrise but started the day with a walk on the beach. I encountered this guy lounging about<br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696204123/" title="P1000991 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3254/2696204123_b3b18b47e1.jpg" alt="P1000991" width="500" height="375" /></a><br /><br /><br /><br />Portuguese man of war - beautiful colors while resting on the sand but certainly something you wish to avoid when in the water. He apparently missed the tide that morning and was willing to pose for a nice photo.<br /><p><br /><br />This was our last "full day" in Tulum so we wanted to keep it somewhat casual. Once we got the kids up and in the car, we drive down toward Sian Ka'an so I could see if the "Arch cenote" was accessible. I had heard about it on the tulum.info forums and thought I was try to find something more off the beaten path. I don't think we found it, but we came across some signs, a path so dense with overhanging foliage that you had to stoop down to get through it, a glimpse at a small body of water and enough mosquito bites to last you a life time. Perhaps someone can translate the signs for me. They likely say something along the lines of don't trespass, you'll be eaten by an alligator.<br /><br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/3149388637/" title="P1000905 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3206/3149388637_e9860413af_m.jpg" alt="P1000905" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149399435/" title="P1000908 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3105/3149399435_cc4b068b39_m.jpg" alt="P1000908" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149389453/" title="P1000906 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3113/3149389453_8fc97d2439_m.jpg" alt="P1000906" width="180" height="240" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149395413/" title="P1000907 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3125/3149395413_3ccfcd4d8a_m.jpg" alt="P1000907" width="180" height="240" /></a><br /><br /></p><p><br />So next I wanted to see the Cenote Cristal which was down 307 south of Tulum, this particular Cenote bore no resemblance to Grand nor the ones at Hidden Worlds. It looked more like a pond that you would find in central Alabama (and I've seen a few of those). However the water was crystal clear and mostly locals were visiting at the time we arrived. We didn't end up staying long, there wasn't much to see but it proved to be a great site for some fun photos.<br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/2696249621/" title="DSC01091 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3120/2696249621_b069f1ecca_m.jpg" alt="DSC01091" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696250385/" title="DSC01094 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3198/2696250385_58d797c0ab_m.jpg" alt="DSC01094" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2697079208/" title="P1000910 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3132/2697079208_8b2a6b0bff_m.jpg" alt="P1000910" width="180" height="240" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2772389737/" title="P1000911 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3195/2772389737_94c2091233_m.jpg" alt="P1000911" width="180" height="240" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2772395455/" title="P1000920 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3049/2772395455_c02abfe8d6_m.jpg" alt="P1000920" width="240" height="135" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773246130/" title="P1000931 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3057/2773246130_22693487e1_m.jpg" alt="P1000931" width="240" height="180" /></a><br /><br /></p><p><br />It was just about lunch time and I still wanted a chance to visit Akumal Bay, reputed has having sea turtles to swim with and a short distance from Half Moon Bay where there is actually a reef. The biggest challenge with this area is there is no parking so I used a trick I had read in one of the online forums. I drove up the parking guard and said I was going to lunch at Lol-Ha, a really nice upscale beach club. He waved us into the protected parking area. He were actually hungry so some lunch was in order. It turned out to be great and at the end of the meal, I asked the waiter if it was OK for us to leave the car parked and enjoy the beautiful beach and bay, he said "si" so I grabbed the gear out of the car and we setup right there in front of the restaurant.<br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/3149416309/" title="P1000935 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3090/3149416309_0410da0575_m.jpg" alt="P1000935" width="240" height="135" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149416921/" title="P1000940 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3078/3149416921_ba2a33bdf7_m.jpg" alt="P1000940" width="240" height="135" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3150249188/" title="P1000943 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3206/3150249188_b676f3666a_m.jpg" alt="P1000943" width="240" height="135" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149418181/" title="P1000958 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3284/3149418181_82107dca81_m.jpg" alt="P1000958" width="240" height="135" /></a><br /><br /><br /></p><p><br />And we did find turtles, a sting ray and a huge barracuda (he can be seen briefly in the video).<br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696258163/" title="DSC01137 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3068/2696258163_340b1f24c9_m.jpg" alt="DSC01137" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3149421835/" title="DSC01144 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3234/3149421835_3f8ba83ed4_m.jpg" alt="DSC01144" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3150254366/" title="DSC01159 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3293/3150254366_1f66b6c929_m.jpg" alt="DSC01159" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2697072300/" title="DSC01134 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3030/2697072300_5ceda65ab4_m.jpg" alt="DSC01134" width="180" height="240" /></a><br /><br /></p><p><br />I combined the snorkeling videos for both Akumal Bay and Holbox<br /><br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/zI8Tlc6SRz8&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/zI8Tlc6SRz8&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br /></p><p><br />I didn't find a way to get to Half Moon Bay, it would have been a long hike from where we were by Lol-Ha and the only parking seemed to be right at people's rental houses and condos. At this point, the kids had had enough so we returned to the cabana for some resting and a nice walk on the beach. </p><p><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773256376/" title="P1000983 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3047/2773256376_fdfaedce2f_m.jpg" alt="P1000983" width="240" height="135" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773254856/" title="P1000980 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3143/2773254856_194cef4c23_m.jpg" alt="P1000980" width="135" height="240" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2773253172/" title="P1000979 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3181/2773253172_fbcc8883b5_m.jpg" alt="P1000979" width="240" height="135" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2772409457/" title="P1000986 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3277/2772409457_18a068ae2d_m.jpg" alt="P1000986" width="240" height="135" /></a><br /><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3150231470/" title="P1000989 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3254/3150231470_df56e487ac_m.jpg" alt="P1000989" vspace="5" width="240" align="left" height="135" hspace="5" /></a><br /><br /><br />Dinner that night was at El Basilica which was wonderful and our last night in Tulum. We will definitely go back to Tulum again one day and believe it or not there were a few activities that we didn't get to like Ek Balam, Selvatica, Pac Chen, Half Moon Bay snorkeling and cenote scuba. However, the biggest win wasn't the activities, it was finding a peaceful place of tremendous natural beauty where we could have some shared adventures and more importantly leave the chaos of daily life behind.<br /><br /><br /></p><p align="left"><br /></p><br /><hr /><br /><a name="day6"><b>Day 6 </b>- Saturday, July 12 (Journey to Chiquila/Holbox and a stop in Punta Laguna) </a> <p></p><br />We packed up and settled our bill at Tita Tulum (prepaid via Paypal so there was nothing to do accept tell them we were leaving) and paused for a photop at the entrance. <p><br /><a href="http://www.flickr.com/photos/27391396@N08/3148634939/" title="P1000994 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3281/3148634939_6c70e862aa_b.jpg" alt="P1000994" width="768" height="1024" /></a><br /></p><p><br />We were a little sad to leave Tita's Cabana #1 behind but we did have a second phase to our family adventure - a trip to Holbox to see whale sharks. Holbox is a small island about 2 hours north of Cancun, it has even fewer Americanized amenities such as the lack of ATMs and certainly nothing that resembles a fast food joint. Directions were provided by Rodrigo (aka Rodd Sydney, Whale Shark Daddy). There are several providers of whale shark tours that launch from the PDC and/or Cancun areas but launching from Holbox meant you spent less hours in the boat and I wanted to see this small, rustic village called Holbox (pronounced hol-bosh). Rodrigo/Whale Shark Daddy was selected because he was the first Holbox-based provider to answer my inquiry email, he actually called me directly the next day, was very friendly and he walked me through all of the arrangements. He provided me a shortcut from Tulum to Chiquila which knocked at least 1.5 hours off of the total road time. Plus I realized the "shortcut" was actually the road that went past Punta Laguna monkey reserve. Prior leaving Atlanta, I had spent a lot of time reviewing directions, searching forum postings & other trip reports and I knew that Punta Laguna was a place that I wished to stop. However, I was a little concerned about the shortcut through the interior instead of following the 307 north road back to Cancun and the relatively easy directions from Cancun to Chiquila. I spent some time trying to eyeball the path via Google maps satellite view but generally trusted in the accuracy of Rodrigo's directions. With that said, the directions were perfect and while the roads themselves were often unmarked there were signs that said "Holbox", "Chiquila", "Kantunilkin" or "Nuevo Xcan" along the way. You basically head up the road towards Coba (which means you can stop here as part of the trip), take the first right at the circle (aka Glorietta) instead of going around to the left for Coba and spend about 45 minutes running down a narrow, unlined but well paved road. You'll pass a couple of Mayan villages, one of which must have been in the tourist business based on the vans parked out front and you'll eventually go right past Punta Laguna. Pac Chen is along this road but we didn't stop in for a visit, according to forum postings Pac Chen is for tour groups only. The following photos give you a view of this narrow road and the sign for Punta Laguna.<br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/3150568489/" title="P1010015 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3249/3150568489_b887c940e1_m.jpg" alt="P1010015" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/3150569709/" title="P1010019 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3287/3150569709_207d55feda_m.jpg" alt="P1010019" width="240" height="180" /></a><br /></p><p><br />I stopped at the front and hired a guide (recommended by forum postings), he spoke English, Spanish and Mayan and was very helpful. He showed us some leaf cutter ants, took us out on the lake in a canoe, marched us through several jungle trails and found us a monkey. There would have been no way to have done this on our own. Unfortunately we had arrived around noon which is when the monkeys are normally sleeping and much less active but the lake was stunning and jungle trails fun.<br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/2768626077/" title="P1010023 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3243/2768626077_f50b313143_m.jpg" alt="P1010023" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768625355/" title="P1010026 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3279/2768625355_927ba40dd6_m.jpg" alt="P1010026" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768624353/" title="P1010030 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3211/2768624353_450ec2ef9f_m.jpg" alt="P1010030" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768604605/" title="P1010028 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3172/2768604605_2ae8256741_m.jpg" alt="P1010028" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769472050/" title="P1010031 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3056/2769472050_c938901a91_m.jpg" alt="P1010031" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769468710/" title="P1010040 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3153/2769468710_bbab856194_m.jpg" alt="P1010040" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769467556/" title="P1010043 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3233/2769467556_c35311f405_m.jpg" alt="P1010043" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769465214/" title="P1010045 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3197/2769465214_0db13d52d5_m.jpg" alt="P1010045" width="135" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769464016/" title="P1010047 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3072/2769464016_10b6c361f5_m.jpg" alt="P1010047" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769460246/" title="P1010052 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3212/2769460246_8ddceb7480_m.jpg" alt="P1010052" width="180" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769458984/" title="P1010053 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3072/2769458984_f30bb92d17_m.jpg" alt="P1010053" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2769457712/" title="P1010054 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3053/2769457712_dcd788532f_m.jpg" alt="P1010054" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2768602845/" title="P1010062 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3244/2768602845_f4ea11d8bf_m.jpg" alt="P1010062" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768601917/" title="P1010063 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3020/2768601917_551c56fe7d_m.jpg" alt="P1010063" width="135" height="240" /></a><br /></p><p><br />On the way back out, we stopped at the small hut at the entrance to Punta Laguna and purchased some snacks & drinks (still had the cooler) for the next leg of the journey. We had to travel to Nuevo Xcan at Hwy 180, then to Kantunilkin, then San Angel, Solferino and finally Chiquila. Again, there are large signs to indicate direction so getting lost was never a concern. Plus there were interesting things to see along the road. Note: I filled up with gas in Tulum, while there is a Pemex in Chiquila by the docks, it didn't have any gas the day we left the area.<br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/3150645657/" title="P1010078 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3076/3150645657_aa5f2f60b1_m.jpg" alt="P1010078" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769597858/" title="P1010084 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3015/2769597858_6e817cc7be_m.jpg" alt="P1010084" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768747515/" title="P1010091 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3070/2768747515_0868fe883c_m.jpg" alt="P1010091" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768746403/" title="P1010100 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3161/2768746403_067b5694de_m.jpg" alt="P1010100" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/3151479580/" title="P1010090 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3070/3151479580_22010d3ede_m.jpg" alt="P1010090" width="240" height="180" /></a><br /><br /></p><p><br />After a long trek, we arrived in Chiquila and the ferry location, found Panchos Parking (recommended by Rodrigo) about 300 yards away from the dock. A nice young man named Juan Carlos came by with one of those "tricycles" to help move of bags from the car to the doc area. My son needed a restroom break and the one inside the boat itself was broken, so we walked up the Pemex where a nice young fellow charged us 5 pesos, there was no gas, just a 10 year old restroom attendant. We happily paid the toll and took care of business.<br /><br />The ferry tickets are inexpensive, under $5 USD each. The ferry ride itself was a little rough, your bags are strapped to the top of the boat and they were splashed some, luckily all the electronic gadgets were with us in the belly of the boat. It turned out to be quite crowded, one person brought his motorcycle as well.<br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/2769584974/" title="P1010104 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3206/2769584974_e955c6cd2a_m.jpg" alt="P1010104" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768722079/" title="P1010106 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3043/2768722079_be5d407e0b_m.jpg" alt="P1010106" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768731735/" title="P1010105 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3076/2768731735_51182daf35_m.jpg" alt="P1010105" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769575252/" title="P1010109 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3106/2769575252_10941fcb0b_m.jpg" alt="P1010109" width="240" height="180" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3151520108/" title="P1010107 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3117/3151520108_f21d4df4cb_m.jpg" alt="P1010107" width="135" height="240" /></a><br /><br /></p><p><br />The ferry ride itself was less than 45 minutes but it was hot, crowded and I have a tendency toward seasickness. I left the ferry with a slight headache to find that all the taxis had been taken. We waited for a while before we started dragging our bags down the sandy road where eventually a nice fellow in a yellow golf cart found us and took us to Casa Iguana. This was the low point of the trip as I was hot, tired, hungry, had a headache from the ferry ride and generally grumpy. Check in at Casa Iguana was slow to say the least, our room wasn't ready when we arrived so we had to wait about 30 minutes, the setting was beautiful but it was hard to appreciate at that moment.<br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/3150696649/" title="holbox-taxi by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3092/3150696649_8ec51dc225_m.jpg" alt="holbox-taxi" width="221" height="166" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768717043/" title="P1010110 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3010/2768717043_3283de734b_m.jpg" alt="P1010110" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768711749/" title="P1010111 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3273/2768711749_b13a6258ea_m.jpg" alt="P1010111" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/3150714255/" title="P1010115 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3109/3150714255_b255a37ff8_m.jpg" alt="P1010115" width="240" height="135" /></a><br /></p><p><br />The good news is that the room had several more amenities and we were gradually coming back to our form of civilization - there was a ceiling fan, two rotating floor fans and an AIR CONDITIONER! I had paid the $15 premium for A/C when booking the reservation and was that a stroke of pure genius. We rested in the cool air for a while then got ourselves cleaned up and walked into the village proper (about 300 yards a way). We went to <a href="http://www.holboxisland.com/restaurants/edelin-pizzas/">Edelin's</a> for some pizza and cold Cokes, rented a golf cart and had a blast taking turns driving around the small island. One thing that we were struck with was the level of littering - there was trash everywhere.<br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/2769550974/" title="P1010119 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3161/2769550974_58c704669c_m.jpg" alt="P1010119" width="135" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769553254/" title="P1010117 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3127/2769553254_103b268de2_m.jpg" alt="P1010117" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769552046/" title="P1010118 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3109/2769552046_d785cb7d71_m.jpg" alt="P1010118" width="240" height="135" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2768701383/" title="P1010120 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3084/2768701383_b32cdf7bae_m.jpg" alt="P1010120" width="240" height="180" /></a><br /><br /></p><p><br />The golf carts on Holbox are diesel powered therefore a bit noisy and have very, very slow acceleration but it turned out to be one of the biggest hits of the trip overall. We cruised all over the island, befriended several stray dogs and it turns out that while Tulum might win the prize for sunrise, Holbox provided some amazing sunsets. The rental cost around $40 USD for 24 hours and was absolutely worth it.<br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/2697104006/" title="P1010250 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3041/2697104006_132a0f18ba_m.jpg" alt="P1010250" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2769548760/" title="P1010122 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3216/2769548760_05e80dbfe3_m.jpg" alt="P1010122" width="240" height="180" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2697102752/" title="P1010247 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3160/2697102752_bf3b62ca31_m.jpg" alt="P1010247" width="180" height="240" /></a><br /><a href="http://www.flickr.com/photos/27391396@N08/2697101628/" title="P1010246 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3160/2697101628_43352c6780_m.jpg" alt="P1010246" width="180" height="240" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2768698047/" title="P1010128 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3228/2768698047_27e4788888_m.jpg" alt="P1010128" width="240" height="135" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2769544956/" title="P1010139 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3186/2769544956_d2db8b9383_m.jpg" alt="P1010139" width="240" height="135" /></a><br /></p><p><br /><br />It was now Saturday evening and Holbox was just wrapping up a big fishing tournament, there was plenty of fresh fish to go around, a live band and dancing. It was fantastic. I was able to capture a bit of it on video.<br /><br /></p><p><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Fnsqvv5J_K4&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/Fnsqvv5J_K4&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /></p><p><br /><br />We also spent some time on foot in the village, purchased some drinks and browsed some handmade jewelry.<br /></p><p>The Whale Shark tour pick up was at 6:30 am, the dock in the same location as the beach party - a short distance from Casa Iguana. So we went to bed with all the fans blowing and the A/C maxed out. We still had no TV and no phones but just a little A/C was HUGE win. It is amazing how much we like our creature comforts - I've gotten soft in my old age.<br /></p><p><br /><br /><a name="day7"><b>Day 7 - Sunday, July 13</b> The Holbox Whale Shark Tour</a><br /><br />Today was the big day, this was the single most expensive aspect of our trip. I felt the kids could handle the adventure based upon some previous experience. The girls and I had performed a night time snorkeling trip with manta rays off the Kona coast in Summer 2007 so we had some experience in the open ocean around extra large plankton consuming animals.<br /><br />A golf cart arrived to pick us up by 7:00 am where we went to have some coffee and cookies. We were on the water by 8:00 am and heading out to the open ocean. The whale sharks feed in an area where the Gulf of Mexico meets the Caribbean, our guide talked to us about how the color of the water shifted during our journey. </p><p><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2696268545/" title="P1010164 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3189/2696268545_296a77120a_m.jpg" alt="P1010164" width="240" height="135" /></a><a href="http://www.flickr.com/photos/27391396@N08/3151799104/" title="P1010184 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3126/3151799104_5d887b70b7_m.jpg" alt="P1010184" width="135" height="240" /></a><br /><br /></p><p>Our captain was on the lookout for sea creatures and abruptly throttled back to stop the boat. He had spotted a pod of "flippers", dolphins. One of these fellows was curious about us as we were about him. He came over for a visit.<br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2697086140/" title="P1010169 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3094/2697086140_55d8ed5c40_m.jpg" alt="P1010169" width="240" height="135" /></a><a href="http://www.flickr.com/photos/27391396@N08/2696271539/" title="P1010170 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3105/2696271539_2b88b4eab3_m.jpg" alt="P1010170" width="240" height="135" /></a><br /><br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/gqR_LpBEBco&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/gqR_LpBEBco&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>There was a disturbance in the water where on the surface it would appear that thousands of fish were fighting just below the surface of the water. Our guide indicated that they were sardines and the dolphins were herding and feeding on them. Perhaps tuna were hunting below as well.<br /><br />Sadly, we had to leave the dolphins behind as whale sharks were also feeding in these waters, it seemed only a few more minutes on our speedy boat to arrive in at their banquet table. The sea was thick and green, filmy, containing small bubbles, it was whale shark manna. Our guide and captain spotted a couple of these incredible creatures. We spent several moments just watching them swim past us and if you drill down to the high-res pictures you can see the water qualities that I attempted to describe.</p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/2697091938/" title="P1010196 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3024/2697091938_3d1d0b84c5_m.jpg" alt="P1010196" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/2697093026/" title="P1010197 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3080/2697093026_320e9d4632_m.jpg" alt="P1010197" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/2696280471/" title="P1010206 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3230/2696280471_4a6d8923af_m.jpg" alt="P1010206" width="240" height="135" /></a><br /><br /></p><p><br />Now it was time to get wet and we each took multiple trips into the water. Horizontal visibility was poor due to the water conditions but our guide & captain knew exactly how to navigate us, put us in the water at the right place for an up close and personal visit. This is a fish that is the same length as my GMC Yukon and I had previously fielded several questions about what happens if you get eaten. Well these guys are basically vegetarians so the only way to endanger yourself would be to try to swim down their throats, which isn't possible either, they move through the water pretty well. A swim with the whale sharks could only last a few minutes because that is about all that you'll have the endurance for.<br /><br /><a href="http://www.flickr.com/photos/27391396@N08/3151857812/" title="P1010221 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3084/3151857812_b69fbf73f2_m.jpg" alt="P1010221" width="240" height="135" /></a><a href="http://www.flickr.com/photos/27391396@N08/2768752069/" title="DSC01180 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3132/2768752069_de73e0c4fe_m.jpg" alt="DSC01180" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/2768751343/" title="DSC01179 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3215/2768751343_1bd70b6d00_m.jpg" alt="DSC01179" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/2768750495/" title="DSC01181 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3217/2768750495_12763d98a6_m.jpg" alt="DSC01181" width="240" height="180" /></a><br /></p><p><br />These short video clips capture the underwater experience and a feel for the "chase" pretty well. You can certainly hear this camera man huffing and puffing. I used the DicaPac underwater case on my cheap Sony digital camera.<br /><br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/4vNZexoTyKI&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/4vNZexoTyKI&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/j4p0XTuQARU&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/j4p0XTuQARU&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br /></p><p>After several swims, we had lunch on the boat and then to visit shallow area that had a rocky bottom, some sea plants and some fish. We spent time snorkeling there for a while, our guide pointed out some sleeping nurse sharks and we enjoyed many moments of simple serenity. We kept our eyes on the water for the boat ride back to hotel. There were flocks of golden rays "flying" through the water and we spotted a few mantas as well.<br /><br />We were dropped off at the beach in front of Casa Iguana and spent more time in the afternoon hitting the local internet "cafe" and exploring the island via golf cart. All roads are basically packed sand & dust. When it rains, large pools of muddy water form and when it is hot and dry then you are breathing the dust.<br /><br />There is plenty of the island that is only accessible via boat and/or on foot, the vegetation is of the scrubby, stunted breed and the island feels like a large sandbar. There are portions of the island that feel like a "third world country" due to the destruction caused by previous hurricanes. It appears that the local school was destroyed and all that is left is the shell of the buildings and some blackboards on the walls. Many of the homes were basically shacks and local dump isn't a land fill, we were already at sea level, it was simply an area of the island where everyone tossed their garbage. Holbox could use a lot of love, a Spring cleaning (litter abounds) and reconstruction.<br /><br /></p><p><br /><a href="http://www.flickr.com/photos/27391396@N08/2697108630/" title="P1010258 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3107/2697108630_61dbb5dbc0_m.jpg" alt="P1010258" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/2697109928/" title="P1010260 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3168/2697109928_684d8fd4f5_m.jpg" alt="P1010260" width="240" height="180" /></a><a href="http://www.flickr.com/photos/27391396@N08/2697110860/" title="P1010263 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3080/2697110860_9c01855234_m.jpg" alt="P1010263" width="240" height="135" /></a><br /><br /><a href="http://www.flickr.com/photos/27391396@N08/2697114828/" title="P1010281 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3215/2697114828_e7220759f3_m.jpg" alt="P1010281" width="240" height="135" /></a><a href="http://www.flickr.com/photos/27391396@N08/2696297189/" title="P1010276 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3084/2696297189_2d0cf2af2b_m.jpg" alt="P1010276" width="240" height="135" /></a><a href="http://www.flickr.com/photos/27391396@N08/2697111112/" title="P1010265 by burr.sutter, on Flickr"><img src="http://farm4.static.flickr.com/3072/2697111112_738f0e8d35_m.jpg" alt="P1010265" width="240" height="135" /></a><br /><br /></p><p><br />Dinner was at <a href="http://www.holboxisland.com/restaurants/viva-zapata/">Viva Zapata</a> and another beautiful sunset. Our trip was winding down and we were starting to think about home.<br /><br />One of my objectives was to introduce my children to another culture, for them to see firsthand a simpler, less wealthy lifestyle. In Tulum and Holbox, we spent time in the city parks, walking about the villages off the tourist friendly paths, we saw a wedding procession where it appeared the newly weds were under 16 years old. We watched children under the age of 2 playing in the dust & rubble by their homes. Dogs sleep on the streets (please watch for them as you drive about). I think my suburban mallrats now have a much expanded worldview.<br /></p><hr /><br /><p></p><a name="day8"><b>Day 8 - Monday, July 14</b> - Return to Civilization: Holbox to Cancun</a><br /><br /><br />I reserved a day in the schedule to make the return trip from Holbox to Cancun. All of our planned adventures were completed. The rental car was due back by 5:00 pm that day and we had a hotel reservation at the Cancun Marriot Courtyard right by the airport for the 7:00 am flight the next morning. Our only objective was to pack up, get a golf cart "taxi", catch the ferry, jump back in the rental car and return to Cancun. Easy right? Well I had managed to misplace the rental car key. We were still in Holbox, checked out from the room and awaiting the taxi so I make a point to verify all the critical items:<br />- Three kids - check<br />- Wallet - check<br />- Passports - check<br />- Cameras - check (didn't wish to lose the photos)<br />- Cell phone - don't matter<br />- Car keys - oh oh<br /><br />I had managed to lose the car keys and the brain went into overdrive. After a nearly perfect execution of seven days of Mexican vacation that required over 40 hours of intense planning over several months, I had managed to drop the ball during the wrap up phase. I was thinking about how to contact the rental car company when we landed in Chiquila, perhaps I would have to take a taxi to Cancun, get a spare key then taxi back to Chiquila to fetch the rental car. Perhaps we'd miss our flights due to all of this running around. How would the rental car company even find it at Panchos, 2 hours away from where I rented it? It was a very unhappy moment but I was doing the math, I could find the taxi, pay the fines, get the kids checked into the Marriot and work throughout the night if necessary to get the car returned to Cancun and still make the flight - sleeping was optional. Luckily, we kept digging through the rooms and all the luggage and after 45 minutes of near panic attack, I found the stupid key in the little pocket of the backpack where I had placed it for safe keeping! Doh!<br /><br />The golf cart taxi to take us to the ferry dock arrived about the same time that my blood pressure had returned to normal and I was once again "Hero Dad" instead of "stupid, I can't believe you lost the keys" (kids can be tough). The return ferry ride was a piece of cake. The rental car was exactly where we had left it, right beside Pancho's house. We moved back into it and prepared for the next multi-hour drive to Cancun. Then I had a hunch. We were leaving the Chiquila vicinity when a fast moving relatively new and clean passenger van went buzzing by me. It has to be a tour bus returning to Cancun after leaving Chiquila and it was moving at a great clip and would surely have the "shortcut". Sure enough the van took a left down a smaller unmarked road well before my directions (I had planned to follow them in reverse back to Hwy 180 near Nuevo Xcan) were leading me. I had studied various maps before the trip, including the satellite view on Google maps. I had read a few forum postings about a "secret" way the tour vans take between Chiquila & Cancun. This had to be it, it was leading in the right direction. So I stomped on the gas and followed a breakneck speed. We whipped through the unmarked backroads of the Yucatan Peninsula. The excitement level grew even more when a monsoon struck. It was a total downpour and you could barely see the car in front of you. Trees feel across the road and blocked it in areas but I had committed to staying with the van otherwise all was lost (or at least we were going to be). After a few twist and turns through what appeared to be a small village we popped out on two a two-lane road with painted lines and my sense of direction said this had to be Hwy 180, racing towards Cancun. The rains stopped, the clouds opened up, the sun came through and sure enough we were on the outskirts of Cancun less than 2 hours after leaving the Chiquila ferry docks!<br /><br />This was our first encounter with major civilization in 7 days. Cancun is mini-America with McDonalds and Wal-Mart and all the obnoxious tourist junk & neon of Panama City, Florida or Ocean City, Maryland. The kids saw a Domino's Pizza and started screaming - it was an eat-in joint in additional to delivery. We pulled over and gorged ourselves and American tasting food for the first time in a week - it was heavenly.<br /><br />At this point the sun was shining again and we found our way into the "elbow" of Cancun with its high rise hotels, pirate ships, booze cruises, glitzy malls and on the radio - American music (the radio had been silent for the previous 7 days). We were overjoyed and the following video captures that moment perfectly.<br /><p><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/3mssmp3WRDA&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/3mssmp3WRDA&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br /></p><p><br />We had one final stop as I've been to Cancun a few times before. My children really liked what they saw, they had been starved, sticky, sweaty, sandy, without hair dryer/flat iron, radio, TV, cell phones, etc for a complete week at this point.<br />So I decided this was a moment that would allow for an important lesson! I pulled into the flea market that sits in front of The Plaza Forum by the Sea. For those of you who have not experienced the flea market, well, you should experience it once. There are dozens of little shops, all selling the same cheap spring break tacky t-shirts (beer and sex are popular design themes), the same shot glasses, the same overpriced somberos, Mexican blankets and figurines, beer koozies, counterfeit designer items, etc. The shop keepers all speak very good English and they are aggressive, they stand out in the hallway and give you their best sideshow barker come on. Some of the better lines are "Come in, just for the hell of it", "50% off just for you, special deal, good price" and my personal favorite, "Come see my shit". They shopkeepers are harmless if sleazy and the parking attendant wanted a personal tip for watching our car. We did purchase a few pieces of junk after haggling and hearing about how the salesperson's boss was going to kill them for the making such a bad deal. It was a fake Mexican team soccer jersey so his mark-up in his asking price was ridiculous to begin with.<br /><br />At that point, my children had a better feeling for Cancun and I left feeling pretty good about the lesson learned. There is rare and extraordinary natural beauty, rich culture and a glimpse of ancient history in the Yucatan Peninsula but it is not in Cancun.<br /><br />We checked into the Marriot Courtyard, washed smelly clothes in their laundry room, took really hot showers, swam in the pool, watched Disney channel, made phone calls to friends & family back home and got on the Internet.<br /><br />The last piece of the puzzle was the returning of the rental car and the Marriott Courtyard was directly beside the strip mall where I had picked up the original Nissan Tsuru that was switched in Playa Del Carmen, The car was filthy after several days of surviving our adventures but it didn't have a scratch on it. Plus the original $288 price quote included all insurance and had no deductible. So I drive it around to the Continental/America agency office and started the check-in process. The same folks who had helped me a week earlier were there and they took the key and looked over the car. The problem was they didn't use computers and the records associated with the car were back in Playa Del Carmen and they couldn't finish the transaction and present me the final bill without the paperwork! This was a little bit frustrating and they told they would get someone to drive up the records and they'll bring my bill to the hotel. I knew this was dangerous but was tired at this point. I walked back the hotel and never heard from them again. I did check my credit card statement carefully and it would appear they ran the charges for $312 which was close enough to the original estimate that I've not tried to pursue any long distance complaints. It goes with out saying that I can not recommend Continental (<a href="http://www.blogger.com/www.continental-rentacar.com">www.continental-rentacar.com</a>)and won't contact them for my next trip. The good folks in the tulum.info forums had also suggested Easyway (<a href="http://www.blogger.com/www.easywayrentacar.com">www.easywayrentacar.com</a>) and I plan to give them a shot on my next visit.<br /><br />We fly out on July 15th, clean, dry and well groomed but with many, many excellent experiences behind us. It was time & money very well spent.<br /></p>Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.comtag:blogger.com,1999:blog-7119932468549495710.post-87217728855429824542008-10-10T17:08:00.004-04:002008-10-10T17:20:04.742-04:00jBPM & JBoss ESB DemonstrationI am a learn by example, learn by demonstration kind of guy. I prefer to see the technology running before I'm willing to invest time into downloading it, reading the documentation and trying it out. <br /><br />Here is a Flash-based recording of JBoss ESB + jBPM. This is your best starting point if you only have 17 minutes for an immersion into SOA the JBoss way. This demo includes the Spring AOP trick of "eavesdropping" (aka wiretap) on the JPetstore so that the order is routed through the ESB and into a jBPM process which orchestrates the services & manages the human tasks.<br /><br />jBPM and ESB 4.2 Demo: <a class="moz-txt-link-freetext" href="http://www.redhat.com/v/webcast/SOAdemo2/SOADemo2.html">http://www.redhat.com/v/webcast/SOAdemo2/SOADemo2.html</a><br /><br />I'll make an effort to record more demonstrations of JBoss ESB quickstarts & examples in the future. For more information on JBoss ESB, please visit: <a href="https://www.jboss.org/jbossesb/">www.jboss.org/jbossesb</a>Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com3tag:blogger.com,1999:blog-7119932468549495710.post-16801113369479159202008-10-08T12:22:00.003-04:002008-10-08T20:23:36.053-04:00Eclipse World & Enterprise Service BusNext presentation will be at <a href="http://www.eclipseworld.net/index.html">Eclipse World</a> in Reston, VA (Oct 28 -30 2008) cover Advanced Enterprise Service Bus techniques.<br /><br />Thursday, Oct. 30, 10:30 am – 11:45 am<br /><a href="http://www.eclipseworld.net/programday3am.html#6072">607 Advanced Enterprise Server Bus</a><br /><p>This will be a dynamic session focused on demonstrating the customary capabilities associated with an Enterprise Service Bus for SOA-focused middleware. These capabilities include service hosting, message delivery, endpoint registry, protocol mediation, transformation, orchestration, BPM, declarative routing rules, BPEL, and rules services.</p><p>The instructor will also discuss enterprise integration patterns, such as Filter, Content-Based Router, Splitter, Aggregator, Wire Tap, etc. In addition, he will demonstrate a technique that shows a practical application of Aspect Oriented Programming (AOP) that allows you to extend your existing Web application silos to an ESB infrastructure.</p>Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0tag:blogger.com,1999:blog-7119932468549495710.post-42090340706302128722008-10-08T11:58:00.004-04:002008-10-08T20:24:07.155-04:00Tweets in Blog PostsObviously, I'm not the most prolific blogger, I rarely have to time to sit and write. The majority of my outbound enthusiasm is via public speeches and webinars. In an effort to slowly ease into become a writer/publisher, I'll try to make my Twitter tweets feed the blog. <br /><br />The trick is simple once you know where to look:<br />- open your twitter account<br />- click on Settings<br />- More Info URL: insert your blog url here<br />- click on (You can also add Twitter to your site here)<br />- select from myspace.com, Blogger, facebook, TypePad or Other<br />- In the case of Blogger it provides a Javascript "widget" to add which at this moment (for me) added some of the tweets plus some leftover Javascript that shows up as content. I was able to minimize that to just 3 commas.<br /><br />I'll have to figure that out in the future.Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com1tag:blogger.com,1999:blog-7119932468549495710.post-15906395087071947612007-07-29T10:38:00.000-04:002007-07-29T10:54:17.735-04:00A Beginning<p style="margin-bottom: 0in;" lang="en-US"><span style="font-family:Courier New, monospace;"><span style="font-size:85%;">In January of 2002 the Atlanta Java Users Group (<a href="http://www.ajug.org">www.ajug.org</a>) held a meeting entitled Application Server Panel where we brought in all the major players at that moment. We had representatives from IBM, BEA, Sun and few others that have since left the game. Our president at that time, Tom Elrod, had worked very hard to invite all the major players and to lay down the ground rules for the event.</span></span></p> <p style="margin-bottom: 0in;" lang="en-US"><span style="font-family:Courier New, monospace;"><span style="font-size:85%;">Each vendor was given the opportunity to give a 10 minute pitch, why they were the best, how developers could get started with their products and associated costs. We had a standing room only crowd and squeezed at least 150 people into a room that comfortably held 90. It was somewhat warm and claustrophobic. One of our members had known that Marc Fleury had just moved to Atlanta and was behind the open source application server called <a href="http://labs.jboss.org/">JBoss</a>. Though the organizers had no confirmation that Marc would show up, he walked in a little before the meeting started and was given the seventh speaking slot for the evening. He had no free t-shirts, no beer koozies and no CDs of evaluation software, no entourage, just himself.</span></span></p> <p style="margin-bottom: 0in;" lang="en-US"><span style="font-family:Courier New, monospace;"><span style="font-size:85%;">Each vendor did a great job talking up their competitive advantages and how to get access to inexpensive developer licenses and costs associated with production licenses. They had giveaways and they were informative and engaging. Many of them remarked how hard it was to give a sales pitch in front of their head to head competition. I wish I had a photo off all those vendors standing side-by-side with their logo'd shirts, bearing gifts for the audience.<br /></span></span></p><p style="margin-bottom: 0in;" lang="en-US"><span style="font-family:Courier New, monospace;"><span style="font-size:85%;">At some point, Marc asked the fellow beside him, the representative for Macromedia (at least that is how I remember it), if he could borrow his laptop and busily started preparing a presentation. All the traditional vendors continued their sales pitches and at last it was Marc's turn. He stood to hook up the borrowed laptop to the projector and he opened with a verbal "In the true spirit of open source, I have borrowed this fellow's laptop for this presentation, thank you" indicating the salesman to his right. This statement got a small reaction from the crowd. His first slide said "JBoss" and then in big bold black letters up flashed "Its FREE". He stated that there was no cost for developer licenses, no cost for production licenses regardless of how many CPUs and you could simply download it. At this point, the audience broke into a applause, cheering, mixed with some guffawing/scoffing. Marc then setup his next slide with a verbal "and what is so special about our technology", click the button and the next slide says "It doesn't suck". This got a big reaction from the attendees and after the crowd settled down, he then went on to explain his vision of open source software, J2EE application servers, why .NET was a good thing and the need for a robust alternative to the commercial proprietary offerings.</span></span></p> <p style="margin-bottom: 0in;" lang="en-US"><span style="font-family:Courier New, monospace;"><span style="font-size:85%;">It is still the single most memorable JUG meeting held in Atlanta. Several of the meeting attendees have since joined JBoss as employees. Plus, the community was really kick started on the notion of using open source software, so much so, that we promptly setup a meeting for a new framework called Struts and the other technologies available on Jakarta.Apache.org. Now the open source topics are the most popular overall and OSS software technologies have changed the way all Java developers operate.</span></span></p> <p style="margin-bottom: 0in;" lang="en-US"><span style="font-family:Courier New, monospace;"><span style="font-size:85%;">I'd love to hear your favorite open source project, experience and/or JUG story. </span></span> </p> <p style="margin-bottom: 0in;" lang="en-US"> </p> <p style="margin-bottom: 0in;"><br /></p>Anonymoushttp://www.blogger.com/profile/10931204415287849441noreply@blogger.com0