{"version":"https://jsonfeed.org/version/1.1","title":"Fekir&#39;s Blog","home_page_url":"https://fekir.info/","feed_url":"https://fekir.info/feed/feed.json","description":"Recent content on Fekir&#39;s Blog","language":"en-US","items":[{"id":"https://fekir.info/post/tui-environment-for-linux/","content_text":"a small list of TUI programs for Linux systems","url":"https://fekir.info/post/tui-environment-for-linux/"},{"id":"https://fekir.info/post/nfc-reader-and-ricaricami/","content_text":"NFC cards around us","url":"https://fekir.info/post/nfc-reader-and-ricaricami/"},{"id":"https://fekir.info/post/rockbox-on-ipod/","content_text":"Why would I install Rockbox on an iPod","url":"https://fekir.info/post/rockbox-on-ipod/"},{"id":"https://fekir.info/post/jailbreak-kindle-touch/","content_text":"Digital signatures and certificates are a time bomb","url":"https://fekir.info/post/jailbreak-kindle-touch/"},{"id":"https://fekir.info/post/bitfields-in-c-and-cpp/","content_text":"Bit fields, an underspecified feature","url":"https://fekir.info/post/bitfields-in-c-and-cpp/"},{"id":"https://fekir.info/post/configure-firefox/","content_text":"How I configure Firefox","url":"https://fekir.info/post/configure-firefox/"},{"id":"https://fekir.info/post/recursive-mutex/","content_text":"What are the advantages and disadvantages of a recursive mutex?","url":"https://fekir.info/post/recursive-mutex/"},{"id":"https://fekir.info/post/templated-constructor/","content_text":"A constructor that no one can call, and possible workarounds","url":"https://fekir.info/post/templated-constructor/"},{"id":"https://fekir.info/post/home-made-system-monitor/","content_text":"I wanted to monitor a couple of systems, but did not find something that covers my need","url":"https://fekir.info/post/home-made-system-monitor/"},{"id":"https://fekir.info/post/news-feed/","content_text":"RSS, Atom feeds, whatever your walled garden provides, and now JSON feeds","url":"https://fekir.info/post/news-feed/"},{"id":"https://fekir.info/post/colored-error-messages-in-make/","content_text":"How to get a colored output if a command fails","url":"https://fekir.info/post/colored-error-messages-in-make/"},{"id":"https://fekir.info/post/implement-type-erased-container-and-iterator/","content_text":"Type erased container with type-erased iterator","url":"https://fekir.info/post/implement-type-erased-container-and-iterator/"},{"id":"https://fekir.info/post/implement-random-access-iterator/","content_text":"Different techniques for reducing code bloat","url":"https://fekir.info/post/implement-random-access-iterator/"},{"id":"https://fekir.info/post/tee-on-steroids-with-awk/","content_text":"I should use awk more often, in one go, it replaced multiple complex shell scripts and programs","url":"https://fekir.info/post/tee-on-steroids-with-awk/"},{"id":"https://fekir.info/post/disable-vctip-for-good/","content_text":"How to disable vctp.exe on any system","url":"https://fekir.info/post/disable-vctip-for-good/"},{"id":"https://fekir.info/post/change-metadata-in-mp4-files/","content_text":"Change metadata settings in mp4 files","url":"https://fekir.info/post/change-metadata-in-mp4-files/"},{"id":"https://fekir.info/post/cautionary-tales-online-accounts/","content_text":"empty","url":"https://fekir.info/post/cautionary-tales-online-accounts/"},{"id":"https://fekir.info/post/automated-text-editing/","content_text":"An overview of different tools for text editing in the terminal","url":"https://fekir.info/post/automated-text-editing/"},{"id":"https://fekir.info/post/future-of-computing-does-not-look-bright/","content_text":"The future of computing, the golden era is over","url":"https://fekir.info/post/future-of-computing-does-not-look-bright/"},{"id":"https://fekir.info/post/considerations-on-user-interfaces/","content_text":"Some personal notes on user interfaces on different systems","url":"https://fekir.info/post/considerations-on-user-interfaces/"},{"id":"https://fekir.info/post/more-constexpr-with-optional-and-view-types/","content_text":"Use optional (and variant) for creating constexpr constants","url":"https://fekir.info/post/more-constexpr-with-optional-and-view-types/"},{"id":"https://fekir.info/post/more-constexpr-with-variant-and-view-types/","content_text":"Use variant and view types for creating constexpr constants","url":"https://fekir.info/post/more-constexpr-with-variant-and-view-types/"},{"id":"https://fekir.info/post/extension-methods-in-cpp/","content_text":"What are they, why they are not part of C++, and possible alternatives","url":"https://fekir.info/post/extension-methods-in-cpp/"},{"id":"https://fekir.info/post/download-java-dependencies/","content_text":"Without Gradle, Maven or other build systems","url":"https://fekir.info/post/download-java-dependencies/"},{"id":"https://fekir.info/post/recovery-system-personalized-live-distribution/","content_text":"Why I created my personalized live distribution and use it as a recovery system","url":"https://fekir.info/post/recovery-system-personalized-live-distribution/"},{"id":"https://fekir.info/post/parser-improvements/","content_text":"Some notes on parsers; fuzzing and recursion","url":"https://fekir.info/post/parser-improvements/"},{"id":"https://fekir.info/post/pull-parser/","content_text":"Some notes on pull parsers; advantages and disadvantages","url":"https://fekir.info/post/pull-parser/"},{"id":"https://fekir.info/post/sax-parser/","content_text":"Some notes on SAX parsers; advantages and disadvantages","url":"https://fekir.info/post/sax-parser/"},{"id":"https://fekir.info/post/dom-parser/","content_text":"Some notes on DOM parsers; advantages and disadvantages","url":"https://fekir.info/post/dom-parser/"},{"id":"https://fekir.info/post/constexpr-type_info-name/","content_text":"A compile time alternative to std::type_info::name","url":"https://fekir.info/post/constexpr-type_info-name/"},{"id":"https://fekir.info/post/how-to-assemble-an-android-program/","content_text":"Create an android program in c++, java, kotlin in cmake","url":"https://fekir.info/post/how-to-assemble-an-android-program/"},{"id":"https://fekir.info/post/helper-functions-for-handwritten-vtable/","content_text":"Some building blocks for creating a class with type-erasure","url":"https://fekir.info/post/helper-functions-for-handwritten-vtable/"},{"id":"https://fekir.info/post/owning-type-erasure-on-the-stack/","content_text":"A generic type-erased owning-class that does not allocate memory","url":"https://fekir.info/post/owning-type-erasure-on-the-stack/"},{"id":"https://fekir.info/post/string-parameters/","content_text":"How to pass strings around, by value, reference, or something else?","url":"https://fekir.info/post/string-parameters/"},{"id":"https://fekir.info/post/compile-time-test-suite/","content_text":"A minimal compile time test suite for testing non-exported functionalities","url":"https://fekir.info/post/compile-time-test-suite/"},{"id":"https://fekir.info/post/change-audio-settings-mkv/","content_text":"Change default audio tracks and other settings","url":"https://fekir.info/post/change-audio-settings-mkv/"},{"id":"https://fekir.info/post/drive-partitioning/","content_text":"I just wanted to partition a new drive, and discovered that the one formatted in my PC is not formatted correctly","url":"https://fekir.info/post/drive-partitioning/"},{"id":"https://fekir.info/post/abuse-odr-violations/","content_text":"How to abuse ODR violations to iteratively clean up your codebase","url":"https://fekir.info/post/abuse-odr-violations/"},{"id":"https://fekir.info/post/redirect-output-to-file-in-powershell/","content_text":"How to save the output of a command to a file with no surprises","url":"https://fekir.info/post/redirect-output-to-file-in-powershell/"},{"id":"https://fekir.info/post/full-system-backups/","content_text":"How to do a full system backup","url":"https://fekir.info/post/full-system-backups/"},{"id":"https://fekir.info/post/debian-pinning-packages/","content_text":"How to cherry-pick packages from different repositories","url":"https://fekir.info/post/debian-pinning-packages/"},{"id":"https://fekir.info/post/windows-server-on-a-laptop/","content_text":"Install Windows Server 2025 on a laptop where Windows 11 is officially not supported","url":"https://fekir.info/post/windows-server-on-a-laptop/"},{"id":"https://fekir.info/post/cpp-class-generator/","content_text":"How to use macros for generating classes from a given a list of function signatures","url":"https://fekir.info/post/cpp-class-generator/"},{"id":"https://fekir.info/post/file-optimizations/","content_text":"Reduce the size of different file types with no loss in quality","url":"https://fekir.info/post/file-optimizations/"},{"id":"https://fekir.info/post/execute-programs-in-parallel/","content_text":"How to parallelize an existing program without changing it","url":"https://fekir.info/post/execute-programs-in-parallel/"},{"id":"https://fekir.info/post/constructor-and-related-functions/","content_text":"Constructors, destructor, and swap; an overview","url":"https://fekir.info/post/constructor-and-related-functions/"},{"id":"https://fekir.info/post/vpn-wireguard/","content_text":"Create your personal private network with WireGuard","url":"https://fekir.info/post/vpn-wireguard/"},{"id":"https://fekir.info/post/short-string-class/","content_text":"An optimization for reducing memory usage when working with many short strings","url":"https://fekir.info/post/short-string-class/"},{"id":"https://fekir.info/post/switch-between-windows-and-posix-shells/","content_text":"Switch between Windows and POSIX shells","url":"https://fekir.info/post/switch-between-windows-and-posix-shells/"},{"id":"https://fekir.info/post/windows-paths-what-a-mess/","content_text":"Handling uncommon Windows paths from the shell","url":"https://fekir.info/post/windows-paths-what-a-mess/"},{"id":"https://fekir.info/post/replace-files-in-android-program/","content_text":"How to replace files in an android program","url":"https://fekir.info/post/replace-files-in-android-program/"},{"id":"https://fekir.info/post/configure-thunderbird/","content_text":"How I configure Thunderbird","url":"https://fekir.info/post/configure-thunderbird/"},{"id":"https://fekir.info/post/fake-time-in-virtualbox/","content_text":"How to let the OS think it's living in the past","url":"https://fekir.info/post/fake-time-in-virtualbox/"},{"id":"https://fekir.info/post/fake-network-card-on-linux/","content_text":"Create a dummy network card with a fixed MAC address","url":"https://fekir.info/post/fake-network-card-on-linux/"},{"id":"https://fekir.info/post/register-functions-at-link-time/","content_text":"How to register functions without executing any code at runtime","url":"https://fekir.info/post/register-functions-at-link-time/"},{"id":"https://fekir.info/post/copy-application-folder-with-adb/","content_text":"How to copy the application folder with adb from an Android device","url":"https://fekir.info/post/copy-application-folder-with-adb/"},{"id":"https://fekir.info/post/cpp-test-suite-in-100-lines-of-code/","content_text":"A small test suite in C++ for fun","url":"https://fekir.info/post/cpp-test-suite-in-100-lines-of-code/"},{"id":"https://fekir.info/post/virtual-functions-overloads-default-parameters-pick-one/","content_text":"virtual functions, overloads, and default parameters do not always play well together. Better pick only one technique","url":"https://fekir.info/post/virtual-functions-overloads-default-parameters-pick-one/"},{"id":"https://fekir.info/post/conditional-compilation/","content_text":"How to use feature flags and avoid common pitfalls","url":"https://fekir.info/post/conditional-compilation/"},{"id":"https://fekir.info/post/query-number-of-elements-in-array/","content_text":"How to get the number of elements of an array in C and C++","url":"https://fekir.info/post/query-number-of-elements-in-array/"},{"id":"https://fekir.info/post/recover-files-damaged-media/","content_text":"Recover files from damaged drives and discs","url":"https://fekir.info/post/recover-files-damaged-media/"},{"id":"https://fekir.info/post/remove-noise-from-audio-files/","content_text":"How to remove noise from video and audio files","url":"https://fekir.info/post/remove-noise-from-audio-files/"},{"id":"https://fekir.info/post/windows-server-as-desktop/","content_text":"Use Windows Server 2022 as a Desktop environment","url":"https://fekir.info/post/windows-server-as-desktop/"},{"id":"https://fekir.info/post/self-hashing-code-in-cpp/","content_text":"How to hash the current implementation","url":"https://fekir.info/post/self-hashing-code-in-cpp/"},{"id":"https://fekir.info/post/reuse-an-old-smartphone/","content_text":"One of the many ways of reusing older hardware","url":"https://fekir.info/post/reuse-an-old-smartphone/"},{"id":"https://fekir.info/post/a-computer-as-webserver/","content_text":"A quick configuration guide for lighttpd","url":"https://fekir.info/post/a-computer-as-webserver/"},{"id":"https://fekir.info/post/lazy-initialization/","content_text":"Sometime, the easiest way to avoid concurrency issue is to not use concurrency facilities","url":"https://fekir.info/post/lazy-initialization/"},{"id":"https://fekir.info/post/how-to-assemble-a-java-program/","content_text":"An introduction to how to compile and execute Java programs by hand","url":"https://fekir.info/post/how-to-assemble-a-java-program/"},{"id":"https://fekir.info/post/work-with-pdf-files/","content_text":"A collection of tools and commands for working with PDF files","url":"https://fekir.info/post/work-with-pdf-files/"},{"id":"https://fekir.info/post/tui-programs-for-windows/","content_text":"Some TUI programs for Windows","url":"https://fekir.info/post/tui-programs-for-windows/"},{"id":"https://fekir.info/post/generic-owning-type-erasure/","content_text":"the simplest approach to an owning type erased class","url":"https://fekir.info/post/generic-owning-type-erasure/"},{"id":"https://fekir.info/post/mc-cheat-sheet-2/","content_text":"Quick start in mc","url":"https://fekir.info/post/mc-cheat-sheet-2/"},{"id":"https://fekir.info/post/introduce-chrono/","content_text":"Short introduction about std::chrono","url":"https://fekir.info/post/introduce-chrono/"},{"id":"https://fekir.info/post/mc-cheat-sheet/","content_text":"Quick start in mc","url":"https://fekir.info/post/mc-cheat-sheet/"},{"id":"https://fekir.info/post/query-properties-of-class/","content_text":"How to query member functions, typedefs, member variables and free functions","url":"https://fekir.info/post/query-properties-of-class/"},{"id":"https://fekir.info/post/passwords/","content_text":"A comparison about passwords, biometrical data, tokens, passkey and other login methods","url":"https://fekir.info/post/passwords/"},{"id":"https://fekir.info/post/destructure-cpp-function/","content_text":"How to destructure functions, functions pointers, lambdas, member functions, and abominable functions","url":"https://fekir.info/post/destructure-cpp-function/"},{"id":"https://fekir.info/post/mount-archives/","content_text":"On Windows and GNU/Linux systems","url":"https://fekir.info/post/mount-archives/"},{"id":"https://fekir.info/post/mount-folders/","content_text":"On Windows and GNU/Linux systems","url":"https://fekir.info/post/mount-folders/"},{"id":"https://fekir.info/post/owning-type-erasure-for-simple-types/","content_text":"For simple types, it is possible to create a lightweight type-erased class. Unfortunately, there are many gotchas for implementing something that does not trigger undefined behavior.","url":"https://fekir.info/post/owning-type-erasure-for-simple-types/"},{"id":"https://fekir.info/post/do-something-after-return-statement/","content_text":"A simple problem, with a not-always-trivial solution","url":"https://fekir.info/post/do-something-after-return-statement/"},{"id":"https://fekir.info/post/comma-operator-in-cpp/","content_text":"When to use it, when to avoid it","url":"https://fekir.info/post/comma-operator-in-cpp/"},{"id":"https://fekir.info/post/a-computer-for-retrogaming/","content_text":"One of the many ways of reusing older hardware","url":"https://fekir.info/post/a-computer-for-retrogaming/"},{"id":"https://fekir.info/post/git-and-binary-files/","content_text":"Some alternate solution to storing binary files directly into git","url":"https://fekir.info/post/git-and-binary-files/"},{"id":"https://fekir.info/post/detect-transparent-comparator/","content_text":"How to detect if a comparator is transparent, and other tag types","url":"https://fekir.info/post/detect-transparent-comparator/"},{"id":"https://fekir.info/post/insert-elements-in-map-efficiently/","content_text":"Insert an element in a map efficiently","url":"https://fekir.info/post/insert-elements-in-map-efficiently/"},{"id":"https://fekir.info/post/prefer-function-overloads-to-variant/","content_text":"Considerations about using std::variant as a function parameter","url":"https://fekir.info/post/prefer-function-overloads-to-variant/"},{"id":"https://fekir.info/post/mapping-types-in-cpp/","content_text":"Manually map one type to another","url":"https://fekir.info/post/mapping-types-in-cpp/"},{"id":"https://fekir.info/post/dependency-injection-in-cmake/","content_text":"Apply the dependency injection pattern to libraries to avoid duplicate builds","url":"https://fekir.info/post/dependency-injection-in-cmake/"},{"id":"https://fekir.info/post/bookmarklets/","content_text":"An alternative to browser extension; execute your JavaScript function on random webpages","url":"https://fekir.info/post/bookmarklets/"},{"id":"https://fekir.info/post/git-parent-branch/","content_text":"git does not have parent branches, but sometimes we want to find where a branch came from","url":"https://fekir.info/post/git-parent-branch/"},{"id":"https://fekir.info/post/backup-webpage/","content_text":"How to secure webpages offline","url":"https://fekir.info/post/backup-webpage/"},{"id":"https://fekir.info/post/comparing-ebook-readers/","content_text":"How I choose my next ebook reader","url":"https://fekir.info/post/comparing-ebook-readers/"},{"id":"https://fekir.info/post/cmake-msvc-and-ninja/","content_text":"Configure a CMake project with MSVC and Ninja","url":"https://fekir.info/post/cmake-msvc-and-ninja/"},{"id":"https://fekir.info/post/emacs-cheat-sheet-2/","content_text":"Quick start in emacs","url":"https://fekir.info/post/emacs-cheat-sheet-2/"},{"id":"https://fekir.info/post/reproducible-zip-archives/","content_text":"How to create reproducible zip archives in Python","url":"https://fekir.info/post/reproducible-zip-archives/"},{"id":"https://fekir.info/post/force-null-check/","content_text":"is it possible to force programmers to check for nullptr before dereferencing?","url":"https://fekir.info/post/force-null-check/"},{"id":"https://fekir.info/post/emacs-cheat-sheet/","content_text":"Quick start in Emacs","url":"https://fekir.info/post/emacs-cheat-sheet/"},{"id":"https://fekir.info/post/tmux-cheat-sheet/","content_text":"Quick start with tmux","url":"https://fekir.info/post/tmux-cheat-sheet/"},{"id":"https://fekir.info/post/android-release-notes/","content_text":"An overview of changes (I more or less care and have noticed) that have been introduced in different Android versions","url":"https://fekir.info/post/android-release-notes/"},{"id":"https://fekir.info/post/verify-size-of-webpage/","content_text":"Automatically verify how big a webpage is","url":"https://fekir.info/post/verify-size-of-webpage/"},{"id":"https://fekir.info/post/blacklist-dependencies-in-cmake/","content_text":"Programmatically verify with CMake target dependencies","url":"https://fekir.info/post/blacklist-dependencies-in-cmake/"},{"id":"https://fekir.info/post/wine-and-x/","content_text":"start a new X session for wine","url":"https://fekir.info/post/wine-and-x/"},{"id":"https://fekir.info/post/a-computer-as-a-home-media-center/","content_text":"One of the many ways of reusing older hardware","url":"https://fekir.info/post/a-computer-as-a-home-media-center/"},{"id":"https://fekir.info/post/create-dummy-deb-packages/","content_text":"How to create packages for managing different environments","url":"https://fekir.info/post/create-dummy-deb-packages/"},{"id":"https://fekir.info/post/windows-release-notes/","content_text":"An overview of changes that have been introduced since Windows XP","url":"https://fekir.info/post/windows-release-notes/"},{"id":"https://fekir.info/post/eink-photoframe/","content_text":"Turning an old Kindle into a digital photo frame","url":"https://fekir.info/post/eink-photoframe/"},{"id":"https://fekir.info/post/dynamic_cast-and-multiple-inheritance/","content_text":"I am not a big fan of class hierarchies, but sometimes you have to fight fire with fire and... add more class hierarchies.","url":"https://fekir.info/post/dynamic_cast-and-multiple-inheritance/"},{"id":"https://fekir.info/post/magic-number-for-runtime-checks/","content_text":"Magic numbers should be a  last-resort technique for detecting errors at runtime","url":"https://fekir.info/post/magic-number-for-runtime-checks/"},{"id":"https://fekir.info/post/let-it-snow/","content_text":"Custom CSS for Christmas time","url":"https://fekir.info/post/let-it-snow/"},{"id":"https://fekir.info/post/micro-optimizations/","content_text":"Results of a discussion about micro-optimizations","url":"https://fekir.info/post/micro-optimizations/"},{"id":"https://fekir.info/post/mimick-mozilla-prism-with-profiles-and-kde/","content_text":"How to create local webapps","url":"https://fekir.info/post/mimick-mozilla-prism-with-profiles-and-kde/"},{"id":"https://fekir.info/post/when-you-cannot-call-hidden-friends-in-cpp/","content_text":"Sometimes hidden friends are too hidden, and you cannot call them directly","url":"https://fekir.info/post/when-you-cannot-call-hidden-friends-in-cpp/"},{"id":"https://fekir.info/post/how-to-write-friend-functions/","content_text":"How to write friend functions. It is not always as easy as it seems","url":"https://fekir.info/post/how-to-write-friend-functions/"},{"id":"https://fekir.info/post/showcase/","content_text":"The description of this page.","url":"https://fekir.info/post/showcase/"},{"id":"https://fekir.info/post/decltype-lambda/","content_text":"A nice addition since C++20","url":"https://fekir.info/post/decltype-lambda/"},{"id":"https://fekir.info/post/extract-tokens-from-microsoft-authenticator/","content_text":"How to take advantage of root permission for backing up user data","url":"https://fekir.info/post/extract-tokens-from-microsoft-authenticator/"},{"id":"https://fekir.info/post/type-erased-view-types-in-cpp/","content_text":"When writing a virtual table by hand is beneficial","url":"https://fekir.info/post/type-erased-view-types-in-cpp/"},{"id":"https://fekir.info/post/considerations-about-ios/","content_text":"Should I buy an iPhone?","url":"https://fekir.info/post/considerations-about-ios/"},{"id":"https://fekir.info/post/problematic-pattern-regex/","content_text":"Transform code with simple regexes","url":"https://fekir.info/post/problematic-pattern-regex/"},{"id":"https://fekir.info/post/toolchain-file-in-cmake/","content_text":"Some notes about toolchain files","url":"https://fekir.info/post/toolchain-file-in-cmake/"},{"id":"https://fekir.info/post/organize-audio-library/","content_text":"Music","url":"https://fekir.info/post/organize-audio-library/"},{"id":"https://fekir.info/post/undefined-behavior-the-ugly/","content_text":"Undefined behavior, advantages and disadvantages","url":"https://fekir.info/post/undefined-behavior-the-ugly/"},{"id":"https://fekir.info/post/write-custom-virtual-table-in-cpp/","content_text":"When writing a virtual table by hand is beneficial","url":"https://fekir.info/post/write-custom-virtual-table-in-cpp/"},{"id":"https://fekir.info/post/smart-devices/","content_text":"List of failures","url":"https://fekir.info/post/smart-devices/"},{"id":"https://fekir.info/post/word-cloud/","content_text":"A static word cloud with HTML and CSS","url":"https://fekir.info/post/word-cloud/"},{"id":"https://fekir.info/post/optional-imports-in-java/","content_text":"Different approaches for handling optional dependencies in Java","url":"https://fekir.info/post/optional-imports-in-java/"},{"id":"https://fekir.info/post/sad-state-of-the-web/","content_text":"the sad state of the web","url":"https://fekir.info/post/sad-state-of-the-web/"},{"id":"https://fekir.info/post/write-programs-for-android-without-writing-apps/","content_text":"Avoid Java and Android Studio for writing simple programs","url":"https://fekir.info/post/write-programs-for-android-without-writing-apps/"},{"id":"https://fekir.info/post/disk-power-management/","content_text":"Spin down your harddrives","url":"https://fekir.info/post/disk-power-management/"},{"id":"https://fekir.info/post/merge-video-files/","content_text":"How to merge (append) mkv files and avoid most common errors","url":"https://fekir.info/post/merge-video-files/"},{"id":"https://fekir.info/post/compile-time-optimizations-in-java/","content_text":"Some static analysis on bytecode","url":"https://fekir.info/post/compile-time-optimizations-in-java/"},{"id":"https://fekir.info/post/analyze-configure-times-with-cmake/","content_text":"How to use the integrated profiling options","url":"https://fekir.info/post/analyze-configure-times-with-cmake/"},{"id":"https://fekir.info/post/restore-efi-partition-with-grub/","content_text":"How to create an EFI partition with GRUB","url":"https://fekir.info/post/restore-efi-partition-with-grub/"},{"id":"https://fekir.info/post/customize-powershell/","content_text":"Customize PowerShell","url":"https://fekir.info/post/customize-powershell/"},{"id":"https://fekir.info/post/clean-zip-archives/","content_text":"Clean zip archives from hidden files","url":"https://fekir.info/post/clean-zip-archives/"},{"id":"https://fekir.info/post/vi-cheat-sheet/","content_text":"Quick start in vi-like editors","url":"https://fekir.info/post/vi-cheat-sheet/"},{"id":"https://fekir.info/post/analyze-build-times-with-clang/","content_text":"How to use -ftime-trace","url":"https://fekir.info/post/analyze-build-times-with-clang/"},{"id":"https://fekir.info/post/automate-git-interactive-add/","content_text":"How to automate an interactive git add","url":"https://fekir.info/post/automate-git-interactive-add/"},{"id":"https://fekir.info/post/git-aliases-gotcha/","content_text":"a couple of things to look for when adding new aliases to git","url":"https://fekir.info/post/git-aliases-gotcha/"},{"id":"https://fekir.info/post/declare-function-pointers/","content_text":"Multiple alternatives for writing function pointers","url":"https://fekir.info/post/declare-function-pointers/"},{"id":"https://fekir.info/post/webserver-in-php/","content_text":"The description of this page.","url":"https://fekir.info/post/webserver-in-php/"},{"id":"https://fekir.info/post/linux-cpp-toolbox/","content_text":"A list of tools for developing","url":"https://fekir.info/post/linux-cpp-toolbox/"},{"id":"https://fekir.info/post/ssh-everywhere/","content_text":"setup ssh on all device","url":"https://fekir.info/post/ssh-everywhere/"},{"id":"https://fekir.info/post/compile-time-string-operations/","content_text":"Manipulate strings at compile-time","url":"https://fekir.info/post/compile-time-string-operations/"},{"id":"https://fekir.info/post/macro-usages-in-cpp/","content_text":"Some common examples of macros in C++","url":"https://fekir.info/post/macro-usages-in-cpp/"},{"id":"https://fekir.info/post/testing-website-health/","content_text":"Automatically test for dead links and invalid pages","url":"https://fekir.info/post/testing-website-health/"},{"id":"https://fekir.info/post/parallelize-bulk-operations/","content_text":"How to parallelize an existing program without changing it","url":"https://fekir.info/post/parallelize-bulk-operations/"},{"id":"https://fekir.info/post/minimal-cpp-dev-env/","content_text":"a minimal development environment for beginning programming in c++","url":"https://fekir.info/post/minimal-cpp-dev-env/"},{"id":"https://fekir.info/post/guaranteed-copy-elision/","content_text":"Guaranteed copy elision in C++","url":"https://fekir.info/post/guaranteed-copy-elision/"},{"id":"https://fekir.info/post/constexpr-tree/","content_text":"How to define a compile-time tree structure","url":"https://fekir.info/post/constexpr-tree/"},{"id":"https://fekir.info/post/constexpr-linked-list/","content_text":"How to define a compile-time linked list","url":"https://fekir.info/post/constexpr-linked-list/"},{"id":"https://fekir.info/post/natstepfilter/","content_text":"Enhance your debug experience in Visual Studio","url":"https://fekir.info/post/natstepfilter/"},{"id":"https://fekir.info/post/change-date-of-photo-to-match-exif/","content_text":"Change the date of a photo to match the Exif metadata","url":"https://fekir.info/post/change-date-of-photo-to-match-exif/"},{"id":"https://fekir.info/post/cmake-custom-targets-and-commands/","content_text":"Some examples","url":"https://fekir.info/post/cmake-custom-targets-and-commands/"},{"id":"https://fekir.info/post/migrate-svn-to-git/","content_text":"A step-by-step guide on how to migrate an SVN repository to git","url":"https://fekir.info/post/migrate-svn-to-git/"},{"id":"https://fekir.info/post/better-latex-environment/","content_text":"What I wish I knew before...","url":"https://fekir.info/post/better-latex-environment/"},{"id":"https://fekir.info/post/natvis/","content_text":"Enhance your debug experience in Visual Studio","url":"https://fekir.info/post/natvis/"},{"id":"https://fekir.info/post/span-the-missing-constructor/","content_text":"std::span and std::initializer_list do not always play well together","url":"https://fekir.info/post/span-the-missing-constructor/"},{"id":"https://fekir.info/post/less-assembly-does-not-mean-faster-code/","content_text":"Less assembly does not mean faster code, but it's still a useful metric","url":"https://fekir.info/post/less-assembly-does-not-mean-faster-code/"},{"id":"https://fekir.info/post/clang-tidy-windows/","content_text":"Short introduction to clang-tidy","url":"https://fekir.info/post/clang-tidy-windows/"},{"id":"https://fekir.info/post/vim-macros/","content_text":"Automating text editing with vim macros","url":"https://fekir.info/post/vim-macros/"},{"id":"https://fekir.info/post/backups-with-rsync/","content_text":"My dead-simple solution for data backups","url":"https://fekir.info/post/backups-with-rsync/"},{"id":"https://fekir.info/post/risk-of-rooting-android/","content_text":"A non-comprehensive list of reasons why you might not want to root your phone","url":"https://fekir.info/post/risk-of-rooting-android/"},{"id":"https://fekir.info/post/syncronize-contacts-between-thunderbird-and-android/","content_text":"How to synchronize contacts between Android and Thunderbird","url":"https://fekir.info/post/syncronize-contacts-between-thunderbird-and-android/"},{"id":"https://fekir.info/post/deducing-return-types-in-cpp/","content_text":"Some examples on deducing return types","url":"https://fekir.info/post/deducing-return-types-in-cpp/"},{"id":"https://fekir.info/post/support-foss/","content_text":"Support FOSS, not because of ideological reasons, but because of selfishness","url":"https://fekir.info/post/support-foss/"},{"id":"https://fekir.info/post/bootstrapping-and-crosscompiling/","content_text":"setting up a new box","url":"https://fekir.info/post/bootstrapping-and-crosscompiling/"},{"id":"https://fekir.info/post/linker-error-with-static-member-variable/","content_text":"Digging rabbit hole while examining a linker error","url":"https://fekir.info/post/linker-error-with-static-member-variable/"},{"id":"https://fekir.info/post/should-root-my-phone/","content_text":"A non-comprehensive list of reasons I found for gaining more control over my phone","url":"https://fekir.info/post/should-root-my-phone/"},{"id":"https://fekir.info/post/remove-android-system-apps-example/","content_text":"How to remove android preinstalled applications (an example)","url":"https://fekir.info/post/remove-android-system-apps-example/"},{"id":"https://fekir.info/post/analyze-apache-access-logs/","content_text":"Analyze Apache access logs offline","url":"https://fekir.info/post/analyze-apache-access-logs/"},{"id":"https://fekir.info/post/introduction-to-make/","content_text":"A short introduction to make","url":"https://fekir.info/post/introduction-to-make/"},{"id":"https://fekir.info/post/php-as-static-site-generator/","content_text":"Writing my own static site generator","url":"https://fekir.info/post/php-as-static-site-generator/"},{"id":"https://fekir.info/post/git-is-easier-than-svn/","content_text":"going against stream, I find git easier to use svn","url":"https://fekir.info/post/git-is-easier-than-svn/"},{"id":"https://fekir.info/post/quick-gimp/","content_text":"Some quick actions with GIMP","url":"https://fekir.info/post/quick-gimp/"},{"id":"https://fekir.info/post/mathml-support-in-chromium-based-browsers/","content_text":"Chrome does not support MathML, luckily there are two solutions","url":"https://fekir.info/post/mathml-support-in-chromium-based-browsers/"},{"id":"https://fekir.info/post/git-cygwin-and-wsl/","content_text":"How to make cygwin, wsl and git-bash work together","url":"https://fekir.info/post/git-cygwin-and-wsl/"},{"id":"https://fekir.info/post/namespace-vs-struct/","content_text":"Two unrelated features, yet there is some common ground","url":"https://fekir.info/post/namespace-vs-struct/"},{"id":"https://fekir.info/post/decomposing-an-expression/","content_text":"Minimal implementation for decomposing a comparison expression","url":"https://fekir.info/post/decomposing-an-expression/"},{"id":"https://fekir.info/post/cpp-performance-guidelines/","content_text":"Avoid premature pessimizations","url":"https://fekir.info/post/cpp-performance-guidelines/"},{"id":"https://fekir.info/post/string_views/","content_text":"Drawback of string_view and a family of solutions","url":"https://fekir.info/post/string_views/"},{"id":"https://fekir.info/post/cygwin-and-wsl/","content_text":"Why WSL will not sobstitute cygwin","url":"https://fekir.info/post/cygwin-and-wsl/"},{"id":"https://fekir.info/post/how-to-force-return-value-optimization/","content_text":"How to return uncopyable and unmoveable types from a function","url":"https://fekir.info/post/how-to-force-return-value-optimization/"},{"id":"https://fekir.info/post/thoughts-on-public-inheritance/","content_text":"When and how to use public inheritance","url":"https://fekir.info/post/thoughts-on-public-inheritance/"},{"id":"https://fekir.info/post/restrict-interface-with-private-inheritance/","content_text":"How to use private inheritance for restricting the interface of a class with minimal code duplication","url":"https://fekir.info/post/restrict-interface-with-private-inheritance/"},{"id":"https://fekir.info/post/minimize-debian/","content_text":"Tips and tricks on how to reduce the installation footprint of Debian","url":"https://fekir.info/post/minimize-debian/"},{"id":"https://fekir.info/post/library-dependency-graphs-in-cmake/","content_text":"How to create dependency graphs between libraries with CMake","url":"https://fekir.info/post/library-dependency-graphs-in-cmake/"},{"id":"https://fekir.info/post/the-private-implementation-pattern/","content_text":"Hide as much as possible of a class implementation","url":"https://fekir.info/post/the-private-implementation-pattern/"},{"id":"https://fekir.info/post/extend-generic-thread-safe-mutexed_obj-class/","content_text":"Design your data to be thread-safe","url":"https://fekir.info/post/extend-generic-thread-safe-mutexed_obj-class/"},{"id":"https://fekir.info/post/how-to-envelop-class-with-suffixes-and-prefixes/","content_text":"How to envelop a class with suffixes and prefixes and discover properties fields in C++","url":"https://fekir.info/post/how-to-envelop-class-with-suffixes-and-prefixes/"},{"id":"https://fekir.info/post/we-already-have-uniform-initialization/","content_text":"We already have uniform initialization, stop proposing braced initialization as a solution for everything","url":"https://fekir.info/post/we-already-have-uniform-initialization/"},{"id":"https://fekir.info/post/windows-hardening-2/","content_text":"Windows hardening, with no external programs","url":"https://fekir.info/post/windows-hardening-2/"},{"id":"https://fekir.info/post/windows-hardening/","content_text":"Windows hardening without external programs","url":"https://fekir.info/post/windows-hardening/"},{"id":"https://fekir.info/post/music-recover-2/","content_text":"Recover music files","url":"https://fekir.info/post/music-recover-2/"},{"id":"https://fekir.info/post/music-recover/","content_text":"Recover music files","url":"https://fekir.info/post/music-recover/"},{"id":"https://fekir.info/post/still-using-windows-xp/","content_text":"Still using a Windows XP Virtual Machine from time to time","url":"https://fekir.info/post/still-using-windows-xp/"},{"id":"https://fekir.info/post/unable-to-delete-files-as-windows-administrator/","content_text":"When Windows does not want to delete a file...","url":"https://fekir.info/post/unable-to-delete-files-as-windows-administrator/"},{"id":"https://fekir.info/post/chroot-as-docker-alternative-for-building/","content_text":"chroot as docker alternative for building","url":"https://fekir.info/post/chroot-as-docker-alternative-for-building/"},{"id":"https://fekir.info/post/docker-process-creation-overhead-when-compiling/","content_text":"Docker process creation overhead when compiling","url":"https://fekir.info/post/docker-process-creation-overhead-when-compiling/"},{"id":"https://fekir.info/post/name-your-conversions/","content_text":"A guideline for conversion and cast operations","url":"https://fekir.info/post/name-your-conversions/"},{"id":"https://fekir.info/post/remove-android-system-apps/","content_text":"how to remove or disable Android system applications","url":"https://fekir.info/post/remove-android-system-apps/"},{"id":"https://fekir.info/post/immutable-machines-with-virtualbox/","content_text":"how to create an immutable virtual machine with VirtualBox","url":"https://fekir.info/post/immutable-machines-with-virtualbox/"},{"id":"https://fekir.info/post/custom-static-analysis-with-cppcheck/","content_text":"Custom static analysis with Cppcheck","url":"https://fekir.info/post/custom-static-analysis-with-cppcheck/"},{"id":"https://fekir.info/post/test-failures-cpp/","content_text":"Test for failures in C++","url":"https://fekir.info/post/test-failures-cpp/"},{"id":"https://fekir.info/post/tracing-with-gcc/","content_text":"Tracing with GCC","url":"https://fekir.info/post/tracing-with-gcc/"},{"id":"https://fekir.info/post/fmove/","content_text":"How to force a move","url":"https://fekir.info/post/fmove/"},{"id":"https://fekir.info/post/post-build-static-analysis-pfunct-and-pahole/","content_text":"Statically analyze an executable","url":"https://fekir.info/post/post-build-static-analysis-pfunct-and-pahole/"},{"id":"https://fekir.info/post/post-build-static-analysis/","content_text":"Static analysis after the build process","url":"https://fekir.info/post/post-build-static-analysis/"},{"id":"https://fekir.info/post/global-variables-in-cpp-libraries/","content_text":"Global variables in C++ libraries","url":"https://fekir.info/post/global-variables-in-cpp-libraries/"},{"id":"https://fekir.info/post/arcane-cpp-rules-namespace-overloads/","content_text":"How namespace and overload resolution interfere","url":"https://fekir.info/post/arcane-cpp-rules-namespace-overloads/"},{"id":"https://fekir.info/post/detect-member-variables/","content_text":"Detect member variables since c++11","url":"https://fekir.info/post/detect-member-variables/"},{"id":"https://fekir.info/post/default-text-editor-in-windows/","content_text":"Setting an editor in Microsoft Windows","url":"https://fekir.info/post/default-text-editor-in-windows/"},{"id":"https://fekir.info/post/iterating-over-delimited-string-in-shell-scripts/","content_text":"How to iterate on any given delimiter","url":"https://fekir.info/post/iterating-over-delimited-string-in-shell-scripts/"},{"id":"https://fekir.info/post/sharing-data-between-threads/","content_text":"Sharing data between threads","url":"https://fekir.info/post/sharing-data-between-threads/"},{"id":"https://fekir.info/post/some-sh-shell-tricks/","content_text":"Some tricks for writing shell scripts","url":"https://fekir.info/post/some-sh-shell-tricks/"},{"id":"https://fekir.info/post/deprecate-and-delete/","content_text":"How to take advantage of deprecate and delete","url":"https://fekir.info/post/deprecate-and-delete/"},{"id":"https://fekir.info/post/function-poisoning-in-c-and-cpp/","content_text":"How to poison functions and how it can be extremely useful","url":"https://fekir.info/post/function-poisoning-in-c-and-cpp/"},{"id":"https://fekir.info/post/stop-using-validation-regexes/","content_text":"Stop using regex for validation","url":"https://fekir.info/post/stop-using-validation-regexes/"},{"id":"https://fekir.info/post/floating-in-cpp-7/","content_text":"Implementing the Runge-Kutta algorithm","url":"https://fekir.info/post/floating-in-cpp-7/"},{"id":"https://fekir.info/post/floating-in-cpp-6/","content_text":"Solving ordinary differential equations","url":"https://fekir.info/post/floating-in-cpp-6/"},{"id":"https://fekir.info/post/floating-in-cpp-5/","content_text":"Floating in C++ - part 5 - Linear algebra","url":"https://fekir.info/post/floating-in-cpp-5/"},{"id":"https://fekir.info/post/floating-in-cpp-4/","content_text":"Testing floating points with catch2","url":"https://fekir.info/post/floating-in-cpp-4/"},{"id":"https://fekir.info/post/floating-in-cpp-3/","content_text":"How to approximate the value of an integral","url":"https://fekir.info/post/floating-in-cpp-3/"},{"id":"https://fekir.info/post/floating-in-cpp-2/","content_text":"Interpolate polynomial functions in C++","url":"https://fekir.info/post/floating-in-cpp-2/"},{"id":"https://fekir.info/post/floating-in-cpp-1/","content_text":"Floating in C++ - part 1 - Root problem","url":"https://fekir.info/post/floating-in-cpp-1/"},{"id":"https://fekir.info/post/floating-in-cpp/","content_text":"Floating point in C++","url":"https://fekir.info/post/floating-in-cpp/"},{"id":"https://fekir.info/post/cpp-comparison-operators/","content_text":"C++ comparison operators","url":"https://fekir.info/post/cpp-comparison-operators/"},{"id":"https://fekir.info/post/undo-in-git/","content_text":"A brief guide on how to undo in git","url":"https://fekir.info/post/undo-in-git/"},{"id":"https://fekir.info/post/resource-handling-in-java/","content_text":"Even if the try-with-resources statement was presented in 2011 with Java 7, as of today a lot of programmers do not know this technique and its advantages, and most of those who use it are not always aware of the pitfalls","url":"https://fekir.info/post/resource-handling-in-java/"}]}