<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>bisko.be</title><description>Personal blog and writings by bisko - thoughts on development, adventures, and life.</description><link>https://bisko.be/</link><language>en-us</language><item><title>Running Ollama with older GPUs on CachyOS</title><link>https://bisko.be/posts/dev/running-ollama-with-older-gpus-on-cachyos/</link><guid isPermaLink="true">https://bisko.be/posts/dev/running-ollama-with-older-gpus-on-cachyos/</guid><description>Today I was migrating my Windows 11 VM to Linux, to allow better flexibility of service being ran on it and encountered an issue with Ollama not being able to run on my old GPUs - GTX1070 and GTX970</description><pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;tldr&quot;&gt;TL;DR;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;ollama-cuda&lt;/code&gt; on CachyOS comes (at this point in time) with support only for &lt;code&gt;compute &gt;= 7.5&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you have older GPUs with earlier &lt;code&gt;compute&lt;/code&gt;, you HAVE TO do one of 2 things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build &lt;code&gt;ollama-cuda&lt;/code&gt; from source, with support for the older compute targets&lt;/li&gt;
&lt;li&gt;Install &lt;code&gt;ollama-vulkan&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I chose &lt;code&gt;ollama-vulkan&lt;/code&gt; and it’s working perfectly!&lt;/p&gt;
&lt;h3 id=&quot;story-time&quot;&gt;Story time&lt;/h3&gt;
&lt;p&gt;Today I had the inspiration to finally shut down my Windows 11 VM and migrate it to Linux.&lt;/p&gt;
&lt;p&gt;The requirements were to be able to run:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ollama - for local model magic&lt;/li&gt;
&lt;li&gt;Docker - for remote development&lt;/li&gt;
&lt;li&gt;Steam - for playing games&lt;/li&gt;
&lt;li&gt;Jellyfin - for home videos archive&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now I am going to focus only on Ollama as it was an interesting experience and it got me wondering why things are not more obvious.&lt;/p&gt;
&lt;p&gt;The machine has 2 GPUs in it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GTX 1070 - 8GB&lt;/li&gt;
&lt;li&gt;GTX 970 - 4GB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wanted to run Ollama on them, to play around with local models and how I could integrate it in some projects. For example - anonymizing data locally, doing a non-destructive OpenClaw implementation that is fit for my use-cases, local OCR for documents that I scan with my phone, automating some things in the everyday management of a home.&lt;/p&gt;
&lt;p&gt;So naturally I installed &lt;code&gt;ollama&lt;/code&gt; and &lt;code&gt;ollama-cuda&lt;/code&gt; as I have 2 Nvidia GPUs in there, expecting that it would work fine, as it was working on Windows just a few minutes prior.&lt;/p&gt;
&lt;p&gt;I started Ollama, loaded &lt;code&gt;qwen3:8b&lt;/code&gt; for the quick experiment and… it was running on CPU 🤔&lt;/p&gt;
&lt;p&gt;The GPUs were perfectly capable to hold it in VRAM, but for some reason Ollama was choosing to run them on CPU.&lt;/p&gt;
&lt;p&gt;After trying to figure it out from logs, I asked Claude to help out a bit and it came up with the pretty daunting finding:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;The&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; logs&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; tell&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; the&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; story&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; clearly.&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Both&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; your&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; GPUs&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; are&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; detected&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; but&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; then&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; filtered&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; out&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; because&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; they&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fail&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; CUDA&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; initialization:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  &quot;filtering device which didn&apos;t fully initialize&quot;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; id=GPU-eb132a13-b9f4-40e3-d85d-60f211dfd21e&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; library=CUDA&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  &quot;filtering device which didn&apos;t fully initialize&quot;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; id=GPU-550263c8-37e2-2a25-c0b6-10cc7511ed20&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; library=CUDA&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  The&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; reason&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; is&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; the&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; CUDA&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; library&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; bundled&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; with&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Ollama&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0.17.4&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; was&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; compiled&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; these&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architectures&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; only:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  CUDA.0.ARCHS&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;=750,800,860,870,880,890,900,1000,1030,1100,1200,1210&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  The&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; minimum&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; supported&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; compute&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; capability&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; is&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 7.5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (Turing &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; RTX&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; 20xx&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; series&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;). Your GPUs are older than that:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  ┌──────────┬────────────────────┬──────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  │&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;   GPU&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    │&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Compute&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Capability&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; │&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Architecture&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  ├──────────┼────────────────────┼──────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  │&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; GTX&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1070&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; │&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 6.1&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;                │&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Pascal&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  ├──────────┼────────────────────┼──────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  │&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; GTX&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 970&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  │&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 5.2&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;                │&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Maxwell&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  └──────────┴────────────────────┴──────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  Neither&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; is&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; the&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; supported&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list,&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; so&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; CUDA&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; initialization&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fails&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; both,&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Ollama&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; falls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; back&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; to&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; CPU-only&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; inference.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  Your&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; options:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  1.&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Downgrade&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Ollama&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; to&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; an&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; older&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; version&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; that&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; still&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; included&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Pascal/Maxwell&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; support&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (pre-0.6.x &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;era&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; had&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; broader&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; arch&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; coverage,&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; but&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; check&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; release&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; notes&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; specifics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  2.&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Build&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Ollama&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; source&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; with&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; CUDA_ARCHITECTURES=&quot;52;61;75;80;86&quot;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; to&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; include&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; your&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; GPU&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architectures.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  3.&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Upgrade&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; GPUs&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; to&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; at&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; least&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; an&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; RTX&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2060&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; or&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; newer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (compute &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;7.5+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, this was kind of a letdown for me, as I want to use the GPUs as much as possible, before moving on to a new one.&lt;/p&gt;
&lt;p&gt;I didn’t want to actually rebuild Ollama from source, as it should support things out of the box and I was very confused why it would not, even though the Windows install it supported those architectures.&lt;/p&gt;
&lt;p&gt;These cards were also shown on Ollama’s website as supported!&lt;/p&gt;
&lt;p&gt;To cut a long story of Googling short:&lt;/p&gt;
&lt;p&gt;Turns out that &lt;code&gt;ollama-cuda&lt;/code&gt; comes with just the requirements listed above… and the suggestion was to install &lt;code&gt;ollama-vulkan&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After doing that, everything started working very smoothly!&lt;/p&gt;</content:encoded><category>dev</category><category>linux</category><category>llm</category><category>ollama</category><category>cachyos</category><category>vulcan</category><category>cuda</category></item><item><title>[Linux] Recovering a disconnected `apt dist-upgrade` session</title><link>https://bisko.be/posts/dev/linux-recovering-a-disconnected-apt-dist-upgrade-session/</link><guid isPermaLink="true">https://bisko.be/posts/dev/linux-recovering-a-disconnected-apt-dist-upgrade-session/</guid><description>Today I was updating my Proxmox install remotely via the built-in console, but forgot what I was doing and closed the tab mid-way. This resulted in me being unable to connect again as the packages were already being updated in the background and the upgrade has asked a question to replace a file and waiting</description><pubDate>Wed, 23 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today I was updating my Proxmox install remotely via the built-in console, but forgot what I was doing and closed the tab mid-way.&lt;/p&gt;
&lt;p&gt;This resulted in me being unable to connect again as the packages were already being updated in the background and the upgrade has asked a question to replace a file and waiting for my input.&lt;/p&gt;
&lt;p&gt;So I could SSH in, but not do anything, as it was still waiting for input on a console that I could not connect to, as it was not opening the UI.&lt;/p&gt;
&lt;p&gt;After a quick look around, I stumbled upon a &lt;a href=&quot;https://serverfault.com/questions/19634/how-to-reconnect-to-a-disconnected-ssh-session&quot;&gt;Serverfault thread&lt;/a&gt; mentioning using &lt;code&gt;reptyr&lt;/code&gt; to take over the terminal session over SSH.&lt;/p&gt;
&lt;p&gt;Adding here what exactly was done, to be able the session back and finish the upgrade:&lt;/p&gt;
&lt;p&gt;From &lt;a href=&quot;https://serverfault.com/questions/19634/how-to-reconnect-to-a-disconnected-ssh-session#comment1506308_979180&quot;&gt;this comment&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://github.com/nelhage/reptyr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; reptyr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;make&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This installed &lt;code&gt;reptyr&lt;/code&gt; on the machine.&lt;/p&gt;
&lt;p&gt;Then I looked for all the open sessions with &lt;code&gt;ps ax | grep pts&lt;/code&gt; to find the process I was looking for.&lt;/p&gt;
&lt;p&gt;Then I found the parent-most process in the call tree that has &lt;code&gt;pts&lt;/code&gt; assigned to it and attached to it via it’s PID:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;reptyr&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -T&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1390511&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then I could finish the upgrade! 🎉&lt;/p&gt;</content:encoded><category>dev</category><category>Uncategorized</category></item><item><title>Hibiscus plant under the morning rays</title><link>https://bisko.be/posts/blog/hibiscus-plant-under-the-morning-rays/</link><guid isPermaLink="true">https://bisko.be/posts/blog/hibiscus-plant-under-the-morning-rays/</guid><pubDate>Sun, 21 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_2327-b97d8968.C7nMUQ33_Z1YnOwk.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Photography</category><category>flower</category><category>flowers</category><category>nature</category></item><item><title>Timelapse: Porto by the river</title><link>https://bisko.be/posts/blog/timelapse-porto-by-the-river/</link><guid isPermaLink="true">https://bisko.be/posts/blog/timelapse-porto-by-the-river/</guid><description>A few days ago we had a team meetup in Porto. Finally met a few of my colleagues that I have only seen over Zoom for the last two years. We spent a couple days at the amazing Porto I/O Riverside co-working space. The space has an awesome balcony that we generously enjoyed and had</description><pubDate>Tue, 07 Jun 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A few days ago we had a team meetup in &lt;a href=&quot;https://en.wikipedia.org/wiki/Porto&quot;&gt;Porto&lt;/a&gt;. Finally met a few of my colleagues that I have only seen over Zoom for the last two years.&lt;/p&gt;
&lt;p&gt;We spent a couple days at the amazing &lt;a href=&quot;https://porto.io/en/location/riverside/&quot;&gt;Porto I/O Riverside&lt;/a&gt; co-working space.&lt;/p&gt;
&lt;p&gt;The space has an awesome balcony that we generously enjoyed and had quite a few productive discussions when we didn’t get too lost at just staring at the boat traffic in the river&lt;/p&gt;
&lt;p&gt;During one of those moments where we were just sitting quietly, admiring the scenery, I managed to catch a pretty lovely timelapse.&lt;/p&gt;</content:encoded><category>blog</category><category>Adventures</category><category>Photography</category><category>Timelapse</category><category>travel</category><category>boats</category><category>Porto</category><category>Portugal</category><category>river</category><category>roofs</category></item><item><title>[Linux] Syncthing – read-only file system when running as service</title><link>https://bisko.be/posts/dev/linux-syncthing-read-only-file-system-when-running-as-service/</link><guid isPermaLink="true">https://bisko.be/posts/dev/linux-syncthing-read-only-file-system-when-running-as-service/</guid><description>I’ve been using Syncthing for a while to synchronize my working copy with a local dev server for a few months. At first I was using it by logging in and running it manually through the CLI. It was working well, so I didn’t think twice when I moved to run it as a service.</description><pubDate>Wed, 06 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been using &lt;a href=&quot;https://syncthing.net/&quot;&gt;Syncthing&lt;/a&gt; for a while to synchronize my working copy with a local dev server for a few months.&lt;/p&gt;
&lt;p&gt;At first I was using it by logging in and running it manually through the CLI. It was working well, so I didn’t think twice when I moved to run it as a service. It started, it synced some data, everything was fine.&lt;/p&gt;
&lt;p&gt;Until it wasn’t, of course! 🙂&lt;/p&gt;
&lt;p&gt;Turns out that I didn’t notice a bunch of errors cropping up in the logs mentioning that the filesystem on the dev server is read-only and it was causing Syncthing to not sync anything.&lt;/p&gt;
&lt;p&gt;I thought it was a bug and it was just showing &lt;code&gt;Out of Sync&lt;/code&gt; for the folders, but it was actually syncing. Well I was wrong.&lt;/p&gt;
&lt;p&gt;After debugging for a few hours and not finding any clues whatsoever in the forums through a few Google searches, I landed on an &lt;a href=&quot;https://wiki.archlinux.org/title/syncthing#read-only_file_system_error_on_/etc_although_run_as_root&quot;&gt;Syncthing article on the ArchWiki&lt;/a&gt;, mentioning my exact case:&lt;/p&gt;
&lt;p&gt;read-only file system error on /etc although run as root&lt;/p&gt;
&lt;p&gt;This was my exact usecase, apart from the problematic folder not being &lt;code&gt;/etc&lt;/code&gt;, but &lt;code&gt;/usr/local/src&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Well, after reading what it said, it turns out that if you run Syncthing (or anything) via &lt;code&gt;systemd&lt;/code&gt; and you have &lt;code&gt;ProtectSystem&lt;/code&gt; set for the service to &lt;code&gt;full&lt;/code&gt;, it will make some directories read-only by default. &lt;code&gt;/usr&lt;/code&gt; is one of those paths.&lt;/p&gt;
&lt;p&gt;To fix it, you need to add a new line in the service config and restart the service (and &lt;code&gt;daemon-reload&lt;/code&gt;):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ReadWritePaths=/usr/local/src&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After this Syncthing should work fine.&lt;/p&gt;</content:encoded><category>dev</category><category>Homelab</category><category>linux</category><category>permissions</category><category>read-only</category><category>syncthing</category><category>systemd</category></item><item><title>Access Denied</title><link>https://bisko.be/posts/blog/access-denied/</link><guid isPermaLink="true">https://bisko.be/posts/blog/access-denied/</guid><pubDate>Sat, 31 Jul 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_4506-8e7e236d.BcqhatkL_zWajt.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Photography</category><category>door</category><category>insect</category><category>insects</category><category>key</category><category>lock</category><category>nature</category><category>wasp</category><category>wasps</category></item><item><title>Lavender Sunset</title><link>https://bisko.be/posts/blog/lavender-sunset/</link><guid isPermaLink="true">https://bisko.be/posts/blog/lavender-sunset/</guid><pubDate>Sat, 03 Jul 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/image_534908fa-cab6-4233-832b-e401bab27a30.img_3963-ccdc9838.CHRt9-9J_ZxRqVE.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Photography</category><category>Uncategorized</category><category>flower</category><category>sun</category></item><item><title>Timelapse: A storm rolling over</title><link>https://bisko.be/posts/blog/timelapse-a-storm-rolling-over/</link><guid isPermaLink="true">https://bisko.be/posts/blog/timelapse-a-storm-rolling-over/</guid><pubDate>Sat, 26 Jun 2021 00:00:00 GMT</pubDate><content:encoded/><category>blog</category><category>Photography</category><category>clouds</category><category>storm</category><category>Timelapse</category><category>weather</category></item><item><title>Sunrays on yellow</title><link>https://bisko.be/posts/blog/sunrays-on-yellow/</link><guid isPermaLink="true">https://bisko.be/posts/blog/sunrays-on-yellow/</guid><pubDate>Sat, 05 Jun 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/image_42f35f6f-2341-47f4-a7a0-eb0a75d3678f.img_3167-8b4daa1a.WUo3hBS8_BI9FB.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Photography</category><category>flower</category><category>sunrays</category><category>yellow</category></item><item><title>Roses</title><link>https://bisko.be/posts/blog/roses/</link><guid isPermaLink="true">https://bisko.be/posts/blog/roses/</guid><pubDate>Sun, 23 May 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_2866-bd30e710.fEDlZ8s7_Z3rCvg.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Uncategorized</category></item><item><title>Cloudy with a chance of tulips</title><link>https://bisko.be/posts/blog/cloudy-with-a-chance-of-tulips/</link><guid isPermaLink="true">https://bisko.be/posts/blog/cloudy-with-a-chance-of-tulips/</guid><description>Throwback to 2013 when I was visiting my grandpa at the village. Found this pretty tulip cut and thrown on the side of the road.</description><pubDate>Mon, 03 May 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1936&quot; height=&quot;2592&quot; src=&quot;/_astro/img_1645-bb728269.BHDQHNQt_1vNnmk.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Throwback to 2013 when I was visiting my grandpa at the village. Found this pretty tulip cut and thrown on the side of the road.&lt;/p&gt;</content:encoded><category>blog</category><category>Photography</category><category>clouds</category><category>flower</category><category>flowers</category><category>nature</category><category>red</category><category>sky</category><category>travel</category></item><item><title>[Linux] Running multiple commands on multiple servers in parallel</title><link>https://bisko.be/posts/dev/linux-running-multiple-commands-on-multiple-servers-in-parallel/</link><guid isPermaLink="true">https://bisko.be/posts/dev/linux-running-multiple-commands-on-multiple-servers-in-parallel/</guid><description>I have a cluster of Raspberry Pi’s at home running Docker Swarm. To keep up with things, they’re using the same configuration – users, Docker versions, etc. Sometimes some of the updates require running the same thing on all the nodes of the cluster – for example – creating a new Docker macvlan network. To</description><pubDate>Mon, 19 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I have a cluster of Raspberry Pi’s at home running Docker Swarm. To keep up with things, they’re using the same configuration – users, Docker versions, etc.&lt;/p&gt;
&lt;p&gt;Sometimes some of the updates require running the same thing on all the nodes of the cluster – for example – creating a new Docker macvlan network.&lt;/p&gt;
&lt;p&gt;To do this, one has to either run the same commands on all the nodes manually, by &lt;strong&gt;ssh&lt;/strong&gt;-ing in each and every one, running the commands and moving on to the next one.&lt;/p&gt;
&lt;p&gt;Since I’m trying to reduce my work in the long run and to make things as organized as possible, I started looking into ways to run commands on all the nodes at the same time.&lt;/p&gt;
&lt;h3 id=&quot;iteration-1-custom-python-script&quot;&gt;Iteration 1: Custom Python script&lt;/h3&gt;
&lt;p&gt;The first iteration of doing this was to create a custom Python script. One side of this was to learn Python a bit better, the other side was that I couldn’t find a good way to run commands in more native way.&lt;/p&gt;
&lt;p&gt;As one can expect (hey, still having little experience in the language 🙂 ), it became bloated mess pretty quickly and was very prone to breakage.&lt;/p&gt;
&lt;p&gt;I had to find another way to do this, without having to re-learn what I did 3 weeks ago and what broke the last time.&lt;/p&gt;
&lt;h3 id=&quot;iteration-2-pssh&quot;&gt;Iteration 2: &lt;code&gt;pssh&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Googling around I stumbled upon &lt;code&gt;[pssh](https://linux.die.net/man/1/pssh)&lt;/code&gt; that can run things in parallel via SSH.&lt;/p&gt;
&lt;p&gt;All things considered, it was pretty easy to get it up and running.&lt;/p&gt;
&lt;p&gt;The problem was that to run some of the things I needed to be able to do them via &lt;code&gt;sudo&lt;/code&gt;. Passing passwords around wasn’t the best, so I had to search around again to figure out how to send the &lt;code&gt;sudo&lt;/code&gt; password when the remote server asked for it.&lt;/p&gt;
&lt;p&gt;Turns out it’s pretty easy if you stumble upon the right &lt;a href=&quot;https://unix.stackexchange.com/a/487558/134974&quot;&gt;StackOverflow comment&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;the-tldr-version-is&quot;&gt;The TL;DR; version is:&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stty&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -echo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;Password: &quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; PASS&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stty&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; echo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;PASS&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&quot;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;pssh&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -h&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;HOSTFIL&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;E&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -o&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; /tmp/output&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -t&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -I&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;`&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ./commands.sh`&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;-I &quot;`cat ./commands.sh`&quot;&lt;/code&gt; is required to be done like this (surrounded in quotes and backcquotes like this), otherwise it doesn’t properly run the commands. The password is going to be sent as a command separately and not picked up as an input to &lt;strong&gt;sudo&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The other catch is that because of the way this is set up, one needs to run &lt;code&gt;sudo&lt;/code&gt; with the &lt;code&gt;-S&lt;/code&gt; parameter, to pick the password input properly.&lt;/p&gt;</content:encoded><category>dev</category><category>Uncategorized</category></item><item><title>Starry night</title><link>https://bisko.be/posts/blog/starry-night/</link><guid isPermaLink="true">https://bisko.be/posts/blog/starry-night/</guid><description>Recently we went on a holiday in the Bulgarian mountains. One of the nights, the sky was clear enough to give the new iPhone 12 night photo mode a shot. The initial attempts seemed a bit noisy and didn’t show too much details. Luckily I shared this photo with my cousin and he mentioned that</description><pubDate>Tue, 09 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently we went on a holiday in the Bulgarian mountains.&lt;/p&gt;
&lt;p&gt;One of the nights, the sky was clear enough to give the new iPhone 12 night photo mode a shot.&lt;/p&gt;
&lt;p&gt;The initial attempts seemed a bit noisy and didn’t show too much details.&lt;/p&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_1381-10c608c2.DVecqBvr_Z1VJ5i5.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Luckily I shared this photo with my cousin and he mentioned that I might want to try shooting in RAW as it should retain more information that can be tweaked after the shot.&lt;/p&gt;
&lt;p&gt;I did so by enabling saving the photos in ProRAW. The resulting photo was similar to the above one, but then I went to edit the photo in the Photos app on iOS, without using any external tools.&lt;/p&gt;
&lt;p&gt;After a few tweaks, details started popping up quite well on the dark sky background.&lt;/p&gt;
&lt;p&gt;The end result seems quite pleasing!&lt;/p&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_1380-3c06f94f.9xJS155n_VMvSG.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;And a fun fact about the photo – the bright glow in the sky is actually smoke from the hotel chimney, which I only saw while taking photos, not with my eyes. It was soo dark.&lt;/p&gt;
&lt;p&gt;I’ll definitely continue experimenting with Night mode photography in the future on clearer and darker skies!&lt;/p&gt;</content:encoded><category>blog</category><category>Photography</category><category>night-photos</category><category>travel</category></item><item><title>Weirdy the Snowman</title><link>https://bisko.be/posts/blog/weirdy-the-snowman/</link><guid isPermaLink="true">https://bisko.be/posts/blog/weirdy-the-snowman/</guid><description>Sometimes the snow is just too frozen to make a proper ball for a snowman. In these cases, why not build it, brick by brick or layer by layer, as if it was a Lego structure?</description><pubDate>Sun, 31 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/image_af25d50e-4c23-444f-9224-f7c5c1bceca3.img_0953-83f032c2.C2lW_tiM_1jpdxL.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Sometimes the snow is just too frozen to make a proper ball for a snowman. In these cases, why not build it, brick by brick or layer by layer, as if it was a Lego structure?&lt;/p&gt;</content:encoded><category>blog</category><category>Uncategorized</category><category>Winter</category><category>ice</category><category>snowman</category></item><item><title>The Grasshopper</title><link>https://bisko.be/posts/blog/the-grasshopper/</link><guid isPermaLink="true">https://bisko.be/posts/blog/the-grasshopper/</guid><description>Found this little fellow chilling next to my car on one pretty cold morning.</description><pubDate>Tue, 08 Dec 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_0416-de3b3257.C7SwA0Oo_ZcuH8m.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Found this little fellow chilling next to my car on one pretty cold morning.&lt;/p&gt;</content:encoded><category>blog</category><category>Uncategorized</category><category>Animals</category><category>cold</category><category>grasshopper</category><category>green</category><category>morning</category><category>Photography</category></item><item><title>The “Pencil”</title><link>https://bisko.be/posts/blog/the-pencil/</link><guid isPermaLink="true">https://bisko.be/posts/blog/the-pencil/</guid><description>We went to the mountains on a recent trip. It was a nice secluded place. Just a few houses and a restaurant. Next to an abandoned artificial lake/dam. The mosquitoes and the heat were our arch enemies, but we managed to make due. Since there wasn’t much to do around, we had to improvise activities.</description><pubDate>Sun, 08 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_3189-041bec7e.ylsLA4bE_Zu4r9W.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;We went to the mountains on a recent trip. It was a nice secluded place. Just a few houses and a restaurant. Next to an abandoned artificial lake/dam.&lt;/p&gt;
&lt;p&gt;The mosquitoes and the heat were our arch enemies, but we managed to make due.&lt;/p&gt;
&lt;p&gt;Since there wasn’t much to do around, we had to improvise activities. Luckily my son stumbled upon a big rectangular stone and found it really fascinating to carry around. I found it fascinating too.&lt;/p&gt;
&lt;p&gt;Each side had a different texture, much like different sandpapers.&lt;/p&gt;
&lt;p&gt;We also had a bunch of older branches, which had fallen down from the trees around the place.&lt;/p&gt;
&lt;p&gt;After a careful consideration for a few seconds, we started exploring the wonderful world of making sticks more pointy.&lt;/p&gt;
&lt;p&gt;One of the sticks came out just like a pencil! Had a perfect size hole to put in a tiny graphite from an actual pencil and it worked!&lt;/p&gt;
&lt;p&gt;We drew around on the ground with it and it was amazing.&lt;/p&gt;</content:encoded><category>blog</category><category>Quick &amp;amp; Easy</category><category>travel</category><category>Adventures</category><category>forest</category><category>stone</category><category>woodwork</category></item><item><title>Snowdrops</title><link>https://bisko.be/posts/blog/snowdrops/</link><guid isPermaLink="true">https://bisko.be/posts/blog/snowdrops/</guid><description>Throwback to 2007.</description><pubDate>Thu, 08 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1024&quot; height=&quot;768&quot; src=&quot;/_astro/c7a42ddf-26db-487f-8ca3-20b5ef6704dc_1_105_c-bd84ccbc.nK60jHnF_Z1KzMGp.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Throwback to 2007.&lt;/p&gt;</content:encoded><category>blog</category><category>Photography</category><category>flowers</category><category>snowdrops</category></item><item><title>Guessing a numeric zip file password only with command-line utilities</title><link>https://bisko.be/posts/dev/guessing-a-numeric-zip-file-password-only-with-command-line-utilities/</link><guid isPermaLink="true">https://bisko.be/posts/dev/guessing-a-numeric-zip-file-password-only-with-command-line-utilities/</guid><description>Today I received my monthly invoice from my internet provider and something struck me as weird. The invoice, contained in the mail was in a ZIP file with a password. Not to say how strange it was to receive an attachment as a ZIP file in these days and times (spam, malware, phishing, etc.), the</description><pubDate>Mon, 14 Sep 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today I received my monthly invoice from my internet provider and something struck me as weird.&lt;/p&gt;
&lt;p&gt;The invoice, contained in the mail was in a ZIP file with a password.&lt;/p&gt;
&lt;p&gt;Not to say how strange it was to receive an attachment as a ZIP file in these days and times (spam, malware, phishing, etc.), the password they chose struck me as very weak.&lt;/p&gt;
&lt;p&gt;It’s the account holder birthday in the format &lt;code&gt;YYMMDD&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I ran a very crude calculation in my mind while at the gym and it came out as very few possible combinations. After using an online tool to calculate how many days have passed (since not all combinations would result in a valid date) since 1900-01-01, turns out the combinations are just 44,075 (until 2020-09-14).&lt;/p&gt;
&lt;p&gt;Knowing that optimized tools that use GPU power to crack hashes can make guesses in the millions per second, I wanted to see how quickly the password can be guessed without using them and using just the Linux/macOS CLI (as I only had access to a VPS in the gym).&lt;/p&gt;
&lt;p&gt;I came up with the following code that works on macOS:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo {1..44000} | xargs -P 16 -n 1 -I{} date -v &quot;-{}d&quot; +&quot;%y%m%d&quot; | xargs -P 16 -I{} sh -c &apos;unzip -qqoP &quot;{}&quot; 0417160508.zip &amp;#x26;&amp;#x26; echo &quot;{}&quot; &amp;#x26;&amp;#x26; exit 255&apos;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The command is pretty simple in it’s workings, even though it seems complicated.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo {1..44000}&lt;/code&gt; generates the numbers from 1 to 44,000 and passes them on to the next step.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;xargs -P 16 -n 1 -I{} date -v &quot;-{}d&quot; +&quot;%y%m%d&quot;&lt;/code&gt; – takes the input from the first step and generates dates in the format &lt;code&gt;YYMMDD&lt;/code&gt; by leveraging &lt;code&gt;date&lt;/code&gt;‘s functionality to “augment” a date with specific amount. In this case it would take out X days from the current date. Where X is the number generated in the first step. This way we can generate dates from today back to 1900s.&lt;/p&gt;
&lt;p&gt;The third step is the more interesting, so I’m going to split it in two parts:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;xargs -P 16 -I{} sh -c &apos;...&apos;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This takes the generated dates from step 2 and runs a command on each of those dates. &lt;code&gt;-P 16&lt;/code&gt; here means that it’s going to run this in 16 parallel processes, to make sifting through the data faster. The same trick is applied to step 2 to speed up the date generation.&lt;/p&gt;
&lt;p&gt;The second part is where the guesses happen:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;unzip -qqoP &quot;{}&quot; 0417160508.zip &amp;#x26;&amp;#x26; echo &quot;{}&quot; &amp;#x26;&amp;#x26; exit 255&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;What this does is it first tries to decompress the zip file using the password generated in step 2. If it’s successful it would print out (&lt;code&gt;echo&lt;/code&gt;) the guessed password and then &lt;code&gt;exit 255&lt;/code&gt; forces &lt;code&gt;xargs&lt;/code&gt; to stop running. We don’t want to continue guessing if the password was found.&lt;/p&gt;
&lt;p&gt;All in all, it was pretty bad decision to choose this as the password for the file, because running the above command takes only about 10 seconds to guess the correct password for my invoice. Not much more for anyone else.&lt;/p&gt;</content:encoded><category>dev</category><category>Uncategorized</category></item><item><title>Graffiti around the world: Burgas, Bulgaria</title><link>https://bisko.be/posts/blog/graffiti-around-the-world-burgas-bulgaria/</link><guid isPermaLink="true">https://bisko.be/posts/blog/graffiti-around-the-world-burgas-bulgaria/</guid><description>Recently I stumbled upon this photo from a friend of mine. Definitely fits the series!</description><pubDate>Tue, 08 Sep 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1440&quot; height=&quot;1087&quot; src=&quot;/_astro/img_1545-6a461b59.DrLukEK8_ozvWH.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;The Psy-Snail&lt;/p&gt;
&lt;p&gt;Recently I stumbled upon this photo from a friend of mine. Definitely fits the series!&lt;/p&gt;</content:encoded><category>blog</category><category>Uncategorized</category></item><item><title>The new wheel</title><link>https://bisko.be/posts/blog/the-new-wheel/</link><guid isPermaLink="true">https://bisko.be/posts/blog/the-new-wheel/</guid><description>On a recent trip in a mountain village, we found this truck, missing one of its rear wheels. Our son wasn’t happy that the truck was hurt, so we decided to improvise a wheel for it. After finding a water bottle cap, we used a little knife magic to remove part of the cap to</description><pubDate>Sat, 08 Aug 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_1070-1bce5de4.PNKa8g3z_Z1B6f9F.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;On a recent trip in a mountain village, we found this truck, missing one of its rear wheels.&lt;/p&gt;
&lt;p&gt;Our son wasn’t happy that the truck was hurt, so we decided to improvise a wheel for it.&lt;/p&gt;
&lt;p&gt;After finding a water bottle cap, we used a little knife magic to remove part of the cap to make it fit the size.&lt;/p&gt;
&lt;p&gt;After a quick intervention with the lighter to melt the plastic, we managed to weld it to the axle of the missing wheel.&lt;/p&gt;
&lt;p&gt;And it actually works!&lt;/p&gt;
&lt;p&gt;Look at it go!&lt;/p&gt;</content:encoded><category>blog</category><category>Quick &amp;amp; Easy</category><category>Second Chances</category><category>diy</category><category>fixing</category><category>toys</category></item><item><title>Dealing with spaghetti code in PHP: Using anonymous functions to extract pieces of template code</title><link>https://bisko.be/posts/dev/dealing-with-spaghetti-code-in-php-using-anonymous-functions-to-extract-pieces-of-template-code/</link><guid isPermaLink="true">https://bisko.be/posts/dev/dealing-with-spaghetti-code-in-php-using-anonymous-functions-to-extract-pieces-of-template-code/</guid><description>Recently I’ve been helping out a friend with trying to make sense of some code and how to modify it to work well with asynchronous calls to the backend. A bonus would be to be able to write it in a more modular and reusable way. The code is a WordPress plugin that was written</description><pubDate>Sat, 08 Aug 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently I’ve been helping out a friend with trying to make sense of some code and how to modify it to work well with asynchronous calls to the backend. A bonus would be to be able to write it in a more modular and reusable way.&lt;/p&gt;
&lt;p&gt;The code is a WordPress plugin that was written with very legacy approach – mix of business and frontend logic in one place. Data manipulations done in the middle of template code and such.&lt;/p&gt;
&lt;p&gt;Basically what you’ve seen in PHP sites back in the early 2000s before all the awesome OOP additions to the language and bunch of mature frameworks.&lt;/p&gt;
&lt;p&gt;The case I was chipping away on today was the following – you have a table that shows bunch of entries. We needed to add several filters to the table and make it work via AJAX to quickly refresh the UI, without reloading the whole WordPress Admin page.&lt;/p&gt;
&lt;p&gt;Filtering the data was easy – a quick inline &lt;code&gt;array_filter&lt;/code&gt; to filter the data before it was passed down to the template code (to keep the same code style this was also in the template file 😇).&lt;/p&gt;
&lt;p&gt;The problem came when we started working on making the table renderable over AJAX.&lt;/p&gt;
&lt;p&gt;It’s in the middle of a bunch of other template and business code. If we wanted to limit the output via AJAX only to the table we had only a few ways to achieve that.&lt;/p&gt;
&lt;p&gt;The first way would be to wrap the HTML before and after the table in HUGE &lt;code&gt;if&lt;/code&gt; statements to make sure it’s not rendered.&lt;/p&gt;
&lt;p&gt;Another way would be to extract the template in a separate file and to include it in the AJAX action that we would define in plugin’s code.&lt;/p&gt;
&lt;p&gt;Anonymous functions to the rescue!&lt;/p&gt;
&lt;p&gt;Thinking of how to deal with this in the easiest possible way, I tried defining a normal PHP function that would contain the table code, but there was a problem.&lt;/p&gt;
&lt;p&gt;The code runs contained in a class method. There are references to &lt;code&gt;$this&lt;/code&gt; in the table template. If we don’t want to change the code too much, we would want to pass &lt;code&gt;$this&lt;/code&gt; as a function argument. Well that doesn’t quite work as you can’t pass &lt;code&gt;$this&lt;/code&gt; as parameter 🤷‍♂️.&lt;/p&gt;
&lt;p&gt;I was a bit disappointed that we’ll have to rewrite bunch of stuff in the template and there were quite a few references that we wanted to be aware of, so it keeps working.&lt;/p&gt;
&lt;p&gt;Then I remembered that the site doesn’t run on PHP5.2, but PHP7 and anonymous functions would be supported.&lt;/p&gt;
&lt;p&gt;And they have the nifty feature where you can define what variables from the calling scope will be passed down to the function when it’s called. For example:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;php&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;$table_function &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ( $pages, $current_page, $items ) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // ... Table render code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will allow you to directly reference &lt;code&gt;$pages&lt;/code&gt; or &lt;code&gt;$items&lt;/code&gt; in the function body.&lt;/p&gt;
&lt;p&gt;The awesome feature here is that you can also pass &lt;code&gt;$this&lt;/code&gt; as a variable in the function scope!&lt;/p&gt;
&lt;p&gt;Now we were able to fully extract the table rendering code in a separate function that we can call in isolation during the AJAX call!&lt;/p&gt;
&lt;p&gt;Of course one must be very careful about the variables used inside the function body as they have to be defined, so be careful where the AJAX function can be called.&lt;/p&gt;
&lt;p&gt;For us, this would mean that we will add a tiny action in the main class that would still require the file, but we’ll have more control on disabling all the other outputs that will happen.&lt;/p&gt;</content:encoded><category>dev</category><category>Snippets</category><category>lambda-functions</category><category>php</category><category>WordPress</category></item><item><title>Graffiti around the world: Horses</title><link>https://bisko.be/posts/blog/graffiti-around-the-world-horses/</link><guid isPermaLink="true">https://bisko.be/posts/blog/graffiti-around-the-world-horses/</guid><description>Children playground in Sofia, Bulgaria</description><pubDate>Wed, 08 Jul 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;6435&quot; height=&quot;2755&quot; src=&quot;/_astro/img_1222-8152ca52.D5sLohsY_Z2jrb7b.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Children playground in Sofia, Bulgaria&lt;/strong&gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Graffiti</category><category>horses</category><category>Photography</category><category>travel</category></item><item><title>Timelapse: Evening landing at Toronto Pearson airport</title><link>https://bisko.be/posts/blog/timelapse-evening-landing-at-toronto-pearaon-airport/</link><guid isPermaLink="true">https://bisko.be/posts/blog/timelapse-evening-landing-at-toronto-pearaon-airport/</guid><description>Evening landing at Toronto Pearson airport – 28th September 2018</description><pubDate>Mon, 08 Jun 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Evening landing at Toronto Pearson airport – 28th September 2018&lt;/p&gt;</content:encoded><category>blog</category><category>Adventures</category><category>travel</category><category>Airplane</category><category>Canada</category><category>Landing</category><category>Timelapse</category><category>Toronto</category></item><item><title>The Giraffe</title><link>https://bisko.be/posts/blog/the-giraffe/</link><guid isPermaLink="true">https://bisko.be/posts/blog/the-giraffe/</guid><description>A pretty pattern emerged while playing with Lego Duplo</description><pubDate>Fri, 08 May 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2734&quot; height=&quot;3645&quot; src=&quot;/_astro/img_0214-37c92416.DWchMgfS_ZILsQg.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;A pretty pattern emerged while playing with Lego Duplo&lt;/p&gt;</content:encoded><category>blog</category><category>Animals</category><category>Photography</category><category>blocks</category><category>building</category><category>duplo</category><category>lego</category></item><item><title>Arduino/ESP32: Disabling the task watchdog</title><link>https://bisko.be/posts/dev/arduino-esp32-disabling-the-task-watchdog/</link><guid isPermaLink="true">https://bisko.be/posts/dev/arduino-esp32-disabling-the-task-watchdog/</guid><description>Recently I’ve been playing around with ESP32’s multicore functionality and task pinning to specific cores. I was using AutoConnect to support WiFi connection without storing credentials in the code and provide OTA updates via the web UI. This was for a project that was going to control some CPU 4-pin PWM fans that are in</description><pubDate>Wed, 29 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently I’ve been playing around with ESP32’s multicore functionality and task pinning to specific cores.&lt;/p&gt;
&lt;p&gt;I was using &lt;a href=&quot;https://github.com/Hieromon/AutoConnect&quot;&gt;AutoConnect&lt;/a&gt; to support WiFi connection without storing credentials in the code and provide OTA updates via the web UI.&lt;/p&gt;
&lt;p&gt;This was for a project that was going to control some CPU 4-pin PWM fans that are in my server closet, to cool the air inside. For that I wanted to split the logic in two tasks.&lt;/p&gt;
&lt;p&gt;One task to handle API’s, sensor reading, updates, WiFi, etc. and one task to handle the interrupt and PWM control of the fans.&lt;/p&gt;
&lt;p&gt;All was good, tasks were created, but when running the code, if I get the ESP32 in the mode where you need to connect to it to tell it to connect to your WiFi network, it started exhibiting a strange behavior – it started to reset the controller every few seconds and I couldn’t make the connection work.&lt;/p&gt;
&lt;p&gt;That was annoying time, having to unmount the controller from it’s place and connect it to USB to flash a new firmware.&lt;/p&gt;
&lt;p&gt;After doing the above I noticed that the error was coming from the watchdog:&lt;/p&gt;
&lt;p&gt;Task watchdog got triggered. The following tasks did not feed the watchdog in time:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IDLE (CPU 1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Tasks currently running:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CPU 0: ManageTask&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CPU 1: ControllerTask&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Looking around, it seems that this is triggered by the ESP32’s Task Watchdog, which makes sure the tasks get their turn to execute on the CPU.&lt;/p&gt;
&lt;p&gt;And it also seemed that AutoConnect wasn’t very flexible when working in a Task context, compared to running outside of one, directly with all the other code and functionality.&lt;/p&gt;
&lt;p&gt;Digging around a bit and trying different things, it seems that the easiest way to get oneself out of this situation is to just disable the watchdog and hope that things get executed in time 🙂 The task is not mission-critical, so it’s fine to wait more time for it to complete what it’s doing.&lt;/p&gt;
&lt;p&gt;To disable the watchdog, you need to do two things:&lt;/p&gt;
&lt;p&gt;First is to Include the &lt;code&gt;esp_task_wdt.h&lt;/code&gt; header. To do that, add &lt;code&gt;#include &amp;#x3C;esp_task_wdt.h&gt;&lt;/code&gt; to your include section&lt;/p&gt;
&lt;p&gt;Second, make the watchdog not reset the controller and wait more time. To do this, you need to add &lt;code&gt;esp_task_wdt_init(30, false);&lt;/code&gt; at the start of your Task code.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; manage_core_task&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;pv_parameters&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    esp_task_wdt_init&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // .... rest of the code ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will set the watchdog timeout to 30 &lt;strong&gt;SECONDS&lt;/strong&gt; and disable the controller reset if it’s triggered.&lt;/p&gt;
&lt;p&gt;If you want to have the controller still reset after the watchdog is triggered, change the second parameter of the function call from &lt;code&gt;false&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;</content:encoded><category>dev</category><category>Uncategorized</category><category>arduino</category><category>code</category><category>esp32</category><category>espressif</category><category>multi-core</category><category>multi-threading</category></item><item><title>🌼 &amp; 🐝</title><link>https://bisko.be/posts/blog/%F0%9F%8C%BC-%F0%9F%90%9D/</link><guid isPermaLink="true">https://bisko.be/posts/blog/%F0%9F%8C%BC-%F0%9F%90%9D/</guid><pubDate>Tue, 14 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1024&quot; height=&quot;768&quot; src=&quot;/_astro/image-1-c44a4a22.DM-UJBpr_ZsDCIE.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Uncategorized</category><category>bee</category><category>bees</category><category>flower</category><category>flowers</category></item><item><title>When travel needs a break from travel</title><link>https://bisko.be/posts/blog/when-travel-needs-a-break-from-travel/</link><guid isPermaLink="true">https://bisko.be/posts/blog/when-travel-needs-a-break-from-travel/</guid><description>When a kid feels the travel cases need rest.</description><pubDate>Sat, 14 Mar 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1024&quot; height=&quot;768&quot; src=&quot;/_astro/image-ef37b29d.BszBkRqS_1jMq5e.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;When a kid feels the travel cases need rest.&lt;/p&gt;</content:encoded><category>blog</category><category>Uncategorized</category><category>fun</category><category>travel</category></item><item><title>Graffiti around the world: Dublin</title><link>https://bisko.be/posts/blog/graffiti-around-the-world-dublin/</link><guid isPermaLink="true">https://bisko.be/posts/blog/graffiti-around-the-world-dublin/</guid><description>A few months back we went to Dublin on a trip and I was surprised with how many good graffiti artists are out there. Here are a few.</description><pubDate>Fri, 14 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A few months back we went to Dublin on a trip and I was surprised with how many good graffiti artists are out there.&lt;/p&gt;
&lt;p&gt;Here are a few.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_7482-63b60082.Bxx3TjUc_1oK5zc.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_7716-cf4a09eb.BXnFmORL_Zwb0W.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_7465-a1ef02f7.dem_I3k3_1u9UWt.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_7670-a65a7a2d.6pMYI6Bw_Z15AP4O.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_7672-dbb3a83b.DFWmxWvS_ZOjwzR.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_7362-681994c0.Cob4Td7H_2gJf3X.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>blog</category><category>Graffiti</category><category>Dublin</category><category>Ireland</category><category>Photography</category><category>travel</category></item><item><title>Setting up a YubiKey for Git commit signing</title><link>https://bisko.be/posts/dev/setting-up-a-yubikey-for-git-commit-signing/</link><guid isPermaLink="true">https://bisko.be/posts/dev/setting-up-a-yubikey-for-git-commit-signing/</guid><description>I’ve been using a YubiKey as a 2-Factor Authentication key and to sign my Git commits. Until a few days ago I’ve been using a YubiKey 4. Since my current computer doesn’t have any USB-A ports, I’ve been juggling a USB-A-to-USB-C adapters in my backpack and using the key has been a hassle for the</description><pubDate>Wed, 08 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been using a YubiKey as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Multi-factor_authentication&quot;&gt;2-Factor Authentication&lt;/a&gt; key and to sign my Git commits. Until a few days ago I’ve been using a YubiKey 4. Since my current computer doesn’t have any USB-A ports, I’ve been juggling a USB-A-to-USB-C adapters in my backpack and using the key has been a hassle for the last year. That’s why I decided it’s time to move to my “new” YubiKey 5C to gain the benefit of not having to juggle those adapters.&lt;/p&gt;
&lt;p&gt;I’ve actually had the key for a while, as I ordered it together with a replacement YubiKey 4 that I got because of the &lt;a href=&quot;https://www.yubico.com/2017/10/infineon-rsa-key-generation-issue/&quot;&gt;Infineon TPM&lt;/a&gt; issue they identified, but only now I decided it’s time to move to the new key.&lt;/p&gt;
&lt;p&gt;The other reason to do it now is because my old GPG keys expired and I had to reissue them, so I can use the key to sign my Git commits.&lt;/p&gt;
&lt;h3 id=&quot;gpg-madness&quot;&gt;GPG madness&lt;/h3&gt;
&lt;p&gt;If you’ve dealt with GPG keys in the past (or currently) you know that it can be pretty hard to get it up and running properly and safely for someone who’s never done it before. Keeping master keys offline, shuffling public keys, reissuing keys after they expire, possibly signing them with previous keys to verify them, revoking keys… It’s not easy to follow the best practices even in theory. When it comes to following them in practice, things get extremely complicated.&lt;/p&gt;
&lt;p&gt;Most tutorials online refer to using the CLI to generate your keys, navigating menus with a non-common design pattern and are general pain to get them up and running. Most tutorials say use an offline machine like a Raspberry PI and/or generate the master keys and sub-keys while offline and keep the master key off your computer.&lt;/p&gt;
&lt;p&gt;🤯&lt;/p&gt;
&lt;p&gt;I’ve been dealing with this each start of January for the past almost 4 years. I dread the moment when I get the following error, noting that my signing keys have expired.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;error: gpg failed to sign the data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fatal: failed to write commit object&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This year I decided it’s time to try to make this process much easier and to use the in-built certificate generation and avoid the whole hassle with dealing with GPG key generations and such.&lt;/p&gt;
&lt;h3 id=&quot;yubikey-on-key-keys-generation&quot;&gt;YubiKey on-key keys generation&lt;/h3&gt;
&lt;p&gt;With this we still have to use the CLI UI, but it’s a bit more obvious as it has fewer steps.&lt;/p&gt;
&lt;p&gt;First we have to set up our card/device.&lt;/p&gt;
&lt;h3 id=&quot;carddevice-setup&quot;&gt;Card/device setup&lt;/h3&gt;
&lt;p&gt;Run &lt;code&gt;gpg --card-status&lt;/code&gt; in the terminal and you should see something like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Reader ………..: Yubico Yubikey 4 OTP U2F CCID&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Application ID …: &amp;#x3C;Serial number&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Version ……….: 2.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Manufacturer …..: Yubico&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Serial number ….: &amp;#x3C;Device serial number&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Name of cardholder: unspecified&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Language prefs …: en&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Sex …………..: unspecified&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;URL of public key : \[not set\]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Login data …….: &amp;#x3C;e-mail or nothing&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Signature PIN ….: not forced&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Key attributes …: rsa4096 rsa4096 rsa4096&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Max. PIN lengths .: 127 127 127&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PIN retry counter : 3 0 3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Signature counter : 9&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you see something similar and no errors show up, you should be fine to continue.&lt;/p&gt;
&lt;p&gt;Run &lt;code&gt;gpg --card-edit&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You will land in a CLI UI, showing the same information at the start and then a command prompt at the bottom &lt;code&gt;gpg/card&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Type &lt;code&gt;admin&lt;/code&gt; and press return/enter.&lt;/p&gt;
&lt;p&gt;You can now type &lt;code&gt;help&lt;/code&gt; to figure out how to change the owner information and PINs for the card.&lt;/p&gt;
&lt;p&gt;One thing that you &lt;strong&gt;&lt;em&gt;MUST&lt;/em&gt;&lt;/strong&gt; do is change the default PINs for the card. There are two of those. The first one is the PIN key you use to access the keys on the card. The second one is the “Admin” PIN or PUK (Personal Unblocking Code).&lt;/p&gt;
&lt;p&gt;To do this type &lt;code&gt;passwd&lt;/code&gt; and you will see a menu:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;gpg/card&gt; passwd  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;gpg: OpenPGP card no. &amp;#x3C;Serial number&gt; detected&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1 - change PIN  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2 - unblock PIN  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3 - change Admin PIN  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4 - set the Reset Code  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Q - quit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Type &lt;code&gt;1&lt;/code&gt; and follow the prompts to update your pin. The default PIN is &lt;code&gt;123456&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After completing that, choose &lt;code&gt;3&lt;/code&gt; to change the Admin PIN. The default is &lt;code&gt;12345678&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After having both pins changed, go back to the main menu to finish updating the key information.&lt;/p&gt;
&lt;p&gt;The commands you can use are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt; – to change the cardholder name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;login&lt;/code&gt; – to change the cardholder e-mail address or login&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After that we can move on to the actual key generation.&lt;/p&gt;
&lt;h3 id=&quot;key-generation&quot;&gt;Key generation&lt;/h3&gt;
&lt;p&gt;Now it’s time to actually generate the keys.&lt;/p&gt;
&lt;p&gt;To do that, type &lt;code&gt;generate&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You will be asked &lt;code&gt;Make off-card backup of encryption key? (Y/n)&lt;/code&gt;, but as mentioned in YubiKey’s documentation, this is only a shim backup and it will not create a full backup of the secret keys, so it doesn’t matter if you reply &lt;code&gt;Yes&lt;/code&gt; or &lt;code&gt;No&lt;/code&gt;. I reply with &lt;code&gt;No(n)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If there are stored keys on the card you will be asked if you want to replace them:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;gpg: Note: keys are already stored on the card!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Replace existing keys? (y/N)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Make sure you’re not going to replace something important that you don’t have backup of and continue with &lt;code&gt;Y&lt;/code&gt;. If there’s something important, better to quit the whole process with &lt;code&gt;Ctrl+C&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You will be asked for your card PIN you set earlier.&lt;/p&gt;
&lt;p&gt;Then you will have to chose how long the keys will be valid for:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Please specify how long the key should be valid.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        0 = key does not expire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      &amp;#x3C;n&gt; = key expires in n days&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     &amp;#x3C;n&gt;w = key expires in n weeks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     &amp;#x3C;n&gt;m = key expires in n months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     &amp;#x3C;n&gt;y = key expires in n years&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; Key is valid for? (0)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you want the keys to be valid for only 1 year, type &lt;code&gt;1y&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You will be asked to confirm the expiration date. Check if everything is correct and confirm.&lt;/p&gt;
&lt;p&gt;Then you will be asked to enter information about the key owner:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Is this correct? (y/N) y&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;GnuPG needs to construct a user ID to identify your key.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Real name: &amp;#x3C;Your name&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Email address: &amp;#x3C;Your e-mail&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Comment: &amp;#x3C;Comment is optional&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; You selected this USER-ID:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     &quot;&amp;#x3C;Your name&gt; &amp;#x3C;comment&gt; &amp;#x3C;your e-mail&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Type `O` to confirm if everything seems correct.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then you will be asked for your Admin PIN or PUK. This is required as it will perform a write action on the card.&lt;/p&gt;
&lt;p&gt;Then if everything is correct, the YubiKey will start blinking and continue to do so for a while (for me it takes about five minutes or so).&lt;/p&gt;
&lt;p&gt;After it’s done you will see the following message&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;gpg: key &amp;#x3C;Short ID&gt; marked as ultimately trusted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;gpg: revocation certificate stored as &apos;/Users/bisko/.gnupg/openpgp-revocs.d/&amp;#x3C;LONG ID&gt;.rev&apos; public and secret key created and signed.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Take a note of the &lt;code&gt;&amp;#x3C;Short ID&gt;&lt;/code&gt; as we’ll be using this later.&lt;/p&gt;
&lt;p&gt;At this point you can quit the GPG prompt with &lt;code&gt;quit&lt;/code&gt; or &lt;code&gt;Ctrl+C&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now it’s time to save the public key, so we can reuse the key on another computer.&lt;/p&gt;
&lt;p&gt;To do so, run the following command:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;gpg&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --armor&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Short&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; I&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Short&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; I&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.asc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will export the public key to a file named &lt;code&gt;&amp;#x3C;Short ID&gt;.asc&lt;/code&gt;. This will be used in the future if you want to be able to use the YubiKey on another computer or if you lose your GPG configuration.&lt;/p&gt;
&lt;p&gt;To restore the public key in your keyring, you need to do:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;gpg&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --import&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Short&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; I&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.asc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;gpg:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Short&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; I&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; public&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;Your Name &amp;#x3C;your@email&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; imported&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;gpg:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Total&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; number&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; processed:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;gpg:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; imported:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;A very important note here.&lt;/em&gt;&lt;/strong&gt; If this is a new GPG install or another computer, GPG won’t recognize the keys on the card by itself. You need to run &lt;code&gt;gpg --card-status&lt;/code&gt; so it can read the card and pick up the keys on the card.&lt;/p&gt;
&lt;h3 id=&quot;setting-up-git-for-signing&quot;&gt;Setting up Git for signing&lt;/h3&gt;
&lt;p&gt;To set up Git to sign your commits you need to add the following to your &lt;code&gt;~/.gitconfig&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Under the &lt;code&gt;[user]&lt;/code&gt; section, you need to add (or update) the following line:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;signingkey = 0x&amp;#x3C;Short ID&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then if you want to sign all your commits, add the following at the end of the file:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ini&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;[gpg]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  program&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = /usr/local/bin/gpg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;[commit]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  gpgsign&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; = true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will make Git sign all your commits.&lt;/p&gt;
&lt;p&gt;To set up GitHub, you need to add your public key to your profile. To do so, go to &lt;code&gt;GitHub -&gt; Settings -&gt; SSH and GPG keys -&gt; New GPG key&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Then you will see a text box, where you need to paste the whole content of the &lt;code&gt;&amp;#x3C;Short ID&gt;.asc&lt;/code&gt; file we generated above.&lt;/p&gt;
&lt;p&gt;If you want to copy the contents of the file (on macOS) you can do:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cat &amp;#x3C;Short ID&gt;.asc | pbcopy&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will copy the contents of the whole file in the clipboard.&lt;/p&gt;
&lt;p&gt;Paste that into the text box on GitHub and click the &lt;code&gt;Add GPG key&lt;/code&gt; button.&lt;/p&gt;
&lt;p&gt;After that you can try to commit and push to GitHub and you should see the pretty &lt;code&gt;Verified&lt;/code&gt; label.&lt;/p&gt;
&lt;h3 id=&quot;debugging&quot;&gt;Debugging&lt;/h3&gt;
&lt;p&gt;Sometimes things don’t work outright. To be able to gather more information you can try the following:&lt;/p&gt;
&lt;h3 id=&quot;signing-with-gpg&quot;&gt;Signing with GPG&lt;/h3&gt;
&lt;p&gt;First try to sign something with the key:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gpg -s &amp;#x3C;file&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If this fails, try to figure out why it fails, I’m no expert to help there.&lt;/p&gt;
&lt;p&gt;Check out Git’s outputGIT_TRACE=1 git commit -am “test”&lt;/p&gt;
&lt;p&gt;This would give you the exact things Git does while it tries to perform the commit and sign it. It would give you a hint why the signing might fail.&lt;/p&gt;
&lt;p&gt;From this you can also see that Git executes the following command:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;/usr/local/bin/gpg&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status-fd=2&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -bsau&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Key&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; I&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can try running this manually to see if it will give you a better error.&lt;/p&gt;</content:encoded><category>dev</category><category>Snippets</category><category>Technology</category><category>git</category><category>github</category><category>gpg</category><category>key</category><category>public-key</category><category>secrets</category><category>sign</category><category>yubikey</category></item><item><title>e1000e  eth0: Detected Hardware Unit Hang</title><link>https://bisko.be/posts/dev/e1000e-device-id-eth0-detected-hardware-unit-hang/</link><guid isPermaLink="true">https://bisko.be/posts/dev/e1000e-device-id-eth0-detected-hardware-unit-hang/</guid><description>Recently my home server and VM host randomly started losing network connectivity. On the outside it seems that it was still working, but I was unable to access it in any remote way. The ethernet adapter seemed to be on, according to the switch, so the issue must have been somewhere in software. It wouldn’t</description><pubDate>Wed, 18 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently my home server and VM host randomly started losing network connectivity. On the outside it seems that it was still working, but I was unable to access it in any remote way. The ethernet adapter seemed to be on, according to the switch, so the issue must have been somewhere in software.&lt;/p&gt;
&lt;p&gt;It wouldn’t be the first time a driver would be the issue of hanging network connection. In the past I’ve been burned by buggy WiFi drivers on Linux and Windows computers.&lt;/p&gt;
&lt;p&gt;After digging a bit into the system logs, I stumbled on the following:&lt;/p&gt;
&lt;p&gt;vmhost kernel: e1000e 0000:00:1f.6 eth0: Detected Hardware Unit Hang:&lt;br&gt;
vmhost kernel:   TDH                  &amp;#x3C;0&gt;&lt;br&gt;
vmhost kernel:   TDT                  &amp;#x3C;1&gt;&lt;br&gt;
vmhost kernel:   next_to_use          &amp;#x3C;1&gt;&lt;br&gt;
vmhost kernel:   next_to_clean        &amp;#x3C;0&gt;&lt;br&gt;
vmhost kernel: buffer_info[next_to_clean]:&lt;br&gt;
vmhost kernel:   time_stamp           &amp;#x3C;10fbc2f81&gt;&lt;br&gt;
vmhost kernel:   next_to_watch        &amp;#x3C;0&gt;&lt;br&gt;
vmhost kernel:   jiffies              &amp;#x3C;10fbc3871&gt;&lt;br&gt;
vmhost kernel:   next_to_watch.status &amp;#x3C;0&gt;&lt;br&gt;
vmhost kernel: MAC Status             &amp;#x3C;40080083&gt;&lt;br&gt;
vmhost kernel: PHY Status             &amp;#x3C;796d&gt;&lt;br&gt;
vmhost kernel: PHY 1000BASE-T Status  &amp;#x3C;7800&gt;&lt;br&gt;
vmhost kernel: PHY Extended Status    &amp;#x3C;3000&gt;&lt;br&gt;
vmhost kernel: PCI Status             &amp;#x3C;10&gt;&lt;br&gt;
vmhost kernel: e1000e 0000:00:1f.6 eth0: Reset adapter unexpectedly&lt;br&gt;
vmhost kernel: vmbr0: port 1(eth0) entered disabled state&lt;/p&gt;
&lt;p&gt;Then it would reset the network adapter and after a bit do it again, until the machine completely goes offline.&lt;/p&gt;
&lt;p&gt;Looking for answers online I stumbled upon &lt;a href=&quot;https://serverfault.com/questions/616485/e1000e-reset-adapter-unexpectedly-detected-hardware-unit-hang&quot;&gt;this ServerFault thread&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cause&lt;/p&gt;
&lt;p&gt;Reading upon different sources and bug reports list, it seems the best way to reproduce the issue is to have high-bandwidth situation on the device, i.e. streaming large amounts of data that would saturate the interface.&lt;/p&gt;
&lt;p&gt;In my case it was usually happening when I’m streaming media from the local Plex server to a device. Due to the way the network is set up, the Windows VM that runs the Plex instance has to fetch the media file from a NFS network share on a separate device, transcode it in the VM and then send it to the playback device.&lt;/p&gt;
&lt;p&gt;This adds up to a lot of network traffic, usually ~40-100mbit/s, depending on the device that plays the media file and the source media file quality.&lt;/p&gt;
&lt;p&gt;The same issue manifested itself when streaming games via Steam Link to our Apple TV. The connection is wired, but it’s not uncommon for the network to drop. I think it’s correlated with the same issue, but will keep an eye for it to see if it will happen in the future after the fix.&lt;/p&gt;
&lt;p&gt;Possible fix&lt;/p&gt;
&lt;p&gt;Seems a possible fix would be to disable &lt;strong&gt;GSO&lt;/strong&gt; &lt;em&gt;(Generic Segmentation Offload)&lt;/em&gt;, &lt;strong&gt;TSO&lt;/strong&gt; &lt;em&gt;(TCP Segmentation Offload)&lt;/em&gt; and &lt;strong&gt;GRO&lt;/strong&gt; &lt;em&gt;(Generic Receive Offload)&lt;/em&gt; on the network interface*:&lt;/p&gt;
&lt;p&gt;ethtool -K eth0 gso off gro off tso off&lt;/p&gt;
&lt;p&gt;I have applied this to my setup and I’m waiting to see if this will actually solve the issue in the long run.&lt;/p&gt;
&lt;p&gt;Footnotes&lt;/p&gt;
&lt;p&gt;* These options are related to offloading package segmentation to the network interface controller to reduce CPU usage on the machine. More details can be found in &lt;a href=&quot;https://en.wikipedia.org/wiki/Large_send_offload&quot;&gt;this Wikipedia article&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>dev</category><category>Homelab</category><category>bandwidth</category><category>bug</category><category>network</category><category>nic</category><category>plex</category><category>proxmox</category><category>steam</category><category>streaming</category></item><item><title>The pumpkin</title><link>https://bisko.be/posts/blog/the-pumpkin/</link><guid isPermaLink="true">https://bisko.be/posts/blog/the-pumpkin/</guid><description>Photo taken at Simple Food Punkt</description><pubDate>Sun, 03 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;A carved pumpkin in a pan? Not sure.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_8045-99331106.C4JicSzy_20be15.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Photo taken at &lt;a href=&quot;https://www.facebook.com/Simple.Food.Punkt/&quot;&gt;Simple Food Punkt&lt;/a&gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Uncategorized</category><category>fun</category><category>Halloween</category><category>Orange</category><category>pumpkin</category></item><item><title>Snippets: Running a local/private swarm Docker image registry</title><link>https://bisko.be/posts/dev/snippets-running-a-local-private-swarm-docker-image-registry/</link><guid isPermaLink="true">https://bisko.be/posts/dev/snippets-running-a-local-private-swarm-docker-image-registry/</guid><description>Today I was trying to generate a Docker image from a Node.js project and I wanted to deploy it on my local test swarm. Unfortunately if one builds a local Docker image, this image is stored and accessible only to the node it was created on and the other swarm nodes can’t access it. The</description><pubDate>Fri, 11 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today I was trying to generate a Docker image from a Node.js project and I wanted to deploy it on my local test swarm.&lt;/p&gt;
&lt;p&gt;Unfortunately if one builds a local Docker image, this image is stored and accessible only to the node it was created on and the other swarm nodes can’t access it.&lt;/p&gt;
&lt;p&gt;The way to fix this is to push the image to a Docker registry where it can be pulled from by all the nodes in the swarm.&lt;/p&gt;
&lt;p&gt;Creating the registry&lt;/p&gt;
&lt;p&gt;To instantiate a registry service in the swarm, run:&lt;/p&gt;
&lt;p&gt;docker service create —name registry —publish 5000:5000 registry:latest&lt;/p&gt;
&lt;p&gt;This will create the registry service and run it in the swarm, making it accessible to all the nodes in the swarm.&lt;/p&gt;
&lt;p&gt;Pushing an image to the registry&lt;/p&gt;
&lt;p&gt;To push an image to the registry, you have to do two things – tag and then push the image.&lt;/p&gt;
&lt;p&gt;Here’s an example on how to build and tag the image in one go:&lt;/p&gt;
&lt;p&gt;docker build . -t localhost.localdomain:5000/&lt;image-name&gt;:latest&lt;/image-name&gt;&lt;/p&gt;
&lt;p&gt;And how to push it to the registry:&lt;/p&gt;
&lt;p&gt;docker push localhost.localdomain:5000/&lt;image-name&gt;:latestUsing the image in a service/container/etc&lt;/image-name&gt;&lt;/p&gt;
&lt;p&gt;To use the image in a service or a container, you specify the full path from above, i.e. &lt;code&gt;localhost.localdomain:5000/&amp;#x3C;image-name&gt;:latest&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Swarm nodes will have access to the image and will be able to pull and run it.&lt;/p&gt;
&lt;p&gt;Important note about the registry address&lt;/p&gt;
&lt;p&gt;In most tutorials online, the registry URL is given as &lt;code&gt;localhost:5000&lt;/code&gt;. Unfortunately this doesn’t work and usually it times out when trying to use it. If we change this to &lt;code&gt;localhost.localdomain&lt;/code&gt; it will work!&lt;/p&gt;
&lt;p&gt;Not sure why this happens when both &lt;code&gt;localhost&lt;/code&gt; and &lt;code&gt;localhost.localdomain&lt;/code&gt; resolve to &lt;code&gt;127.0.0.1&lt;/code&gt;.&lt;/p&gt;</content:encoded><category>dev</category><category>Homelab</category><category>Snippets</category><category>Technology</category><category>docker</category><category>docker-swarm</category><category>registry</category><category>swarm</category></item><item><title>Timelapse: Taxiing and takeoff from Orlando International Airport</title><link>https://bisko.be/posts/blog/timelapse-taxiing-and-takeoff-from-orlando-international-airport/</link><guid isPermaLink="true">https://bisko.be/posts/blog/timelapse-taxiing-and-takeoff-from-orlando-international-airport/</guid><description>This was the start of the return trip home, after our amazing Automattic Grand Meetup for 2019 concluded. Good times with awesome people! 🤩</description><pubDate>Tue, 01 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shot on iPhone X from the plane window&lt;/p&gt;
&lt;p&gt;This was the start of the return trip home, after our amazing Automattic Grand Meetup for 2019 concluded. Good times with awesome people! 🤩&lt;/p&gt;</content:encoded><category>blog</category><category>Adventures</category><category>Photography</category><category>travel</category><category>Airplane</category><category>Flying</category><category>Orlando_FL</category><category>Timelapse</category></item><item><title>Timelapse: Landing in foggy Frankfurt</title><link>https://bisko.be/posts/blog/timelapse-landing-in-foggy-frankfurt/</link><guid isPermaLink="true">https://bisko.be/posts/blog/timelapse-landing-in-foggy-frankfurt/</guid><description>Frankfurt was one of the stops on the way to our annual Automattic Grand Meetup. This day was pretty foggy and the landing was pretty interesting experience. Flying over a woolen cloud blanket and then just like that, landed on the runway! Here’s a bonus photo of what was visible from the city during the</description><pubDate>Tue, 10 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Shot on iPhone X from the plane window&lt;/p&gt;
&lt;p&gt;Frankfurt was one of the stops on the way to our annual Automattic Grand Meetup. This day was pretty foggy and the landing was pretty interesting experience. Flying over a woolen cloud blanket and then just like that, landed on the runway!&lt;/p&gt;
&lt;p&gt;Here’s a bonus photo of what was visible from the city during the descent.&lt;/p&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_6547-fa702d62.ByzaITRP_2k3iLQ.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Adventures</category><category>Photography</category><category>travel</category><category>Airplane</category><category>Frankfurt</category><category>Landing</category><category>Timelapse</category></item><item><title>The Avocado: Sprouting!</title><link>https://bisko.be/posts/blog/the-avocado-sprouting/</link><guid isPermaLink="true">https://bisko.be/posts/blog/the-avocado-sprouting/</guid><description>This is our first successful attempt at sprouting an avocado!</description><pubDate>Sat, 03 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_5899-f2ad7864.YgnFMYgT_1cfcKJ.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;This is our first successful attempt at sprouting an avocado!&lt;/p&gt;</content:encoded><category>blog</category><category>The Avocado</category><category>Avocado</category><category>Gardening</category><category>Plant</category><category>Sprout</category></item><item><title>Snippets: Map Apple Keyboard Section sign key to back quote ( § to ` )</title><link>https://bisko.be/posts/dev/snippets-map-apple-keyboard-section-sign-key-to-back-quote-%C2%A7-to/</link><guid isPermaLink="true">https://bisko.be/posts/dev/snippets-map-apple-keyboard-section-sign-key-to-back-quote-%C2%A7-to/</guid><description>I’ve been using the Apple keyboards for a while, but when you live in Europe it’s not easy to source the US layout ones that I’m used to. On macOS there’s an “easy” way to remap the keyboard with just a terminal command: watch -n1 -x hidutil property -m ‘{“ProductID”:592, “VendorID”:1452}’ –set ‘{“UserKeyMapping”:[{“HIDKeyboardModifierMappingSrc”:0x700000035,”HIDKeyboardModifierMappingDst”:0x700000064}]}’ What this</description><pubDate>Wed, 31 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been using the Apple keyboards for a while, but when you live in Europe it’s not easy to source the US layout ones that I’m used to.&lt;/p&gt;
&lt;p&gt;On macOS there’s an “easy” way to remap the keyboard with just a terminal command:&lt;/p&gt;
&lt;p&gt;watch -n1 -x hidutil property -m ’{“ProductID”:592, “VendorID”:1452}’ —set ’{“UserKeyMapping”:[{“HIDKeyboardModifierMappingSrc”:0x700000035,“HIDKeyboardModifierMappingDst”:0x700000064}]}’&lt;/p&gt;
&lt;p&gt;What this piece of code does is to change the mapping of the Section key ( § ) to write out the backquote/tilde ( &lt;code&gt;`/ ~&lt;/code&gt; ) key.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;watch -n1 -x&lt;/code&gt; part does this every second as sometimes macOS likes to lose the setting, usually when the computer goes to sleep or when the keyboard is unplugged and plugged again.&lt;/p&gt;
&lt;p&gt;Please note that on some versions of macOS the &lt;code&gt;watch&lt;/code&gt; utility is not installed and needs to be pulled through something like &lt;a href=&quot;https://brew.sh/&quot;&gt;Homebrew&lt;/a&gt; or &lt;a href=&quot;https://www.macports.org/&quot;&gt;MacPorts&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The above code works with the Apple External keyboard with USB and European layout with Bulgarian letters. It might need a slight adjustment to the hex values for keys for other types of keyboards.&lt;/p&gt;
&lt;p&gt;A variation of the command works well for the same type of keyboard on the MacBook Pro itself. You just need to swap the position of the &lt;code&gt;0x700000035&lt;/code&gt; and &lt;code&gt;0x700000064&lt;/code&gt; values.&lt;/p&gt;
&lt;p&gt;I’ve been thinking of writing a tool to automatically do that for me, but at this point I think it’s more worth it to invest and get a new keyboard with the proper layout 🙂&lt;/p&gt;</content:encoded><category>dev</category><category>Uncategorized</category></item><item><title>Purple Flowers</title><link>https://bisko.be/posts/blog/purple-flowers/</link><guid isPermaLink="true">https://bisko.be/posts/blog/purple-flowers/</guid><description>Seen on a trip to Borovets, situated in Rila mountain.</description><pubDate>Fri, 28 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_5256-c4ebab4e.B9-0LH79_ZcCswB.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Seen on a trip to &lt;a href=&quot;https://en.wikipedia.org/wiki/Borovets&quot;&gt;Borovets&lt;/a&gt;, situated in &lt;a href=&quot;https://en.wikipedia.org/wiki/Rila&quot;&gt;Rila mountain&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>blog</category><category>Photography</category><category>flower</category><category>flowers</category><category>purple</category><category>sun</category></item><item><title>Retro Museum</title><link>https://bisko.be/posts/blog/retro-museum/</link><guid isPermaLink="true">https://bisko.be/posts/blog/retro-museum/</guid><description>During our summer vacation on the Black Sea, we did a quick trip to Varna as we were at a resort close by. There we stumbled upon a very interesting Retro museum. I was very pleasantly surprised to find almost all the different things that I used when I was young. So many good memories</description><pubDate>Tue, 25 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_5095-fff7354b.B87XGoKK_spbqC.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_5094-03b89044.PJIIKBDz_ZrumKn.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_5092-fe5af8eb.D8cpVmlj_Z2gS5rt.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_5091-0793f161.ByQJsy2P_Z1u1ItY.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_5090-2e051edf.CX0aDctc_Zqdst9.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_5089-f1b68d98.DkuBHl-h_Zx4MsX.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;/_astro/img_5088-53896321.yYoU5Fok_Z15PUQh.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_5086-09a7e3df.D4AuUo7d_Z16eSYx.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_5085-b5ba1d92.CTJokrFJ_Z8Erqh.webp&quot; &gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The photos were captured in the &lt;a href=&quot;https://www.tripadvisor.com/Attraction_Review-g295392-d8441907-Reviews-The_Retro_Museum_In_Varna-Varna_Varna_Province.html&quot;&gt;Retro Museum, situated in Varna, Bulgaria&lt;/a&gt; (link from TripAdvisor, as the site of the museum seems to be dead).&lt;/p&gt;
&lt;p&gt;During our summer vacation on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Black_Sea&quot;&gt;Black Sea&lt;/a&gt;, we did a quick trip to &lt;a href=&quot;https://en.wikipedia.org/wiki/Varna&quot;&gt;Varna&lt;/a&gt; as we were at a resort close by. There we stumbled upon a very interesting Retro museum.&lt;/p&gt;
&lt;p&gt;I was very pleasantly surprised to find almost all the different things that I used when I was young. So many good memories from my childhood came up while visiting.&lt;/p&gt;
&lt;p&gt;Definitely a good place to visit when in Varna!&lt;/p&gt;</content:encoded><category>blog</category><category>Adventures</category><category>memories</category><category>museum</category><category>retro</category><category>Varna</category></item><item><title>Sea of Daisies</title><link>https://bisko.be/posts/blog/sea-of-daisies/</link><guid isPermaLink="true">https://bisko.be/posts/blog/sea-of-daisies/</guid><description>Photo taken near Chorul.</description><pubDate>Fri, 31 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_4633-ced55558.CA2pVc_h_cVSP7.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Photo taken near &lt;a href=&quot;https://en.wikipedia.org/wiki/Chorul&quot;&gt;Chorul&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>blog</category><category>Adventures</category><category>Photography</category><category>daisy</category><category>flower</category><category>flowers</category></item><item><title>Timelapse(s): Trip to Montserrat</title><link>https://bisko.be/posts/blog/timelapses-trip-to-montserrat/</link><guid isPermaLink="true">https://bisko.be/posts/blog/timelapses-trip-to-montserrat/</guid><description>On our recent team meetup that we had in Barcelona, we went on a trip to Montserrat mountain. We picked a very cloudy day, but still the clouds were high enough that we managed to see the valley, before it started raining. Here are two timelapses from that trip:</description><pubDate>Wed, 08 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;On our recent team meetup that we had in Barcelona, we went on a trip to &lt;a href=&quot;https://en.wikipedia.org/wiki/Montserrat_(mountain)&quot;&gt;Montserrat mountain&lt;/a&gt;. We picked a very cloudy day, but still the clouds were high enough that we managed to see the valley, before it started raining.&lt;/p&gt;
&lt;p&gt;Here are two timelapses from that trip:&lt;/p&gt;
&lt;p&gt;Cloud magic!&lt;/p&gt;
&lt;p&gt;Trip down with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Aeri_de_Montserrat&quot;&gt;Aeri de Montserrat&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>blog</category><category>Adventures</category><category>travel</category><category>Barcelona</category><category>Montseratt</category><category>Spain</category><category>Timelapse</category></item><item><title>Timelapse: Landing at Barcelona airport</title><link>https://bisko.be/posts/blog/timelapse-landing-at-barcelona-airport/</link><guid isPermaLink="true">https://bisko.be/posts/blog/timelapse-landing-at-barcelona-airport/</guid><pubDate>Sat, 04 May 2019 00:00:00 GMT</pubDate><content:encoded/><category>blog</category><category>Adventures</category><category>travel</category><category>Airplane</category><category>Barcelona</category><category>Landing</category><category>Spain</category><category>Timelapse</category></item><item><title>The Grey Cat</title><link>https://bisko.be/posts/blog/the-grey-cat/</link><guid isPermaLink="true">https://bisko.be/posts/blog/the-grey-cat/</guid><description>We found this fellow somewhere around home! Pretty one and loves treats!</description><pubDate>Thu, 21 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_1995-f9f8058b.DJx6IsPU_1JdhCg.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;We found this fellow somewhere around home! Pretty one and loves treats!&lt;/p&gt;</content:encoded><category>blog</category><category>Animals</category><category>Photography</category><category>cat</category><category>grey</category></item><item><title>Resetting/Restarting Apple TV remote</title><link>https://bisko.be/posts/dev/resetting-restarting-apple-tv-remote/</link><guid isPermaLink="true">https://bisko.be/posts/dev/resetting-restarting-apple-tv-remote/</guid><description>Last night during a guest visit, I managed to submerge our Apple TV remote under water. Lack of sleep and unstable glasses result in accidents. The remote was working well last night, but today it stopped working. Not responding to any actions. I tried bashing it in my hand, shaking water out of it. It</description><pubDate>Sun, 17 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Last night during a guest visit, I managed to submerge our Apple TV remote under water. Lack of sleep and unstable glasses result in accidents.&lt;/p&gt;
&lt;p&gt;The remote was working well last night, but today it stopped working. Not responding to any actions. I tried bashing it in my hand, shaking water out of it. It didn’t help at all.&lt;/p&gt;
&lt;p&gt;We thought that it’s gone and were looking for the rice pack in the cupboards.&lt;/p&gt;
&lt;p&gt;I went online mostly as a joke to see if I can try to “restart” it.&lt;/p&gt;
&lt;p&gt;A helpful guide pointed me to press and hold the Volume Up and Menu buttons for 2-3 seconds to reset the remote and get it into pairing mode.&lt;/p&gt;
&lt;p&gt;I was really surprised when &lt;strong&gt;it actually&lt;/strong&gt; &lt;strong&gt;worked&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;So if something seems fishy, try to reset the remote first. If it doesn’t work, then you can try the rice and hardware intervention.&lt;/p&gt;
&lt;p&gt;TL;DR;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hold Menu + Volume Up for 2-3 seconds&lt;/li&gt;
&lt;li&gt;Wait a few seconds&lt;/li&gt;
&lt;li&gt;Try to interact with the Apple TV&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>dev</category><category>Apple</category><category>Technology</category><category>AppleTV</category><category>Have you tried turning it off and on again?</category><category>remote</category><category>reset</category><category>restart</category></item><item><title>The old tram</title><link>https://bisko.be/posts/blog/the-old-tram/</link><guid isPermaLink="true">https://bisko.be/posts/blog/the-old-tram/</guid><description>View this post on Instagram A post shared by Biser Perchinkov (@biskobe) In the last days of 2018 we went to a secret party with some friends. The big surprise was where it was held! It was on one of the two oldest working trams in Bulgaria! It was built almost a century ago and</description><pubDate>Fri, 04 Jan 2019 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;p&gt;View this post on Instagram&lt;/p&gt;
&lt;p&gt;](&lt;a href=&quot;https://www.instagram.com/p/Br8XYN5j0z9/?utm_source=ig_embed&amp;#x26;utm_campaign=loading&quot;&gt;https://www.instagram.com/p/Br8XYN5j0z9/?utm_source=ig_embed&amp;#x26;utm_campaign=loading&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.instagram.com/p/Br8XYN5j0z9/?utm_source=ig_embed&amp;#x26;utm_campaign=loading&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.instagram.com/p/Br8XYN5j0z9/?utm_source=ig_embed&amp;#x26;utm_campaign=loading&quot;&gt;A post shared by Biser Perchinkov (@biskobe)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the last days of 2018 we went to a secret party with some friends.&lt;/p&gt;
&lt;p&gt;The big surprise was where it was held! It was on one of the two oldest working trams in Bulgaria!&lt;/p&gt;
&lt;p&gt;It was built almost a century ago and definitely brings you back to those times, even though it was modernized a bit with lights, heating and some music/media to allow tour guides to talk about sights along the way.&lt;/p&gt;
&lt;p&gt;I enjoyed it quite a lot as one of the organizers is working in the tram depot and we had a first row ticket to see how the tram driver operates it. We got a crash course on what all the levers do and got to ring the bell! And also Toma got the chance to try to get the tram running, but turns out one needs quite the strength to be able to operate it! Maybe in a few years 😝&lt;/p&gt;
&lt;p&gt;Passers by were also enjoying the sight as the retro trams are not an every day occasion here.&lt;/p&gt;</content:encoded><category>blog</category><category>Adventures</category><category>Winter</category><category>joy</category><category>machinery</category><category>party</category><category>tram</category><category>travel</category></item><item><title>Amazing game soundtracks – Stellaris</title><link>https://bisko.be/posts/blog/amazing-game-soundtracks-stellaris/</link><guid isPermaLink="true">https://bisko.be/posts/blog/amazing-game-soundtracks-stellaris/</guid><description>A while ago I got myself Stellaris and quickly lost some hours in it. Here I’m not going to talk about the game itself. It has already been covered quite a lot in reviews, let’s plays and so on. Because I can’t explain how awesome it is in words, I’m just going to say – listen</description><pubDate>Mon, 02 Apr 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A while ago I got myself &lt;a href=&quot;https://en.wikipedia.org/wiki/Stellaris_(video_game)&quot;&gt;Stellaris&lt;/a&gt; and quickly lost some hours in it. Here I’m not going to talk about the game itself. It has already been covered quite a lot in reviews, let’s plays and so on.&lt;/p&gt;
&lt;p&gt;Because I can’t explain how awesome it is in words, I’m just going to say – listen to it. Close your eyes, imagine yourself on an adventure in the deep space or somewhere where your mind takes you and enjoy it.&lt;/p&gt;
&lt;p&gt;( or if you don’t have Spotify, try &lt;a href=&quot;https://www.youtube.com/results?search_query=stellaris+soundtrack&quot;&gt;YouTube’s search results&lt;/a&gt; )&lt;/p&gt;</content:encoded><category>blog</category><category>Music</category><category>games</category><category>ost</category><category>soundtrack</category><category>stellaris</category></item><item><title>Diving back in memories: Of roses and bees</title><link>https://bisko.be/posts/blog/diving-back-in-memories-of-roses-and-bees/</link><guid isPermaLink="true">https://bisko.be/posts/blog/diving-back-in-memories-of-roses-and-bees/</guid><description>A few days ago I was digging through my photo collection and stumbled upon one of my favorite shots. It’s an interesting story how this photo came to be. My dad had bought a new digital camera, a Canon PowerShot A610, a few days before that. I was eager to try it, but he didn’t</description><pubDate>Sun, 10 Dec 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A few days ago I was digging through my photo collection and stumbled upon one of my favorite shots.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A bee exploring the rose&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2592&quot; height=&quot;1944&quot; src=&quot;/_astro/img_0350-258314a7.DVI6yd6N_6PkwW.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;It’s an interesting story how this photo came to be.&lt;/p&gt;
&lt;p&gt;My dad had bought a new digital camera, a Canon PowerShot A610, a few days before that. I was eager to try it, but he didn’t give me a chance to shoot a bit with it, because he was exploring and learning it inside out. After all it was our first “advanced” digital camera.&lt;/p&gt;
&lt;p&gt;On the day of the photo my dad and I went out to the store and he took the camera. I asked him to give it to me to carry around and to see if I can shoot something. While discussing if I was capable enough to carry the camera without breaking it, we had walked for 5-6 minutes and we were just passing by a rose bush and I saw some bees flying around it.&lt;/p&gt;
&lt;p&gt;By that time I knew that I wanted to take a photo of the lovely rose blossom that you can see above. I took the camera out, powered it on, waited for a bee to land on the blossom and I took the photo.&lt;/p&gt;
&lt;p&gt;And there it was. My very first photo with that camera.&lt;/p&gt;
&lt;p&gt;Still to this day, that photo remains one of my favorite ones.&lt;/p&gt;</content:encoded><category>blog</category><category>Photography</category><category>bee</category><category>bees</category><category>flower</category><category>nature</category><category>outside</category><category>rose</category></item><item><title>Dad things: Baby, you can’t pause an online game!</title><link>https://bisko.be/posts/blog/dad-things-baby-you-cant-pause-an-online-game/</link><guid isPermaLink="true">https://bisko.be/posts/blog/dad-things-baby-you-cant-pause-an-online-game/</guid><description>So… the circle is complete. Today, while enjoying the last few days of paternity leave, that the awesome Automattic allowed me to take, I decided to dive deep in the land of nostalgia and play some good old StarCraft. Sounds pretty normal, right? Why, yes, it is! Apart from having the baby in the office</description><pubDate>Tue, 05 Dec 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;So… the circle is complete.&lt;/p&gt;
&lt;p&gt;Today, while enjoying the last few days of paternity leave, that the awesome &lt;a href=&quot;https://automattic.com&quot;&gt;Automattic&lt;/a&gt; allowed me to take, I decided to dive deep in the land of nostalgia and play some good old StarCraft.&lt;/p&gt;
&lt;p&gt;Sounds pretty normal, right? Why, yes, it is! Apart from having the baby in the office with me, so I can look after him while mom is doing other things.&lt;/p&gt;
&lt;p&gt;Things were going great, baby was asleep, I found a fun game, started it and in the middle the baby woke up. All good. Comforted him for a bit, but he was fussy, so I left the game and focused on him. There was no way to focus on both the game and the baby at the same time.&lt;/p&gt;
&lt;p&gt;So while rocking the baby in my hands, talking sweet to him and trying to calm him down, I glanced at the monitor and saw several messages from the game creator saying:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Why join a game if you’re going to leave?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sent over and over again.&lt;/p&gt;
&lt;p&gt;At first I started replying that I had a baby on my hands, and I had to take care of him, but then I was hit with flashbacks to my earlier years when I raised my voice in angst to tell my mom that I can’t pause an online game.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Oh my god, mom, you can’t pause an online game!!!!1!1!1!!1!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At that moment I realized that I have to give up online games for a while.&lt;/p&gt;
&lt;p&gt;Oh well… ¯\_(ツ)_/¯&lt;/p&gt;
&lt;p&gt;At least now I can focus on going over the ever growing backlog of single player games. The Witcher 3 won’t finish by itself!&lt;/p&gt;</content:encoded><category>blog</category><category>Gaming</category><category>Parenting</category><category>baby</category></item><item><title>Graffiti around the world – Montréal</title><link>https://bisko.be/posts/blog/graffiti-around-the-world-montreal/</link><guid isPermaLink="true">https://bisko.be/posts/blog/graffiti-around-the-world-montreal/</guid><description>A few weeks back I was at a team meetup in Montréal and while walking along the streets I enjoyed the grafitti culture there quite a lot. I loved how colorful and/or playful they are compared to other places I’ve been in the past. Some of my favorite:</description><pubDate>Tue, 06 Jun 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A few weeks back I was at a team meetup in Montréal and while walking along the streets I enjoyed the grafitti culture there quite a lot. I loved how colorful and/or playful they are compared to other places I’ve been in the past.&lt;/p&gt;
&lt;p&gt;Some of my favorite:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Hydralisk!&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2694&quot; height=&quot;3495&quot; src=&quot;/_astro/img_7084-8397910a.ZIxhC7qM_1z6wBb.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Not sure if I’m right, but playing a lot of StarCraft in the past always make me think that those creatures are hydralisks&lt;/p&gt;
&lt;p&gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2101&quot; height=&quot;2115&quot; src=&quot;/_astro/img_7096-cd130da6.CQOvGu0o_ZRu3Go.webp&quot; &gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2387&quot; height=&quot;2357&quot; src=&quot;/_astro/img_7083-a1cb125f.CBVRLzF4_Z1ImeId.webp&quot; &gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/img_7098-99273db4.Bqxpgo6f_y2ISn.webp&quot; &gt;&lt;img  loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;3384&quot; height=&quot;2901&quot; src=&quot;/_astro/img_7344-7ed4ce8e.CovT3-V7_hGgJI.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Adventures</category><category>Graffiti</category><category>montreal</category><category>Photography</category><category>travel</category></item><item><title>Fear of dogs</title><link>https://bisko.be/posts/blog/fear-of-dogs/</link><guid isPermaLink="true">https://bisko.be/posts/blog/fear-of-dogs/</guid><description>When I was kid, probably around 5-6 years old, a neighbors dog bit me while playing with it. It wasn’t very serious, just a scratch, but to my child mind it was an awful experience. After the incident I developed a huge fear of dogs. I ran away from them and hid home or in</description><pubDate>Fri, 31 Mar 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When I was kid, probably around 5-6 years old, a neighbors dog bit me while playing with it. It wasn’t very serious, just a scratch, but to my child mind it was an awful experience.&lt;/p&gt;
&lt;p&gt;After the incident I developed a huge fear of dogs. I ran away from them and hid home or in a neighbor’s yard. If it was a friend’s dog. I’d stay alert and run to another room or somewhere where the dog couldn’t reach me if the dog moved even the slightest.&lt;/p&gt;
&lt;p&gt;While growing up I stayed away from dogs, but as time passed, I started warming up to them. The first dog that I didn’t run away from screaming was my cousins’ dog – a &lt;a href=&quot;https://en.wikipedia.org/wiki/Rough_Collie&quot;&gt;Rough Collie&lt;/a&gt; named Clara.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;clara&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1505&quot; height=&quot;1027&quot; src=&quot;/_astro/clara-de4f7f1b.CfG1RsCF_Z112bUQ.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Clara in all her glory 🙂&lt;/p&gt;
&lt;p&gt;She was just the best dog. Her owners trained her really well and she was a very calm dog, that is if you don’t count thunderstorms. She was deathly afraid of thunders and had to be held tightly and the doors had to be closed or she’d run away and try to hide somewhere far away from the storm.&lt;/p&gt;
&lt;p&gt;Spending summers at my village and having her visit from time to time really helped reducing the fear of dogs and general anxiety around dogs.&lt;/p&gt;
&lt;p&gt;Here in Bulgaria many stray dogs are still roaming at large and can pose a threat from time to time as the packs can easily reach 5-10+ dogs. That has always scared me and made me anxious walking out in the dark when I would hear the occassional barks behind me. &lt;/p&gt;
&lt;p&gt;In time I managed to learn that dogs aren’t that scary and I managed to distinguish aggressive dogs from friendly dogs who are looking to play.&lt;/p&gt;
&lt;p&gt;Last weekend I made myself proud. &lt;/p&gt;
&lt;p&gt;For the past few months we noticed a stray dog walking around the villa house. At first I was pretty afraid of having a random dog circling around us. After a few visits I noticed the dog wasn’t that scary 🙂 It would come around, look at us and then go away. &lt;/p&gt;
&lt;p&gt;Took me a bit of courage but in the end I managed to gather all of it, bought some canned food and stood outside with the food in a plastic container, calling the dog to come by and have a good meal.&lt;/p&gt;
&lt;p&gt;It’s funny that the dog seemed more afraid of me than I was of it. After a few calls and me taking a step back it came to the improvised cup and started eating.&lt;/p&gt;
&lt;p&gt;Victory! 🙂&lt;/p&gt;
&lt;p&gt;It was also fun to watch it in the car mirrors as it ran along with us while we were leaving the villa.&lt;/p&gt;
&lt;p&gt;Radi’s mother even named him Bear.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Bear stealing the cup.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2076&quot; height=&quot;1594&quot; src=&quot;/_astro/img_5556-54e1db0f.Dxlc4oQQ_1RmVVu.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;– The cup is mine now!&lt;/p&gt;</content:encoded><category>blog</category><category>Uncategorized</category></item><item><title>Ice skating</title><link>https://bisko.be/posts/blog/ice-skating/</link><guid isPermaLink="true">https://bisko.be/posts/blog/ice-skating/</guid><description>It’s been almost a month since the event, but I will never forget it 🙂 On the last day last year, my cousin suggested that we visit an ice rink. I have never been to one and I was deathly afraid of breaking all my bodily extensions. Luckily I had some experience in roller-blading when</description><pubDate>Mon, 30 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s been almost a month since the event, but I will never forget it 🙂&lt;/p&gt;
&lt;p&gt;On the last day last year, my cousin suggested that we visit an ice rink. I have never been to one and I was deathly afraid of breaking all my bodily extensions.&lt;/p&gt;
&lt;p&gt;Luckily I had some experience in roller-blading when I was a kid and that helped my self-esteem quite a lot. I knew that it would be something like it. Of course I wasn’t quite prepared to what happened when I put on my skates and stepped on the ice – It was so slippery!&lt;/p&gt;
&lt;p&gt;My fear quickly disappeared and I managed to skate without having to hold the rail. All my old roller-blading experience came back and I was able to stand freely on the ice.&lt;/p&gt;
&lt;p&gt;It was an immensely fun experience and I would definitely go to the ice rink again! 🙂&lt;/p&gt;
&lt;p&gt;As a bonus I managed to capture a “first-person” view of my cousin falling on the ice:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.instagram.com/p/BOrgVw6j8O3/?taken-by=biskobe&quot;&gt;https://www.instagram.com/p/BOrgVw6j8O3/?taken-by=biskobe&lt;/a&gt;&lt;/p&gt;</content:encoded><category>blog</category><category>Adventures</category><category>Winter</category><category>fun</category><category>ice</category><category>skating</category></item><item><title>Как да си извадим постоянен EORI номер по електронен път или защо хартията никога няма да умре.</title><link>https://bisko.be/posts/blog/%D0%BA%D0%B0%D0%BA-%D0%B4%D0%B0-%D1%81%D0%B8-%D0%B8%D0%B7%D0%B2%D0%B0%D0%B4%D0%B8%D0%BC-%D0%BF%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B5%D0%BD-eori-%D0%BD%D0%BE%D0%BC%D0%B5%D1%80-%D0%BF%D0%BE-%D0%B5/</link><guid isPermaLink="true">https://bisko.be/posts/blog/%D0%BA%D0%B0%D0%BA-%D0%B4%D0%B0-%D1%81%D0%B8-%D0%B8%D0%B7%D0%B2%D0%B0%D0%B4%D0%B8%D0%BC-%D0%BF%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B5%D0%BD-eori-%D0%BD%D0%BE%D0%BC%D0%B5%D1%80-%D0%BF%D0%BE-%D0%B5/</guid><description>Важно уточнение – статията е актуална към 2017 година 🙂 В коментарите има няколко обновления на процеса, разгледайте и тях. Обновление от коментар 1 Също така бях получил мейл от друг човек, препатил наскоро този процес (Септември 2020), но все още чакам информация от него какъв е процеса в момента. Ако все пак ви се</description><pubDate>Fri, 06 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Важно уточнение – статията е актуална към 2017 година 🙂 В коментарите има няколко обновления на процеса, разгледайте и тях.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bisko.be/2017/01/%d0%ba%d0%b0%d0%ba-%d0%b4%d0%b0-%d1%81%d0%b8-%d0%b8%d0%b7%d0%b2%d0%b0%d0%b4%d0%b8%d0%bc-%d0%bf%d0%be%d1%81%d1%82%d0%be%d1%8f%d0%bd%d0%b5%d0%bd-eori-%d0%bd%d0%be%d0%bc%d0%b5%d1%80-%d0%bf%d0%be-%d0%b5/#comment-16503&quot;&gt;Обновление от коментар 1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Също така бях получил мейл от друг човек, препатил наскоро този процес (Септември 2020), но все още чакам информация от него какъв е процеса в момента.&lt;/p&gt;
&lt;p&gt;Ако все пак ви се чете какъв е бил процеса през 2017, можете да прочетете цялата статия.&lt;/p&gt;
&lt;p&gt;Ако не – &lt;a href=&quot;https://bisko.be/2017/01/%D0%BA%D0%B0%D0%BA-%D0%B4%D0%B0-%D1%81%D0%B8-%D0%B8%D0%B7%D0%B2%D0%B0%D0%B4%D0%B8%D0%BC-%D0%BF%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B5%D0%BD-eori-%D0%BD%D0%BE%D0%BC%D0%B5%D1%80-%D0%BF%D0%BE-%D0%B5/#comments&quot;&gt;скок направо към коментарите&lt;/a&gt;, за да видите какво е променено и какви нови главоболия срещат хората.&lt;/p&gt;
&lt;h4 id=&quot;оригинална-статия-от-2017-та&quot;&gt;&lt;em&gt;&lt;strong&gt;Оригинална статия от 2017-та&lt;/strong&gt;&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;TL;DR; и конкретните стъпки са в края на поста 🙂&lt;/p&gt;
&lt;p&gt;Около Коледа попаднах на доста добра промоция – Transcend 480 GB SSD диск за 86$ – score! Проблем – беше от Amazon.com, което значи, че ще бъде спрян на митницата.&lt;/p&gt;
&lt;p&gt;Цената и лакомията победиха и го поръчах на 28-ми декември и на 3-ти януари вече беше в София. Доставка с DHL, всичко страхотно. Служителите на DHL ми обясниха, че им трябват пълномощно, описание на стоката на български език и заветния EORI номер.&lt;/p&gt;
&lt;p&gt;Първите две неща са тривиални. Посещение до нотариус и един ред свободен текст.&lt;/p&gt;
&lt;p&gt;EORI номерът, обаче, беше съвсем друга история.&lt;/p&gt;
&lt;p&gt;Както всеки, който се е сблъсквал с митниците знае, EORI номерът е два вида – постоянен и временен. Временния се вади на момента и важи за една конкретна доставка. Ако е необходим за бъдещи пратки – трябва всеки път да се вади нов.&lt;/p&gt;
&lt;p&gt;От познати имах информация, че постоянния EORI номер се вади безплатно чрез онлайн системата на митницата. DHL пък от друга страна искаха известна сума за изваждането на такъв. Имам вяра в елкетронните системи (колко съм глупав) и реших да си спестя малко пари.&lt;/p&gt;
&lt;p&gt;На 3-ти следобед седнах и започнах да се чудя как става номера и как точно да си “регистрирам” EORI номер.&lt;/p&gt;
&lt;p&gt;Електронния портал на митниците (ecustoms.bg) е безполезен, ако се достъпи директно. Защо? Защото иска да сте вече регистрирани в него. Ще повторя – за да го достъпите, трябва да сте вече регистрирани в него. Как да се регистрираш в него, ако не си регистриран, за мен остава мистерия. Другата, по-малка драма е, че изисква ел. подпис, за да бъде достъпен.&lt;/p&gt;
&lt;p&gt;До тук добре (не). Отворих Google и започнах да създавам заклинания, за да разбера как да си пусна заветното заявление. Няколко търсения по-късно попадам на следната страница: &lt;em&gt;&lt;a href=&quot;http://ecustoms.bg/eportal/public/Controler?control=UpdateForm&amp;#x26;doc%5C_def%5C_id=24&amp;#x26;row%5C_id=1&amp;#x26;param%5C_selector=4&quot;&gt;http://ecustoms.bg/eportal/public/Controler?control=UpdateForm&amp;#x26;doc\_def\_id=24&amp;#x26;row\_id=1&amp;#x26;param\_selector=4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Screen Shot 2017-01-06 at 11.13.28.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1287&quot; height=&quot;860&quot; src=&quot;/_astro/Screen-Shot-2017-01-06-at-11.13.28-f052b73c.B7w6nr_s_1fJCpg.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;До тук добре, зачитам се в текста, едвам виждам скрития линк на “тук”, цъкам и… нищо. Връзката ме препраща към неработеща система – &lt;em&gt;&lt;a href=&quot;https://ecustoms.bg:18443/eportal/servlet/Controler?control=ReaderForm&amp;#x26;doc%5C_def%5C_id=3&amp;#x26;row%5C_id=5&quot;&gt;https://ecustoms.bg:18443/eportal/servlet/Controler?control=ReaderForm&amp;#x26;doc\_def\_id=3&amp;#x26;row\_id=5&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Известно време изричам разни заклинания и се надявам това да не е от онлайн системите, които работят само от 9-5 в работни дни, но не се отказвам, продължавам натам.&lt;/p&gt;
&lt;p&gt;Отново заклинания в Google и след няколко неуспешни опита, по някаква огромна случайност попадам на : &lt;a href=&quot;https://eori.customs.bg:8443/&quot;&gt;https://eori.customs.bg:8443/&lt;/a&gt;. Следва изненада, ахване, празник и т.н.&lt;/p&gt;
&lt;p&gt;Набързо пускам ел. подпис и трескаво почвам да разучавам интерфейса, който се състои от общо 4 бутона, два от които са &lt;strong&gt;Изход&lt;/strong&gt; и един &lt;strong&gt;Обнови&lt;/strong&gt;. Последния бутон беше нещо от вида на “Регистрация”, но понеже не може да се види, след като веднъж се направи регистрация, не мога да ви кажа точно какво пишеше на него.&lt;/p&gt;
&lt;p&gt;Цък, излиза форма за попълване с няколко различни вида полета и някакви кодове на тях. Попълних тези, които знаех за какво става дума, но другите бяха terra incognita. Някои бяха удебелени, други не, но пък не беше ясно кои са задължителни или не.&lt;/p&gt;
&lt;p&gt;Обратно в Google. Заклинания – нищо. Накрая реших да почна да търся по конкретни фрази от полетата и по някаква случайност успях да попадна на &lt;a href=&quot;http://ecustoms.bg/eportal/public/DocumentViewer?row_id=265&quot;&gt;http://ecustoms.bg/eportal/public/DocumentViewer?row_id=265&lt;/a&gt; , което се оказа, че е наредбата за създаване на EORI-BG регистрацията. Колко хубаво. Вместо няколко попъпчета с кратко описание на полето, човек трябва да рови в наредби и закони, за да попълни една форма. C’est la vie, или побългарено – тука е така.&lt;/p&gt;
&lt;p&gt;Една наредба няма да ме спре. Диагонално я изчитам и стигам до дъното, където виждам няколко примерни форми, които се ползват за хартиената версия на заявлението. Допопълвам си формата, запазвам, подписвам с ел. подпис и започвам да се надявам.&lt;/p&gt;
&lt;p&gt;Начало на процеса около 18 часа, край 21:43 часа. За едно онлайн заявление.&lt;/p&gt;
&lt;p&gt;По-бързо би било, ако бях отишъл в някоя от софийските митници, където да го направя това на място, само че този EORI номер се издава по постоянен адрес, а аз още се водя в Монтана. Да, но митница в Монтана няма. Най-близката е в Лом, което е на около 40км от Монтана. Аз съм в София. Ако се подаде заявлението на хартия, трябва да се ходи два пъти до там, което изобщо не ми се нрави. Навън е сняг, може да се направи само в работен ден и всичките други красоти на държавната администрация.&lt;/p&gt;
&lt;p&gt;До тук, все още вярвам в електронните системи и се радвам, че няма да се наложи да ходя до другия край на България за нещо толкова дребно (и да спестя едни пари, нали, че от там тръгна всичко).&lt;/p&gt;
&lt;p&gt;Минават два дни, вече е четвъртък, движение по заявлението няма. Вече почвам леко да се съмнявам. Звъннах в съответния Service Desk на митницата, където служителката съвсем учтиво ми каза, че срока е до 5 работни дни и ако след това не е станало, да звънна пак. Добре, ще почакам.&lt;/p&gt;
&lt;p&gt;През деня се разчитам за тези заветни онлайн заявления за EORI и какъв опит са споделили хората и при всички е едно и също – ако имаш късмет – имаш, ако не, чакаш. Някой беше споменал, че са попитали в регионалната митница и са им казали, че такова заявление при тях не било получено. Тук вярата в електронната система започва да се клати заплашително.&lt;/p&gt;
&lt;p&gt;Днес, петък, реших, че ще е добре да проверя дали пък случайно не съм и аз един от тези потърпевши на електронната система. Звъня в митницата в Лом. Учитва служителка ми каза да звънна на отдела, който отговаря за това. Каза ми локален номер за Лом без кода и след няколко глупави въпроса какво е това число, което ми диктува, успях да разбера, че всъщност е друг телефон, на който да звънна. Усмихнахме се един на друг по телефона за тази ситуация и звъннах на телефона, който ми даде.&lt;/p&gt;
&lt;p&gt;От там един отново учтив господин ми вдигна и след като си зададох въпроса ми каза, че те ги обработват, когато дойдат, до нищо не е дошло при тях и ще провери какво се случва и защо не е получено. Да съм звъннел след 10 минутки. Радвам се, че поне отношението на всички по веригата беше човешко и го нямаше онова соц. сопане и надменно говорене. Започнах да чакам и след няма и 5 минути, получавам известие за нов мейл със заглавие: “&lt;strong&gt;Информация за вашата EORI регистрация!&lt;/strong&gt;” УРА! Получих го!&lt;/p&gt;
&lt;p&gt;Пратих го към DHL и сега остана само да бъде освободена пратката и да я получа. Ура! (отново)&lt;/p&gt;
&lt;p&gt;Като за край (или TL;DR;), един по-синтезиран пътеводител за това как да си извадим постоянен EORI номер онлайн:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Изваждате си ел. подпис, ако нямате такъв.&lt;/li&gt;
&lt;li&gt;Отивате на: &lt;a href=&quot;https://eori.customs.bg:8443/&quot;&gt;https://eori.customs.bg:8443/&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Сваляте си &lt;a href=&quot;http://ecustoms.bg/eportal/public/DocumentViewer?row_id=265&quot;&gt;http://ecustoms.bg/eportal/public/DocumentViewer?row_id=265&lt;/a&gt;, за да видите как да попълните полетата. Информацията, която ви трябва е на последните няколко остраници.&lt;/li&gt;
&lt;li&gt;Подавате заявлението и задължително го подписвате. Трябва да видите ред със следната стойност за колоната Действие: &lt;strong&gt;EORI-REG-SIGN&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Изчаквате ден или ако се чувствате късметлия звъните на регионалното поделение на митницата, към което сте подали заявлението и тактично питате дали са го получили, защото ел. система ви давала някакви грешки. Не споменавате, че бързате.&lt;/li&gt;
&lt;li&gt;След кракто време ще получите заветния EORI номер.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Няколко бележки:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Електронният подпис трябва да е на ваше име, тъй като доста данни (имена, ЕГН, mail) от подписа се изваждат при попълването на формата. Т.е. няма как да стане с подпис на приятел.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Системата е доста странна за работа и по някой път е доста своенравна.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Изпратете и подпишете формата, след като внимателно проверите всички полета.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Успешно работи на Chrome на Mac с подпис на Infonotary.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Добавена бележка от коментара на &lt;a href=&quot;http://bisko.be/2017/01/%d0%ba%d0%b0%d0%ba-%d0%b4%d0%b0-%d1%81%d0%b8-%d0%b8%d0%b7%d0%b2%d0%b0%d0%b4%d0%b8%d0%bc-%d0%bf%d0%be%d1%81%d1%82%d0%be%d1%8f%d0%bd%d0%b5%d0%bd-eori-%d0%bd%d0%be%d0%bc%d0%b5%d1%80-%d0%bf%d0%be-%d0%b5/#comment-16471&quot;&gt;Петя&lt;/a&gt; по-надолу:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Когато се опитам да подпиша с електронен подпис и започва изтеглянето на файл(stampitls). След двудневна борба с HelpDesk на Митници ми &lt;a href=&quot;http://bisko.be/wp-content/uploads/2018/05/stampit-sign-esig.pdf&quot;&gt;изпратиха една инструкция&lt;/a&gt;, с която успях да подпиша.&lt;br&gt;
И още нещо – ако сте с адрес в София и решите да получите ЕОРИ номер с ел. подпис при избор на митническо учреждение изберете &lt;strong&gt;ТМУ Столична&lt;/strong&gt; – става за около час, а ако изберете Летище София – може да отнеме до 5 работни дни&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>Митница</category><category>eori</category><category>еори</category><category>митница</category></item><item><title>ЗЕТ и търговските съобщения (… непоисканите…)</title><link>https://bisko.be/posts/blog/%D0%B7%D0%B5%D1%82-%D0%B8-%D1%82%D1%8A%D1%80%D0%B3%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D1%82%D0%B5-%D1%81%D1%8A%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BD%D0%B5%D0%BF%D0%BE%D0%B8%D1%81%D0%BA/</link><guid isPermaLink="true">https://bisko.be/posts/blog/%D0%B7%D0%B5%D1%82-%D0%B8-%D1%82%D1%8A%D1%80%D0%B3%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D1%82%D0%B5-%D1%81%D1%8A%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BD%D0%B5%D0%BF%D0%BE%D0%B8%D1%81%D0%BA/</guid><description>Днес за пореден път се нагледах на “Според ЗЕТ, чл. 6 (1) това търговско съобщение може да е непоискано” и след това 5 страници бълвоч с разни глупости, без никакво форматиране, ясно отделени секции и т.н. Поради това, че ми писна да чета такива глупости се разрових в ЗЕТ да видя какво гласи тоя прословут</description><pubDate>Tue, 24 Aug 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Днес за пореден път се нагледах на “Според ЗЕТ, чл. 6 (1) това търговско съобщение може да е непоискано” и след това 5 страници бълвоч с разни глупости, без никакво форматиране, ясно отделени секции и т.н.&lt;/p&gt;
&lt;p&gt;Поради това, че ми писна да чета такива глупости се разрових в ЗЕТ да видя какво гласи тоя прословут член 6 и чета:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Чл. 6.&lt;/strong&gt; (1) Доставчик на услуги, който изпраща непоискани търговски съобщения по електронната поща без предварително съгласие на получателя, е длъжен да осигури ясното и недвусмислено разпознаване на търговското съобщение като непоискано още с постъпването му при получателя.&lt;/p&gt;
&lt;p&gt;(2) (Изм. – ДВ, бр. 105 от 2006 г., в сила от 24.12.2006 г.) Комисията за защита на потребителите води електронен регистър на електронните адреси на юридическите лица, които не желаят да получават непоискани търговски съобщения, по ред, определен с наредба на Министерския съвет.&lt;/p&gt;
&lt;p&gt;(3) Забранява се изпращането на непоискани търговски съобщения на електронни адреси, вписани в регистъра по ал. 2.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;До тук добре, всичко ясно, съгласен съм. Няма смисъл да се разправям по законовите разпоредби, ще ги трая или ще ги блокна, блябля и продължавам да си дочета алинея 4 и какво виждам:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(4) &lt;strong&gt;Забранява&lt;/strong&gt; се изпращането на непоискани търговски съобщения на потребители &lt;strong&gt;без предварителното им съгласие.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Иии.. Ъ? Според това излиза, че трябва първо да ми драснат едно мейлче и да ме питат съглсен ли съм да получавам целия тоя бълвоч или не, но те не го правят. Те просто ми заявяват, че според чл.6 (1) това  търговско съобщение може да не е поискано от мен и след това си изливат целия бълвоч в същия мейл. Никъде не ме питат съгласен ли съм или не – направо от вратата за краката.&lt;/p&gt;
&lt;p&gt;Чудя се колко е законна тази практика – да пращат спам без изричното ми съгласие?&lt;/p&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>Random rants</category><category>закони</category><category>спам</category></item><item><title>Фонетика и xorg</title><link>https://bisko.be/posts/blog/phonetics-and-xorg/</link><guid isPermaLink="true">https://bisko.be/posts/blog/phonetics-and-xorg/</guid><description>В някоя от последните версии на xorg, които се появиха около януари-февруари тази година, във фонетичната подредба са се промъкнали промени на някой, който изобщо не е мислил за редовия потребител и е искал да превърне фонетиката в БДС. Промените се изразяват в това, че са въведени знаците за горни и долни кавички, вместо</description><pubDate>Sat, 15 May 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;В някоя от последните версии на xorg, които се появиха около януари-февруари тази година, във фонетичната подредба са се промъкнали промени на някой, който изобщо не е мислил за редовия потребител и е искал да превърне фонетиката в БДС. Промените се изразяват в това, че са въведени знаците за горни и долни кавички, вместо &amp;#x3C;&gt; и знак за параграф вместо &amp;#x26;, и знак за евро вместо ^.&lt;/p&gt;
&lt;p&gt;За да се поправят тези злодеяния, в &lt;strong&gt;~/.bashrc&lt;/strong&gt; се добавят следните редове:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;xmodmap -e “keycode 16 = 7 ampersand 7 ampersand”&lt;/p&gt;
&lt;p&gt;xmodmap -e “keycode 12 = 3 numbersign 3 numbersign”&lt;/p&gt;
&lt;p&gt;xmodmap -e “keycode 15 = 6 asciicircum 6 asciicircum”&lt;/p&gt;
&lt;p&gt;xmodmap -e “keycode 20 = minus underscore minus underscore”&lt;/p&gt;
&lt;p&gt;xmodmap -e “keycode 59 = comma less comma less”&lt;/p&gt;
&lt;p&gt;xmodmap -e “keycode 60 = period greater period greater”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;И след това се логаут-вате и после обратно log-in в системата и вече би трябвало да си имате старата подредба на символите.&lt;/p&gt;
&lt;p&gt;П.п. има още една промяна, която е, че вместо главно ь(ер малък, латинско x) е сложено ѝ (и ударено), което смятам за полезно и не съм отразил в горните промени.&lt;/p&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>Funny</category><category>Random rants</category><category>Tech</category></item><item><title>Removing iPhone passcode lock</title><link>https://bisko.be/posts/blog/removing-iphone-passcode-lock/</link><guid isPermaLink="true">https://bisko.be/posts/blog/removing-iphone-passcode-lock/</guid><description>Yesterday I had a few drinks and decided to put a passcode on my iPhone, just in case no one tries to crawl through it (stupid paranoia)… So I went on and put the passcode, typed it twice in the settings, set it to what I believed was the number I was typing and then</description><pubDate>Sat, 14 Nov 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Yesterday I had a few drinks and decided to put a passcode on my iPhone, just in case no one tries to crawl through it (stupid paranoia)… So I went on and put the passcode, typed it twice in the settings, set it to what I believed was the number I was typing and then locked the phone (power/sleep button). Then I tried to unlock it and it seemed that I managed to type a number twice without it being the number I wanted. So for the rest of the night I tried to figure out what was the number, but still no luck.&lt;/p&gt;
&lt;p&gt;Now on a soberer head I found a way to remove the passcode lock (along with all other passwords on the phone though).&lt;/p&gt;
&lt;p&gt;So the steps are as follow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to the phone’s file system (linux is easy – check &lt;a href=&quot;http://marcansoft.com/blog/2009/10/iphone-syncing-on-linux-part-2/&quot; title=&quot;Marcansoft&quot;&gt;http://marcansoft.com/blog/2009/10/iphone-syncing-on-linux-part-2/&lt;/a&gt; on accessing ipod file system – same goes for iPhone and iPod touch).&lt;/li&gt;
&lt;li&gt;Then head to &lt;strong&gt;/private/var/Keychains&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Move the file named &lt;strong&gt;keychain-2.db&lt;/strong&gt; to other location, e.g. /&lt;/li&gt;
&lt;li&gt;Then head to &lt;strong&gt;/var/mobile/Library/Preferences/&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Move the file named &lt;strong&gt;com.apple.springboard.plist&lt;/strong&gt; to other location, e.g. /&lt;/li&gt;
&lt;li&gt;Then you have to kill springboard ( &lt;strong&gt;killall SpringBoard&lt;/strong&gt; if you are in through SSH) &lt;strong&gt;or just reboot&lt;/strong&gt; the phone.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voila, that’s all.&lt;/p&gt;
&lt;p&gt;The side effect of this exercise is that you would loose all your passwords for mail accounts, exchange accounts and the order of icons on the springboard, but still you wouldn’t have to reflash the phone 🙂&lt;/p&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>Random rants</category><category>Tech</category><category>drinkingisbad</category><category>Funny</category><category>iphone</category><category>ipod</category><category>ipod touch</category><category>lock</category><category>lockdown</category><category>passcode</category></item><item><title>Last drops of battery…</title><link>https://bisko.be/posts/blog/last-drops-of-battery/</link><guid isPermaLink="true">https://bisko.be/posts/blog/last-drops-of-battery/</guid><description>Today I suffered a little blackout in my neighborhood in the evening and decided that it’s time to put my Acer 5935g’s battery to the test. I plugged out the power cord and continued my movie night with Dexter S02. So here is the final result of my little battery test: 1:30 hours – movies 35 minutes</description><pubDate>Tue, 08 Sep 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today I suffered a little blackout in my neighborhood in the evening and decided that it’s time to put my Acer 5935g’s battery to the test. I plugged out the power cord and continued my movie night with Dexter S02.&lt;/p&gt;
&lt;p&gt;So here is the final result of my little battery test:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1:30 hours – movies&lt;/li&gt;
&lt;li&gt;35 minutes browsing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This adds to total 2:05 hours of guaranteed battery life (at least) and i still have a near half an hour battery reserve to finish up some texts I am working on.&lt;/p&gt;
&lt;p&gt;Actually this is the first time I get very near the battery time defined by specs supplied by the maker.  I’m glad I chose Acer 🙂&lt;/p&gt;
&lt;p&gt;The system I tested the battery is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Acer 5935g (stock battery)&lt;/li&gt;
&lt;li&gt;Windows Vista SP2 64bit&lt;/li&gt;
&lt;li&gt;GeForce 130M active (not the onboard intel 4500)&lt;/li&gt;
&lt;li&gt;Razer Copperhead mouse&lt;/li&gt;
&lt;li&gt;60% brightness all the time&lt;/li&gt;
&lt;li&gt;Skype running in the background&lt;/li&gt;
&lt;li&gt;WiFi on, connected to network&lt;/li&gt;
&lt;li&gt;KMplayer playing DivX (with lots of seeking (can’t watch movie from start to end without seeking 🙂 )&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Coming up is a test in Linux with the same activities. Though I first need to install and configure it, but it will be sometime when I have free time on my hands.&lt;/p&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>Tech</category><category>acer</category><category>battery</category><category>cool</category><category>regards</category><category>video</category></item><item><title>Canon camera E16 error fix</title><link>https://bisko.be/posts/blog/canon-camera-e16-error-fix/</link><guid isPermaLink="true">https://bisko.be/posts/blog/canon-camera-e16-error-fix/</guid><description>This is just a repost of my Canon camera E16 error post in English. The story started yesterday, when my dad wrote me that his camera (Canon A610) screwed up and the only thing that it does is takes the lens out, takes it back in and then dies with “Error E16“ I searched around</description><pubDate>Thu, 03 Sep 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This is just a repost of my &lt;a href=&quot;http://bisko.be/2009/09/error-e16-canon-camera/&quot; title=&quot;Canon E16 error&quot;&gt;Canon camera E16 error&lt;/a&gt; post in English.&lt;/p&gt;
&lt;p&gt;The story started yesterday, when my dad wrote me that his &lt;strong&gt;camera&lt;/strong&gt; (&lt;strong&gt;Canon A610&lt;/strong&gt;) &lt;strong&gt;screwed up&lt;/strong&gt; and the only thing that it does is &lt;strong&gt;takes the lens out&lt;/strong&gt;, &lt;strong&gt;takes it back in&lt;/strong&gt; and then &lt;strong&gt;dies&lt;/strong&gt; with&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“&lt;strong&gt;Error E16&lt;/strong&gt;“&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I searched around the web and everywhere people said that &lt;strong&gt;the problem is of unknown origin&lt;/strong&gt; and it’s &lt;strong&gt;not uncommon&lt;/strong&gt;. The resolution  they proposed was to &lt;strong&gt;send the camera to an authorized Canon service for a replacement&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;So far so good. Send the camera away … but here is the problem – my &lt;strong&gt;warranty ended an year ago&lt;/strong&gt;, so I was unlucky.&lt;/p&gt;
&lt;p&gt;So I had no answer to the problem… until my dad came up with something which &lt;strong&gt;should work&lt;/strong&gt; on all “asia-tech” (as you may have seen in &lt;a href=&quot;http://www.imdb.com/title/tt0120591/&quot; title=&quot;Armageddon movie&quot;&gt;Armageddon (1998)&lt;/a&gt;) – &lt;strong&gt;HIT IT HARD WITH THE 5$ WRENCH!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It turns out that &lt;strong&gt;hard shake&lt;/strong&gt; or some &lt;strong&gt;firm slap&lt;/strong&gt; of the camera &lt;strong&gt;fixes the problem&lt;/strong&gt; most of the time, but this hides &lt;strong&gt;some risks&lt;/strong&gt; – if you get the error, you are &lt;strong&gt;most likely to get it again&lt;/strong&gt; some time in the future, so i suggest you &lt;strong&gt;send it to the Canon service&lt;/strong&gt; for a replacement.&lt;/p&gt;
&lt;h2 id=&quot;so-remember-hit-or-shake-hard-before-you-give-up--it-may-save-your-camera-for-at-least-a-little-while&quot;&gt;So remember &lt;strong&gt;HIT or SHAKE hard&lt;/strong&gt; before you give up – it may save your camera (for at least a little while).&lt;/h2&gt;
&lt;p&gt;As a side effect of the E16 error the only mode that works is the Video mode, which, in my opinion, is funny – check it out: Canon A610 E16 Error video mode.&lt;br&gt;
As you can see the frame is cropped in half and has funky colors.&lt;/p&gt;
&lt;p&gt;--- ## External Downloads Saved Locally - [&lt;a href=&quot;http://www.youtube.com/watch?v=fQGdaOgQt9M%5C&quot;&gt;http://www.youtube.com/watch?v=fQGdaOgQt9M\&lt;/a&gt;](media/canon-camera-e16-error-fix-Canon A610 E16 error video.mkv)&lt;/p&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>bug</category><category>camera</category><category>canon</category><category>dead</category><category>e16</category><category>error</category><category>fix</category></item><item><title>Грешка E16 при фотоапарат Canon</title><link>https://bisko.be/posts/blog/error-e16-canon-camera/</link><guid isPermaLink="true">https://bisko.be/posts/blog/error-e16-canon-camera/</guid><description>Историята започна вчера, когато баща ми ми писа, че се е скапал фотоапарата (Canon A610) и единственото, което прави при пускане (в режим снимане) е да изкара обектива, да го прибере и на черен фон да изведе Error E16 Разтърсих се в интернет и повечето информация гласеше, че проблема е неизвестен и не се случва</description><pubDate>Wed, 02 Sep 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Историята започна вчера, когато баща ми ми писа, че се е скапал фотоапарата (&lt;strong&gt;Canon A610&lt;/strong&gt;) и единственото, което прави при пускане (в режим снимане) е да изкара обектива, да го прибере и на черен фон да изведе&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Error E16&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Разтърсих се в интернет и повечето информация гласеше, че &lt;strong&gt;проблема е неизвестен&lt;/strong&gt; и не се случва рядко, да се прател апарата в Canon и те ще го сменят.&lt;/p&gt;
&lt;p&gt;До тук хубаво, само дето гаранцията на фотоапарата изтече преди година и нещо (&lt;strong&gt;не е гаранционен&lt;/strong&gt; с една дума, защото е купен Май 2006-та) .&lt;/p&gt;
&lt;p&gt;При това аз бях без решение, докато баща ми не се чатнал и не пробвал &lt;strong&gt;стандартното&lt;/strong&gt; при “жълта” техника – &lt;strong&gt;БОЙ&lt;/strong&gt;! 🙂&lt;/p&gt;
&lt;p&gt;Оказва се, че при &lt;strong&gt;силно разтърсване или попляскване&lt;/strong&gt; на апарата &lt;strong&gt;грешката&lt;/strong&gt; има голям шанс &lt;strong&gt;да изчезне и да работи&lt;/strong&gt; нормално апарата.&lt;/p&gt;
&lt;p&gt;Но това крие своите &lt;strong&gt;рискове&lt;/strong&gt; – ако веднъж се е появила, евентуално &lt;strong&gt;ще се появи пак&lt;/strong&gt;, всичко е &lt;strong&gt;въпрос на време&lt;/strong&gt;. Така че трябва да мислите за &lt;strong&gt;нов фотоапарат&lt;/strong&gt;, докато успеете да се крепите със стария.&lt;/p&gt;
&lt;p&gt;Към цялото нещо има и “готин” страничен ефект – видеото работи “на половина”, което може да видите на следния линк: E16 error on Canon A610&lt;/p&gt;
&lt;p&gt;--- ## External Downloads Saved Locally - [&lt;a href=&quot;http://www.youtube.com/watch?v=fQGdaOgQt9M%5C&quot;&gt;http://www.youtube.com/watch?v=fQGdaOgQt9M\&lt;/a&gt;](media/грешка-e16-при-фотоапарат-canon-Canon A610 E16 error video.mkv)&lt;/p&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>camera</category><category>canon</category><category>chinatech</category><category>e16</category><category>error</category><category>fix</category></item><item><title>iPhone 3.0</title><link>https://bisko.be/posts/blog/iphone-30/</link><guid isPermaLink="true">https://bisko.be/posts/blog/iphone-30/</guid><description>Уааааа…. радвам се като малко дете 😉 Вече се обзаведох с последната версия на iPhone OS, а именно дългоочакваната версия 3.0. На пръв поглед е голяма заигравка, докато се разучат новите (естествено полезните неща) в новия фирм. Ето някои, които аз лично намирам полезни: Spotlight (първи екран (нулев, ако считаме Home за първи) – много</description><pubDate>Fri, 19 Jun 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Уааааа…. радвам се като малко дете 😉&lt;/p&gt;
&lt;p&gt;Вече се обзаведох с последната версия на iPhone OS, а именно дългоочакваната версия 3.0.&lt;br&gt;
На пръв поглед е голяма заигравка, докато се разучат новите (естествено полезните неща) в новия фирм. Ето някои, които аз лично намирам полезни:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Spotlight&lt;/strong&gt; (първи екран (нулев, ако считаме Home за първи) – много радва. Пишеш 3 букви и си звъннал на който трябва или си пуснал песента, която искаш. Може да се настрои от опциите да е достъпен при 2-но цъкане на Home бутона.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Landscape&lt;/strong&gt; (екрана с краката настрани)- няма такъв кеф просто 🙂 . SMS, e-mail, notes – всичко в лендскейп … ААААААААААА (радостни викове)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy&amp;#x26;Paste&amp;#x26;Undo&amp;#x26;…&lt;/strong&gt; (това дето го нямаше досега)  – много хитро е измислена функционалността за копиране и пействане. (може да се види в ревю-тата). Досега 2  бъга открих. При първо копиране на картинка + текст, копира само картинката. Другия бъг е, ако сте маркирали нещо за копиране в Safari, ако го угасите и го пуснете пак веднага първо виждате маркираната област и тогава зарежда каквото и да било друго.&lt;/li&gt;
&lt;li&gt;По-подробен &lt;strong&gt;Call Log&lt;/strong&gt; (телефонен logger) – вече в Phone.app се показва по-подробна информация за разговорите, проведени с даден номер – примерно продължителност на разговора, кога е провден, какъв е статуса на разговора.&lt;/li&gt;
&lt;li&gt;Възможност за изключване на SMS Reminder от опциите -&gt; Settings -&gt; General -&gt; Messages -&gt; Repeat Alert – спасение от стряскащите вибро-звуци от телефона, когато забравите да отворите, вече прочетения от хоум скрийн-а SMS.&lt;/li&gt;
&lt;li&gt;Подобрения в &lt;strong&gt;iPod&lt;/strong&gt; – &lt;strong&gt;Shake to Shuffle&lt;/strong&gt; ( клатиш телефона настрани и сменя с рандом песен ) – удобно, но трябва доста силно да се разтресе. (note to self: да се тества в маршрутка и в градския);  В подкастите има ЕЙ ТОЛКОВА голям &lt;strong&gt;бутон за връщане на 30 секунди назад&lt;/strong&gt; в плейвания подкаст. До него се намира и &lt;strong&gt;бутона 1x(2x,1/2x)&lt;/strong&gt;, ако искате да забързате, забавите скоростта на слушания подкаст. (много забавно звучи, особено ако слушате нещо достатъчно бързо); Възможност за преглеждане на подкасти онлайн и след това да ги свалите на телефона си.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;СКОРОСТ&lt;/strong&gt; – стреснах се … телефона работи поне едно 60% по-бързо отколкото 2.2.1. Отварянето на приложения става със скоростта на светлината. Затварянето също. Вече дори не засича звука, докато отварям или затварям друго приложение или самия iPod.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;За други не се сещам в момента, но обещавам да допълня списъка, след като открия нови полезни неща в новия фирм.&lt;/p&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>cool</category><category>iphone</category><category>update</category></item><item><title>IE daily</title><link>https://bisko.be/posts/blog/ie-daily/</link><guid isPermaLink="true">https://bisko.be/posts/blog/ie-daily/</guid><description>Ако по някой път, незнайно откъде, ви се ‘накъсват’ бордърите на някакъв елемент в ИЕ6,7, пробвайте да сложите background на елемента и има голям шанс да мине номера.</description><pubDate>Sat, 30 May 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ако по някой път, незнайно откъде, ви се ‘накъсват’ бордърите на някакъв елемент в ИЕ6,7, пробвайте да сложите background на елемента и има голям шанс да мине номера.&lt;/p&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>bug</category><category>ie</category></item><item><title>Will it Lens?</title><link>https://bisko.be/posts/blog/will-it-lens/</link><guid isPermaLink="true">https://bisko.be/posts/blog/will-it-lens/</guid><description>Пичовете в Google са яко изтрещяли 🙂 http://googleblog.blogspot.com/2009/04/will-it-lens.html</description><pubDate>Sat, 11 Apr 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Пичовете в Google са яко изтрещяли 🙂&lt;br&gt;
&lt;a href=&quot;http://googleblog.blogspot.com/2009/04/will-it-lens.html&quot;&gt;http://googleblog.blogspot.com/2009/04/will-it-lens.html&lt;/a&gt;&lt;/p&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>google</category><category>lens</category></item><item><title>Леля Ваца … или със старци на път</title><link>https://bisko.be/posts/blog/lelq-vaca/</link><guid isPermaLink="true">https://bisko.be/posts/blog/lelq-vaca/</guid><description>Петък 13:30 … последни минути на работа. Подписвам заповедда за напускане, последни думи и тръгвам към Централна гара. Качвам се на трамвая и внимателно почвам да си пресмятам времето и да се боря с лакомото ми аз, по въпроса дали да мина през McDonalds, за да си взема нещо или не… Успявам да го преборя,</description><pubDate>Sun, 09 Nov 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Петък 13:30 … последни минути на работа. Подписвам заповедда за напускане, последни думи и тръгвам към Централна гара. Качвам се на трамвая и внимателно почвам да си пресмятам времето и да се боря с лакомото ми аз, по въпроса дали да мина през McDonalds, за да си взема нещо или не… Успявам да го преборя, тъй като по груби сметки може и да не успея да стигна до гарата до 3:15, когато имах среща с баце Иржи. &lt;/p&gt;
&lt;p&gt;Естествено грубите ми сметки изобщо не бяха точни … стигнах близо 40 минути по-рано … В този момент лакомото ми аз (което от тук натам, за по-кратко, ще го наричам Прасчо), започна да ми натяква: “А можеше и да минеш и да вземеш нещо за ядене, нали!”. След няколко псувни по адрес на Прасчо влязох в гарата и останах като гръмнат… “Баси! Толкова хора не бях виждал на тая гара!!!”. Беше по-пълно от … не знам какво… гъчканица беше 🙂 . Видях, че няма място по пейките и излязох отвън, и седнах на стълбите под часовника. Пратих смс на Иван, че е лудница, при което получавам инструкция за закупуване на моментално закупуване на билети :).&lt;/p&gt;
&lt;p&gt;Върнах се вътре и веднага на малките каси… минах изключително бързо. Естествено нормално, защото имаше само 2-3 души преди мен, докато на другите каси беше някаква лудница. Взех билети, естествено с места и отново зачаках отвън. Иван дойде към 15:40, защото градския транспорт от своя страна са лоши хора, заедно с такситата 🙂 и зачакахме на таблото да напишат къде ще се композира нашия влак. Седим си, чакаме си, седим си, чакаме си … става :50… още никаква информация.. в този момент сме в положение “Бах мама му”, заедно с цялата останала гара. &lt;/p&gt;
&lt;p&gt;В един момент започват по звуко-съобщителната-система(или както му се вика на това) да казват кой влак къде е и виждаме как цялата гара се юрва към пероните… &lt;/p&gt;
&lt;p&gt;След бързо бутане, ръгане, настъпване, на което биха цъкали с език играчите от отборите по американски футбол, се добираме до перона и започваме да си търсим местата. Тук 12-ти вагон, там 12-ти вагон…. хоп целия влак прехождаме и стигаме до вагона. Мушкаме се бързо вътре, тъй като е 15:58 и очакваме всеки момент влака да потегли, а вътре…. ах вътре… Вътре трябваше или да си микроб, за да се провреш или някакъв супермен, за да избуташ хората, които трескаво се гъцкаха по коридорите. Добре че местата ни бяха във 2-рото купе, а не някъде по средата, защото имаше реален шанс да се стигне до сцена от “Кървав спорт Х”. &lt;/p&gt;
&lt;p&gt;В крайна сметка се настанихме и чакахме влака да тръгне. След има-няма 2 минути идват някакви старци със запазени места в нашето купе и набързо гонят ‘натрапниците’ (въпреки, че ги познавахме, ама … съдба). За жалост 2-те досадни бабички от Берковица си останаха … настаниха се всички и започнахме да чакаме, да тръгне влака. &lt;/p&gt;
&lt;p&gt;Естествено през това време разпознавам единия старец, който живееше до преди няколко години до нас. Той пък не ме разпознава… явно деменцията си казва думата 😀&lt;/p&gt;
&lt;p&gt;Ще пропусна повечето детайли тъй като са толкова много, че трудно се помнят, но ще спомена един, който направо ме разби от смях:&lt;/p&gt;
&lt;p&gt; &lt;em&gt;…&lt;br&gt;
– Абе той всяка сутрин пие кафе при леля Ваца!&lt;br&gt;
– Леля Ваца?&lt;br&gt;
– Да бе, на чашите пишело леля Ваца и то па да вземе да се окаже, че това било lavAzza&lt;br&gt;
…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;И така нататък цели 4 часа старчески хумор, който на моменти “ти къса диафрагмата и слизаш на Септември(гара), за да ти присадят нова”.&lt;/p&gt;
&lt;p&gt;В крайна сметка пристигнахме в Монтана с около час закъснение, но все пак час, който мина бързо 🙂 По този повод – ако путъвате в купе пълно със стари хора и има поне 2-ма дядовци, не съжалявайте, купона е гарантиран 😀&lt;/p&gt;</content:encoded><category>blog</category><category>bisko.be</category><category>Funny</category><category>Travel</category></item><item><title>Леля Ваца… или със старци на път</title><link>https://bisko.be/posts/blog/post-2008-11-09/</link><guid isPermaLink="true">https://bisko.be/posts/blog/post-2008-11-09/</guid><description>Приключение с влак от София до Монтана и старчески хумор в купето.</description><pubDate>Sun, 09 Nov 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Петък 13:30 … последни минути на работа. Подписвам заповедда за напускане, последни думи и тръгвам към Централна гара. Качвам се на трамвая и внимателно почвам да си пресмятам времето и да се боря с лакомото ми аз, по въпроса дали да мина през McDonalds, за да си взема нещо или не… Успявам да го преборя, тъй като по груби сметки може и да не успея да стигна до гарата до 3:15, когато имах среща с баце Иржи. &lt;br&gt;
Естествено грубите ми сметки изобщо не бяха точни … стигнах близо 40 минути по-рано … В този момент лакомото ми аз (което от тук натам, за по-кратко, ще го наричам Прасчо), започна да ми натяква: “А можеше и да минеш и да вземеш нещо за ядене, нали!”. След няколко псувни по адрес на Прасчо влязох в гарата и останах като гръмнат… “Баси! Толкова хора не бях виждал на тая гара!!!”. Беше по-пълно от … не знам какво… гъчканица беше :) . Видях, че няма място по пейките и излязох отвън, и седнах на стълбите под часовника. Пратих смс на Иван, че е лудница, при което получавам инструкция за закупуване на моментално закупуване на билети :).&lt;br&gt;
Върнах се вътре и веднага на малките каси… минах изключително бързо. Естествено нормално, защото имаше само 2-3 души преди мен, докато на другите каси беше някаква лудница. Взех билети, естествено с места и отново зачаках отвън. Иван дойде към 15:40, защото градския транспорт от своя страна са лоши хора, заедно с такситата :) и зачакахме на таблото да напишат къде ще се композира нашия влак. Седим си, чакаме си, седим си, чакаме си … става :50… още никаква информация.. в този момент сме в положение “Бах мама му”, заедно с цялата останала гара. &lt;br&gt;
В един момент започват по звуко-съобщителната-система(или както му се вика на това) да казват кой влак къде е и виждаме как цялата гара се юрва към пероните… &lt;br&gt;
След бързо бутане, ръгане, настъпване, на което биха цъкали с език играчите от отборите по американски футбол, се добираме до перона и започваме да си търсим местата. Тук 12-ти вагон, там 12-ти вагон… хоп целия влак прехождаме и стигаме до вагона. Мушкаме се бързо вътре, тъй като е 15:58 и очакваме всеки момент влака да потегли, а вътре… ах вътре… Вътре трябваше или да си микроб, за да се провреш или някакъв супермен, за да избуташ хората, които трескаво се гъцкаха по коридорите. Добре че местата ни бяха във 2-рото купе, а не някъде по средата, защото имаше реален шанс да се стигне до сцена от “Кървав спорт Х”. &lt;br&gt;
В крайна сметка се настанихме и чакахме влака да тръгне. След има-няма 2 минути идват някакви старци със запазени места в нашето купе и набързо гонят ‘натрапниците’ (въпреки, че ги познавахме, ама … съдба). За жалост 2-те досадни бабички от Берковица си останаха … настаниха се всички и започнахме да чакаме, да тръгне влака. &lt;br&gt;
Естествено през това време разпознавам единия старец, който живееше до преди няколко години до нас. Той пък не ме разпознава… явно деменцията си казва думата :-D&lt;br&gt;
Ще пропусна повечето детайли тъй като са толкова много, че трудно се помнят, но ще спомена един, който направо ме разби от смях:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt; …&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Абе той всяка сутрин пие кафе при леля Ваца!&lt;/li&gt;
&lt;li&gt;Леля Ваца?&lt;/li&gt;
&lt;li&gt;Да бе, на чашите пишело леля Ваца и то па да вземе да се окаже, че това било lavAzza&lt;br&gt;
…&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;И така нататък цели 4 часа старчески хумор, който на моменти “ти къса диафрагмата и слизаш на Септември(гара), за да ти присадят нова”.&lt;/p&gt;
&lt;p&gt;В крайна сметка пристигнахме в Монтана с около час закъснение, но все пак час, който мина бързо :) По този повод - ако пътувате в купе пълно със стари хора и има поне 2-ма дядовци, не съжалявайте, купона е гарантиран :-D&lt;/p&gt;</content:encoded><category>blog</category><category>travel</category></item><item><title>Тук?</title><link>https://bisko.be/posts/blog/post-2008-11-01/</link><guid isPermaLink="true">https://bisko.be/posts/blog/post-2008-11-01/</guid><description>История за един странен ден и покупката на DreamHost хостинг.</description><pubDate>Sat, 01 Nov 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Вчера беше странен ден… &lt;/p&gt;
&lt;p&gt;Сутринта, дори с лекото, късно тръгване, стигнах до работа навреме. Явно задръстването работеше в моя полза. Денят от своя страна продължи нормално до някъде към 1 часа следобед, когато Цветан ми прати линк към някаква промоция на DreamHost по случай 11-тия им рожден ден.&lt;br&gt;
Отворих я и се зачетох.. след всеки ред на таблицата с характеристиките на хостинга, очите ми ставаха все по-големи и по-лакоми (че то даже и лиги потекоха :D ).&lt;br&gt;
Набързо стана ясно, че това е нещото и ще се купи, НО изникна проблем - как да се плати. Аз имам карта с активирани електронни разплащания, ама нямам пари в нея, а пък Цветан има пари, но няма електронни разплащания - удряме на камък … или по-скоро гранит направо.&lt;/p&gt;
&lt;p&gt;Следваща стъпка - той ще ми прати пари през ePay.bg и аз ще платя.  Всичко точно, до момента в който се оказва, че аз там имам статус като някакъв келеш и дневния ми лимит е … 50лв за получаване. Бързо почвам да търся как да стана ‘познат’ потребител и оставам потресен от информацията:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Как да премина в по-високо ниво&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;За да преминете към ниво “2” - “познат клиент”, е необходимо да имате регистрирана банкова карта в своя потребителски профил, с която да платите поне 5 комунални сметки за ток, вода, телефон, парно и т.н през системата (плащането на предплатена услуга не се счита за плащане на комунална сметка).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ааайде бре! Поне 5 комунални сметки … какви са тез глупости. Да нямам собствена къща, за която да плащам тия сметки. Глупости на търкалета. Да бяха искали снимка на лична карта или нещо такова, да… ама това е прекалено, особено, ако ти трябва да прехвърлиш известно количество пари ей сега, на момента.&lt;/p&gt;
&lt;p&gt;Вече усещам как промоцията се изплъзва като насапунисана чаша от ръчичките ни. При това положение опираме до най-крайния вариант - той ще превде пари от Варна директно по сметката ми в Пощенска банка и се надяваме да стане работата. Давам му IBAN, той заминава да внася. Звъни ми след 25-30-40 минути: “преведох, казаха, че до 2 часа ще са отразени промените в и-банкирането”. Естествено при информацията за 2-та часа останах потресен, как може да стане цялата работа ‘на косъм’ и изчаквам 15 дъълги минути, влизам в e-postbank и вече с ЕЙ ТАКИВА очи и паднало чене виждам, че сумата е пристигнала. &lt;/p&gt;
&lt;p&gt;Трескаво отварям линка, който Цветан ми прати малко по-рано към кошницата в Google Checkout, попълвам данните си, цъкам Check out и готово… В този момент в главата ми напираха милиони въпросителни, как така тук няма никакви потвърждения на акаунта, както в Moneybookers или PayPal, не искат никакви тегления на суми или такива простотии, а просто си попълваш информацията цъкаш плати и готово… &lt;/p&gt;
&lt;p&gt;След това му хвърлих СМС, че съм платил и си хванах багажа и тръгнах към Централна гара, за да си ходя на Монтана. Там се видях с няколко ‘спътници’, взехме си билети и се качихме във влака. Тръгнахме, но не можех да чакам още 3 часа, за да разбера станало ли е наистина плащането и звъннах на Цветан, който потвърди, че всичко е нормално. Това свали паве от сърцето ми и си отдъхнах. &lt;/p&gt;
&lt;p&gt;От този ден следват 4 неща: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ePay са мизерници, заедно с PayPal и Moneybookers.&lt;/li&gt;
&lt;li&gt;Пощенска банка продължава да затвърждава мнението ми, че са правилния избор.&lt;/li&gt;
&lt;li&gt;Google както обикновено къртят миФки с опростените си процедури.&lt;/li&gt;
&lt;li&gt;Dreamhost ме кефят! (само нещо ъплоуда натам съксва много яко, но по тоя въпрос по-натам)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;П.П. Мамка му, вече дължа на Цветан 90 кинта :-D&lt;/p&gt;</content:encoded><category>blog</category><category>travel</category><category>random</category></item></channel></rss>