<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Notes on Piotr Wittchen</title>
    <link>https://wittchen.io/notes/</link>
    <description>Recent content in Notes on Piotr Wittchen</description>
    <generator>Hugo -- 0.161.1</generator>
    <language>en</language>
    <lastBuildDate>Sun, 29 Mar 2020 20:29:36 +0000</lastBuildDate>
    <atom:link href="https://wittchen.io/notes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Dynamic wallpaper for i3</title>
      <link>https://wittchen.io/notes/dynamic-wallpaper-for-i3/</link>
      <pubDate>Sun, 29 Mar 2020 20:29:36 +0000</pubDate>
      <guid>https://wittchen.io/notes/dynamic-wallpaper-for-i3/</guid>
      <description>&lt;p&gt;Some time ago, I was using macOS. The thing I liked about this OS since Mojave version was the dynamic wallpaper feature. Wallpaper representing picture of the Mojave desert in California was dynamically changing during the day. In the morning, we could see the dawn and sunrise, later picture during the midday, in the evening, desert during the dusk and finally picture at night. I liked the fact that wallpaper were adjusting to the time of the day. I wanted to have the same thing on my Linux. Luckily, on Arch and i3, it&amp;rsquo;s pretty easy to achieve.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Spotify song in i3 status bar</title>
      <link>https://wittchen.io/notes/spotify-song-in-i3-status-bar/</link>
      <pubDate>Thu, 20 Feb 2020 11:29:13 +0000</pubDate>
      <guid>https://wittchen.io/notes/spotify-song-in-i3-status-bar/</guid>
      <description>&lt;p&gt;While customizing my i3 status bar, I wanted to have currently played Spotify song in it. Some time ago, I created an open source script in Python called &lt;a href=&#34;https://github.com/pwittchen/spotify-cli-linux&#34;&gt;spotify-cli-linux&lt;/a&gt; and I wanted to use it. When we want to put something custom into the i3 status bar, the easiest way to do it, is to save data into the file and then read the file.&lt;/p&gt;
&lt;p&gt;I created the following config inside &lt;code&gt;~/.config/i3status/config&lt;/code&gt; file:&lt;/p&gt;</description>
    </item>
    <item>
      <title>I switched to i3 WM</title>
      <link>https://wittchen.io/notes/i-switched-to-i3wm/</link>
      <pubDate>Sun, 16 Feb 2020 13:16:49 +0000</pubDate>
      <guid>https://wittchen.io/notes/i-switched-to-i3wm/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;From a long time I wanted to try lightweight WM (Window Manager) for Linux. I installed i3 once a few years ago, but I had no idea how to use it, so I just closed this thing and got back to Gnome. Recently, I watched several videos and tutorials about Linux and i3 on youtube, which helped me to learn this WM, how it works and how to use it. I also read some part of &lt;a href=&#34;https://i3wm.org/docs/&#34;&gt;docs&lt;/a&gt; and &lt;a href=&#34;https://i3wm.org/docs/userguide.html&#34;&gt;user&amp;rsquo;s guide&lt;/a&gt; to customize my configuration. Official docs of i3 are really good.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitHub Actions in action!</title>
      <link>https://wittchen.io/notes/github-actions-in-action/</link>
      <pubDate>Mon, 04 Nov 2019 14:11:36 +0000</pubDate>
      <guid>https://wittchen.io/notes/github-actions-in-action/</guid>
      <description>&lt;p&gt;Recently GitHub introduced really interesting feature to their service called &lt;a href=&#34;https://github.com/features/actions&#34;&gt;Actions&lt;/a&gt;. Actions can be used for automating various tasks related to the repositories like CI, CD, testing, deployment and whatnot. The general concept is as follows: We can create so called action, which can be based on a JavaScript project or a Docker container. We can also use existing actions in the &lt;a href=&#34;https://github.com/marketplace?type=actions&#34;&gt;Marketplace&lt;/a&gt;. Next, we can create workflow in the &lt;code&gt;yml&lt;/code&gt; file, where we define our workflow. Workflow can consist of on a job with many steps using different actions. We can also define multiple jobs, where one depends on another. Workflows can be triggered in many ways. E.g. by push, pull request, creating issue, publishing release, scheduled event or external event.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing font rendering on Firefox and Arch Linux</title>
      <link>https://wittchen.io/notes/fixing-font-rendering-on-firefox-and-arch-linux/</link>
      <pubDate>Fri, 01 Nov 2019 11:57:02 +0000</pubDate>
      <guid>https://wittchen.io/notes/fixing-font-rendering-on-firefox-and-arch-linux/</guid>
      <description>&lt;p&gt;After the recent Firefox update (70.0.1 64-bit), I&amp;rsquo;ve got a problem with font rendering on Arch Linux. I&amp;rsquo;ve installed this update probably on 31.10.2019 or 01.11.2019 (I&amp;rsquo;m not exactly sure right now). On several pages (e.g. Facebook or Github) fonts weren&amp;rsquo;t rendered correctly. It looked like fonts without anti-aliasing what was quite ugly.&lt;/p&gt;
&lt;p&gt;I figured out that I can go to the Firefox Settings and in the &amp;ldquo;Fonts and Colors&amp;rdquo; section, go to &amp;ldquo;Advanced&amp;rdquo; and turn off the option &amp;ldquo;Allow pages to choose their own fonts, instead of your selection above&amp;rdquo;. It fixes problem with ugly fonts on several websites, but rest of the websites is not able to render the right fonts. E.g. when you have website with custom fonts from fonts.google.com (like this website). That&amp;rsquo;s why I couldn&amp;rsquo;t proceed with this solution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing Gnome Boot problem</title>
      <link>https://wittchen.io/notes/fixing-gnome-boot-problem/</link>
      <pubDate>Tue, 22 Oct 2019 22:42:21 +0000</pubDate>
      <guid>https://wittchen.io/notes/fixing-gnome-boot-problem/</guid>
      <description>&lt;p&gt;I recently had an issue with Gnome on Arch Linux during the system boot. After turning my computer on, I saw gray screen with message like:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Oh no! Something has gone wrong. A problem has occurred and the system can&amp;#39;t recover...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and I couldn&amp;rsquo;t log in or do anything and started searching solutions for this problem via my phone. First, I switched to terminal mode with &lt;!-- raw HTML omitted --&gt;Alt+F2&lt;!-- raw HTML omitted --&gt; (you can switch back to GUI with &lt;!-- raw HTML omitted --&gt;Alt+F1&lt;!-- raw HTML omitted --&gt;), logged in and updated system via pacman: &lt;code&gt;sudo pacman -Syu&lt;/code&gt;. I tried to install or reinstall different packages mostly related to graphic card drivers, X11 or Gnome, but it didn&amp;rsquo;t help. Luckily, I found &lt;a href=&#34;https://bbs.archlinux.org/viewtopic.php?id=203416&#34;&gt;this thread&lt;/a&gt; on the Arch Forums, where there was &lt;a href=&#34;https://bbs.archlinux.org/viewtopic.php?pid=1568684#p1568684&#34;&gt;a post&lt;/a&gt; suggesting disabling &lt;a href=&#34;https://en.wikipedia.org/wiki/Wayland_%28display_server_protocol%29&#34;&gt;Wayland&lt;/a&gt; on &lt;a href=&#34;https://wiki.gnome.org/Projects/GDM&#34;&gt;GDM&lt;/a&gt; by opening &lt;code&gt;/etc/gdm/custom.conf&lt;/code&gt; file and uncommenting line with&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cleaning root partition on Linux</title>
      <link>https://wittchen.io/notes/cleaning-root-partition-on-linux/</link>
      <pubDate>Thu, 17 Oct 2019 09:57:56 +0000</pubDate>
      <guid>https://wittchen.io/notes/cleaning-root-partition-on-linux/</guid>
      <description>&lt;p&gt;Size of the root partition &lt;code&gt;/&lt;/code&gt; on my system is 25 GB. I recently had a situation where I received notification from the system that there&amp;rsquo;s too little free space on that partition, which was around 1 GB. My first attempt was to clean pacman cache with &lt;code&gt;sudo pacman -Sc&lt;/code&gt;. It helped for a moment, but I kept receiving this notification. I searched for the solutions regarding extending the root partition and noticed that it wouldn&amp;rsquo;t be that easy and probably require making backup and reinstalling the system. Although installing Arch is not scary for me anymore, I didn&amp;rsquo;t want to do that again, because it takes some time and after that I will have to configure all my stuff, install apps, etc. which is a lot of work. Due to this fact I started search for the solutions about cleaning root partition. I found nice program called &lt;code&gt;ncdu&lt;/code&gt;, which is abbreviation for NCurses Disk Usage according to the man page. You can install it with pacman: &lt;code&gt;sudo pacman -S ncdu&lt;/code&gt;. This program shows usage of the directories and shows directories, which take the biggest amount of space on the disk. Once you have that program, you can go to the root partition and run it:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Formatting USB disk on Linux</title>
      <link>https://wittchen.io/notes/formatting-usb-disk-on-linux/</link>
      <pubDate>Sun, 01 Sep 2019 09:16:07 +0000</pubDate>
      <guid>https://wittchen.io/notes/formatting-usb-disk-on-linux/</guid>
      <description>&lt;p&gt;Sometimes we may want to format external USB drive. I recently encountered a situation, where I had bootable USB drive with operating system ready to install, but I wanted to remove all this stuff and use disk for storing data. I couldn&amp;rsquo;t format this disk with GUI tools for some reason and I kept getting errors or information that it&amp;rsquo;s not possible. In case you don&amp;rsquo;t know, on Linux everything is always possible, so I quit that GUI tool, opened terminal and start playing with good old and simple programs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modifying mehtod&#39;s input parameters</title>
      <link>https://wittchen.io/notes/modifying-methods-input-parameters/</link>
      <pubDate>Mon, 05 Aug 2019 18:27:30 +0000</pubDate>
      <guid>https://wittchen.io/notes/modifying-methods-input-parameters/</guid>
      <description>&lt;p&gt;During maintenance of the legacy projects, I sometimes see constructions like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;appendFooter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Report&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;populate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I even saw something like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;populate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Target&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What is wrong with these statements?&lt;/p&gt;
&lt;p&gt;They&amp;rsquo;re using so called &lt;em&gt;output argument&lt;/em&gt;. In the examples above, we&amp;rsquo;re passing a &lt;code&gt;report&lt;/code&gt; or &lt;code&gt;data&lt;/code&gt; variable, which usually are going to be global variables available in the scope of the whole class. These methods takes them as an argument and modify them. This idea comes from pre-OOP times and could be applied in programs written in C. Nevertheless, in Java, this technique should be avoided and is considered as a &lt;strong&gt;bad practice&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Get rid of the list null-checks</title>
      <link>https://wittchen.io/notes/get-rid-of-the-list-null-checks/</link>
      <pubDate>Sun, 28 Jul 2019 23:18:43 +0000</pubDate>
      <guid>https://wittchen.io/notes/get-rid-of-the-list-null-checks/</guid>
      <description>&lt;p&gt;During development of the legacy Java applications, we still have to deal with &lt;code&gt;null&lt;/code&gt;. It&amp;rsquo;s possible to avoid it completly when we&amp;rsquo;re designing application from the scratch, applying proper code constructions, static code analysis and we&amp;rsquo;re consistent during code reviews. Nevertheless in majority of the cases we will encounter &lt;code&gt;null&lt;/code&gt; in daily projects. We may even expect them in the method inputs and we have to be prepared for it. With the functional programming in Java we can deal with them in quite elegant way, but I often see people are not using features available nowadays.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arch Linux - installation notes no. 2 (GUI and utils)</title>
      <link>https://wittchen.io/notes/arch-install-notes-gui-and-utils/</link>
      <pubDate>Sat, 27 Jul 2019 09:31:30 +0000</pubDate>
      <guid>https://wittchen.io/notes/arch-install-notes-gui-and-utils/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In my &lt;a href=&#34;https://wittchen.io/arch-install-notes&#34;&gt;previous article&lt;/a&gt; I roughly described Arch Linux installation process. After going through whole process, we will end up with clean terminal without any graphical environment etc. In most cases, we will need it on the desktop.&lt;/p&gt;
&lt;h2 id=&#34;desktop-environment-de--windows-manager-wm&#34;&gt;Desktop Environment (DE) / Windows Manager (WM)&lt;/h2&gt;
&lt;p&gt;There are two main types of the Linux graphical environments for desktop:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Window Managers&lt;/li&gt;
&lt;li&gt;Desktop Environments&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Window Managers are much simpler, require a lot of configuration, learning how to use them and you see all windows at once. Moreover, usually you can use them without a mouse and mouse is useless most of the time because you cannot drag and drop windows. Once you master it, working with Window Manager can be very efficient. Example of popular Window Manager is &lt;a href=&#34;https://i3wm.org/&#34;&gt;i3&lt;/a&gt;. This environments are also lightweight. On the other hand, we have Desktop Environments. They&amp;rsquo;re full of features, windows can be stacked one on another and you can drag and drop them. Several Desktop Environments are extensible through plugins. These kind of graphical interfaces are known to majority of computer users. You can see them on Windows or macOS. Examples of the popular Linux Desktop Environments are &lt;a href=&#34;https://www.gnome.org/&#34;&gt;Gnome&lt;/a&gt;, &lt;a href=&#34;https://xfce.org/&#34;&gt;Xfce&lt;/a&gt; and &lt;a href=&#34;https://kde.org/&#34;&gt;KDE&lt;/a&gt;. Of course, mentioned Window Managers and Desktop Environments are not the only avaiable. There are more. I just mentioned these because I&amp;rsquo;ve heard about them or tried them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arch Linux - installation notes</title>
      <link>https://wittchen.io/notes/arch-install-notes/</link>
      <pubDate>Wed, 24 Jul 2019 23:59:20 +0000</pubDate>
      <guid>https://wittchen.io/notes/arch-install-notes/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;For a long time, I was considering switching from Ubuntu do Arch Linux distribution, but I didn&amp;rsquo;t have enough knowledge, time and energy to do this. I definitely knew it requires some specific knowledge and manual steps to perform. I also didn&amp;rsquo;t wat to spend too much time on reading the documentation. Moreover, I know that sometimes I could have specific issues related to my hardware, which are not listed in documentation and I have to deal with them on my own. Due to these facts I was discouraged to install Arch. Recently, I found awesome video about &lt;a href=&#34;https://www.youtube.com/watch?v=4PBqpX0_UOc&#34;&gt;Full Arch Linux Install&lt;/a&gt; by &lt;a href=&#34;https://www.youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA&#34;&gt;Luke Smith&lt;/a&gt; where everything is explained very clearly in each step. I watched it one time without doing anything and then, watched it next time performing all the steps described there. I had a few issues related to my hardware and BIOS, but I managed to install Arch on my ThinkPad T470s thanks to this video. During the installation, I made a few notes for myself for the future possible installations. Maybe you&amp;rsquo;ll find them useful too. The whole process is actually simpler than I thought. It just requires some practical knowledge about Linux, patience and &amp;ldquo;can do&amp;rdquo; attitude. I divided this article into steps and sub-steps, which are required to perform the installation. Please, keep in mind the fact that in the end of the installation, we will have an empty command prompt with plain OS without any GUI and we will have to install the graphical environment from the terminal. It will not be covered in this article, but I think, I&amp;rsquo;ll cover it in another one. Of course, this article contains just my notes, which help me understand everything well because and I like documenting this kind of things for the future. If you searching for Arch installation guide, I recommend you to see linked video or an &lt;a href=&#34;https://wiki.archlinux.org/index.php/Installation_guide&#34;&gt;official Arch installation guide&lt;/a&gt; in Arch Wiki. This article can be additional resource to this stuff.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zen of the Java library release process</title>
      <link>https://wittchen.io/notes/zen-of-java-library-release-process/</link>
      <pubDate>Sat, 08 Jun 2019 10:58:10 +0000</pubDate>
      <guid>https://wittchen.io/notes/zen-of-java-library-release-process/</guid>
      <description>&lt;p&gt;In my &lt;a href=&#34;https://wittchen.io/publishing-jar-aar-to-maven-central/&#34;&gt;previous article&lt;/a&gt; I published information about publishing JAR/AAR library to the Maven Central Repository. A few steps of that process were automated, but a few of them were still manual. I mean closing and release process which had to be done by manual clicking on the Sonatype website. Fortunately, it&amp;rsquo;s possible to automate it. In order to do that, I used &lt;a href=&#34;https://github.com/Codearte/gradle-nexus-staging-plugin&#34;&gt;gradle-nexus-staging-plugin&lt;/a&gt; developed by &lt;a href=&#34;https://github.com/Codearte&#34;&gt;Codearte&lt;/a&gt;. Thanks to this plugin I could get rid of the remaining manual steps left in the release process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Publishing a JAR/AAR to the Maven Central</title>
      <link>https://wittchen.io/notes/publishing-jar-aar-to-maven-central/</link>
      <pubDate>Fri, 24 May 2019 19:18:27 +0000</pubDate>
      <guid>https://wittchen.io/notes/publishing-jar-aar-to-maven-central/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;As a Java/JVM/Android developers we rely on the work of other people through frameworks and libraries. Many of them are open-source. Most of the developers are consumers of such projects. What if we would like to create our own library and distribute it to other developers? We can always create it and share a &lt;code&gt;*.jar&lt;/code&gt; or &lt;code&gt;*.aar&lt;/code&gt; file with others. Drawback of such solution is the fact that source of distribution may not be trusted. We also have problems with versioning. Consumers of the library have to constantly download and update their files. It&amp;rsquo;s much better to publish our library to Maven Central Repository and allow others to easily and seamlessly add it as an external dependency to &lt;code&gt;pom.xml&lt;/code&gt; file (in case of Maven) or &lt;code&gt;build.gradle&lt;/code&gt; file (in case of Gradle). In such case, dependency is managed by the appropriate build system and distributed via trusted source. This may be not easy for the first time that&amp;rsquo;s why I decided to collect information related to this topic in a single article. Let&amp;rsquo;s see how to do this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kyma meets CCV2 hackathon summary</title>
      <link>https://wittchen.io/notes/kyma-meets-ccv2-hackathon-summary/</link>
      <pubDate>Fri, 14 Dec 2018 14:34:01 +0000</pubDate>
      <guid>https://wittchen.io/notes/kyma-meets-ccv2-hackathon-summary/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I recently I had an opportunity to join &amp;ldquo;Kyma meets CCV2 Hackathon&amp;rdquo; in the &lt;a href=&#34;https://www.sap.com/poland/index.html&#34;&gt;SAP Labs Poland&lt;/a&gt; office in Gliwice. The goal of the hackathon was to create a simple project, which will use &lt;a href=&#34;https://github.com/kyma-project/kyma&#34;&gt;Kyma&lt;/a&gt; to integrate external services with the &lt;a href=&#34;https://cx.sap.com/en/products/commerce&#34;&gt;SAP Hybris Commerce Platform&lt;/a&gt;. CCV2 stands for &amp;ldquo;Commerce Cloud Version 2&amp;rdquo;, which are basically SAP Hybris Commerce solutions deployed on the MS Azure Cloud (that&amp;rsquo;s a long story described in a short way). I joined a team consisting of people from a few different departments in the office, so we didn&amp;rsquo;t actually know each other before the event. We decided to create a simple application consisting of a few microservices, which will send an e-mail with a promotional link to the user once he or she add something to the cart in the on-line shop. After clicking on the link sent via the e-mail, user will be redirected to the front-end application, where he or she has to click on the button as many times as possible in a given period of time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Brain-Computer Interfaces - Science Fiction or Reality?</title>
      <link>https://wittchen.io/notes/bci-sci-fi-or-reality-oredev-2018/</link>
      <pubDate>Wed, 21 Nov 2018 21:59:06 +0000</pubDate>
      <guid>https://wittchen.io/notes/bci-sci-fi-or-reality-oredev-2018/</guid>
      <description>&lt;p&gt;Recently, I had an opportunity to speak at the software development conference abroad for the first time. I visited Malmö in Sweden and gave a talk during the &lt;a href=&#34;http://oredev.org/&#34;&gt;Øredev&lt;/a&gt; 2018 conference. The main theme of the conference was Deus Ex Machina, so I decided to adapt to this topic and prepared presentation about Brain-Computer Interfaces, which is my interest since the end of my studies at the Silesian University of Technology where I wrote a Master Thesis about similar topic. Before the conference, I prepared the same presentation in Polish during the SAP Lunch Talks for the colleagues from my company in Gliwice, Poland.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a fat AAR</title>
      <link>https://wittchen.io/notes/creating-fat-aar/</link>
      <pubDate>Tue, 02 Oct 2018 00:01:31 +0000</pubDate>
      <guid>https://wittchen.io/notes/creating-fat-aar/</guid>
      <description>&lt;p&gt;I recently wrote a new library called &lt;a href=&#34;https://github.com/pwittchen/neurosky-android-sdk&#34;&gt;NeuroSky Android SDK&lt;/a&gt;. It&amp;rsquo;s used for writing Android apps using signals of the brain waves received from the NeuroSky MindWave Mobile headsets. Probably I&amp;rsquo;ll write a separate article about it because it&amp;rsquo;s quite interesting topic. This library uses ThinkGear library, which is distributed by the NeuroSky as a &lt;code&gt;*.jar&lt;/code&gt; file, so I couldn&amp;rsquo;t use it as a Gradle or Maven dependency in my project and I had to put this &lt;code&gt;*.jar&lt;/code&gt; file into the &lt;code&gt;lib&lt;/code&gt; directory and link it in the &lt;code&gt;build.gradle&lt;/code&gt; file. Moreover, I wanted to create a library, which can be added to the project as a single Gradle dependency without messing around with additional &lt;code&gt;*.jar&lt;/code&gt; files or custom configuration. Due to this fact, I decided to create a fat &lt;code&gt;*.aar&lt;/code&gt; file and deploy it to the Maven Central repository. For those who are not familar with Android, &lt;code&gt;*.aar&lt;/code&gt; is an Android version or &lt;code&gt;*.jar&lt;/code&gt; file, which can be used as library in the project. I didn&amp;rsquo;t want to reinvent the wheel, so I searched for the different solutions. Unfortunatey, a few of them didn&amp;rsquo;t work, but luckilly I&amp;rsquo;ve found what I wanted. It&amp;rsquo;s &lt;a href=&#34;https://github.com/Mobbeel/fataar-gradle-plugin&#34;&gt;fat AAR Gradle Plugin&lt;/a&gt; developed by &lt;a href=&#34;https://github.com/Mobbeel&#34;&gt;Mobbeel&lt;/a&gt; company.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Separate execution of unit and integration tests in Gradle</title>
      <link>https://wittchen.io/notes/separate-execution-of-unit-and-integration-tests-in-gradle/</link>
      <pubDate>Sat, 22 Sep 2018 16:51:47 +0000</pubDate>
      <guid>https://wittchen.io/notes/separate-execution-of-unit-and-integration-tests-in-gradle/</guid>
      <description>&lt;p&gt;During development process, we often write unit and integration tests. While unit tests verify corectness of the small pieces of code, integration tests verify software as a whole project and sometimes can treat it as a black box where concrete results are expected. During development of the REST API, we can write integration tests for such API with &lt;a href=&#34;https://github.com/rest-assured/rest-assured&#34;&gt;REST Assured&lt;/a&gt;. Integration tests are usually slower, because they need to start the server and sometimes do other stuff. That&amp;rsquo;s why it&amp;rsquo;s good to separate their execution from regular unit tests. On the CI server we can even have separate job for them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Excluding generated code from JaCoCo report</title>
      <link>https://wittchen.io/notes/excluding-generated-code-from-jacoco-report/</link>
      <pubDate>Tue, 18 Sep 2018 20:07:30 +0000</pubDate>
      <guid>https://wittchen.io/notes/excluding-generated-code-from-jacoco-report/</guid>
      <description>&lt;p&gt;I recently wrote a simple java app with Dagger 2 as a DI container and Gradle as a build system. I wanted to generate unit test coverage report for this app, so I used Jacoco.&lt;/p&gt;
&lt;p&gt;In my &lt;code&gt;build.gradle&lt;/code&gt; file I configured JaCoCo as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gradle&#34; data-lang=&#34;gradle&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plugins&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;jacoco&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;jacocoTestReport&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;reports&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;xml&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, I could type:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;./gradlew test jacocoTestReport
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Report was generated in &lt;code&gt;build/reports/jacoco/&lt;/code&gt; directory. I noticed that report includes Java code generated by Dagger during the compilation. I didn&amp;rsquo;t want to include it in the report because it doesn&amp;rsquo;t really make any sense to write unit tests for generated code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing exceptions</title>
      <link>https://wittchen.io/notes/testing-exceptions/</link>
      <pubDate>Tue, 04 Sep 2018 19:49:26 +0000</pubDate>
      <guid>https://wittchen.io/notes/testing-exceptions/</guid>
      <description>&lt;p&gt;In Java, we can test exceptions via unit tests in a few different ways. In this article, I&amp;rsquo;ll present common methods of doing that. Nevertheless, I suppose we there are different methods as well.&lt;/p&gt;
&lt;p&gt;First method is basically wrapping a method call with try-catch block, assigning an exception to a variable and performing appropriate assertion. In these examples, I&amp;rsquo;m using &lt;a href=&#34;https://junit.org&#34;&gt;JUnit&lt;/a&gt; for unit tests and &lt;a href=&#34;https://google.github.io/truth/&#34;&gt;Truth&lt;/a&gt; for assertions.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@Test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;shouldTestExceptionWithTryCatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Exception&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;caughtException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;throw&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RuntimeExcetpion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Exception&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;caughtException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertThat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;caughtException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;hasMessageThat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;isEqualTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the second method, we can define a type of the thrown exception within the &lt;code&gt;@Test&lt;/code&gt; annotation. It&amp;rsquo;s useful approach when we don&amp;rsquo;t want to test exception details like message and we care only about the type.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing my first library in Kotlin</title>
      <link>https://wittchen.io/notes/writing-my-first-library-in-kotlin/</link>
      <pubDate>Sun, 19 Aug 2018 10:24:19 +0000</pubDate>
      <guid>https://wittchen.io/notes/writing-my-first-library-in-kotlin/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Recently, I decided to create a tiny Android library called &lt;a href=&#34;https://github.com/pwittchen/RxBattery&#34;&gt;RxBattery&lt;/a&gt;, which is monitoring battery state of the device with RxJava and RxKotlin. I created a few Java and Android libraries already and this time I decided to use &lt;a href=&#34;https://kotlinlang.org/&#34;&gt;Kotlin&lt;/a&gt; programming language instead of Java to learn something new and write something more complicated than &amp;ldquo;Hello World&amp;rdquo; app. Here are my observations.&lt;/p&gt;
&lt;h2 id=&#34;build-system&#34;&gt;Build System&lt;/h2&gt;
&lt;p&gt;I used &lt;a href=&#34;https://gradle.org/&#34;&gt;Gradle&lt;/a&gt; to build the project. It&amp;rsquo;s popular for JVM and Android apps nowadays and works fine with Kotlin. I just needed to add Kotlin Gradle Plugin and Kotlin STD Lib to the &lt;code&gt;/library/build.gradle&lt;/code&gt; file to the &lt;code&gt;classpath&lt;/code&gt; dependencies in &lt;code&gt;buildscript&lt;/code&gt; section. I also needed to define &lt;code&gt;sourceSets&lt;/code&gt; to allow IntelliJ and Android Studio recognize directories with sources.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Solving problems with AVD and KVM on Linux</title>
      <link>https://wittchen.io/notes/solving-problems-with-avd-and-kvm-on-linux/</link>
      <pubDate>Thu, 16 Aug 2018 22:01:06 +0000</pubDate>
      <guid>https://wittchen.io/notes/solving-problems-with-avd-and-kvm-on-linux/</guid>
      <description>&lt;p&gt;I installed Android SDK and Android Studio on my new ThinkPad T470s with Ubuntu Linux 18.04.1 LTS. As usual, I wanted to create a new Android phone emulator called AVD (Android Virtual Device). I was able to create a new device, but unfortunately I encoutered problems. After opening AVD window, I saw the error message&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;devkvm-is-not-found&#34;&gt;/dev/kvm is not found&lt;/h2&gt;
&lt;p&gt;KVM (Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V). In order to enable KVM, I needed to restart the computer and enter the BIOS by pressing &lt;code&gt;F1&lt;/code&gt; key before the system boot. Next, I entered &lt;code&gt;Security&lt;/code&gt; tab and enabled &lt;code&gt;Intel Virtualization Technology&lt;/code&gt; and &lt;code&gt;Intel VT-d Feature&lt;/code&gt;. Now, I could press &lt;code&gt;F10&lt;/code&gt; to save, exit nad restart the computer. Unfortunately, that wasn&amp;rsquo;t the end of the story. I saw another error message&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Poor Man&#39;s Dropbox</title>
      <link>https://wittchen.io/notes/poor-mans-dropbox/</link>
      <pubDate>Sun, 12 Aug 2018 23:10:42 +0000</pubDate>
      <guid>https://wittchen.io/notes/poor-mans-dropbox/</guid>
      <description>&lt;h2 id=&#34;dropbox-abandons-linux-users&#34;&gt;Dropbox abandons Linux users&lt;/h2&gt;
&lt;p&gt;Recently, I&amp;rsquo;ve started receiving a notification from Dropbox desktop app on Linux that they&amp;rsquo;ll stop syncing my files in November. I couldn&amp;rsquo;t understand why. I&amp;rsquo;m using this service for some time and I find it really useful. Moreover, I want to backup several important files on the web server in case of my disk crashes or I&amp;rsquo;ll need to access them from another computer or mobile device. I googled this issue and found pretty long thread on the &lt;a href=&#34;https://www.dropboxforum.com/t5/Syncing-and-uploads/Dropbox-client-warns-me-that-it-ll-stop-syncing-in-Nov-why/td-p/290058&#34;&gt;Dropbox Forum&lt;/a&gt;. There&amp;rsquo;s also &lt;a href=&#34;https://www.reddit.com/r/linux/comments/966xt0/linux_dropbox_client_will_stop_syncing_on_any/&#34;&gt;ongoing discussion on reddit&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Different ways of squashing commits</title>
      <link>https://wittchen.io/notes/squashing-commits/</link>
      <pubDate>Sat, 21 Jul 2018 11:21:54 +0000</pubDate>
      <guid>https://wittchen.io/notes/squashing-commits/</guid>
      <description>&lt;p&gt;While creating a Pull Requests it&amp;rsquo;s good to squash all of our intermediate commits into one to avoid clutter in the git log, simplify analysis and allow for simple code revert when necessary.&lt;/p&gt;
&lt;h2 id=&#34;solution-1&#34;&gt;Solution #1&lt;/h2&gt;
&lt;p&gt;Some time ago I&amp;rsquo;ve found project &lt;a href=&#34;http://rebaseandsqua.sh/&#34;&gt;http://rebaseandsqua.sh/&lt;/a&gt; made by Jake Wharton. It&amp;rsquo;s really useful, handy and allows us to rebase and squash commits quite easily.&lt;/p&gt;
&lt;p&gt;We can just call:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl rebaseandsqua.sh | sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;then edit our commit messages and push the changes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Releasing ReactiveNetwork v. 1.0.0 (paying the technical debt)</title>
      <link>https://wittchen.io/notes/releasing-reactive-network-1/</link>
      <pubDate>Sun, 24 Jun 2018 23:39:18 +0000</pubDate>
      <guid>https://wittchen.io/notes/releasing-reactive-network-1/</guid>
      <description>&lt;p&gt;Today, I&amp;rsquo;ve released next version of my most popular open-source project - &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;ReactiveNetwork&lt;/a&gt;. I&amp;rsquo;ve released version &lt;code&gt;0.12.4&lt;/code&gt; for RxJava1.x and version &lt;code&gt;1.0.0&lt;/code&gt; for RxJava2.x. Please note, RxJava1.x is &lt;a href=&#34;https://github.com/ReactiveX/RxJava/releases/tag/v1.3.8&#34;&gt;no longer officially supported&lt;/a&gt; and I&amp;rsquo;m going to follow the same approach in my RxJava-based projects. It&amp;rsquo;s not the first release of this project, but I&amp;rsquo;m breaking the API and removing existing methods, so I decided to stick to proper versioning standard. I didn&amp;rsquo;t always do it properly in the past, but it&amp;rsquo;s never too late.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging Google Pixel 2</title>
      <link>https://wittchen.io/notes/debugging-pixel2/</link>
      <pubDate>Wed, 20 Jun 2018 23:05:56 +0000</pubDate>
      <guid>https://wittchen.io/notes/debugging-pixel2/</guid>
      <description>&lt;p&gt;I recently destroyed my good old Nexus 6 phone. It&amp;rsquo;s still working, but display screen is broken. Due to this fact, I&amp;rsquo;ve had an excuse to buy new Pixel 2 phone. It&amp;rsquo;s pretty expansive, but its quality is really good. As usual, I wanted to debug an app on this device and encountered problem related to device permissions.&lt;/p&gt;
&lt;p&gt;Once I connected the phone, to my laptop and typed &lt;code&gt;adb devices&lt;/code&gt;, I&amp;rsquo;ve seen the following message:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Publishing Python package to PyPi</title>
      <link>https://wittchen.io/notes/publishing-python-package-to-pypi/</link>
      <pubDate>Sun, 08 Apr 2018 11:47:49 +0000</pubDate>
      <guid>https://wittchen.io/notes/publishing-python-package-to-pypi/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I have my own tiny Python project called &lt;a href=&#34;https://github.com/pwittchen/spotify-cli-linux&#34;&gt;spotify-cli-linux&lt;/a&gt;, which is (surprise!) command line interface for Spotify desktop app on Linux. Python is not my primary programming language and I work more with Java. Nevertheless, I find this language enjoyable and useful in many cases, so I try to learn something new about it from time to time. In the beginning, I&amp;rsquo;ve provided instructions how to install my Python script in the system via &lt;code&gt;curl&lt;/code&gt; and &lt;code&gt;wget&lt;/code&gt;, which is fine, but it&amp;rsquo;s not recommended and official way to do it. Moreover, people may be afraid of running shell scripts from remote resources on their machines. That&amp;rsquo;s why I decided to upload my project to &lt;a href=&#34;http://pypi.org/&#34;&gt;PyPi&lt;/a&gt;, which is The Python Package Index.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Avoiding merging master to master branch in Git</title>
      <link>https://wittchen.io/notes/avoiding-merging-master-to-master/</link>
      <pubDate>Sun, 25 Mar 2018 13:35:06 +0000</pubDate>
      <guid>https://wittchen.io/notes/avoiding-merging-master-to-master/</guid>
      <description>&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;
&lt;p&gt;If you are working with Git Version Control System, probably you have seen a commit messages in your git log like:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Merge branch &amp;#39;master&amp;#39; to &amp;#39;master&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;or something similar. You might have even pushed such commits! Don&amp;rsquo;t worry, so did I ;-).
In this article I&amp;rsquo;m going to explain why is it happenning and how to avoid it.&lt;/p&gt;
&lt;p&gt;Such situation happens when you performed changes locally and at the same time someone else performed changes on the same branch as well, commited and pushed them to the remote repository. When you are done with your changes, you committed everything and want to push changes. If there are no conflicts, Git wants you to synchronize local repository with the remote repository. That&amp;rsquo;s why you need to merge changes from the remote master branch into your local master branch. After that you can finally push your changes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deployment of the Java code to AWS Lambda</title>
      <link>https://wittchen.io/notes/deployment-of-the-java-code-to-aws-lambda/</link>
      <pubDate>Sun, 18 Mar 2018 16:50:02 +0000</pubDate>
      <guid>https://wittchen.io/notes/deployment-of-the-java-code-to-aws-lambda/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In the cloud computing era, companies start using services like Google Cloud Platform, Amazon Web Services or Microsoft Azure. We can hear about the term &amp;ldquo;Serverless&amp;rdquo;. It doesn&amp;rsquo;t mean that we don&amp;rsquo;t have any servers. It means that third-party services provide us server infsrastrucutre, monitoring and scaling capabilities, so we don&amp;rsquo;t have to care about that stuff by ourselves and we can focus on writing code. We have concepts like Backend as a Service (BaaS) and Funtion as a Service (FaaS). In BaaS we can configure whole backend infrastructure using third-party cloud services. In this case, we can have database, REST API and other services, which we need depending on our use case. In FaaS, we have just a tiny piece of code responsible for a single job, which we can take and deploy into the cloud. AWS Lambda is an example of FaaS and we&amp;rsquo;ll focus on it in this article.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing ReactiveBus</title>
      <link>https://wittchen.io/notes/introducing-reactive-bus/</link>
      <pubDate>Sun, 11 Mar 2018 20:02:45 +0000</pubDate>
      <guid>https://wittchen.io/notes/introducing-reactive-bus/</guid>
      <description>&lt;p&gt;Today, I&amp;rsquo;ve released my another tiny project. It&amp;rsquo;s a very simple implementation of Event Bus with RxJava 2 under the hood. This library is compatible with Java 1.7 or higher. I didn&amp;rsquo;t use Java 1.8 or 1.9 because I wanted to make it compatible with Android apps.&lt;/p&gt;
&lt;p&gt;You can use it as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Bus&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bus&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ReactiveBus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Disposable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;observer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;receive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;subscribe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Consumer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Event&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;accept&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Event&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// handle event here&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once, we created Event Bus object and our observer (or more precisely: disposable subscriber), we can start sending events:&lt;/p&gt;</description>
    </item>
    <item>
      <title>New blog, new system, new domain</title>
      <link>https://wittchen.io/notes/new-blog/</link>
      <pubDate>Sun, 04 Mar 2018 12:26:59 +0000</pubDate>
      <guid>https://wittchen.io/notes/new-blog/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve just finished migrating my personal website and blog from &lt;a href=&#34;https://wordpress.com&#34;&gt;Wordpress&lt;/a&gt; to &lt;a href=&#34;https://hexo.io/&#34;&gt;Hexo&lt;/a&gt;. I&amp;rsquo;ve been using Wordpress for more than 5 years and decided to check out something new. Hexo amazed me with its simplicity and ease of use. Probably this tool is more recognized around JavaScript developers, because it&amp;rsquo;s written in that language. I discovered it in the last month.&lt;/p&gt;
&lt;h2 id=&#34;features-of-hexo&#34;&gt;Features of Hexo&lt;/h2&gt;
&lt;h3 id=&#34;static-website-generator&#34;&gt;Static website generator&lt;/h3&gt;
&lt;p&gt;For a simple blog with static content I don&amp;rsquo;t really need dynamic website like Wordpress. Content of the articles changes quite rarely. I just generate static content and deploy it to the server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating generation of the on-line documentation for Java library</title>
      <link>https://wittchen.io/notes/automating-generation-of-the-on-line-documentation-for-java-library/</link>
      <pubDate>Sun, 11 Feb 2018 10:22:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/automating-generation-of-the-on-line-documentation-for-java-library/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In one of my open-source projects - &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;ReactiveNetwork&lt;/a&gt; I have a documentation in &lt;code&gt;README.md&lt;/code&gt; file and I have JavaDocs as well. This project is an Android library written in Java and built with Gradle. Moreover, I develop this project on two separate Git branches - one for RxJava1.x and another one for RxJava2.x. Similar convention is in the RxJava repository, so I followed it. After each release I publish documentation and JavaDocs on GitHub pages for both versions. It&amp;rsquo;s kind of boring and repeatable task, so I was wondering if there&amp;rsquo;s any way to automate it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quality Meetup no. 15 - Fixing a billion dollar mistake</title>
      <link>https://wittchen.io/notes/quality-meetup-15-fixing-a-billion-dollar-mistake/</link>
      <pubDate>Fri, 09 Feb 2018 00:46:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/quality-meetup-15-fixing-a-billion-dollar-mistake/</guid>
      <description>&lt;p&gt;On the 8th of February 2018, during &lt;a href=&#34;https://www.meetup.com/Quality-Meetup/events/247187036/&#34;&gt;Quality Meetup #15&lt;/a&gt;, I gave a presentation titled &amp;ldquo;Fixing a billion dollar mistake&amp;rdquo;. Tony Hoare introduced Null Reference w in ALGOL language in 1965. He calls this decision a &amp;ldquo;billion dollar mistake&amp;rdquo;. It was so easy to implement and probably it caused a loss of millions of dollars due to the mistakes done in the software over the 40 years. During the time, people came up with different ideas of solving that problem with software libraries, good programming practices, static code analysis and compile time code analysis. Moreover, we have new programming languages with null safety features. During the presentation I&amp;rsquo;ve shown how to deal with the null reference problem in the JVM projects no matter if it&amp;rsquo;s a greenfield solution or legacy code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Air quality monitoring script for Argos (Linux) and BitBar (macOS)</title>
      <link>https://wittchen.io/notes/air-quality-monitoring-script-for-argos-linux-and-bitbar-macos/</link>
      <pubDate>Fri, 29 Dec 2017 10:02:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/air-quality-monitoring-script-for-argos-linux-and-bitbar-macos/</guid>
      <description>&lt;p&gt;From some time, I wanted to create my own app, which will display some data in top panel in macOS or Gnome environment on Linux. I collected some resources about that and I knew that for macOS I need to write an app in Obj-C and for Gnome I need to write a plugin in JavaScript. In both cases it requires some ceremony and preparation. Recently I&amp;rsquo;ve found a great app for macOS called &lt;a href=&#34;https://getbitbar.com/&#34;&gt;BitBar&lt;/a&gt; (by the way it&amp;rsquo;s &lt;a href=&#34;https://github.com/matryer/bitbar&#34;&gt;open-source&lt;/a&gt;). BitBar allows to put anything to macOS menu bar (top panel) in no time! With this project creating top panel apps is simplified to the limit. Moreover, there&amp;rsquo;s another project called &lt;a href=&#34;https://extensions.gnome.org/extension/1176/argos/&#34;&gt;Argos&lt;/a&gt;, which does the same thing, but for Linux with Gnome (it&amp;rsquo;s an &lt;a href=&#34;https://github.com/p-e-w/argos&#34;&gt;open-source&lt;/a&gt; Gnome Extension). In both cases, we just need to create a shell script, put it into appropriate directory (in case of Argos, it&amp;rsquo;s &lt;code&gt;~/.config/argos/&lt;/code&gt; and in case of BitBar, we define it during the installation or first run) and then app displays our data automatically. We can also set refresh rate. E.g. if we want our script to be executed every 60 seconds, we can name it &lt;code&gt;script.60s.sh&lt;/code&gt;. We can also create more advanced scripts and more details can be found in BitBar and Argos documentation. In my case, I wanted to create a script, which reads &lt;code&gt;CAQI&lt;/code&gt; (Common Air Quality Index) in my current location based on &lt;a href=&#34;http://airly.eu/&#34;&gt;Airly&lt;/a&gt; sensors. Airly provides nice &lt;a href=&#34;https://airly.eu/en/api/&#34;&gt;API&lt;/a&gt;, which we can use in our projects. Please remember that most of the sensors are located in Poland. On my Ubuntu Linux with Gnome 3, I created a new script in the following path:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a Docker container with Alpine Linux including Java 8 and 9</title>
      <link>https://wittchen.io/notes/creating-a-docker-container-with-alpine-linux-including-java-8-and-9/</link>
      <pubDate>Wed, 27 Dec 2017 14:43:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/creating-a-docker-container-with-alpine-linux-including-java-8-and-9/</guid>
      <description>&lt;p&gt;Recently, I&amp;rsquo;ve decided to refresh my knowledge regarding &lt;a href=&#34;https://www.docker.com/&#34;&gt;Docker&lt;/a&gt; and created an image with &lt;a href=&#34;https://alpinelinux.org/&#34;&gt;Alpine Linux&lt;/a&gt; and Java 9, which can be a useful base for the future projects. I used Alpine as a base image because it became quite popular in the Docker world due to its simplicity and the fact that it&amp;rsquo;s pretty lightweight when we compare it to containers based on other Linux distributions. Pure Alpine Docker container has about 4.144 MB, what is really impressing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DroidCon Poland 2017 - Is your app really connected?</title>
      <link>https://wittchen.io/notes/droidcon-poland-2017-is-your-app-really-connected/</link>
      <pubDate>Sat, 02 Dec 2017 01:39:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/droidcon-poland-2017-is-your-app-really-connected/</guid>
      <description>&lt;p&gt;Yesterday, I gave a presentation about connectivity in the Android apps during the &lt;a href=&#34;http://droidcon.pl&#34;&gt;DroidCon Poland 2017&lt;/a&gt; Conference in Kraków.&lt;/p&gt;
&lt;p&gt;Below, you can see slides from this presentation.&lt;/p&gt;


&lt;script async class=&#34;speakerdeck-embed&#34; data-id=&#34;2a3a400c94c1497d8a2343e269c7d1ce&#34; data-ratio=&#34;1.77777777777778&#34; src=&#34;http://speakerdeck.com/assets/embed.js&#34;&gt;&lt;/script&gt;


&lt;p&gt;&lt;a href=&#34;https://speakerdeck.com/pwittchen/is-your-app-really-connected-1&#34;&gt;View slides on SpeakerDeck&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s also tweet related to this presentation from &lt;a href=&#34;https://twitter.com/droidconkr&#34;&gt;DroidCon Kraków&lt;/a&gt;:&lt;/p&gt;


&lt;blockquote class=&#34;twitter-tweet&#34; data-lang=&#34;en&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;Piotr Wittchen tells us about how we can we keep the track of network &amp;#x1f30e; or Internet connectivity changes in our app &amp;#x1f4f1;&amp;#x1f198;&amp;#x1f642; &lt;a href=&#34;https://t.co/7YGGzNJeb2&#34;&gt;pic.twitter.com/7YGGzNJeb2&lt;/a&gt;&lt;/p&gt;&amp;mdash; droidcon Kraków (@droidconkr) &lt;a href=&#34;https://twitter.com/droidconkr/status/936889529566347265?ref_src=twsrc%5Etfw&#34;&gt;December 2, 2017&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;


&lt;p&gt;I hope, you enjoyed it. Any kind of feedback is welcome (in the comments below this article or via e-mail). Don&amp;rsquo;t forget to check &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;ReactiveNetwork&lt;/a&gt; library I mentioned during the presentation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple reactive HTTP client and server with RxJava, Vert.x and Android</title>
      <link>https://wittchen.io/notes/simple-reactive-http-client-and-server-with-rxjava-vertx-and-android/</link>
      <pubDate>Thu, 09 Nov 2017 22:30:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/simple-reactive-http-client-and-server-with-rxjava-vertx-and-android/</guid>
      <description>&lt;p&gt;During &lt;a href=&#34;https://www.facebook.com/Hack.your.Career/&#34;&gt;Hack Your Career&lt;/a&gt; event at the Silesian University of Technology, I&amp;rsquo;ve prepared a presentation titled &lt;a href=&#34;https://speakerdeck.com/pwittchen/reactive-programming-efficient-server-applications&#34;&gt;Reactive Programming - Efficient Server Applications&lt;/a&gt; with a colleague from work. Arek told about theory of Reactive Programming, shown basic concepts, data types and a few examples in the code. During my part of the presentation, I&amp;rsquo;ve wrote a very simple server and client in Java (9 on the server, 7 on the client) with &lt;a href=&#34;http://vertx.io/&#34;&gt;Vert.x&lt;/a&gt; (&lt;a href=&#34;http://vertx.io/docs/vertx-core/java/&#34;&gt;Core&lt;/a&gt; and &lt;a href=&#34;http://vertx.io/docs/vertx-rx/java2/&#34;&gt;Rx&lt;/a&gt;), &lt;a href=&#34;https://github.com/ReactiveX/RxJava&#34;&gt;RxJava 2&lt;/a&gt;, &lt;a href=&#34;https://github.com/square/okhttp&#34;&gt;OkHttp 3&lt;/a&gt;, &lt;a href=&#34;https://www.android.com/&#34;&gt;Android&lt;/a&gt; and &lt;a href=&#34;https://github.com/ReactiveX/RxAndroid/&#34;&gt;RxAndroid&lt;/a&gt;. Presentation was targeted mainly to the university students with no experience with reactive programming, but it was an open event and anyone could attend it. Below, we can see a very simple code snippet showing how to create a reactive HTTP server with Vert.x. We can create a stream of requests, make &lt;code&gt;Flowable&lt;/code&gt; out of it, apply any kind of RxJava 2 operator including backpressure handling and subscribe the stream. Moreover, we can also reactively start the server with &lt;code&gt;rxListen(int port)&lt;/code&gt; method. This is just a basic example, where will be sending request to the only one endpoint. In the case, when we want to handle more endpoints, we can use &lt;a href=&#34;http://vertx.io/docs/vertx-web/java/&#34;&gt;vertx-web&lt;/a&gt; library and design REST API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 ways to attend expensive IT conferences for (almost) free</title>
      <link>https://wittchen.io/notes/5-ways-to-attend-expansive-it-conferences-for-almost-free/</link>
      <pubDate>Thu, 02 Nov 2017 20:02:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/5-ways-to-attend-expansive-it-conferences-for-almost-free/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In the past months, I&amp;rsquo;ve attended a few conferences and meetups related to IT. I also plan to attend a few more in the last quarter of the year as a speaker. I&amp;rsquo;d like to show you a few tips, which can encourage you to attend such events, be more involved in them and spend some time away from your desk ;-). If you are working in a software company, in the most cases you could treat going for a conference as a non-customer facing business trip, so your regular days off will be safe and can be used for your personal plans and holidays :-). &lt;strong&gt;I tried all of the methods described in this article&lt;/strong&gt; both in Poland and abroad, so I can tell you they&amp;rsquo;re confirmed in practice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Meet and Code 2017 - &#34;Git – tips &amp; tricks&#34; presentation</title>
      <link>https://wittchen.io/notes/git-tips-and-tricks-meet-and-code-gliwice/</link>
      <pubDate>Sat, 21 Oct 2017 10:36:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/git-tips-and-tricks-meet-and-code-gliwice/</guid>
      <description>&lt;p&gt;Recently, during &lt;a href=&#34;http://media30.pl/2017/10/06/meet-and-code-spotkajmy-sie-w-gliwicach/&#34;&gt;Meet &amp;amp; Code&lt;/a&gt; event organized by &lt;a href=&#34;http://media30.pl/&#34;&gt;Media 3.0&lt;/a&gt; and &lt;a href=&#34;https://www.hybris.com/en/&#34;&gt;SAP Hybris&lt;/a&gt;, I&amp;rsquo;ve gave a talk for university and high-school students about basics of Git. Presentation was titled &lt;a href=&#34;https://speakerdeck.com/pwittchen/git-tips-and-tricks&#34;&gt;Git - tips &amp;amp; tricks&lt;/a&gt; and was organized at the Silesian Univeristy of Technology in the AEI Department where I was studying a few years ago. Presentation covered quite essential usage of Git, which could be helpful for people who are planning to learn it from the scratch. Nevertheless, in the talk I included a few tips, which could be applied even by more advanced users in their daily work. You can view slides from this presentation below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JDD 2017 - Get ready for java.util.concurrent.Flow! - summary</title>
      <link>https://wittchen.io/notes/jdd-2017-juc-flow-presentation-summary/</link>
      <pubDate>Thu, 05 Oct 2017 16:19:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/jdd-2017-juc-flow-presentation-summary/</guid>
      <description>&lt;p&gt;Recently on the &lt;a href=&#34;http://jdd.org.pl&#34;&gt;JDD 2017&lt;/a&gt; conference, I gave a presentation regarding introduction to Reactive Streams standard in Java 9. I also talked about existing implementations of this standard with the strongest focus on RxJava2 and created simple Reactive Streams implementation in pure Java 9 during the presentation. Below, you can find slides from this talk.&lt;/p&gt;



&lt;script async class=&#34;speakerdeck-embed&#34; data-id=&#34;93c73ed4eaae4201a41d85bb381d1bb4&#34; data-ratio=&#34;1.77777777777778&#34; src=&#34;//speakerdeck.com/assets/embed.js&#34;&gt;&lt;/script&gt;



&lt;p&gt;&lt;a href=&#34;https://speakerdeck.com/pwittchen/get-ready-for-java-dot-util-dot-concurrent-dot-flow&#34;&gt;View presentation on SpeakerDeck&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Code snippets shown during this presentation are available at &lt;a href=&#34;https://github.com/pwittchen/java-flow-experiments&#34;&gt;https://github.com/pwittchen/java-flow-experiments&lt;/a&gt;. I have done a tiny live coding session during this talk. Luckily, everything went fine, the code was compiled and executed without errors. Everything I&amp;rsquo;ve done during this presentation and additional exploratory unit tests could be found in this repository so you can check it out if you&amp;rsquo;re interested.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrating ErrorProne and NullAway with an Android project</title>
      <link>https://wittchen.io/notes/integrating-nullaway-with-an-android-project/</link>
      <pubDate>Fri, 15 Sep 2017 18:39:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/integrating-nullaway-with-an-android-project/</guid>
      <description>&lt;p&gt;Recently, with the &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork/pull/226&#34;&gt;remote help of guys from Uber in California&lt;/a&gt;, I integrated &lt;a href=&#34;https://github.com/uber/NullAway/&#34;&gt;NullAway&lt;/a&gt; and &lt;a href=&#34;https://github.com/google/error-prone&#34;&gt;ErrorProne&lt;/a&gt; with the &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;one of my open-source Android projects&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;what-is-nullaway&#34;&gt;What is NullAway?&lt;/h2&gt;
&lt;p&gt;Basically, it&amp;rsquo;s &lt;em&gt;a tool to help eliminate NullPointerExceptions (NPEs) in your Java code&lt;/em&gt;. It detects situations where NPE could occur at the compile time. Let&amp;rsquo;s have a look at the following code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;NullAway will find out that we&amp;rsquo;re passing &lt;code&gt;null&lt;/code&gt; and we&amp;rsquo;ll get appropriate error message:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building and running SAP Hybris Commerce Platform via Gradle</title>
      <link>https://wittchen.io/notes/building-sap-hybris-commerce-suite-via-gradle/</link>
      <pubDate>Fri, 01 Sep 2017 18:25:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/building-sap-hybris-commerce-suite-via-gradle/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I really like &lt;a href=&#34;https://gradle.org/&#34;&gt;Gradle&lt;/a&gt; build system for JVM apps. It has flexibility like &lt;a href=&#34;http://ant.apache.org/&#34;&gt;Ant&lt;/a&gt; and great dependency management capabilities like &lt;a href=&#34;https://maven.apache.org/&#34;&gt;Maven&lt;/a&gt;. It addition, it doesn&amp;rsquo;t use XML notation, but Groovy programming language, so builds configurations are simple, concise, easier to read and easier to create. In my opinion, Gradle is truly modern build system for JVM apps. Nevertheless, there are projects, which are pretty old and use older systems like Ant. For example, all Hybris projects are based on Ant. Moreover, they have their custom setup and configurations, internal extensions system, etc. I was wondering if it&amp;rsquo;s possible to migrate Hybris Platform build from Ant to Gradle. That&amp;rsquo;s why I created a simple Proof of Concept.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing ReactiveAirplaneMode</title>
      <link>https://wittchen.io/notes/introducing-reactive-airplane-mode/</link>
      <pubDate>Tue, 15 Aug 2017 19:28:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/introducing-reactive-airplane-mode/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m continuing &lt;em&gt;Rxfication&lt;/em&gt; of the Android. Recently I released brand new library called &lt;a href=&#34;https://github.com/pwittchen/ReactiveAirplaneMode&#34;&gt;&lt;strong&gt;ReactiveAirplaneMode&lt;/strong&gt;&lt;/a&gt;. As you may guess, it allows listening Airplane mode on Android device with RxJava observables. A usual I&amp;rsquo;ve hidden all implementation details, BroadcastReceivers and rest of the Android related stuff behind RxJava abstraction layer, so API is really simple. Just take a look on that:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ReactiveAirplaneMode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;observe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;subscribeOn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Schedulers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;observeOn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AndroidSchedulers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;mainThread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;subscribe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isOn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;textView&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Airplane mode on: %s&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isOn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the code above &lt;strong&gt;subscriber will be notified only when airplane mode changes&lt;/strong&gt;. If you want to &lt;strong&gt;read airplane mode and then listen to it&lt;/strong&gt;, you can use the following method:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Tmux plugins with Tpm</title>
      <link>https://wittchen.io/notes/using-tmux-with-tpm/</link>
      <pubDate>Mon, 07 Aug 2017 19:31:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/using-tmux-with-tpm/</guid>
      <description>&lt;p&gt;Recently, I decided to organize my Unix &lt;a href=&#34;https://github.com/pwittchen/dotfiles&#34;&gt;dotfiles&lt;/a&gt; in a better way. I had a few custom scripts I used in my Tmux bottom bar. I kept these scripts in &lt;code&gt;.scripts&lt;/code&gt; directory and during installation or upgrade of my personal configuration, &lt;a href=&#34;https://github.com/pwittchen/dotfiles/blob/master/install.sh&#34;&gt;&lt;code&gt;install.sh&lt;/code&gt;&lt;/a&gt; script was copying them from &lt;code&gt;.scripts&lt;/code&gt; directory to &lt;code&gt;/usr/local/bin/&lt;/code&gt; directory. I wanted to make this configuration more solid and consistent, so I decided to transform these scripts into tmux plugins managed by &lt;a href=&#34;https://github.com/tmux-plugins/tpm&#34;&gt;tpm&lt;/a&gt;. I was already using a few plugins like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Releasing ReactiveNetwork v. 0.11.0</title>
      <link>https://wittchen.io/notes/reactivenetwork-v-0110-walled-garden/</link>
      <pubDate>Sun, 06 Aug 2017 06:38:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/reactivenetwork-v-0110-walled-garden/</guid>
      <description>&lt;p&gt;In the latest release of &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;ReactiveNetwork&lt;/a&gt; library, I focused on &lt;a href=&#34;http://searchsecurity.techtarget.com/definition/walled-garden&#34;&gt;Walled Garden&lt;/a&gt; AKA Great Firewall support during checking Internet connectivity. There are countries with limited Internet access like China and in such cases, pinging commonly known host like &lt;a href=&#34;https://www.google.com&#34;&gt;www.google.com&lt;/a&gt; may have different results than in other countries because it may be blocked. We may get false positive results because users will generally have an access to the Internet, but they don&amp;rsquo;t have access only to several websites. To solve that problem, I created &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork/blob/RxJava2.x/library/src/main/java/com/github/pwittchen/reactivenetwork/library/rx2/internet/observing/strategy/WalledGardenInternetObservingStrategy.java&#34;&gt;WalledGardenInternetObservingStrategy&lt;/a&gt; and made it default strategy for checking Internet connectivity inside the library. Of course, you can still use &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork/blob/RxJava2.x/library/src/main/java/com/github/pwittchen/reactivenetwork/library/rx2/internet/observing/strategy/SocketInternetObservingStrategy.java&#34;&gt;SocketInternetObservingStrategy&lt;/a&gt; if you want to. Detailed release notes are as follows: &lt;strong&gt;RxJava1.x&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Releasing ReactiveNetwork v. 0.10.0</title>
      <link>https://wittchen.io/notes/releasing-reactivenetwork-v-0100/</link>
      <pubDate>Thu, 20 Jul 2017 20:02:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/releasing-reactivenetwork-v-0100/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently released &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;&lt;strong&gt;ReactiveNetwork&lt;/strong&gt;&lt;/a&gt; library v. &lt;strong&gt;0.10.0&lt;/strong&gt; for RxJava1.x and RxJava2.x. ReactiveNetwork is an Android library listening network connection state and Internet connectivity with RxJava Observables, which I&amp;rsquo;m developing for approximately 2 years now. In this version, I&amp;rsquo;ve done a few bug fixes and added new features for RxJava2.x version. Below, you can find the release notes: &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork/releases/tag/v0.10.0&#34;&gt;&lt;strong&gt;Release for RxJava1.x&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bumped RxJava1 version to 1.3.0&lt;/li&gt;
&lt;li&gt;bumped test dependencies&lt;/li&gt;
&lt;li&gt;created Code of Conduct&lt;/li&gt;
&lt;li&gt;updated Kotlin version in sample apps&lt;/li&gt;
&lt;li&gt;added retrolambda to the sample Java app - issue &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork/issues/163&#34;&gt;#163&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fixed behavior of network observing in disconnected state - issue &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork/issues/159&#34;&gt;#159&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork/releases/tag/v0.10.0-rx2&#34;&gt;&lt;strong&gt;Release for RxJava2.x&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Release of prefser v. 2.1.0 with RxJava2 support</title>
      <link>https://wittchen.io/notes/release-of-prefser-210-with-rxjava2/</link>
      <pubDate>Mon, 19 Jun 2017 16:56:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/release-of-prefser-210-with-rxjava2/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently released new version of &lt;a href=&#34;https://github.com/pwittchen/prefser&#34;&gt;prefser&lt;/a&gt; library for Android. In case you don&amp;rsquo;t know, it&amp;rsquo;s a wrapper for Android SharedPreferences with object serialization and RxJava Observables. This version has the new artifact, which has codebase migrated to RxJava2.x. As usual, I kept backward compatibility with RxJava1.x. You can find more details about the project at &lt;a href=&#34;https://github.com/pwittchen/prefser&#34;&gt;https://github.com/pwittchen/prefser&lt;/a&gt;. If you want to use it in your mobile project, you need the following dependencies in the &lt;code&gt;build.gradle&lt;/code&gt; file:&lt;/p&gt;</description>
    </item>
    <item>
      <title>New reactive data types in RxJava2</title>
      <link>https://wittchen.io/notes/new-reactive-data-types-in-rxjava2/</link>
      <pubDate>Wed, 31 May 2017 17:49:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/new-reactive-data-types-in-rxjava2/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m still exploring reactive programming world and RxJava library. Recently, I&amp;rsquo;ve migrated a few of my open-source libraries from RxJava1 to RxJava2 and written yet another project in RxJava2 from the beginning. Nevertheless, I&amp;rsquo;m still learning this library and its concept. It&amp;rsquo;s very wide topic. In RxJava1 we simply had one reactive data type called &lt;code&gt;Observable&lt;/code&gt;. In RxJava2, we have more data types like &lt;code&gt;Observable&lt;/code&gt;, &lt;code&gt;Flowable&lt;/code&gt;, &lt;code&gt;Single&lt;/code&gt;, &lt;code&gt;Maybe&lt;/code&gt; &amp;amp; &lt;code&gt;Completable&lt;/code&gt;. In this article, I&amp;rsquo;ll briefly explain their purpose and tell you when to use which. The general idea behind these types is code semantics. We should tell consumer of our code, what he or she can expect from our API. Introducing more reactive data types can increase readability and stability of our code base.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing YaaS Java SDK</title>
      <link>https://wittchen.io/notes/introducing-yaas-java-sdk/</link>
      <pubDate>Sun, 28 May 2017 21:24:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/introducing-yaas-java-sdk/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In my company, there&amp;rsquo;s a concept of so-called &amp;ldquo;innovation day&amp;rdquo;. I have the possibility to &amp;ldquo;use&amp;rdquo; 1 innovation day per 2 development sprints. Last year, I used only 1 day due to the tight release schedule and a lot of work. Now, we are right after release, so I had time to take innovation day once again. I&amp;rsquo;ve decided to create &lt;a href=&#34;https://github.com/pwittchen/yaas-java-sdk&#34;&gt;&lt;strong&gt;YaaS Java SDK&lt;/strong&gt;&lt;/a&gt;. If you don&amp;rsquo;t know what the &lt;a href=&#34;http://yaas.io&#34;&gt;YaaS&lt;/a&gt; is, check out my previous article about basic usage of YaaS proxy for the microservice. In a few words, it&amp;rsquo;s a proxy for the microservices with authorization &amp;amp; monitoring capabilities, which allows using other services available on the YaaS market. SDK created by me is really simple, was created in a short period of time and does not cover all features of the YaaS. This SDK allows performing authorized requests to the microservices hidden behind YaaS proxy. Tech stack used for this project is as follows:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Releasing Prefser v. 2.0.7</title>
      <link>https://wittchen.io/notes/prefser-207/</link>
      <pubDate>Sun, 28 May 2017 20:48:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/prefser-207/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently released new version of &lt;a href=&#34;https://github.com/pwittchen/prefser&#34;&gt;Prefser&lt;/a&gt;. It&amp;rsquo;s a wrapper for Android SharedPreferences with object serialization and RxJava Observables. The new version number is &lt;a href=&#34;https://github.com/pwittchen/prefser/releases/tag/v2.0.7&#34;&gt;2.0.7&lt;/a&gt;. In this release, I performed mostly internal work not related to the external library API. Nevertheless, it&amp;rsquo;s important for the library development in the future. The following things were done:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;updated dependencies&lt;/li&gt;
&lt;li&gt;updated Gradle configuration&lt;/li&gt;
&lt;li&gt;migrated unit tests to Robolectric&lt;/li&gt;
&lt;li&gt;started executing unit tests on Travis CI&lt;/li&gt;
&lt;li&gt;added integration with codecov.io and coverage report&lt;/li&gt;
&lt;li&gt;extracted code related to accessors from the Prefser class (refactoring library internals)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Organizational work is done and now I&amp;rsquo;m ready for migration to RxJava2 in this project on a separate branch. I want to keep backward compatibility with RxJava1 as in my other projects. This update is planned for version 2.1.0. Stay tuned!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Joining lists of RxJava Observables</title>
      <link>https://wittchen.io/notes/joining-lists-of-rxjava-observables/</link>
      <pubDate>Mon, 15 May 2017 20:37:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/joining-lists-of-rxjava-observables/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://github.com/ReactiveX/RxJava&#34;&gt;RxJava&lt;/a&gt; we have a few operators for joining Observables. The most common are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://reactivex.io/documentation/operators/concat.html&#34;&gt;concat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://reactivex.io/documentation/operators/merge.html&#34;&gt;merge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://reactivex.io/documentation/operators/zip.html&#34;&gt;zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Take a look at the documentation in these links. It has &lt;strong&gt;interactive marble diagrams&lt;/strong&gt; showing how the operators work on the streams. You can move marbles along the lines and see how the output stream changes. It really helps to understand how it works. Code snippets in this article are based on RxJava 2.1.0 with JUnit 4.12 and Google Truth 0.32 for unit tests. Let&amp;rsquo;s say, we have the following Observables:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Emitting different observables conditionally</title>
      <link>https://wittchen.io/notes/emitting-different-rxjava-observables-depending-on-the-condition-with-flatmap/</link>
      <pubDate>Sun, 14 May 2017 21:44:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/emitting-different-rxjava-observables-depending-on-the-condition-with-flatmap/</guid>
      <description>&lt;p&gt;Sometimes, we may need to emit different RxJava Observables depending on the specific condition dynamically. Moreover, it&amp;rsquo;s good to do it right without breaking a chain (stream of Observables). We want to combine different Observables together and do not want to nest one subscription inside another subscription because this will lead us to &amp;ldquo;subscription hell&amp;rdquo; similar to &amp;ldquo;callback hell&amp;rdquo;. Luckily RxJava has mechanisms to deal with such problems. In this article, I&amp;rsquo;m basing my examples on RxJava 2.1.0. Let&amp;rsquo;s say we have two Observables:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basic code refactoring principles</title>
      <link>https://wittchen.io/notes/basic-code-refactoring-principles/</link>
      <pubDate>Fri, 05 May 2017 23:29:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/basic-code-refactoring-principles/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve recently read a book about &lt;em&gt;Test Driven Development&lt;/em&gt; by Kent Beck. It&amp;rsquo;s really good, presents the importance of the TDD and shows how to make a life of the software developer easier. In the TDD we follow &lt;em&gt;red-green-refactor&lt;/em&gt; process in which we create a failing unit test, then we fix it and refactor it to make code-base better. There&amp;rsquo;s no golden rule when to refactor or how to refactor code and each project is different, but there are a few principles we may follow when we want to improve our projects through refactoring.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monitoring usage of open-source projects</title>
      <link>https://wittchen.io/notes/monitoring-usage-of-oss/</link>
      <pubDate>Tue, 02 May 2017 19:51:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/monitoring-usage-of-oss/</guid>
      <description>&lt;p&gt;While developing open-source projects it&amp;rsquo;s important to monitor usage of them. Having that information we know on which projects we should concentrate the most and which are becoming more popular. In this short article, I&amp;rsquo;ll present you two tools, which can help you with that.&lt;/p&gt;
&lt;h2 id=&#34;github&#34;&gt;GitHub&lt;/h2&gt;
&lt;p&gt;On GitHub, each project has &amp;ldquo;Traffic&amp;rdquo; tab. After clicking on it, we can see how many visitors and unique visitors we have, we can also check how many project clones and unique clones were performed (including CI servers). Moreover, we can see referring sites for our projects. It&amp;rsquo;s useful information because we can check how people gather information about our project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basic usage of YaaS as a proxy for the microservice</title>
      <link>https://wittchen.io/notes/yaas-as-a-proxy-for-microservice/</link>
      <pubDate>Sun, 30 Apr 2017 22:45:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/yaas-as-a-proxy-for-microservice/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The company, where I currently work - &lt;a href=&#34;http://hybris.com&#34;&gt;SAP Hybris&lt;/a&gt; is developing a project called &lt;a href=&#34;https://www.yaas.io/&#34;&gt;YaaS&lt;/a&gt;, which is an abbreviation of Hybris as a Service. Unfortunately, this article is not sponsored yet :). What a pity :(. I just like to understand many things &amp;amp; how they work to see the bigger picture. Moreover, company strategy is to leverage YaaS and search for the new possibilities and use cases of this project. There are situations where delegating some work to a separate service makes sense so this knowledge may be useful even when we&amp;rsquo;re developing the monolithic enterprise applications. That&amp;rsquo;s why I wrote this article. I work in a completely different project - Enterprise Commerce Platform, where I&amp;rsquo;m the part of the Backoffice team. As you can read on the official website, &lt;em&gt;YaaS is a microservices ecosystem helping businesses to rapidly augment and build new, highly flexible solutions&lt;/em&gt;. It&amp;rsquo;s kind of marketing statement, which business people may like. Nevertheless, for developers, it&amp;rsquo;s just a bunch of buzzwords, which does not help you to understand this project. One of the aims of this article is to explain it in a simple and clear way. &lt;a href=&#34;http://yaas.io&#34;&gt;&lt;img alt=&#34;yaas - hybris as a service&#34; loading=&#34;lazy&#34; src=&#34;https://wittchen.io/posts/2017/yaas-as-a-proxy-for-microservice/yaas_header.jpg&#34;&gt;&lt;/a&gt; From &lt;strong&gt;the technical point of view&lt;/strong&gt;, YaaS gives you the following possibilities:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Facebook is making solutions to talk from the brain – so do I</title>
      <link>https://wittchen.io/notes/facebook-is-making-bci/</link>
      <pubDate>Sun, 23 Apr 2017 22:01:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/facebook-is-making-bci/</guid>
      <description>&lt;p&gt;During &lt;a href=&#34;https://www.fbf8.com/&#34;&gt;F8 Facebook Developers Conference 2017&lt;/a&gt;, Facebook revealed its plans for the nearest years. Among different stuff, &lt;a href=&#34;https://developers.facebook.com/videos/f8-2017/f8-2017-keynote-day-2/&#34;&gt;keynote from the day 2&lt;/a&gt; was especially interesting for me. Speakers talked about connectivity projects increasing access to the Internet across the globe, different methods of human-computer interaction, virtual reality, and last, but not least &lt;a href=&#34;https://en.wikipedia.org/wiki/Brain%E2%80%93computer_interface&#34;&gt;&lt;strong&gt;Brain-Computer Interface&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://wittchen.io/posts/2017/facebook-is-making-bci/facebook-brain-interface.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s super-interesting for me, because 4 years ago I wrote &lt;a href=&#34;https://wittchen.io/tags/polsl&#34;&gt;Master Thesis&lt;/a&gt; about Brain-Computer Interface for Mobile Devices at my university &amp;amp; published a few short articles about &lt;a href=&#34;https://wittchen.io/tags/bci&#34;&gt;Brain-Computer Interface&lt;/a&gt; on this blog. You can also download my &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.pwittchen.eeganalyzer&#34;&gt;EEG Analyzer&lt;/a&gt; Android app from Google Play Store. I also wrote another app called EEG Controller for communicating with the external world with brain and optionally with eye blinks. It wasn&amp;rsquo;t published. Maybe I&amp;rsquo;ll enhance and publish it in the future or I&amp;rsquo;ll create a better app for the similar thing. Of course, my apps are much simpler &amp;amp; less advanced than the Facebook plans, but still, both of them are aiming to solve similar problems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>3 Alternatives to Evernote</title>
      <link>https://wittchen.io/notes/3-alternatives-to-evernote/</link>
      <pubDate>Sun, 23 Apr 2017 17:47:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/3-alternatives-to-evernote/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been using &lt;a href=&#34;https://evernote.com&#34;&gt;Evernote&lt;/a&gt; for some time for taking longer notes, but it started to annoy me a little bit. The main drawback is lack of the Linux desktop app. I&amp;rsquo;m using this app on Android phone, Macbook (at work) and on Linux (at home). There are community apps like NixNote2, which is nice, but in my opinion it&amp;rsquo;s not good enough. Moreover, Evernote seems to have too many features, which distract me and I don&amp;rsquo;t really use most of them. A few of these features may be really helpful for some use cases, but not for mine. I need simpler &amp;amp; cleaner tool for taking basic personal notes, which is available on all operating systems. I&amp;rsquo;ve started searching for Evernote alternatives. Below you can find my types worth checking.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Transform Vim into efficient IDE</title>
      <link>https://wittchen.io/notes/transform-vim-into-efficient-ide/</link>
      <pubDate>Sun, 16 Apr 2017 19:32:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/transform-vim-into-efficient-ide/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Some time ago, I decided to learn Vim. A lot of people are afraid of this editor and they usually don&amp;rsquo;t want to know anything about it or just learn how to quit it. In my opinion, it&amp;rsquo;s good to learn it because after mastering the basics, we can work very efficiently. After some time of usage, we may even replace editors like Atom or Sublime Text with Vim. Moreover, Vim is default editor for a few Unix tools like Git, so it&amp;rsquo;s good to know how to use it when we accidentally open it. In addition, sometimes we have an access only to the terminal (e.g. via ssh) and we need to perform a task on the remote server, so we don&amp;rsquo;t have any possibility to use editors with GUI. In such cases, Vim is a perfect solution. Last, but not least - if you want to be a &lt;strong&gt;real&lt;/strong&gt; &lt;em&gt;h4x0r&lt;/em&gt;, you should know it (or at least its basics) ;-).&lt;/p&gt;</description>
    </item>
    <item>
      <title>ReactiveNetwork - release v. 0.9.0 with RxJava2.x support</title>
      <link>https://wittchen.io/notes/reactivenetwork-090-rxjava2/</link>
      <pubDate>Tue, 11 Apr 2017 06:04:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/reactivenetwork-090-rxjava2/</guid>
      <description>&lt;p&gt;This time, I upgraded my another reactive Android open-source project called &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;ReactiveNetwork&lt;/a&gt; to RxJava2.x. Many thanks goes to &lt;a href=&#34;https://github.com/tushar-acharya&#34;&gt;@tushar-acharya&lt;/a&gt; who performed initial migration to the newer version of RxJava. During migration, I&amp;rsquo;ve also created new package &lt;code&gt;rx2&lt;/code&gt; to avoid potential import conflicts during migration inside Android apps. Besides migration, I&amp;rsquo;ve updated sample apps, documentation &amp;amp; JavaDocs on Github pages. You can still use RxJava1.x version and it&amp;rsquo;s available on the branch with that name. To use brand new ReactiveNetwork compatible with RxJava2.x, add the following dependency to your &lt;code&gt;build.gradle&lt;/code&gt; file:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automate tile layouts creation in tmux with tmux-auto-pane</title>
      <link>https://wittchen.io/notes/tmux-auto-pane/</link>
      <pubDate>Sat, 08 Apr 2017 13:05:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/tmux-auto-pane/</guid>
      <description>&lt;p&gt;I just released &lt;a href=&#34;https://github.com/pwittchen/tmux-auto-pane&#34;&gt;tmux-auto-pane&lt;/a&gt;. It&amp;rsquo;s a tiny shell script for creating pre-defined tile layouts in &lt;a href=&#34;https://tmux.github.io/&#34;&gt;Tmux&lt;/a&gt; on Linux with &lt;a href=&#34;http://www.semicomplete.com/projects/xdotool&#34;&gt;xdotool&lt;/a&gt;. In our workflow, we often have some pre-defined pane configurations in a terminal. The project called &lt;code&gt;tmux-auto-pane&lt;/code&gt; helps to automate that process. It can save us some time and make us a bit more productive. We can call &lt;code&gt;tmux-auto-pane&lt;/code&gt; with one of the following parameters:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--help | -h   showing help
--1l1r        one left, one right
--1l2r        one left, two right
--2l1r        two left, one right
--1u1d        one up, one down
--1u2d        on up, two down
--2u1d        two up, one down
--4tiles      4 tiles, 1 in each corner
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;for example &lt;code&gt;tmux-auto-pane --4tiles&lt;/code&gt; will generate such layout:&lt;/p&gt;</description>
    </item>
    <item>
      <title>ReactiveBeacons - release of v. 0.6.0 with support for RxJava2</title>
      <link>https://wittchen.io/notes/reactivebeacons-060-rxjava2/</link>
      <pubDate>Mon, 03 Apr 2017 18:20:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/reactivebeacons-060-rxjava2/</guid>
      <description>&lt;p&gt;Thanks to &lt;a href=&#34;https://github.com/BugsBunnyBR&#34;&gt;@BugsBunnyBR&lt;/a&gt; I released new version of &lt;a href=&#34;https://github.com/pwittchen/ReactiveBeacons&#34;&gt;ReactiveBeacons&lt;/a&gt; library with the RxJava2.x support. It&amp;rsquo;s an Android library scanning BLE (Bluetooth Low Energy) beacons nearby with RxJava Observables. I also kept backward compatibility with RxJava1.x. Different versions of the libraries are located on the separate git branches. It&amp;rsquo;s a similar approach to original &lt;a href=&#34;https://github.com/ReactiveX/RxJava&#34;&gt;RxJava&lt;/a&gt; project. I have separate builds on Travis CI, separate artifacts and JavaDocs. Such approach generates more overhead, but in such case, RxJava1.x can be kept in a maintenance mode and RxJava2.x can be a subject of the future development. What has been done in this version?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Browsing directories with Vim</title>
      <link>https://wittchen.io/notes/browsing-dirs-with-vim/</link>
      <pubDate>Sun, 02 Apr 2017 19:04:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/browsing-dirs-with-vim/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m still learning Vim every day. At first, it looks quite hard and most of the people want to learn how to quit it and never use again. Nevertheless, when you learn some basics, you can be really productive. This editor has much more cool functionalities than just &lt;code&gt;:q&lt;/code&gt; shortcut ;-). Recently I discovered, you can use Vim not only for editing files but you can use it for browsing directories as well! Just go to any directory you want in terminal and type:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to make open-source projects, which people want to use</title>
      <link>https://wittchen.io/notes/how-to-make-open-source-projects-which-people-want-to-use/</link>
      <pubDate>Sat, 01 Apr 2017 17:22:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/how-to-make-open-source-projects-which-people-want-to-use/</guid>
      <description>&lt;p&gt;Today at &lt;a href=&#34;http://careercon.pl/konferencja/kariera-it-katowice-01-04-2017/&#34;&gt;Kariera IT&lt;/a&gt; conference in Katowice, Poland, I presented talk explaining &lt;strong&gt;how to make open-source projects, which people want to use&lt;/strong&gt; from my perspective. Below, you can find slides from my presentation. Thank you all for the attendance, interesting questions and organizers for inviting me. I hope you learned something new. Of course, any constructive feedback for this talk will be appreciated :).&lt;/p&gt;



&lt;script async class=&#34;speakerdeck-embed&#34; data-id=&#34;2df04d70e41647a89218b61b8dddb523&#34; data-ratio=&#34;1.77777777777778&#34; src=&#34;//speakerdeck.com/assets/embed.js&#34;&gt;&lt;/script&gt;



&lt;p&gt;Link: &lt;a href=&#34;https://speakerdeck.com/pwittchen/how-to-make-open-source-projects-which-people-want-to-use&#34;&gt;How to make open-source projects, which people want to use&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Handling different Android versions with strategy pattern</title>
      <link>https://wittchen.io/notes/handling-different-android-versions-with-strategy-pattern/</link>
      <pubDate>Sun, 26 Mar 2017 22:39:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/handling-different-android-versions-with-strategy-pattern/</guid>
      <description>&lt;p&gt;When we&amp;rsquo;re developing Android apps, we have to remember that different users have different versions of the Android OS. Unfortunately, not all of them has the newest version of the system and some of them have older devices with older systems. Some of these devices may be even unsupported because e.g. Google supports their devices like Nexus and Pixel for only 2 years. When we want to reach as many users as possible and make the app available for almost everyone, we have to handle different Android versions. One of the solutions for that problem is &lt;strong&gt;strategy design pattern&lt;/strong&gt; (it&amp;rsquo;s also called Policy in Domain-Driven Design). I&amp;rsquo;m developing an Android open-source library called &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;ReactiveNetwork&lt;/a&gt;, which is used for monitoring connectivity with the network in the system. Network monitoring strategies vary between different versions of Android and I wanted to choose an appropriate strategy for appropriate Android version. To do so, I&amp;rsquo;ve created &lt;code&gt;NetworkObservingStrategy&lt;/code&gt; interface:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Review your changes in the code before the commit</title>
      <link>https://wittchen.io/notes/review-your-changes-before-the-commit/</link>
      <pubDate>Sun, 26 Mar 2017 22:18:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/review-your-changes-before-the-commit/</guid>
      <description>&lt;p&gt;Most of the people use git as follows.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;they create a feature branch&lt;/li&gt;
&lt;li&gt;they make some changes&lt;/li&gt;
&lt;li&gt;they add all the changes: &lt;code&gt;git add -A&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;they commit changes: &lt;code&gt;git commit -m &amp;quot;I&#39;ve done changes&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;they push it: &lt;code&gt;git push&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There&amp;rsquo;s a problem with such approach. When we created a lot of changes, it may happen that we forgot to delete something and we pushed some garbage to the remote repository.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android design inspirations</title>
      <link>https://wittchen.io/notes/android-design-inspirations/</link>
      <pubDate>Sun, 19 Mar 2017 19:51:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/android-design-inspirations/</guid>
      <description>&lt;p&gt;When we are planning to create our next Android app, besides the codebase, it&amp;rsquo;s also good to plan its design, UI, and UX. Before doing that, we can take a look at some inspirations and work of other people to gather a few UI design patterns, inspirations, and ideas. Good resource of such inspirations is &lt;a href=&#34;http://androidniceties.tumblr.com&#34;&gt;&lt;strong&gt;Android Niceties&lt;/strong&gt;&lt;/a&gt; website. As the authors write, this website is &lt;em&gt;a collection of screenshots encompassing some of the most beautiful looking Android apps&lt;/em&gt;. You can also take a look at [https://pl.pinterest.com/explore/android-ui/](http://android-ui tag on Pinterest). Do you know any other similar resources? Share them in comments :-).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unit test coverage report with Travis CI for Robolectric on Android</title>
      <link>https://wittchen.io/notes/unit-test-coverage-report-with-travis-ci-for-robolectric-on-android/</link>
      <pubDate>Sun, 19 Mar 2017 19:32:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/unit-test-coverage-report-with-travis-ci-for-robolectric-on-android/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Some time ago, I&amp;rsquo;ve written an article about &lt;a href=&#34;https://wittchen.io/test-coverage-in-android-applications/&#34;&gt;Test coverage report for Android application&lt;/a&gt;. It got some interest (many comments below article and many visits according to Google Analytics), so I decided to refresh this topic. Previously, I&amp;rsquo;ve written instrumentation unit tests, which needed to be executed on a real device or an emulator. It&amp;rsquo;s a good approach when you want to test functionalities strongly connected with the device. E.g. when you want to test operations on a real SQLite database or something like that. Nevertheless, this approach has huge disadvantages. It&amp;rsquo;s hard to run tests on the Continous Integration server because we need to have the emulator or device up &amp;amp; connected all the time and also tests need to interact properly with the device to get passed what is not so easy. In most cases, mocking part of the application&amp;rsquo;s behavior is enough. In that case, we can easily run tests on a CI server and have deterministic test results. In order to do that, we can use &lt;a href=&#34;http://robolectric.org/&#34;&gt;&lt;strong&gt;Robolectric&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My approach to Git aliases</title>
      <link>https://wittchen.io/notes/my-approach-to-git-aliases/</link>
      <pubDate>Sun, 12 Mar 2017 13:20:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/my-approach-to-git-aliases/</guid>
      <description>&lt;p&gt;While we are working with Version Control Systems like Git, it&amp;rsquo;s good to adapt them to our needs to perform daily work in a more productive way. People often create so-called Git aliases, which are shortcuts for longer commands. E.g. you can edit your &lt;code&gt;.gitconfig&lt;/code&gt; file, which is usually located in your home directory and place a few aliases in the &lt;code&gt;[alias]&lt;/code&gt; section. For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[alias]
  ls = log --pretty=format:&amp;#34;%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]&amp;#34; --decorate
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then you can type: &lt;code&gt;git ls&lt;/code&gt; in your Git repository to see pretty Git log. Sometimes people go further and create many more aliases like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Working with different Git configs</title>
      <link>https://wittchen.io/notes/working-with-different-git-configs/</link>
      <pubDate>Fri, 10 Mar 2017 19:30:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/working-with-different-git-configs/</guid>
      <description>&lt;h2 id=&#34;short-introduction&#34;&gt;Short introduction&lt;/h2&gt;
&lt;p&gt;Sometimes &lt;a href=&#34;http://stackoverflow.com/questions/4220416/can-i-specify-multiple-users-for-myself-in-gitconfig&#34;&gt;people need to specify multiple values&lt;/a&gt; for single &lt;code&gt;.gitconfig&lt;/code&gt; file or they want to share just part of the configuration between two machines. There are different approaches for that. I can show you mine.&lt;/p&gt;
&lt;h2 id=&#34;different-configs-for-different-operating-systems&#34;&gt;Different configs for different Operating Systems&lt;/h2&gt;
&lt;p&gt;On my private computer, I use Linux. I use Git for my private projects and I use my private e-mail address there. At the same time, I use Git at work on macOS with exactly the same Git configuration, but with a different e-mail address. How to deal with that? In my &lt;a href=&#34;https://github.com/pwittchen/dotfiles/blob/master/.gitconfig&#34;&gt;.gitconfig&lt;/a&gt; file, I set my private e-mail address, which is used by default. In my &lt;a href=&#34;https://github.com/pwittchen/dotfiles/blob/master/.zshrc&#34;&gt;.zshrc&lt;/a&gt; file, I created two aliases:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Control Spotify on Linux like a hacker</title>
      <link>https://wittchen.io/notes/control-spotify-on-linux-like-a-hacker/</link>
      <pubDate>Sun, 05 Mar 2017 22:40:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/control-spotify-on-linux-like-a-hacker/</guid>
      <description>&lt;p&gt;Recently, I created a tiny script called &lt;a href=&#34;https://github.com/pwittchen/spotify-cli-linux&#34;&gt;spotify-cli&lt;/a&gt;, which allows you to control &lt;a href=&#34;http://spotify.com&#34;&gt;Spotify&lt;/a&gt; on Linux from terminal. It&amp;rsquo;s inspired by &lt;a href=&#34;https://github.com/hnarayanan/shpotify&#34;&gt;shpotify&lt;/a&gt;, which is a shell script doing similar things, but on macOS. My script is written in Python and uses &lt;a href=&#34;https://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html&#34;&gt;dbus&lt;/a&gt; under the hood, which allows to communicate with bus daemon to pass messages between applications. I used &lt;a href=&#34;https://linux.die.net/man/1/pactl&#34;&gt;pactl&lt;/a&gt; for controlling the system sound.&lt;/p&gt;
&lt;p&gt;You can install spotify-cli as follows via wget:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sh -c &amp;#34;$(wget https://raw.githubusercontent.com/pwittchen/spotify-cli-linux/master/install.sh -O -)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;or via curl:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Analyzing performance of the web application with Chrome Dev Tools</title>
      <link>https://wittchen.io/notes/analyzing-performance-of-web-app-with-chrome-dev-tools/</link>
      <pubDate>Thu, 02 Mar 2017 20:26:40 +0000</pubDate>
      <guid>https://wittchen.io/notes/analyzing-performance-of-web-app-with-chrome-dev-tools/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Recently, I attended a training related to &lt;a href=&#34;https://www.zkoss.org/&#34;&gt;ZK framework&lt;/a&gt;. One part of that training was quite interesting for me and was related to measuring and monitoring the performance of the web applications. In Chrome Browser, we have Chrome Dev Tools, which can be opened with &lt;code&gt;Ctrl+Shift+I&lt;/code&gt; shortcut or &lt;code&gt;⌘+Shift+I&lt;/code&gt; shortcut on Mac. Inside these tools, we have &amp;ldquo;Performance&amp;rdquo; tab. We can hit red &amp;ldquo;record&amp;rdquo; icon in the upper left corner of the Tools window and start recording performance of the website while loading it, clicking around or whatever situation we want to monitor. After that, we can see a really nice graph.&lt;/p&gt;</description>
    </item>
    <item>
      <title>One year of using Macbook Pro at work as a software developer</title>
      <link>https://wittchen.io/notes/one-year-of-using-macbook-pro-as-a-software-developer/</link>
      <pubDate>Sun, 29 Jan 2017 13:48:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/one-year-of-using-macbook-pro-as-a-software-developer/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;For most of the time, I was MS Windows user. I was using this OS since Windows 95 up to Windows 10 ( the last version really occasionally). About ~3 years ago, I switched to Linux (Ubuntu) on my private computer. I used it before on virtual machine or sometimes in dual boot with Windows. About one year ago, I changed my job and decided to switch to Macbook Pro at work. I also had an option of choosing a laptop with MS Windows, but I was already a bit familiar with Unix, so I decided to learn something new and try Apple stuff. It had OS X El Capitan installed and it was later upgraded to macOS Sierra. I decided to collect my thoughts related to using Macbook in this article. Below you can see a photo of my current work-station in the office. &lt;a href=&#34;https://wittchen.io/posts/2017/one-year-of-using-macbook-pro-as-dev/workstation-at-sap-hybris-office.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://wittchen.io/posts/2017/one-year-of-using-macbook-pro-as-dev/workstation-at-sap-hybris-office.jpg&#34;&gt;&lt;/a&gt; In the beginning, it seemed that it&amp;rsquo;s something different than systems I already used, but it was quite similar to Linux. There&amp;rsquo;s Unix shell, &lt;a href=&#34;https://en.wikipedia.org/wiki/Head-up_display&#34;&gt;HUD&lt;/a&gt; like in the Unity on Ubuntu. I don&amp;rsquo;t use Unity on Linux anymore, but I&amp;rsquo;m familiar with that concept. Settings window also looks similar to Unity or Gnome. Macbook is connected to one monitor via HDMI and to another one via mini-display port. The keyboard is connected via USB and magic mouse is connected wirelessly via Bluetooth. It&amp;rsquo;s worth mentioning that Macbook doesn&amp;rsquo;t have RJ45 port, so you need an adapter if you want to be connected to the network via cable. There&amp;rsquo;s adapter from mini-display port to RJ45 and from USB to RJ45. You can choose one of them. If you need any specific device setup, better check hardware specification, available adapters and their cost.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automate boring stuff</title>
      <link>https://wittchen.io/notes/automate-boring-stuff/</link>
      <pubDate>Sun, 01 Jan 2017 11:10:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/automate-boring-stuff/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In my current company all the people who perform creative work (mostly programmers) need to prepare so-called PKUP report. PKUP stands for &lt;em&gt;Podwyższone Koszty Uzyskania Przychodu&lt;/em&gt; in the Polish language. It&amp;rsquo;s legal regulation in Poland, which allows paying a lower income tax due to the particular type of work. For the regular employee, it means that he or she will simply get a bit higher salary per month.&lt;/p&gt;
&lt;h2 id=&#34;how-the-report-looks-in-practice&#34;&gt;How the report looks in practice?&lt;/h2&gt;
&lt;p&gt;As a programmer, I simply create software as a source code. Added, removed and modified lines of code in the existing codebase are treated as my creative work. Luckily, we use Git so I can generate &lt;code&gt;*.diff&lt;/code&gt; files from the Git repositories I&amp;rsquo;m contributing to. Besides that, I need to prepare document as a &lt;code&gt;*.docx&lt;/code&gt; file with a short description of my work. My tasks look different every month, but &lt;strong&gt;report actually looks almost the same every month&lt;/strong&gt;. Preparing this report is boring and repeatable stuff.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lifting quality of a shell script</title>
      <link>https://wittchen.io/notes/lifting-quality-of-a-shell-script/</link>
      <pubDate>Wed, 30 Nov 2016 23:29:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/lifting-quality-of-a-shell-script/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In release cycle of our team at work, we need to perform so-called system tests. In order to do that, we need to log into Artifactory, search for the latest release package, check if it&amp;rsquo;s up to date, download it, unzip it, install internal configuration recipe, compile, initialize &amp;amp; run it. Not all of that can be easily automated, but I thought that at least searching &amp;amp; downloading phase can be done from the terminal in a semi-automated way. That&amp;rsquo;s why I created &lt;a href=&#34;https://github.com/pwittchen/ydownloader&#34;&gt;&lt;strong&gt;ydownloader&lt;/strong&gt;&lt;/a&gt; shell script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dockerizing Hybris</title>
      <link>https://wittchen.io/notes/dockerizing-hybris/</link>
      <pubDate>Wed, 27 Jul 2016 21:52:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/dockerizing-hybris/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;A few months ago, I started work at &lt;a href=&#34;http://hybris.com/&#34;&gt;Hybris&lt;/a&gt;, which was acquired by SAP, so our &amp;ldquo;division&amp;rdquo; is officially called SAP Hybris. I work in a team developing an extension for Hybris platform with assisting extensions and internal framework. There are many teams around the world developing their own extensions, which are finally integrated and packed into Commerce Suite provided to the clients and partners. We have our own development environment, but sometimes there&amp;rsquo;s need to build and run whole Commerce Suite in the case of system tests, bug reproduction, verification, etc. It&amp;rsquo;s not really hard, but you have to know what to do and you have to perform a lot of steps manually. This is kind of old approach in present days. Moreover, it&amp;rsquo;s really big project, so build and initialization process takes time. You have to download huge zipped package, unpack it, run Gradle script with installation recipe, compile project, run initialization and finally start the server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ReactiveNetwork - release of v. 0.2.0</title>
      <link>https://wittchen.io/notes/reactive-network-2/</link>
      <pubDate>Thu, 11 Feb 2016 19:19:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/reactive-network-2/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently released new version of &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;ReactiveNetwork&lt;/a&gt; library for Android. Here are the fresh &lt;strong&gt;release notes&lt;/strong&gt; for &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork/releases/tag/v0.2.0&#34;&gt;version 0.2.0&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;added possibility to observe WiFi signal level with &lt;code&gt;observeWifiSignalLevel(context, numLevels)&lt;/code&gt; and &lt;code&gt;observeWifiSignalLevel(context)&lt;/code&gt; method&lt;/li&gt;
&lt;li&gt;created &lt;code&gt;WifiSignalLevel&lt;/code&gt; enum&lt;/li&gt;
&lt;li&gt;added internet check to parameters of &lt;code&gt;getConnectivityStatus(context, checkInternet)&lt;/code&gt; method&lt;/li&gt;
&lt;li&gt;made &lt;code&gt;getConnectivityStatus(context, checkInternet)&lt;/code&gt; method public&lt;/li&gt;
&lt;li&gt;changed String variable status in &lt;code&gt;ConnectivityStatus&lt;/code&gt; enum to description and made it public&lt;/li&gt;
&lt;li&gt;changed output of the &lt;code&gt;toString()&lt;/code&gt; method in &lt;code&gt;ConnectivityStatus&lt;/code&gt; to keep consistency with another enum&lt;/li&gt;
&lt;li&gt;made &lt;code&gt;ReactiveNetwork&lt;/code&gt; class non-final&lt;/li&gt;
&lt;li&gt;bumped Kotlin version in sample app to 1.0.0-rc-1036&lt;/li&gt;
&lt;li&gt;increased immutability of code of the library&lt;/li&gt;
&lt;li&gt;updated sample apps and documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks to &lt;a href=&#34;https://github.com/llp&#34;&gt;@llp&lt;/a&gt; and his Pull Request, we are able to &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork#observing-wifi-signal-level&#34;&gt;observe WiFi signal level&lt;/a&gt; AKA &lt;a href=&#34;https://en.wikipedia.org/wiki/Received_signal_strength_indication&#34;&gt;RSSI&lt;/a&gt; now!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting audio CD to mp3 files on Linux</title>
      <link>https://wittchen.io/notes/converting-cd-to-mp3-on-linux/</link>
      <pubDate>Sun, 24 Jan 2016 17:24:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/converting-cd-to-mp3-on-linux/</guid>
      <description>&lt;p&gt;Not all songs are available on &lt;a href=&#34;https://www.spotify.com&#34;&gt;Spotify&lt;/a&gt; and sometimes we need to rip music from audio CDs in order to listen it on our computer or mobile device. There are several approaches to do that. Here is mine: Get &lt;a href=&#34;http://ripperx.sourceforge.net/screenshots.html&#34;&gt;RipperX&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;sudo apt-get install ripperx&lt;/p&gt;
&lt;p&gt;Put audio CD into your computer. Open RipperX, select All Tracks and check Rip to WAV option. Set quality of output files via &amp;ldquo;Config&amp;rdquo; option and names of the tracks if your want. Press &amp;ldquo;Go!&amp;rdquo;. After conversion, you should have directory with ripped &lt;code&gt;*.wav&lt;/code&gt; files in your home directory. Get &lt;a href=&#34;http://soundconverter.org/&#34;&gt;SoundConverter&lt;/a&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>3 questions about your Git repository</title>
      <link>https://wittchen.io/notes/3-questions-about-your-git-repo/</link>
      <pubDate>Mon, 28 Dec 2015 21:37:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/3-questions-about-your-git-repo/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Can you answer the following questions about your Git repository?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Does development branch has all changes from master branch?&lt;/li&gt;
&lt;li&gt;Is your gitlog a crap?&lt;/li&gt;
&lt;li&gt;How old are your branches?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If not, but you want to know answers, you&amp;rsquo;re lucky, because I prepared 3 simple scripts for you, which can help to find it out.&lt;/p&gt;
&lt;h2 id=&#34;does-development-branch-has-all-changes-from-master-branch&#34;&gt;Does development branch has all changes from master branch?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/pwittchen/git-branch-comparator&#34;&gt;git-branch-comparator&lt;/a&gt;&lt;/strong&gt; is a python script, which checks if development branch has all changes from master branch in Git repository. Another, easier way to accomplish the same task suggested in comments by Mike (thanks!) is to call simply:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reactive Live Coding during GDG DevFest 2015 in Poland</title>
      <link>https://wittchen.io/notes/reactive-live-coding-gdg-devfest-pl-2015/</link>
      <pubDate>Sun, 29 Nov 2015 20:16:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/reactive-live-coding-gdg-devfest-pl-2015/</guid>
      <description>&lt;p&gt;I was asked to be a speaker during &lt;a href=&#34;http://devfest.pl&#34;&gt;GDG DevFest&lt;/a&gt; 2015 conference in Warsaw, Poland. Of course, I accepted this invitation and prepared presentation titled &amp;ldquo;Reactive Live Coding&amp;rdquo;. Presentation covered basics of Reactive Programming, RxJava and RxAndroid. Besides my talk I&amp;rsquo;ve done live coding to show how to use mentioned libraries and basics principles of Reactive Programming in real life. I had only 20 minutes for all of that, so my time-box was very limited. Being a speaker at conference was really interesting and challenging experience, which I haven&amp;rsquo;t had before. Moreover, I could meet a lot of interesting people and hear very inspiring talks covering different topics. You can check activity from conference by browsing &lt;a href=&#34;https://twitter.com/search?q=%23devfest15pl&#34;&gt;#devfest15pl&lt;/a&gt; hashtag on Twitter and &lt;a href=&#34;https://www.facebook.com/events/595578613913819/&#34;&gt;Facebook event&lt;/a&gt;. You can also check official website of the conference at &lt;a href=&#34;http://devfest.pl&#34;&gt;devfest.pl&lt;/a&gt;. Slides from my presentation are available below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release of Kirai - elegant string formatting library for Java</title>
      <link>https://wittchen.io/notes/new-release-of-kirai-140/</link>
      <pubDate>Sun, 22 Nov 2015 20:34:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/new-release-of-kirai-140/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently released version &lt;strong&gt;1.4.0&lt;/strong&gt; of &lt;a href=&#34;https://github.com/pwittchen/kirai&#34;&gt;Kirai&lt;/a&gt; library. Kirai means &lt;em&gt;phrase&lt;/em&gt; in Swahili language. It&amp;rsquo;s string formatting library written in Java. It originally started as an Android library, but it evolved to pure Java library. It&amp;rsquo;s first possibilities were basic string formatting and text formatting for Android TextViews. Now, it allows to format strings for &lt;strong&gt;Java&lt;/strong&gt;, &lt;strong&gt;Web&lt;/strong&gt;, &lt;strong&gt;Android&lt;/strong&gt; and even &lt;strong&gt;Unix Terminal&lt;/strong&gt;! Have you ever wanted to have colorful and styled text in your mobile app, website or terminal app? Now you can with an elegant and fluent API! Moreover, I&amp;rsquo;ve added test coverage supported by &lt;a href=&#34;http://codecov.io&#34;&gt;codecov.io&lt;/a&gt;. It&amp;rsquo;s really nice service, which integrates with &lt;a href=&#34;http://travis-ci.org&#34;&gt;Travis CI&lt;/a&gt; and is free for open-source projects. It&amp;rsquo;s available for various programming languages and build systems. Check library source code and samples at: &lt;a href=&#34;https://github.com/pwittchen/kirai&#34;&gt;https://github.com/pwittchen/kirai&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bunch of updates in my OSS for Android</title>
      <link>https://wittchen.io/notes/bunch-of-updates-in-my-android-oss/</link>
      <pubDate>Sun, 08 Nov 2015 16:53:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/bunch-of-updates-in-my-android-oss/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In the last days I prepared a bunch of updates in my open-source software for Android. Most of them are bug fixes and are related to increasing robustness of the projects as well as their overall quality. I also decided to play a little with &lt;a href=&#34;https://kotlinlang.org/&#34;&gt;Kotlin&lt;/a&gt; language from JetBrains, which seems to be reasonable choice for mobile applications running on Android. Nevertheless, writing an app in Kotlin requires some additional configuration and we should remember, it&amp;rsquo;s still in beta version. If you are interested in Kotlin programming for Android, take a look at &lt;a href=&#34;https://kotlinlang.org/docs/tutorials/kotlin-android.html&#34;&gt;Getting started with Android and Kotlin&lt;/a&gt; guide from official Kotlin website. You can also take a look at &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork/tree/master/app-kotlin&#34;&gt;one of my sample apps&lt;/a&gt; written in Kotlin and &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork/blob/master/app-kotlin/build.gradle&#34;&gt;its configuration in Gradle&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An Opinionated Guide to Modern Java by Parallel Universe</title>
      <link>https://wittchen.io/notes/an-opinionated-guide-to-modern-java-by-parallel-universe/</link>
      <pubDate>Thu, 05 Nov 2015 08:27:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/an-opinionated-guide-to-modern-java-by-parallel-universe/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I recently read series of three articles titled &lt;em&gt;An Opinionated Guide to Modern Java&lt;/em&gt; by &lt;a href=&#34;http://blog.paralleluniverse.co/&#34;&gt;Parallel Universe&lt;/a&gt;. It presents really interesting point of view and can be read even by non-Java developers due to its form. Non-Java developers can learn that Java can be fast, elegant and lightweight as much as other &lt;em&gt;hipster&lt;/em&gt; technologies like Ruby, Go or Node.js. The main difference is the fact that Java is quite old and widely used technology what means it&amp;rsquo;s well tested, stable, solid, has great development and monitoring tools. Besides widely known projects, author of the articles presents some information about tools built by Parallel Universe, which are not commonly used and are less popular, but are also worth considering for modern development. E.g. he writes about so called &lt;a href=&#34;http://www.capsule.io/&#34;&gt;Capsule&lt;/a&gt; project, which is intended to be a Docker alternative for Java and &lt;a href=&#34;http://docs.paralleluniverse.co/quasar/&#34;&gt;Quasar&lt;/a&gt;, which is interesting high level API for multi-threading with concept of actors, which is also available in Akka and Erlang. I recommend any Java and non-Java developer to read this series to learn new things and consolidate the knowledge.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing ReactiveBeacons</title>
      <link>https://wittchen.io/notes/introducing-reactive-beacons/</link>
      <pubDate>Wed, 30 Sep 2015 19:49:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/introducing-reactive-beacons/</guid>
      <description>&lt;p&gt;Recently, I&amp;rsquo;ve created yet another reactive library for Android. It&amp;rsquo;s called &lt;a href=&#34;https://github.com/pwittchen/ReactiveBeacons&#34;&gt;ReactiveBeacons&lt;/a&gt; and it&amp;rsquo;s responsible for observing BLE (Bluetooth Low Energy) beacons. Beacons are small devices, which became quite popular in the last years. They can be utilized in creating Contextual Awareness, Contextual Computing and &lt;a href=&#34;https://en.wikipedia.org/wiki/Internet_of_Things&#34;&gt;Internet of Things&lt;/a&gt;. Beacons have lithium battery, are constantly turned on and emit signals via Bluetooth all the time. ReactiveBeacons library allows to transform these signals into Observable stream compatible with RxJava. Whenever new beacon is detected or &lt;a href=&#34;https://en.wikipedia.org/wiki/Received_signal_strength_indication&#34;&gt;RSSI&lt;/a&gt; (Received signal strength indication) changes, new immutable beacon data is emitted.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using tmux</title>
      <link>https://wittchen.io/notes/using-tmux/</link>
      <pubDate>Sun, 20 Sep 2015 11:04:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/using-tmux/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What is a terminal multiplexer?&lt;/strong&gt; It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal. And do a lot more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;- tmux.github.io&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ss-tmux1&#34; loading=&#34;lazy&#34; src=&#34;https://wittchen.io/posts/2015/using-tmux/ss-tmux1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Tmux feature, which I find very useful is &lt;strong&gt;tiling terminal window&lt;/strong&gt;. We can have several tiles with different terminals within a single terminal window.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use-tiling&#34;&gt;How to use tiling?&lt;/h2&gt;
&lt;p&gt;First, we need to install tmux:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing ReactiveSensors</title>
      <link>https://wittchen.io/notes/introducing-reactive-sensors/</link>
      <pubDate>Sat, 05 Sep 2015 20:03:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/introducing-reactive-sensors/</guid>
      <description>&lt;p&gt;Another month, another library. Recently, I&amp;rsquo;ve released yet another reactive library called &lt;a href=&#34;https://github.com/pwittchen/ReactiveSensors&#34;&gt;ReactiveSensors&lt;/a&gt;. It&amp;rsquo;s an open-source Android library monitoring hardware sensors with RxJava Observables. Library is compatible with RxJava 1.0.+ and RxAndroid 1.0.+ and uses them under the hood.&lt;/p&gt;
&lt;p&gt;Library is available at: &lt;a href=&#34;https://github.com/pwittchen/ReactiveSensors&#34;&gt;https://github.com/pwittchen/ReactiveSensors&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In my opinion, hardware sensors are perfect case for applying RxJava, because in fact we&amp;rsquo;re constantly receiving a stream of events emitted by many sensors. With Reactive Programming approach we have plenty of possibilities and easy API for manipulating received sensor&amp;rsquo;s data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning python</title>
      <link>https://wittchen.io/notes/learning-python/</link>
      <pubDate>Tue, 01 Sep 2015 00:03:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/learning-python/</guid>
      <description>&lt;p&gt;Some time ago, I&amp;rsquo;ve decided to learn Python programming language. I thought it may be useful during performing some basic tasks in the system and Linux or Windows scripting. Moreover, it&amp;rsquo;s good language for developing web applications with frameworks like Django, Flask or Bottle. I&amp;rsquo;ve decided to go through all of the tasks in the &lt;a href=&#34;http://learnpythonthehardway.org/book/&#34;&gt;Learn Python - The Hard Way&lt;/a&gt; course. Basic tasks weren&amp;rsquo;t surprising. They were similar to other object oriented languages. In the further tasks we can learn basic features available in Python language, which are not so common for e.g. Java programmers. I&amp;rsquo;ve placed all tasks in &lt;a href=&#34;https://github.com/pwittchen/learn-python-the-hard-way&#34;&gt;learn-python-the-hard-way repository&lt;/a&gt; on GitHub. Moreover, in &lt;code&gt;README.md&lt;/code&gt; file I&amp;rsquo;ve added information about:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gnome Classic desktop environment on Ubuntu</title>
      <link>https://wittchen.io/notes/gnome-classic-ubuntu/</link>
      <pubDate>Sun, 23 Aug 2015 01:02:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/gnome-classic-ubuntu/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I was tired of non-minimal and quite slow Unity desktop environment. Of course, I performed a few tricks to &lt;a href=&#34;http://blog.wittchen.biz.pl/making-ubuntu-and-unity-faster/&#34;&gt;make Unity faster&lt;/a&gt;, but still I wasn&amp;rsquo;t satisfied enough. I checked out different desktop environments. I wanted to have clean, minimal and productive environment. I like top panel from Unity as well as HUD and many workspaces. The last thing is quite common among different desktop environments.&lt;/p&gt;
&lt;h2 id=&#34;new-desktop-environment&#34;&gt;New desktop environment&lt;/h2&gt;
&lt;p&gt;I decided to choose &lt;a href=&#34;https://www.gnome.org/&#34;&gt;Gnome&lt;/a&gt; classic. It&amp;rsquo;s fast, clean, minimal, works easily with Ubuntu, has top panel and is configurable. My current desktop looks like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning Android and being up to date</title>
      <link>https://wittchen.io/notes/learning-android/</link>
      <pubDate>Sat, 22 Aug 2015 18:09:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/learning-android/</guid>
      <description>&lt;p&gt;Recently a few people asked me, what are my methods for gathering knowledge and being up to date with all news connected with Android. I didn&amp;rsquo;t really think about that. I just grabbed all knowledge from a various places and then tried to use it in practice. I decided to sum everything up and create a collection of my knowledge resources. Of course, we are not able to use all of that every day, because it&amp;rsquo;s too much, but it&amp;rsquo;s good to know where we can find something interesting. Android is very dynamic mobile platform, which changes really fast. It&amp;rsquo;s hard to be up to date with all of new features and programming techniques. That&amp;rsquo;s why it&amp;rsquo;s worth to find places where we can gather interesting information. Below, I collected some resources, links and information, which I find useful for learning Android &amp;amp; Java and being up to date with Android development.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing ReactiveNetwork</title>
      <link>https://wittchen.io/notes/introducing-reactive-network/</link>
      <pubDate>Mon, 10 Aug 2015 21:52:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/introducing-reactive-network/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently released &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;ReactiveNetwork&lt;/a&gt;. It is an open-source Android library listening network connection state and change of the WiFi signal strength with &lt;a href=&#34;https://github.com/ReactiveX/RxJava&#34;&gt;RxJava&lt;/a&gt; Observables. It&amp;rsquo;s a successor of &lt;a href=&#34;https://github.com/pwittchen/NetworkEvents&#34;&gt;Network Events&lt;/a&gt; library rewritten with Reactive Programming approach.&lt;/p&gt;
&lt;p&gt;Library is compatible with RxJava 1.0.+ and RxAndroid 1.0.+ and uses them under the hood. Min Android SDK version is 9.
JavaDoc can be found at: &lt;a href=&#34;http://pwittchen.github.io/ReactiveNetwork&#34;&gt;http://pwittchen.github.io/ReactiveNetwork&lt;/a&gt;.
Repository is available at: &lt;a href=&#34;https://github.com/pwittchen/ReactiveNetwork&#34;&gt;https://github.com/pwittchen/ReactiveNetwork&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This library is much simpler and easier to use than NetworkEvents. Even code-base is much smaller, but we have to remember that it utilizes powerful RxJava and RxAndroid. RxJava hase huge API and gives a lot of possibilities. That&amp;rsquo;s why I was able to obtain desired result with fewer lines of code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Releasing prefser 2.0.0</title>
      <link>https://wittchen.io/notes/releasing-prefser-2/</link>
      <pubDate>Thu, 06 Aug 2015 22:34:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/releasing-prefser-2/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently released &lt;a href=&#34;https://github.com/pwittchen/prefser&#34;&gt;Prefser&lt;/a&gt; library v. &lt;a href=&#34;https://github.com/pwittchen/prefser/releases/tag/v2.0.0&#34;&gt;2.0.0&lt;/a&gt;. Prefser is a wrapper for Android SharedPreferences with object serialization and RxJava Observables. This update couldn&amp;rsquo;t be done without help of awesome open-source community and people who reported new issues and created pull requests. Thanks for that! A lot of issues related to RxJava was fixed. Moreover, now we can store and retrieve lists of objects of any type with Prefser. Examples of library usage can be found in &lt;code&gt;README.md&lt;/code&gt; file and in unit tests covering 96% of the code. Below, you can find release notes for this version of the library:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Geary - neat e-mail client for Linux</title>
      <link>https://wittchen.io/notes/geary-email-client-for-linux/</link>
      <pubDate>Sat, 01 Aug 2015 13:41:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/geary-email-client-for-linux/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;I was using web interfaces for e-mail for a long time, but I wanted to give a try a desktop clients for Linux. I was searching for a quite simple solution with almost zero configuration, which I can use for my private and work e-mail accounts. &lt;a href=&#34;https://wiki.gnome.org/Apps/Geary&#34;&gt;Geary&lt;/a&gt; seems to be quite good choice. It is clean, easy to use and pretty neat e-mail client for Linux. It integrates with Unity on Ubuntu and display system notifications informing about new message. Unfortunately, we need it running in order to see notifications, which is small drawback. Nevertheless it works quite good, so I&amp;rsquo;m going to give it a try. Install it with the following command:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Releasing NetworkEvents 2.0.0</title>
      <link>https://wittchen.io/notes/releasing-network-events-2/</link>
      <pubDate>Fri, 31 Jul 2015 09:28:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/releasing-network-events-2/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently released &lt;a href=&#34;https://github.com/pwittchen/NetworkEvents&#34;&gt;NetworkEvents&lt;/a&gt; library &lt;a href=&#34;https://github.com/pwittchen/NetworkEvents/releases/tag/v2.0.0&#34;&gt;v. 2.0.0&lt;/a&gt;. It&amp;rsquo;s an Android library listening network connection state and change of the Wifi signal strength. It has a few significant changes in the API and new features, which people were requesting on GitHub. Moreover, codebase was slightly refactored and updated. I&amp;rsquo;m going to keep &lt;code&gt;major.minor.patch&lt;/code&gt; convention AKA semantic versioning now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;major&lt;/strong&gt; - new feature or update - backward incompatible&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;minor&lt;/strong&gt; - new feature - backward compatible&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;patch&lt;/strong&gt; - bug-fix - backward compatible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A few changes are backward incompatible, so I&amp;rsquo;ve increased &lt;code&gt;major&lt;/code&gt; number. Below, you can find list of changes. As you can see, there is a lot of stuff. That&amp;rsquo;s why I&amp;rsquo;ve made the most important changes &lt;strong&gt;bold&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Routing internet via SSH tunnel on Raspberry Pi</title>
      <link>https://wittchen.io/notes/routing-internet-via-ssh-tunnel-on-raspberry-pi/</link>
      <pubDate>Sat, 25 Jul 2015 01:38:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/routing-internet-via-ssh-tunnel-on-raspberry-pi/</guid>
      <description>&lt;h2 id=&#34;problem-overview&#34;&gt;Problem overview&lt;/h2&gt;
&lt;p&gt;Recently I had the following problem. I wanted to connect to my Raspberry Pi from my laptop. For some reason WiFi dongle on the Raspberry Pi was not working properly. Moreover, I had only one slot available for the LAN connection via cable to the router, so I could connect only one device this way. I wanted to have reliable and fast internet connection on my laptop, but via WiFi it&amp;rsquo;s quite slow. To sum the things up two goals were clear:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Searching word in a string with KMP algorithm</title>
      <link>https://wittchen.io/notes/searching-word-in-a-string-with-kmp-algorithm/</link>
      <pubDate>Wed, 22 Jul 2015 13:03:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/searching-word-in-a-string-with-kmp-algorithm/</guid>
      <description>&lt;p&gt;Sometimes it&amp;rsquo;s good to revise some algorithms and try to implement them in order to get to know, how the built-in functions of high level programming languages actually works. One of the popular problems is &lt;a href=&#34;http://en.wikipedia.org/wiki/String_searching_algorithm&#34;&gt;string searching&lt;/a&gt;. We have many approaches to solve this problem. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Naive string search algorithm&lt;/li&gt;
&lt;li&gt;Rabin-Karp string search algorithm&lt;/li&gt;
&lt;li&gt;Finite-state automaton based search&lt;/li&gt;
&lt;li&gt;Knuth-Morris-Pratt algorithm&lt;/li&gt;
&lt;li&gt;Boyer-Moore string search algorithm&lt;/li&gt;
&lt;li&gt;Bitap algorithm&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This time, I&amp;rsquo;ve decided to focus on &lt;a href=&#34;http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm&#34;&gt;Knuth-Morris-Pratt (KMP) algorithm&lt;/a&gt;. It&amp;rsquo;s quite easy to implement, when you understand it. In addition, its time complexity is quite good and can be defined as &lt;em&gt;O(n)&lt;/em&gt;. In this algorithm, we simply go through all letters in a given string and compare them with searched string. When position of searched string reaches length of searched string, we can assume, that our string was found. If two compared letters are different, we set position of searched string to zero and start new search from the next position after which we started searching process before. It&amp;rsquo;s quite good described on &lt;a href=&#34;http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm&#34;&gt;Wikipedia&lt;/a&gt; with some pseudo-code. You can also take a look at my code in Java available below, which I&amp;rsquo;ve written just for practice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Releasing Weather Icon View v. 1.0.0 for Android</title>
      <link>https://wittchen.io/notes/releasing-weather-icon-view-1-for-android/</link>
      <pubDate>Tue, 21 Jul 2015 17:34:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/releasing-weather-icon-view-1-for-android/</guid>
      <description>&lt;p&gt;Today I released &lt;a href=&#34;https://github.com/pwittchen/WeatherIconView&#34;&gt;Weather Icon View&lt;/a&gt; library v. &lt;a href=&#34;https://github.com/pwittchen/WeatherIconView/releases/tag/v1.0.0&#34;&gt;1.0.0&lt;/a&gt; It&amp;rsquo;s very simple and easy to use Android library, which allows you to use &lt;a href=&#34;https://github.com/erikflowers/weather-icons/&#34;&gt;Weather Icons&lt;/a&gt; created by &lt;a href=&#34;https://github.com/erikflowers&#34;&gt;Erik Flowers&lt;/a&gt; in your mobile applications. This library was already available on GitHub as I wrote in &lt;a href=&#34;http://blog.wittchen.biz.pl/weather-icons-for-android-applications/&#34;&gt;one of my previous posts&lt;/a&gt;, but today it was released to Maven Central Repository and you can use it as &lt;a href=&#34;https://github.com/pwittchen/WeatherIconView#download&#34;&gt;Maven or Gradle dependency&lt;/a&gt;. I was encouraged to make this project more available by the open-source community and people who find it useful as I could read in the &lt;a href=&#34;https://github.com/pwittchen/WeatherIconView/issues/1&#34;&gt;issue&lt;/a&gt; reported on the repository website. Thanks for that. You can find more details, usage examples and sample app in the repository of the project at: &lt;a href=&#34;https://github.com/pwittchen/WeatherIconView&#34;&gt;https://github.com/pwittchen/WeatherIconView&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Get past the syntax - the real scare is in the semantics</title>
      <link>https://wittchen.io/notes/get-past-the-syntax/</link>
      <pubDate>Mon, 06 Jul 2015 15:37:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/get-past-the-syntax/</guid>
      <description>&lt;p&gt;Dr. &lt;a href=&#34;http://agiledeveloper.com/&#34;&gt;Venkat Subramaniam&lt;/a&gt; presented an interesting point of view during his talk at Devoxx conference. Programmers, who start learning a new language, often complain about syntax. They focus on using available keywords and constructions instead of trying to understand their meaning and purpose. Programmers also have their own habits. That’s why Java has similar syntax to C and C++. Creators of Java designed new language with syntax, which was familiar to them, with significant improvements. Perception of the world is based on experience and things we get used to. The same rule applies to programming languages. Most software developers are familiar with imperative programming paradigm. They often focus on describing computation in terms of statements and changing program state. This approach leads us to necessity of creating a lot of temporary variables and boilerplate code. Let’s have a look at the following code snippet:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Releasing prefser v. 1.0.5</title>
      <link>https://wittchen.io/notes/releasing-prefser-v-105/</link>
      <pubDate>Thu, 18 Jun 2015 20:46:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/releasing-prefser-v-105/</guid>
      <description>&lt;p&gt;I am happy to announce that I released version 1.0.5 of &lt;a href=&#34;https://github.com/pwittchen/prefser&#34;&gt;Prefser&lt;/a&gt; Android library. Prefser is a wrapper for Android SharedPreferences with object serialization and RxJava Observables. What has been done in this version:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Removed &lt;code&gt;final&lt;/code&gt; keyword from &lt;code&gt;Prefser&lt;/code&gt; class in order to allow class mocking thanks to &lt;a href=&#34;https://github.com/plackemacher&#34;&gt;@plackemacher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed unused imports from &lt;code&gt;Prefser&lt;/code&gt; class&lt;/li&gt;
&lt;li&gt;Added &lt;a href=&#34;http://blog.wittchen.biz.pl/test-coverage-report-for-android-application/&#34;&gt;test coverage report generation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://pwittchen.github.io/prefser/test-coverage-report&#34;&gt;Increased test coverage to 100%&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added abstraction for &lt;code&gt;JsonConverter&lt;/code&gt; and default &lt;code&gt;GsonConverter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;getAndObserve(...)&lt;/code&gt; method&lt;/li&gt;
&lt;li&gt;Emiting current value right on subscription to &lt;code&gt;Observable&lt;/code&gt; with &lt;code&gt;getAndObserve(...)&lt;/code&gt; method, which is idea provided by &lt;a href=&#34;https://github.com/semanticer&#34;&gt;@semanticer&lt;/a&gt;. Thanks!&lt;/li&gt;
&lt;li&gt;Added GitHub pages with generated JavaDoc documentation on &lt;code&gt;gh-pages&lt;/code&gt; branch available at: &lt;a href=&#34;http://pwittchen.github.io/prefser&#34;&gt;http://pwittchen.github.io/prefser&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Moreover you can browse auto-generated reports:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Test coverage report for Android application</title>
      <link>https://wittchen.io/notes/test-coverage-in-android-applications/</link>
      <pubDate>Wed, 03 Jun 2015 18:22:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/test-coverage-in-android-applications/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; see newer article about &lt;a href=&#34;https://wittchen.io/unit-test-coverage-report-with-travis-ci-for-robolectric-on-android/&#34;&gt;&lt;strong&gt;Unit test coverage report with Travis CI for Robolectric on Android&lt;/strong&gt;&lt;/a&gt;. For a long time, I wasn&amp;rsquo;t able to find the right way to generate test coverage reports for Android instrumentation unit tests created with AndroidJUnit4 runner. In the past I&amp;rsquo;ve found many solutions, but none of them was working or they were compatible only with Robolectric, which I currently don&amp;rsquo;t use. Other developers also stopped using it for the new projects. E.g. &lt;a href=&#34;https://github.com/square/sqlbrite&#34;&gt;Sqlbrite&lt;/a&gt; from Square is using AndroidJUnit4 runner as my projects do. Recently, I&amp;rsquo;ve found &lt;a href=&#34;http://www.reddit.com/r/androiddev/comments/2v1n2u/code_coverage_in_android_studio/&#34;&gt;an interesting discussion on Reddit&lt;/a&gt;, where we can find information about enabling test coverage very easily without additional plugins, scripts and many lines of configuration. Moreover, Android SDK currently has built-in support for &lt;a href=&#34;http://emma.sourceforge.net/&#34;&gt;Emma Test Coverage&lt;/a&gt;, what we can read in &lt;a href=&#34;http://developer.android.com/reference/android/test/InstrumentationTestRunner.html&#34;&gt;official documentation&lt;/a&gt;. Basically, the only thing we need to do, is to apply &lt;code&gt;jacoco-android&lt;/code&gt; plugin in &lt;code&gt;build.gradle&lt;/code&gt; file:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Checking consistency of git branches</title>
      <link>https://wittchen.io/notes/checking-consistency-of-git-branches/</link>
      <pubDate>Thu, 14 May 2015 15:16:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/checking-consistency-of-git-branches/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve created a simple Python script, which checks whether &amp;lsquo;development&amp;rsquo; branch has all changes from &amp;lsquo;master&amp;rsquo; branch in a Git repository. It&amp;rsquo;s important when we work in a &lt;a href=&#34;http://nvie.com/posts/a-successful-git-branching-model/&#34;&gt;Git Flow&lt;/a&gt;. Branch inconsistency may occur when change with hot-fix will be committed to &amp;lsquo;master&amp;rsquo; branch and we forget to merge &amp;lsquo;master&amp;rsquo; branch back to &amp;lsquo;development&amp;rsquo; branch to have our hot-fix in a &amp;lsquo;development&amp;rsquo; version of the project as well. We should keep branch consistency to avoid merge conflicts and problems with release of the project in the future. Mentioned script is able to perform necessary validation helping to detect potential problems. Moreover, script can be integrated with the Jenkins CI server and we can execute it from a command line via Jenkins job. When, changes from &amp;lsquo;master&amp;rsquo; won&amp;rsquo;t be merged into &amp;lsquo;development&amp;rsquo;, job will fail. In opposite case, job should finish with a success. In a Jenkins job we need to remember to add the following &lt;em&gt;Additional Behaviours&lt;/em&gt; in &lt;em&gt;Source Code Management&lt;/em&gt; (Git) section:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mutate - yet another Spotlight for Ubuntu</title>
      <link>https://wittchen.io/notes/mutate-yet-another-spotlight-for-ubuntu/</link>
      <pubDate>Mon, 06 Apr 2015 12:26:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/mutate-yet-another-spotlight-for-ubuntu/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Some time ago, I published post about Synapse indicator, which is an alternative to MAC&amp;rsquo;s Spotlight for Ubuntu. Recently, I&amp;rsquo;ve found another software, which is in my opinion even better than Synapse. It&amp;rsquo;s called &lt;a href=&#34;https://github.com/qdore/Mutate&#34;&gt;Mutate&lt;/a&gt;. I like it, because it works quite smooth, looks simple and clean. In addition, it&amp;rsquo;s open-source.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;mutate-1&#34; loading=&#34;lazy&#34; src=&#34;https://wittchen.io/posts/2015/mutate/mutate-1.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;
&lt;p&gt;We can install it with the following commands:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo add-apt-repository ppa:mutate/ppa
sudo apt-get update
sudo apt-get install mutate
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;configuration&#34;&gt;Configuration&lt;/h2&gt;
&lt;p&gt;After installation, we can run Mutate from Ubuntu dashboard or via default hot-key &lt;code&gt;CTRL+D&lt;/code&gt; and type &lt;code&gt;preference&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making Ubuntu faster</title>
      <link>https://wittchen.io/notes/making-ubuntu-faster/</link>
      <pubDate>Sat, 28 Mar 2015 16:43:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/making-ubuntu-faster/</guid>
      <description>&lt;p&gt;Unity desktop environment consumes lot of computer&amp;rsquo;s memory. I&amp;rsquo;ve recently found good article about &lt;a href=&#34;http://www.techdrivein.com/2013/03/4-simple-tweaks-to-improve-unity-performance-ubuntu.html&#34;&gt;4 simple tweaks to improve Unity performance on Ubuntu&lt;/a&gt;. Here is the short summary of that tweaks:&lt;/p&gt;
&lt;h2 id=&#34;remove-unwanted-lenses&#34;&gt;Remove Unwanted Lenses&lt;/h2&gt;
&lt;p&gt;It will speed up loading data under &amp;ldquo;Super&amp;rdquo; button.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get autoremove unity-lens-music unity-lens-photos unity-lens-gwibber unity-lens-shopping unity-lens-video
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-compiz-config-settings-manager&#34;&gt;Install Compiz Config Settings Manager&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get install compizconfig-settings-manager
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In Compiz Config Settings Manager perform the following operations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disable Animations and Fading windows&lt;/li&gt;
&lt;li&gt;Set the Texture Filter to &amp;ldquo;Fast&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After that OS won&amp;rsquo;t use additional resources for performing animations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Static code analysis in Android project</title>
      <link>https://wittchen.io/notes/static-code-analysis-in-android-project/</link>
      <pubDate>Thu, 26 Mar 2015 00:23:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/static-code-analysis-in-android-project/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve recently read great article telling &lt;a href=&#34;http://vincentbrison.com/2014/07/19/how-to-improve-quality-and-syntax-of-your-android-code/&#34;&gt;how to improve quality and syntax of your Android code&lt;/a&gt; by &lt;a href=&#34;http://vincentbrison.com/&#34;&gt;Vincent Brison&lt;/a&gt;. It presents how to use tools like &lt;a href=&#34;http://checkstyle.sourceforge.net/&#34;&gt;Checkstyle&lt;/a&gt;, &lt;a href=&#34;http://findbugs.sourceforge.net/&#34;&gt;Findbugs&lt;/a&gt;, &lt;a href=&#34;http://pmd.sourceforge.net/&#34;&gt;PMD&lt;/a&gt;, and &lt;a href=&#34;http://tools.android.com/tips/lint&#34;&gt;Android Lint&lt;/a&gt; for &lt;a href=&#34;http://en.wikipedia.org/wiki/Static_program_analysis&#34;&gt;Static Code Analysis&lt;/a&gt; in Android project. Static Code Analysis allows us to keep consistency of the source code style and helps us to find errors, warnings, possible bugs, bottlenecks and ways to improve the projects. I highly recommend to use tools like those mentioned.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The One Hacker Way</title>
      <link>https://wittchen.io/notes/the-one-hacker-way/</link>
      <pubDate>Sun, 22 Mar 2015 01:41:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/the-one-hacker-way/</guid>
      <description>&lt;p&gt;Recently, I&amp;rsquo;ve seen an unusual talk about &lt;em&gt;The One Hacker Way - a rational alternative to Agile&lt;/em&gt; by &lt;a href=&#34;http://en.wikipedia.org/wiki/Erik_Meijer_%28computer_scientist%29&#34;&gt;Erik Meijer&lt;/a&gt;.
It&amp;rsquo;s really interesting point of view. I recommend to see it.&lt;/p&gt;


&lt;iframe src=&#34;https://player.vimeo.com/video/110554082&#34; frameborder=&#34;0&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen style=&#34;width:100%; height: 540px;&#34;&gt;&lt;/iframe&gt;
&lt;a href=&#34;https://vimeo.com/110554082&#34;&gt;One Hacker Way - Erik Meijer&lt;/a&gt; from &lt;a href=&#34;https://vimeo.com/reaktorfi&#34;&gt;Reaktor&lt;/a&gt; on &lt;a href=&#34;https://vimeo.com&#34;&gt;Vimeo&lt;/a&gt;.</description>
    </item>
    <item>
      <title>Mockito on Android</title>
      <link>https://wittchen.io/notes/mockito-on-android/</link>
      <pubDate>Sun, 15 Mar 2015 15:44:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/mockito-on-android/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;When we write unit tests for an Android application, sometimes there&amp;rsquo;s a necessity to mock some classes or interfaces. Instead of writing implementations dedicated for unit tests by hand, we can use Mockito library. We can read article about &lt;a href=&#34;https://corner.squareup.com/2012/10/mockito-android.html&#34;&gt;Mockito on Android&lt;/a&gt; on &lt;a href=&#34;https://corner.squareup.com/&#34;&gt;Square&amp;rsquo;s blog&lt;/a&gt;. Mockito can make our tests cleaner and better. It can be used both in &lt;em&gt;classic&lt;/em&gt; Java projects and Android projects. It&amp;rsquo;s one of the most popular mocking framework in Java and if you&amp;rsquo;re a Java developer who writes unit tests and tries to apply TDD approach, you should be familiar with it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing prefser</title>
      <link>https://wittchen.io/notes/introducing-prefser/</link>
      <pubDate>Sun, 22 Feb 2015 22:39:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/introducing-prefser/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently released &lt;a href=&#34;https://github.com/pwittchen/prefser&#34;&gt;Prefser&lt;/a&gt;, which is a wrapper for Android &lt;a href=&#34;http://developer.android.com/reference/android/content/SharedPreferences.html&#34;&gt;SharedPreferences&lt;/a&gt; with object serialization and &lt;a href=&#34;https://github.com/ReactiveX/RxJava&#34;&gt;RxJava&lt;/a&gt; Observables. Prefser wraps SharedPreferences and thanks to Java Generics provides you simpler API than classic SharedPreferences with only two methods:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;put&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Class&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;classOfT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;defaultValue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Classic SharedPreferences allows you to store only primitive data types and set of strings. Thanks to &lt;a href=&#34;https://code.google.com/p/google-gson/&#34;&gt;Gson&lt;/a&gt; serialization, Prefser allows you to store:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Primitive data types (boolean, float, int, long, double)&lt;/li&gt;
&lt;li&gt;Strings&lt;/li&gt;
&lt;li&gt;Custom Objects&lt;/li&gt;
&lt;li&gt;Lists&lt;/li&gt;
&lt;li&gt;Arrays&lt;/li&gt;
&lt;li&gt;Sets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, Prefser transforms &lt;a href=&#34;http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html&#34;&gt;OnSharedPreferenceChangeListener&lt;/a&gt; into Observables from RxJava:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unit Testing Support for Android Studio 1.1</title>
      <link>https://wittchen.io/notes/unit-testing-support-for-android-studio-11/</link>
      <pubDate>Sun, 15 Feb 2015 12:53:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/unit-testing-support-for-android-studio-11/</guid>
      <description>&lt;p&gt;As official Android website says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Version 1.1 of Android Studio and the Android gradle plugin brings support for unit testing your code. This feature is still considered experimental, we encourage you to try it and file any bugs you find in our bug tracker.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&amp;rsquo;s great news, because now we can write Unit Tests with JUnit 4.12 without any &amp;ldquo;hacks&amp;rdquo; or tricky configuration, which had to be done earlier. We can execute two kinds of tests:&lt;/p&gt;</description>
    </item>
    <item>
      <title>NetworkEvents v. 1.0.2</title>
      <link>https://wittchen.io/notes/network-events-v102/</link>
      <pubDate>Sun, 15 Feb 2015 00:16:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/network-events-v102/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently released &lt;a href=&#34;https://github.com/pwittchen/NetworkEvents&#34;&gt;NetworkEvents&lt;/a&gt; v. 1.0.2. In case, you don&amp;rsquo;t know it, it&amp;rsquo;s an Android library listening network connection state and change of the Wifi signal strength. This version has small improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Updated &lt;code&gt;ping&lt;/code&gt; method in &lt;code&gt;NetworkHelper&lt;/code&gt; class.&lt;/li&gt;
&lt;li&gt;Detection of Internet access in WiFi network works faster and is more reliable.&lt;/li&gt;
&lt;li&gt;Added example of usage of NetworkEvents with &lt;a href=&#34;https://github.com/square/dagger&#34;&gt;Dagger&lt;/a&gt; in &lt;code&gt;example-dagger&lt;/code&gt; directory in the repository of the project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Right now, we check Internet connection in a different way. Instead of sending HEAD or GET request to a specific website like &lt;a href=&#34;https://www.google.com&#34;&gt;www.google.com&lt;/a&gt;, we just ping 4.2.2.2 IP address. If you want to know why, read an article about &lt;a href=&#34;http://www.tummy.com/articles/famous-dns-server/&#34;&gt;4.2.2.2: The Story Behind a DNS Legend&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hello Kotlin!</title>
      <link>https://wittchen.io/notes/hello-kotlin/</link>
      <pubDate>Sat, 07 Feb 2015 18:59:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/hello-kotlin/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently played with &lt;a href=&#34;http://kotlinlang.org/&#34;&gt;Kotlin&lt;/a&gt; in order to create simple &amp;ldquo;Hello World&amp;rdquo; Android app using this new, fancy language from JetBrains. Kotlin is another programming language based on JVM, which can work with Java. It&amp;rsquo;s aim is to reduce code boilerplate and create projects faster. In my simple Android project, I&amp;rsquo;ve also used &lt;a href=&#34;https://github.com/JakeWharton/kotterknife&#34;&gt;KotterKnife&lt;/a&gt; for injecting views. I&amp;rsquo;ve also added one simple &lt;code&gt;ActivityUnitTestCase&lt;/code&gt;. Unfortunately, I couldn&amp;rsquo;t convert it into Kotlin, because I wasn&amp;rsquo;t allowed to call constructor of inherited class using &lt;code&gt;super()&lt;/code&gt; method. You can read &lt;a href=&#34;http://stackoverflow.com/questions/27699184/in-kotlin-how-do-i-extend-a-class-that-has-multiple-constructors&#34;&gt;related StackOverflow thread&lt;/a&gt; in order to view more details. In order to use Kotlin, I followed instructions from &lt;a href=&#34;http://blog.jetbrains.com/kotlin/2013/08/working-with-kotlin-in-android-studio/&#34;&gt;article on JetBrains blog&lt;/a&gt;. I&amp;rsquo;ve also needed &lt;a href=&#34;https://plugins.jetbrains.com/plugin/6954?pr=idea&#34;&gt;Kotlin plugin&lt;/a&gt; for Android Studio.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing NetworkEvents</title>
      <link>https://wittchen.io/notes/introducing-network-events/</link>
      <pubDate>Sat, 31 Jan 2015 20:35:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/introducing-network-events/</guid>
      <description>&lt;p&gt;I have released NetworkEvents library for Android. It&amp;rsquo;s a wrapper for system Broadcast Receivers built with Otto library. It allows you to listen change of connectivity status (connected to WiFi network with or without Internet access, mobile network, off-line) and change of the WiFi signal strength very easily with &lt;code&gt;@Subscribe&lt;/code&gt; annotation. The only thing you need to do, is to create &lt;code&gt;Bus&lt;/code&gt; and &lt;code&gt;NetworkEvents&lt;/code&gt; objects, register them in &lt;code&gt;onResume()&lt;/code&gt; method and unregister them in &lt;code&gt;onPause()&lt;/code&gt; method in your activity. After that, you can subscribe for the events you want to listen. Of course, remember to give your app appropriate permissions in &lt;code&gt;AndroidManifest.xml&lt;/code&gt; file. In contrast to Broadcast Receivers available in Android SDK, NetworkEvents sends only one event per one occurrence of this event. Android Broadcast Receivers have a &lt;a href=&#34;http://stackoverflow.com/questions/8412714/broadcastreceiver-receives-multiple-identical-messages-for-one-event&#34;&gt;bug, which causes sending multiple Intents&lt;/a&gt; even if only one event occurred. This behavior may vary on different devices. Regardless of this fact, this bug was handled by NetworkEvents and you shouldn&amp;rsquo;t encounter that problem while using this library. Important facts:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android resource converter</title>
      <link>https://wittchen.io/notes/android-resource-converter/</link>
      <pubDate>Sat, 17 Jan 2015 00:19:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/android-resource-converter/</guid>
      <description>&lt;p&gt;In international projects sometimes there&amp;rsquo;s a need to send resource files to the client in order to have translated strings. Client doesn&amp;rsquo;t have to understand XML notation and editing two or more files at the same time is inconvenient. It&amp;rsquo;s easier to send file which can be edited in MS Excel or Libre Office Calc. I&amp;rsquo;ve created Python scripts, which are able to convert Android xml resources with translations to a single &lt;code&gt;*.csv&lt;/code&gt; file ready to open in software for common users. In addition, there&amp;rsquo;s another script, which can generate xml resource files with translations from &lt;code&gt;*.csv&lt;/code&gt; file. Generating &lt;code&gt;*.csv&lt;/code&gt; file from resources is easy:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kirai - flavored Android string formatting library</title>
      <link>https://wittchen.io/notes/kirai-flavored-android-string-formatting-library/</link>
      <pubDate>Tue, 13 Jan 2015 19:12:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/kirai-flavored-android-string-formatting-library/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Recently I&amp;rsquo;ve developed and realased to Maven Central Repository &lt;strong&gt;&lt;a href=&#34;https://github.com/pwittchen/kirai/&#34;&gt;Kirai&lt;/a&gt;&lt;/strong&gt;, which is &lt;strong&gt;flavored Android string formatting library&lt;/strong&gt;. Kirai means &lt;em&gt;phrase&lt;/em&gt; in Swahili language. Project is inspired by &lt;a href=&#34;https://github.com/square/phrase&#34;&gt;phrase&lt;/a&gt;, &lt;a href=&#34;https://github.com/polok/TaggerString&#34;&gt;TaggerString&lt;/a&gt; and &lt;a href=&#34;https://github.com/quiqueqs/BabushkaText&#34;&gt;BabushkaText&lt;/a&gt;. Kirai has fluent API similar to phrase with additional formatting similar to TaggerString and allows to add formatted pieces of text like BabushkaText. Development including writing Unit Tests took me about 2 days. Deployment and release to Maven Central Repository took me about 2 days as well. It was my first deployment, so it wasn&amp;rsquo;t so easy, but people from Sonatype are helpful, problems were solved very quickly and release went quite smooth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interpreting data in csv files generated by EEG Analyzer</title>
      <link>https://wittchen.io/notes/interpreting-data-in-csv-files-generated-by-eeg-analyzer/</link>
      <pubDate>Tue, 06 Jan 2015 19:11:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/interpreting-data-in-csv-files-generated-by-eeg-analyzer/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Sometimes people send me e-mails concerning &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.pwittchen.eeganalyzer&#34;&gt;EEG Analyzer&lt;/a&gt; app. Usually they are not sure how to interpret or analyze results generated by the app and uploaded to Dropbox server. My app is quite &amp;ldquo;raw&amp;rdquo; and simple, because it is additional project created during writing my &lt;a href=&#34;https://wittchen.io/tags/polsl&#34;&gt;Master Thesis&lt;/a&gt;, which helped me to perform some experiments and analysis of EEG data. That&amp;rsquo;s why I didn&amp;rsquo;t focused on generating reports from gathered data. I focused only on reading and gathering data from MindWave Mobile device. In this article I&amp;rsquo;ll show you how to interpret data generated by EEG Analyzer and draw simple plots showing change of attention level, meditation level and blink strength.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Synapse Indicator - Spotlight for Ubuntu</title>
      <link>https://wittchen.io/notes/synapse-indicator-spotlight-for-ubuntu/</link>
      <pubDate>Thu, 25 Dec 2014 17:06:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/synapse-indicator-spotlight-for-ubuntu/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;If you were using Ubuntu for some time, you might have noticed that Ubuntu Dash from Unity is working quite slow. We can disable on-line search or a few other elements, but it&amp;rsquo;s still very slow. If we want to have fast search, we can use external software like synapse.&lt;/p&gt;
&lt;h2 id=&#34;synapse&#34;&gt;Synapse&lt;/h2&gt;
&lt;p&gt;Synapse is searching really fast and we don&amp;rsquo;t have to wait a few seconds like in Ubuntu Dash or disable some search options. &lt;img alt=&#34;synapse&#34; loading=&#34;lazy&#34; src=&#34;https://wittchen.io/posts/2014/synapse-indicator-spotlight-for-ubuntu/synapse.jpg&#34;&gt; Synapse can be installed with the following commands:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Detecting swipe gesture in mobile application</title>
      <link>https://wittchen.io/notes/detecting-swipe-gesture-in-mobile-application/</link>
      <pubDate>Thu, 25 Dec 2014 15:59:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/detecting-swipe-gesture-in-mobile-application/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Swipe Detector project is now called &lt;a href=&#34;https://github.com/pwittchen/swipe&#34;&gt;swipe&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some time ago, I needed to detect moment when user is swiping finger on the screen horizontally (from left to right or opposite) or when user swiped horizontally. I&amp;rsquo;ve decided to spend some time for analyzing [onTouch(MotionEvent event)](&lt;a href=&#34;http://developer.android.com/reference/android/view/View.OnTouchListener.html#onTouch(android.view.View&#34;&gt;http://developer.android.com/reference/android/view/View.OnTouchListener.html#onTouch(android.view.View&lt;/a&gt;, android.view.MotionEvent)) and &lt;code&gt;dispatchTouchEvent(MotionEvent event)&lt;/code&gt; method. We can read more about differences between triggering onTouch eventes on &lt;a href=&#34;http://stackoverflow.com/questions/9586032/android-difference-between-onintercepttouchevent-and-dispatchtouchevent&#34;&gt;StackOverflow thread&lt;/a&gt;. Method like &lt;code&gt;onTouch(MotionEvent event)&lt;/code&gt; allows to trigger any touch event, but it doesn&amp;rsquo;t allow to detect type of that event. Android API has &lt;a href=&#34;http://developer.android.com/reference/android/view/GestureDetector.html&#34;&gt;GestureDetector&lt;/a&gt; class, which allows to detect long press and double tap events. There is also &lt;a href=&#34;http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html&#34;&gt;GestureDetector.OnGestureListener&lt;/a&gt; interface, which has the following methods:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing release and debug version of app on a single device</title>
      <link>https://wittchen.io/notes/installing-release-and-debug-version-of-app-on-a-single-device/</link>
      <pubDate>Thu, 25 Dec 2014 15:15:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/installing-release-and-debug-version-of-app-on-a-single-device/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;During software development process developers and QAs may want to have installed release and debug version of the app on a single device, what can be very helpful when they want to develop and use application at the same time. Another advantage is the fact that debug and release version of the app may need different configuration. It this post I will show you an example in which we are changing application name and launcher icon, but we can also change different values during compilation in the same way (e.g. address of the webservice). Some time ago, I&amp;rsquo;ve created &lt;a href=&#34;http://blog.wittchen.biz.pl/different-back-end-urls-for-debug-and-release-version-of-the-android-app/&#34;&gt;similar template&lt;/a&gt;, but it was using older version of Build Tools, Android SDK and Android Studio. I&amp;rsquo;ve created new template, with the newest version of Android Studio (1.0.2) and newest version of Build Tools (1.0.0), so in that case, build.gradle file is smaller and simpler, but does its work correctly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basics of Git</title>
      <link>https://wittchen.io/notes/basics-of-git/</link>
      <pubDate>Thu, 27 Nov 2014 21:49:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/basics-of-git/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;http://git-scm.com/&#34;&gt;Git&lt;/a&gt; is very popular Version Control System used in many software projects today. In my opinion, it&amp;rsquo;s the best VCS available today. In order to start your adventure with this tool, you should know its basic commands and features. There are graphical tools, which allows to use Git without terminal, but I recommend you to use terminal. With CLI you can work faster, you can understand Git better and you have more control over your repository.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to update forked GitHub repository?</title>
      <link>https://wittchen.io/notes/how-to-update-forked-github-repository/</link>
      <pubDate>Fri, 07 Nov 2014 12:29:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/how-to-update-forked-github-repository/</guid>
      <description>&lt;p&gt;When you fork GitHub repository, you usually want to have your fork up to date with the original repository.
You can update your fork in a few easy steps. Just look at the following example of the Git commands:&lt;/p&gt;
&lt;p&gt;Add the remote, call it &lt;code&gt;upstream&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git remote add upstream https://github.com/whoever/whatever.git
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Fetch all the branches of that remote into remote-tracking branches,
such as upstream/master:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git fetch upstream
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Make sure that you&amp;rsquo;re on your master branch:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to switch java version on Linux</title>
      <link>https://wittchen.io/notes/how-to-switch-java-version-on-linux/</link>
      <pubDate>Sun, 02 Nov 2014 12:33:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/how-to-switch-java-version-on-linux/</guid>
      <description>&lt;p&gt;Sometimes we need to run specific program with a concrete version of JVM. We can also work with Java 7, but we want to try Java 8. In such cases, we can have installed both Java 7 and 8 on our system and easily switch between them. In order to show current java version, we can simply type: &lt;code&gt;java -version&lt;/code&gt; in terminal. On my computer I received the following response:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Java Gradle Template</title>
      <link>https://wittchen.io/notes/java-gradle-template/</link>
      <pubDate>Fri, 17 Oct 2014 23:11:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/java-gradle-template/</guid>
      <description>&lt;p&gt;Some time ago, I had some troubles with configuring Java project with Gradle in IntelliJ IDEA CE. There is possibility to create new Gradle project in mentioned IDE, but for some reason it didn&amp;rsquo;t worked out-of-the box in my case on Ubuntu. I wanted to have pure, clean Java project with Gradle build system ready to open in IntelliJ IDEA. I found well configured simple project at: &lt;a href=&#34;https://github.com/quinnliu/SampleGradleProject&#34;&gt;https://github.com/quinnliu/SampleGradleProject&lt;/a&gt;. Basing on that project, I created my simple template. I modified this project a little bit, added &lt;a href=&#34;https://github.com/alexruiz/fest-assert-2.x&#34;&gt;FEST assertions&lt;/a&gt; and wrote a few Unit Tests. In addition, I configured main class in &lt;code&gt;build.gradle&lt;/code&gt; file in order to execute it via &lt;code&gt;./gradlew run&lt;/code&gt; command. My project template also has gradle wrapper, which is very convenient practice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Square is advocating against fragments</title>
      <link>https://wittchen.io/notes/square-is-advocating-against-fragments/</link>
      <pubDate>Sun, 12 Oct 2014 18:58:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/square-is-advocating-against-fragments/</guid>
      <description>&lt;p&gt;Recently, &lt;a href=&#34;http://squareup.com&#34;&gt;Square&lt;/a&gt; engineers confirmed my doubts I always had about fragments. I definitely knew that something was wrong with them, but Google introduced fragments into Android API, so I thought it must be okay for some reason and I tried to live with them feeling pain. Finally, concrete company have written an article criticizing Android Fragments and I totally agree with them. Read the article at: &lt;a href=&#34;http://corner.squareup.com/2014/10/advocating-against-android-fragments.html&#34;&gt;http://corner.squareup.com/2014/10/advocating-against-android-fragments.html&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The future of programming</title>
      <link>https://wittchen.io/notes/the-future-of-programming/</link>
      <pubDate>Sun, 12 Oct 2014 18:26:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/the-future-of-programming/</guid>
      <description>&lt;p&gt;I highly recommend you to watch a short lecture presented by &lt;a href=&#34;http://worrydream.com/&#34;&gt;Bret Victor&lt;/a&gt; at Dropbox&amp;rsquo;s DBX conference on July 9, 2013. It really broadens the mind.&lt;/p&gt;


&lt;iframe src=&#34;//player.vimeo.com/video/71278954?title=0&amp;amp;byline=0&amp;amp;portrait=0&#34; style=&#34;width:100%;height:535px&#34; frameborder=&#34;0&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;
&lt;a href=&#34;http://vimeo.com/71278954&#34;&gt;Bret Victor - The Future of Programming&lt;/a&gt; from &lt;a href=&#34;http://vimeo.com/worrydream&#34;&gt;Bret Victor&lt;/a&gt; on &lt;a href=&#34;https://vimeo.com&#34;&gt;Vimeo&lt;/a&gt;.


&lt;p&gt;References: &lt;a href=&#34;http://worrydream.com/dbx/&#34;&gt;http://worrydream.com/dbx/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Different build config for debug and release version of the Android app</title>
      <link>https://wittchen.io/notes/different-build-config-for-debug-and-release-version-of-the-android-app/</link>
      <pubDate>Wed, 08 Oct 2014 17:52:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/different-build-config-for-debug-and-release-version-of-the-android-app/</guid>
      <description>&lt;p&gt;Sometimes we may want to set different address of the back-end web service for debuggable and release version of our Android app. E.g. predefined static host and port for release version of the application and our local IP address and predefined port for debuggable version of the application. In second case, we can deploy back-end webservice on our local machine for testing purposes. We can customize all of that in build.gradle file. We can use &lt;code&gt;variant.buildType.isDebuggable()&lt;/code&gt; instruction to check build type of the app. I described way of &lt;a href=&#34;http://blog.wittchen.biz.pl/updating-android-xml-resources-dynamically-before-compilation-via-gradle/&#34;&gt;Updating Android XML resources before compilation via Gradle&lt;/a&gt; in &lt;a href=&#34;http://blog.wittchen.biz.pl/updating-android-xml-resources-dynamically-before-compilation-via-gradle/&#34;&gt;one of my previous posts&lt;/a&gt;, so you can check it if you don&amp;rsquo;t understand &lt;code&gt;replaceBackendAddressInResources(variant, host, port)&lt;/code&gt; method. After proper configuration, setting of the back-end url is straightforward. Please check the code between &lt;code&gt;// configuration of the back-end address - begin&lt;/code&gt; and &lt;code&gt;// configuration of the back-end address - end&lt;/code&gt; comments.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weather Icons for Android applications</title>
      <link>https://wittchen.io/notes/weather-icons-for-android-applications/</link>
      <pubDate>Thu, 02 Oct 2014 21:18:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/weather-icons-for-android-applications/</guid>
      <description>&lt;p&gt;Some time ago I found &lt;a href=&#34;https://github.com/erikflowers/weather-icons/&#34;&gt;Weather Icons&lt;/a&gt; project by &lt;a href=&#34;https://github.com/erikflowers&#34;&gt;Erik Flowers&lt;/a&gt;. It&amp;rsquo;s customized font with appropriate CSS, which allows you to use weather icons on the website. In addition, those icons can be customized. They can have different size or color. Moreover, they are compatible with the &lt;a href=&#34;http://getbootstrap.com/&#34;&gt;Bootstrap&lt;/a&gt;. I thought, that it would be nice, if I had something like that for Android applications. That&amp;rsquo;s why I created simple open-source project called &lt;a href=&#34;https://github.com/pwittchen/WeatherIconView&#34;&gt;Weather Icon View&lt;/a&gt;. It&amp;rsquo;s customized view for Android, which allows you to use weather icons in mobile apps in similar way as in web apps. When you add mentioned library to your project, you can use it in XML layout in the following way:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Micro-location based on WiFi Access Points</title>
      <link>https://wittchen.io/notes/micro-location-based-on-wifi-access-points/</link>
      <pubDate>Sun, 21 Sep 2014 13:16:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/micro-location-based-on-wifi-access-points/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Recently, I started working on quite interesting project. One of its elements is micro-location inside the building based on WiFi Access Points. Company&amp;rsquo;s buildings have a lot of Access Points in different locations like regular rooms, conference rooms, corridors, sports building and restaurant. Having pool of Access Points with their names, locations and &lt;a href=&#34;http://en.wikipedia.org/wiki/MAC_address&#34;&gt;MAC&lt;/a&gt; addresses (or more precisely: &lt;a href=&#34;http://en.wiktionary.org/wiki/BSSID&#34;&gt;BSSID&lt;/a&gt;) it&amp;rsquo;s possible to create micro-location for Android mobile devices.&lt;/p&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;On the image below, you can see approximate location of WiFi Access Points in the F3 building of Future Processing company. Other buildings also have their own Access Points, but they weren&amp;rsquo;t taken into consideration during the initial experiment. Android gives us possibility to scan available WiFi Access Points and measure their signal strength. Appropriate &lt;a href=&#34;http://developer.android.com/reference/android/content/BroadcastReceiver.html&#34;&gt;BroadcastReceiver&lt;/a&gt; allows us to react on event of changing WiFi Access Points signal strength, what can be interpreted as movement of person having mobile device. When such event occurs, we can read list of available Access Points, measure their signal strength, detect Access Point with the strongest signal, map it to specific room location and start WiFi scan again in order to retrieve fresh list of the Access Points as soon as possible. We have to remember that WiFi scanning is an asynchronous operation, so we don&amp;rsquo;t know, when we receive the results. That&amp;rsquo;s why event-driven development is good approach in such case. We can use pure Android BroadcastReceiver or use &lt;a href=&#34;http://square.github.io/otto/&#34;&gt;Otto Event Bus&lt;/a&gt; to make our code annotation-based, fine-grained and clear.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Versioning Android applications</title>
      <link>https://wittchen.io/notes/versioning-android-applications/</link>
      <pubDate>Sat, 13 Sep 2014 12:49:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/versioning-android-applications/</guid>
      <description>&lt;p&gt;When we work in a team projects, our code constantly changes and being tested. Often some bugs occur in a specific version of application and no longer exists in next version of the project, because one programmer might fixed the bug according to the &lt;a href=&#34;http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule&#34;&gt;Boy Scout Rule&lt;/a&gt; and this is good. Nevertheless, sometimes we need to write documentation and check in which version bug occurred to be sure, that it was really fixed. In addition, &lt;a href=&#34;http://en.wikipedia.org/wiki/Quality_assurance&#34;&gt;QA&lt;/a&gt; Engineer needs to know, which version of the project he or she should check. That&amp;rsquo;s why we should introduce versioning system to our project. In Android Manifest we have &lt;code&gt;versionCode&lt;/code&gt; and &lt;code&gt;versionName&lt;/code&gt;. The &lt;code&gt;versionCode&lt;/code&gt; is used for updates on Google Play Store and it has to be integer value. We should increment &lt;code&gt;versionCode&lt;/code&gt; before releasing new version of the application for the users. The &lt;code&gt;versionName&lt;/code&gt; available in Android Manifest is a string value and we can use it to store information, which we need in a current project. When we use Git as a Version Control System, we can put SHA value of a specific commit into our version name. In addition, we can add date and time of compilation to this variable. After that, our &lt;code&gt;versionName&lt;/code&gt; contains very detailed information about current version of our application. Exemplary &lt;code&gt;versionName&lt;/code&gt; will look in as follows: &lt;code&gt;f935ea7-20140913144001&lt;/code&gt;. We can obtain that with proper configuration of &lt;code&gt;build.gradle&lt;/code&gt; file containing &lt;code&gt;buildTime()&lt;/code&gt; method and &lt;code&gt;gitSha()&lt;/code&gt; method. Please, take a look at creation of &lt;code&gt;versionName&lt;/code&gt; in 35th line of the &lt;code&gt;build.gradle&lt;/code&gt; file presented below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updating Android XML resources before compilation via Gradle</title>
      <link>https://wittchen.io/notes/updating-android-xml-resources-before-compilation-via-gradle/</link>
      <pubDate>Wed, 10 Sep 2014 21:22:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/updating-android-xml-resources-before-compilation-via-gradle/</guid>
      <description>&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;
&lt;p&gt;In a team project, we encountered one of the common problems connected with mobile applications. Android application sends requests to backend web service and we don&amp;rsquo;t have backend web service deployed right now on a separate server, so every mobile developer is compiling and running backend web service on the local machine for testing purposes. In the beginning, url of backend url looked as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;resources&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;string&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;backend_url&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;192.168.1.1&lt;span class=&#34;nt&#34;&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/resources&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Of course address varies on different machines.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Indicators for Ubuntu</title>
      <link>https://wittchen.io/notes/indicators-for-ubuntu/</link>
      <pubDate>Sun, 07 Sep 2014 20:47:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/indicators-for-ubuntu/</guid>
      <description>&lt;p&gt;I recently found an article about &lt;a href=&#34;http://www.noobslab.com/2013/12/best-useful-indicators-collection-for.html&#34;&gt;Best Useful Indicators Collection for Ubuntu&lt;/a&gt;. Indicators are very useful feature of the Ubuntu and Unity. Ubuntu has some default indicators, but we can add new indicators if we want to. Mentioned article contains list of many indicators, but personally I prefer and use only a few of them. Here are my favorites:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ubuntu_indicators&#34; loading=&#34;lazy&#34; src=&#34;https://wittchen.io/posts/2014/indicators-for-ubuntu/ubuntu_indicators.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;multi-load-indicator&#34;&gt;Multi Load indicator&lt;/h2&gt;
&lt;p&gt;Nice thing. This indicator monitors system resources. E.g. usage of the processor, RAM, disk and network. We can customize it and set refresh interval. I found default low interval like 500 ms very disturbing, so I changed it to 5000 ms and it&amp;rsquo;s ok for me. In the screenshot above, you can see blue chart for CPU usage, green chart for RAM usage and yellow chart for network usage. You can change, configure and customize it as you want.&lt;/p&gt;</description>
    </item>
    <item>
      <title>EEG Analyzer - Android app</title>
      <link>https://wittchen.io/notes/eeg-analyzer-android-app/</link>
      <pubDate>Mon, 01 Sep 2014 11:38:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/eeg-analyzer-android-app/</guid>
      <description>&lt;p&gt;I recently published my side project connected with &lt;a href=&#34;http://en.wikipedia.org/wiki/Brain%E2%80%93computer_interface&#34;&gt;BCI&lt;/a&gt; and &lt;a href=&#34;http://en.wikipedia.org/wiki/Electroencephalography&#34;&gt;EEG&lt;/a&gt; technology in Google Play Store. &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.pwittchen.eeganalyzer&#34;&gt;&lt;img alt=&#34;unnamed&#34; loading=&#34;lazy&#34; src=&#34;https://wittchen.io/posts/2014/eeg-analyzer-android-app/eeg_analyzer_graphic.png&#34;&gt;&lt;/a&gt; &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.pwittchen.eeganalyzer&#34;&gt;EEG Analyzer&lt;/a&gt; reads electrical activity of the brain with &lt;a href=&#34;http://en.wikipedia.org/wiki/Electroencephalography&#34;&gt;EEG&lt;/a&gt; technology and blink strength with &lt;a href=&#34;http://en.wikipedia.org/wiki/Electromyography&#34;&gt;EMG&lt;/a&gt; sensor from NeuroSky MindWave Mobile device connected via Bluetooth to Android device. &lt;strong&gt;In order to use this application, you need to have NeuroSky MindWave Mobile device&lt;/strong&gt;, which can be ordered from &lt;a href=&#34;http://neurosky.com/&#34;&gt;http://neurosky.com/&lt;/a&gt; website. Direct link to the mentioned product: &lt;a href=&#34;http://store.neurosky.com/products/brainwave-starter-kit&#34;&gt;http://store.neurosky.com/products/brainwave-starter-kit&lt;/a&gt; Application has the following features:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Publishing Android application in Google Play store</title>
      <link>https://wittchen.io/notes/publishing-android-application-in-google-play-store/</link>
      <pubDate>Sun, 31 Aug 2014 14:44:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/publishing-android-application-in-google-play-store/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;When you want to publish your Android application in Google Play Store, first you need to go to &lt;a href=&#34;https://play.google.com/apps/publish/&#34;&gt;https://play.google.com/apps/publish/&lt;/a&gt; website and create a Developer account. Its cost is $25. You can read more about that at: &lt;a href=&#34;https://support.google.com/googleplay/android-developer/answer/113468?hl=en&#34;&gt;https://support.google.com/googleplay/android-developer/answer/113468?hl=en&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;problems-with-payments-during-registration&#34;&gt;Problems with payments during registration&lt;/h2&gt;
&lt;p&gt;Remember that you need to have appropriate debit card in order to proceed with payments. E.g. I have debit card in PKO BP (Polish bank), which has two-stage authorization. Most of debit cards has two-stage authorization for the registration of the card in on-line payment system and next payments are verified only once. In my bank every payment is verified twice. It&amp;rsquo;s more secure, but due to this security policy I was not able to pay for my developer account at all! I decided to create another bank account for on-line payments in bank, which has one-stage authorization for regular payments. I&amp;rsquo;ve chosen mBank (another Polish bank). Finally, I was able to proceed with payments and create my developer account.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stuff you should know about Android</title>
      <link>https://wittchen.io/notes/stuff-you-should-know-about-android/</link>
      <pubDate>Fri, 29 Aug 2014 16:29:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/stuff-you-should-know-about-android/</guid>
      <description>&lt;p&gt;Today I had talk at &lt;a href=&#34;http://www.future-processing.com/&#34;&gt;Future Processing&lt;/a&gt; about Android. It was part of company&amp;rsquo;s Java show &amp;amp; tell series. I wanted to make it interesting both for people without any experience with Android development and for people who already know something about this platform. Presentation was divided into three main parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Basics&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Challenges&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Techniques&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below, you can browse slides from the presentation.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://slides.com/piotrwittchen/stuff-you-should-know-about-android#/&#34;&gt;View the presentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Of course, slides does not show everything I prepared, but they are good summary of the talk. I hope you find it interesting and useful. Feel free to give me any feedback about the presentation (especially if you attended it in person. ;-)) !&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reading/writing generic Java objects to JSON files and vice versa</title>
      <link>https://wittchen.io/notes/reading-writing-generic-java-objects-to-json-files-and-vice-versa/</link>
      <pubDate>Wed, 27 Aug 2014 21:19:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/reading-writing-generic-java-objects-to-json-files-and-vice-versa/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Recently, I have written small set of methods for a FileHelper using &lt;a href=&#34;http://jackson.codehaus.org/&#34;&gt;Jackson library&lt;/a&gt; in Android application, which allows to save &lt;a href=&#34;http://en.wikipedia.org/wiki/Generics_in_Java&#34;&gt;generic Java objects&lt;/a&gt; and list of generic objects in &lt;a href=&#34;http://en.wikipedia.org/wiki/JSON&#34;&gt;JSON&lt;/a&gt; format to a file and read them back in the original form. In the beginning I had some problems with saving and reading data properly. I could save and read data (e.g. list of the objects), but their type was &lt;a href=&#34;http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html&#34;&gt;LinkedHashMap&lt;/a&gt;, which wasn&amp;rsquo;t the list of desired generic objects. After adjusting Jackson library, I finally achieved my goal. You can see helper class below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NetworkEvents - Android library</title>
      <link>https://wittchen.io/notes/network-events-android-library/</link>
      <pubDate>Tue, 19 Aug 2014 14:59:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/network-events-android-library/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Please note: This post is outdated. Check newest API on the &lt;a href=&#34;https://github.com/pwittchen/NetworkEvents&#34;&gt;GitHub&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;NetworkEvents is an Android library, which I&amp;rsquo;ve created recently for one of the projects. It uses &lt;a href=&#34;http://square.github.io/otto/&#34;&gt;Otto Event Bus&lt;/a&gt; to support event driven programming. We can use appropriate annotations and perform any action, when connectivity status changes. E.g. when device will go offline, connects to the mobile network, connects to the WiFi network, connects to the WiFi network with Internet access or connects to WiFi network without Internet access. Android API does not allow to determine whether specific WiFi Access Point is connected to the Internet, but this library does. In addition, we can monitor change of the signal strength of available WiFi Access Points in the same manner as connectivity status.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software for common users on Ubuntu</title>
      <link>https://wittchen.io/notes/software-for-common-users-on-ubuntu/</link>
      <pubDate>Mon, 18 Aug 2014 16:17:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/software-for-common-users-on-ubuntu/</guid>
      <description>&lt;p&gt;In this article, I&amp;rsquo;ll describe Ubuntu software for common users, which I personally use and which could be helpful on daily basis. Ubuntu software dedicated to programmers AKA developers will be described in separate article.&lt;/p&gt;
&lt;h2 id=&#34;chrome&#34;&gt;Chrome&lt;/h2&gt;
&lt;p&gt;In my opinion, it&amp;rsquo;s currently the best web browser. We can download, unpack and install it, with the following commands:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get install libxss1 libappindicator1 libindicator7
wget https://dl.google.com/linux/direct/google-chrome-stable\_current\_amd64.deb
sudo dpkg -i google-chrome*.deb
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;skype&#34;&gt;Skype&lt;/h2&gt;
&lt;p&gt;Maybe it&amp;rsquo;s not the best, but one of the most known messengers and lot of people use it. In addition, at my work people currently use it as a common messenger. We can download and install it with the following commands (first command adds new software repository, from which Skype can be downloaded):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu system boot problem</title>
      <link>https://wittchen.io/notes/ubuntu-system-boot-problem/</link>
      <pubDate>Sun, 17 Aug 2014 20:05:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/ubuntu-system-boot-problem/</guid>
      <description>&lt;h2 id=&#34;description-of-the-problem&#34;&gt;Description of the problem&lt;/h2&gt;
&lt;p&gt;Recently, after installing Linux Ubuntu 14.04 LTS on my computer, I encountered strange problem during the system boot. Before system launched, I received the following message: After that, I typed: &lt;code&gt;exit&lt;/code&gt; and system started normally, but this error occurred every time after reboot, so I decided to fix it.&lt;/p&gt;
&lt;h2 id=&#34;fixing-the-problem&#34;&gt;Fixing the problem&lt;/h2&gt;
&lt;h3 id=&#34;attempt-1&#34;&gt;Attempt #1&lt;/h3&gt;
&lt;p&gt;First, I tried to change &lt;code&gt;rootdelay&lt;/code&gt; as error message said. I opened file &lt;code&gt;/etc/default/grub&lt;/code&gt;
I found there the following line:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Brain-Computer Interface for mobile devices - Master Thesis presentation</title>
      <link>https://wittchen.io/notes/bci-for-mobile-devices-master-thesis-presentation/</link>
      <pubDate>Tue, 08 Jul 2014 20:03:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/bci-for-mobile-devices-master-thesis-presentation/</guid>
      <description>&lt;p&gt;Recently, I graduated from &lt;a href=&#34;http://www.polsl.pl/&#34;&gt;my university&lt;/a&gt;. Below, you can browse my Master Thesis presentation about &lt;em&gt;Brain-Computer Interface for mobile devices&lt;/em&gt;. If you are interested in writing mobile Android applications communicating with NeuroSky MindWave Mobile device, you can check my &lt;a href=&#34;https://github.com/pwittchen/EEGReader/&#34;&gt;EEG Reader&lt;/a&gt; project on GitHub, which can be treated as a basis for more advanced projects. During writing my Master Thesis, I created two another projects using similar concepts. Mentioned code may be a little bit outdated comparing to the newest Android trends, but feel free to fork and upgrade it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Selected aspects of creating mobile Android applications</title>
      <link>https://wittchen.io/notes/selected-aspects-of-creating-mobile-android-applications/</link>
      <pubDate>Mon, 07 Apr 2014 17:04:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/selected-aspects-of-creating-mobile-android-applications/</guid>
      <description>&lt;p&gt;During the development of mobile applications, we should adjust our point of view to the specific projects we are working with. Applications for mobile devices are different than desktop or web applications. They have their own lifecycle, work on various devices with different screen resolutions. They have to work on devices with limited memory, clock rate of the CPU and battery life. In addition, these applications often have to be able to work without an Internet connection and their user interface has to be simple and well-designed due to smaller screen of a typical smartphone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to highlight and click on ListView item in Android programmatically?</title>
      <link>https://wittchen.io/notes/how-to-highlight-and-click-on-listview-item-in-android-programmatically/</link>
      <pubDate>Thu, 06 Mar 2014 21:43:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/how-to-highlight-and-click-on-listview-item-in-android-programmatically/</guid>
      <description>&lt;p&gt;There are many approaches concerning selecting items on Android&amp;rsquo;s ListView. Unfortunately most of them don&amp;rsquo;t work. I was struggling with this problem for some time and decided to publish my solution, which is actually quite easy.&lt;/p&gt;
&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;
&lt;p&gt;I want to highlight item on a ListView programmatically (in a source code - without touching item on the screen).
I also want to click on item of the ListView programmatically.&lt;/p&gt;
&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;
&lt;p&gt;We have to create our own adapter. Let&amp;rsquo;s call it ContactsAdapter.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to read contacts in Android device using ContentResolver?</title>
      <link>https://wittchen.io/notes/how-to-read-contacts-in-android-device-using-contentresolver/</link>
      <pubDate>Sun, 02 Mar 2014 22:23:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/how-to-read-contacts-in-android-device-using-contentresolver/</guid>
      <description>&lt;p&gt;With &lt;a href=&#34;http://developer.android.com/guide/topics/providers/content-providers.html&#34;&gt;Content Providers&lt;/a&gt; we can access data stored by Android system applications. Popular example of using Content Provider is retrieving contact list from the smartphone. We can also access Calendar or create our own Content Provider. More information about that can be found in documentation of Android. If we want to access Content Provider, we can use &lt;a href=&#34;http://developer.android.com/reference/android/content/ContentResolver.html&#34;&gt;Content Resolver&lt;/a&gt; in our application&amp;rsquo;s context.&lt;/p&gt;
&lt;p&gt;In this example, we will access contact list. First of all, it’s good to create Contact entity class, which will be model of our data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Avoiding OutOfMemory Error while loading large Bitmaps in Android UI</title>
      <link>https://wittchen.io/notes/avoiding-outofmemory-error-while-loading-large-bitmaps-in-android-ui/</link>
      <pubDate>Sun, 23 Feb 2014 13:34:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/avoiding-outofmemory-error-while-loading-large-bitmaps-in-android-ui/</guid>
      <description>&lt;p&gt;Sometimes we may encounter an error connected with loading too large Bitmaps into Android UI. In such cases, we may receive &lt;code&gt;OutOfMemoryError&lt;/code&gt; in stack trace. In Android, we are working with limited memory and we shouldn&amp;rsquo;t load images with full resolution into UI. These images should be scaled down in order to save memory and increase performance of the application. It&amp;rsquo;s very well described in official Android documentation in section &lt;a href=&#34;http://developer.android.com/training/displaying-bitmaps/load-bitmap.html&#34; title=&#34;Loading Large Bitmaps Efficiently&#34;&gt;Loading Large Bitmaps Efficiently&lt;/a&gt;. It&amp;rsquo;s worth reading. We can deal with memory problem in three easy steps:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Issue workflow in agile projects</title>
      <link>https://wittchen.io/notes/issue-workflow-in-agile-projects/</link>
      <pubDate>Wed, 15 Jan 2014 21:08:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/issue-workflow-in-agile-projects/</guid>
      <description>&lt;p&gt;In team projects it&amp;rsquo;s important to prepare &lt;strong&gt;issue workflow&lt;/strong&gt; and, so-called, &lt;strong&gt;definition of done&lt;/strong&gt; in order to be sure, when particular task is actually done. It&amp;rsquo;s often practiced in &lt;a href=&#34;http://en.wikipedia.org/wiki/Agile_software_development&#34;&gt;&lt;strong&gt;agile&lt;/strong&gt;&lt;/a&gt; projects and &lt;a href=&#34;http://en.wikipedia.org/wiki/Scrum_(software_development)&#34;&gt;&lt;strong&gt;scrum&lt;/strong&gt;&lt;/a&gt; process. When we take into consideration IT projects and version control system like &lt;a href=&#34;http://git-scm.com/&#34;&gt;Git&lt;/a&gt;, we can create Git branches with concrete purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;master branch&lt;/strong&gt; - latest stable version of the application - for Product Owner and client&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;development branch&lt;/strong&gt; - latest development version of the application with passed tests and code reviews, but waiting for approval of the Product Owner - for developers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;many single branches for each issue (task)&lt;/strong&gt; in the project (e.g. creating part of the GUI, coding specific functionality or fixing a bug)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Besides the Version Control System, we also need to have other essential tools for software developement like issue tracker, etc. in order to realize work well. The easiest way to present definition of done (issue workflow) is to prepare a diagram. Exemplary diagram of such process introduced in one of the projects I am working in, is presented below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to connect to Android device via TCP/IP?</title>
      <link>https://wittchen.io/notes/how-to-connect-to-android-device-via-tcp-ip/</link>
      <pubDate>Sat, 12 Oct 2013 12:48:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/how-to-connect-to-android-device-via-tcp-ip/</guid>
      <description>&lt;p&gt;While developing Android applications, we need to debug them on real devices. We also should be able to access &lt;a href=&#34;http://developer.android.com/tools/help/logcat.html&#34;&gt;debug output&lt;/a&gt; and execute Unix shell commands. In Android device (mobile phone or tablet), we can go to &lt;em&gt;Settings&lt;/em&gt; and then to &lt;em&gt;Developer options&lt;/em&gt;. Afterwards, we can enable &lt;em&gt;USB Debugging&lt;/em&gt;. Now, we can connect our device via USB cable to the computer and we will be able to access it via &lt;a href=&#34;http://developer.android.com/tools/help/adb.html&#34;&gt;Android Debug Bridge (ADB)&lt;/a&gt;. USB connection is standard way of debugging application on real devices. We can also use TCP/IP connection and debug applications wireless. In order to do that, we need to go through the following steps:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Justifying block of text inside TextView in Android</title>
      <link>https://wittchen.io/notes/justifying-block-of-text-inside-textview-in-android/</link>
      <pubDate>Sat, 31 Aug 2013 22:14:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/justifying-block-of-text-inside-textview-in-android/</guid>
      <description>&lt;p&gt;Justifying text inside &lt;code&gt;TextView&lt;/code&gt; in Android is not that simple as we may expect it to be. Unfortunately, Android does not have attribute for &lt;code&gt;TextView&lt;/code&gt;, which supports justifying text. We can set alignment to the right or to the left, but we cannot simply justify text with generic attributes. In order to do that, we need to perform a few tricks. First of all, we need to create file named &lt;code&gt;justified_textview.css&lt;/code&gt; and we need to put it into the &lt;code&gt;assets/&lt;/code&gt; directory of our project. We will use it later in our custom view. Source code of this CSS stylesheet is presented below:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Asynchronous loading and caching bitmaps with Volley</title>
      <link>https://wittchen.io/notes/asynchronous-loading-and-caching-bitmaps-with-volley/</link>
      <pubDate>Mon, 26 Aug 2013 23:37:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/asynchronous-loading-and-caching-bitmaps-with-volley/</guid>
      <description>&lt;p&gt;We can use &lt;a href=&#34;https://android.googlesource.com/platform/frameworks/volley/&#34;&gt;Volley&lt;/a&gt; library from Google for very clean, simple and easy loading of the images from Internet. Volley uses &lt;a href=&#34;http://developer.android.com/reference/android/util/LruCache.html&#34;&gt;LRU cache&lt;/a&gt;, so first of all, we need to create BitmapLruCache class extending LruCache class.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;com.github.volley.example.toolbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;com.android.volley.toolbox.ImageLoader.ImageCache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;android.graphics.Bitmap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;android.support.v4.util.LruCache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;BitmapLruCache&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LruCache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bitmap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;implements&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ImageCache&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;BitmapLruCache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxSize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxSize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//    Fix thanks to Steven&amp;#39;s comment: sizeOf method should not be overriden, &lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//    when we are passing max image cache entries in another place of the code&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//    @Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//    protected int sizeOf(String key, Bitmap value) {&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//        return value.getRowBytes() * value.getHeight();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//    }&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bitmap&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getBitmap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;putBitmap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bitmap&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitmap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;put&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitmap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next, we need to create VolleyHelper class.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to change Fragment layout on orientation change?</title>
      <link>https://wittchen.io/notes/how-to-change-fragment-layout-on-orientation-change/</link>
      <pubDate>Thu, 15 Aug 2013 22:50:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/how-to-change-fragment-layout-on-orientation-change/</guid>
      <description>&lt;p&gt;When we work with Activities in Android, defining different layouts for different screen orientations is easy. The only thing we need to do, is to create two &lt;code&gt;*.xml&lt;/code&gt; files with the same name for layouts in two separate directories (&lt;em&gt;res/layout/&lt;/em&gt; and &lt;em&gt;res/layout-land/&lt;/em&gt;). In &lt;a href=&#34;http://developer.android.com/guide/components/fragments.html&#34;&gt;Fragments&lt;/a&gt; it&amp;rsquo;s not that easy. In such case, we need to perform additional operations in order to achieve our goal. Fragment in Android is not re-inflated on configuration change, but we can recreate layout and repopulate view manually. We need to create two layouts for different orientations of the screen in the same way as for Activity:&lt;/p&gt;</description>
    </item>
    <item>
      <title>First Google Glass Hackathon in Poland</title>
      <link>https://wittchen.io/notes/first-google-glass-hackathon-in-poland/</link>
      <pubDate>Tue, 30 Jul 2013 18:46:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/first-google-glass-hackathon-in-poland/</guid>
      <description>&lt;p&gt;Some time ago I participated in first Google Glass Hackathon in Poland, where I had possibility to test Google Glass, try it and write applications, which can be run on this cutting-edge device. It was very interesting experience. In addition, I took 2nd place with my team, what made me happy after leaving Warsaw late night. In a few hours, we created simple native application for Android platform, which can be used as a city guide with augmented reality, geolocation and image recognition. We called it &lt;em&gt;Hereandhounds&lt;/em&gt;. You can see its source code at: &lt;a href=&#34;https://github.com/pwittchen/Hereandhounds&#34;&gt;https://github.com/pwittchen/Hereandhounds&lt;/a&gt;. You can read detailed report from that event at technical blog of Future Processing: &lt;a href=&#34;http://www.future-processing.pl/blog/relacja-z-pierwszego-w-polsce-glass-hackathonu/&#34; title=&#34;http://www.future-processing.pl/blog/relacja-z-pierwszego-w-polsce-glass-hackathonu/&#34;&gt;http://www.future-processing.pl/blog/relacja-z-pierwszego-w-polsce-glass-hackathonu/&lt;/a&gt;. Unfortunately, its available &lt;strong&gt;only in Polish language&lt;/strong&gt; right now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Brain Computer Interface for mobile devices - introduction</title>
      <link>https://wittchen.io/notes/bci-for-mobile-devices-intro/</link>
      <pubDate>Wed, 05 Jun 2013 16:50:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/bci-for-mobile-devices-intro/</guid>
      <description>&lt;p&gt;Currently, I work on my Final Project and &lt;strong&gt;Master Thesis&lt;/strong&gt; at Silesian University of Technology in Gliwice, Poland (original University name in Polish: Politechnika Śląska). I&amp;rsquo;ve decided to choose unconventional topic, which will allow me to use the knowlegde I already have, extend it and learn something new. Topic of my thesis is: &lt;em&gt;&lt;strong&gt;Brain Computer Interface for mobile devices&lt;/strong&gt;&lt;/em&gt;. &lt;a href=&#34;http://en.wikipedia.org/wiki/Brain%E2%80%93computer_interface&#34;&gt;BCI&lt;/a&gt; is a topic, which is not completely discovered nowadays. &lt;a href=&#34;http://en.wikipedia.org/wiki/Electroencephalography&#34;&gt;EEG&lt;/a&gt; and BCI have their origins in 1924, but up to now, they don&amp;rsquo;t have so many real life applications. We can find only some experiments and simple games. Recently, companies, engineers and scientists started to focus on brain waves, so this topic is worth investigation and it may be the future of modern computing. In my project, I am going to use BCI for controlling mobile devices with Android OS. In my opinion, connecting brain to the smartphone can have really interesting outcome. Below, you can browse my presentation, which I have shown on my Final Project Seminar today.&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 essential tools for serious software development in a team projects</title>
      <link>https://wittchen.io/notes/5-essential-tools-for-serious-software-development-in-a-team-projects/</link>
      <pubDate>Wed, 27 Mar 2013 23:33:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/5-essential-tools-for-serious-software-development-in-a-team-projects/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Daily usage of tools mentioned in this post is quite obvious for me right now, but using them wasn&amp;rsquo;t obvious while I was working alone or when I was involved only in freelance or private projects. Whilst we don&amp;rsquo;t work in a group, we don&amp;rsquo;t have to care about lot of things, but when we work in a team (even small), we have to organize and optimize our work very well in order to obtain its high quality, work efficiently and make life of future developers of our code and co-workers easier.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Displaying image from the Internet inside the TextView</title>
      <link>https://wittchen.io/notes/displaying-image-from-the-internet-resource-inside-the-textview-in-android/</link>
      <pubDate>Tue, 19 Mar 2013 23:04:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/displaying-image-from-the-internet-resource-inside-the-textview-in-android/</guid>
      <description>&lt;p&gt;Sometimes, we have to work with legacy code and we have to change application&amp;rsquo;s behavior without modifying layouts, structure of the application and core components. Such situations can force us to do some tricks during development or maintenance process. For example, at the beginning, our app had to download data from the web service or RSS channel. This data consisted of the text, so we could use &lt;em&gt;TextView&lt;/em&gt; in order to display such information. After some time, back-end developers decided to put there some HTML code including references to images. We want to display images in our mobile application without modifying existing structure, so we can create data of type &lt;em&gt;Drawable&lt;/em&gt; inside the &lt;em&gt;TextView&lt;/em&gt;. We can do it by creating an additional method &lt;em&gt;getImageHTML()&lt;/em&gt; and using &lt;a href=&#34;http://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String)&#34;&gt;&lt;em&gt;fromHtml&lt;/em&gt;&lt;/a&gt; method from &lt;a href=&#34;http://developer.android.com/reference/android/text/Html.html&#34;&gt;&lt;em&gt;Html&lt;/em&gt; class&lt;/a&gt;, which is default Android class. Below, you can see an example presenting approach described in this post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improper data type in Android TextView</title>
      <link>https://wittchen.io/notes/improper-data-type-in-android-textview/</link>
      <pubDate>Sun, 17 Mar 2013 18:57:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/improper-data-type-in-android-textview/</guid>
      <description>&lt;h2 id=&#34;identifying-the-problem&#34;&gt;Identifying the problem&lt;/h2&gt;
&lt;p&gt;One of the common mistakes done by Android programmers is using improper data type in &lt;em&gt;TextView&lt;/em&gt;. Let&amp;rsquo;s have a look on a simple code snippet:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;area&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;TextView&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sampleTextView&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TextView&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;findViewById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;myTextViewInXml&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sampleTextView&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;area&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34; km&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here, we simply set a value of the text in an exemplary &lt;em&gt;TextView&lt;/em&gt; and append string value &amp;quot; km&amp;quot; at the end. It can be used with &lt;em&gt;SeekBar&lt;/em&gt;. For example, when we change value of the &lt;em&gt;SeekBar&lt;/em&gt;, we can also update value of the text inside the &lt;em&gt;TextView&lt;/em&gt;. Let&amp;rsquo;s have a look on another example:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Distributed inter-process communication</title>
      <link>https://wittchen.io/notes/distributed-inter-process-communication/</link>
      <pubDate>Fri, 15 Feb 2013 19:17:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/distributed-inter-process-communication/</guid>
      <description>&lt;h2 id=&#34;project-overview&#34;&gt;Project overview&lt;/h2&gt;
&lt;p&gt;Some time ago, I created presentation for my university connected with &lt;a href=&#34;http://en.wikipedia.org/wiki/Distributed_Inter-Process_Communication&#34;&gt;Distributed Inter-Process Communication&lt;/a&gt;. It is a piece of software dedicated for Linux OS, created by &lt;a href=&#34;http://dipc.kamran-karimi.com/&#34;&gt;Kamran Karimi&lt;/a&gt;, which allows to distribute software operations inside computer cluster. In addition, we can test it on a single machine during development process and run on a several machines in the production phase. I tested this solution on Ubuntu Linux. Short description of this system is presented below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Endless ListView in Android</title>
      <link>https://wittchen.io/notes/endless-listview-in-android/</link>
      <pubDate>Thu, 14 Feb 2013 15:34:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/endless-listview-in-android/</guid>
      <description>&lt;p&gt;Some time ago, I had to implement Endless ListView in Android application. I checked different solutions, but some of them were overprogrammed or did not work well. Fortunately, I found simple solution, which solves the problem. Code snippet presenting mentioned approach, is placed below.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;EndlessScrollListener&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;implements&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OnScrollListener&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;visibleThreshold&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;currentPage&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;onScroll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AbsListView&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;firstVisibleItem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;visibleItemCount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;totalItemCount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;onScrollStateChanged&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AbsListView&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scrollState&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scrollState&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SCROLL_STATE_IDLE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;listView&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getLastVisiblePosition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;listView&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getCount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;visibleThreshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;currentPage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;downloadRecordsTask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setPage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;currentPage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;downloadRecordsTask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;execute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this solution, I simply implement OnScrollListener interface inside the activity, which is responsible for displaying the ListView (class presented above can be nested class in the proper activity class). In this case listView attribute represents ListView and downloadRecordsTask in an examplary AsyncTask. Of course, AsyncTask class should also have setPage method used for pagination. Records are loaded asynchronously to the listView, when user is not scrolling the list (&lt;code&gt;SCROLL_STATE_IDLE&lt;/code&gt;). In my opinion, this solution is the simplest, the easiest to implement and works as we expect it to work. I have tested it in my project for over 1000 records and I have not encountered any problems during the testing process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Custom background for ActionBar and SherlockActionBar</title>
      <link>https://wittchen.io/notes/custom-background-for-actionbar-and-sherlockactionbar/</link>
      <pubDate>Fri, 01 Feb 2013 22:31:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/custom-background-for-actionbar-and-sherlockactionbar/</guid>
      <description>&lt;p&gt;When you want to set custom background for Android ActionBar or SherlockActionBar instead of playing with your styles or views, you can use the following simple code snippet.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@InjectResource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;drawable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;actionbar_custom_background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Drawable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;actionBarCustomBackground&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;onCreate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getSupportActionBar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setBackgroundDrawable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;actionBarCustomBackground&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this case, Drawable object is injected using RoboGuice library and set as a background for the ActionBar. In particular cases, you can use also getActionBar() method.
In Drawable object you can store an image of 1 px width and it will be stretched for 100% of width of the ActionBar.
I have tested the code snippet presented above for SherlockActionBar and it worked fine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Custom fonts in Android</title>
      <link>https://wittchen.io/notes/custom-fonts-in-android/</link>
      <pubDate>Thu, 31 Jan 2013 23:45:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/custom-fonts-in-android/</guid>
      <description>&lt;p&gt;Using custom fonts in Android is quite simple, but requires to do some things programmatically and cannot be done using only XML file defining the view. Let&amp;rsquo;s have a look on an example. Here we have a simple Android view file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;LinearLayout&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlns:android=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://schemas.android.com/apk/res/android&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;android:orientation=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;vertical&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;android:layout_width=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fill_parent&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;android:layout_height=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fill_parent&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;lt;TextView&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;android:id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;@+id/custom_font&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;android:layout_width=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fill_parent&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;android:layout_height=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;wrap_content&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;android:text=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;This is our custom font&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We want to use custom font for the TextView element with id: &lt;em&gt;custom_font&lt;/em&gt;. Firstly, we have to put our font (in this example: &lt;em&gt;Custom_Font.ttf&lt;/em&gt;) into the &lt;em&gt;./assets&lt;/em&gt; directory (create it if it doesn’t exist yet) in the main directory of the project. Then, we can use the following code:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Easy conversion from binary to decimal numbers in C</title>
      <link>https://wittchen.io/notes/easy-conversion-from-binary-to-decimal-numbers-in-c/</link>
      <pubDate>Mon, 28 Jan 2013 02:02:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/easy-conversion-from-binary-to-decimal-numbers-in-c/</guid>
      <description>&lt;p&gt;Below, you can see simple and useful code snippet presenting conversion from binary to decimal number in C language without any sophisticated operations using only strtol function.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;binary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;11001&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;decimal&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;strtol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;binary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;binary = &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#34;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#34;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;, decimal = %d = 0x%02X&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;binary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/* my output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;binary = &amp;#34;11001&amp;#34;, decimal = 25 = 0x19
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Android and Maven</title>
      <link>https://wittchen.io/notes/android-and-maven/</link>
      <pubDate>Thu, 24 Jan 2013 23:50:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/android-and-maven/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;h3 id=&#34;etymology&#34;&gt;Etymology&lt;/h3&gt;
&lt;p&gt;Maven, a &lt;a href=&#34;http://en.wikipedia.org/wiki/Maven&#34;&gt;Yiddish&lt;/a&gt; word meaning accumulator of knowledge.&lt;/p&gt;
&lt;h3 id=&#34;what-is-maven&#34;&gt;What is Maven?&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;http://maven.apache.org/&#34;&gt;Maven&lt;/a&gt; is a tool that can be used for building and managing any Java-based project with all its dependencies (libraries).&lt;/p&gt;
&lt;h3 id=&#34;mavens-objectives&#34;&gt;Maven&amp;rsquo;s objectives&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Making build process easy&lt;/li&gt;
&lt;li&gt;Providing uniform build system (Project Object Model)&lt;/li&gt;
&lt;li&gt;Providing quality project information&lt;/li&gt;
&lt;li&gt;Providing guidelines for best practices development&lt;/li&gt;
&lt;li&gt;Allowing transparent migration to new features&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;setting-up-maven-android-projects-on-ms-windows&#34;&gt;Setting up Maven Android projects on MS Windows&lt;/h2&gt;
&lt;h3 id=&#34;configuring-environment&#34;&gt;Configuring environment&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;You need Eclipse Indigo or Juno installed&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing bug with dissappearing map overlay after zoom in Android</title>
      <link>https://wittchen.io/notes/fixing-bug-with-dissappearing-map-overlay-after-zoom-in-android/</link>
      <pubDate>Mon, 21 Jan 2013 22:16:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/fixing-bug-with-dissappearing-map-overlay-after-zoom-in-android/</guid>
      <description>&lt;p&gt;In Android 3.0 – HoneyComb (API 11) or higher occurs specific bug connected with map overlay. When we draw overlay on the map (e.g. routes, directions or polylines) after zooming to particular level, overlay disappear unexpectedly. We can fix this bug very easily by disabling hardware acceleration for drawing overlays. Below, you can see exemplary code snippet with map injected by RoboGuice and disabled hardware acceleration. Changing way of drawing overlays should fix the bug.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding reversed numbers</title>
      <link>https://wittchen.io/notes/adding-reversed-numbers/</link>
      <pubDate>Mon, 21 Jan 2013 18:51:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/adding-reversed-numbers/</guid>
      <description>&lt;p&gt;In this post I will show you my approach to adding reversed numbers. This problem occurred during the ACM Central European Programming Contest, in Prague in 1998.&lt;/p&gt;
&lt;h2 id=&#34;general-description-of-the-problem&#34;&gt;General description of the problem&lt;/h2&gt;
&lt;h3 id=&#34;input&#34;&gt;Input&lt;/h3&gt;
&lt;p&gt;The input consists of &lt;em&gt;N&lt;/em&gt; cases (equal to about 10000). The first line of the input contains only positive integer &lt;em&gt;N&lt;/em&gt;. Then follow the cases. Each case consists of exactly one line with two positive integers separated by space. These are the reversed numbers you are to add.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Launching brand new blog</title>
      <link>https://wittchen.io/notes/launching-brand-new-blog/</link>
      <pubDate>Sat, 19 Jan 2013 22:24:00 +0000</pubDate>
      <guid>https://wittchen.io/notes/launching-brand-new-blog/</guid>
      <description>&lt;p&gt;Hello! I&amp;rsquo;ve decided to create my own blog once again. This time I&amp;rsquo;m gonna write most of the posts only in English in order to make the articles more available and also to train my language skills (I&amp;rsquo;m Polish native speaker as some of you may already noticed). Template is clean and simple, because I&amp;rsquo;m going to focus on content - not the form. Stay tuned!&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
