<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Programming on bytebang</title><link>https://bytebang.at/categories/programming/</link><description>Recent content in Programming on bytebang</description><generator>Hugo</generator><language>de-AT</language><lastBuildDate>Wed, 01 Jul 2020 12:54:24 +0200</lastBuildDate><atom:link href="https://bytebang.at/categories/programming/index.xml" rel="self" type="application/rss+xml"/><item><title>Simple webservices with Java - SOAP and REST</title><link>https://bytebang.at/blog/simple-webservices-with-java-soap-and-rest/</link><pubDate>Wed, 01 Jul 2020 23:11:43 +0200</pubDate><guid>https://bytebang.at/blog/simple-webservices-with-java-soap-and-rest/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;I wanted to try out if it is possible to create a SOAP Webservice without an dependencies to third party libraries. Well &amp;hellip; it is (at least with Java 8)&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;The solution can be found on my github repository: &lt;a href="https://github.com/bytebang/simpleSoapWebservice"&gt;https://github.com/bytebang/simpleSoapWebservice&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;It contains two classes, where the &lt;a href="https://github.com/bytebang/simpleSoapWebservice/blob/master/simpleSoapWebservice/src/at/bytebang/server/Server.java"&gt;Server.java&lt;/a&gt; creates a so called Endpoint that publishes the Functions of the &lt;a href="https://github.com/bytebang/simpleSoapWebservice/blob/master/simpleSoapWebservice/src/at/bytebang/webservice/CalculatorService.java"&gt;Calculator.java&lt;/a&gt; via SOAP.&lt;/p&gt;&#10;&lt;p&gt;Happy Coding !&lt;/p&gt;</description></item><item><title>Super simple REST API with Restlet</title><link>https://bytebang.at/blog/super-simple-rest-api-with-restlet/</link><pubDate>Sat, 06 Jun 2020 12:19:08 +0200</pubDate><guid>https://bytebang.at/blog/super-simple-rest-api-with-restlet/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;In one of our projects we needed a small &lt;a href="https://en.wikipedia.org/wiki/Representational_state_transfer"&gt;REST&lt;/a&gt; API for communication purposes.&lt;/p&gt;&#10;&lt;p&gt;In Java there are multiple ways how to achieve this. I did not want to set up an application server or something with a lot of dependencies - i just want it to work. So I searched for a simpler method to get it up and running &amp;hellip;&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;I stumbled upon a framework named &lt;a href="https://restlet.talend.com/"&gt;Restlet&lt;/a&gt;.The webpage describes exactly what it is and what it does:&lt;/p&gt;</description></item><item><title>Scriptable Java stream() filter</title><link>https://bytebang.at/blog/scriptable-java-stream-filter/</link><pubDate>Tue, 31 Dec 2019 10:13:52 +0100</pubDate><guid>https://bytebang.at/blog/scriptable-java-stream-filter/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;Java 8 introduces the &lt;code&gt;java.util.stream.Stream&amp;lt;T&amp;gt;&lt;/code&gt; interface which enables users to perform very efficient operations on arrays and collections. This is a very convenient way how to things very effective and also very elegant.&lt;/p&gt;&#10;&lt;p&gt;However - I wondered if it is possible to create a filter which is able to filter objects based on a javascript snippet. Since I could not find an appropriate solution I came up with my own.&lt;/p&gt;</description></item><item><title>How to display values in ThingWorx in a 2d mashup</title><link>https://bytebang.at/blog/how-to-display-values-in-thingworx-in-a-2d-mashup/</link><pubDate>Thu, 31 Oct 2019 11:21:50 +0100</pubDate><guid>https://bytebang.at/blog/how-to-display-values-in-thingworx-in-a-2d-mashup/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;In my &lt;a href="https://bytebang.at/blog/connect-your-mqtt-device-to-thingworx/"&gt;last article&lt;/a&gt; i have given you some tips &amp;amp; tricks how to get your data into ThingWorx. Since I assume that somebody wants to see the sensors data in action I am going to give you a shot primer here.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;ThingWorx has a very powerful rendering engine, which allows you to generate simple 2D dashboards (shown in this article), but also to markup 3D models of your things with live data. So - lets get started:&lt;/p&gt;</description></item><item><title>Connect your MQTT device to ThingWorx</title><link>https://bytebang.at/blog/connect-your-mqtt-device-to-thingworx/</link><pubDate>Mon, 30 Sep 2019 16:53:15 +0200</pubDate><guid>https://bytebang.at/blog/connect-your-mqtt-device-to-thingworx/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;In the last few articles I have shown how to &lt;a href="https://bytebang.at/blog/iot-parking-sensor-mqtt-version/"&gt;transmit data from an IoT device directly to a MQTT broker&lt;/a&gt; or via &lt;a href="https://bytebang.at/blog/iot-parking-sensor-lorawan-version/"&gt;LoRaWAN to TheThingsNetwork&lt;/a&gt;. If you want your solution to scale, and if you are not a big fan of hosting your own infrastructure, then one possibility is to to use a full blown IoT Framework like &lt;a href="https://www.ptc.com/de/products/iiot"&gt;ThingWorx&lt;/a&gt;. Since it is difficult to get things started (especially when new technology comes into the mix), I will show you some tricks with this powerful platform.&lt;/p&gt;</description></item><item><title>Processing data from TheThingNetworks with Apache Camel</title><link>https://bytebang.at/blog/processing-data-from-thethingnetworks-with-apache-camel/</link><pubDate>Sat, 31 Aug 2019 20:21:43 +0200</pubDate><guid>https://bytebang.at/blog/processing-data-from-thethingnetworks-with-apache-camel/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;In the last few articles I have shown how to &lt;a href="https://bytebang.at/blog/iot-parking-sensor-mqtt-version/"&gt;transmit data from an IoT device directly to a MQTT broker&lt;/a&gt; or via &lt;a href="https://bytebang.at/blog/iot-parking-sensor-lorawan-version/"&gt;LoRaWAN to TheThingsNetwork&lt;/a&gt; (also called TTN). This time I will show you how to build a simple mail service with &lt;a href="https://camel.apache.org/"&gt;Apache Camel&lt;/a&gt; which sends you a mail whenever your parking place is occupied.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;The solution is simple. So lets start with pointing out the facts&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;The sensor transmits data to &lt;a href="https://www.thethingsnetwork.org/"&gt;TheThingsNetwork&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;TTN has an mqtt API which allows you to be updated as soon as data is transmitted&lt;/li&gt;&#10;&lt;li&gt;Apache Camel has a &lt;a href="https://camel.apache.org/components/latest/mqtt-component.html"&gt;MQTT component &lt;/a&gt;and a &lt;a href="https://camel.apache.org/components/latest/mail-component.html"&gt;Mail component&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;So all we have to do is to fire up apache camel and to look if the datafield &amp;ldquo;distance&amp;rdquo; (if you have no idea where this is coming about: read my older &lt;a href="https://bytebang.at/blog/iot-parking-sensor-lorawan-version/"&gt;article about TTN and decoders&lt;/a&gt;) is above or below a certain threshold.&lt;/p&gt;</description></item><item><title>IoT parking sensor - LoRaWAN version</title><link>https://bytebang.at/blog/iot-parking-sensor-lorawan-version/</link><pubDate>Mon, 29 Jul 2019 17:57:02 +0200</pubDate><guid>https://bytebang.at/blog/iot-parking-sensor-lorawan-version/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;The &lt;a href="https://bytebang.at/blog/howto-build-your-own-iot-parking-sensor/" rel="__blank"&gt;parking sensor which was built in part one&lt;/a&gt; of this series was able to &lt;a href="https://bytebang.at/blog/iot-parking-sensor-mqtt-version/" rel="__blank"&gt;connect to a WiFi and transmit the data via MQTT&lt;/a&gt; with the software shown in part two of this series.&lt;/p&gt;&#10;&lt;p&gt;This is a very good approach if you want to test something in an early prototyping phase. If you want to roll out your devices then it is very unlikely that you will have a WiFi deployed wherever you sensor will be. So you have to look for another transmission technology for the last mile.&lt;/p&gt;</description></item><item><title>IoT parking sensor - MQTT version</title><link>https://bytebang.at/blog/iot-parking-sensor-mqtt-version/</link><pubDate>Mon, 24 Jun 2019 16:45:35 +0200</pubDate><guid>https://bytebang.at/blog/iot-parking-sensor-mqtt-version/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;In part 1 of this series we have covered the &lt;a href="https://bytebang.at/blog/howto-build-your-own-iot-parking-sensor/" rel="__blank"&gt;schematics and hardware for a IoT parking sensor&lt;/a&gt;. Now we are gonna have a look into the software which is able to transmit the state of the device to an arbitrary MQTT broker.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;The software is  straight forward:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Set up the display&lt;/li&gt;&#10;&lt;li&gt;Connect to the WiFi&lt;/li&gt;&#10;&lt;li&gt;Connect to the MQTT broker&lt;/li&gt;&#10;&lt;li&gt;Read and transmit the sensor reading continuously&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Here is my implementation:&lt;/p&gt;</description></item><item><title>Howto build your own IoT parking sensor</title><link>https://bytebang.at/blog/howto-build-your-own-iot-parking-sensor/</link><pubDate>Wed, 22 May 2019 16:45:16 +0200</pubDate><guid>https://bytebang.at/blog/howto-build-your-own-iot-parking-sensor/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;Recently I had to build a prototype for a parking sensor application. The goal was to detect if a parking place is occupied or not.&lt;/p&gt;&#10;&lt;p&gt;Since there are multiple approaches to this, I decided to build a cheap module which can be mounted inside a garage (or any other dry place) and which can be powered either by a plain USB charger or by a 9V-Block.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;For the hardware I decided to go with my &lt;a href="https://bytebang.at/blog/porting-luartos-to-the-ttgo-lora-v20-board/" rel="__blank"&gt;TTGOv2 board and LuaRTOS &lt;/a&gt;as operating system on it. It has a small display and it enables me to send the data either via MQTT or via LoraWan.&lt;/p&gt;</description></item><item><title>Porting LUARTOS to the TTGO LORA v2.0 Board</title><link>https://bytebang.at/blog/porting-luartos-to-the-ttgo-lora-v20-board/</link><pubDate>Fri, 29 Mar 2019 07:52:39 +0100</pubDate><guid>https://bytebang.at/blog/porting-luartos-to-the-ttgo-lora-v20-board/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;I ordered for a parking sensor project some &lt;a href="https://de.aliexpress.com/item/TTGO-LORA32-V2-0-433-868-915-mhz-ESP32-LoRa-OLED-0-96-zoll-SD-Karte/32846302183.html"&gt;TTGO v2 Board&lt;/a&gt;s. Since I am a big fan of the &lt;a href="https://github.com/whitecatboard/Lua-RTOS-ESP32"&gt;LuaRTOS&lt;/a&gt; project i had to port it to this Hardware architecture.&lt;/p&gt;&#10;&lt;img src="https://bytebang.at/blog/porting-luartos-to-the-ttgo-lora-v20-board/TTGOv2.png" style="display: block; margin-left: auto; margin-right: auto;" alt="TTGOv2 - Pinout" /&gt;&#10;&lt;p&gt;The schematic:&lt;/p&gt;&#10;&lt;img src="https://bytebang.at/blog/porting-luartos-to-the-ttgo-lora-v20-board/WIFI_LoRa_32_868_Schema.png" style="display: block; margin-left: auto; margin-right: auto;;width:100.0%" alt="WIFI Lo Ra 32 868 Schema" /&gt;&#10;&lt;p&gt;For all of you who do not want to build your own firmware: Here is a &lt;a href="https://bytebang.at/blog/porting-luartos-to-the-ttgo-lora-v20-board/LuaRTOS_TTGOv20.zip"&gt;precompiled version&lt;/a&gt; with all the features from below. Just extract it to a folder and flash it with the &lt;a href="https://github.com/espressif/esptool/blob/master/esptool.py"&gt;esptool.py&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Removing a uniform background from an image with Java</title><link>https://bytebang.at/blog/removing-a-uniform-background-from-an-image-with-java/</link><pubDate>Tue, 20 Nov 2018 13:13:42 +0100</pubDate><guid>https://bytebang.at/blog/removing-a-uniform-background-from-an-image-with-java/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;&lt;a href="http://www.siemensnx.com/133/what-data-does-qaf-files-contain?show=190&amp;amp;utm_source=dlvr.it&amp;amp;utm_medium=twitter#a190"&gt;QAF files&lt;/a&gt; are often used in PLM Systems (like &lt;a href="https://www.plm.automation.siemens.com/global/de/products/teamcenter/"&gt;Siemens Teamcenter&lt;/a&gt;) to give a preview of the stored CAD dataset. Under the hood they are plain TIFF or BMP images which are just renamed. This means that you can edit them with any common image manipulation software like &lt;a href="https://www.gimp.org/"&gt;GIMP&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Unfortunately some Teamcenter CAD integrations are producing quiet &amp;lsquo;ugly&amp;rsquo; previews - like this one:&lt;/p&gt;&#10;&lt;img src="https://bytebang.at/blog/removing-a-uniform-background-from-an-image-with-java/SheetMetal.jpg" style="display: block; margin-left: auto; margin-right: auto;" alt="Sheet Metal" /&gt;&#10;&lt;p&gt;If you want to have (for obvious reasons) a transparent background instead of the violet one, and it is not possible to change the default background color in the Teamcenter integration then you have to remove the background progamatically.&lt;/p&gt;</description></item><item><title>Porting LuaRTOS to the TTGO LoRa32 Board</title><link>https://bytebang.at/blog/porting-luartos-to-the-ttgo-lora32-board/</link><pubDate>Sun, 14 Oct 2018 18:34:27 +0200</pubDate><guid>https://bytebang.at/blog/porting-luartos-to-the-ttgo-lora32-board/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;I have bought two cheap &lt;a href="https://www.banggood.com/2Pcs-Wemos-TTGO-LORA32-868915Mhz-ESP32-LoRa-OLED-0_96-Inch-Blue-Display-p-1239769.html"&gt;ESP32 based IoT development boards&lt;/a&gt; for around 30$, because the specs looked interesting:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ESP32 based with 3D- wifi antenna&lt;/li&gt;&#10;&lt;li&gt;128x64 pixel OLED display&lt;/li&gt;&#10;&lt;li&gt;LoRa Modem&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;This hardware has the potential to be a very versatile IoT prototyping (and even production) platform, but there was one drawback: You have to program it in the Arduino IDE. This means: You can do almost anything with it, but whenever you want to change something in the software then you have to recompile and upload everything.&lt;/p&gt;</description></item><item><title>Use your smartphone as IoT enabled QR Scanner</title><link>https://bytebang.at/blog/use-your-smartphone-as-iot-enabled-qr-scanner/</link><pubDate>Wed, 29 Aug 2018 19:30:15 +0200</pubDate><guid>https://bytebang.at/blog/use-your-smartphone-as-iot-enabled-qr-scanner/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;In one of my latest IoT projects I needed a &lt;a href="https://en.wikipedia.org/wiki/QR_code"&gt;QR code&lt;/a&gt; scanner which is able to scan continuously and which is able to send the information of the tags via &lt;a href="https://en.wikipedia.org/wiki/MQTT"&gt;MQTT&lt;/a&gt; to a specific broker.&lt;/p&gt;&#10;&lt;p&gt;Even after a long googling session I was not able to find one that fits my needs. Either they were too expensive, too big or they where not able to send the results via MQTT.&lt;/p&gt;</description></item><item><title>Auto-colored labels for bootstrap</title><link>https://bytebang.at/blog/auto-colored-labels-for-bootstrap/</link><pubDate>Fri, 13 Jul 2018 20:36:12 +0200</pubDate><guid>https://bytebang.at/blog/auto-colored-labels-for-bootstrap/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;I wanted to use bootstrap labels for visual grouping. That means that labels with the same content should have the same color.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://bytebang.at/blog/auto-colored-labels-for-bootstrap/labels.png" alt="labels.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;This can be done manually, but it is a boring task to come up with new colors every time you &amp;lsquo;invent&amp;rsquo; a new label.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;My approach is that the content of the label is somehow hashed and afterward transformed into a color.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;pre&gt;&lt;code&gt;// Converts a String to a color. The more similar strings are,&#10;// the more similar will be the color.&#10;function stringToColour(str) &#10;{&#10;    var hash = 0;&#10;    for (var i = 0; i &amp;lt; str.length; i++) &#10;    {&#10;        hash = str.charCodeAt(i) + ((hash &amp;lt;&amp;lt; 5) - hash);&#10;    }&#10;    var colour = '#';&#10;    for (var i = 0; i &amp;lt; 3; i++) &#10;    {&#10;        var value = (hash &amp;gt;&amp;gt; (i * 8)) &amp;amp; 0xFF;&#10;        colour += ('00' + value.toString(16)).substr(-2);&#10;    }&#10;    return colour;&#10;}&#10;&#10;// colorize the labels after tha page has laoded&#10;$( window ).load(function() &#10;{&#10;  $('.label-autocolor').each(function (index, value) &#10;  { &#10;   var color = stringToColour($(value).text());&#10;   $(value).css('background-color', color);&#10; });&#10;  &#10;});&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;This works pretty well. Try it out on &lt;a href="https://jsfiddle.net/bytebang/355f7acm/"&gt;jsfiddle&lt;/a&gt;. Just insert in the upper left box a new label (e.g: &lt;code&gt;&amp;lt;span class=&amp;quot;label label-autocolor&amp;quot;&amp;gt;Message three&amp;lt;/span&amp;gt;&lt;/code&gt;) and press the run button. It should appear in a new different colour.&lt;/p&gt;</description></item><item><title>Find public IP address for OpenWRT via Script</title><link>https://bytebang.at/blog/find-public-ip-address-for-openwrt-via-script/</link><pubDate>Fri, 01 Jun 2018 23:23:33 +0200</pubDate><guid>https://bytebang.at/blog/find-public-ip-address-for-openwrt-via-script/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;I was running a public server running behind my OpwnWRT firewall which was directly connected to the Internet via an LTE modem. The public IP Address of the OpenWRT Box was periodically announced via NOIP.com and so I was able to connect to it from wherever i wanted.&lt;/p&gt;&#10;&lt;p&gt;&amp;mdash;&amp;ndash;LTE&amp;mdash;-&amp;gt; OpenWRT(Public IP: 123.45.12.34) &amp;mdash;-&amp;gt; DMZ&lt;/p&gt;&#10;&lt;p&gt;Recently I switched my Internet provider and i got a new modem. This modem is now connected to the OpenWRT Box and acts as gateway to the Internet. It assigns a private IP Address to the WAN Port of the OpenWrt. &lt;/p&gt;</description></item><item><title>Engrave things with a 3.5W Eleksmaker and LaserWeb</title><link>https://bytebang.at/blog/engrave-things-with-a-35w-eleksmaker-and-laserweb/</link><pubDate>Tue, 01 May 2018 18:48:44 +0200</pubDate><guid>https://bytebang.at/blog/engrave-things-with-a-35w-eleksmaker-and-laserweb/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;In summer 2015 I ordered the predecessor of this &lt;a href="https://www.banggood.com/450nm-3500mW-3_5W-Blue-Laser-Module-With-TTL-Modulation-for-DIY-Laser-Cutter-Engraver-p-1103261.html"&gt;3.5W laser diode&lt;/a&gt; with TTL modulation. My initial plan was to mount it onto my 3d printer - but we all know: plans are patient.&lt;/p&gt;&#10;&lt;p&gt;Lately I stumbled upon this diode in my junk box. I decided to finish the project and I ordered an &lt;a href="https://www.banggood.com/A3-30x40cm-Desktop-DIY-Laser-Engraver-Cutter-Engraving-Machine-Assemble-Kit-p-1027611.html"&gt;Eleksmaker A3 frame (without Laser).&lt;/a&gt; It is big enough to engrave / cut things with a size of 300 x 400 mm.&lt;/p&gt;</description></item><item><title>Add display fonts to custom built NodeMCU firmwares</title><link>https://bytebang.at/blog/add-display-fonts-to-custom-built-nodemcu-firmwares/</link><pubDate>Sun, 01 Apr 2018 14:23:02 +0200</pubDate><guid>https://bytebang.at/blog/add-display-fonts-to-custom-built-nodemcu-firmwares/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;In my &lt;a href="https://bytebang.at/blog/compile-nodemcu-for-wemos-lolin-esp32-with-oled/"&gt;previous article&lt;/a&gt; I showed how to compile a custom firmware for the WeMos Lolin board and how to get the display up and running.&lt;/p&gt;&#10;&lt;p&gt;Since then I have played around with it and i wondered how to switch between different fonts for this display and where these magic constants within the LUA code are coming from.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;I figured out that fonts have to be &amp;rsquo;enabled&amp;rsquo; within the firmware. It ts quiet simple to do this:&lt;/p&gt;</description></item><item><title>Compile NodeMCU for WeMos Lolin ESP32 with OLED</title><link>https://bytebang.at/blog/compile-nodemcu-for-wemos-lolin-esp32-with-oled/</link><pubDate>Mon, 19 Mar 2018 12:46:58 +0100</pubDate><guid>https://bytebang.at/blog/compile-nodemcu-for-wemos-lolin-esp32-with-oled/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;Recently I bought a &lt;a href="https://www.banggood.com/Wemos-ESP32-OLED-Module-For-Arduino-ESP32-OLED-WiFi-Bluetooth-Dual-ESP-32-ESP-32S-ESP8266-p-1148119.html"&gt;Wemos Lolin ESP32 module&lt;/a&gt;. This prototyping board consists of a powerful &lt;a href="https://www.espressif.com/en/products/hardware/esp32/overview"&gt;ESP32&lt;/a&gt; processor and a small  &lt;a href="https://en.wikipedia.org/wiki/OLED"&gt;OLED&lt;/a&gt; display which are mounted on a breadboard friendly PCB board.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://bytebang.at/blog/compile-nodemcu-for-wemos-lolin-esp32-with-oled/WeMos_Lolin_ESP32.jpg" style="display: block; margin-left: auto; margin-right: auto;;width:66.0%" alt="We Mos Lolin ESP32" /&gt;&lt;br&gt;&#10;Unfortunately, the reseller shows only examples how to program the controller and the display which are working in the Arduino IDE. This means that if you change your program, then you will have to recompile the whole code.&lt;/p&gt;</description></item><item><title>Flash a hex file into an Arduino without IDE</title><link>https://bytebang.at/blog/flash-a-hex-file-into-an-arduino-without-ide/</link><pubDate>Sun, 25 Feb 2018 11:01:27 +0100</pubDate><guid>https://bytebang.at/blog/flash-a-hex-file-into-an-arduino-without-ide/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;I wanted to update my laser cutter. Therefore i choose to use the newest version of &lt;a href="https://github.com/gnea/grbl/releases"&gt;GRBL (version 1.1f)&lt;/a&gt; into the controller. Since I did not want to recompile the whole thing from scratch, I decided to download the lates version and just flash it into a new &lt;a href="https://www.banggood.com/de/ATmega328P-Arduino-Compatible-Nano-V3-Improved-Version-No-Cable-p-959231.html"&gt;Arduino nano clone&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;The big question was: How to do it ?&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;The simplest solution was to download the hex file to my desktop and to utilize &lt;a href="https://linux.die.net/man/1/avrdude"&gt;avrdude&lt;/a&gt; (which is also used from within the arduino ide to upload compiled code to the controller).&lt;/p&gt;</description></item><item><title>Implement cryptocoin payments with Java</title><link>https://bytebang.at/blog/implement-cryptocoin-payments-with-java/</link><pubDate>Tue, 25 Jul 2017 15:33:35 +0200</pubDate><guid>https://bytebang.at/blog/implement-cryptocoin-payments-with-java/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;If you run a web shop or any other service where your users have to pay for services or goods the you will be confronted with the fact that you need a billing system. Of course you could use PayPal or other services but usually these services will cost you something.&lt;/p&gt;&#10;&lt;p&gt;If your goods or services are very cheap, then it is often the case that the payment provider fees make up a huge fraction of the overall price. Such small payments can also be fulfilled with crypto currencies like &lt;a href="https://www.bitcoin.com/" rel="__blank"&gt;Bitcoin&lt;/a&gt;, &lt;a href="https://decred.org/" rel="__blank"&gt;Decred&lt;/a&gt;, &lt;a href="https://www.ethereum.org/" rel="__blank"&gt;Ethereum&lt;/a&gt; and so on. (If you have no idea what crypto currencies are all about then take a look at this &lt;a href="https://www.moneymunk.com/bitcoin-101/"&gt;introduction to bitcoin&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>Content based message routing with apache camel</title><link>https://bytebang.at/blog/content-based-message-routing-with-apache-camel/</link><pubDate>Sun, 18 Jun 2017 15:15:37 +0200</pubDate><guid>https://bytebang.at/blog/content-based-message-routing-with-apache-camel/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;Lets say you run a web shop where the orders are processed automatically by apache camel. The items which are selled are assembled from make and buy items.&lt;br&gt;&#10;Make items have to be produced in your shop-floor and buy items have to be bought at one of your suppliers.&lt;br&gt;&#10;&lt;br&gt;&#10;Ideally you would like to have a mechanism which splits up your order into two lists:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;One list of items which have to be produced and&lt;/li&gt;&#10;&lt;li&gt;another list which with items which should be purchased.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Every list should then be forwarded to a different route within apache camel (where either manufacturing instructions or purchases are created and forwarded to the supplier).&lt;/p&gt;</description></item><item><title>SCM progress visualization with gource</title><link>https://bytebang.at/blog/scm-progress-visualization-with-gource/</link><pubDate>Wed, 03 May 2017 23:14:21 +0200</pubDate><guid>https://bytebang.at/blog/scm-progress-visualization-with-gource/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;I wanted to document the progress throughout a software development project in a more compelling way than just by printed out commit logs. I was searching for something &amp;lsquo;cool&amp;rsquo; and also something that shows how much effort and manpower really goes into a piece of software. Something that is also easy to understand by the management.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;After a few hours of googling I discovered &lt;a href="http://gource.io/"&gt;gource&lt;/a&gt; which is able to display software projects as an animated tree with the root directory of the project at its centre. Directories appear as branches with files as leaves. Developers can be seen working on the tree at the times they contributed to the project.&lt;/p&gt;</description></item><item><title>Read /etc/passwd with Java8 streams</title><link>https://bytebang.at/blog/read-etc-passwd-with-java8-streams/</link><pubDate>Mon, 13 Mar 2017 21:58:30 +0100</pubDate><guid>https://bytebang.at/blog/read-etc-passwd-with-java8-streams/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;As a programmer I am always searching for elegant ways how to accomplish certain things. One of the last tasks was to parse the /etc/passwd file of a linux box. Of course there are multiple ways how to do this, but the Java8 way seems to be a cool solution.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;The Program consists of two classes. The first one is the &amp;lsquo;PwdUser&amp;rsquo; class which represents one single entry in the passwd file:&lt;/p&gt;</description></item><item><title>How to install node-red in Ubuntu</title><link>https://bytebang.at/blog/how-to-install-node-red-in-ubuntu/</link><pubDate>Mon, 20 Feb 2017 22:38:05 +0100</pubDate><guid>https://bytebang.at/blog/how-to-install-node-red-in-ubuntu/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;I have an old laptop which runs Ubuntu 16.04, and I want to install &lt;a href="https://nodered.org/"&gt;node-red&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;This time the solution is really simple:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;pre&gt;&lt;code&gt;$ sudo apt-get install nodejs-legacy&#10;$ sudo apt-get install npm&#10;$ sudo npm install -g --unsafe-perm node-red&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;The first command instructs the operating system to install node-js (which is the base for node-red).&lt;/p&gt;&#10;&lt;p&gt;The second one installs a packagemanager for node-js (which does the same as apt-get, yast, yum, &amp;hellip; for Linux, but for node-js)&lt;/p&gt;</description></item><item><title>Select files with a dialog witin a BASH script</title><link>https://bytebang.at/blog/select-files-with-a-dialog-witin-a-bash-script/</link><pubDate>Fri, 18 Nov 2016 22:22:59 +0100</pubDate><guid>https://bytebang.at/blog/select-files-with-a-dialog-witin-a-bash-script/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;From time to time you want a user to pick a few files out of a directory (e.g. because you want to process them afterwards). The first approach might be to force the user to enter the filenames which should be processed - but this is (a) unhandy and (b) it does not scale very well.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;A lot of Linux distributions know a tool called &lt;a href="https://linux.die.net/man/1/dialog"&gt;dialog&lt;/a&gt;. It enables the user to create simple commandline dialogs within shellscripts.&lt;/p&gt;</description></item><item><title>How to push data into a new gitblit repository</title><link>https://bytebang.at/blog/how-to-push-data-into-a-new-gitblit-repository/</link><pubDate>Fri, 28 Oct 2016 21:50:25 +0200</pubDate><guid>https://bytebang.at/blog/how-to-push-data-into-a-new-gitblit-repository/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;If you create a new repository in &lt;a href="http://gitblit.com"&gt;gitblit&lt;/a&gt; then you are not able to choose the master branch. Therefore you cannot check out anything.&lt;/p&gt;&#10;&lt;img src="https://bytebang.at/blog/how-to-push-data-into-a-new-gitblit-repository/gitblit_newrepo.png" style="width:100.0%" alt="Gitblit newrepo" /&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;The answer to this behaviour is simple: You can not select a default branch because there is no default branch. The solution is &amp;hellip;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Create the repositpry in gitblit (without choosing a default branch)&lt;/li&gt;&#10;&lt;li&gt;Create a local repository&lt;/li&gt;&#10;&lt;li&gt;Connect the repositories by telling the local repo where his remote friend is&lt;/li&gt;&#10;&lt;li&gt;Push the local master to the remote repo&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;For all of you who prefer to see the pure commands - here they are:&lt;/p&gt;</description></item><item><title>Free SSL certificate for lighttpd with letsencrypt</title><link>https://bytebang.at/blog/free-ssl-certificate-for-lighttpd-with-letsencrypt/</link><pubDate>Sun, 28 Aug 2016 13:57:03 +0200</pubDate><guid>https://bytebang.at/blog/free-ssl-certificate-for-lighttpd-with-letsencrypt/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;While it is very simple to install &lt;a href="https://letsencrypt.org/"&gt;letsencrypt&lt;/a&gt; certificates on an apache webserver, it might be tricky on a &lt;a href="https://www.lighttpd.net/"&gt;lighttpd&lt;/a&gt; server. There are various &lt;a href="https://nwgat.ninja/setting-up-letsencrypt-with-lighttpd/"&gt;tutorials&lt;/a&gt; on the internet, but I found no step by step tutorial. So here is my attempt to create one.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;I assume that you know what a &lt;a href="https://en.wikipedia.org/wiki/Web_server"&gt;webserver&lt;/a&gt; is, what it does and why it is a good idea to have &lt;a href="http://info.ssl.com/article.aspx?id=10241"&gt;SSL secured connections&lt;/a&gt;. This tutorial assumes that&lt;/p&gt;</description></item><item><title>How to publish weatherdata via MQTT</title><link>https://bytebang.at/blog/how-to-publish-weatherdata-via-mqtt/</link><pubDate>Sat, 20 Aug 2016 08:17:55 +0200</pubDate><guid>https://bytebang.at/blog/how-to-publish-weatherdata-via-mqtt/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;I am running an off-site weather station which is connected to &lt;a href="http://wiki.meteohub.de/Introduction/en"&gt;meteohub&lt;/a&gt;. This enables me to create beautiful graphs and charts, but i wanted to display the the data on my arduino yun at home. So i had to find a way how to transmit this data via the Internet,&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;Since it did not want to create a &lt;a href="https://bytebang.at/blog/bypass-restrictive-firewalls-with-a-ssh-tunnel/"&gt;VPN tunnel&lt;/a&gt; I choose a solution where the weatherstation (to be more precise meteohub) is actively pushing the data to the Internet using &lt;a href="http://mqtt.org/"&gt;MQTT&lt;/a&gt;. From there on everybody can fetch it and use it for his/her own purpose.&lt;/p&gt;</description></item><item><title>Helloworld with Apache Camel using Ivy and Ant</title><link>https://bytebang.at/blog/helloworld-with-apache-camel-using-ivy-and-ant/</link><pubDate>Mon, 18 Jul 2016 21:27:12 +0200</pubDate><guid>https://bytebang.at/blog/helloworld-with-apache-camel-using-ivy-and-ant/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;&lt;a href="http://camel.apache.org/"&gt;Apache camel&lt;/a&gt; is a prefect approach to build any kind of interfaces between two distinct software packages - like an PLM and an ERP system. It can act as glue-code between these systems in order to transfer data between them.&lt;/p&gt;&#10;&lt;p&gt;However, if you have never heard of it, then you want most probably to get this thing up and running with as little effort as possible. This article shows you how to avoid maven by using &lt;a href="http://ant.apache.org/ivy/"&gt;Apache Ivy&lt;/a&gt; for the dependency management and how to build the project with &lt;a href="http://ant.apache.org/"&gt;Apache ant&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Better notes with pandoc</title><link>https://bytebang.at/blog/better-notes-with-pandoc/</link><pubDate>Tue, 14 Jun 2016 13:05:48 +0200</pubDate><guid>https://bytebang.at/blog/better-notes-with-pandoc/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;I am constantly sitting in some meetings, taking notes about the things that are bespoken. While I am pretty fast in writing with the keyboard, I am not that fast in creating beautiful minutes of meeting - until now !&lt;/p&gt;&#10;&lt;p&gt;In opposite to my colleagues I prefer to write my notes in a plain editor like &lt;a href="http://www.vim.org/"&gt;vim&lt;/a&gt; or &lt;a href="https://wiki.gnome.org/Apps/Gedit"&gt;gedit&lt;/a&gt;. Both are pretty powerful editors, but all that they can give you is a plain text file, without any nice formatting. Since my colleagues prefer as result to have beautiful PDF documents with table of contents and beautiful formulas, I had to find a way how to transform these notes into such a beautiful document.&lt;/p&gt;</description></item><item><title>How a keysigning party builds a web of trust</title><link>https://bytebang.at/blog/how-a-keysigning-party-builds-a-web-of-trust/</link><pubDate>Tue, 17 May 2016 12:30:11 +0200</pubDate><guid>https://bytebang.at/blog/how-a-keysigning-party-builds-a-web-of-trust/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;Last month I attended a key-signing party at the &lt;a href="https://www.linuxtage.at/"&gt;Linuxtage in Graz&lt;/a&gt;. While I was pretty aware that key-signing is a great tool to prove your own identity against unknown third parties, I was not prepared what comes after the party. Here is a short write up, of what to expect from such an event and what has to be done after it. I try to keep it in a simple language, without too many technical details to give everybody the chance to understand what this is all about.&lt;/p&gt;</description></item><item><title>Optimizing the MQTT topic structure of the KEPServerEx</title><link>https://bytebang.at/blog/optimizing-the-mqtt-topic-structure-of-the-kepserverex/</link><pubDate>Tue, 15 Mar 2016 17:24:50 +0100</pubDate><guid>https://bytebang.at/blog/optimizing-the-mqtt-topic-structure-of-the-kepserverex/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;Kepware has a wonderful program named &lt;a href="https://www.kepware.com/products/kepserverex/"&gt;KEPServerEx&lt;/a&gt;. For those of you who dont know what this is: The KEPServerEx can be seen as a kind of modular data aggregation server which is able to collect data from various machines / devices, and which is able to process / analyse / store it afterwards. This approach takes a huge burden from every company who wants to connect to PLCs CNC machines and so on, because the drivers which can be purchased at their site are able to  understand these devices and bring the information into a standardized format like DDE, OPC or &lt;a href="https://en.wikipedia.org/wiki/OPC_Unified_Architecture"&gt;OPC/UA&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Add social buttons to XWiki</title><link>https://bytebang.at/blog/add-social-buttons-to-xwiki/</link><pubDate>Sun, 17 Jan 2016 18:42:19 +0100</pubDate><guid>https://bytebang.at/blog/add-social-buttons-to-xwiki/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;Social interaction is getting more and more a part of our daily business. If you write a good article in your blog then you (most probably) want it to be shared and read by other people. A lot of blogging systems offer this as a built in feature, but with XWiki this is unfortunately not the case. This article describes how to embed social share buttons into panels which can be placed within your XWiki application and how to optimize your meta information for these buttons to get the most out of them.&lt;/p&gt;</description></item><item><title>Download multiple files with similar names within bash</title><link>https://bytebang.at/blog/download-multiple-files-with-similar-names-within-bash/</link><pubDate>Tue, 15 Dec 2015 21:20:54 +0100</pubDate><guid>https://bytebang.at/blog/download-multiple-files-with-similar-names-within-bash/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;Assume you have a web server with interesting *.pdf files on it and all files are stored in the same directory. If you want to download them you would have to fire up firefox (or whatever browser you are using) and enter the URL  for the document once.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;a href="http://my.server.tld/some/directory/Document"&gt;http://my.server.tld/some/directory/Document&lt;/a&gt;_&lt;strong&gt;01&lt;/strong&gt;.pdf&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://my.server.tld/some/directory/Document"&gt;http://my.server.tld/some/directory/Document&lt;/a&gt;_&lt;strong&gt;02&lt;/strong&gt;.pdf&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://my.server.tld/some/directory/Document"&gt;http://my.server.tld/some/directory/Document&lt;/a&gt;_&lt;strong&gt;03&lt;/strong&gt;.pdf&lt;/li&gt;&#10;&lt;li&gt;&amp;hellip;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;This is annoying and time consuming. Fortunately there is a tool called &lt;a href="https://www.gnu.org/software/wget/"&gt;wget&lt;/a&gt; that can be used together with &lt;a href="https://www.gnu.org/software/bash/"&gt;bash&lt;/a&gt; to automate this task:&lt;/p&gt;</description></item><item><title>Auto reconnect on dropped VPN connection</title><link>https://bytebang.at/blog/auto-reconnect-on-dropped-vpn-connection/</link><pubDate>Sat, 21 Nov 2015 21:03:26 +0100</pubDate><guid>https://bytebang.at/blog/auto-reconnect-on-dropped-vpn-connection/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;One of my customers runs an external server which is connected to the main network via a simple &lt;a href="https://help.ubuntu.com/community/VPNClient"&gt;PPTP connection&lt;/a&gt;. This works fine but from time to time the firewall decides to drop the connection (for whatever reason). From this moment on, the external server can not access the resources within the internal network any more. Until now we had to restart the connection by hand, but this is not very comfortable.&lt;/p&gt;</description></item><item><title>IPTV with a Synology DS713+</title><link>https://bytebang.at/blog/iptv-with-a-synology-ds713/</link><pubDate>Mon, 19 Oct 2015 16:31:01 +0200</pubDate><guid>https://bytebang.at/blog/iptv-with-a-synology-ds713/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;Recently i purchased an &lt;a href="http://www.amazon.de/Amazon-W87CUN-Fire-TV-Stick/dp/B00KAKPZYG"&gt;Amazon FireTv Stick&lt;/a&gt; - which is a great device for video streaming. But I wanted more than this stick offers out-of-the-box: I wanted to be able to stream DVB-T  and DVB-S (digital terrestrial and digital satellite) signals through my IP network. Somewhere in the internet I stumbled across a few articles which components are needed for this purpose, but in the end I had no idea if and how it would work. I wanted the setup to look like this:&lt;/p&gt;</description></item><item><title>Monitoring WiFi signal strength / quality with ubuntu</title><link>https://bytebang.at/blog/monitoring-wifi-signal-strength-quality-with-ubuntu/</link><pubDate>Sun, 11 Oct 2015 13:28:30 +0200</pubDate><guid>https://bytebang.at/blog/monitoring-wifi-signal-strength-quality-with-ubuntu/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;My wireless network adapter dropped the connection from time to time. In order to find out if it is a hardware problem or just a weak signal which is just above the noise floor i decided to investigate in the signal strength and link quality of my adapter.&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;I decided to go with &lt;a href="http://manpages.ubuntu.com/manpages/maverick/man1/wavemon.1.html"&gt;wavemon&lt;/a&gt; - a small n-curses based utility which monitors network devices. The installation is straight forward:&lt;/p&gt;</description></item><item><title>Raspberry PI as kiosk display</title><link>https://bytebang.at/blog/raspberry-pi-as-kiosk-display/</link><pubDate>Tue, 09 Jun 2015 20:55:30 +0200</pubDate><guid>https://bytebang.at/blog/raspberry-pi-as-kiosk-display/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;My local glider club wanted to increase the weather awareness of our pilots. Therefore they decided to display the current weather and some forecasts on a television. I wrote a script that fetches the important weather data and compiles it into a HTML slideset. This webpage is hosted on our internal server and can be accessed from everywhere on the airfield.&lt;/p&gt;&#10;&lt;p&gt;We also managed it to find  a small (but old) tablet which had a HDMI output that was connected to the TV. We configured this thing that it starts a web browser after the boot and this web browser displays exactly that one HTML slideshow page with the weather information. It worked very well for 3 years, but now the tablet is dead. A cheap alternative to this is to replace it with a Raspberry pi (which also has a HDMI output).&lt;/p&gt;</description></item><item><title>Fetching google calendar events with python</title><link>https://bytebang.at/blog/fetching-google-calendar-events-with-python/</link><pubDate>Sun, 08 Mar 2015 09:49:09 +0100</pubDate><guid>https://bytebang.at/blog/fetching-google-calendar-events-with-python/</guid><description>&lt;h1 id="the-problem"&gt;The problem&lt;/h1&gt;&#10;&lt;p&gt;Google calendar is a wonderful tool. In the last year my &lt;a href="http://www.segelflug.at"&gt;glider club&lt;/a&gt; managed it to switch away from our old paper based calentar towards a google calendar which is also integrated into our homepage. While this setup is working very well we discovered that we need a prinout of todays events for the daily briefing of our pilots and for daily event management. The previous version of this daily summary was printed automatically via a reciept printer in the morning and looked like this:&lt;/p&gt;</description></item><item><title>Eclipse is not able to install plugins</title><link>https://bytebang.at/blog/eclipse-is-not-able-to-install-plugins/</link><pubDate>Tue, 24 Feb 2015 09:32:59 +0100</pubDate><guid>https://bytebang.at/blog/eclipse-is-not-able-to-install-plugins/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;&lt;a href="https://eclipse.org/downloads/"&gt;Eclipse &lt;/a&gt;has a wonderful plugin and extension mechanism. If you want to add new software to your installation then you can (at least in the newer &lt;a href="https://wiki.eclipse.org/Older_Versions_Of_Eclipse"&gt;versions &lt;/a&gt;of Eclipse) just drag &amp;amp; drop the sotware from the &lt;a href="http://marketplace.eclipse.org/"&gt;markteplace &lt;/a&gt;onto the IDE. In my case this did no work very well. Eclipse stuck during the calculation of the dependencies. (Error: &lt;a href="http://vaadin.com/eclipse/content.xml"&gt;http://vaadin.com/eclipse/content.xml&lt;/a&gt; )For me it seemed that the network connection broke during the download, but this was not the case.&lt;/p&gt;</description></item><item><title>Crack (ZIP) passwords with John the Ripper</title><link>https://bytebang.at/blog/crack-zip-passwords-with-john-the-ripper/</link><pubDate>Wed, 18 Feb 2015 21:01:34 +0100</pubDate><guid>https://bytebang.at/blog/crack-zip-passwords-with-john-the-ripper/</guid><description>&lt;p&gt;Humans tend to forget. This is especially true for passswords! Forgetting zip passwords renders the zip file unuseable because it is not possible to recover the content of the zip file without the right password. So once in a while i have to crach my own passwords. I use the tool &lt;a href="http://www.openwall.com/john/"&gt;John the Ripper&lt;/a&gt; to recover the lost passwords. John the Ripper is a fast password cracker, currently available for many flavors of Unix, Windows, DOS, BeOS, and OpenVMS. Its primary purpose is to detect weak Unix passwords.&lt;/p&gt;</description></item><item><title>Windows Explorer: Search by filename</title><link>https://bytebang.at/blog/windows-explorer-search-by-filename/</link><pubDate>Sun, 18 Jan 2015 14:31:38 +0100</pubDate><guid>https://bytebang.at/blog/windows-explorer-search-by-filename/</guid><description>&lt;h1 id="problem"&gt;Problem&lt;/h1&gt;&#10;&lt;p&gt;From time to time i am wondering why the MS Windows Explorer does not find files within my directories - even if i am absolutely sure that they have to be somwhere beneath a certain folder. It seems that the filesearch is nowadays working different from the old DOS style search. In the good old times we could search for files (in our exampe pom.xml) like this:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;pre&gt;&lt;code&gt;D:\test&amp;gt;dir /s pom.xml&#10; Datenträger in Laufwerk D: ist 123GB SSD&#10; Volumeseriennummer: 6825-B74D&#10;&#10; Verzeichnis von D:\test\solidask&#10;&#10;07.11.2012  13:28             8.266 pom.xml&#10;               1 Datei(en),          8.266 Bytes&#10;&#10; Verzeichnis von D:\test\solidask_OK&#10;&#10;07.11.2012  13:28             8.266 pom.xml&#10;               1 Datei(en),          8.266 Bytes&#10;&#10;     Anzahl der angezeigten Dateien:&#10;               2 Datei(en),         16.532 Bytes&#10;               0 Verzeichnis(se), 32.125.673.472 Bytes frei&#10;&#10;D:\test&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;The command &lt;code&gt;dir /s &amp;lt;FILENAME&amp;gt;&lt;/code&gt; searches below the current directory for the file called &amp;lt;FILENAME&amp;gt;. If you do the same search in the Windows Explorer then a search my (or may not) reveal the same results:&lt;/p&gt;</description></item><item><title>Remove all Windows recycle bins</title><link>https://bytebang.at/blog/remove-all-windows-recycle-bins/</link><pubDate>Sun, 02 Nov 2014 11:41:47 +0100</pubDate><guid>https://bytebang.at/blog/remove-all-windows-recycle-bins/</guid><description>&lt;p&gt;Whenever the free space on one of your windows drives gets low then one option is to empty your recycle bin. Well, this works fine - but Windwos stores an recycle bin for every user on the system who has deleted something. To delete the all recycle bins of all users on the c:\ drive with one simple command do it like that:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;pre&gt;&lt;code&gt;c:\&amp;gt;rd /s c:\$Recycle.Bin&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Since windows stores recycle bins for every user on on every local disk you have to repeat this command for all local drives on your harddisk to get rid of all deleted data.&lt;/p&gt;</description></item><item><title>RTTY File transmission via soundcard</title><link>https://bytebang.at/blog/rtty-file-transmission-via-soundcard/</link><pubDate>Sat, 11 Oct 2014 18:42:23 +0200</pubDate><guid>https://bytebang.at/blog/rtty-file-transmission-via-soundcard/</guid><description>&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;&#10;&lt;p&gt;If you have to transmit a file from A to B then the most common methods are to use any kind of network (wired or wireless) or a shared storage medium like an USB stick. What if everything fails and you have to transmit data from computer A to computer B then you still have an option: Transmit the data via the soundcard !&lt;/p&gt;&#10;&lt;h1 id="the-solution"&gt;The Solution&lt;/h1&gt;&#10;&lt;p&gt;Under Linux it is very simple to transmit data via the soundcard. The program &lt;a href="http://www.whence.com/minimodem/"&gt;minimodem &lt;/a&gt;can do exactly that: On the senders computer it converts data to a sound which is played back via the default soundcard and on the receivers computer this sound is converted back to the initial text. Here is a quick example:&lt;/p&gt;</description></item><item><title>Using vim editor as integrated development environment</title><link>https://bytebang.at/blog/using-vim-editor-as-integrated-development-environment/</link><pubDate>Mon, 22 Sep 2014 13:47:21 +0200</pubDate><guid>https://bytebang.at/blog/using-vim-editor-as-integrated-development-environment/</guid><description>&lt;p&gt;The &lt;a href="http://www.vim.org/"&gt;vim editor&lt;/a&gt; is one of the most powerful ediors i am aware of. It is available in nearly every OS i am aware of and therefore it made sense for me to learn how to use one editor in detail and to use it in every OS.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;If you try the editor for the first time then you will see that it ist not a &amp;rsquo;typical&amp;rsquo; editor like notepad. This origins from the fact that it ist not designed for a point and click interface. It is designed for plain keyboard useage.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Removing old Linux kernels from ubuntu</title><link>https://bytebang.at/blog/removing-old-linux-kernels-from-ubuntu/</link><pubDate>Sun, 14 Sep 2014 19:15:14 +0200</pubDate><guid>https://bytebang.at/blog/removing-old-linux-kernels-from-ubuntu/</guid><description>&lt;h1 id="the-problem"&gt;The problem&lt;/h1&gt;&#10;&lt;p&gt;Have you ever logged into your linux box and noticed this warning :&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;/boot is using 89.9% of 109MB&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Well then it is time to remove all your old linux kernels because they are filling up your /boot directory. What is the content of this mysterious directory ?&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;pre&gt;&lt;code&gt;$ mount | grep boot&#10;/dev/vda1 on /boot type ext4 (rw)&#10;&#10;$ ls /boot&#10;abi-3.2.0-64-generic  config-3.2.0-64-generic  grub                         initrd.img-3.2.0-68-generic  System.map-3.2.0-64-generic  vmlinuz-3.2.0-64-generic&#10;abi-3.2.0-65-generic  config-3.2.0-65-generic  initrd.img-3.2.0-64-generic  lost+found                   System.map-3.2.0-65-generic  vmlinuz-3.2.0-65-generic&#10;abi-3.2.0-67-generic  config-3.2.0-67-generic  initrd.img-3.2.0-65-generic  memtest86+.bin               System.map-3.2.0-67-generic  vmlinuz-3.2.0-67-generic&#10;abi-3.2.0-68-generic  config-3.2.0-68-generic  initrd.img-3.2.0-67-generic  memtest86+_multiboot.bin     System.map-3.2.0-68-generic  vmlinuz-3.2.0-68-generic&#10;&#10;$ df -h&#10;Filesystem      Size  Used Avail Use% Mounted on&#10;/dev/vda1       110M   98M  6.0M  95% /boot&#10;.&#10;.&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;As you can see there is a lot of stuff in this directory: namely the linux kernels that you can choose from in the grub bootscreen. While simply deleting the old and unused kernelfiles will free up memory on the boot partition the old kernels will be still shown in the boot menu of &lt;a href="http://wiki.ubuntuusers.de/grub"&gt;grub&lt;/a&gt;. The correct way to ged rid of them is to uninstall them via the packet manager. So lets have a look which kernel we are currently running:&lt;/p&gt;</description></item><item><title>Creating an animated gif from a bunch of jpg files</title><link>https://bytebang.at/blog/creating-an-animated-gif-from-a-bunch-of-jpg-files/</link><pubDate>Tue, 09 Sep 2014 19:07:33 +0200</pubDate><guid>https://bytebang.at/blog/creating-an-animated-gif-from-a-bunch-of-jpg-files/</guid><description>&lt;p&gt;The benefit of an &lt;a href="http://en.wikipedia.org/wiki/Graphics_Interchange_Format"&gt;animated gif&lt;/a&gt; in opposite to a &lt;a href="http://en.wikipedia.org/wiki/Flash_Video"&gt;flash (flv) video&lt;/a&gt; is that you dont have to utilize a player to view it. This means that most modern webbrowsers are able to display any animated gif out of the box. The creation of such gifs is again rather simple. A clear drawback is that animated gifs do not support sound (gif is actually an image format). The following examples assumes that there is a directory that contains images captured by a webcam:&lt;/p&gt;</description></item><item><title>Rendering timelapse videos from daylight webcam images</title><link>https://bytebang.at/blog/rendering-timelapse-videos-from-daylight-webcam-images/</link><pubDate>Sun, 07 Sep 2014 13:00:00 +0200</pubDate><guid>https://bytebang.at/blog/rendering-timelapse-videos-from-daylight-webcam-images/</guid><description>&lt;p&gt;In my last article i described how to setup a &lt;a href="https://bytebang.at/blog/quick-and-dirty-high-resolution-webcam/"&gt;webcam with a raspberry pi&lt;/a&gt;. This time i am showing you how to create timelapse videos from those images: &lt;a href="http://www.mplayerhq.hu/DOCS/HTML/de/mencoder.html"&gt;MEncoder&lt;/a&gt; is a free command line video decoding, encoding and filtering tool released under the GNU General Public License. I am using it to generate a flv file from a sequence of images. So if you have a list of images stored in a file then you can easily create a video from it. The images are shown one after anothe - exactly as they appear in the file &lt;code&gt;/tmp/webcam_imagelist.txt&lt;/code&gt;&lt;br&gt;&#10;&lt;br&gt;&#10;&lt;code&gt;$ mencoder mf:///tmp/webcam_imagelist.txt -mf type=jpg -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -o /tmp/timelapse.flv&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Quick and dirty high-resolution webcam</title><link>https://bytebang.at/blog/quick-and-dirty-high-resolution-webcam/</link><pubDate>Mon, 01 Sep 2014 18:36:28 +0200</pubDate><guid>https://bytebang.at/blog/quick-and-dirty-high-resolution-webcam/</guid><description>&lt;p&gt;Recently i had the idea to build a(nother) webcam for my club to enable the gliderpilots to observe the weather in the alps. It should be cheap, easy to build and it should have a high resolution - A perfect field of application for my underemployed &lt;a href="http://www.raspberrypi.org/"&gt;raspberry pi&lt;/a&gt; and its &lt;a href="http://www.raspberrypi.org/product/camera-module/"&gt;camera module&lt;/a&gt;. Both can be orderet at RS-Components for under 50 € (excluding a housing and a power supply).&lt;/p&gt;&#10;&lt;p&gt;The first step was to enable the camer module on the pi, which is rather simple: Open the &lt;code&gt;raspi-config&lt;/code&gt;  tool from the Terminal&lt;/p&gt;</description></item><item><title>ASCII - Art youtube player</title><link>https://bytebang.at/blog/ascii-art-youtube-player/</link><pubDate>Thu, 28 Aug 2014 19:48:43 +0200</pubDate><guid>https://bytebang.at/blog/ascii-art-youtube-player/</guid><description>&lt;p&gt;I was sitting in front of my &lt;a href="http://www.raspberrypi.org/"&gt;raspberry pi&lt;/a&gt; and asked myself: &amp;ldquo;&lt;em&gt;What if X Servers, Windowmanagers and all the other graphical stuff would heve never been invented ? .. How would pepole watch youtube videos&lt;/em&gt;.&amp;rdquo;. Beside the fact that the possibility of having youtube in this very special case is really small, this type of question reveals that it was not one of my brightest moments &amp;hellip; but it lead me to a really cool attempt how to watch videos in ascii art.&lt;/p&gt;</description></item></channel></rss>