Jekyll2023-02-28T10:29:54+00:00https://jonas.verhoelen.de/feed.xmlJonas PietzschSoftware Dev, Web, InfoSec & moreIntroducing a Graphical User Interface for Gopass2019-03-27T00:00:00+00:002019-03-27T00:00:00+00:00https://jonas.verhoelen.de/security/introducing-graphical-gopass-ui<p><a href="https://github.com/gopasspw/gopass">Gopass</a> is “the slightly more awesome standard unix password manager for teams”. It combines the powers of Git and GPG and therefor it’s purely command line based. That’s great, don’t get me wrong. However, non-technical people in teams also need access to lots of credentials.</p>
<p>For this target group and all the GUI-lovers out there, we’ve built Gopass UI in our “OffProject time” at codecentric. If you are curious and lack a detailled introduction into Gopass, feel free to checkout <a href="https://blog.codecentric.de/en/2019/02/manage-team-passwords-gopass/">my blog article about Gopass</a> on the magnificent codecentric blog.</p>
<h2 id="welcome-to-gopass-ui">Welcome to Gopass UI</h2>
<p>My colleague <a href="https://github.com/ruettenm">Matthias Rütten</a> and me started to face the challenge to build a simple UI for Gopass when working together in a large cross-functional team. Command line gurus usually fall in love with Gopass. Not so CLI-oriented people on the other side have a hard time setting it up, configuring it and using it. But if you’re not familiar with command lines at all, teams still need UIs. This was our motivation behind <a href="https://github.com/codecentric/gopass-ui">Gopass UI</a>.</p>
<p><img class="img-fluid" src="https://github.com/codecentric/gopass-ui/raw/master/docs/img/gopass-ui-logo.png" alt="Gopass UI logo" style="width: 500px;margin:0 auto;display:block;" /></p>
<p>Gopass UI is available for MacOS, Linux (.rpm, .deb, gentoo) and Windows at the time of writing this blog post. It is written in TypeScript and uses Electron, React and Redux. So under the hood it is just a web application living inside a Chromium browser that connects to a Node.js backend for its system calls. The only pre-requisite before using it is to have Gopass itself installed and configured. So get yourself the <a href="https://github.com/codecentric/gopass-ui/releases/latest">latest release and install it</a>. We are happy that the maintainers of Gopass even let us mention Gopass UI <a href="https://github.com/gopasspw/gopass/blob/master/docs/setup.md#download-a-gui">in the “Download a GUI” section of their setup docs</a>.</p>
<p>Please let us know what you think about it. Of course you are also invited to contribute to the project with us.</p>
<p><img class="img-fluid" src="https://github.com/codecentric/gopass-ui/raw/master/docs/img/demo-720p.gif" alt="GIF demonstrating core features of Gopass UI" title="Gopass UI demo" style="width: 800px" /></p>Gopass is “the slightly more awesome standard unix password manager for teams”. It combines the powers of Git and GPG and therefor it’s purely command line based. That’s great, don’t get me wrong. However, non-technical people in teams also need access to lots of credentials.Problem Solutions and Tricks for Cassandra Cluster Manager2019-02-11T00:00:00+00:002019-02-11T00:00:00+00:00https://jonas.verhoelen.de/java/cassandra-cluster-manager-issues<p><a href="https://github.com/riptano/ccm">Cassandra Cluster Manager (CCM)</a> is a helpful tool for running local Cassandra clusters. Especially if you need some exotic configuration, DataStax Enterprise clusters or simply don’t want to use Docker. CCM is a command line based Python application that lets you download, maintain and operate such clusters. Unfortunately it is not very robust and prone to errors on different environments. In addition in inherits problems from Cassandra itself since it’s just functioning as a wrapper around Cassandra source code.</p>
<h2 id="ccm-and-cassandra-can-not-handle-new-java-versions">CCM and Cassandra Can Not Handle New Java Versions</h2>
<p>This issue is a similar one to the issues people are facing with DataStax DevCenter and new Java versions. A solution to that was <a href="https://jonas.verhoelen.de/java/datastax-devcenter-freezes-wrong-java-version/">described in an earlier blog post</a> of me. The problem starts to occurr when updating your Java 8 installation. For me the earliest occurrence of this issue appeared in <code class="language-plaintext highlighter-rouge">8.0.172</code>.</p>
<p>The solution is easy again. An older version of Java needs to be provided. To handle different Java versions on your computer, the SDKMAN! version manager for a bunch of SDKs is recommended. To keep DevCenter and CCM alive on my computer, I found cure in Java version <code class="language-plaintext highlighter-rouge">7.0.181</code>. Using SDKMAN! it can be installed with <code class="language-plaintext highlighter-rouge">sdk install java 7.0.181-zulu</code>.</p>
<h2 id="multi-node-clusters-and-loopback-addresses">Multi-Node-Clusters and Loopback Addresses</h2>
<p>When working with multi-node-clusters, each Cassandra node needs a separate local IP address. By default, a three nodes cluster needs the loopback addresses <code class="language-plaintext highlighter-rouge">127.0.0.{1,2,3}</code>. All addresses except <code class="language-plaintext highlighter-rouge">127.0.0.1</code> need to be configured after every computer reboot:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>ifconfig lo0 <span class="nb">alias </span>127.0.0.2
<span class="nb">sudo </span>ifconfig lo0 <span class="nb">alias </span>127.0.0.3
</code></pre></div></div>
<p>To avoid forgetting this it is helpful to put everything into a function of whatever Shell is used. This is how it could look for Zshell:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">function </span>ccmstart<span class="o">()</span> <span class="o">{</span>
<span class="nb">sudo </span>ifconfig lo0 <span class="nb">alias </span>127.0.0.2
<span class="nb">sudo </span>ifconfig lo0 <span class="nb">alias </span>127.0.0.3
ccm start
ccm status
<span class="o">}</span>
</code></pre></div></div>
<p>Now you just need to remember using <code class="language-plaintext highlighter-rouge">ccmstart</code> when starting your cluster after a reboot.</p>
<h2 id="corrupted-nodes-due-to-sudden-shutdown">Corrupted Nodes Due to Sudden Shutdown</h2>
<p>In case of a sudden computer shutdown, Cassandra can get consistency problems with its current state of the cluster and its commit logs. Commit logs are basically one point to which Cassandra writes changes. So the commit logs can be corrupted. In this situation it helps to delete the commit logs of all nodes of the cluster.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">rm</span> .ccm/my-cluster/<span class="k">*</span>/commitlogs/<span class="k">**</span>
</code></pre></div></div>
<h2 id="ccm-never-tells-whats-wrong">CCM Never Tells What’s Wrong</h2>
<p>No matter which problem CCM or the Cassandra nodes have, they do most probably not tell you directly what it is. Therefor it is essential to know the directory structure CCM is using to dig into it.</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">~/.ccm/my-cluster/</code> contains everything for one cluster</li>
<li><code class="language-plaintext highlighter-rouge">~/.ccm/my-cluster/node1/logs/</code> contains all kinds of logs for a node. <code class="language-plaintext highlighter-rouge">system.log</code> and <code class="language-plaintext highlighter-rouge">debug.log</code> are always worth a try.</li>
<li><code class="language-plaintext highlighter-rouge">~/.ccm/my-cluster/node1/commitlogs/</code> contains the commit logs for a node (see previous section)</li>
<li><code class="language-plaintext highlighter-rouge">~/.ccm/repository/</code> caches all downloaded Cassandra versions</li>
</ul>
<p>This will make it possible to quickly spot all funny combinations of problems that Cassandra and CCM are having sometimes. Good luck!</p>Cassandra Cluster Manager (CCM) is a helpful tool for running local Cassandra clusters. Especially if you need some exotic configuration, DataStax Enterprise clusters or simply don’t want to use Docker. CCM is a command line based Python application that lets you download, maintain and operate such clusters. Unfortunately it is not very robust and prone to errors on different environments. In addition in inherits problems from Cassandra itself since it’s just functioning as a wrapper around Cassandra source code.Video Platform Networks Earning Money with Young Children’s Viewtime2019-02-03T00:00:00+00:002019-02-03T00:00:00+00:00https://jonas.verhoelen.de/internet/disturbing-kid-youtube-channels<p>Recently Twitter was amused by people posting strange YouTube videos for children which went viral. These were showing repetitive patterns of cheap 3D-modelled animals walking around, getting colored and making animal noises. On first sight it was fun. Looking at the amounts, views, patterns and contents of these videos, reveals that there is something disgusting going on.</p>
<h2 id="videos-for-toddlers-on-social-media--stupidity-going-viral">Videos for Toddlers on Social Media – Stupidity Going Viral</h2>
<p>Initially the sheer stupidity of these kind of videos amused me like hell. It could be compared to the amount of hilarious memes out there on the internet. Others seemed to have the same impression as this video went super-viral (100k retweens and 310k likes at the time writing) in only few hours. Kindly convince yourself of the stupidity of the following video, it’s not easy to describe this experience in words.</p>
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Kids YouTube is fucking wild <a href="https://t.co/Nn5z6R5eO9">pic.twitter.com/Nn5z6R5eO9</a></p>— pizza totino's boy (@jezicorivera) <a href="https://twitter.com/jezicorivera/status/1091229799635345409?ref_src=twsrc%5Etfw">February 1, 2019</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Looking through the mainly funny comments to this tweet a <a href="https://www.youtube.com/watch?v=0LNTWQun0m4&feature=youtu.be">reference to the shared video to YouTube</a> can be found. Let that sink, open your eyes and look around a bit.</p>
<h2 id="video-platforms-filled-with-stupid-and-bloated-content-for-kids">Video Platforms Filled with Stupid and Bloated Content for Kids</h2>
<p>After recovering from heavy laughter and minutes of “What the F#*%” I began to take a step back. I looked at the high amount of views and the high quantity and bad quality of comments to these videos. They were fitting to the repetitive nature of these videos qualitywise. A hand full of animals or vehicles doing the same thing with different fruits, colors, shapes and other objects – over and over again. All that was commented and liked by hordes of users acting like fake accounts. These seem to be other similar YouTube channels where event more rubbishy content can be found.</p>
<p><img src="/images/creepy-comments.png" alt="Creepy comments all of the kid's YouTube videos" title="YouTube creepy comments" /></p>
<p>This puzzled me and made me think about the target audience of these videos. It would’ve been to simple to state that these videos were made for some adult laughters. These videos were mainly spanish or english titled and target keywords: children, colors, car, toys, animals and so on. The content was generic, repetitive and seemed to be artificially bloated using similar schemes over and over again. Why would anybody do something like this? There was no educational value visible in these tons of videos.</p>
<h2 id="the-target-audience-that-cannot-decide-yet">The Target Audience That Cannot Decide Yet</h2>
<p>Since the arrival of “smart” TVs, tablets and smartphones in our homes, we all know the image of children consuming content on the internet, which has unfortunately become almost normal.</p>
<p>Considering the “content” of the videos found, it could be assumed that they target children under the age of five. Let’s call this group “young children” for the sake of simplicity. This audience includes babies, toddlers and preschoolers – a group that is not ready to explore the internet alone yet. Parking them in front of internet-ready devices often results in watching videos on platforms like YouTube. Features like autoplay, recommendation section, comment section, playlists and search results are guiding children their journey through their screen time. This results in the platform’s search and ranking systems coming into play and controlling the whole flow. It’s hard for young children to “break out” of that flow, as their knowledge about the internet is low and they are probably not able to read and write yet.</p>
<blockquote>
<p>“I have two kids and I’m always checking what kind of cartoons they’re watching. I’m unsubscribing them all the time from this kind of crappy material. It becomes even worse when you realize that this material is not just basically nonsense but very often also violent, scary etc. It just looks like an innocent, colorful cartoon (and stupid also) but it can be really disturbing. I had to report several channels as disturbing content.”</p>
</blockquote>
<p>This was one of the many similar personal experiences I got to hear from coworkers who are fathers themselves. Another one was even reporting about more alarming aspects of these videos.</p>
<blockquote>
<p>“The nonsense animal-and-color videos are just the beginning. The deeper you go, the more disturbing content you will find. It may not be only bloated up but even used for right-wing political agenda. Not just one time we had to skip, report and unsubscribe from scary and weird channels and videos when our daughter watched YouTube videos. We were seeing childish looking content including Adolf Hitler, Spiderman and sexual content – all in the same video.”</p>
</blockquote>
<p>The target audience of these young children is the perfect one to place content for. Their bounce rate is low, they have a limited set of interests and are not even perfectly able to search for topics. It was just a matter of time until immoral people go their way, abusing the natural behaviour and the circumstances of <a href="http://www.techaddiction.ca/media-statistics.html">increasing media consumption by children</a>. Parents are a big part of these circumstances as they often have issues to look after their children, organise babysitters and keep an eye on their kids online behaviour in general.</p>
<h2 id="a-whole-industry-gambling-for-preschoolers-viewtime">A Whole Industry Gambling for Preschoolers Viewtime</h2>
<p>The theorey is, that there is a huge industry sitting behind these videos. It is constantly cheaply generating lots of these videos on a vast variety of channels. Most of it is even auto-generated by software. Some is just cloned in some way from other videos to get more share in the market. To boost visibility they even automate upvoting, commenting and adding viewtime to their own videos by using fake accounts. To make sure it is found by real young children, it’s basically SEO-optimised on YouTube, targetting search terms used by children. Let’s get a picture about how big the market for this industry could be in terms of money.</p>
<p>2017 there were around <a href="https://www.populationpyramid.net/world/2017/">680 to 750 million people up to 5 years of age</a> which is about 10% of the world’s total population. As of June 2018, <a href="https://en.wikipedia.org/wiki/Global_Internet_usage">55% of the world’s population has internet access</a>. It is a bit harder to come up with the total amount of preschoolers having access to internet due to lack of statistics about that. Calculated naively, let’s say that the target audience has a quantity of at least 100 million young children. There are statistics about the amount of time that children consume media. Again it’s hard to get a global picture that also reflects the use of video platforms but the direction is 60 to 180 minutes of screentime per day. Picking the low of 60 minutes seems fair due to the thin air of suitable statistics. Most of the videos have a duration of about ten minutes, this would be six videos per day per young child and 600 million per day by the whole target audience. Assuming <a href="https://www.quora.com/How-much-does-YouTube-pay-per-1000-views-How-where-can-I-get-sponsor-to-have-enough-capital-from-nothing-and-be-a-successful-company">1000 views average to 1 dollar of profit</a>, this would be 0.6 million of dollars per day. All in all that’s 220 million dollars per year. Not a bad market for some cheaply produced videos and decent automation.</p>
<p>Take note that these numbers are about to be handled with care. Personally, I think they are widely understated. However, no matter how you construct this, it is sinister and deeply worrying.</p>
<h2 id="online-protection-of-children-as-important-as-ever">Online Protection of Children as Important as Ever</h2>
<p>No matter if these theories are correct or not, this kind of content cannot be good for young children. It is meaningless and blank, bloated and only optimised for stealing viewtime. The quantity of these videos is high and hard to audit. Interrelations “teached” by them cannot be verified by children, they are probably learning nothing from it.</p>
<p>These dimensions require parentals and supervisors to level up their protection efforts to the level of guile and slyness of mentioned video platform networks. It is recommended to guide children, depending on their age, when accessing the internet. No doubt that there is also good children content on video platforms. Children can be guided the right path by the help of adults. They could consume fine videos in playlists having autoplay functionality disabled.</p>
<p>At the end of the day, the online effective protection is to care about how children consume media. There are also wishes that video platforms do something about it. Unfortunately this is not something that is expected, as the extensive distribution of similar videos is only a very spongy violation agains the platform’s terms and conditions. Still there are chances that patterns in their attempts to automate their activities will reveal more violations, leading to massive deletion of content. It is also good practise to report suspicious videos and channels.</p>
<p>Colleagues pointed me to a TED talk by <a href="https://twitter.com/jamesbridle">James Bridle</a> informing about the topic, which might be interesting for you if you made it to this point of my article. He shows even more disturbing video samples and seems to observe the problematic situation very well.</p>
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="https://www.youtube.com/embed/v9EKV2nSU8w" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
</div>Recently Twitter was amused by people posting strange YouTube videos for children which went viral. These were showing repetitive patterns of cheap 3D-modelled animals walking around, getting colored and making animal noises. On first sight it was fun. Looking at the amounts, views, patterns and contents of these videos, reveals that there is something disgusting going on.How to dump SQL from a H2 database file2018-08-09T00:00:00+00:002018-08-09T00:00:00+00:00https://jonas.verhoelen.de/databases/dump-sql-h2-database-file<p>Recently I ran into the situation that I had to migrate a file basd H2 database to another relational database. At the beginning I was kind of scared that there will be no proper and quick solution. After a bit of research I found a very easy way that I would like to share with you. We also need to have Java installed and get a little utility from H2.</p>
<h2 id="download-h2-prepare-script-and-fire">Download H2, prepare script and… Fire!</h2>
<p>Let’s <code class="language-plaintext highlighter-rouge">cd</code> into the directory where our <code class="language-plaintext highlighter-rouge">.mv.db</code> file is stored, let’s call it <code class="language-plaintext highlighter-rouge">vocablesDb.mv.db</code> for now. Then we will download H2 as JAR-file:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>wget <span class="nt">-O</span> h2.jar http://repo2.maven.org/maven2/com/h2database/h2/1.4.197/h2-1.4.197.jar
</code></pre></div></div>
<p>Now we will create the file <code class="language-plaintext highlighter-rouge">query.sql</code>. It contains a simple SQL instruction to dump the databases schema and data to a file called <code class="language-plaintext highlighter-rouge">db-dump.sql</code>:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s2">"SCRIPT TO 'db-dump.sql'"</span> <span class="o">></span> query.sql
</code></pre></div></div>
<p>Now we can connect the dots and use a utility from the H2 Java library:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>java <span class="nt">-cp</span> h2.jar org.h2.tools.RunScript <span class="nt">-url</span> <span class="s2">"jdbc:h2:file:./vocablesDb"</span> <span class="nt">-user</span> username <span class="nt">-password</span> pazzword <span class="nt">-script</span> query.sql <span class="nt">-showResults</span>
</code></pre></div></div>
<p>This should be pretty much everything. You will find the complete SQL dump in <code class="language-plaintext highlighter-rouge">db-dump.sql</code> now. If you get an error, H2 will tell you pretty much what you did wrong. Maybe you got the URL or credentials wrong?!</p>Recently I ran into the situation that I had to migrate a file basd H2 database to another relational database. At the beginning I was kind of scared that there will be no proper and quick solution. After a bit of research I found a very easy way that I would like to share with you. We also need to have Java installed and get a little utility from H2.How to fix DevCenter freezing on new Java versions2018-07-06T00:00:00+00:002018-07-06T00:00:00+00:00https://jonas.verhoelen.de/java/datastax-devcenter-freezes-wrong-java-version<p>Shortly after updating my system Java version to <code class="language-plaintext highlighter-rouge">8.0.172</code> I realised that Datastax DevCenter was not working anymore. It just freezed immediately after loading and didn’t react to input anymore.</p>
<p>Fortunately there was not a long time between the update and my next need to run Cassandra queries. So I tried changing the Java version for DevCenter to an older one to make it compatible again.</p>
<h2 id="sdkman-to-the-rescue">SDKMAN! to the rescue</h2>
<p>SDKMan is a general purpose SDK manager that has a bunch of prominent SDKs in its portfolio. There are Java, Scala, Spark, Spring Boot Groovy and many more available. First <a href="https://sdkman.io/install">install SDKMan from their instructions</a>. Once installed, it tells you to open another shell window or to load the sources in the current one. After you have done that, you can install all SDKs you need.</p>
<p>To have an older Java version available, let’s get an available one from Java 7 that SDKMan suggests you with <code class="language-plaintext highlighter-rouge">sdk list java</code>. For me this was for example <code class="language-plaintext highlighter-rouge">7.0.181-zulu</code>. Install it with <code class="language-plaintext highlighter-rouge">sdk install java 7.0.181-zulu</code>.</p>
<p>To have a new Java version (I currently need Java 8 and 11 for other projects), pick a newer one executing <code class="language-plaintext highlighter-rouge">sdk install java 8.0.172-zulu</code> and pick it as default. SDKMan prompts for that at the end.</p>
<p>These two Java versions should be located in <code class="language-plaintext highlighter-rouge">~/.sdkman/candidates/java/<version></code> now. So your Java binary for the older one is now for example <code class="language-plaintext highlighter-rouge">.sdkman/candidates/java/7.0.181-zulu/bin/java</code>.</p>
<h2 id="tell-devcenter-to-use-that-version">Tell DevCenter to use that version</h2>
<p>DevCenter by default decides for himself what Java version it uses and probably just takes your linked <code class="language-plaintext highlighter-rouge">java</code> binary. Do the following:</p>
<ul>
<li>Right-click on <code class="language-plaintext highlighter-rouge">DevCenter.app</code> in your properties directory</li>
<li>Click “Show package contents”</li>
<li>Open <code class="language-plaintext highlighter-rouge">Contents/info.plist</code> in an editor of your choice</li>
</ul>
<p>Then, at the bottom you will find configuration that looks like the following:</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><dict></span>
<span class="c"><!-- a lot of stuff above --></span>
<span class="nt"><key></span>Eclipse<span class="nt"></key></span>
<span class="nt"><array></span>
<span class="c"><!-- comments on how to change the Java version --></span>
<span class="nt"><string></span>-keyring<span class="nt"></string><string></span>~/.eclipse_keyring<span class="nt"></string></span>
<span class="nt"><string></span>-showlocation<span class="nt"></string></span>
<span class="c"><!-- some more comments --></span>
<span class="nt"></array></span>
<span class="nt"></dict></span>
</code></pre></div></div>
<p>Into the <code class="language-plaintext highlighter-rouge">array</code> element, insert the following children and make sure to adapt the old Java version you want DevCenter to use and your users name.</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><string></span>-vm<span class="nt"></string><string></span>/Users/YOUR-USER/.sdkman/candidates/java/7.0.181-zulu/bin/java<span class="nt"></string></span>
</code></pre></div></div>
<p>Now exit and start again your DevCenter. Voilà, it should be working again!
The credits for solving the root problem go to <a href="https://stackoverflow.com/a/49617513/5500928">this Stackoverflow answer</a>.</p>Shortly after updating my system Java version to 8.0.172 I realised that Datastax DevCenter was not working anymore. It just freezed immediately after loading and didn’t react to input anymore.(GER) Herr Mies will’s wissen #9 – Bitcoin Podcast2017-10-11T00:00:00+00:002018-04-17T00:00:00+00:00https://jonas.verhoelen.de/blockchain/herr-mies-wills-wissen-bitcoin-podcast<p><a href="https://twitter.com/danielmies" target="_blank" rel="noopener noreferrer">Daniel Mies</a>, one of my great workmates at <a href="https://codecentric.de" target="_blank" rel="noopener noreferrer">codecentric AG</a>, invited me to join his German podcast “Herr Mies will’s wissen” for an episode on an <a href="https://mies.me/2017/10/11/hmww09-bitcoin/" target="_blank" rel="noopener noreferrer">introduction to Bitcoin</a>. As I worked pretty much with Blockchain technology and cryptocurrency related analysis the past months, I of course accepted and joined Daniel. More than half an hour we had a nice talk about it on a pretty basic level. For all of you guys that want to understand what Bitcoin basically is about, this episode might be interesting.</p>
<p>Give Daniel a follow on his podcast if you understand or speak German: <a href="https://itunes.apple.com/us/podcast/herr-mies-wills-wissen/id1257454170" target="_blank" rel="noopener noreferrer">Herr Mies will’s wissen</a>.<br />You will get to the notes and audio file of the mentioned episode <a href="https://mies.me/2017/10/11/hmww09-bitcoin/" target="_blank" rel="noopener noreferrer">here</a>. Have fun!</p>
<p>At codecentric we also offer our activities and services in Blockchain in the Lab format. Specialised workshops for your need are also available. After talking about concrete use cases and all preceding work, implementation of innovative Blockchain solutions is something we’d like to offer you.<br />Feel free to have a look into our services (only german unfortunately): <a href="https://www.codecentric.de/leistungen/loesungen/technologie-treibt-veraenderung/blockchain-lab/" target="_blank" rel="noopener noreferrer">codecentric Blockchain Lab</a></p>Daniel Mies, one of my great workmates at codecentric AG, invited me to join his German podcast “Herr Mies will’s wissen” for an episode on an introduction to Bitcoin. As I worked pretty much with Blockchain technology and cryptocurrency related analysis the past months, I of course accepted and joined Daniel. More than half an hour we had a nice talk about it on a pretty basic level. For all of you guys that want to understand what Bitcoin basically is about, this episode might be interesting.Decentralized Autonomous Organization – Organizations on the Blockchain2017-09-01T00:00:00+00:002017-09-01T00:00:00+00:00https://jonas.verhoelen.de/blockchain/decentralized-autonomous-organization-blockchain<p>Decentralized Autonomous Organization is a new kind of organization that emerged from the blockchain technology. It’s a way of organizing various stakeholders, their financial interactions and processes that can be used in the organization.</p>
<p>Currently there are few real world examples since the ideas is relatively new. Still the idea seems to gain some interesting developments and should be kept in sight because it could serve some advantages for some organizations.</p>
<p>You can find my article on the codecentric blog: <a href="https://blog.codecentric.de/en/2017/09/decentralized-autonomous-organization-blockchain/" target="_blank" rel="noopener noreferrer">Decentralized Autonomous Organization – Organizations on the Blockchain</a>.</p>
<p>I would like to hear your ideas and feedback regarding Blockchain and Decentralized Autonomous Organizations if you are interested.</p>Decentralized Autonomous Organization is a new kind of organization that emerged from the blockchain technology. It’s a way of organizing various stakeholders, their financial interactions and processes that can be used in the organization.Storj – Decentralized Cloud Storage on the Blockchain2017-07-21T00:00:00+00:002017-07-21T00:00:00+00:00https://jonas.verhoelen.de/blockchain/storj-decentralised-storage-blockchain<p>Some days ago I published an introduction to Blockchain and what it could be used for (<a href="https://blog.codecentric.de/en/2017/07/what-is-blockchain/" target="_blank" rel="noopener noreferrer">Blockchain, the next big thing?</a>). Yet there are already a lot of startups building interesting products with this kind of technology.</p>
<h2 id="what-is-storj">What is Storj?</h2>
<p><a href="https://storj.io" target="_blank" rel="noopener noreferrer">Storj</a> is one of them. It introduces itself as “Blockchain-based, end-to-end encrypted, distributed object storage, where only you have access to your data”. So what does it? It is a service where users can rent and lend free disk space on their computers and servers. This makes it possible to offer a cloud storage service to store all kinds of files, like Dropbox does.</p>
<p>But not only private users could store their holiday pictures on it. Storj also provides APIs and services that enable using it as cloud storage for all kinds of applications. In the past it already announced to partner with Heroku and Microsoft Azure. The idea behind it is that applications deployed on these cloud platforms could use Storj disk space under the hood. It fits very well into the cloud platform ecosystem as also the payment model does. Storage is payed per GB per month ($0.015) and bandwith costs $0.05 per GB downloaded.</p>
<h2 id="integration-means-adaption">Integration means Adaption</h2>
<p>Storj just announced its new <a href="http://blog.storj.io/post/163215547738/storj-and-filezilla-integration-bringing" target="_blank" rel="noopener noreferrer">integration with FileZilla</a>. This makes it possible to use Storj storage like any (S)FTP-Server and brings it to a potential of 15 million monthly users using the popular <a href="https://filezilla-project.org/" target="_blank" rel="noopener noreferrer">FileZilla FTP client</a>.</p>
<p>Many Blockchain startups are building up momentum these days while having problems to be integrated into real world scenarios. Storj did a perfect job on establishing this integration. It is simple, cheap and opens up Storj for millions of users. This makes it a perfect show case for reaping the low hanging fruits in the industry. It shows that Blockchain and ICO/token sale startups are actually starting to deliver. This puts all similar projects into good light and increases hope that other projects start delivering real adaption use cases, too.</p>
<h2 id="try-it-out">Try it out</h2>
<p>Using Storj is very simple.</p>
<ol>
<li><a href="https://app.storj.io/#/signup?referralLink=limax-voltages-655" target="_blank" rel="noopener noreferrer">Create your free account</a></li>
<li><a href="https://filezilla-project.org/" target="_blank" rel="noopener noreferrer">Download and install FileZilla</a></li>
<li><a href="https://docs.storj.io/docs#section-quick-setup" target="_blank" rel="noopener noreferrer">Setup the simple configuration</a></li>
</ol>
<p>There you go. For the first 12 months you will have 25GB free for testing. Testing is important now as Storj is still in early stage of development. If you want to support them, give them feedback <a href="https://community.storj.io" target="_blank" rel="noopener noreferrer">in their community chat</a> or <a href="https://twitter.com/storjproject" target="_blank" rel="noopener noreferrer">on Twitter</a>.</p>
<h2 id="what-does-it-have-to-do-with-blockchain">What does it have to do with Blockchain?</h2>
<p>Cloud storage is provided in a decentralized model as the storage is not provided by central servers of a company. Instead simple users or professional farmers could <a href="https://storj.io/share.html" target="_blank" rel="noopener noreferrer">rent their free disk space</a> and earn money with it. This makes the system and storage fail safe and distributed.</p>
<p>For quite a while Storj had its SJCX token based on counterparty in circulating supply on some exchanges. During the last months they accomplished a pretty successful token sale with the goal to sell their brand new STORJ token. STORJ is a Ethereum based (ERC20) token and from now on implements the payment model of Storj so it has its own currency for the ecosystem.</p>
<p>To get rid of the old circulating token, there is an ongoing migration where the old token can be exchanged 1:1 to the new STORJ token. When this is done, all payments in the system will be based on the new currency.</p>
<h2 id="conclusion">Conclusion</h2>
<p>In parallel to tons of petty initial coin offering happening, some good picks start to deliver. Storj slowly turns out to become one of them as it works towards mass adaption by offering simple integration possibilities. There is actually happening something in the cryptocurrency and Blockchain world which promotes the whole technical and economical area behind it.</p>
<p>We’re looking forward to see more similar steps of Storj, its competitors and projects from the other areas.</p>Some days ago I published an introduction to Blockchain and what it could be used for (Blockchain, the next big thing?). Yet there are already a lot of startups building interesting products with this kind of technology.What is Blockchain? Is it the next big thing?2017-07-18T00:00:00+00:002017-07-18T00:00:00+00:00https://jonas.verhoelen.de/blockchain/what-is-blockchain<p>Blockchain fuels digital currencies like Bitcoin, Ethereum and a lot more. FinTech companies and startups started to utilize Blockchain to disrupt the classic financial industry. Also more institutes and governments are doing research and start interesting projects.</p>
<p>But what is it and how does it work? What advantages and disadvantages does it have? How can we use it in IT and business?</p>
<p><strong>I got curious about this topic a few months ago and wrote a blog post for codecentric: <a href="https://blog.codecentric.de/en/2017/07/what-is-blockchain/" target="_blank" rel="noopener noreferrer">Blockchain, the next big thing?</a></strong></p>
<p>It is <a href="https://blog.codecentric.de/2017/07/was-ist-blockchain/" target="_blank" rel="noopener noreferrer">also available in German</a>.</p>
<p>What do you think about this topic? Did you hear about interesting projects or are you participating in one yourself? Let us know in the comments if you like.</p>Blockchain fuels digital currencies like Bitcoin, Ethereum and a lot more. FinTech companies and startups started to utilize Blockchain to disrupt the classic financial industry. Also more institutes and governments are doing research and start interesting projects.Utilizing Keyboard Shortcuts like a Pro2017-05-25T00:00:00+00:002017-05-25T00:00:00+00:00https://jonas.verhoelen.de/productivity/productive-developer-shortcuts<p>As a software developer you always have a big choice of kind of skills in which you can improve yourself. Most of them are pretty complex, require you to learn new concepts and paradigms. Some on the other hand are basic and have touch points with the majority of our working time. As always, we should go for the low hanging fruits to improve ourselves. Today: Learning and using keyboard shortcuts as a developer – Probably also interesting for everyone else working with text.</p>
<h2 id="why-shortcuts">Why Shortcuts?</h2>
<p>Shortcuts save a lot of time when working on the computer. I guess we all do that very often. Every application but also the operating system itself offer a various amount of key combinations to do something very quickly, without using the mouse. The computer mouse is handy for everyone. But we don’t want to be everyone and perfect the skills of our profession continuously. This is why we should bite the bullet.</p>
<p>Learning shortcuts always looks tedious but once you discovered a landscape of actions <em>you really need often</em>, learning them <em>saves you lots of time</em>, just takes some days and simply feels great.</p>
<h2 id="discovering-shortcuts">Discovering Shortcuts</h2>
<p>If you show shortcuts to people, there is almost a funny “Aha!” effect, e.g. during pair programming or presentations. This way you can learn single ones. It’s more expedient to discover which shortcuts you really need. IntelliJ IDEA can help you with that, as it analyses your development behavior and shortcut usages. Use the Productivity Guide in the Help tab to see information about your</p>
<p>Besides the IDE, your operating system can also help you optimizing your daily business by shortcuts and convenience functionality. Same for your Terminal (probably iTerm2).</p>
<p>So, listen to your tools and let’s have a look together for some general ones. As operating systems and IDEs differ and I only know my tools of choice, I only go into detail for Mac OS X and IntelliJ IDEA as development environment.</p>
<h2 id="general-shortcuts">General Shortcuts</h2>
<p>This list contains shortcuts that work in OS X, terminal, Finder, browser and todays’ cool IDEs.</p>
<table>
<thead>
<tr>
<th>Shortcut</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td>⌘ + ⇥</td>
<td>Switch between open applications</td>
</tr>
<tr>
<td>⌘ + Space</td>
<td>Open Spotlight to search for things</td>
</tr>
<tr>
<td>⌘ + {C | V | X | A | F}</td>
<td>{Copy | Paste | Cut | Select all | Search} text</td>
</tr>
<tr>
<td>⌘ + {T | W}</td>
<td>Open new tab/Close current (Finder, browser, terminal, IDE)</td>
</tr>
<tr>
<td>⌘ + Number</td>
<td>Switch to tab with number (left to right)</td>
</tr>
<tr>
<td>⌘ + O</td>
<td>Open selected item (Finder)</td>
</tr>
</tbody>
</table>
<h2 id="ide-control">IDE Control</h2>
<p>An IDE is not only about files and text, it’s about displaying code as cohesive programs and enabling us to maintain and extend them best possible. Therefor it offers a lot of actions that normal text editors do not know. IntelliJ IDEA is the one I use mostly together with a customized Atom installation (which is also able to adapt the key-map of IDEA by a plugin).</p>
<table>
<thead>
<tr>
<th>Shortcut</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td>⌘ + O</td>
<td>Search for a file</td>
</tr>
<tr>
<td>⌘ + A</td>
<td>Search actions</td>
</tr>
<tr>
<td>Double shift</td>
<td>Search in all files</td>
</tr>
<tr>
<td>Ctrl + Space</td>
<td>Auto completion</td>
</tr>
<tr>
<td>Shift + Ctrl + Space</td>
<td>Smart auto completion</td>
</tr>
<tr>
<td>Ctrl + T</td>
<td>Refactor this (refactoring context menu)</td>
</tr>
<tr>
<td>Ctrl + G</td>
<td>Add current selection to <a href="https://www.jetbrains.com/help/idea/2016.3/multicursor.html" target="_blank" rel="noopener noreferrer">multicursor</a></td>
</tr>
<tr>
<td>Ctrl + G + ⌘</td>
<td>Add all equal tokens of the current selection to multicursor</td>
</tr>
</tbody>
</table>
<h2 id="text-selection">Text Selection</h2>
<p>What I observed from myself, I tend to use my mouse more often when it comes to text selection. This happens very often as a Developer. Writing code, messages in Slack, writing emails or tweeting – we write tons of words per day. Most of it is not final, so we have to edit it. To edit it, we have to select it. It seems obvious to use the mouse for that but in theory we don’t have to because everything can be done with a keyboard. Let’s see…</p>
<table>
<thead>
<tr>
<th>Shortcut</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td>⌘ + {⬅ | ➡}</td>
<td>Jump to start/end of line</td>
</tr>
<tr>
<td>Alt + {⬅ | ➡}</td>
<td>Jump to next word on the left/right</td>
</tr>
<tr>
<td>Shift + {⬅ | ➡ | ⬆ | ⬇}</td>
<td>Select text into direction (by character or line)</td>
</tr>
<tr>
<td>(all above) + Shift</td>
<td>Move selection while cursor is moving</td>
</tr>
</tbody>
</table>
<h2 id="conclusion">Conclusion</h2>
<p>Of course there are many more applications and also different keyboard and shortcut layouts, so this post is limited on only a few aspects. For me personally it was important to learn to make free for those productivity improvements every now and then. When you notice that some actions always take too long, try to automize them. This also applies to shortcuts, so make sure to learn your tools properly. It not only makes you quicker and lets you provide more output. Furthermore it feels just good to not spend too much time with stupid tasks. Instead of that we’ll have more time for important aspects of our work.</p>As a software developer you always have a big choice of kind of skills in which you can improve yourself. Most of them are pretty complex, require you to learn new concepts and paradigms. Some on the other hand are basic and have touch points with the majority of our working time. As always, we should go for the low hanging fruits to improve ourselves. Today: Learning and using keyboard shortcuts as a developer – Probably also interesting for everyone else working with text.