<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    >

    <channel>
        <title>Of course I have a backup!</title>
        <atom:link href="https://ihaveabackup.net/feed.xml" rel="self" type="application/rss+xml" />
        <link>https://ihaveabackup.net</link>
        <description>Random blobs of wisdom about software engineering</description>
        <lastBuildDate>2026-01-02 19:12</lastBuildDate>
        <language>en-US</language>
        <sy:updatePeriod>daily</sy:updatePeriod>
        <sy:updateFrequency>1</sy:updateFrequency>
        
            <item>
                <title>New year new linux problems</title>
                <link>https://ihaveabackup.net/2026/01/02/new-year-new-linux-problems</link>
                <pubDate>2026-01-02 19:12</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[bluetooth]]></category>
                <category><![CDATA[d-bus]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2026/01/02/new-year-new-linux-problems</guid>
                <description>&lt;p&gt;I noticed a few days ago on my bar (waybar) that the bluetooth icon is yellow. Yellow means it&#x27;s scanning, which is weird because I definitely did not initiate a scan. What&#x27;s more is that this went on constantly. The icon would turn white (nothing is happening), only to turn yellow (scanning) a few seconds later in an endless loop.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Switching from Firefox to Waterfox</title>
                <link>https://ihaveabackup.net/2025/03/04/switching-to-waterfox</link>
                <pubDate>2025-03-04 14:10</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[firefox]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2025/03/04/switching-to-waterfox</guid>
                <description>&lt;p&gt;The internet is loud about Mozilla doing something to Firefox again. It happens about twice a year, sometimes it&#x27;s about the wrong features &lt;em&gt;removed&lt;/em&gt;, sometimes it&#x27;s about the wrong features &lt;em&gt;added&lt;/em&gt;, changes to the terms of use, or people finding out that the non-profit organization&#x27;s CEO pockets 7 million $ per year. Today it&#x27;s about privacy issues, Mozilla has changed what they promise you about what they are, and are not doing with your data.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Kubernetes presentation</title>
                <link>https://ihaveabackup.net/2024/09/04/kubernetes-presentation</link>
                <pubDate>2024-09-04 21:31</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[k8s]]></category>
                <category><![CDATA[presentation]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2024/09/04/kubernetes-presentation</guid>
                <description>&lt;p&gt;This is my presentation on Kubernetes, the container orchestration system. In this presentation I explain what kubernetes is, and look at how software deployment has evolved from ~2014, where we transferred zip files, to what we have today. I show some examples of the most often used entities: deployments, services, pods, and ingress definitions, and go over the helm templating engine.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Moving my vim config to lua</title>
                <link>https://ihaveabackup.net/2023/01/12/moving-my-vim-config-to-lua</link>
                <pubDate>2023-01-12 22:55</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[lua]]></category>
                <category><![CDATA[neovim]]></category>
                <category><![CDATA[vim]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2023/01/12/moving-my-vim-config-to-lua</guid>
                <description>&lt;p&gt;The first text editor I used outside school was Notepad++. It served me really well during my early years, but around 2008 I got my first job, and saw a coworker use vim. I was quite mesmerized to see how efficiently he moved across the files, so I obviously wanted to learn using it as well. I don&#x27;t think I had any configuration at all initially, whatever the distro configured by default was what I used. I opened my own repository for my vim configs in 2012 September 19, at a quite late time, 3 AM. Apparently even 10 years ago, my most productive hours were after midnight.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Getting ArgoCD working in KinD (and possibly minikube)</title>
                <link>https://ihaveabackup.net/2022/02/15/getting-argocd-working-in-kind</link>
                <pubDate>2022-02-15 14:32</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[argocd]]></category>
                <category><![CDATA[k8s]]></category>
                <category><![CDATA[kind]]></category>
                <category><![CDATA[minikube]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2022/02/15/getting-argocd-working-in-kind</guid>
                <description>&lt;p&gt;If you try to set up ArgoCD in KinD, you will encounter the following error message when you try to run &lt;code&gt;argocd cluster add kind&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;
    &lt;div class=&quot;attributes&quot;&gt;
        
        
        
        
    &lt;/div&gt;
    &lt;pre style=&quot;background-color:#2b303b;&quot;&gt;
&lt;span style=&quot;color:#c0c5ce;&quot;&gt;FATA[0001] rpc error: code = Unknown desc = Get &amp;quot;https://127.0.0.1:36143/version?timeout=32s&amp;quot;: dial tcp 127.0.0.1:36143: connect: connection refused
&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;</description>
            </item>
        
            <item>
                <title>Systemd killmodes, multithreading and graceful shutdown</title>
                <link>https://ihaveabackup.net/2022/01/30/systemd-killmodes-multithreading-and-graceful-shutdown</link>
                <pubDate>2022-01-30 22:56</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[systemd]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2022/01/30/systemd-killmodes-multithreading-and-graceful-shutdown</guid>
                <description>&lt;p&gt;Before I started writing rust, I have never written any multithreaded programs. I did write some minimal C homework using multithreading, but even if that was still relevant, I have long forgotten everything, apart from that it&#x27;s extremely hard to get right, opens an entirely new family of bugs like race conditions, that are really hard not just to anticiapate, but to reproduce and debug as well.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Laptops not staying in suspend, S3, and modern standby</title>
                <link>https://ihaveabackup.net/2021/11/12/laptops-not-staying-in-suspend-s3-and-modern-standby</link>
                <pubDate>2021-11-12 15:44</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[laptop]]></category>
                <category><![CDATA[s3]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2021/11/12/laptops-not-staying-in-suspend-s3-and-modern-standby</guid>
                <description>&lt;p&gt;I noticed that my XPS 15 laptop (from 2020) almost always wakes up immediately from suspend, or even worse, when I take it out of my backpack, that&#x27;s when I find out that it woke up, and now all the fans are going crazy, because it almost melted in the backpack. Turns out Microsoft is to blame for this, together with all the laptop manufacturers who decided to follow along with this idiocy.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Rust presentation at NFSA</title>
                <link>https://ihaveabackup.net/2021/07/21/rust-presentation-at-nfsa</link>
                <pubDate>2021-07-21 23:53</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[presentation]]></category>
                <category><![CDATA[rust]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2021/07/21/rust-presentation-at-nfsa</guid>
                <description>&lt;p&gt;This is my presentation on rust, the programming language, that I have done at the Norwegian Food and Safety Administration (Mattilsynet), while I worked there as a (devops) consultant. It goes over the very basics of rust, the major features, the type system, talks about some unique concepts not found elsewhere, and shows some examples on how you would model some very simple things.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Colemak, QMK, Lily58, 40%, and split keyboards</title>
                <link>https://ihaveabackup.net/2021/05/16/colemak-qmk-lily58-40-and-split-keyboards</link>
                <pubDate>2021-05-16 18:53</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[keyboards]]></category>
                <category><![CDATA[qmk]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2021/05/16/colemak-qmk-lily58-40-and-split-keyboards</guid>
                <description>&lt;p&gt;It has been a few months since I started heavily investing in learning to type on a 40% keyboard, in hopes of juicing out some extra productivity, and it has been an extremely bumpy ride so far.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>VFIO revisited, benchmarks, changes</title>
                <link>https://ihaveabackup.net/2020/11/15/vfio-revisited</link>
                <pubDate>2020-11-15 12:19</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[vfio]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2020/11/15/vfio-revisited</guid>
                <description>&lt;p&gt;I built a new PC a few days ago which in itself was a challenge in these COVID times, since there are stock issues everywhere, but I managed to get lucky with a few purchases. After assembling everything, it was time to look into how to setup VFIO for a second time.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Let&#x27;s Split keyboard</title>
                <link>https://ihaveabackup.net/2020/08/13/lets-split-keyboard</link>
                <pubDate>2020-08-13 19:28</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[keyboards]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2020/08/13/lets-split-keyboard</guid>
                <description>&lt;p&gt;I have been fascinated with keyboards for a long time now, I think I currently have 6 in my flat, and I usually bring one with me to my workplace. This week I finally managed to finish my Let&#x27;s Split keyboard that I ordered 2 years ago.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>HTTP cache headers, assets getting stuck in browser caches</title>
                <link>https://ihaveabackup.net/2020/06/13/http-cache-headers-assets-getting-stuck-in-browser-caches</link>
                <pubDate>2020-06-13 18:17</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[cache]]></category>
                <category><![CDATA[http]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2020/06/13/http-cache-headers-assets-getting-stuck-in-browser-caches</guid>
                <description>&lt;p&gt;The ways you can cache assets with HTTP has been already beaten to death by many other blog posts, but I want to highlight a very big gotcha that still bites many people. This is when you deploy a new version of your application, but some browsers still show the old CSS and JS files, even though the contents of those files have changed.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Tips on starting with Rust</title>
                <link>https://ihaveabackup.net/2020/04/12/tips-on-starting-with-rust</link>
                <pubDate>2020-04-12 17:03</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[rust]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2020/04/12/tips-on-starting-with-rust</guid>
                <description>&lt;p&gt;I tried to get into rust 3 times now. Every time I gave up after about ~20 hours (combined), for various reasons. A week ago I gave it another shot, and I think I finally managed to have a breakthrough. Here is a list of things that I wish somebody has taught me before starting.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>How to resolve conflicts in yarn.lock</title>
                <link>https://ihaveabackup.net/2019/02/15/how-to-resolve-conflicts-in-yarn-lock</link>
                <pubDate>2019-02-15 18:49</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[javascript]]></category>
                <category><![CDATA[psa]]></category>
                <category><![CDATA[yarn]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2019/02/15/how-to-resolve-conflicts-in-yarn-lock</guid>
                <description>&lt;p&gt;Execute &lt;code&gt;yarn&lt;/code&gt;. Do not go &lt;code&gt;git checkout --theirs ...&lt;/code&gt; and &lt;code&gt;git reset ...&lt;/code&gt; and whatever else people might suggest. Just type &lt;code&gt;yarn&lt;/code&gt; and press enter. Yarn has an automatic conflict resolution built into it, it will detect that the yarn.lock file has conflicts, and use its internal algorithm to figure out what to do. This was a public service announcement.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Retrospective of 2018</title>
                <link>https://ihaveabackup.net/2019/02/02/retrospective-of-2018</link>
                <pubDate>2019-02-02 23:09</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[docker]]></category>
                <category><![CDATA[kubernetes]]></category>
                <category><![CDATA[node]]></category>
                <category><![CDATA[reasonml]]></category>
                <category><![CDATA[retro]]></category>
                <category><![CDATA[rust]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2019/02/02/retrospective-of-2018</guid>
                <description>&lt;p&gt;Some libraries, tools, and technologies that have made a lasting impact on me in 2018.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Async/await destroys stack traces in Node</title>
                <link>https://ihaveabackup.net/2018/09/29/async-await-destroys-stack-traces</link>
                <pubDate>2018-09-29 18:06</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[asyncawait]]></category>
                <category><![CDATA[node]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2018/09/29/async-await-destroys-stack-traces</guid>
                <description>&lt;p&gt;And it&#x27;s a terrible mess, and nobody should use it until this is fixed. Yeah I said it. The internet is already full of &amp;quot;5 reasons async/await blows Promises away&amp;quot; and &amp;quot;How to escape callback hell with async/await&amp;quot;, only thing they all fail to mention is that is that it will lead to errors that are missing crucial stack trace information.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Use Dropbox on any filesystem</title>
                <link>https://ihaveabackup.net/2018/09/17/use-dropbox-on-any-fs</link>
                <pubDate>2018-09-17 22:11</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[dropbox]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2018/09/17/use-dropbox-on-any-fs</guid>
                <description>&lt;p&gt;If you have been using Dropbox on a filesystem other than ext4, you have been probably getting annoyed by the following warning, in the past 2 months:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Move Dropbox location. Dropbox will stop syncing in November.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;According to Dropbox, this is intended, and their &lt;a href=&quot;https://www.dropboxforum.com/t5/Syncing-and-uploads/Dropbox-client-warns-me-that-it-ll-stop-syncing-in-Nov-why/td-p/290058&quot;&gt;official response&lt;/a&gt; is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi everyone, on Nov. 7, 2018, we’re ending support for Dropbox syncing to drives with certain uncommon file systems. The supported file systems are NTFS for Windows, HFS+ or APFS for Mac, and Ext4 for Linux.&lt;br /&gt;
We’ve updated our desktop requirements accordingly here.&lt;br /&gt;
A supported file system is required as Dropbox relies on extended attributes (X-attrs) to identify files in the Dropbox folder and keep them in sync. We will keep supporting only the most common file systems that support X-attrs, so we can ensure stability and a consistent experience.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Which is the corporate bullshit version of saying &amp;quot;sorry we run into some obscure problems with some filesystems, so we only have the capacity to support one for now&amp;quot;, but that is a big marketing and sales no-no, so instead they sell it as a &amp;quot;consistent experience&amp;quot; and &amp;quot;stability&amp;quot;, and some random bit about xattrs, which every filesystem supports. Here&#x27;s a workaround.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Slack removes IRC gateway</title>
                <link>https://ihaveabackup.net/2018/03/09/slack-removes-irc-gateway</link>
                <pubDate>2018-03-09 18:06</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[irc]]></category>
                <category><![CDATA[psa]]></category>
                <category><![CDATA[slack]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2018/03/09/slack-removes-irc-gateway</guid>
                <description>&lt;p&gt;Slack has decided to remove the XMPP and IRC gateways, they will cease functioning on May 15th. It&#x27;s a real shame, because these were the only usable interfaces to slack, both the web UI and the desktop app hog memory like a separate browser session, but there are still some solutions you can use to avoid using them.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Kubernetes on GKE with cloudsql proxy, and cronjobs</title>
                <link>https://ihaveabackup.net/2018/02/22/kubernetes-on-gke-with-cloudsql-proxy</link>
                <pubDate>2018-02-22 23:12</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[cloudsql]]></category>
                <category><![CDATA[kubernetes]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2018/02/22/kubernetes-on-gke-with-cloudsql-proxy</guid>
                <description>&lt;p&gt;If you are running kubernetes on google cloud, you probably run into the issue that it&#x27;s not so straightforward to connect to a cloudsql instance from within the cluster. The official best practice is to run &lt;a href=&quot;https://github.com/GoogleCloudPlatform/cloudsql-proxy&quot;&gt;cloudsql proxy&lt;/a&gt; as a sidecar container in your pods, and connect through that. There are two problems with this, and I will address both.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>The recommended python package manager, pipenv</title>
                <link>https://ihaveabackup.net/2018/02/04/the-recommended-python-package-manager-pipenv</link>
                <pubDate>2018-02-04 15:03</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[pip]]></category>
                <category><![CDATA[python]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2018/02/04/the-recommended-python-package-manager-pipenv</guid>
                <description>&lt;p&gt;About one and a half year ago, I wrote about the &lt;a href=&quot;https://ihaveabackup.net/2016/11/04/piptips&quot;&gt;shortcomings of the python package manager, &lt;code&gt;pip&lt;/code&gt;&lt;/a&gt;. Finally, there is now an officially recommended package manager, called &lt;a href=&quot;https://docs.pipenv.org/&quot;&gt;pipenv&lt;/a&gt;, that solves all of the problems mentioned there, and providers a few extra goodies too.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Using Slack with Weechat, through ZNC</title>
                <link>https://ihaveabackup.net/2017/02/08/using-slack-with-weechat-through-znc</link>
                <pubDate>2017-02-08 23:18</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[slack]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2017/02/08/using-slack-with-weechat-through-znc</guid>
                <description>&lt;p&gt;I set this up 2 years ago, but today I had to add another Slack network to add, and it took me an hour to figure out. The connection to ZNC was working fine, but when ZNC was trying to connect to the Slack server, I always got &amp;quot;Invalid user name or password&amp;quot; from slackbot. Slack doesn&#x27;t explicitly tell you, but the username it gives you is supposed to be your nickname, and your ident, and you have to set this up before making a connection attempt.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Grub2 menuentry for Windows 10 UEFI</title>
                <link>https://ihaveabackup.net/2016/12/18/grub2-entry-for-windows-10-uefi</link>
                <pubDate>2016-12-18 01:30</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[grub2]]></category>
                <category><![CDATA[linux]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2016/12/18/grub2-entry-for-windows-10-uefi</guid>
                <description>&lt;p&gt;I had some troube setting this up, because most of the google hits that come up are for older windows versions, which are using the old MBR/non-UEFI method, show examples for grub1, outdated, or just plain wrong.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Piptips</title>
                <link>https://ihaveabackup.net/2016/11/04/piptips</link>
                <pubDate>2016-11-04 15:02</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[pip]]></category>
                <category><![CDATA[python]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2016/11/04/piptips</guid>
                <description>&lt;p&gt;The package manager for python, &lt;code&gt;pip&lt;/code&gt; has some shortcomings, and we will look at solving the biggest two: not being able to record only the top level dependencies in a project (the dependencies of the dependencies also get lumped together), and finding a way to record only dev dependencies.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Current window manager: i3</title>
                <link>https://ihaveabackup.net/2016/10/25/current-window-manager-i3</link>
                <pubDate>2016-10-25 16:10</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[i3]]></category>
                <category><![CDATA[wm]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2016/10/25/current-window-manager-i3</guid>
                <description>&lt;p&gt;List of window managers I have tried so far: metacity (gnome), fluxbox, xmonad, awesomewm, and the latest one, is now i3. I think fluxbox stuck for the longest time, around 5 years, while i3 is the second with about 1.5 years.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Ergodox Infinity review</title>
                <link>https://ihaveabackup.net/2016/08/30/ergodox-infinity-review</link>
                <pubDate>2016-08-30 18:01</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[keyboards]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2016/08/30/ergodox-infinity-review</guid>
                <description>&lt;p&gt;I got an ergodox infinity keyboard about half a year ago. I was always fascinated with split keyboards since I saw the original Microsoft &amp;quot;Natural ergonomic keyboard&amp;quot;, but never actually got around to buy one. Fast forward 5-6 years later, I developed an unhealthy obsession with mechanical keyboards, so it was time to go ahead and finally try a split keyboard.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Specifying the terminator in dictConfig</title>
                <link>https://ihaveabackup.net/2016/07/30/specifying-the-terminator-in-dictconfig</link>
                <pubDate>2016-07-30 03:23</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[python]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2016/07/30/specifying-the-terminator-in-dictconfig</guid>
                <description>&lt;p&gt;Python added &lt;span style=&quot;color:#4f5b66;&quot;&gt;logging.config.&lt;/span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;dictConfig&lt;/span&gt;&lt;span style=&quot;color:#4f5b66;&quot;&gt;()&lt;/span&gt; in 3.2 (2011), which is the &amp;quot;new&amp;quot; recommended way of configuring loggers, instead of the old .cfg format. What also came with 3.2 was a &lt;code&gt;terminator&lt;/code&gt; attribute on handlers, which allows you to specify the line ending character for log statements, however, &lt;code&gt;terminator&lt;/code&gt; is not configurable in the constructor, which makes it &lt;em&gt;seemingly&lt;/em&gt; impossible to configure through dictConfig().&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>I love btrfs</title>
                <link>https://ihaveabackup.net/2016/07/13/i-love-btrfs</link>
                <pubDate>2016-07-13 18:43</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[btrfs]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2016/07/13/i-love-btrfs</guid>
                <description>&lt;p&gt;Still to this day the question &amp;quot;is btrfs stable?&amp;quot; cannot be answered with a firm yes. The &lt;a href=&quot;https://btrfs.wiki.kernel.org/index.php/FAQ#Is_btrfs_stable.3F&quot;&gt;btrfs faq&lt;/a&gt; phrases it the best, nobody is going to one day put a sticker on it that says &amp;quot;STABLE&amp;quot;. I began using btrfs about 3 years ago on my laptop, now I also have it on my desktop, and I also plan on reformatting my server too. I can&#x27;t really say anything about it&#x27;s performance, because I haven&#x27;t done any benchmarks, but it definitely doesn&#x27;t &lt;em&gt;feel&lt;/em&gt; any slower than ext4.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Living in Norway</title>
                <link>https://ihaveabackup.net/2016/06/20/living-in-norway</link>
                <pubDate>2016-06-20 18:26</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[not-programming]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2016/06/20/living-in-norway</guid>
                <description>&lt;p&gt;I have moved to Norway about 2 years ago, after living in Hungary all my life. Originally, I was planning on moving to Sweden, but the plans have changed due to some problems and circumstances. Here are some highlights about the country, in no particular order. This is mostly based on Oslo, things might be different in other cities.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Gaming on a virtualized Windows with VFIO</title>
                <link>https://ihaveabackup.net/2016/06/12/gaming-on-virtualized-windows-with-vfio</link>
                <pubDate>2016-06-12 20:47</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[vfio]]></category>
                <category><![CDATA[vm]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2016/06/12/gaming-on-virtualized-windows-with-vfio</guid>
                <description>&lt;p&gt;I use Linux both at home, and at work, the only reason I have a Windows partition is gaming. I have used a dual boot linux/windows setup in the past 5ish years, and I always hated how I had to choose at boot time if I want to play some games, or do something else. Now with the addition of the vfio driver into the kernel, it is now possible to achieve a much more comfortable setup.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Wallpaper changer with systemd services, timers, and targets</title>
                <link>https://ihaveabackup.net/2016/03/14/wallpaper-changer-with-systemd</link>
                <pubDate>2016-03-14 22:57</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[bash]]></category>
                <category><![CDATA[systemd]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2016/03/14/wallpaper-changer-with-systemd</guid>
                <description>&lt;p&gt;I have an old wallpaper script that changes wallpapers every 30 minutes to a random picture from a folder, just like how you can do it with Windows 7. I&#x27;m going to take a look at how this could be implemented using systemd facilities.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Sass with sourcemaps, webpack, and live reload</title>
                <link>https://ihaveabackup.net/2015/08/17/sass-with-sourcemaps-webpack-and-live-reload</link>
                <pubDate>2015-08-17 17:01</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[css]]></category>
                <category><![CDATA[html]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2015/08/17/sass-with-sourcemaps-webpack-and-live-reload</guid>
                <description>&lt;p&gt;Two days ago, I would have told you just how much of a poor, poor soul you are. Because it&#x27;s simply not possible, but the READMEs make you chase the dragon, leading you to believe that it is possible. But alas, no, none of the methods work. After spending hours, you will find out that you can have either source maps, or live reload. Not both. Pick one. But yeah that was two days ago, read on.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Stuff I&#x27;m working with #1</title>
                <link>https://ihaveabackup.net/2015/04/19/stuff-im-working-with-1</link>
                <pubDate>2015-04-19 19:26</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[ansible]]></category>
                <category><![CDATA[browserify]]></category>
                <category><![CDATA[docker]]></category>
                <category><![CDATA[node]]></category>
                <category><![CDATA[syncthing]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2015/04/19/stuff-im-working-with-1</guid>
                <description>&lt;p&gt;A few things that are keeping me busy, or making me pull my hair out, either at work, or at home. There is a few more I want to write about, I just have to find some time.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>ThinkPad W540 opinions, and Linux support</title>
                <link>https://ihaveabackup.net/2014/10/27/thinkpad-w540-opinions-and-linux-support</link>
                <pubDate>2014-10-27 00:08</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[laptop]]></category>
                <category><![CDATA[lenovo]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2014/10/27/thinkpad-w540-opinions-and-linux-support</guid>
                <description>&lt;p&gt;I just got a new laptop from the company I&#x27;m working at, that I have used for about a month now, here&#x27;s a quick writeup on how it performs so far.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>A few years with Doctrine2</title>
                <link>https://ihaveabackup.net/2014/06/26/a-few-years-with-doctrine2</link>
                <pubDate>2014-06-26 23:47</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[doctrine2]]></category>
                <category><![CDATA[php]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2014/06/26/a-few-years-with-doctrine2</guid>
                <description>&lt;p&gt;I have been using Doctrine2 for about 3 years now. I started with the first 2.0 stable, integrating it into my employer&#x27;s in-house framework, and in the last year, I have been using it as part of Symfony2. There are quite a few things that I love about it, and a small amount that I dislike.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Oculus Rift got Zuckerberged</title>
                <link>https://ihaveabackup.net/2014/03/26/oculus-rift-got-zuckerberged</link>
                <pubDate>2014-03-26 21:06</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[not-programming]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2014/03/26/oculus-rift-got-zuckerberged</guid>
                <description>&lt;p&gt;Not 24 hours have passed since the announcement, and the internet is already up in flames. Oculus Rift, one of the most promising VR technology is now in the hands of Facebook.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Merging/diffing a file with git, that was deleted upstream, but has local changes</title>
                <link>https://ihaveabackup.net/2014/02/22/mergingdiffing-a-file-with-git-that-was-deleted-upstream-but-has-local-changes</link>
                <pubDate>2014-02-22 13:32</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[git]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2014/02/22/mergingdiffing-a-file-with-git-that-was-deleted-upstream-but-has-local-changes</guid>
                <description>&lt;p&gt;Or vice-versa, you deleted a file, that changed upstream, and now you have to see a diff between the base, and the changed file. The problem is that the usual tools, like git diff, git show, don&#x27;t return any useful results, and checkout does not have a &lt;span style=&quot;color:#8fa1b3;&quot;&gt;--base&lt;/span&gt; switch (like it has for &lt;span style=&quot;color:#8fa1b3;&quot;&gt;--theirs&lt;/span&gt; and &lt;span style=&quot;color:#8fa1b3;&quot;&gt;--ours&lt;/span&gt;).&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Javascript module loaders considered harmful?</title>
                <link>https://ihaveabackup.net/2014/02/16/javascript-module-loaders-considered-harmful</link>
                <pubDate>2014-02-16 21:54</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[amd]]></category>
                <category><![CDATA[javascript]]></category>
                <category><![CDATA[requirejs]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2014/02/16/javascript-module-loaders-considered-harmful</guid>
                <description>&lt;p&gt;Apparently, module loaders are a bad thing now, based on some obscure points, according to&lt;a href=&quot;http://techblog.ironfroggy.com/2014/02/javascript-module-loaders-considered.html&quot;&gt; an article from @ironfroggy&lt;/a&gt;. None of the points mentioned in the article make sense, and here&#x27;s why.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Invalidating the OPcache in PHP 5.5</title>
                <link>https://ihaveabackup.net/2013/10/19/invalidating-the-opcache-in-php-5-5</link>
                <pubDate>2013-10-19 20:26</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[cache]]></category>
                <category><![CDATA[php]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2013/10/19/invalidating-the-opcache-in-php-5-5</guid>
                <description>&lt;p&gt;The Zend Optimizer+ has been integrated into PHP core with the 5.5 release, which, according to the &lt;a href=&quot;https://wiki.php.net/rfc/optimizerplus&quot;&gt;RFC page&lt;/a&gt;, has many advantages over APC. It has been renamed OPcache, can be enabled with a simple ini setting, and since it&#x27;s in the core, it offers better version compatibility. Unfortunately it also includes my only gripe with APC, invalidating the cache is much harder than what one would think.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>What is missing from the master branch, but is present in devel?</title>
                <link>https://ihaveabackup.net/2013/06/28/what-is-missing-from-the-master-branch-but-is-present-in-devel</link>
                <pubDate>2013-06-28 21:23</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[git]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2013/06/28/what-is-missing-from-the-master-branch-but-is-present-in-devel</guid>
                <description>&lt;p&gt;Or, what is present in branch A, but missing from branch B? I always, always, ALWAYS have to look this up. I have a devel, and a master branch, there were a few hotfixes on the master branch, and there are a few new features developed in devel. Now I want to make sure that the hotfixes are merged back to devel, and I also want to check what new features will be deployed, if I merge devel into master.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Writing a Chrome extension</title>
                <link>https://ihaveabackup.net/2013/06/02/writing-an-extension-for-chrome</link>
                <pubDate>2013-06-02 23:56</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[browser]]></category>
                <category><![CDATA[chrome]]></category>
                <category><![CDATA[javascript]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2013/06/02/writing-an-extension-for-chrome</guid>
                <description>&lt;p&gt;This is part 2 of the How to develop browser extension article series. I&#x27;ll give a few guidelines, examples, and show some gotchas on what to look out for, when you are developing an extension for Chrome.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Developing a browser extension</title>
                <link>https://ihaveabackup.net/2013/05/14/developing-a-browser-extension</link>
                <pubDate>2013-05-14 23:17</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[browser-extension]]></category>
                <category><![CDATA[javascript]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2013/05/14/developing-a-browser-extension</guid>
                <description>&lt;p&gt;Ever wondered how you can develop a browser extension? It&#x27;s not hard, you just have to read a bit of docs, and do a lot of trial and error. This will be a 3-5 posts long series, that talks about how to develop an extension for today&#x27;s browsers in general, and the various traps one might fall into while developing one. I am covering Chrome, Safari, and Firefox in detail, unfortunately I have no experience with IE, and Opera. I will also talk about cross-browser extension frameworks at the end.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Google Reader alternatives</title>
                <link>https://ihaveabackup.net/2013/03/22/google-reader-alternatives</link>
                <pubDate>2013-03-22 01:37</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[psa]]></category>
                <category><![CDATA[rss]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2013/03/22/google-reader-alternatives</guid>
                <description>&lt;p&gt;As probably everyone heard by now, following the closure of FeedBurner in last year September, &lt;a href=&quot;http://googlereader.blogspot.hu/2013/03/powering-down-google-reader.html&quot;&gt;GoogleReader is closing down&lt;/a&gt; its doors on July 1st. Google is citing declining usage, which surprises me greatly since I remember news sites claiming in ~2008 that RSS&#x27;s success is going to cause its own downfall, since so many people are using it that some servers can&#x27;t handle the stress. If you aren&#x27;t using RSS, you are missing out on one of the greatest functionalities of the web. Reading through an RSS reader is like watching your movies without commercials. I sampled the threads on &lt;a href=&quot;http://www.reddit.com/r/linux/comments/1a94ml/with_google_reader_being_retired_what_are_rlinuxs/&quot;&gt;Reddit&lt;/a&gt;, and &lt;a href=&quot;https://news.ycombinator.com/item?id=4975454&quot;&gt;Hacker News&lt;/a&gt;, to see what other good services are there.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Get the ID of a related entity, without loading it in Doctrine2</title>
                <link>https://ihaveabackup.net/2013/02/17/get-the-id-of-a-related-entity-without-loading-it-in-doctrine2</link>
                <pubDate>2013-02-17 00:32</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[doctrine2]]></category>
                <category><![CDATA[php]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2013/02/17/get-the-id-of-a-related-entity-without-loading-it-in-doctrine2</guid>
                <description>&lt;p&gt;When using Doctrine, it very frequently happens that you have an entity in hand, an Article for example, that is in a many-to-one relationship with another entity (a Category), and you need to get the related entity&#x27;s id. The problem is that Doctrine uses proxy objects for relationships, and when you access the id, the proxy will self-load itself, sending a query to the database. Shouldn&#x27;t it be possible to get the related id, without another query? It&#x27;s in the same table after all.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Nginx configuration for Symfony2</title>
                <link>https://ihaveabackup.net/2012/11/17/nginx-configuration-for-symfony2</link>
                <pubDate>2012-11-17 17:37</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[nginx]]></category>
                <category><![CDATA[symfony2]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/11/17/nginx-configuration-for-symfony2</guid>
                <description>&lt;p&gt;Every time I have to set up Symfony2 on a new machine, I get a bit lost on the rewrite configuration. Rewriting in apache is easy, since the net is already full of examples on how to do it, but there is nearly not as much info for nginx (yet).&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Have you ever worked out so much, that you had to barf?</title>
                <link>https://ihaveabackup.net/2012/11/09/have-you-ever-worked-out-so-much-that-you-had-to-barf</link>
                <pubDate>2012-11-09 22:04</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[im-an-idiot]]></category>
                <category><![CDATA[not-programming]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/11/09/have-you-ever-worked-out-so-much-that-you-had-to-barf</guid>
                <description>&lt;p&gt;I have done many stupid things in my life, but today, I have a new contender for the 4th most idiotic thing I have done, ever. I saw an ad at the place where I usually play squash for a &amp;quot;military-like endurance training&amp;quot; program, and I thought it might be a good idea to try that.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>The state of HTML5 audio</title>
                <link>https://ihaveabackup.net/2012/10/12/the-state-of-html5-audio</link>
                <pubDate>2012-10-12 22:07</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[css]]></category>
                <category><![CDATA[html]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/10/12/the-state-of-html5-audio</guid>
                <description>&lt;p&gt;I just had a chance to use the &amp;quot;new&amp;quot; HTML5 &lt;span style=&quot;color:#4f5b66;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;audio&lt;/span&gt;&lt;span style=&quot;color:#4f5b66;&quot;&gt;&amp;gt;&lt;/span&gt; tag. Using it is just as eas y as using anything from HTML5/CSS3. That was sarcasm. The same things apply, you need to be aware of all the various browser inconsis tencies. The main one is the supported formats of course, some vendors support the industry standard MP3, others don&#x27;t want to support  that because it&#x27;s not open, and Google supports everything because they are swimming in money, and can afford it. Turns out that in o rder to support all the browsers out there, you need to offer at least 2 kinds of formats, consult the &lt;a href=&quot;http://en.wikipedia.org/wiki/HTML5_Audio#.3CAudio.3E_element&quot;&gt;chart on Wikipedia&lt;/a&gt; for details. While that&#x27;s inconvinient, like most things in the CSS3/HTML5 area, there is a much bigger &lt;em&gt;waitwhat?&lt;/em&gt; here.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Getting a PHP app running on Heroku</title>
                <link>https://ihaveabackup.net/2012/09/16/getting-a-php-app-running-on-heroku</link>
                <pubDate>2012-09-16 17:08</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[heroku]]></category>
                <category><![CDATA[php]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/09/16/getting-a-php-app-running-on-heroku</guid>
                <description>&lt;p&gt;We were looking for an easy to set up hosting solution for our new PHP application. A colleague mentioned that we should try &lt;a href=&quot;http://www.heroku.com/&quot;&gt;Heroku&lt;/a&gt;, since they are praised everywhere. I can agree, I don&#x27;t even know what it is, but I have already seen it praised on various blogs.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Interesting things in the PHP world</title>
                <link>https://ihaveabackup.net/2012/07/15/interesting-things-in-the-php-world</link>
                <pubDate>2012-07-15 17:13</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[best-practices]]></category>
                <category><![CDATA[fig]]></category>
                <category><![CDATA[php]]></category>
                <category><![CDATA[psr]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/07/15/interesting-things-in-the-php-world</guid>
                <description>&lt;p&gt;Some interesting stuff I found while browsing my RSS feeds, upcoming new stuff in PHP 5.5, a site called PHP The Right Way, and it looks like PHP will finally have some kind of official coding style.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Using wildcards in the hosts file</title>
                <link>https://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file</link>
                <pubDate>2012-06-28 17:25</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[dns]]></category>
                <category><![CDATA[hosts]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file</guid>
                <description>&lt;p&gt;Common scenario: it is the beginning of a new project, you create a new virtualhost in your webserver, record newproject.local into your hosts file, so the address resolves to your local machine, restart webserver, test. Is there an easier way? Yes, &lt;strong&gt;it is possible to spare the part where you edit the hosts file&lt;/strong&gt;.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Re: Bad ORM is infinitely worse than bad SQL</title>
                <link>https://ihaveabackup.net/2012/04/03/re-bad-orm-is-infinitely-worse-than-bad-sql</link>
                <pubDate>2012-04-03 22:44</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[doctrine2]]></category>
                <category><![CDATA[php]]></category>
                <category><![CDATA[re]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/04/03/re-bad-orm-is-infinitely-worse-than-bad-sql</guid>
                <description>&lt;p&gt;This a response to Mattis Geniar&#x27;s post, titled &lt;a href=&quot;http://mattiasgeniar.be/2012/03/30/bad-orm-is-infinitely-worse-than-bad-sql/&quot;&gt;Bad ORM is infinitely worse than bad SQL&lt;/a&gt;, where he talks about his bad encounters with ORMs, and how easy it is to mess up performance, and forget about what really happens behind the scenes. He ends the post with&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you disagree with me, prove me wrong.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Be my guest.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>PHP 5.4 is released</title>
                <link>https://ihaveabackup.net/2012/03/04/php-5-4-is-released</link>
                <pubDate>2012-03-04 19:39</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[changelog]]></category>
                <category><![CDATA[php]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/03/04/php-5-4-is-released</guid>
                <description>&lt;p&gt;The new major (or minor, if you look at version numbers) version of PHP has been released on March 1st, so here&#x27;s the obligatory blog post on the new features. I&#x27;m only covering the parts that I think are important, this isn&#x27;t a complete changelog.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>What is Doctrine2 anyway</title>
                <link>https://ihaveabackup.net/2012/02/27/what-is-doctrine2-anyway</link>
                <pubDate>2012-02-27 03:15</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[active record]]></category>
                <category><![CDATA[data mapper]]></category>
                <category><![CDATA[doctrine2]]></category>
                <category><![CDATA[orm]]></category>
                <category><![CDATA[php]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/02/27/what-is-doctrine2-anyway</guid>
                <description>&lt;p&gt;Doctrine2 is an ORM (Object relational mapper) library for PHP, and is one of the best things to happen to the PHP world, so far. The main point of an ORM is, to put it simply, to allow you to map PHP objects, to database tables. You can save and load your objects to/from the database, in a general way, that is, you don&#x27;t need to write select/insert/update/delete SQL queries for them, because the ORM will take care of that for you.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>A workaround for passing arrays in Bash</title>
                <link>https://ihaveabackup.net/2012/01/29/a-workaround-for-passing-arrays-in-bash</link>
                <pubDate>2012-01-29 16:50</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[bash]]></category>
                <category><![CDATA[scripting]]></category>
                <category><![CDATA[shell]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/01/29/a-workaround-for-passing-arrays-in-bash</guid>
                <description>&lt;p&gt;&lt;a href=&quot;/2012/01/02/arrays-in-bash/&quot;&gt;In my previous post&lt;/a&gt;, I wrote about the shortcomings of arrays in Bash. I &lt;em&gt;think&lt;/em&gt; I found a good enough solution, that seems to have a very little footprint, no side effects, and only uses built in functionality.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Arrays in Bash</title>
                <link>https://ihaveabackup.net/2012/01/02/arrays-in-bash</link>
                <pubDate>2012-01-02 21:34</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[bash]]></category>
                <category><![CDATA[scripting]]></category>
                <category><![CDATA[shell]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2012/01/02/arrays-in-bash</guid>
                <description>&lt;p&gt;Arrays exist in Bash since version 4.0. However, the capabilities are pretty limited, it is nowhere near other scripting languages like PHP, Ruby, or Python. You can have sequentially indexed arrays, and associative arrays, but, both of them can be only one dimension.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Vim tips and tricks: The beginning</title>
                <link>https://ihaveabackup.net/2011/12/11/vim-tips-and-tricks-the-beginning</link>
                <pubDate>2011-12-11 03:36</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[tips-and-tricks]]></category>
                <category><![CDATA[vim]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2011/12/11/vim-tips-and-tricks-the-beginning</guid>
                <description>&lt;p&gt;There is a picture that circulates around the net, about the &lt;a href=&quot;/static/image/pages/emacs_learning_curves.png&quot;&gt;high learning curve of Vim&lt;/a&gt;. It is true, there is definitely a learning curve, but it isn&#x27;t that bad. You&#x27;ll need a week, or maybe two, and you&#x27;ll be probably more productive than with your current editor. The production gain from using Vim is shocking. I&#x27;ll tell you where Vim&#x27;s power comes from, and how you can start using it in a less painful way.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Optimising a PHP site with KCacheGrind and XDebug</title>
                <link>https://ihaveabackup.net/2011/12/10/optimising-a-php-sites-with-kcachegrind-and-xdebug</link>
                <pubDate>2011-12-10 02:34</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[doctrine2]]></category>
                <category><![CDATA[kcachegrind]]></category>
                <category><![CDATA[optimization]]></category>
                <category><![CDATA[php]]></category>
                <category><![CDATA[xdebug]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2011/12/10/optimising-a-php-sites-with-kcachegrind-and-xdebug</guid>
                <description>&lt;p&gt;We had a site that was expecting 100k+ unique visitors, but only for a single day. The motto of the site is &amp;quot;the day of internet shopping&amp;quot;, basically, it is centered around having larger stores of all kinds, signing up, and making discounts, that are only valid for that single day only. I want to show some steps that we took to make sure that the website does not crash under the load.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Introducing Mercurial to a small development team</title>
                <link>https://ihaveabackup.net/2011/12/04/introducing-mercurial-to-a-small-development-team</link>
                <pubDate>2011-12-04 04:20</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[casestudy]]></category>
                <category><![CDATA[hg]]></category>
                <category><![CDATA[version-control]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2011/12/04/introducing-mercurial-to-a-small-development-team</guid>
                <description>&lt;p&gt;Two years ago, I had the chance of introducing version control to a small development team, which have not used any kind of VCS for their code before. This is going to be a little case study on how it worked out after two years.&lt;br /&gt;
The company&#x27;s primary profile was marketing and media, development was mostly considered a second/third class citizen. Most of the projects were very simple websites, either to advertise a client&#x27;s new product, or to serve as the backend for a facebook app, or 90% CRUD for summarizing various surveys. Development time for projects was between 2-8 weeks, and without a written specification.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Making backups with rdiff-backup</title>
                <link>https://ihaveabackup.net/2011/12/04/making-backups-with-rdiff-backup</link>
                <pubDate>2011-12-04 03:25</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[backup]]></category>
                <category><![CDATA[rdiff]]></category>
                <category><![CDATA[recovery]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2011/12/04/making-backups-with-rdiff-backup</guid>
                <description>&lt;blockquote&gt;
&lt;p&gt;There are two kinds of people, those who back up their data, and those who have never had accidents happen to them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I want to spread the love about rdiff-backup, because it&#x27;s such a good tool for taking backups of anything text based, and a lot of people don&#x27;t know about it. It is available in most major distributions (found it in Arch, Debian, and Fedora, stopped looking after that), and it&#x27;s only dependencies are python2 and librsync. It can preserve permissions, user:groups, ACLs, extended attributes, fifos, pipes, whatnot. It is very very easy to use and automate, requiring almost no manual reading.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Common JavaScript patterns: Event delegation</title>
                <link>https://ihaveabackup.net/2011/10/31/common-javascript-patterns-event-delegation</link>
                <pubDate>2011-10-31 01:43</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[event-delegation]]></category>
                <category><![CDATA[javascript]]></category>
                <category><![CDATA[jquery]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2011/10/31/common-javascript-patterns-event-delegation</guid>
                <description>&lt;p&gt;I see these types of questions a lot on forums:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I have made an ajax based favorites system on my webshop. Users can click on the &amp;quot;add&amp;quot; button next to each product, and it will be added to their favorites list. Everything works fine, except that on freshly favorited elements, the &amp;quot;remove&amp;quot; button does not work, until I refresh the page. What could cause this? Here is the code. I&#x27;m using jQuery.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Without even taking a look at the code, I already know what the problem is. The problem usually has nothing to do with jQuery, but given the popularity of it, but it usually gets associated to it. The question can come in various flavors, but the pattern is always the same:&lt;/p&gt;
&lt;p&gt;There is a container element, that has elements added to it via DOM manipulation, and the newly added elements behave in unexpected ways, usually some functionality is not working, until a page refresh is made.&lt;/p&gt;
</description>
            </item>
        
            <item>
                <title>Useful Bash: deployment</title>
                <link>https://ihaveabackup.net/2011/09/04/useful-bash-deployment</link>
                <pubDate>2011-09-04 02:09</pubDate>
                <author><![CDATA[Norbert Kéri]]></author>
                <category><![CDATA[bash]]></category>
                <category><![CDATA[deploy]]></category>
                <category><![CDATA[hg]]></category>
                <category><![CDATA[ssh]]></category>
                <category><![CDATA[tar]]></category>
                <guid isPermaLink="true">https://ihaveabackup.net/2011/09/04/useful-bash-deployment</guid>
                <description>&lt;p&gt;I&#x27;m sure a lot of people can relate, when I say that deploying changes isn&#x27;t my favorite part of the job. It&#x27;s error prone, tedious, repetitive, and leads to a lot of shotgun debugging, when for some reason things don&#x27;t work out on the production server. I&#x27;d like to show some snippets how deploying could be made easier, and less error prone. Note that this won&#x27;t be a tutorial on bash scripting, since there are already a lot of that on the web, it will be more about putting it to some use.&lt;/p&gt;
</description>
            </item>
        
    </channel>
</rss>