What is a hackathon?
according Wikipedia:A hackathon (also known as a hack day, hackfest or codefest) is a design sprint-like event in which computer programmers and others involved in software development, including graphic designers, interface designers, project managers, and others, often including subject-matter-experts, collaborate intensively on software projects. Occasionally, there is a hardware component as well. Hackathons typically last between a day and a week….
Preparation
-
First you need to register and provide proof that you have the skills to be there, at least that’s how I understood it.
-
Close to the event, you need to check which kinds of tracks and challenges have been proposed. After searching, I was more attracted to IoT and smartbuildings.
-
I was concerned about the “cyber-security” of going to a place with open Wi-Fi and thousands of hackers. To avoid problems, I prepared myself in advance and launched a VPN server on AWS. It was an m4.large using spot requests, running openVPN on Ubuntu 16.04.
-
As I intended to work on IoT, it was essential to have my toolbox with electronic components, embedded computers, cables, and many other things.
Arrival
25.11.16 - 17:25 - I arrived and walked around the venue. The darkened space with lights and lasers took me by surprise. The ambience was perfect and I was eager to start hacking.
25.11.16 - 17:39 - I found a spot in the IoT area and connected to the network, checked if VPN was working well and started to read the info on Slack.
25.11.16 18:00 - Official opening, I followed it through a live YouTube channel, even though the guy was 15m from me.
What’s the problem?
25.11.16 - 18:41 - Read all documents explaining the challenge proposed by UPM.
#1. Supply Chain Goes Mobile: Present a solution for easy identification and tracking of paper products. How can a paper roll be easily identified and relevant order, production and quality information presented in a user friendly way? How can the arrival of a delivery to the final destination be registered independently of the transport mode and service provider?
25.11.16 - 19:17 - Watching video from UPM junction pre-event.
25.11.16 - 21:25 - Evaluating data supplied by UPM on IBM Bluemix. It was my first contact with IBM services, I had good impressions about the dashboard and services, I used only the dashDB to make some queries. Maybe, later I will give it a try, but so far, I’m an AWS fan.
Around 10 pm I went to talk to some people from UPM, to check how much they can afford to add cost on each delivery. The answer was: No more than 1€.
Now, I have a problem, I was thinking of some device with GPS connected to mobile networks or sigfox. But, too expensive.
Another idea was to read a 2D code with a mobile app. The final user would receive the package and read the code using the camera from his mobile phone. The app would be connected to a cloud server, allowing it to send the exact location and time of the delivery. However, according to UPM staff, this was somehow implemented, but it didn’t work. Just because the people didn’t read the code.
25.11.16 - 22:59 - Looking for some inspiration, I went to the hardware lab to see what kinds of gadgets they have there. I discovered that what UPM wants was ready. It’s called Yepzon, a GPS tracker that you can check from your mobile phone. However, it cost 97€.
25.11.16 - 23:39 - Running to catch last metro to go home.
26.11.16 - 6:59 - Wake-up dreaming about the implementation.
26.11.16 - 8:25 - New day starting at #junction.
About this time, I wrote down my idea to have a simple device sending an ID through a RF transmitter. Another device would be installed at the customer’s premises receiving the ID information, and then sending it to a cloud server.
26.11.16 - 8:35 - Setup git repository for all code and info generated during hackathon.
26.11.16 - 8:52 - Setup Arduino IDE and start testing some code on Arduino YUN.
26.11.16 - 8:57 - Pickup an Arduino UNO from hardware lab.
26.11.16 - 9:06 - Start to play with RF 315MHz transmitter/receiver.
A lot of problems to make the serial communication works through RF, it was working well with cables but not on RF.
26.11.16 - 13:34 - Here I stopped the trials with the RF 315, I was only receiving noise on the other side. Started to work with another RF transmitter: HM-TR.
I spent a lot of time to make the RF receiver work, but I didn’t succeed. I used this component 5 years ago, and it worked then.
26.11.16 - 16:37 - Checking all possibilities to make the RF work, I put both antennas in contact and suddenly the signal was received. YEAAHHH
I found the problem with the RF, the antenna was not at the optimized length for the frequency that I was using, 915MHz. This was not an issue in the past, but in an environment with more than 100 computers connected through Wi-Fi, there is a lot of radio interference. I got some cable and made an antenna at 32cm and it worked perfectly.
26.22.16 - 17:52 - Back on track, RF was working like a charm. Let’s go to the next issue: Arduino YUN was not resetting the Wi-Fi settings and wasn’t running multithread in the background.
26.11.16 - 18:13 - To not waste time on trying to make Arduino YUN work, I changed my receiver station control to the power of Linux embedded in Arietta.
26.11.16 - 19:09 - Setting up Wi-Fi and serial port on Arietta, back to the starting point.
26.11.16 - 22:28 - Hardware ready: Arduino UNO -> RF transmitter -> RF receiver -> Arietta. Next step, setup VPS server.
Let’s go to the cloud.
26.11.16 - 22:43 - Launched a droplet on DigitalOcean. Fedora 24, of course.
26.11.16 - 23:41 - Installed PHP7, nginx and mariaDB and created an application using the cakePHP framework.
It’s Sunday!
27.11.16 - 0:12 - created junction.processcloud.xyz. (I may be off now)
27.11.16 - 0:33 - Created TLS certificate with Let’sEncrypt.
27.11.16 - 1:57 - Many issues to get correct access rights with SELinux, but finally it’s working. Now it’s time to dedicate time on the webservice to receive data from Arietta and store in the database.
27.11.16 - 3:52 - Web application working and generating reports.
27.11.16 - 4:01 - Everything is working, time to do some fine tuning and make improvements.
27.11.16 - 6:26 - Created a random ID generator on Arduino and dealing with read access to serial port on Linux with non-root user. Times flies when you try to fix a single minor detail.
27.11.16 - 6:48 - I just discovered that I need to create a project on devpost.com. Let’s run again.
27.11.16 - 8:40 - Project created on DevPost.
27.11.16 - 10:34 - Fine tune Devpost, created and uploaded a video.
27.11.16 - 10:51 - Mission accomplished!
System is working alone. Arduino is sending a random ID, Arietta receives and sends the ID to the cloud and cloud store in a database. Let’s rest and wait for my time to present.
27.11.16 - 12:25 - Last check before the jury arrives. OH NOOOO. My computer was very slow, too many applications running, and the only option that came to mind was to restart it.
27.11.16 - 12:30 - Jury team arrived and I was still restarting the computer. Took some time to relaunch all applications needed to show that the project is working.
27.11.16 - 12:34 - Started the presentation and with only 5 minutes to show it.
27.11.16 - 12:39 - Ended presentation.
27.11.16 - 12:40 - That was amazing! Now I can relax.
I presented to more members of the jury and some curious people who came by.
27.11.16 - 14:30 - Ended the DEMO period.
27.11.16 - 15:00 - Prize ceremony starts and results: Some people got 20k€, others 1k€ and some gadgets. My prize was experience and a lot of fun.
27.11.16 - 15:21 - Shutdown and terminate VPN server, pack everything and went home.
What I learned
Let’s be clear, hackathon is a laboratory. Companies put money there to generate ideas, improve products, launch products, hire people and branding. People accept the challenge in hopes of getting funding, getting hired, learning, networking, making mistakes, accomplishing something new and having fun.
I was neither hired nor funded. However, I did meet some people, made a lot of mistakes, accomplished my objectives, and had a lot of fun. Yet most important are My learnings:
Lone-rider: At the beginning I was looking to join some team, but finding the right match for my ideas was far from easy, not to mention that most of the teams had been defined before. The great majority of the teams are groups of friends, students and work colleagues. As time was ticking, I decided to go solo. Depending on your project, the workload can be enormous, I did ~31 hours non-stop.
Learning: Next time I should bring people along or be active to join others teams in advance.
Stay focused: I was surrounded by two teams who had organized beforehand. One team was well defined, with a leader of sorts and an idea of what they sought to do. One of the members was trying to get more space, suggesting that I could change to another table. This team came in third. The second team that was arranged before the event starts, met for first time at #junction. This one was a complete disaster. No clear definition of what they wanted to do and everybody dispersed. On Saturday evening they were still choosing an idea to develop a project. At the end, they showed the jury a PowerPoint with an idea sketch from only one member.
Learning: A group of people is not a team. It’s not just a matter of skills or who is the boss. It’s about a clear target and collective contribution with synergy.
Propaganda: I had a lot of work to do and was deeply focused on getting things done. I didn’t have time to pay attention to the UPM team, asking for opinions and showing my progress. This may have had an impact on the selection process.
Learning: Ask your customer from the outset and keep him close through development. It will make a huge difference in the end.
#junction2016 hackathon was a great experience and I’ll be there for sure next year. Do you want to join me?
Eduardo