Jekyll2023-06-04T10:54:51+00:00https://nithishr.com/feed.xmlNithish RaghunandananWorking at the intersection of Data, Software & CommunitiesTalks2020-07-20T00:00:00+00:002020-07-20T00:00:00+00:00https://nithishr.com/talks<h2 id="creating-data-apps-using-pure-python-building-custom-apps-using-streamlit">Creating Data Apps using Pure Python: Building Custom Apps using Streamlit</h2> <p>Date: 7th February 2021</p> <p>Event: <a href="https://2020.devrel.net/">FOSDEM ‘21</a></p> <p>Have you always wanted a flexible &amp; interactive visualization that is easy for others to work with without handling all the Javascript libraries? Or do you want to build a user interface for your Machine Learning Model? This talk has you covered with building data apps in Python using Streamlit with examples of a Travel Visualization App using Google Maps Data &amp; an UI for the ImageNet Model.</p> <p>In this talk, I showcase couple of different use cases where you can build your data focussed applications using Streamlit, an open source library in pure Python.</p> <p>In the first use case, I cover how you can build interactive dashboards using different Streamlit components. These dashboards can be easily deployed &amp; the consumers can easily work with the interactive dashboards without worrying about all the dependencies that need to be installed to run the Jupyter notebooks. In the showcase, I will go over how you can build a dashboard of your historical travels using Google Maps Location History including some memories from them from Flickr.</p> <p>In the second showcase, I will describe how users can create a quick interface for their machine learning model using Streamlit. These interfaces are much faster to develop than building a custom frontend interface for machine learning models with the help of Javascript libraries. In the demo, I showcase how I built an UI for the ImageNet Model.</p> <p>The showcases will showcase how these data based web apps can be built using Python functions &amp; Streamlit components.</p> <p>Video <a href="https://fosdem.org/2021/schedule/event/python_streamlit/">FOSEDM Talk</a></p> <p>Slides <a href="https://fosdem.org/2021/schedule/event/python_streamlit/attachments/slides/4732/export/events/attachments/python_streamlit/slides/4732/Creating_Data_Apps_in_Pure_Python.pdf">Slides</a></p> <p>Impressions</p> <blockquote class="twitter-tweet"><p lang="en" dir="ltr">addressing a real pain point: how to put your data app on the web, <a href="https://twitter.com/hashtag/Streamlit?src=hash&amp;ref_src=twsrc%5Etfw">#Streamlit</a> in <a href="https://twitter.com/hashtag/Python?src=hash&amp;ref_src=twsrc%5Etfw">#Python</a>, so that others can reuse your work interactively <a href="https://t.co/7h8RQH0wPx">https://t.co/7h8RQH0wPx</a>, <a href="https://t.co/Uo3xnswEq7">https://t.co/Uo3xnswEq7</a> by <a href="https://twitter.com/nithishr?ref_src=twsrc%5Etfw">@nithishr</a> (thx!) presented <a href="https://twitter.com/fosdem?ref_src=twsrc%5Etfw">@fosdem</a> <a href="https://twitter.com/hashtag/FOSDEM2021?src=hash&amp;ref_src=twsrc%5Etfw">#FOSDEM2021</a> to be followed up e.g. with <a href="https://twitter.com/heroku?ref_src=twsrc%5Etfw">@heroku</a> <a href="https://t.co/H96szjrwkG">pic.twitter.com/H96szjrwkG</a></p>&mdash; Christian Voigt ♡ μ (@chrvoigt) <a href="https://twitter.com/chrvoigt/status/1358450317520744450?ref_src=twsrc%5Etfw">February 7, 2021</a></blockquote> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Hadn&#39;t heard about streamlit before, but your talk sparked the idea to use it for some rapid prototyping in a current project 😉</p>&mdash; 🔴 cyroxx (mütend) (@cyroxx) <a href="https://twitter.com/cyroxx/status/1358482767873515524?ref_src=twsrc%5Etfw">February 7, 2021</a></blockquote> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <h2 id="creating-data-apps-using-python">Creating Data Apps Using Python</h2> <p>Date: 6th December 2020</p> <p>Event: <a href="https://2020.devrel.net/">Pyjamas 2020</a></p> <p>Have you always wanted a flexible &amp; interactive visualization that is easy for others to work with without handling all the Javascript libraries? Or do you want to build a user interface for your Machine Learning Model? This talk has you covered with building data apps in Python using Streamlit.</p> <p>Video</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/0gHTRCbx8Q0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe> <p>Slides</p> <iframe src="//www.slideshare.net/slideshow/embed_code/key/66DS7mv95G4akK" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe> <p>Impresssions</p> <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Streamlit is quite cool... <a href="https://twitter.com/nithishr?ref_src=twsrc%5Etfw">@nithishr</a> is showing us how to use the python library to show Google data.<br /><br />So cool!<br /><br />An awesome talk to end our so awesome conference. <a href="https://t.co/R9DswPV1I7">pic.twitter.com/R9DswPV1I7</a></p>&mdash; PyJamas Conf (@PyjamasConf) <a href="https://twitter.com/PyjamasConf/status/1335484641038512128?ref_src=twsrc%5Etfw">December 6, 2020</a></blockquote> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <h2 id="learnings-from-organizing-internal-hackathons">Learnings from Organizing Internal Hackathons</h2> <p>Date: 30th July 2020</p> <p>Event: <a href="https://2020.devrel.net/">DevRelCon Earth 2020</a></p> <p>The talk summarizes some of the learnings from organizing internal hackathons including the motivation, processes &amp; the outcomes from it. This was based on the internal hackathon, <a href="/ki-hacks/">KI hacks</a>, organized at KI labs. This was delivered virtually during DevRelCon Earth 2020.</p> <p>Video</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/y1ctLte98DY?start=13719" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe> <p>Slides</p> <iframe src="//www.slideshare.net/slideshow/embed_code/key/FnRZKszbDG2gTz" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe> <h2 id="where-are-the-keys-solving-day-to-day-problems-using-tech">“Where are the keys?” Solving day-to-day Problems using Tech</h2> <p>Date: 25th May 2019</p> <p>Event: <a href="https://2019.pyconweb.com/">PyConWeb 2019</a> Munich</p> <figure> <img src="/assets/img/talks/pyconweb.jpg" /> <figcaption>Talk at PyConWeb</figcaption> </figure> <p>There are many problems that we face in our day to day life. Many of them can be solved rapidly by using a combination of readily available technologies. In this talk, I explain how we solved the shortage of keys in our office using the power of Internet of Things &amp; cloud services.</p> <p>We faced a shortage of keys for the people in the office. It was really frustrating to open the door multiple times during the day and not to mention the loss of flow while working. We solved this problem by connecting the intercom in the office to the internet using a Raspberry Pi.</p> <p>In this talk, I explain the challenges we faced &amp; how we overcame them like exposing the service running on Raspberry Pi, security, adding support for multiple clients like Slack, cross-platform mobile apps, Siri commands, etc. The solutions are all simple services which are free or inexpensive to use.</p> <iframe src="//www.slideshare.net/slideshow/embed_code/key/a4d9jps5SYSTxu" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe> <h2 id="story-telling-using-web-apps">Story Telling using Web Apps</h2> <p>Date : December 4th 2019</p> <p>Event: <a href="https://www.meetup.com/PyMunich/events/266293061/">Epic Python Gathering</a>, Munich</p> <p>This talk was delivered as a lightning talk at the Epic Python Gathering in Munich. This talk covers two new open source libraries, Streamlit &amp; Voila, to create interactive web apps out of custom data analysis code snippets/Jupyter notebooks. There were also couple of short demos for the libraries.</p> <iframe src="//www.slideshare.net/slideshow/embed_code/key/2ILacbCEZpvMVh" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe> <h2 id="learnings-from-organizing-an-internal-hackathon">Learnings from Organizing an Internal Hackathon</h2> <p>Date: 17th July 2019</p> <p>Event: <a href="https://www.meetup.com/Dev-Rel-Munich/events/262892022/">DevRel Munich</a></p> <p>The talk discusses what goes behind the scenes of an internal hackathon from the motivation, processes &amp; the outcomes from it. This was based on the internal hackathon, <a href="https://ki-hacks.devpost.com/">KI hacks</a>, organized at KI labs.</p> <iframe src="//www.slideshare.net/slideshow/embed_code/key/5eDh6VmXoBB1Ie" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe> <h2 id="pecha-kucha-talk-on-web-scraping">Pecha Kucha Talk on Web Scraping</h2> <p>Date: 20th September 2018</p> <p>Event: <a href="https://www.meetup.com/COOK-and-CODE-MUNCHEN/events/254208694/">Die lange Nacht der (digitalen) Buzzwords #2</a></p> <p>In this talk, I explained the concept of web scraping using 20 images for 20 seconds each in Pecha Kucha format. The talk explained the story of how I tried to find my appartment in Munich using web scraping when I initially moved to Munich.</p> <iframe src="//www.slideshare.net/slideshow/embed_code/key/ogc8OTOOaMjkAC" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe> <h2 id="hodor-solving-everyday-problems-with-tech">Hodor: Solving Everyday Problems with Tech</h2> <p>Date: 7th June 2018</p> <p>Event: <a href="https://www.meetup.com/PyData-Munchen/events/251277300/">PyData Munich</a></p> <p>In this talk, I give an overview of how we can solve an everyday problem like controlling the office door from Slack. The talk includes a tour of the solution powered by Raspberry Pi coupled with a bunch of free services.</p> <iframe src="//www.slideshare.net/slideshow/embed_code/key/fl1GNXuBk2WZOg" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe> <h2 id="tutorial-scraping-data-from-the-web-using-scrapy--beautiful-soup">Tutorial: Scraping Data from the Web using Scrapy &amp; Beautiful Soup</h2> <p>Date : November 8th 2017</p> <p>Event: <a href="https://www.meetup.com/PyData-Munchen/events/244723959/">Pydata Munich</a></p> <p><a href="https://github.com/nithishr/meetup_scraping">Code</a></p> <p>There is a lot of data out there on the internet, but it’s not always in an easy-to-consume format. Luckily, there are a lot of “web scraping” tools out there to help us! These tools take the data and put it into a more structured format, like CSV or Excel. This tutorial showcased how to use Scrapy and BeautifulSoup, two powerful web scraping packages for Python, to grab and collect customer contact information from yellow pages web sites! The session included live coding the scraper for a classifieds website.</p> <iframe src="//www.slideshare.net/slideshow/embed_code/key/I6x0MxuAfOGxyo" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>A selection of talks/presentations given at meetups/conferencesKI hacks: Organizing an Internal Hackathon2019-10-02T00:00:00+00:002019-10-02T00:00:00+00:00https://nithishr.com/ki-hacks<h1 id="ki-hacks-organizing-an-internal-hackathon">KI hacks: Organizing an Internal Hackathon</h1> <p>Note: This post was originally published on <a href="https://medium.com/ki-labs-engineering/ki-hacks-organizing-an-internal-hackathon-b18e5891d789">Medium</a></p> <p>At the end of March this year, we held our first official internal hackathon at KI labs, the KI hacks. The aim was simply to give everyone a chance to build something fun and interesting to them with no restrictions on the themes. The whole event was organized in the Munich &amp; Lisbon offices over 36 hours during the week and had our friends from <a href="https://www.ki-growth.com/">KI growth</a> involved as well.</p> <hr /> <h1 id="motivation">Motivation</h1> <p>There are many genuine questions and concerns when it comes to doing an internal hackathon on company time. There is some lost opportunity cost as the time spent on the hackathon could have been used on the projects from our paying customers.</p> <p>Our main goals from the hackathon were to achieve at least some of the following:</p> <ul> <li>Team Building: Normally, during the daily work people work with their teams and do not get the chance to work with people from other teams that they might be interested in. This was an opportunity to collaborate with people who you wanted to work with but did not get the chance to.</li> <li>Outside Topics: The hackathon provided an opportunity for participants to work on topics that were outside their normal work which many people utilized. We had people who work on mobile apps for example work on 3D visualizations or machine learning. We kept the barriers really low. People could try different things out in a safe environment. It was perfectly fine to propose a problem that someone wanted to be solved without having many ideas about the solution.</li> <li>Have Fun: We wanted all the participants to have fun. This was important as otherwise, this could turn into another normal working day. There was also an option to work on it even after the hackathon if the teams are interested.</li> </ul> <p>The main expectation of the participants was to be committed to their teams. It is not fun to work on some idea without the support of your team.</p> <hr /> <h1 id="logistics">Logistics</h1> <p>The hackathon although internal was meant to be as close to a real hackathon as possible. We kept some ground rules for the reference of all teams. There were also budgets for hardware &amp; software.</p> <p>The team size was restricted to between 2 to 5 people to ensure that the teams were not too big nor one person hacking something as that would not be in the interests of team building.</p> <p>The teams had 28 hours to work on their hacks. Participants were given a common space (Notion &amp; Slack) to share their ideas before the event started to form teams. Additionally, there was an evening spent the Friday before the hackathon started to help form teams. Participants could share their ideas &amp; what skills they still needed to finalize their teams. The team formation sessions were facilitated before the hackathon started for teams to completely utilize the hackathon time for the hacking.</p> <figure> <img src="/assets/img/posts/ki-hacks/idea-sharing.png" /> <figcaption>Ideas were shared on Notion by participants</figcaption> </figure> <p>The teams were free to use the compute resources from the labs cloud platforms like Amazon Web Services, Google Cloud &amp; Microsoft Azure. The teams had a budget of 50–100€ to buy additional hardware or software for their hacks if needed. Many of the teams bought hardware like Raspberry Pi &amp; different compatible sensors.</p> <figure> <img src="/assets/img/posts/ki-hacks/idea_pitches.jpeg" /> <figcaption>Idea pitches &amp; team formation in progress</figcaption> </figure> <p>The hackathon was held over two days coinciding with an internal meeting that was being attended by the management of our parent company, <a href="http://www.kigroup.de/">KI group</a>. This enabled the hackathon projects to be judged by the management in addition to the external jury. The teams could stay in the office overnight if they wanted to.</p> <p>The food &amp; drinks were catered in the office so that teams could concentrate completely on their hacks. Also, there were some custom limited edition stickers created for the hackathon that was given to each participant for presenting their hacks.</p> <figure> <img src="/assets/img/posts/ki-hacks/pizzas.png" /> <figcaption>Pizzas for dinner</figcaption> </figure> <hr /> <h1 id="judging">Judging</h1> <p>The projects were judged mainly on their technical impressiveness, novelty, demos &amp; user experience. Each of them had equal weight with no weight given to the feasibility of building a business around the projects as the teams were expected to build something than trying to figure out business plans. The criteria for the judging could be seen in the excel sheet linked below.</p> <p><a href="https://docs.google.com/spreadsheets/d/1oV38cy37f8XaMmAJ3ZZdWajSj7a0GrARRMY8Ix1jEwA/edit?usp=sharing">KI-Hacks-Judging-Rubrics</a></p> <p>The jury was composed of senior management from the KI group along with some of our friends from the Munich tech ecosystem. Besides, all the people in attendance were given two votes to give to their favourite teams. These votes determine the audience prize for the best project in addition to the jury’s selection.</p> <figure> <img src="/assets/img/posts/ki-hacks/audience_dollars.jpeg" /> <figcaption>Fake dollars for audience voting</figcaption> </figure> <h1 id="projects">Projects</h1> <figure> <img src="/assets/img/posts/ki-hacks/pitching.jpeg" /> <figcaption>Final presentations &amp; demos in progress</figcaption> </figure> <p>In the end, we had over 50 participants across both the Munich &amp; Lisbon office. There were 14 teams &amp; some interesting projects. Many of the projects aimed at solving some of the problems faced by them in the office. I will briefly describe the different ideas that were explored in the hackathon.</p> <ul> <li><strong>BRAN</strong>: <a href="https://medium.com/ki-labs-engineering/bran-a-facial-recognition-buddy-at-our-office-entrance-b7e43815ad3d">BRAN</a> aimed at enabling employees to enter the office using facial recognition based on the existing <a href="https://medium.com/ki-labs-engineering/hodor-controlling-the-office-door-from-slack-a79e77635e39">Hodor</a>.</li> </ul> <figure> <img src="/assets/img/posts/ki-hacks/bran.png" /> <figcaption>BRAN training their models for facial recognition</figcaption> </figure> <ul> <li><strong>Magellan</strong>: Magellan developed a meeting room booking system for the office, based on multiple mechanisms including sensing the presence of people in the meeting room.</li> </ul> <figure> <img src="/assets/img/posts/ki-hacks/magellan.png" /> <figcaption>Magellan with their meeting room booking system</figcaption> </figure> <ul> <li><strong>Eatix</strong>: Eatix is a slack bot that enables you to collaboratively select a place to eat &amp; also reserve the place automatically by calling them in <a href="https://ai.googleblog.com/2018/05/duplex-ai-system-for-natural-conversation.html">Duplex</a> style.</li> <li><strong>Travel Optimizer</strong>: Travel Optimizer optimizes the cost for your multi-city travel across different periods.</li> <li><strong>AI Hiring</strong>: AI Hiring is a tool that helps the HR team to analyze the profiles of the applicants based on past results.</li> <li><strong>Say What</strong>: Say What created an application to transcribe the video conferences to handle the connectivity or voice issues.</li> <li><strong>Eventify</strong>: Eventify built a website to handle the internal &amp; external events that we host in the office.</li> <li><strong>Organist</strong>: Organist built a tool that could be used to generate &amp; update the org chart for the company.</li> <li><strong>7Step.Me</strong>: 7Step.Me developed a cross-platform app that could be used to create activity challenges for teams.</li> </ul> <figure> <img src="/assets/img/posts/ki-hacks/7step.png" /> <figcaption>7Step.Me working on their app</figcaption> </figure> <ul> <li><strong>KI-word Tool</strong>: KI-word Tool is a tool that automates the keyword research for search engine optimization &amp; advertising.</li> <li><strong>Decibell</strong>: Decibell solves the problem of identifying people who might be talking too loud in the workspaces &amp; gently nudges them to use a meeting room.</li> <li><strong>BeerBot</strong>: <a href="https://medium.com/ki-labs-engineering/beerbot-e9708f119545">Beerbot</a> built a bot that keeps track of the beers in the fridge in the office so that you never run out of cold beer.</li> <li><strong>AbsenceBot Gamification</strong>: We have an internal <a href="https://github.com/KI-labs/AbsenceBot">Absence Bot</a> for recording absences in the office. This hack gave some badges that could be obtained based on the usage of the Absence Bot.</li> <li><strong>Unreal Labs</strong>: Unreal Labs built a 3D walkthrough of the entire office including the different projects, teams &amp; the technologies associated with them.</li> </ul> <p>More information about the projects can be found on the submission platform, <a href="https://ki-hacks.devpost.com/">Devpost</a>.</p> <h1 id="observations">Observations</h1> <p>It was heartening to see the participants working on their projects with extreme dedication. One team stayed up the whole night working on their prototype. Diverse projects were developed ranging from mobile apps to computer vision &amp; 3D visualizations. Many of them also solved some of the issues we had in the office like the meeting room booking system.</p> <p>The event was accepted well within the KI Group management &amp; there were also some requests from some of our clients to organize it for them</p> <p>Most importantly, the feedback from the participants was also good. Even though it was the first hackathon for about 80% of the participants, they still enjoyed getting the day to work on some interesting ideas with their colleagues. Over 85% of the participants found it relevant &amp; helpful in their daily work. Even though some of the participants were a bit sceptical when we proposed the idea, everyone was enthusiastic &amp; looking forward to doing another one at the end of the hackathon. Based on the feedback, we just finished the 2nd edition of our now half-yearly hackathon in September.</p> <p>More pictures from the hackathon can be found on havealook (<a href="https://havealook.me/ki-labs/ki-hacks">https://havealook.me/ki-labs/ki-hacks</a>).</p> <p>You can see the projects from the 2nd edition of the hackathon on our submission platform, <a href="https://ki-hacks-2.devpost.com">DevPost</a>.</p> <p>If you have any questions or feedback, feel free to get in touch. And at <a href="http://www.ki-labs.com/">KI labs</a>, we are always looking for people to join our future hackathons ;)</p> <figure> <img src="/assets/img/posts/ki-hacks/group_photo.png" /> <figcaption></figcaption> </figure>Behind the scenes & the learnings of organizing an internal hackathonHodor: Controlling the office door from Slack2018-02-20T00:00:00+00:002018-02-20T00:00:00+00:00https://nithishr.com/hodor<h1 id="hodor-controlling-the-office-door-from-slack">Hodor: Controlling the office door from Slack</h1> <p>Note: This post was originally published on <a href="https://medium.com/ki-labs-engineering/hodor-controlling-the-office-door-from-slack-a79e77635e39">Medium</a></p> <p>At KI labs, we have a beautiful office in the city centre of Munich, next to the famous Frauenkirche. Unfortunately, only two members of our rapidly growing team have keys for the office. Whenever someone comes to the office, the disturbing noise of the doorbell disrupts the deeply-focused developers. Someone has to take one for the team and press the button on the intercom, which is located far away from the desks. This is not only annoying but also disturbs their flow.</p> <p>As a company full of engineers, we no longer wanted to keep this happening and implemented an agile solution like in our daily work. We formed a small team and hacked together the following solution in two evenings over a beer.</p> <h1 id="our-solution-hodor">Our Solution: Hodor</h1> <figure> <img src="/assets/img/posts/hodor/hodor.jpeg" /> <figcaption>Inspiration for Hodor</figcaption> </figure> <p>Before we started, we gave ourselves three criteria:</p> <ul> <li>As <strong>easy and fast</strong> to implement as possible</li> <li>As <strong>convenient</strong> to use as possible</li> <li>As <strong>cheap</strong> as possible</li> </ul> <p>We checked out some of the cool possibilities from others like [<a href="http://www.instructables.com/id/AUTOMATIC-DOOR-OPENER-CONTROLLED-THROUGH-SLACK/">1</a>] and [<a href="https://sendsteven.com/2012/12/05/hacking-my-apartment-door-with-twilio/">2</a>]</p> <p>To open the door as easy as possible, we tried to use the existing infrastructure and to integrate the hardware directly into the intercom. As everyone uses Slack anyway, we created a Slack bot, which listens to <code class="language-plaintext highlighter-rouge">/door</code> and triggers an action.</p> <figure> <img src="/assets/img/posts/hodor/architecture.jpeg" /> <figcaption>Architecture</figcaption> </figure> <h1 id="hardware-setup">Hardware Setup</h1> <p>We decided to use a Raspberry Pi 3 as the main hardware component. It is reasonably cheap and easy to use. In our setup, it is connected to our local WiFi.</p> <p>We imitate a button press on the intercom by short-circuiting the physical button on the intercom. This is done by using a simple relay which is controlled by the Raspberry Pi.</p> <p>The relay uses 5 Volt supply voltage and Ground (GND) which are both supplied by the Raspberry Pi. The relay’s input pin must be tied to GND to be triggered. As shown in the figure, we accomplish this by using a bipolar NPN transistor as a switch between the relay and the general purpose input/output (GPIO) pin of the Raspberry Pi. The base of the transistor is connected to the GPIO (with a 1k resistor for current limiting). Once the GPIO is triggered, the transistor starts conducting and the relay’s input pin goes to GND, which switches the relay and closes the circuit on the intercom.</p> <figure> <img src="/assets/img/posts/hodor/hardware_setup.jpeg" /> <figcaption>Wiring the hardware together</figcaption> </figure> <h1 id="door-opening-service-on-the-raspberry-pi">Door Opening Service on the Raspberry Pi</h1> <p>We needed a simple server to receive commands from the slack bot and activate the relay to open the door. For this, we created a Node.js application, which runs as a service on port 80 of Raspberry Pi. This service listens to a specific request from slack bot indicating the door opening intent. On validating the request, a predefined GPIO pin is activated (in our case pin 11).</p> <p>We added a cron job to ensure that the service is started on reboot in case the power supply is disrupted. We added a line like the following to the crontab:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@reboot /path/to/node /path/to/the/app.js &amp; </code></pre></div></div> <h1 id="exposing-the-service-to-the-world">Exposing the Service to the World</h1> <p>Once the Node.js service on Raspberry Pi starts running, we need to expose its service on the internet for it to be accessible from the slack bot. For this, we installed <a href="https://www.dataplicity.com">Dataplicity</a> on the Raspberry Pi. They have an option of a free account, where you can access your device via an interactive terminal. There is also an option (called “Wormhole”) to expose a service running on port 80 of the device to the outside world. We activated the wormhole and were able to access the service outside the local network. This also enables us to add other services (read: Voice Assistants 😉) to open the door.</p> <p>Code for activating the relay</p> <script src="https://gist.github.com/rayoriz/93b7affcf13391466f66fb9fffb93c69.js"> </script> <h1 id="slack-bot">Slack Bot</h1> <p>The simplest way to create a Slack integration was the <a href="https://api.slack.com/slash-commands">slash command</a>. So we built a custom slash command <code class="language-plaintext highlighter-rouge">/door</code> which is handled by a small Python-based web service. This service is completely stateless and is perfect to be served on <a href="https://aws.amazon.com/lambda/">AWS Lambda</a>.</p> <figure> <img src="/assets/img/posts/hodor/slackbot.gif" /> <figcaption>Slack bot in action</figcaption> </figure> <p>The service handles all the slack events for the command and checks the requests for security. We set up some security checks like:</p> <ul> <li>Enabling the opening of the door only during office hours</li> <li>Ensuring that the users are authorised by limiting the service to a specific Slack channel</li> <li>Keeping a history of all requests by storing the requests with the timestamp on a cloud database (<a href="https://aws.amazon.com/dynamodb/">DynamoDB</a>)</li> </ul> <p>We discovered <a href="https://www.zappa.io/">Zappa</a> which did all the heavy lifting of deployment of lambda functions to AWS. It needs just two commands to deploy the app (Developers dream!).</p> <h1 id="future-work">Future Work</h1> <p>The focus of this solution was to efficiently build a minimal viable product (MVP) to solve our biggest pain of operating the intercom. When we get the next opportunity, it would be cool to try these ideas:</p> <ul> <li>3D Print a case for it to look as good as it works 😉</li> <li>Detect the ringing of the bell and post a message on Slack with an option to open the door.</li> <li>Add an integration to Amazon Alexa or Google Assistant to open the door.</li> </ul> <p>In case you want to replicate this for your office, you can find the code on our Github repo at <a href="https://github.com/KI-labs/Hodor">https://github.com/KI-labs/Hodor</a>. And we are open to your questions and pull requests 😃</p>Building an IoT system to control the office door from SlackProjects2018-02-20T00:00:00+00:002018-02-20T00:00:00+00:00https://nithishr.com/sample-projects<h2 id="ariadne-lifehack-for-the-munich-public-transportation">Ariadne: Lifehack for the Munich Public Transportation</h2> <p>Google Maps / MVV (Munich Public Transportation) can give you the directions to your destination. But once you arrive at the destination, especially using the Metro / Suburban Rail, there is a multitude of exits. Choosing an exit among the choices is not trivial at all times. This could cost up to 5-10 minutes per journey.</p> <p>We built Ariadne which suggests the closest exits to your destination for the public transportation. It also recommends the part of the train you need to board to be close to the suggested exit. The users can provide feedback about the suggestions that can further improve the system. Additionally, we developed the ability to navigate indoors without the use of any infrastructure using mobile phone sensors.</p> <p>This project was developed initially during the <a href="https://hack.tum.de/">hackatum</a>, the annual hackathon from Technical University of Munich. Based on the positive feedback we received, we pursued it further including pitching it to some business customers like the German rail company, Deutsche Bahn. We also secured 2nd place in the <a href="http://zentrum-digitalisierung.bayern/micc-mobility-innovation-competition-campus-2017/">Mobility Innovation Competition @ Campus</a> held by the Center for Digitalization, Bavaria State.</p> <p>You can watch a video that showcases some of the ideas.</p> <iframe width="560" height="315" src="//www.youtube.com/embed/AN9Ly8vFv-Y" frameborder="0"> </iframe> <h2 id="alexa-skill-for-ariadne">Alexa Skill for Ariadne</h2> <p>A prototypical voice skill was also tested for Ariadne. It was implemented mainly to learn about how voice skills were developed for Amazon Echo.</p> <iframe width="560" height="315" src="//www.youtube.com/embed/zzZjqM-rD2E" frameborder="0"> </iframe> <h2 id="hodor-controlling-the-office-door-from-the-internet">Hodor: Controlling the office door from the Internet</h2> <p>At <a href="www.ki-labs.com">KI labs</a>, we faced the problem of shortage of keys. To solve this problem, we connected the intercom system in the office to the internet using a Raspberry Pi which could then be controlled from Slack.</p> <p>It was also interesting to see this turning into a platform of sorts with multiple teams working on further integrations like mobile apps, face detection based authentication, etc.</p> <figure> <img src="/assets/img/projects/hodor.jpeg" /> <figcaption>Hodor in action</figcaption> </figure> <p>You can read more about it on the <a href="https://medium.com/ki-labs-engineering/hodor-controlling-the-office-door-from-slack-a79e77635e39">blog post</a></p> <p><a href="https://github.com/KI-labs/Hodor">Code</a></p> <h2 id="sign-2-speech-sign-language-interpretation-for-speech-impaired">Sign 2 Speech: Sign Language Interpretation for Speech Impaired</h2> <p>Sign 2 Speech provides a communication solution to hearing impaired or mute people. It empowers them to navigate every day social environments by translating gestures to speech. This was developed during, <a href="https://www.thinkmakestart.com/">Think.Make.Start</a>, a two week inter-disciplinary course on product development at the Technical University of Munich.</p> <p>The gesture recognition was done based on the electromyography (EMG) sensors present in Myo armband. The arm band could be used to detect gestures based on the muscle movement and these gestures could be customized by the user. The gestures once recognized would trigger the speech using a portable speaker or the smartphone.</p> <p>You can watch a short demo of it being used by speech impaired people.</p> <iframe width="560" height="315" src="//www.youtube.com/embed/i0AWo0em9J4" frameborder="0"> </iframe> <p>The project was adjudeged as one of the best projects in the cohort.</p> <h2 id="just-a-little-longer-hardware-based-parental-control-system-for-kids">Just a Little Longer: Hardware based Parental Control System for Kids</h2> <p>This was developed over the weekend during Code TwentyFour, the hackathon organized by ProSieben in Munich. JaLL enables kids to consume content on smartphones or smart TVs using physical coins based on NFC similar to a piggy bank. Parents could monitor and set limits on what content could be consumed by the kids.</p> <p>The NFC based tokens were read by the reader placed inside the piggybank and allowed kids to consume media for the specified amount of time. The content was played inside a frontend which enabled us to control the media playback based on the validity of tokens governed by a backend API.</p> <p>This project was adjudged the best project at the hackathon :)</p> <figure class="half"> <img src="/assets/img/projects/jall.jpg" /> <img src="/assets/img/projects/jall_ui.jpg" /> <figcaption>Piggybank for coins and the Jall interface</figcaption> </figure> <p>JaLL being tested by prospective consumer. The audio is partially in German.</p> <iframe width="560" height="315" src="//www.youtube.com/embed/XDhffYlrn9A" frameborder="0"> </iframe> <p>You can read more about it on the <a href="https://devpost.com/software/just-a-little-longer">project page</a></p> <h2 id="viewfainder-buy-what-you-see-on-tv">ViewfAInder: Buy What you see on TV</h2> <p>This was developed over the weekend during 7Hack, the hackathon organized by ProSieben in Munich. ViewfAInder is an AI (computer vision) based system that enables you to pause your TV show to discover articles shown on the show that you can buy online.</p> <p>For the hackathon, we developed a browser plugin that would enable you to pause content on the PC. We take a screenshot of the content and then analyze it for products (holiday location, clothes, etc) and provide their links from the hackathon sponsors in an overlay over the video.</p> <p>This project was one of the best projects at the hackathon :)</p> <figure class="half"> <img src="/assets/img/projects/viewfAInder.jpg" /> <img src="/assets/img/projects/viewfAInder_architecture.png" /> <figcaption>ViewfAInder</figcaption> </figure> <p>You can read more about it on the <a href="https://devpost.com/software/viewfainder">project page</a></p> <h2 id="message-hub">Message Hub</h2> <p>We have a ton of messages across different messaging platforms like Whatsapp, Facebook Messenger, Telegram, Instagram, Slack, etc. It is a pain to find something that you discussed with a friend some time ago. We developed a hub for your messages that help you in finding all the messages that you send instantly. It also stores the important information from the messages for later retrieval.</p> <p>We built an app that captures messages from different messaging applications like Telegram &amp; Slack. The messages are analysed for their content &amp; tagged. In the hub, you can visualize all your historic communication across different platforms over time including times of peak exchange in a heat map. Hovering on the peaks gives you more information about the exchange including the summaries and contents of the exchange. In addition, it can give you an overview of the locations on Here maps. Also packed in is a powerful search powered by Algolia to get the messages by content. Appointments agreed upon are also saved as an event on the platform.</p> <figure class="half"> <img src="/assets/img/projects/message_hub.jpg" /> <img src="/assets/img/projects/message_hub2.jpg" /> <figcaption>Message Hub</figcaption> </figure> <p>This project was awared the best project using <a href="https://www.algolia.com/">Algolia</a> at the <a href="https://jacobshack.com/">jacobsHack!</a>.</p> <p>More can be read about the project on the <a href="https://devpost.com/software/message-hub">project page</a></p> <h2 id="gesture-based-computing">Gesture Based Computing</h2> <p>Gesture based computing was developed during my undergraduate course. We developed a computer vision based system using color markers to control the computer. The gestures could be configured and adjusted according to the users’ preferences. There were gestures for common use cases like opening the browser, image viewer, video player, controlling the mouse and keyboard among other gestures.</p> <p>An overview of some of the gestures can be seen in this video.</p> <iframe width="560" height="315" src="//www.youtube.com/embed/nwgK-jifuY4" frameborder="0"> </iframe> <p>The results of the project are published in the <a href="https://www.ijcaonline.org/specialissues/accthpca/number4/7578-1032">IJCA Special Issue on Advanced Computing and Communication Technologies for HPC Applications</a></p>A selection of some fun projects / ideas