<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="https://dmitryfrank.com/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://dmitryfrank.com/feed.php">
        <title>Dmitry Frank articles</title>
        <description></description>
        <link>https://dmitryfrank.com/</link>
        <image rdf:resource="https://dmitryfrank.com/lib/tpl/arctic/images/favicon.ico" />
       <dc:date>2026-04-08T16:13:23+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/angular_data_exchange_cheatsheet?rev=1441451460&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/backup_u2f_token?rev=1686852686&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/better_error_handling_in_go?rev=1686211540&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/bulgaria_freelance_taxes?rev=1744699594&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/heap_on_embedded_devices?rev=1587973984&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/how_i_ended_up_writing_my_own_kernel?rev=1686852955&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/i_love_go?rev=1686510622&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces?rev=1442867014&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/js_closures?rev=1686510248&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/lisp_on_mcu?rev=1585665768&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/mocking_time_in_go?rev=1686211525&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/oop_in_c?rev=1678350899&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/rust_module_system_encourages_bad_practices?rev=1686942810&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/shell_shortcuts?rev=1678351019&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/socketio_passport_testing?rev=1443292218&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/treating_email_more_like_a_password_manager?rev=1686852540&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/unit_testing_embedded_c_applications?rev=1678350849&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/vim_project_code_navigation?rev=1446924518&amp;do=diff"/>
                <rdf:li rdf:resource="https://dmitryfrank.com/articles/yesterday_cover?rev=1761419663&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://dmitryfrank.com/lib/tpl/arctic/images/favicon.ico">
        <title>Dmitry Frank</title>
        <link>https://dmitryfrank.com/</link>
        <url>https://dmitryfrank.com/lib/tpl/arctic/images/favicon.ico</url>
    </image>
    <item rdf:about="https://dmitryfrank.com/articles/angular_data_exchange_cheatsheet?rev=1441451460&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-09-05T11:11:00+00:00</dc:date>
        <title>Angular communication cheatsheet</title>
        <link>https://dmitryfrank.com/articles/angular_data_exchange_cheatsheet?rev=1441451460&amp;do=diff</link>
        <description>Angular communication cheatsheet

I'm learning AngularJS, and sometimes, question arises, like, what is the most appropriate way to exchange data between Angular's entities. Sometimes it's not so obvious at the first sight, so, in this article, I tried to summarize various solutions I've came up with.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/backup_u2f_token?rev=1686852686&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-15T18:11:26+00:00</dc:date>
        <title>Reliable, Secure and Universal Backup for U2F Token</title>
        <link>https://dmitryfrank.com/articles/backup_u2f_token?rev=1686852686&amp;do=diff</link>
        <description>Reliable, Secure and Universal Backup for U2F Token

I really love the security level U2F provides, but together with security, we have to think carefully about the backup and recovery plan. It would totally suck to get locked out of my accounts if something happens with my U2F token. At the same time, it doesn't make sense to have a backup which compromises U2F security.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/better_error_handling_in_go?rev=1686211540&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-08T08:05:40+00:00</dc:date>
        <title>Why not improve error handling in our Go projects?</title>
        <link>https://dmitryfrank.com/articles/better_error_handling_in_go?rev=1686211540&amp;do=diff</link>
        <description>Why not improve error handling in our Go projects?

As I was saying already, I love Go, I really do. And in particular I like the minimalistic approach to error handling: no exceptions, each caller should check the error explicitly and deal with it as it wants.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/bulgaria_freelance_taxes?rev=1744699594&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-04-15T06:46:34+00:00</dc:date>
        <title>Bulgaria Freelance Taxes: Detailed Breakdown</title>
        <link>https://dmitryfrank.com/articles/bulgaria_freelance_taxes?rev=1744699594&amp;do=diff</link>
        <description>Bulgaria Freelance Taxes: Detailed Breakdown

This article is a living document; I try to update it as time goes. As of 2024, it is up to date

In the past few years I've been living in Bulgaria, working remotely as a software engineer (technically,</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/heap_on_embedded_devices?rev=1587973984&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-04-27T07:53:04+00:00</dc:date>
        <title>Visualizing the Heap on Embedded Devices</title>
        <link>https://dmitryfrank.com/articles/heap_on_embedded_devices?rev=1587973984&amp;do=diff</link>
        <description>Visualizing the Heap on Embedded Devices

The heap on a device is usually a kind of black box: heap API rarely provides anything more than just returning free space size, and quite often it doesn't provide even that (since C standard doesn't oblige it to). We have little idea of the fragmentation (in particular, we're interested in longest contiguous free chunk of memory) and the behaviour of the allocator in general. But in the resource-limited circumstances we're highly concerned about being m…</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/how_i_ended_up_writing_my_own_kernel?rev=1686852955&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-15T18:15:55+00:00</dc:date>
        <title>How I ended up writing a new real-time kernel</title>
        <link>https://dmitryfrank.com/articles/how_i_ended_up_writing_my_own_kernel?rev=1686852955&amp;do=diff</link>
        <description>How I ended up writing a new real-time kernel

You're reading the original article in English. You can as well read the translation in Russian.

----------

I work with embedded stuff for several years: our company develops and manufactures car trip computers, battery chargers, and other car-related electronic devices.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/i_love_go?rev=1686510622&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-11T19:10:22+00:00</dc:date>
        <title>Here's why I love Go</title>
        <link>https://dmitryfrank.com/articles/i_love_go?rev=1686510622&amp;do=diff</link>
        <description>Here's why I love Go

Many years ago, I've been waiting for a language like Go. Back then, I was primarily working with C (for microcontrollers), and C++/Java/Python/etc (for bigger machines). These are great tools, but still I was longing for compiled, statically typed, memory-safe (and garbage collected) language, which compiles for the target platform machine code, and has a big enough community.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces?rev=1442867014&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-09-21T20:23:34+00:00</dc:date>
        <title>Indent with tabs, align with spaces</title>
        <link>https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces?rev=1442867014&amp;do=diff</link>
        <description>Indent with tabs, align with spaces

Preface

When I was much younger, I used to use tabs in my code. After some time, I started getting headaches because the code gets messed up if some editor/viewer uses different tab size. For example, this is the code I wrote assuming tab to be 3 characters:</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/js_closures?rev=1686510248&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-11T19:04:08+00:00</dc:date>
        <title>How JavaScript closures work under the hood</title>
        <link>https://dmitryfrank.com/articles/js_closures?rev=1686510248&amp;do=diff</link>
        <description>How JavaScript closures work under the hood

You're reading the original article in English. You can as well read the translations:

	*  Russian
	*  Chinese
	*  Japanese
	*  Vietnamese

If you have translated the article to different language, please leave a comment or write me an email, so that I can update the list. Thank you.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/lisp_on_mcu?rev=1585665768&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-03-31T14:42:48+00:00</dc:date>
        <title>Let's Run Lisp on a Microcontroller</title>
        <link>https://dmitryfrank.com/articles/lisp_on_mcu?rev=1585665768&amp;do=diff</link>
        <description>Let's Run Lisp on a Microcontroller

I was inexplicably amazed by Lisp since the first day I've seen how Lisp programs look.


(define (factorial n)
  (if (= n 1)
      1
      (* n (factorial (- n 1)))))


My feelings still stay, although that's probably because I never had a chance to use Lisp for real, so I don't know enough to hate it.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/mocking_time_in_go?rev=1686211525&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-08T08:05:25+00:00</dc:date>
        <title>Mocking time and testing event loops in Go</title>
        <link>https://dmitryfrank.com/articles/mocking_time_in_go?rev=1686211525&amp;do=diff</link>
        <description>Mocking time and testing event loops in Go

Initially I wanted to write articles on those two topics separately (mocking time and testing event loops), but during the process I realized that the things I want to talk about are too interrelated: when I need to mock time, it's usually to test some event loop with it, and when I test event loops, typically mocked time is also involved in that.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/oop_in_c?rev=1678350899&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-03-09T08:34:59+00:00</dc:date>
        <title>Object-oriented techniques in C</title>
        <link>https://dmitryfrank.com/articles/oop_in_c?rev=1678350899&amp;do=diff</link>
        <description>Object-oriented techniques in C

Although the techniques described below won't be very popular nowadays (after all, why bother using C if we're going to write object-oriented code?), they are still quite relevant for embedded systems and other low-level things (kernel development, etc). For example, lots of Linux Kernel subsystems use similar approach.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/rust_module_system_encourages_bad_practices?rev=1686942810&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-16T19:13:30+00:00</dc:date>
        <title>Rust Module System Encourages Poor Practices (Comparing to Go)</title>
        <link>https://dmitryfrank.com/articles/rust_module_system_encourages_bad_practices?rev=1686942810&amp;do=diff</link>
        <description>Rust Module System Encourages Poor Practices (Comparing to Go)

Note that I'm not gonna be saying that it's confusing, hard to understand etc. Those things would be subjective, and even if I agree that it's not too intuitive, it's still totally learnable and not a big deal. In this article I'm gonna be talking about matters which are more objective.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/shell_shortcuts?rev=1678351019&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-03-09T08:36:59+00:00</dc:date>
        <title>Fuzzy bookmarks for your shell</title>
        <link>https://dmitryfrank.com/articles/shell_shortcuts?rev=1678351019&amp;do=diff</link>
        <description>Fuzzy bookmarks for your shell

I do a lot of things in shell, and I'd like to have an easy and convenient way to keep a list of shortcuts/bookmarks. I wasn't satisfied by all of the existing solutions I found, but eventually I've come across a great, universal tool:</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/socketio_passport_testing?rev=1443292218&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-09-26T18:30:18+00:00</dc:date>
        <title>Testing Socket.io + Passport.socketio with Mocha</title>
        <link>https://dmitryfrank.com/articles/socketio_passport_testing?rev=1443292218&amp;do=diff</link>
        <description>Testing Socket.io + Passport.socketio with Mocha

The usage of real-time socket connection with authentication data seems quite regular thing to me. And, personally, I find it very strange that this topic receives so little interest. While I was struggling with it, the only related publication I found is the blog post by Liam Kaufman:</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/treating_email_more_like_a_password_manager?rev=1686852540&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-15T18:09:00+00:00</dc:date>
        <title>Treating Email More Like a Password Manager</title>
        <link>https://dmitryfrank.com/articles/treating_email_more_like_a_password_manager?rev=1686852540&amp;do=diff</link>
        <description>Treating Email More Like a Password Manager

There is a natural tendency that communication tools, which never meant to be security devices, end up being used heavily for security purposes. This happened to both emails and mobile phones. You know, SMS to a mobile phone is still sometimes the only option for a second factor authentication, despite a lot of evidence that it's a very bad idea due to SIM swap attacks (check e.g.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/unit_testing_embedded_c_applications?rev=1678350849&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-03-09T08:34:09+00:00</dc:date>
        <title>Unit-testing (embedded) C applications with Ceedling</title>
        <link>https://dmitryfrank.com/articles/unit_testing_embedded_c_applications?rev=1678350849&amp;do=diff</link>
        <description>Unit-testing (embedded) C applications with Ceedling

Just like a lot of other embedded software engineers, I used to ship my embedded applications to production without testing them properly. Only some manual tests were done. I was under the impression that there's no real way to test them: you know, embedded applications run in a custom hardware and interact with this specific hardware heavily, which makes them not so easy to test automatically.</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/vim_project_code_navigation?rev=1446924518&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-11-07T19:28:38+00:00</dc:date>
        <title>Vim: convenient code navigation for your projects</title>
        <link>https://dmitryfrank.com/articles/vim_project_code_navigation?rev=1446924518&amp;do=diff</link>
        <description>Vim: convenient code navigation for your projects

I use Vim as my primary text editor.

Vim is not perfect. It is great in some aspects, but it sucks in others.

There are lots of IDEs out there, and some time ago I even tried to switch to an IDE, but I failed, even though most IDEs have Vim-emulation mode. Nothing else can give that true</description>
    </item>
    <item rdf:about="https://dmitryfrank.com/articles/yesterday_cover?rev=1761419663&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-25T19:14:23+00:00</dc:date>
        <title>Yesterday (amateur cover with my own silly lyrics)</title>
        <link>https://dmitryfrank.com/articles/yesterday_cover?rev=1761419663&amp;do=diff</link>
        <description>Yesterday (amateur cover with my own silly lyrics)

I mess with guitar as a hobby sometimes. I never really dabbed into writing lyrics, but this is what I suddenly came up with in September 2025:



The backastory for the lyrics is kinda mysterious. In case you're interested, here we go.</description>
    </item>
</rdf:RDF>
