JeanCarl's Adventures

Sentiment Bowl

February 07, 2016 | Projects

The Super Bowl is happening this afternoon in the San Francisco Bay Area. There’s going to be (already is) a lot of activity on social media, with fans rooting for their favorite team to win the trophy. Fans on Twitter usually choose to positively support their team with words of encouragement, or talk negatively to the other team.

Photo

So which team has the more positive fans? Seems like a pretty simple problem to figure out. I created simple web app I call the Sentiment Bowl using the positive tweets being made around the two twitter handles @broncos (Denver Broncos) and the @panthers (Carolina Panthers). Using the Insights for Twitter service on IBM Bluemix, the score is settled based on how many positive tweets each team is mentioned in. You can find the running application at http://sentimentbowl.mybluemix.net

Photo

To get started, sign up for a free Bluemix account. Click on the Catalog link in the upper right corner of the dashboard.

We’ll use Node-RED, one of my favorite services in Bluemix because it has a graphical interface that makes prototyping quick and easy. Click on the Node-RED Starter under the Boilerplates section.

Photo

Give the application a name and a host. If you choose myapp, your application will be available at http://myapp.mybluemix.net.

Photo

The application will begin staging. Once it is running, click on the Overview link in the left sidebar. We want to add the Insights for Twitter service. Click on Add a Service or API.

Photo

Scroll down the catalog to the Data and Analytics section and choose the Insights for Twitter service.

Photo

Click on the Create button to create and bind the service to your application.

Photo

You’ll be prompted to restage the application. Click on Restage.

Photo

Once the application is running, click on Environment Variables. Copy the URL value under the twitterinsights.credentials.url property. Save this for later when we configure the application.

Photo

Visit the URL of your application. This is the homepage of Node-RED. Click on the red button labeled Go to your Node-RED flow editor.

Photo

On the left side is a palette of nodes that perform different actions. Some have a grey circle on the left, where you can connect inputs, and/or a grey circle on the right, where you connect outputs. Click and drag your cursor from output circles to input circles to create what are called flows.

Photo

To save you some time, you can import the nodes and the complete application. Click on the menu button in the top right corner. Click on Import and then Clipboard.

Photo

Copy the following JSON into the textbox:

[{"id":"5aeae2c1.f445cc","type":"inject","z":"4686641b.b9799c","name":"init","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":true,"x":153,"y":112,"wires":[["2dac8fd8.260108"]]},{"id":"9e50786.586cc88","type":"http request","z":"4686641b.b9799c","name":"","method":"GET","ret":"obj","url":"","x":417.5,"y":180,"wires":[["1cd41739.28a8f9"]]},{"id":"1cd41739.28a8f9","type":"function","z":"4686641b.b9799c","name":"","func":"context.global.team1Score = parseInt(msg.payload.search.results);\n","outputs":1,"noerr":0,"x":588.5,"y":179.5,"wires":[[]]},{"id":"5c6649b9.b4ed8","type":"http request","z":"4686641b.b9799c","name":"","method":"GET","ret":"obj","url":"","x":416,"y":243.5,"wires":[["be20cbcb.312ab8"]]},{"id":"be20cbcb.312ab8","type":"function","z":"4686641b.b9799c","name":"","func":"context.global.team2Score = parseInt(msg.payload.search.results);\n","outputs":1,"noerr":0,"x":586,"y":243,"wires":[[]]},{"id":"37bfe23b.c0e266","type":"function","z":"4686641b.b9799c","name":"","func":"return {\n    url: context.global.serviceUrl+':443/api/v1/messages/count?q='+context.global.team1Twitter+'%20sentiment%3Apositive%20posted%3A'+context.global.sentimentStartTime+','+context.global.sentimentEndTime\n}\n","outputs":1,"noerr":0,"x":268.5,"y":180,"wires":[["9e50786.586cc88"]]},{"id":"7b70c516.380f54","type":"inject","z":"4686641b.b9799c","name":"","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":true,"x":119.5,"y":180,"wires":[["37bfe23b.c0e266","ce7dcbc8.e820a8"]]},{"id":"5a803eb4.708c98","type":"http response","z":"4686641b.b9799c","name":"","x":734,"y":374,"wires":[]},{"id":"f44030b2.e6cfc8","type":"http in","z":"4686641b.b9799c","name":"","url":"/","method":"get","swaggerDoc":"","x":128,"y":374,"wires":[["e60c9676.ac66e8"]]},{"id":"ce7dcbc8.e820a8","type":"function","z":"4686641b.b9799c","name":"","func":"return {\n    url: context.global.serviceUrl+':443/api/v1/messages/count?q='+context.global.team2Twitter+'%20sentiment%3Apositive%20posted%3A'+context.global.sentimentStartTime+','+context.global.sentimentEndTime\n}\n","outputs":1,"noerr":0,"x":267.5,"y":242,"wires":[["5c6649b9.b4ed8"]]},{"id":"e60c9676.ac66e8","type":"function","z":"4686641b.b9799c","name":"","func":"msg.payload = {};\n\nif(context.global.team1Score > context.global.team2Score) {\n    msg.payload.headline = context.global.team1Name+' lead '+context.global.team2Name+' '+Math.max(context.global.team1Score, context.global.team2Score)+'-'+Math.min(context.global.team1Score, context.global.team2Score);\n    msg.payload.team1 = context.global.team1Logo;\n} else if(context.global.team1Score < context.global.team2Score) {\n    msg.payload.headline = context.global.team2Name+' lead '+context.global.team1Name+' '+Math.max(context.global.team1Score, context.global.team2Score)+'-'+Math.min(context.global.team1Score, context.global.team2Score);\n    msg.payload.team1 = context.global.team2Logo;\n} else {\n    msg.payload.headline = context.global.team1Name+' tied '+context.global.team2Name+' at '+context.global.team1Score;\n    msg.payload.team1 = context.global.team1Logo;\n    msg.payload.team2 = context.global.team2Logo;\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":345,"y":374,"wires":[["8fda4fd2.3f95b"]]},{"id":"8fda4fd2.3f95b","type":"template","z":"4686641b.b9799c","name":"","field":"payload","fieldType":"msg","format":"handlebars","template":"<html>\n    <head>\n        <title>Sentiment Bowl 2016</title>\n        <style>\n            img { max-width: 200px }\n            body { font-family: Arial }\n        </style>\n    </head>\n    <body>\n        <center>\n            <h2>{{payload.headline}}</h2>\n            <img src=\"{{payload.team1}}\" />\n            {{#payload.team2}}\n                <img src=\"{{payload.team2}}\" />\n            {{/payload.team2}}\n            \n            \n        </center>\n        <footer style=\"position: absolute; bottom: 10px; text-align: center; width: 100%\">Powered by <a href=\"http://nodered.org\" target=\"_blank\">Node-RED</a> running on <a href=\"http://bluemix.net\" target=\"_blank\">IBM Bluemix</a>, using <a href=\"https://console.ng.bluemix.net/catalog/services/insights-for-twitter/\" target=\"_blank\">Insights for Twitter</a></footer>\n    </body>\n</html>","x":520,"y":374,"wires":[["5a803eb4.708c98"]]},{"id":"2dac8fd8.260108","type":"function","z":"4686641b.b9799c","name":"Set Config","func":"context.global.serviceUrl = 'https://1abc2345-defg-6789-h012-34f5678i9012:ab0c1defgh@cdeservice.mybluemix.net';\ncontext.global.sentimentStartTime = '2016-02-07T23:30:00Z';\ncontext.global.sentimentEndTime = '2016-02-08T03:30:00Z';\n\ncontext.global.team1Twitter = '@broncos';\ncontext.global.team1Name = 'Denver Broncos';\ncontext.global.team1Logo = 'https://pbs.twimg.com/profile_images/554750999852642304/fpZDS_N_.png';\n\ncontext.global.team2Twitter = '@panthers';\ncontext.global.team2Name = 'Carolina Panthers';\ncontext.global.team2Logo = 'https://pbs.twimg.com/profile_images/692843341415735297/hm2Vrex6.jpg';","outputs":1,"noerr":0,"x":357,"y":112,"wires":[[]]}]

Double click on the node labeled Set Config. Replace the URL in context.global.serviceUrl with the URL you copied earlier from the Environment Variables. This will use the Insights for Twitter Bluemix service you created earlier.

Photo

Click on Deploy and visit your application’s URL again. You should see a webpage similar to this.

Photo

You can customize the Twitter handles and the time range (change the context.global.sentimentEndTime value if the game goes into overtime and click Deploy to the save the changes). For the big game, I’ve used the kickoff time of 3:30 Pacific.

So who do you think will win the Sentiment bowl on Sunday?

Year in review

December 31, 2015 | Conferences

Another year, 2015, has come and gone so quickly. So I guess this would be a good time to review what has happened this year.

AT&T Developer Summit

I look forward to the AT&T Developer Summit each year in Las Vegas. A hackathon, developer conference, and CES started this year off with a bang. Neon Trees played at the afterparty.

Photo

Ireland

After enjoying Europe last September, I decided international travel wasn’t that bad. I flew to Ireland. I really enjoyed the rolling green hills and beautiful scenery as we drove around the island. And driving on the other side of the road wasn’t too hard to get used to.

Photo

Photo

Vancouver and Victoria

Traveling up north to Canada was also pretty amazing.

Photo

SpaceX 6 Launch

I visited NASA Ames to watch a livestream of the launch of SpaceX CRS-6 Dragon spacecraft. Unfortunately, as is common in spaceflight, it was delayed.

Photo

Honolulu

What better place to enjoy warm weather and beautiful sunsets than Hawaii? I got to visit a number of National Parks and Historic sites on the island.

Photo

Maker Faire

This was my second time at Maker Faire. It is inspiring to see the stuff people make. We are all makers.

Photo

Twilio Signal Conference

Twilio gave away hackpacks to attendees at the Signal conference. Connected to the littleBits, I hacked a brute force maze solver. They Might Be Giants performed at the afterparty.

Photo

Photo

Photo

Photo

Couchbase Conference

Couchbase held their conference at Levi’s stadium. It was my first time at the stadium and couldn’t believe the view from the press box.

Photo

Photo

AT&T FutureCast

AT&T Foundry in Palo Alto hosted a FutureCast with Nir Eyal, author of Hooked.

Photo

Intel IoT Roadshow

Intel hosted a IoT Roadshow at nestGSV in Redwood City and gave everyone an Intel Edison board. With support for Node.js, it’s pretty simple to hack hardware.

Photo

Photo

Photo

SFO Hackathon

Who thought my two passions, traveling and hackathons could collide? SFO held a hackathon and we used IBM Watson to match personalities of fellow business travellers in the terminal.

Photo

Photo

Levi’s Stadium IOT Hackathon

I also never imagined that I would attend a hackathon at a football stadium. Angelhack, the NFL, and Levi’s stadium hosted a hackathon around the Internet of Things.

Photo

Photo

Photo

Intel Developer Forum conference

Intel held its annual developer conference in San Francisco. Young the Giant and the Fray played at the afterparty.

Photo

Photo

Photo

Tina Seelig at AT&T FutureCast

Tina Seelig, author of InsightOut, spoke at the AT&T FutureCast held in Palo Alto.

Photo

Super Bowl Trophies

At the Art and Wine festival in Mountain View, I had the chance to see up close the Super Bowl trophies won by the San Francisco 49ers and the Oakland Raiders.

Photo

TechCrunch Disrupt hackathon

It can take some nerves to speak in front of a group of people. How about a one-minute pitch at the TechCrunch Disrupt hackathon? Check!

Photo

Box Conference

Box held it’s annual conference, and One Republic played at the Bill Graham Civic Auditorium in San Francisco.

Photo

Photo

Photo

Money 20/20 Hackathon

Money 20/20 hosted another hackathon this year. Who doesn’t like $5k/$10k checks in return for hacking sponsor’s APIs.

Photo

Oracle Open World

After three long days at Oracle Open World, attendees were bussed over to Treasure Island for a concert by Sir Elton John. From riding a Ferris wheel to all the food you could possibly eat, to an amazing performance, this was one of the highlights of the year.

Photo

Photo

Quickbooks Connect

After the hackathon, the Quickbooks Connect conference featured keynote Oprah. She shared life lessons that she has learned. The afterparty featured the Goo Goo Dolls.

Photo

Photo

Photo

As the year comes to a close, I now realize how much I have grown this year. Sometimes we don’t remember all the adventures we have had or appreciate how much we learn and change the lives of those we come into contact with. Take the time to teach someone something new.

And I’ve realized another new goal I apparently have. If it isn’t obvious, I’ve been to quite a few conferences this year and they have had some great bands play. My goal is now to attend as many live performances of major musicians at conference after parties. I may be cheap, but I seem to be doing a pretty good job at hitting conferences with decent after parties and not paying for them.

Keep up the adventures and having fun. Happy New Years!

Connected Teddy Bear

November 21, 2015 | Hackathons

What if a parent could keep track of how their child’s moods fluctuates? This might sound creepy, but here’s a scenario. A father is away from home on a business trip and has limited communication, let’s say via text messaging. Could an interaction through a toy, such as a stuffed teddy bear, bridge the parent and child and offer a (fun) way to communicate?

That was the hack I worked on during this past weekend. We ended up using an Intel Edison board that prompted the child to select one of five emotions: sadness, disgust, anger, fear, and joy. The parent receives a text message and can either send a custom message back to the child via the LCD, or can choose to send a message provided by a third-party.

Through multiple interactions with the toy, a parent can understand the emotions that a child goes through via a dashboard. Without going into depth in child psychology, a child may suffer certain emotions during periods where a parent is away from home for an extended time.

Photo

Here’s how I built the connected Teddy Bear. Here’s what you’ll need if you’re interested in building something like this:

Node-RED

To code the logic of Alex, we’ll use Node-RED. Node-RED is an easy to use graphical interface that offers different functionality (called nodes) that are connected together to construct flows. These flows can be triggered by manual injection, HTTP requests or by incoming IBM IoTF events, to name just a few of many options.

Sign up for IBM Bluemix. In the Bluemix Catalog under Boilerplates, there’s a Node-RED Starter.

Photo

Choose a name for the application and a host. I chose connectedbear as the host, so my Node-RED application is available at http://connectedbear.mybluemix.net/red. Click Create.

Photo

This will create a Node-RED application, with a Cloudant DB backend. The application will stage and then start. Click on the Overview link in the left sidebar. We need to add an IBM Internet of Things Service so that the bear can talk to the Internet. Click on Add a Service or API. In the Internet of Things category, choose the Internet of Things Foundation service.

Photo

You can name the service, or use the default name. The important part is that the application is selected for which you want to bind the Internet of Things service to.

Photo

If prompted to Restage the application, click Restage.

Photo

Register Device

In order for the bear to send device events and receive commands from the Internet of Things Foundation service, we need to register the device. In the application overview, click on the Internet of Things Foundation service in the left sidebar. Then click on Launch dashboard.

Photo

This is where you can manage the connected devices and the connected applications. First, we need to define a device type. The device type is a way to categorize the types of objects that connect to the service and can make it easier later on to target specific types of objects. For example, in the future there might be both a bear and a penguin. The penguin could offer more functionality and our program could send additional commands to specially the penguin device type.

To create a new device type, under the Device Types tab, click on the Create Type button. Enter the device name, bear, and a description. Click Next to skip through the rest of the screens. They can be left with the default values.

Photo

Now we have one device type. Let’s register the Intel Edison board we have as a device. Click on the Devices tab, and then the Add Device button. The device type we just added appears in the list. Select it and click Next.

Photo

The Device ID is a unique identifier for this device. Since this is a small demo, I’m going to use a friendly name, alex. However, it might be better to use a naming system that allows for tons of these devices to be uniquely identified. Maybe using something like  alex-0000001 that sequentially increases would support millions of these units of our Alex model.

Photo

Click Next and skip through the screens until you get to the Device Credentials summary screen. Copy down the Organization ID, the Device ID, and the Authentication Token. This is the only time you’ll be able to see the Authentication Token. If you lose this token, you can delete and re-add the device. However, a new Authentication Token will be automatically generated.

Photo

Constructing the Teddy Bear

I used an Intel Edison board with a Grove starter kit from Seeed. You’ll need:

  • 1 Intel Edison Board
  • 1 Grove Base Shield
  • 3 Grove Cables
  • 1 Grove Rotary Angle Sensor
  • 1 Grove Button
  • 1 Grove LCD RGB Backlight

Photo

Connect the Rotary Angle Sensor to port A0. Connect the Grove Button to port D2. Connect the LCD RGB Backlight to port I2C.

Photo

I won’t detail the process of flashing the Edison board. Check out the Getting Started guide from Intel. Download the client folder from my repo and modify the app.js file.

Using the Organization ID, the Device ID, and the Authentication Token values from the previous step, modify the following lines:

// Set up the IBM IoTF device client.
var deviceClient = new require('ibmiotf').IotfDevice({
  'org': '-----', // Organization ID
  'type': 'bear',
  'id': '-----', // Device ID
  'auth-method': 'token',
  'auth-token': '-----' // Authentication Token
});

Copy these files onto the Intel Edison.

Twilio

Twilio is a very developer friendly platform to send and receive text messages. Sign up for an account and create a phone number.

In the Messaging settings for the newly created phone number, enter your Node-RED application URL, appended with /twilio. My application host was connectedteddybear, so the value I would use is https://connectedteddybear.mybluemix.net/twilio . Click Save.

Photo

Lastly, click on Getting Started. There’s a Show API Credentials link in the top right corner. Copy these credentials.

Photo

Control logic in Node-RED

We’ve set up the Intel Edison to send and receive events, but where’s the heart of the bear? That’s where Node-RED comes in. Using a graphical interface, we’ll make stuff happen with very little code. Well, sort of. Import the following JSON, which represents all the nodes.

Copy the following block, or you can find it in the file named noderednodes.txt.

In Node-RED, click the Menu icon in the top right, then Import, then Clipboard.

Photo

Paste the nodes in the textbox.

Photo

Add a Twilio node and connect it to the Create message node in the top right. The Twilio node needs to be configured with the API credentials, the Twilio phone number you created, and a number to send text messages to.

Photo

Connected Teddy Bear

Start the Node.js application on the Intel Edison by running the command:

node app.js

The Teddy Bear should connect to the Internet of Things Foundation, send a connect command to the Node-RED application, which will send down an emotion prompt.

# node app.js
[2015-11-21 02:39:00.885] [INFO] [default] - Connected to IoTF successfully
Teddy bear connected
Command :: interactive with payload : {"interactive":true, "text": ["What are you feeling?", ""], "options":["Joy", "Fear", "Anger", "Disgust", "Sadness"]}

Photo

Turn the Rotary Angle Sensor to change the option. Press the button to submit the emotion to the Internet of Things, which sends it to the Node-RED application. The Node-RED application will construct a message using this value, and send it to Twilio to send a text message. The Node-RED application also saves this emotion response in the CloudantDB.

Text a * back to the Twilio phone number to get a motivational quote, a # to prompt for another emotion response, or any other message to send a custom message back to be displayed on the Teddy Bear.

Photo

Emotion Dashboard

Now that the emotions are being collected in the Cloudant DB, let’s create a dashboard to see the statistics. How often is the child feeling a certain emotion?

In the repo, download the server folder. In the app.js, change the URL to point to the endpoint in Node-RED application you created earlier.

...
$http.get('http://<strong>connectedbear</strong>.mybluemix.net/childMoods').then(function(response) {
  $scope.moods = response.data;

  var moods = {};
  for(var i in $scope.moods) {
...

The next part is optional. You can choose a custom host name for the dashboard, or use the default one. The default host will choose a random word and add it to the following URL teddybear-.***.mybluemix.net.

You can customize it by modifying the manifest.yml file, and changing the host value:

applications:
- name: connected-teddy-bear-${random-word}
  memory: 64M
  host: <strong>teddybear-${random-word}</strong>
  buildpack: https://github.com/cloudfoundry/staticfile-buildpack.git

This manifest file will use the static file build pack from Cloud Foundry, and deploy this to simple web application to Bluemix. Before pushing this application to Bluemix, download and install the Cloud Foundry command line tool. To push the application, run the command:

cf push

Now you can open a browser and view the dashboard:

Photo

This AngularJS web application dashboard can be extended. Some ideas include:

  • Be able to push a question/answer set to the teddy bear from the web application.
  • Build a chat application, where the bear can respond given a defined set of answers.
  • Schedule messages to be sent to the bear, in time for a child's bedtime, or when she wakes up.

Think of all the possibilities!

Live from Quickbooks Connect hackathon

November 01, 2015 | Hackathons

I’m feeling especially creative this morning. I blame it on the time change and getting an extra hour of sleep. So today I’m at the Quickbooks Connect hackathon sponsored by Intuit. My only ideas this morning are about challenging my comfort zone in a new way.

I want to blog this hackathon experience and show how I hack. This IS MY idea.

First challenge of the day: I need some suggestions on what to build. Send me ideas on Twitter at @dothewww. I’m going to continue updating this blog post with my experience throughout the day.


9:30am Breakfast - this is a good start for the day

Photo


9:53am A view from from the corner

Photo


10:20am Panel

Robert Tabz, owner of Jougert talks about running his small business. Pain point, working with vendors and having to buy more quantity of supplies than he has room for. He would pay more for less, but vendors don’t offer that option.

Connie Ellis, Owner of SimplyFJB, sharing that small business don’t have business plans or know what they will be doing in the future.

Asad Ramzanali, manager of CFSI, There are processes around reporting earnings in a non-profit entity.  Spends a week of manpower every 6 weeks to pull financials and accounting time. 3 days to 2 weeks spent on reporting.

Naomi Kinsman, Founder of Society for Young Inklings talked about the challenges of accounting for book donations.

London Delicath, Owner of School of Rock, talks about drive-bys or word of mouth referrals as discovery methods that brick and mortar business typically have. Took about a year for organic social media engagement. Chose not to use Yelp because she hasn’t received a glowing review.

Panel agrees that reconciliation of expenses and managing receipts is avoided like the plague. There are tons of tools that make this easier, but we still don’t like doing it.

3/4 of School of Rock clients are auto payments.

Naomi: Managing volunteers can take more time and effort than is gained from having them help. I rather do it myself than have to setup a computer and license for someone to do perform a task.

Starting a new business is scary. You are in the trenches. You don’t want to fail. The biggest risk is the one you haven’t taken.

Photo


12:15pm Lunch - turkey, roast beef, kale, salad, too many choices…let’s just eat!

Photo


12:28pm - Plan A (aka Idea #1) isn’t gonna work

After talking with several of the panelists about my initial idea of a CRM, realizing it won’t really work as I thought. Waiting for the first breakout session to see the value of Quickbooks Online.


1:15pm - Do you speak Node.js?

Doesn’t look like there’s a Node.js library. I’ll have to use PHP. [edit, looks like there’s an unofficial Node.js module]

Photo


2:10pm - OAuth troubles

Feels like deja vu. OAuth troubles again this year.


 

2:35pm - Time to hard code the credentials

Time to hard code the OAuth token credentials and keep this train moving.


3:16pm - We’ve got sales

Aggregating and totaling sales amounts by the hour. Check!

Photo


3:34pm - Vegetarian soft pretzel? Okay!

Photo

 


3:52pm - Time to go a little deeper and access the hardware…

Photo


5:08pm - Everyone is accounted for…but sales are slow…

Photo


5:35pm - LCD screen connected…

Photo


7:41pm Network gremlins…grr

Internet connected devices act funny when the network doesn’t behave. Device is now reporting headcount to the Internet of Things Foundation service. Yay!


8:11pm Score! Just won the unicorn slippers!

Photo


9:14pm - Storing the headcounts into a Cloudant DB. Getting there…

Photo


10:14pm - I’m still awake…but this bean bag is really comfo…zzzzz

Photo


10:48pm - “You might be able to do that in a round about way…“. In other words, that means a lot of data manipulation?

Photo


11:25pm - Time for the last piece of data. Using employee time sheets to determine how many employees are on duty during a time period.

Photo


Day 2: 11:47am - Have data, will chart it

Photo

Five reasons I attend hackathons

October 22, 2015 | Hackathons

I’ve been to over a hundred hackathons over the past six years. I am often asked about why I participate in hackathons, and why I continue to hack after attending so many. I used to go for the free food and drinks. Who could turn down a free meal and not have to cook ? While a free meal is still tempting (if it isn’t pizza), I have gained other benefits from attending hackathons regularly. Here are five reasons that come to mind.

Freedom to try anything

First, it gives me freedom to try out my wildest ideas without worrying about having to account for every development hour. A hackathon typically lasts between 24 to 48 hours. It is a relatively small amount of time to invest in trying out a new idea I have. If the idea turns out to be a terrible idea, I can always stop pursuing it. Projects at work and projects for clients really don’t offer this flexibility and reduce what I call the “fun factor.”

My first hackathon was a way for me to express my creativity outside of my day job at the time. I was responsible for a segment of a product we were building, which had rigid plans. This limited my creativity, and didn’t permit diversion that can often generate new approaches. It is important to have an outlet to express your creativity.

I’ve learned to use my creativity and not be afraid that my ideas might be stupid. Of course I still have those embarrassing moments. However I’ve discovered that if I don’t share my ideas, I will never know if they are truly stupid, or brilliant ideas that were disguised.

Once, when I presented what I thought was a failure, people came up to me afterwards and told me they were inspired. Really? Had I never shared my “failure”, others wouldn’t have seen it. By inspiring others, my failure can turn into an even better idea.

Photo

Exposure to sponsor APIs

Attend any hackathon and you’re likely to see at least one company sponsoring the event. Most have APIs they want you to try out and see what you can build with them.

I have been involved in several startups and attend tons of technical conferences in search for technology that can either reduce development time or add capabilities that would require resources. In the past couple of years, for example, we’ve seen Internet of Things and the connected automobile become more prevalent. Not only do I get to try out the technology, but there are dedicated experts that can walk me through ways of using the technology.

When I sat down with IBM Bluemix mentors earlier this year at a hackathon and learned about IBM Watson, a whole new world of possibilities opened up. To be honest, data science and performing data analysis isn’t exactly my cup of tea. But with access to APIs that can analyze a person’s personality and another that returns sentiment scores, I can be up and running with these powerful capabilities in a matter of minutes!

I now have knowledge of how to analyze data and it helps improve the prototypes I build. Who knew I could sort emails for positive sentiment and play them in the morning on the way to work? I can also find that perfect personality match, err, for my “friend.”

Networking

At my first hackathon I was really shy. I preferred coding in the corner instead of talking to people. I’ve discovered that talking to people can open up a lot of conversations. From finding out about future events and conferences, to finding out new about apps and hardware others have recently discovered, to learning about what is on the horizon, you can learn quite a bit from networking.

Even if you don’t talk to everyone, your presence can be valuable. There’s a core group of developers who I see regularly at hackathons. People take note of what you do and eventually you’re known in the community for your expertise and experience. Through networking, I’ve been asked to speak at conferences and have consulted for side-projects.

This network is also really helpful if you need help to solve a specific problem. Buy me a cup of coffee and let’s brainstorm.

Building my confidence

Public speaking is a fear for many. After you build your prototype at a hackathon, you have the opportunity to present it in front of judges, developers, business people, and others. Not only do I have more confidence to speak in front of a group of people, I have also learned how to present when things don’t always go as planned.

From failures with projectors, wifi, or pesky bugs in code, learning how to deal with these technical difficulties in front of an audience is a good skill to have. These skills are also useful when dealing with customers and clients. Some days things won’t work and you have to fight the proverbial fires, making things right with customers. Instead of freezing up and saying that nothing can be done, I’ve learned to have backups and ways to deal with situations that arise. People are surprisingly forgiving when you’re honest and share with them what is really happening.

There’s always a new adventure

While it may seem like hackathons can become repetitive, my experience is otherwise. Hackathons may share commonalities, but each offers a unique experience. The people, the organizers, the sponsors, the ideas, the venue and much more contribute to the experience. Maybe one offers massages, during which you get inspired to try a different option than you might have initially. Another might offer midnight waffles, where you meet another hacker in line and end up working with her on a side-project.

I love to mash together sponsor APIs and see what can be done. Think of all the combinations that can be done with four or five sponsors. I’ll leave the math as an exercise, ;-). Now, for each combination there are tons of ideas that can be generated. It’s up to you what type of adventure you want to have at a hackathon.

I hope these reasons have motivated you to check out a hackathon and see what you can gain from the experience. There are quite a few hackathons this weekend. And they offer free food and drinks.

Photo