PageSourceSearch

https://platis.solutions/blog/

html platis.solutions collected 2026-09-25 21:23:12 UTC 73,641 bytes, 691 lines download raw bytes

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.