1<!DOCTYPE HTML> 2<!-- 3Prologue by HTML5 UP 4html5up.net | @ajlkn 5Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) 6Jekyll integration by Chris Bobbe | chrisbobbe.github.io 7--> 8<html><head><!-- Robots --> 9 <meta name="robots" content="index, follow" /><link rel="canonical" href="/blog/" /><!-- Title, description, author --><title>Blog | Dimitris Platis</title> 10 <meta name="description" content="My personal website where I showcase my latest work. Check my projects out and get in touch if you have questions or suggestions." /> 11 <meta name="author" content="Dimitris" /> 12 13 <!-- Open Graph --> 14 <meta property="og:title" content="Blog | Dimitris Platis" /> 15 <meta property="og:type" content="website" /><meta property="og:image" content="/assets/images/platissolutions_logo.png" /><meta property="og:url" content="/blog/" /> 16 <meta property="og:site_name" content="Dimitris Platis" /> 17 <meta property="og:description" content="My personal website where I showcase my latest work. Check my projects out and get in touch if you have questions or suggestions." /> 18 19 <!-- Styles --> 20 <meta charset="utf-8" /> 21 <meta name="viewport" content="width=device-width, initial-scale=1" /> 22 <!--[if lte IE 8]>
22<script src="/assets/js/ie/html5shiv.js" defer></script>
22<![endif]--> 23 <link rel="stylesheet" href="/assets/css/main.css" /> 24 <!--[if lte IE 8]><link rel="stylesheet" href="/assets/css/ie8.css" /><![endif]--> 25 <!--[if lte IE 9]><link rel="stylesheet" href="/assets/css/ie9.css" /><![endif]--> 26 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css"> 27 28 <link rel="shortcut icon" type="image/png" href="/assets/images/favicon.png"> 29 30 <!-- Scripts --> 31
31<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js" defer></script>
31 32
32<script src="/assets/js/jquery.scrolly.min.js" defer></script>
32 33
33<script src="/assets/js/jquery.scrollzer.min.js" defer></script>
33 34
34<script src="/assets/js/skel.min.js" defer></script>
34 35
35<script src="/assets/js/util.js" defer></script>
35 36 <!--[if lte IE 8]>
36<script src="/assets/js/ie/respond.min.js" defer></script>
36<![endif]--> 37
37<script src="/assets/js/main.js" defer></script>
37 38 39</head> 40<body><!-- Header --> 41<div id="header"> 42 <div class="top"><!-- Logo --> 43<div id="logo"> 44 <a href="/" id="home-link"> 45 <span class="image avatar48"><img src="/assets/images/platissolutions_logo.png" alt="Avatar of Dimitris" /></span> 46 <h1 id="title">Dimitris Platis</h1> 47 <p>Software Engineer & Maker</p> 48 </a> 49</div><!-- Nav --> 50<nav id="nav"> 51 <ul><li><a href="/" id="home-link"> 52 <span class="icon fa-home">Home</span> 53 </a></li><li><a href="#" id="blog" class="active"> 54 <span class="icon fa-pencil-alt">Blog</span> 55 </a></li><hr><li><a href="#drachmath-solve-spell-reward" id="drachmath-solve-spell-reward-link" class="scrolly"><span class="icon fa-file">Drachmath: Solve, spell, reward</span></a></li><li><a href="#let-s-get-comfortable-with-concepts" id="let-s-get-comfortable-with-concepts-link" class="scrolly"><span class="icon fa-file">Let's get comfortable with concepts</span></a></li><li><a href="#storyprinter-tactile-storytelling" id="storyprinter-tactile-storytelling-link" class="scrolly"><span class="icon fa-file">StoryPrinter: Tactile storytelling</span></a></li><li><a href="#error-reporting-in-c" id="error-reporting-in-c-link" class="scrolly"><span class="icon fa-file">Error reporting in C++</span></a></li><li><a href="#cpp-switcheroo-a-reimagined-switch-case" id="cpp-switcheroo-a-reimagined-switch-case-link" class="scrolly"><span class="icon fa-file">cpp-switcheroo: A reimagined switch-case</span></a></li><li><a href="#toetap-a-human-interface-device-for-your-toes" id="toetap-a-human-interface-device-for-your-toes-link" class="scrolly"><span class="icon fa-file">ToeTap: A human interface device for your toes</span></a></li><li><a href="#free-udemy-course-error-reporting-in-c" id="free-udemy-course-error-reporting-in-c-link" class="scrolly"><span class="icon fa-file">FREE Udemy course: Error reporting in C++</span></a></li><li><a href="#tutorial-let-s-get-comfortable-with-sfinae" id="tutorial-let-s-get-comfortable-with-sfinae-link" class="scrolly"><span class="icon fa-file">Tutorial: Let's get comfortable with SFINAE</span></a></li><li><a href="#udemy-course-how-to-write-solid-c" id="udemy-course-how-to-write-solid-c-link" class="scrolly"><span class="icon fa-file">Udemy course: How to write SOLID C++</span></a></li><li><a href="#captivating-captions-with-phonix" id="captivating-captions-with-phonix-link" class="scrolly"><span class="icon fa-file">Captivating captions with Phonix</span></a></li><li><a href="#skonaki-turn-video-into-cheatsheets" id="skonaki-turn-video-into-cheatsheets-link" class="scrolly"><span class="icon fa-file">Skonaki: Turn video into cheatsheets</span></a></li><li><a href="#let-s-get-comfortable-with-sfinae" id="let-s-get-comfortable-with-sfinae-link" class="scrolly"><span class="icon fa-file">Let's get comfortable with SFINAE</span></a></li><li><a href="#sycophant-opinionated-articles-based-on-the-latest-news" id="sycophant-opinionated-articles-based-on-the-latest-news-link" class="scrolly"><span class="icon fa-file">Sycophant: Opinionated articles based on the latest news</span></a></li><li><a href="#phonix-ai-powered-video-captions" id="phonix-ai-powered-video-captions-link" class="scrolly"><span class="icon fa-file">Phonix: AI-powered video captions</span></a></li><li><a href="#openai-to-generate-pull-request-descriptions" id="openai-to-generate-pull-request-descriptions-link" class="scrolly"><span class="icon fa-file">OpenAI to generate pull request descriptions</span></a></li><li><a href="#eely-markdown-based-courses-made-easy" id="eely-markdown-based-courses-made-easy-link" class="scrolly"><span class="icon fa-file">eely: Markdown-based courses made easy</span></a></li><li><a href="#how-to-make-money-with-open-source" id="how-to-make-money-with-open-source-link" class="scrolly"><span class="icon fa-file">How to make money with Open Source</span></a></li><li><a href="#builder-pattern-a-pragmatic-approach" id="builder-pattern-a-pragmatic-approach-link" class="scrolly"><span class="icon fa-file">Builder pattern: A pragmatic approach</span></a></li><li><a href="#review-github-copilot-and-c" id="review-github-copilot-and-c-link" class="scrolly"><span class="icon fa-file">Review: GitHub Copilot and C++</span></a></li><li><a href="#mob-programming-for-autonomous-cars" id="mob-programming-for-autonomous-cars-link" class="scrolly"><span class="icon fa-file">Mob programming for autonomous cars</span></a></li><li><a href="#mock-dependencies-in-c-without-di" id="mock-dependencies-in-c-without-di-link" class="scrolly"><span class="icon fa-file">Mock dependencies in C++ without DI</span></a></li><li><a href="#smce-your-arduino-car-emulator" id="smce-your-arduino-car-emulator-link" class="scrolly"><span class="icon fa-file">SMCE: Your Arduino car emulator</span></a></li><li><a href="#pimpl-c-tutorial" id="pimpl-c-tutorial-link" class="scrolly"><span class="icon fa-file">pImpl C++ tutorial</span></a></li><li><a href="#reverse-interview-questions" id="reverse-interview-questions-link" class="scrolly"><span class="icon fa-file">Reverse interview questions</span></a></li><li><a href="#break-the-coupling-in-c" id="break-the-coupling-in-c-link" class="scrolly"><span class="icon fa-file">Break the coupling in C++</span></a></li><li><a href="#top-10-practices-i-hate-in-c" id="top-10-practices-i-hate-in-c-link" class="scrolly"><span class="icon fa-file">Top 10 practices I hate in C++</span></a></li><li><a href="#how-to-write-testable-c-for-arduino" id="how-to-write-testable-c-for-arduino-link" class="scrolly"><span class="icon fa-file">How to write testable C++ for Arduino</span></a></li><li><a href="#how-to-write-solid-c" id="how-to-write-solid-c-link" class="scrolly"><span class="icon fa-file">How to write SOLID C++</span></a></li><li><a href="#worse-is-better" id="worse-is-better-link" class="scrolly"><span class="icon fa-file">Worse is better!</span></a></li><li><a href="#corona-lamp-monitor-the-pandemic" id="corona-lamp-monitor-the-pandemic-link" class="scrolly"><span class="icon fa-file">Corona Lamp: Monitor the pandemic</span></a></li><li><a href="#are-you-agile-when-plagued-by-technical-debt" id="are-you-agile-when-plagued-by-technical-debt-link" class="scrolly"><span class="icon fa-file">Are you agile when plagued by technical debt?</span></a></li><li><a href="#smartcar-gets-an-esp32-upgrade" id="smartcar-gets-an-esp32-upgrade-link" class="scrolly"><span class="icon fa-file">Smartcar gets an ESP32 upgrade</span></a></li><li><a href="#iotink-your-portable-e-paper-dashboard" id="iotink-your-portable-e-paper-dashboard-link" class="scrolly"><span class="icon fa-file">IoTink: Your portable e-paper dashboard</span></a></li><li><a href="#develop-faster-with-code-review-lamp" id="develop-faster-with-code-review-lamp-link" class="scrolly"><span class="icon fa-file">Develop faster with Code Review Lamp</span></a></li><li><a href="#custom-actions-for-google-assistant" id="custom-actions-for-google-assistant-link" class="scrolly"><span class="icon fa-file">Custom Actions for Google Assistant</span></a></li><li><a href="#crowdfunding-open-source-products" id="crowdfunding-open-source-products-link" class="scrolly"><span class="icon fa-file">Crowdfunding open source products</span></a></li><li><a href="#debug-your-code-with-dialectic-ball" id="debug-your-code-with-dialectic-ball-link" class="scrolly"><span class="icon fa-file">
55Debug your code with Dialectic Ball</span></a></li><li><a href="#pcb-trophies-for-your-hackathon" id="pcb-trophies-for-your-hackathon-link" class="scrolly"><span class="icon fa-file">PCB trophies for your Hackathon</span></a></li><li><a href="#moltoduino-extra-cores-hil-testing" id="moltoduino-extra-cores-hil-testing-link" class="scrolly"><span class="icon fa-file">Moltoduino: Extra cores & HIL testing</span></a></li><li><a href="#nevma-gesture-control-for-the-masses" id="nevma-gesture-control-for-the-masses-link" class="scrolly"><span class="icon fa-file">Nevma: Gesture control for the masses</span></a></li><li><a href="#cryptopuck-encrypt-on-the-fly" id="cryptopuck-encrypt-on-the-fly-link" class="scrolly"><span class="icon fa-file">Cryptopuck: Encrypt on the fly</span></a></li><li><a href="#sonicdisc-a-360-ultrasonic-scanner" id="sonicdisc-a-360-ultrasonic-scanner-link" class="scrolly"><span class="icon fa-file">SonicDisc: A 360° ultrasonic scanner</span></a></li><li><a href="#my-personalized-västtrafik-bus-stop" id="my-personalized-västtrafik-bus-stop-link" class="scrolly"><span class="icon fa-file">My personalized Västtrafik bus stop</span></a></li><li><a href="#scrumtato-make-daily-stand-ups-agile-again" id="scrumtato-make-daily-stand-ups-agile-again-link" class="scrolly"><span class="icon fa-file">Scrumtato: Make daily stand-ups agile again</span></a></li><li><a href="#young-makers-make-the-headlines-in-greece" id="young-makers-make-the-headlines-in-greece-link" class="scrolly"><span class="icon fa-file">Young Makers make the headlines in Greece</span></a></li><li><a href="#a-christmas-tree-pcb-ornament" id="a-christmas-tree-pcb-ornament-link" class="scrolly"><span class="icon fa-file">A Christmas tree PCB ornament</span></a></li><li><a href="#an-autonomous-wheelchair-meets-li-keqiang" id="an-autonomous-wheelchair-meets-li-keqiang-link" class="scrolly"><span class="icon fa-file">An autonomous wheelchair meets Li Keqiang</span></a></li><li><a href="#turning-software-engineers-into-makers" id="turning-software-engineers-into-makers-link" class="scrolly"><span class="icon fa-file">Turning software engineers into Makers</span></a></li><li><a href="#phishing-wifi-hotspots-with-captive-portals" id="phishing-wifi-hotspots-with-captive-portals-link" class="scrolly"><span class="icon fa-file">Phishing WiFi hotspots with captive portals</span></a></li><li><a href="#enhance-your-marketing-campaign-with-iot" id="enhance-your-marketing-campaign-with-iot-link" class="scrolly"><span class="icon fa-file">Enhance your marketing campaign with IoT</span></a></li><li><a href="#simple-led-driver-board" id="simple-led-driver-board-link" class="scrolly"><span class="icon fa-file">Simple LED driver board</span></a></li><li><a href="#build-the-android-autonomous-vehicle" id="build-the-android-autonomous-vehicle-link" class="scrolly"><span class="icon fa-file">Build the Android autonomous vehicle</span></a></li><li><a href="#a-path-following-vehicle-called-alice" id="a-path-following-vehicle-called-alice-link" class="scrolly"><span class="icon fa-file">A path following vehicle called Alice</span></a></li><li><a href="#a-multipurpose-business-card" id="a-multipurpose-business-card-link" class="scrolly"><span class="icon fa-file">A multipurpose business card</span></a></li><li><a href="#the-world-s-first-android-autonomous-vehicle" id="the-world-s-first-android-autonomous-vehicle-link" class="scrolly"><span class="icon fa-file">The world's first Android autonomous vehicle</span></a></li><li><a href="#breakout-for-the-hm-11-ble-module" id="breakout-for-the-hm-11-ble-module-link" class="scrolly"><span class="icon fa-file">Breakout for the HM-11 BLE module</span></a></li><li><a href="#diy-easy-cheap-wireless-presenter" id="diy-easy-cheap-wireless-presenter-link" class="scrolly"><span class="icon fa-file">DIY, easy & cheap wireless presenter!</span></a></li><li><a href="#attiny85-workshop-in-gothenburg" id="attiny85-workshop-in-gothenburg-link" class="scrolly"><span class="icon fa-file">ATtiny85 workshop in Gothenburg</span></a></li><li><a href="#attiny85-line-following-truck" id="attiny85-line-following-truck-link" class="scrolly"><span class="icon fa-file">ATtiny85 line following truck</span></a></li><li><a href="#diy-interactive-name-tag" id="diy-interactive-name-tag-link" class="scrolly"><span class="icon fa-file">DIY interactive name tag</span></a></li><li><a href="#8-rc-kill-switch" id="8-rc-kill-switch-link" class="scrolly"><span class="icon fa-file">8$ RC kill switch!</span></a></li><li><a href="#make-your-own-10-trackable-keychain" id="make-your-own-10-trackable-keychain-link" class="scrolly"><span class="icon fa-file">Make your own 10$ trackable keychain</span></a></li><li><a href="#diy-bluetooth-enhanced-spider-robot" id="diy-bluetooth-enhanced-spider-robot-link" class="scrolly"><span class="icon fa-file">DIY Bluetooth enhanced, spider robot</span></a></li><li><a href="#gsm-bug-hack-get-a-cheap-phone-controlled-switch" id="gsm-bug-hack-get-a-cheap-phone-controlled-switch-link" class="scrolly"><span class="icon fa-file">GSM bug hack - get a cheap phone controlled switch</span></a></li><li><a href="#peculiarities-oddities-and-interesting-people-at-rome-s-innovation-week" id="peculiarities-oddities-and-interesting-people-at-rome-s-innovation-week-link" class="scrolly"><span class="icon fa-file">Peculiarities, oddities and interesting people at Rome's Innovation Week</span></a></li><li><a href="#gamebuino-an-über-cool-open-source-gaming-console" id="gamebuino-an-über-cool-open-source-gaming-console-link" class="scrolly"><span class="icon fa-file">Gamebuino: An über-cool open source gaming console</span></a></li><li><a href="#tenvis-jpt3815w-camera-gets-firmware-update-to-1-1-0-8-still-a-threat-to-your-privacy" id="tenvis-jpt3815w-camera-gets-firmware-update-to-1-1-0-8-still-a-threat-to-your-privacy-link" class="scrolly"><span class="icon fa-file">Tenvis JPT3815W camera gets firmware update to 1.1.0.8, still a threat to your privacy</span></a></li><li>
55<a href="#tenvis-jpt3815w-a-cheap-network-camera-if-you-can-afford-the-huge-security-issues" id="tenvis-jpt3815w-a-cheap-network-camera-if-you-can-afford-the-huge-security-issues-link" class="scrolly"><span class="icon fa-file">Tenvis JPT3815W: A cheap network camera, if you can afford the huge security issues</span></a></li><li><a href="#serial-println-hello-world" id="serial-println-hello-world-link" class="scrolly"><span class="icon fa-file">Serial.println("Hello World");</span></a></li></ul> 56</nav></div> 57 <div class="bottom"><!-- Social Icons --> 58<ul class="icons"><li><a href="https://twitter.com/PlatisSolutions" class="icon-b fa-twitter"><span class="label">Twitter</span></a></li><li><a href="https://www.linkedin.com/in/platisd/" class="icon-b fa-linkedin-in"><span class="label">LinkedIn</span></a></li><li><a href="https://github.com/platisd" class="icon-b fa-github"><span class="label">GitHub</span></a></li><li><a href="https://www.youtube.com/c/PlatisSolutionsOpenSource" class="icon-b fa-youtube"><span class="label">Youtube</span></a></li><li><a href="/#contact" class="icon fa-envelope"><span class="label">Email</span></a></li></ul> 59</div> 60</div> 61<!-- Main --> 62<div id="main"><!-- Posts List --><section id="drachmath-solve-spell-reward" class="shade-two"> 63 <div class="container"><header> 64 <h2><a href="/blog/2026/09/02/drachmath/">Drachmath: Solve, spell, reward</a></h2><p> 65 <!--02 September 2026--></p></header><img class="feat-img" src="/assets/images/drachmath.jpg" 66 alt="drachmat picture" /> 67<p>Ever heard of drachmas? 68drachmath is not the old Greek currency with a⦠lisp (ð), 69but a game that trains your kids in maths and spelling while they earn pocket money. 70</p><a href="/blog/2026/09/02/drachmath/">read more</a></div> 71</section> 72<section id="let-s-get-comfortable-with-concepts" class="shade-three"> 73 <div class="container"><header> 74 <h2><a href="/blog/2026/05/02/lets-get-comfortable-with-concepts-copy/">Let's get comfortable with concepts</a></h2><p> 75 <!--02 May 2026--></p></header><img class="feat-img" src="/assets/images/concepts.png" 76 alt="concepts" /> 77<p>Constraints and concepts are a major feature introduced in C++20, long-awaited by the C++ community. 78They provide a way to âconstrainâ templates to make them more expressive, harder to misuse and easier to debug. 79Additionally, we can use constraints and concepts instead of SFINAE to enable or disable parts of the API based on the properties of the types used as template parameters. 80We are about to get comfortable with concepts, so prepare for some âstrangeâ syntax and many practical examples! 81</p><a href="/blog/2026/05/02/lets-get-comfortable-with-concepts-copy/">read more</a></div> 82</section> 83<section id="storyprinter-tactile-storytelling" class="shade-four"> 84 <div class="container"><header> 85 <h2><a href="/blog/2026/04/09/storyprinter-tactile-storytelling/">StoryPrinter: Tactile storytelling</a></h2><p> 86 <!--09 April 2026--></p></header><img class="feat-img" src="/assets/images/storyprinter-icon-blog.png" 87 alt="a printer with a book icon" /> 88<p>Welcome to StoryPrinter: Tactile storytelling with your kids, anytime, anywhere! 89</p><a href="/blog/2026/04/09/storyprinter-tactile-storytelling/">read more</a></div> 90</section> 91<section id="error-reporting-in-c" class="shade-three"> 92 <div class="container"><header> 93 <h2><a href="/blog/2024/08/20/error-reporting-in-cpp/">Error reporting in C++</a></h2><p> 94 <!--20 August 2024--></p></header><img class="feat-img" src="/assets/images/cpp-error-reporting.jpg" 95 alt="a headline image with a pipe and boxes saying error on them" /> 96<p>In this tutorial, we will be talking about errors that occur during the execution of a program 97and how to report them in C++. We wonât be talking much about program logic errors, but rather 98âenvironmentalâ errors, such as file not found, out of memory, no network etc. Reporting such errors 99becomes âtrickierâ when they take place in a function that normally returns a value. 100What should it return instead? 101</p><a href="/blog/2024/08/20/error-reporting-in-cpp/">read more</a></div> 102</section> 103<section id="cpp-switcheroo-a-reimagined-switch-case" class="shade-two">
104 <div class="container"><header> 105 <h2><a href="/blog/2024/07/12/cpp-switcheroo-functional-switch-case/">cpp-switcheroo: A reimagined switch-case</a></h2><p> 106 <!--12 July 2024--></p></header><img class="feat-img" src="/assets/images/switcheroo-featured.png" 107 alt="cpp-switcheroo header image" /> 108<p>When teaching C++ to beginners, 109I often find myself explaining the switch statement. 110Itâs a simple and powerful tool that allows you to execute different code blocks based 111on the value of integral types. 112At the same time, it has some drawbacks, like the lack of type safety, forgetting a break statement, 113and of course, that you are limited to integral types. 114Drawing some inspiration from other languages and the 115âOverloadâ pattern, I created cpp-switcheroo. 116</p><a href="/blog/2024/07/12/cpp-switcheroo-functional-switch-case/">read more</a></div> 117</section> 118<section id="toetap-a-human-interface-device-for-your-toes" class="shade-three"> 119 <div class="container"><header> 120 <h2><a href="/blog/2024/03/18/toetap-keyboard-mouse-for-your-toes/">ToeTap: A human interface device for your toes</a></h2><p> 121 <!--18 March 2024--></p></header><img class="feat-img" src="/assets/images/toetap.jpg" 122 alt="toetap" /> 123<p>As you may have noticed, I often make videos about programming and the various projects Iâm working on. 124While recording, I always have a script that I am reading from. 125The thing is, I often have to either stop recording to scroll the script or move my hand to the mouse. 126I wanted to find a way to scroll without having to remove one of my hands from the video frame and risk losing my concentration while filming. 127Here comes ToeTap: A human interface device for your toes. 128</p><a href="/blog/2024/03/18/toetap-keyboard-mouse-for-your-toes/">read more</a></div> 129</section> 130<section id="free-udemy-course-error-reporting-in-c" class="shade-four"> 131 <div class="container"><header> 132 <h2><a href="/blog/2024/02/09/udemy-error-reporting-cpp/">FREE Udemy course: Error reporting in C++</a></h2><p> 133 <!--09 February 2024--></p></header><img class="feat-img" src="/assets/images/cpp-ant-nest.png" 134 alt="an ant nest shaped like the C++ logo" /> 135<p>Reporting errors in a way that facilitates robust handling and debugging results in more correct and maintainable code. 136In this free Udemy course, I will teach you how to do that with C++, from the most basic to the most modern techniques. 137</p><a href="/blog/2024/02/09/udemy-error-reporting-cpp/">read more</a></div> 138</section> 139<section id="tutorial-let-s-get-comfortable-with-sfinae" class="shade-three"> 140 <div class="container"><header> 141 <h2><a href="/blog/2024/01/27/lets-get-comfortable-with-sfinae/">Tutorial: Let's get comfortable with SFINAE</a></h2><p> 142 <!--27 January 2024--></p></header><img class="feat-img" src="/assets/images/1000-subs-sfinae.png" 143 alt="balloons and confetti for 1000 subscribers" /> 144<p>SFINAE is a powerful tool in the C++ toolbox that allows us to select behavior based on âtraitsâ of types. It relies on a peculiar behavior of C++, where errors during template type substitution are not fatal as long as thereâs a substitution that succeeds. 145This is a very confusing concept, so I decided to make a fairly detailed video tutorial about it. In the video, I promised that if I get 1000 subscribers on YouTube, I would write a blog post about it so you may have access to the code snippets. So, here it is! 146</p><a href="/blog/2024/01/27/lets-get-comfortable-with-sfinae/">read more</a></div> 147</section> 148<section id="udemy-course-how-to-write-solid-c" class="shade-two"> 149 <div class="container"><header> 150 <h2><a href="/blog/2024/01/09/udemy-how-to-write-solid-cpp/">Udemy course: How to write SOLID C++</a></h2><p> 151 <!--09 January 2024--></p></header><img class="feat-img" src="/assets/images/cpp-logo-solid-course.png" 152 alt="a robot transcribing a human" /> 153<p>2ï¸â£0ï¸â£2ï¸â£4ï¸â£ is here and so is my first course on Udemy! 154</p><a href="/blog/2024/01/09/udemy-how-to-write-solid-cpp/">read more</a></div> 155</section> 156<section id="captivating-captions-with-phonix" class="shade-three"> 157 <div class="container"><header> 158 <h2><a href="/blog/2023/10/23/phonix-captivating-captions/">Captivating captions with Phonix</a></h2><p> 159 <!--23 October 2023--></p></header><img class="feat-img" src="/assets/images/robot-transcribing.png" 160 alt="a robot transcribing a human" /> 161<p>Remember Phonix? The Python program that uses OpenAIâs API to generate captions for videos? 162Well, it just got a new feature allowing to create even more captivating captions! 163</p><a href="/blog/2023/10/23/phonix-captivating-captions/">read more</a></div> 164</section>
165<section id="skonaki-turn-video-into-cheatsheets" class="shade-four"> 166 <div class="container"><header> 167 <h2><a href="/blog/2023/10/17/skonaki-video-to-cheatsheet/">Skonaki: Turn video into cheatsheets</a></h2><p> 168 <!--17 October 2023--></p></header><img class="feat-img" src="/assets/images/skonaki-logo.png" 169 alt="skonaki logo" /> 170<p>Study smarter, not harder by creating cheatsheets out of videos with skonaki. 171</p><a href="/blog/2023/10/17/skonaki-video-to-cheatsheet/">read more</a></div> 172</section> 173<section id="let-s-get-comfortable-with-sfinae" class="shade-three"> 174 <div class="container"><header> 175 <h2><a href="/blog/2023/09/28/sfinae-video-tutorial/">Let's get comfortable with SFINAE</a></h2><p> 176 <!--28 September 2023--></p></header><img class="feat-img" src="/assets/images/sfinae-video-thumbnail.png" 177 alt="sycophant logo" /> 178<p>SFINAE is a powerful tool in the C++ toolbox. It is also a very confusing one. 179In this video, I try to thoroughly explain what SFINAE is, how it works and how to use it. 180The goal is that by the end of the video, you will be comfortable with SFINAE. 181</p><a href="/blog/2023/09/28/sfinae-video-tutorial/">read more</a></div> 182</section> 183<section id="sycophant-opinionated-articles-based-on-the-latest-news" class="shade-two"> 184 <div class="container"><header> 185 <h2><a href="/blog/2023/07/15/sycophant/">Sycophant: Opinionated articles based on the latest news</a></h2><p> 186 <!--15 July 2023--></p></header><img class="feat-img" src="/assets/images/sycophant-logo.png" 187 alt="sycophant logo" /> 188<p>Have you noticed how many articles on the web are just a rehash of the same news? 189Few organizations are able to produce original content while most others are 190mostly aggregating, translating and rephrasing the same news. 191In many cases, their main contribution is a clickbait title to make the news 192more sensational. 193My new project, sycophant, aims to automate this process by utilizing the power of OpenAI 194and produce, potentially, opinionated articles based on the latest news. 195</p><a href="/blog/2023/07/15/sycophant/">read more</a></div> 196</section> 197<section id="phonix-ai-powered-video-captions" class="shade-three"> 198 <div class="container"><header> 199 <h2><a href="/blog/2023/05/08/phonix-openai-whisper-captions/">Phonix: AI-powered video captions</a></h2><p> 200 <!--08 May 2023--></p></header><img class="feat-img" src="/assets/images/robot-transcribing.png" 201 alt="a robot transcribing a human" /> 202<p>If you create videos for social media (or just consume them), you may have noticed that 203captions make the content more engaging and increase the audienceâs focus and attention. 204Myself, even though I am a rather advanced English speaker, I still prefer to watch subtitled 205movies and TV shows. 206When OpenAI announced Whisper 207I had to give it a try and incorporate it in some project. 208My first idea was to create an automatic translator but that was too complicated, 209so I went for the next best thing Iâd have more frequent use for: Captions for my videos. 210</p><a href="/blog/2023/05/08/phonix-openai-whisper-captions/">read more</a></div> 211</section> 212<section id="openai-to-generate-pull-request-descriptions" class="shade-four"> 213 <div class="container"><header> 214 <h2><a href="/blog/2023/03/13/openai-pull-request-descriptions/">OpenAI to generate pull request descriptions</a></h2><p> 215 <!--13 March 2023--></p></header><img class="feat-img" src="/assets/images/robot-typing.png" 216 alt="a robot typing on a keyboard" /> 217<p>Introducing a GitHub Action that can save you time and effort when it comes to writing pull request descriptions. 218platisd/openai-pr-description uses the power of OpenAI to automatically fill in the description of your pull request, 219based on the title and contents. 220Itâs like having ChatGPT help you out! 221</p><a href="/blog/2023/03/13/openai-pull-request-descriptions/">read more</a></div> 222</section> 223<section id="eely-markdown-based-courses-made-easy" class="shade-three"> 224 <div class="container"><header> 225 <h2><a href="/blog/2023/03/06/eely/">eely: Markdown-based courses made easy</a></h2><p> 226 <!--06 March 2023--></p></header><img class="feat-img" src="/assets/images/eely-logo.png" 227 alt="eely logo" /> 228<p>Are you a teacher or instructor tired of juggling multiple copies of your course materials for different audiences? 229Look no further than eely! 230This powerful tool helps you organize your Markdown-based content into configurable course deliveries, 231allowing you to create a single source of truth for your course content. 232</p><a href="/blog/2023/03/06/eely/">read more</a></div> 233</section> 234<section id="how-to-make-money-with-open-source" class="shade-two">
235 <div class="container"><header> 236 <h2><a href="/blog/2023/02/05/how-to-make-money-with-open-source/">How to make money with Open Source</a></h2><p> 237 <!--05 February 2023--></p></header><img class="feat-img" src="/assets/images/stallman-money-oss.png" 238 alt="stallman oss money" /> 239<p>You can study, use, modify, share, and sell an open source project. 240The latter may sound contradicting or even controversial, however, it is inferred by one of the fundamental 241rights granted to you by the so-called âfour essential freedomsâ of free software 242(i.e. âThe freedom to redistribute copiesâ) as well as by the âOpen Source Definitionâ 243(i.e. âNo Discrimination Against Fields of Endeavorâ). 244In this article, we will explore the different ways to make money with Open Source. 245</p><a href="/blog/2023/02/05/how-to-make-money-with-open-source/">read more</a></div> 246</section> 247<section id="builder-pattern-a-pragmatic-approach" class="shade-three"> 248 <div class="container"><header> 249 <h2><a href="/blog/2023/01/03/builder-pattern-cpp/">Builder pattern: A pragmatic approach</a></h2><p> 250 <!--03 January 2023--></p></header><img class="feat-img" src="/assets/images/builder-pattern-feat.png" 251 alt="builder pattern cpp" /> 252<p>I have been using the Builder pattern a lot recently but when I came across some articles about it, they confused me, 253so I got the inspiration write a post about it. 254</p><a href="/blog/2023/01/03/builder-pattern-cpp/">read more</a></div> 255</section> 256<section id="review-github-copilot-and-c" class="shade-four"> 257 <div class="container"><header> 258 <h2><a href="/blog/2022/07/03/github-copilot-cpp/">Review: GitHub Copilot and C++</a></h2><p> 259 <!--03 July 2022--></p></header><img class="feat-img" src="/assets/images/github-copilot-cpp.png" 260 alt="github copilot cpp" /> 261<p>GitHub Copilot is a tool that provides real-time suggestions while developers write code. It offers much more than code completion, a feature found in most modern IDEs. Instead, it tries to predict what the developer wants to write from a couple of lines to entire blocks of code. Internally, GitHub Copilot leverages Machine Learning models trained on an unspecified number of open source projects, hosted by GitHub. Recently, it became publicly available at the price of 10$ a month which spawned some controversy. I have been using Copilot to write mostly C++, so letâs see what the fuss is about....</p><a href="/blog/2022/07/03/github-copilot-cpp/">read more</a></div> 262</section> 263<section id="mob-programming-for-autonomous-cars" class="shade-three"> 264 <div class="container"><header> 265 <h2><a href="/blog/2022/04/18/mob-programming/">Mob programming for autonomous cars</a></h2><p> 266 <!--18 April 2022--></p></header><img class="feat-img" src="/assets/images/mob-programming-feat.png" 267 alt="retrospective outcome" /> 268<p>For the past year and a half, my team and I have been practicing mob programming every day, the entire day. 269It is our default way of working which means that we take âindividualâ tasks rarely and by exception. 270Mob programming has been working well for us, decreased the pressure on individual members, increased the 271teamâs effectiveness, and the frequency we deliver our sprintâs commitment to the fullest. 272In this article, I will dive into the practicalities of how we practice mob programming, the benefits 273as well as the drawbacks we have observed. 274</p><a href="/blog/2022/04/18/mob-programming/">read more</a></div> 275</section> 276<section id="mock-dependencies-in-c-without-di" class="shade-two"> 277 <div class="container"><header> 278 <h2><a href="/blog/2022/02/18/mock-any-dependency-in-cpp/">Mock dependencies in C++ without DI</a></h2><p> 279 <!--18 February 2022--></p></header><img class="feat-img" src="/assets/images/mock-any-dep-feat.png" 280 alt="mocks diagram" /> 281<p>Do you want to mock your softwareâs dependencies so that you can unit test it easily? 282Is refactoring with the Dependency Injection (DI) design pattern not a convenient solution or an option at all? 283Then keep reading and I will show you a technique, that while it should normally be your last resort, 284it does allow you to mock most dependencies, without DI and typically, without changes to your code under test. 285</p><a href="/blog/2022/02/18/mock-any-dependency-in-cpp/">read more</a></div> 286</section> 287<section id="smce-your-arduino-car-emulator" class="shade-three"> 288 <div class="container"><header> 289 <h2><a href="/blog/2021/09/25/smce-arduino-car-emulator/">SMCE: Your Arduino car emulator</a></h2><p> 290 <!--25 September 2021--></p></header><img class="feat-img" src="/assets/images/smce-logo.png" 291 alt="SMCE logo" /> 292<p>With the pandemic ongoing, hardware isnât only difficult to source but also hard to 293collaboratively work with safely. In the case of smart miniature vehicles, 294the number of available units is inherently limited and so is the âenvironmentâ we deploy 295them in, e.g. a race track or an obstacle course. 296How do we work around the hardware resource scarcity? We digitalize the resources! 297</p><a href="/blog/2021/09/25/smce-arduino-car-emulator/">read more</a></div> 298</section> 299<section id="pimpl-c-tutorial" class="shade-four"> 300 <div class="container"><header> 301 <h2><a href="/blog/2021/05/14/cpp-pimpl-tutorial/">
301pImpl C++ tutorial</a></h2><p> 302 <!--14 May 2021--></p></header><img class="feat-img" src="/assets/images/pimpl-tutorial.png" 303 alt="pImpl tutorial" /> 304<p>The Pointer to Implementation (pImpl) idiom in C++ is one technique that allows you to hide implementation 305details from an interface. 306</p><a href="/blog/2021/05/14/cpp-pimpl-tutorial/">read more</a></div> 307</section> 308<section id="reverse-interview-questions" class="shade-three"> 309 <div class="container"><header> 310 <h2><a href="/blog/2020/12/06/reverse-interview-questions-for-software-engineers/">Reverse interview questions</a></h2><p> 311 <!--06 December 2020--></p></header><img class="feat-img" src="/assets/images/reverse-interview-questions.png" 312 alt="break the coupling header" /> 313<p>Questions you should ask when interviewed for a Software Engineering position. 314</p><a href="/blog/2020/12/06/reverse-interview-questions-for-software-engineers/">read more</a></div> 315</section> 316<section id="break-the-coupling-in-c" class="shade-two"> 317 <div class="container"><header> 318 <h2><a href="/blog/2020/11/01/break-the-coupling-cpp/">Break the coupling in C++</a></h2><p> 319 <!--01 November 2020--></p></header><img class="feat-img" src="/assets/images/break-the-coupling-cpp.png" 320 alt="break the coupling header" /> 321<p>Implementations tightly coupled to their dependencies are difficult to maintain, reuse and test. In this tutorial, I will show you 5 ways of refactoring with the intent to âbreakâ tight coupling between business logic and dependencies. A good indicator over the effectiveness of a decoupling is testability: If you are able to test your class and your class only without being influenced by the inner works of the various dependencies, then you know you have done a good decoupling. Below you will find some tightly coupled code and several ways to break it away from its dependencies. The focus will...</p><a href="/blog/2020/11/01/break-the-coupling-cpp/">read more</a></div> 322</section> 323<section id="top-10-practices-i-hate-in-c" class="shade-three"> 324 <div class="container"><header> 325 <h2><a href="/blog/2020/09/29/top-10-practices-i-hate-in-cpp/">Top 10 practices I hate in C++</a></h2><p> 326 <!--29 September 2020--></p></header><img class="feat-img" src="/assets/images/top-10-practices-i-hate-cpp.png" 327 alt="c++ practices I hate" /> 328<p>After working with C++ for the past years, I have developed some relatively strong 329opinions about several things people do, when writing C++. This inspired me to come up 330with the TOP 10 C++ practices, I hate most. 331</p><a href="/blog/2020/09/29/top-10-practices-i-hate-in-cpp/">read more</a></div> 332</section> 333<section id="how-to-write-testable-c-for-arduino" class="shade-four"> 334 <div class="container"><header> 335 <h2><a href="/blog/2020/07/11/writing-testable-cpp-for-arduino/">How to write testable C++ for Arduino</a></h2><p> 336 <!--11 July 2020--></p></header><img class="feat-img" src="/assets/images/testable_cpp_arduino.png" 337 alt="testable c++ for arduino" /> 338<p>Learn how to write reusable and testable C++ following the Inversion of Control principle. 339The new tutorial focuses on writing code for embedded systems (ESP32 MCU) and exercises are included for you to practice. 340</p><a href="/blog/2020/07/11/writing-testable-cpp-for-arduino/">read more</a></div> 341</section> 342<section id="how-to-write-solid-c" class="shade-three"> 343 <div class="container"><header> 344 <h2><a href="/blog/2020/06/22/how-to-write-solid-cpp/">How to write SOLID C++</a></h2><p> 345 <!--22 June 2020--></p></header><img class="feat-img" src="/assets/images/solid_feat.png" 346 alt="SOLID principles" /> 347<p>We all know, or should know, about SOLID. The question is, do we write C++ according to the SOLID principles? 348</p><a href="/blog/2020/06/22/how-to-write-solid-cpp/">read more</a></div> 349</section> 350<section id="worse-is-better" class="shade-two"> 351 <div class="container"><header> 352 <h2><a href="/blog/2020/03/30/worse-is-better/">Worse is better!</a></h2><p> 353 <!--30 March 2020--></p></header><img class="feat-img" src="/assets/images/keep-things-simple.jpg" 354 alt="Keep things simple" /> 355<p>If you are working on a product that involves software, you may realize a considerable number of the features you build are never utilized by your users. And while some of those may be there due to legal reasons, the fact that you spent resources with little to no return of your investment does not change. To make matters worse, these features increase the systemâs complexity and make the remaining ones less discoverable. Combined with the understanding that the majority of the work which goes into a product is not in functionality that sets it apart from the competition, I...</p><a href="/blog/2020/03/30/worse-is-better/">read more</a></div> 356</section> 357<section id="corona-lamp-monitor-the-pandemic" class="shade-three"> 358 <div class="container"><header> 359 <h2><a href="/blog/2020/03/24/corona-lamp/">Corona Lamp: Monitor the pandemic</a></h2><p> 360 <!--24 March 2020--></p></header><img class="feat-img" src="/assets/images/corona-lamp-featured.jpg" 361 alt="Corona lamp" /> 362<p>Paranoid, or âjust concernedâ, with the ongoing pandemic and want to keep tabs on the situation? 363This ESP8266 and WS2812B enabled lamp has got you covered. 364</p><a href="/blog/2020/03/24/corona-lamp/">read more</a></div> 365</section> 366<section id="are-you-agile-when-plagued-by-technical-debt" class="shade-four"> 367 <div class="container"><header> 368 <h2><a href="/blog/2020/03/16/are-you-agile/">Are you agile when plagued by technical debt?</a></h2><p> 369 <!--16 March 2020--></p></header><img class="feat-img" src="/assets/images/tech-debt-carrying-boxes.jpg" 370 alt="Man carrying boxes" /> 371<p>Almost everyone claims to be agile. Some âin their wayâ, others more formally as part of a framework. 372From small startups to big automotive vendors and from development teams to HR, suggesting you are not 373agile is the equivalent of admitting you hate puppies or something equally shocking. 374</p><a href="/blog/2020/03/16/are-you-agile/">read more</a></div> 375</section> 376<section id="smartcar-gets-an-esp32-upgrade" class="shade-three"> 377 <div class="container"><header> 378 <h2><a href="/blog/2020/02/16/smartcar-gets-an-esp32-upgrade/">Smartcar gets an ESP32 upgrade</a></h2><p> 379 <!--16 February 2020--></p></header><img class="feat-img" src="/assets/images/smartcar_featured.jpg" 380 alt="ESP32 Smartcar" /> 381<p>Remember Smartcar, the versatile and easy to use vehicle platform for your hobby-grade projects? It just received a powerful upgrade with an ESP32 as its âbrainâ, allowing it seamless connectivity via WiFi or Bluetooth. To sweeten the deal, it got new motors and fancy, custom-made chassis! 382</p><a href="/blog/2020/02/16/smartcar-gets-an-esp32-upgrade/">read more</a></div> 383</section> 384<section id="iotink-your-portable-e-paper-dashboard" class="shade-two">
385 <div class="container"><header> 386 <h2><a href="/blog/2019/02/18/iotink-your-portable-e-paper-dashboard/">IoTink: Your portable e-paper dashboard</a></h2><p> 387 <!--18 February 2019--></p></header><img class="feat-img" src="/assets/images/iotink_feat.jpg" 388 alt="IoTink" /> 389<p>In our previous apartment, the gadget I was using daily was the VästtraPi which is a Raspberry Pi device with a 7â LCD screen connected to the internet indicating the next public transport departures. Since we moved, the new layout did not make it easy to have the screen mounted and continuously powered. Since the need to know when buses and trams leave remained, so it was time to use the E-paper display I bought last summer, to create⦠IoTink! (IoT + E-Ink ð) 390</p><a href="/blog/2019/02/18/iotink-your-portable-e-paper-dashboard/">read more</a></div> 391</section> 392<section id="develop-faster-with-code-review-lamp" class="shade-three"> 393 <div class="container"><header> 394 <h2><a href="/blog/2018/09/25/code-review-lamp/">Develop faster with Code Review Lamp</a></h2><p> 395 <!--25 September 2018--></p></header><img class="feat-img" src="/assets/images/code_review_lamp_feat.jpg" 396 alt="Code review lamp" /> 397<p>At work, we are a fast-paced team that likes to commit small and often. Every commit does not only have to pass the various tests run by our Continuous Integration machinery, but also gets extensively code reviewed before allowed to be merged. Since we are six and our internal code of conduct dictates two positive approvals for each new submission, the lack of responsiveness when it comes to reviewing, can impede the development process and speed. 398</p><a href="/blog/2018/09/25/code-review-lamp/">read more</a></div> 399</section> 400<section id="custom-actions-for-google-assistant" class="shade-four"> 401 <div class="container"><header> 402 <h2><a href="/blog/2018/07/15/custom-actions-for-google-assistant/">Custom Actions for Google Assistant</a></h2><p> 403 <!--15 July 2018--></p></header><img class="feat-img" src="/assets/images/personal_bus_stop_featured.jpg" 404 alt="Google Actions bus stop" /> 405<p>A Google Home Mini recently made it into the collection of gadgets I use on a daily basis for casting music, setting count down timers, reminders, recipes etc. However the capabilities the software behind it, Google Assistant, expand way beyond that. We saw how it, one day soon, could be making calls and booking appointments for you during the Google IO 18 keynote. Additionally, it is expected to be the catalyst for driver experience, as brilliantly demonstrated by Volvo Cars in the promotional video of their next generation infotainment system. It runs native Android just like your smartphone! There is so...</p><a href="/blog/2018/07/15/custom-actions-for-google-assistant/">read more</a></div> 406</section> 407<section id="crowdfunding-open-source-products" class="shade-three"> 408 <div class="container"><header> 409 <h2><a href="/blog/2018/07/02/crowdfunding-open-source-products/">Crowdfunding open source products</a></h2><p> 410 <!--02 July 2018--></p></header><img class="feat-img" src="/assets/images/abstract-e1530557843192.png" 411 alt="Paper abstract" /> 412<p>When developing something that solves a big, small or silly problem I ask myself, usually as a mental exercise: How can I make money out of this? Sometimes, this thought experiment is concluded by a crowdfunding campaign where my cool gadget receives support by like-minded enthusiasts who pitch in and help bring it to mass production. Additionally, as an open source proponent I enjoy publishing my work, however this is ultimately a business move. Unfortunately, the lack of insights on the matter deems such decisions difficult and, as the devil is in the detail, surrounds the initiativeâs feasibility with uncertainty....</p><a href="/blog/2018/07/02/crowdfunding-open-source-products/">read more</a></div> 413</section> 414<section id="debug-your-code-with-dialectic-ball" class="shade-two"> 415 <div class="container"><header> 416 <h2><a href="/blog/2018/06/02/debug-your-code-with-dialectic-ball/">Debug your code with Dialectic Ball</a></h2><p> 417 <!--02 June 2018--></p></header><img class="feat-img" src="/assets/images/dialecticball_feat.png" 418 alt="Dialectic Ball" /> 419<p>Always fascinated by portable, low power devices and new ways to interact with them, I was very happy to discover these LCD displays that used to be on old Nokia ph
419ones and their consumption is in the micro-Amperes range. As it often happens, I had a solution and was looking for a problem. And that is how Dialectic Ball was conceived! 420</p><a href="/blog/2018/06/02/debug-your-code-with-dialectic-ball/">read more</a></div> 421</section> 422<section id="pcb-trophies-for-your-hackathon" class="shade-three"> 423 <div class="container"><header> 424 <h2><a href="/blog/2018/05/16/pcb-trophies-for-your-hackathon/">PCB trophies for your Hackathon</a></h2><p> 425 <!--16 May 2018--></p></header><img class="feat-img" src="/assets/images/trohpy_featured-e1526503498822.jpg" 426 alt="PCB trophies" /> 427<p>During the past couple of years I have been involved in a couple of Hackathons, mainly as a member of the jury as well as the overall organization. One of the most fun tasks was creating the trophies for the winning team. 428</p><a href="/blog/2018/05/16/pcb-trophies-for-your-hackathon/">read more</a></div> 429</section> 430<section id="moltoduino-extra-cores-hil-testing" class="shade-four"> 431 <div class="container"><header> 432 <h2><a href="/blog/2018/02/21/moltoduino-extra-cores-hil-testing/">Moltoduino: Extra cores & HIL testing</a></h2><p> 433 <!--21 February 2018--></p></header><img class="feat-img" src="/assets/images/moltoduino_featured2.jpg" 434 alt="Moltoduino" /> 435<p>If you are like me and enjoy working on microcontroller projects it is more than likely that, at some point, you wished you had additional processing power, extra pins, parallel threads and so on. One way to tackle this is to get stronger hardware and another to optimize your co
435de. A third is to⦠stack another microcontroller on top and thus Moltoduino was born! 436</p><a href="/blog/2018/02/21/moltoduino-extra-cores-hil-testing/">read more</a></div> 437</section> 438<section id="nevma-gesture-control-for-the-masses" class="shade-three"> 439 <div class="container"><header> 440 <h2><a href="/blog/2017/11/27/nevma-gesture-control-for-the-masses/">Nevma: Gesture control for the masses</a></h2><p> 441 <!--27 November 2017--></p></header><img class="feat-img" src="/assets/images/nevma_featured.jpg" 442 alt="Nevma" /> 443<p>Working at Delphi (soon Aptiv) allows me the luxury of being immersed in a high-tech and innovative environment that provides constant inspiration for creating new and exciting gadgets. One day, some colleagues mentioned gesture control being one of the recent trends in automotive. This got me thinking of ways to bring gesture control to the broader audience in an affordable and easy to use package. And thus, Nevma was born. 444</p><a href="/blog/2017/11/27/nevma-gesture-control-for-the-masses/">read more</a></div> 445</section> 446<section id="cryptopuck-encrypt-on-the-fly" class="shade-two"> 447 <div class="container"><header> 448 <h2><a href="/blog/2017/10/10/cryptopuck-encrypt-removable-media-on-the-fly/">Cryptopuck: Encrypt on the fly</a></h2><p> 449 <!--10 October 2017--></p></header><img class="feat-img" src="/assets/images/cryptopuck_featured.jpg" 450 alt="Cryptopuck" /> 451<p>After finishing a project, I torment myself on what to make next. While riding the bus home one day, an idea struck. How cool would it be if there was a small handheld gadget, able to encrypt USB sticks and
451SD cards just by plugging them into it. And thus the Cryptopuck was born! 452</p><a href="/blog/2017/10/10/cryptopuck-encrypt-removable-media-on-the-fly/">read more</a></div> 453</section> 454<section id="sonicdisc-a-360-ultrasonic-scanner" class="shade-three"> 455 <div class="container"><header> 456 <h2><a href="/blog/2017/08/27/sonicdisc-360-ultrasonic-scanner/">SonicDisc: A 360° ultrasonic scanner</a></h2><p> 457 <!--27 August 2017--></p></header><img class="feat-img" src="/assets/images/IMG_20170820_204036_featured.jpg" 458 alt="SonicDisc" /> 459<p>For some years now, I have been on a never-ending quest to discover the cheapest way for a miniature vehicle to position itself. One that performs decently that is. My latest idea involved the, less-than-a-dollar, HC-SR04 ultrasonic sensors to acquire a holistic view of the surroundings. But letâs take it from the beginning⦠460</p><a href="/blog/2017/08/27/sonicdisc-360-ultrasonic-scanner/">read more</a></div> 461</section> 462<section id="my-personalized-västtrafik-bus-stop" class="shade-four"> 463 <div class="container"><header> 464 <h2><a href="/blog/2017/06/18/vasttrapi-my-personalized-vasttrafik-bus-stop/">My personalized Västtrafik bus stop</a></h2><p> 465 <!--18 June 2017--></p></header><img class="feat-img" src="/assets/images/vasttrapi_featured2.jpg" 466 alt="VasttraPi" /> 467<p>In Gothenburg we are fortunate enough to have the local public transportation company, Västtrafik, maintaining its live schedule online and providing a public API for whoever needs to query it for their own applications. Consequently, there are plenty mobile solutions that provide access to the schedule, allow you to plan your trip etc. I have a problem though. In order to figure out when the next bus is arriving, I have to take my phone out, open the application, tap on my bus stop and finally check how many minutes I have left until I miss the bus. 468</p><a href="/blog/2017/06/18/vasttrapi-my-personalized-vasttrafik-bus-stop/">read more</a></div> 469</section> 470<section id="scrumtato-make-daily-stand-ups-agile-again" class="shade-three"> 471 <div class="container"><header> 472 <h2><a href="/blog/2017/06/12/scrumtato-make-daily-stand-ups-agile-again/">Scrumtato: Make daily stand-ups agile again</a></h2><p> 473 <!--12 June 2017--></p></header><img class="feat-img" src="/assets/images/scrumtato_featured.jpg" 474 alt="Scrumtato" /> 475<p>At Delphi in Gothenburg, where I am currently employed, we create all kinds of cool products for the automotive industry. To organize our development process, we use SCRUM and abide by the Agile principles. Every morning, we have a short meeting where we discuss what our progress has been since the previous meeting, what we intend to work on until the next one, as well as mention any obstacles that we face. This meeting, the âdaily stand-upâ, is supposed to be short and should not last more than 10-15 minutes. 476</p><a href="/blog/2017/06/12/scrumtato-make-daily-stand-ups-agile-again/">read more</a></div> 477</section> 478<section id="young-makers-make-the-headlines-in-greece" class="shade-two"> 479 <div class="container"><header> 480 <h2><a href="/blog/2017/03/04/makers-make-headlines-greece/">Young Makers make the headlines in Greece</a></h2><p> 481 <!--04 March 2017--></p></header><img class="feat-img" src="/assets/images/SEN-TEAM_featured.jpg" 482 alt="Students featured" /> 483<p>During the last one year and a half I have been part of a voluntary initiative between the University of Gothenburg and the 1st Gymnasium of Rhodes which aims to introduce secondary school students to STEM through Maker and T-shaped education. As the first cycle of this project comes to a conclusion, it is time to write a short retrospective experience report. Letâs take it from the beginning. 484</p><a href="/blog/2017/03/04/makers-make-headlines-greece/">read more</a></div> 485</section> 486<section id="a-christmas-tree-pcb-ornament" class="shade-three"> 487 <div class="container"><header> 488 <h2><a href="/blog/2016/12/14/pcb-christmas-tree-ornament/">A Christmas tree PCB ornament</a></h2><p> 489 <!--14 December 2016--></p></header><img class="feat-img" src="/assets/images/IMG_20161213_200229_feat.jpg" 490 alt="Christmas tree PCB" /> 491<p>It is soon Christmas and I am facing the very same, yearly recurring problem: What gifts to buy! I generally prefer gifts to have a personal touch and was always fascinated by some personalized keychains I would receive from my uncle who has a milling machine. This Christmas, I did some timely planning and created a bunch of interactive electronic ornaments, shaped like Christmas trees! 492</p><a href="/blog/2016/12/14/pcb-christmas-tree-ornament/">read more</a></div> 493</section> 494<section id="an-autonomous-wheelchair-meets-li-keqiang" class="shade-four"> 495 <div class="container"><header> 496 <h2><a href="/blog/2016/10/17/an-autonomous-wheelchair-meets-li-keqiang/">An autonomous wheelchair meets Li Keqiang</a></h2><p> 497 <!--17 October 2016--></p></header><img class="feat-img" src="/assets/images/DSC01000-e1476649845969.jpg" 498 alt="Autonomous wheelchair" /> 499<p>When AVR meets AR, an autonomous wheelchair is born that gets to be introduced to the Chinese Premier of the State Council, Li Keqiang, during the 2016 Mass Innovation and Entrepreneurship week in Shenzhen! 500</p><a href="/blog/2016/10/17/an-autonomous-wheelchair-meets-li-keqiang/">read more</a></div> 501</section> 502<section id="turning-software-engineers-into-makers" class="shade-three"> 503 <div class="container"><header> 504 <h2><a href="/blog/2016/06/17/turning-software-engineers-into-makers/">Turning software engineers into Makers</a></h2><p> 505 <!--17 June 2016--></p></header><img class="feat-img" src="/assets/images/SemDemo53_featured.jpg" 506 alt="SEM demo" /> 507<p>For the last few months, I was employed part time at the University of Gothenburg and helped to introduce the maker culture into an undergraduate Softw
507are Engineering course. But, letâs take it from the beginning⦠508</p><a href="/blog/2016/06/17/turning-software-engineers-into-makers/">read more</a></div> 509</section> 510<section id="phishing-wifi-hotspots-with-captive-portals" class="shade-two"> 511 <div class="container"><header> 512 <h2><a href="/blog/2016/02/09/phishing-wifi-hotspots-captive-portals/">Phishing WiFi hotspots with captive portals</a></h2><p> 513 <!--09 February 2016--></p></header><img class="feat-img" src="/assets/images/physical_web_space_3_feat.jpg" 514 alt="Onion omega captive portal" /> 515<p>Are you using a paid Wifi hotspot service, which allows you to have Internet on various spots around the country? This convenience could come at a cost! If you are not careful enough, you might fall victim to - an easy to implement - phishing attack, therefore revealing your username and password to perpetrators. What is worse, is that the essential components cost around 30$ and can be hidden in oneâs pocket! Want to learn how this can be done so you can tackle such attacks? Read onâ¦. 516</p><a href="/blog/2016/02/09/phishing-wifi-hotspots-captive-portals/">read more</a></div> 517</section> 518<section id="enhance-your-marketing-campaign-with-iot" class="shade-three"> 519 <div class="container"><header> 520 <h2><a href="/blog/2015/11/02/iot-marketing-campaign/">Enhance your marketing campaign with IoT</a></h2><p> 521 <!--02 November 2015--></p></header><img class="feat-img" src="/assets/images/inno_featured.png" 522 alt="Iot marketing robot" /> 523<p>This post will cover the creation of Inno, a wooden robot-looking idol, that serves as an IoT marketing medium, for a new educational initiative at the Software Engineering and Management program, in the University of Gothenburg. In the beginning of the year, I was approached by the programâs administration to discuss the creation of an organization that would engage in extra curricular activities and enrich the studentsâ education. After months of negotiations, proposals and surveys, we are finally almost ready to begin with the âInnovation Spaceâ and this is one of the ways we will hype it up! 524</p><a href="/blog/2015/11/02/iot-marketing-campaign/">read more</a></div> 525</section> 526<section id="simple-led-driver-board" class="shade-four"> 527 <div class="container"><header> 528 <h2><a href="/blog/2015/10/15/simple-led-driver-board/">Simple LED driver board</a></h2><p> 529 <!--15 October 2015--></p></header><img class="feat-img" src="/assets/images/led_driver_featured.jpg" 530 alt="LED driver" /> 531<p>This article is about a simple PCB that I designed and enables the user to drive four separate LEDs (or other circuits) using one signal line. It is based on the ATtiny85 microcontroller by Atmel, which drives four NPN transistors. The aim is to document this board thoroughly, as it will be (hopefully) used by future teams attending the Carolo Cup competition, from Chalmers and the University of Gothenburg. 532</p><a href="/blog/2015/10/15/simple-led-driver-board/">read more</a></div> 533</section> 534<section id="build-the-android-autonomous-vehicle" class="shade-three"> 535 <div class="container"><header> 536 <h2><a href="/blog/2015/08/25/makezine-how-to-build-the-android-autonomous-vehicle/">Build the Android autonomous vehicle</a></h2><p> 537 <!--25 August 2015--></p></header><img class="feat-img" src="/assets/images/instructions_featured.png" 538 alt="Makezine instructions" /> 539<p>After Makezine published an article on Team Pegasusâ Android autonomous vehicle, the person who wrote the report on it, David Scheltema, approached me in order to write a set of building instructions for their readers. And with the help of Donald Bell we got it published! So, if you are interested in building your own autonomous vehicle, check this article out: Build Your Own Android-Powered Self Driving R/C Car 540</p><a href="/blog/2015/08/25/makezine-how-to-build-the-android-autonomous-vehicle/">read more</a></div> 541</section> 542<section id="a-path-following-vehicle-called-alice" class="shade-two"> 543 <div class="container"><header> 544 <h2><a href="/blog/2015/08/02/path-following-vehicle/">A path following vehicle called Alice</a></h2><p> 545 <!--02 August 2015--></p></header><img class="feat-img" src="/assets/images/alicebig_featured.png" 546 alt="Path following vehicle" /> 547<p>During the last term, my team and I were not the only ones creating a vehicle, controlled by Android. A group of first year students, at the Software Engineering and Management program, of the University of Gothenburg, were also developing one of their own. They created an Android application, which enables them to draw a path on the screen with their finger. This, is interpreted as a set of driving instructions to be sent via Bluetooth to an Arduino based vehicle, that executes them and therefore follows the drawn path. Letâs see how they describe their product. 548</p><a href="/blog/2015/08/02/path-following-vehicle/">read more</a></div> 549</section> 550<section id="a-multipurpose-business-card" class="shade-three"> 551 <div class="container"><header> 552 <h2><a href="/blog/2015/07/08/pcb-business-card/">A multipurpose business card</a></h2><p> 553 <!--08 July 2015--></p></header><img class="feat-img" src="/assets/images/pcb_featured.jpg" 554 alt="PCB business card" /> 555<p>First impressions matter, but what about⦠the second ones? Say you have met a potential employer or business partner, awed them with your skills, personality, knowledge (or your interactive name tag) and itâs time to give them your contact information. You hand out a business card. So why not make that one stand out as well? 556</p><a href="/blog/2015/07/08/pcb-business-card/">read more</a></div> 557</section> 558<section id="the-world-s-first-android-autonomous-vehicle" class="shade-four"> 559 <div class="container"><header> 560 <h2><a href="/blog/2015/06/29/worlds-first-android-autonomous-vehicle/">The world's first Android autonomous vehicle</a></h2><p> 561 <!--29 June 2015--></p></header><img class="feat-img" src="/assets/images/IMG_8902_cover.jpg" 562 alt="Android Autonomous Vehicle" /> 563<p>Team Pegasus created an autonomous vehicle that utilizes machine vision algorithms and techniques as well as data from the on-board sensors, in order to follow street lanes, perform parking maneuvers and overtake obstacles blocking its path. The innovational aspect of this project, is first and foremost the use of an Android ph
563one as the unit which realizes the image processing and decision making. It is responsible for wirelessly transmitting instructions to an Arduino, that controls the physical aspects of the vehicle. Secondly, the various hardware components (i.e. sensors, motors etc) are programmatically handled in an object oriented way, using a custom...</p><a href="/blog/2015/06/29/worlds-first-android-autonomous-vehicle/">read more</a></div> 564</section> 565<section id="breakout-for-the-hm-11-ble-module" class="shade-three"> 566 <div class="container"><header> 567 <h2><a href="/blog/2015/06/11/breakout-board-hm-11-ble/">Breakout for the HM-11 BLE module</a></h2><p> 568 <!--11 June 2015--></p></header><img class="feat-img" src="/assets/images/IMG_0420.jpg" 569 alt="HM-11 breakout" /> 570<p>A month ago, I was researching ways to increase the connectability and compatibility of devices that I make. More particularly, that of a vehicular platform, I have been working on for the past couple of months and will write soon about. I considered the Bluetooth Low Energy (BLE) as the way to go, since itâs the technology that is becoming the new standard, with the latest Android and iOS devices supporting it. I stumbled upon, some relatively cheap and small BLE modules, called HM-11, based on CC2541 by Texas Instruments. 571</p><a href="/blog/2015/06/11/breakout-board-hm-11-ble/">read more</a></div> 572</section> 573<section id="diy-easy-cheap-wireless-presenter" class="shade-two"> 574 <div class="container"><header> 575 <h2><a href="/blog/2015/05/26/diy-easy-cheap-wireless-presenter/">DIY, easy & cheap wireless presenter!</a></h2><p> 576 <!--26 May 2015--></p></header><img class="feat-img" src="/assets/images/IMG_0370-e1432664098972.jpg" 577 alt="DIY wireless presenter" /> 578<p>During presentations, I avoid being stationary and generally like to walk around in order to increase the interaction between me and the audience. However, I was constantly being faced with the burden of having to go back to the laptop, in order to change a slide or tell a person sitting by the laptop to do that. Not cool! 579</p><a href="/blog/2015/05/26/diy-easy-cheap-wireless-presenter/">read more</a></div> 580</section> 581<section id="attiny85-workshop-in-gothenburg" class="shade-three"> 582 <div class="container"><header> 583 <h2><a href="/blog/2015/04/28/attiny85-workshop-gothenburg/">ATtiny85 workshop in Gothenburg</a></h2><p> 584 <!--28 April 2015--></p></header><img class="feat-img" src="/assets/images/workshop_feat.jpg" 585 alt="ATtiny85 workshop" /> 586<p>Last Friday, I organized a workshop on the ATtiny85 microcontroller. It was a great experience and I believe everyone had a lot of fun and learned a few things. 587</p><a href="/blog/2015/04/28/attiny85-workshop-gothenburg/">read more</a></div> 588</section> 589<section id="attiny85-line-following-truck" class="shade-four"> 590 <div class="container"><header> 591 <h2><a href="/blog/2015/04/20/attiny85-line-following-truck/">ATtiny85 line following truck</a></h2><p> 592 <!--20 April 2015--></p></header><img class="feat-img" src="/assets/images/IMG_0313_featured.jpg" 593 alt="Line following truck" /> 594<p>I am organizing a workshop on ATtiny85 programming this week, so I built a model truck that can either be remotely controlled or tasked to follow a line! Read on for the story behind it, schematics, photos and videos. 595</p><a href="/blog/2015/04/20/attiny85-line-following-truck/">read more</a></div> 596</section> 597<section id="diy-interactive-name-tag" class="shade-three"> 598 <div class="container"><header> 599 <h2><a href="/blog/2015/03/22/diy-interactive-name-tag/">DIY interactive name tag</a></h2><p> 600 <!--22 March 2015--></p></header><img class="feat-img" src="/assets/images/nametag_cover1.jpg" 601 alt="DIY Nametag" /> 602<p>Exams are over, so there was some time to make this peculiar interactive name tag. It consists of an I2C LCD screen, an ATtiny85 microcontroller and a microphone. If you are attending a conference, a workshop or something similar and you want to make an impression, keep reading! 603</p><a href="/blog/2015/03/22/diy-interactive-name-tag/">read more</a></div> 604</section> 605<section id="8-rc-kill-switch" class="shade-two">
606 <div class="container"><header> 607 <h2><a href="/blog/2015/03/18/8-dollar-rc-kill-switch/">8$ RC kill switch!</a></h2><p> 608 <!--18 March 2015--></p></header><img class="feat-img" src="/assets/images/killswitch-fb.jpg" 609 alt="Killswitch" /> 610<p>In this article I will cover the basics of a remote controlled kill switch that you can deploy in your house, your embedded project, your autonomous vehicle or anywhere else you see fit! After some months of absence from this blog, during which I was engaged in some very interesting projects [1] [2] I should write about at a point, I am back for this new little gadget I made. 611</p><a href="/blog/2015/03/18/8-dollar-rc-kill-switch/">read more</a></div> 612</section> 613<section id="make-your-own-10-trackable-keychain" class="shade-three"> 614 <div class="container"><header> 615 <h2><a href="/blog/2014/11/24/10-dollar-trackable-keychain/">Make your own 10$ trackable keychain</a></h2><p> 616 <!--24 November 2014--></p></header><img class="feat-img" src="/assets/images/keychain_cover.jpg" 617 alt="Trackable keychain" /> 618<p>Have you seen advertisements of small, usually Bluetooth powered, tracking devices such as the TrackR bravo? Well, now itâs time to make your own⦠cheaper! This tutorial is a sequel of a previous article, the GSM bug hack, where by modifying an inexpensive GSM surveillance bug from China, you can end up with a simple on/off switch, controlled remotely by your phone. Various applications of this simple hack where presented as a Use Case diagram, one of which was to âLocate belongings by emitting sound or lightâ. My mother frequently forgets where she placed her keys, so time to make her life a little easier. Also, this...</p><a href="/blog/2014/11/24/10-dollar-trackable-keychain/">read more</a></div> 619</section> 620<section id="diy-bluetooth-enhanced-spider-robot" class="shade-four"> 621 <div class="container"><header> 622 <h2><a href="/blog/2014/11/15/diy-bluetooth-enhanced-spider-robot/">DIY Bluetooth enhanced, spider robot</a></h2><p> 623 <!--15 November 2014--></p></header><img class="feat-img" src="/assets/images/spider_cover.jpg" 624 alt="Spider robot" /> 625<p>Lurking around AliExpress listings looking for cheap polypod, spider-like chassis to make something interesting out of, I stumbled upon this, for about 10$. The problem: it was âdumbâ. All it does is to walk towards one direction, as you can see in the following video from 0:27. 626</p><a href="/blog/2014/11/15/diy-bluetooth-enhanced-spider-robot/">read more</a></div> 627</section> 628<section id="gsm-bug-hack-get-a-cheap-phone-controlled-switch" class="shade-three"> 629 <div class="container"><header> 630 <h2><a href="/blog/2014/10/20/gsm-bug-hack/">GSM bug hack - get a cheap phone controlled switch</a></h2><p> 631 <!--20 October 2014--></p></header><img class="feat-img" src="/assets/images/gsm_bug_hack.jpg" 632 alt="GSM bug hack" /> 633<p>For more than a couple of years, I have been growing a great interest in the Chinese gadgets scene. It all started with some key chain spy cameras and evolved into mini PCs, tablets, smartphones and electronics. Now, I decided to revive the old times and tangle myself again with ingenious spy gadgets. For quite a while, I have been aware of GSM surveillance bugs (they come under many different names and shapes, Iâve got this one) which essentially are some tiny boxes with a SIM card socket, also equipped with a microphone. You call them, they answer automatically and...</p><a href="/blog/2014/10/20/gsm-bug-hack/">read more</a></div> 634</section> 635<section id="peculiarities-oddities-and-interesting-people-at-rome-s-innovation-week" class="shade-two"> 636 <div class="container"><header> 637 <h2><a href="/blog/2014/10/07/rome-innovation-week/">Peculiarities, oddities and interesting people at Rome's Innovation Week</a></h2><p> 638 <!--07 October 2014--></p></header><p> 639</p><a href="/blog/2014/10/07/rome-innovation-week/">read more</a></div> 640</section> 641<section id="gamebuino-an-über-cool-open-source-gaming-console" class="shade-three"> 642 <div class="container"><header> 643 <h2><a href="/blog/2014/07/30/gamebuino/">Gamebuino: An über-cool open source gaming console</a></h2><p> 644 <!--30 July 2014--></p></header><p>Some months ago, I contributed in a crowd funding campaign, to build the âGamebuinoâ a gaming console based on Arduino. The guy behind Gamebuino, Aurélien Rodot had initially built it for himself while also publishing out schematics and code. When he noticed a growing interest in it, he started a crowd funding campaign to see if he can mass-produce it. And indeed he did, by collecting 1000% more funds, than his minimum goal! 645</p><a href="/blog/2014/07/30/gamebuino/">read more</a></div> 646</section> 647<section id="tenvis-jpt3815w-camera-gets-firmware-update-to-1-1-0-8-still-a-threat-to-your-privacy" class="shade-four"> 648 <div class="container"><header> 649 <h2><a href="/blog/2014/07/21/tenvis-jpt3815w-camera-gets-firmware-update-to-1-1-0-8-still-a-threat-to-your-privacy/">Tenvis JPT3815W camera gets firmware update to 1.1.0.8, still a threat to your privacy</a></h2><p> 650 <!--21 July 2014--></p></header><p>It has been more than two weeks since my findings regarding the vulnerabilities of the Tenvis JPT3815W network camera. Since then, these findings were re-posted and verified by other individuals like Craig Russel and thus far it was discovered that this vulnerability exists only in the 1.1.0.5. firmware. Thankfully, Tenvis took this more seriously, especially after Craig twitted them about this issue and they promised a fix. And indeed they did issue a fix, or at least they tried to. On 4th of July, I emailed them again, inquiring about a firmware update. Hereâs their answer: 651</p><a href="/blog/2014/07/21/tenvis-jpt3815w-camera-gets-firmware-update-to-1-1-0-8-still-a-threat-to-your-privacy/">read more</a></div> 652</section>
653<section id="tenvis-jpt3815w-a-cheap-network-camera-if-you-can-afford-the-huge-security-issues" class="shade-three"> 654 <div class="container"><header> 655 <h2><a href="/blog/2014/06/30/tenvis-jpt3815w-camera-a-cheap-network-camera-if-you-can-afford-the-huge-security-holes/">Tenvis JPT3815W: A cheap network camera, if you can afford the huge security issues</a></h2><p> 656 <!--30 June 2014--></p></header><img class="feat-img" src="/assets/images/tenvis_JPT3815W1.jpg" 657 alt="Tenvis camera" /> 658<p>I recently purchased a cheap, Chinese network PTZ camera which comes under the branding âTenvisâ. It set my wallet back by 50â¬, including shipping from the UK. I decided to get this one, after reading some positive reviews which labeled it as a great value for money option. Additionally, I saw that âTenvisâ had a real website and an English forum, so I thought âwhy notâ. 659</p><a href="/blog/2014/06/30/tenvis-jpt3815w-camera-a-cheap-network-camera-if-you-can-afford-the-huge-security-holes/">read more</a></div> 660</section> 661<section id="serial-println-hello-world" class="shade-two"> 662 <div class="container"><header> 663 <h2><a href="/blog/2014/06/28/hello-world-2/">Serial.println("Hello World");</a></h2><p> 664 <!--28 June 2014--></p></header><img class="feat-img" src="/assets/images/panoramic_gbg.jpg" 665 alt="Panoramic GBG" /> 666<p> 667 668Hi everyone! 669 670This is my new blog that Iâll be writing on from now. It will be mainly focused in technology news and reviews, as well other topics that could be inspiring and interesting. Tutorials, how-toâs are also on the way! 671 672</p><a href="/blog/2014/06/28/hello-world-2/">read more</a></div> 673</section> 674</div> 675<!-- Footer --> 676<div id="footer"> 677 678 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" 679 style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />This work is licensed 680 under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 681 International License</a>. 682 683 <!-- Copyright --> 684 <ul class="copyright"> 685 <li>Design: <a href="http://html5up.net">HTML5 UP</a></li> 686 <li>Jekyll integration: <a href="https://github.com/chrisbobbe">Chris Bobbe</a></li> 687 </ul> 688 <br /> 689</div> 690</body> 691</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.