<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Chris Hager</title><link>https://www.metachris.dev/</link><description>Recent content on Chris Hager</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 10 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.metachris.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Safe Yolo Mode: Running LLM Agents in VMs with Libvirt and Virsh</title><link>https://www.metachris.dev/2026/02/safe-yolo-mode-running-llm-agents-in-vms-with-libvirt-and-virsh/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2026/02/safe-yolo-mode-running-llm-agents-in-vms-with-libvirt-and-virsh/</guid><description>This is a guide for isolating LLM agents in virtual machines, using libvirt and virsh on Linux servers.
Running LLMs in VMs isolates them from the host system, mitigating numerous security risks such as destructive operations or unauthorized file access (i.e. private keys, secrets, credentials for communication tools). This is particularly important when granting LLM agents broad permissions, like auto-approving tool use (&amp;ldquo;yolo mode&amp;rdquo;). It&amp;rsquo;s also useful to keep sessions running for extended periods of time, and to interact with agents from the phone / on the go.</description></item><item><title>What Caught My Eye in January</title><link>https://www.metachris.dev/2026/02/what-caught-my-eye-in-january/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2026/02/what-caught-my-eye-in-january/</guid><description>January 2026: the month AI agents got their own social network and started forming micronations. Also: FOSDEM, ancient engineering, cURL&amp;rsquo;s war on slop, hard-won lessons on estimation and burnout, and a few other delightful corners of the internet.
Add your favorites in the comments! Note: descriptions are LLM-assisted.
Topics:
Engineering &amp;amp; Tech AI / LLMs Open Source Life &amp;amp; Miscellany Engineering &amp;amp; Tech Databases in 2025: A Year in Review (cs.</description></item><item><title>2025 - Year in review</title><link>https://www.metachris.dev/2026/01/2025-year-in-review/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2026/01/2025-year-in-review/</guid><description>&lt;script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous">&lt;/script>
&lt;script src="https://www.metachris.dev/js/load-photoswipe.js">&lt;/script>


&lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.css" integrity="sha256-sCl5PUOGMLfFYctzDW3MtRib0ctyUvI9Qsmq2wXOeBY=" crossorigin="anonymous" />
&lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/default-skin/default-skin.min.css" integrity="sha256-BFeI1V+Vh1Rk37wswuOYn5lsTcaU96hGaI7OUVCLjPc=" crossorigin="anonymous" />
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.js" integrity="sha256-UplRCs9v4KXVJvVY+p+RSo5Q4ilAUXh7kpjyIP5odyc=" crossorigin="anonymous">&lt;/script>
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe-ui-default.min.js" integrity="sha256-PWHOlUzc96pMc8ThwRIXPn8yH4NOLu42RQ0b9SpnpFk=" crossorigin="anonymous">&lt;/script>


&lt;div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">

&lt;div class="pswp__bg">&lt;/div>

&lt;div class="pswp__scroll-wrap">
 
 &lt;div class="pswp__container">
 &lt;div class="pswp__item">&lt;/div>
 &lt;div class="pswp__item">&lt;/div>
 &lt;div class="pswp__item">&lt;/div>
 &lt;/div>
 
 &lt;div class="pswp__ui pswp__ui--hidden">
 &lt;div class="pswp__top-bar">
 
 &lt;div class="pswp__counter">&lt;/div>
 &lt;button class="pswp__button pswp__button--close" title="Close (Esc)">&lt;/button>
 &lt;button class="pswp__button pswp__button--share" title="Share">&lt;/button>
 &lt;button class="pswp__button pswp__button--fs" title="Toggle fullscreen">&lt;/button>
 &lt;button class="pswp__button pswp__button--zoom" title="Zoom in/out">&lt;/button>
 
 
 &lt;div class="pswp__preloader">
 &lt;div class="pswp__preloader__icn">
 &lt;div class="pswp__preloader__cut">
 &lt;div class="pswp__preloader__donut">&lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
 &lt;div class="pswp__share-tooltip">&lt;/div>
 &lt;/div>
 &lt;button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
 &lt;/button>
 &lt;button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
 &lt;/button>
 &lt;div class="pswp__caption">
 &lt;div class="pswp__caption__center">&lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/div>

&lt;style type="text/css">
 .fig1-wrap img {
 border: 1px solid #b5b5b5;
 border-radius: 3px;
 }
 .book-grid {
 display: grid;
 grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
 gap: 1.5rem;
 margin: 2rem 0;
 }
 .book-card {
 display: flex;
 gap: 1rem;
 text-decoration: none;
 color: inherit;
 }
 .book-card img {
 width: 100px;
 min-width: 100px;
 height: auto;
 border-radius: 4px;
 box-shadow: 0 2px 8px rgba(0,0,0,0.15);
 transition: transform 0.2s;
 }
 .book-card:hover img {
 transform: scale(1.05);
 }
 .book-card .book-info {
 display: flex;
 flex-direction: column;
 }
 .book-card .book-title {
 font-weight: 600;
 font-size: 1.9rem;
 margin-bottom: 0.3rem;
 }
 .book-card .book-desc {
 font-size: 1.5rem;
 line-height: 1.5;
 }
 .book-card:hover {
 text-decoration: none !important;
 }
 a:hover .book-desc {
 color: initial;
 }
&lt;/style>
&lt;p>This post is a look back at 2025: projects, writings, code, books, and a few thoughts on AI, social media, and life.&lt;/p></description></item><item><title>Sandbox Your AI Dev Tools: A Practical Guide for VMs and Lima</title><link>https://www.metachris.dev/2025/11/sandbox-your-ai-dev-tools-a-practical-guide-for-vms-and-lima/</link><pubDate>Tue, 25 Nov 2025 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2025/11/sandbox-your-ai-dev-tools-a-practical-guide-for-vms-and-lima/</guid><description>AI coding assistants, npm, pip, and other development tools can run arbitrary code and scripts on your machine, potentially stealing SSH keys, API tokens, wallet keys, sensitive credentials and other private data without you noticing.
This guide shows you how to sandbox these tools in isolated VMs using Lima, so you can experiment and develop freely without putting your sensitive data at risk. Jump straight to the guide, or read on for a bit of personal context.</description></item><item><title>How to Query GitHub for User Contributions in a Specific Timeframe</title><link>https://www.metachris.dev/2025/10/how-to-query-github-for-user-contributions-in-a-specific-timeframe/</link><pubDate>Fri, 10 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2025/10/how-to-query-github-for-user-contributions-in-a-specific-timeframe/</guid><description>I needed needed to find all public GitHub repositories a user has contributed to within a specific timeframe, and wanted to share - and record for myself - the API query I learned.
This can be a useful for generating reports, tracking progress, analyzing activity over a certain period, and more.
Use the GitHub GraphQL API We leverage the GitHub GraphQL API to get the list of public repositories a user contributed to within a specific timeframe, using the contributionsCollection field to specify a time range and retrieve contributions made by a user during that period.</description></item><item><title>TLS Certificate Cheat Sheet - OpenSSL &amp; Curl</title><link>https://www.metachris.dev/2025/09/tls-certificate-cheat-sheet-openssl-curl/</link><pubDate>Mon, 22 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2025/09/tls-certificate-cheat-sheet-openssl-curl/</guid><description>https://collective.flashbots.net/t/tls-certificates-know-how-quick-reference/5292</description></item><item><title>My Mac Dev Setup and Favorite Tools</title><link>https://www.metachris.dev/2024/01/my-mac-dev-setup-and-favorite-tools/</link><pubDate>Fri, 12 Jan 2024 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2024/01/my-mac-dev-setup-and-favorite-tools/</guid><description>How I setup and use my computer and tools for development.
I wrote this mostly as a guide for myself, for the next time I setup a computer, and hope it might be useful to others too. I&amp;rsquo;d love to hear your thoughts, ideas and additional tips in the comments below!
Related: How I setup my Terminal and Bash.
Contents Mac setup General system setup Favorite apps Keyboard shortcuts Application shortcuts Arranging windows Browser Terminal &amp;amp; Shell Docker for Node.</description></item><item><title>Terminal and Bash - Tips &amp; Tricks</title><link>https://www.metachris.dev/2024/01/terminal-and-bash-tips-tricks/</link><pubDate>Thu, 04 Jan 2024 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2024/01/terminal-and-bash-tips-tricks/</guid><description>&lt;p>A collection of notes, tips and tricks about how I setup and use my terminal (iTerm2) and shell (Bash). Perhaps you find some of it useful or interesting for your own setup.&lt;/p></description></item><item><title>Bid cancellations considered harmful</title><link>https://www.metachris.dev/2023/05/bid-cancellations-considered-harmful/</link><pubDate>Fri, 05 May 2023 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2023/05/bid-cancellations-considered-harmful/</guid><description>Moved to https://ethresear.ch/t/bid-cancellations-considered-harmful/15500</description></item><item><title>Block Building inside SGX</title><link>https://www.metachris.dev/2023/03/block-building-inside-sgx/</link><pubDate>Thu, 23 Mar 2023 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2023/03/block-building-inside-sgx/</guid><description>Moved to https://writings.flashbots.net/block-building-inside-sgx</description></item><item><title>Running Geth within SGX: Our Experience, Learnings and Code</title><link>https://www.metachris.dev/2022/12/running-geth-within-sgx-our-experience-learnings-and-code/</link><pubDate>Tue, 20 Dec 2022 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2022/12/running-geth-within-sgx-our-experience-learnings-and-code/</guid><description>Moved to https://writings.flashbots.net/geth-inside-sgx</description></item><item><title>Securing private keys with a high-performance, threshold signature-based protocol</title><link>https://www.metachris.dev/2021/07/securing-private-keys-with-a-high-performance-threshold-signature-based-protocol/</link><pubDate>Wed, 21 Jul 2021 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2021/07/securing-private-keys-with-a-high-performance-threshold-signature-based-protocol/</guid><description>This post is about the paper &amp;ldquo;Improving security for users of decentralized exchanges through multiparty computation&amp;rdquo;, by Robert Annessi and Ethan Fast.
The paper introduces an effective algorithm for secure, collaborative signature generation using threshold signatures, and an API-key based client/server protocol that allows user-specific limits and restrictions as well as key revocations and rotations.
The method supports all blockchains that use ECDSA and EdDSA signatures, which includes Bitcoin, Ethereum and the majority of popular cryptocurrencies.</description></item><item><title>Creating Go Bindings for Ethereum Smart Contracts</title><link>https://www.metachris.dev/2021/05/creating-go-bindings-for-ethereum-smart-contracts/</link><pubDate>Sun, 30 May 2021 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2021/05/creating-go-bindings-for-ethereum-smart-contracts/</guid><description>&lt;script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous">&lt;/script>
&lt;script src="https://www.metachris.dev/js/load-photoswipe.js">&lt;/script>


&lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.css" integrity="sha256-sCl5PUOGMLfFYctzDW3MtRib0ctyUvI9Qsmq2wXOeBY=" crossorigin="anonymous" />
&lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/default-skin/default-skin.min.css" integrity="sha256-BFeI1V+Vh1Rk37wswuOYn5lsTcaU96hGaI7OUVCLjPc=" crossorigin="anonymous" />
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.js" integrity="sha256-UplRCs9v4KXVJvVY+p+RSo5Q4ilAUXh7kpjyIP5odyc=" crossorigin="anonymous">&lt;/script>
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe-ui-default.min.js" integrity="sha256-PWHOlUzc96pMc8ThwRIXPn8yH4NOLu42RQ0b9SpnpFk=" crossorigin="anonymous">&lt;/script>


&lt;div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">

&lt;div class="pswp__bg">&lt;/div>

&lt;div class="pswp__scroll-wrap">
 
 &lt;div class="pswp__container">
 &lt;div class="pswp__item">&lt;/div>
 &lt;div class="pswp__item">&lt;/div>
 &lt;div class="pswp__item">&lt;/div>
 &lt;/div>
 
 &lt;div class="pswp__ui pswp__ui--hidden">
 &lt;div class="pswp__top-bar">
 
 &lt;div class="pswp__counter">&lt;/div>
 &lt;button class="pswp__button pswp__button--close" title="Close (Esc)">&lt;/button>
 &lt;button class="pswp__button pswp__button--share" title="Share">&lt;/button>
 &lt;button class="pswp__button pswp__button--fs" title="Toggle fullscreen">&lt;/button>
 &lt;button class="pswp__button pswp__button--zoom" title="Zoom in/out">&lt;/button>
 
 
 &lt;div class="pswp__preloader">
 &lt;div class="pswp__preloader__icn">
 &lt;div class="pswp__preloader__cut">
 &lt;div class="pswp__preloader__donut">&lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
 &lt;div class="pswp__share-tooltip">&lt;/div>
 &lt;/div>
 &lt;button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
 &lt;/button>
 &lt;button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
 &lt;/button>
 &lt;div class="pswp__caption">
 &lt;div class="pswp__caption__center">&lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/div>

&lt;p>To interact with Ethereum smart contracts in Go programs, you need bindings for the specific type of contract.
This post is a quick guide for generating these bindings from various sources:&lt;/p>
&lt;ol>
&lt;li>Manually compiled Solidity contract&lt;/li>
&lt;li>Smart contracts with Truffle (eg. &lt;a href="https://openzeppelin.com/contracts/">OpenZeppelin contracts&lt;/a>)&lt;/li>
&lt;li>Compiling a contract on &lt;a href="http://remix.ethereum.org/">remix.ethereum.org&lt;/a>&lt;/li>
&lt;li>Using the Etherscan ABI API&lt;/li>
&lt;li>Prebuilt Go bindings&lt;/li>
&lt;/ol></description></item><item><title>Starting a TypeScript Project in 2021</title><link>https://www.metachris.dev/2021/04/starting-a-typescript-project-in-2021/</link><pubDate>Thu, 15 Apr 2021 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2021/04/starting-a-typescript-project-in-2021/</guid><description>&lt;p>This is a guide for starting a TypeScript project in 2021 with modern tooling.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.typescriptlang.org/">TypeScript 4&lt;/a>&lt;/li>
&lt;li>Optionally &lt;a href="https://esbuild.github.io/">esbuild&lt;/a> to bundle for browsers (and Node.js)&lt;/li>
&lt;li>Linting with &lt;a href="https://github.com/typescript-eslint/typescript-eslint">typescript-eslint&lt;/a> (&lt;a href="https://palantir.github.io/tslint/">tslint&lt;/a> is deprecated)&lt;/li>
&lt;li>Testing with &lt;a href="https://jestjs.io/docs/getting-started">Jest&lt;/a> (and &lt;a href="https://www.npmjs.com/package/ts-jest">ts-jest&lt;/a>)&lt;/li>
&lt;li>Publishing a package to npm&lt;/li>
&lt;li>Continuous integration (&lt;a href="https://docs.github.com/en/actions">GitHub Actions&lt;/a> / &lt;a href="https://docs.gitlab.com/ee/ci/">GitLab CI&lt;/a>)&lt;/li>
&lt;li>Automatic API documentation with &lt;a href="https://typedoc.org/guides/doccomments/">TypeDoc&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>PDFx update and new version release (v1.4.1)</title><link>https://www.metachris.dev/2021/04/pdfx-update-and-new-version-release-v1.4.1/</link><pubDate>Mon, 12 Apr 2021 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2021/04/pdfx-update-and-new-version-release-v1.4.1/</guid><description>&lt;hr>
&lt;p>&lt;a href="https://github.com/metachris/pdfx">PDFx&lt;/a> is a tool to extract text, links, references and metadata from PDF files and URLs. Thanks to &lt;a href="https://github.com/metachris/pdfx/graphs/contributors">several contributors&lt;/a> the project received a thorough update and was brought into 2021. The new release of today is &lt;a href="https://pypi.org/project/pdfx/">PDFx v1.4.1&lt;/a> &amp;#x1f389;&lt;/p>
&lt;p>PDFx works like this:&lt;/p></description></item><item><title>Starting a TypeScript Project in 2021</title><link>https://www.metachris.dev/2021/03/bootstrapping-a-typescript-node.js-project/</link><pubDate>Wed, 24 Mar 2021 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2021/03/bootstrapping-a-typescript-node.js-project/</guid><description>Moved to /2021/04/starting-a-typescript-project-in-2021/</description></item><item><title>MicroPython-Ctl - a TypeScript library for talking to MicroPython devices</title><link>https://www.metachris.dev/2021/01/micropython-ctl-a-typescript-library-for-talking-to-micropython-devices/</link><pubDate>Fri, 29 Jan 2021 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2021/01/micropython-ctl-a-typescript-library-for-talking-to-micropython-devices/</guid><description>I&amp;rsquo;m happy to introduce MicroPython-Ctl: a TypeScript library for talking to MicroPython devices (such as ESP32/8266, Raspberry Pi Pico, Pyboard, WiPy, and many more).
Use micropython-ctl to quickly build apps that interact with MicroPython devices: Websites / webapps, Node.js programs, Electron applications, Visual Studio Code extensions, Mobile apps (eg. with React Native) and more.
Connect to devices over serial or network interface Run Python scripts, receive the output Manipulate files and directories Terminal (REPL) interaction mctl command-line utility Mount MicroPython devices locally (with FUSE, experimental) Typed and fully async (you can use await with any command).</description></item><item><title>A new version of logzero is released (v1.6) 🎉</title><link>https://www.metachris.dev/2020/10/a-new-version-of-logzero-is-released-v1.6/</link><pubDate>Fri, 30 Oct 2020 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2020/10/a-new-version-of-logzero-is-released-v1.6/</guid><description>logzero is a simple and effective logging library for Python, with colored stream output, logfile, syslog, JSON formatting and much more: https://github.com/metachris/logzero
After a really busy period with my second 🐣, I start to find a little bit of time here and there for fun projects. Recently I&amp;rsquo;ve enjoyed a few evenings maintaining logzero, culminating in a small release today: logzero v1.6 🎉
logzero v1.6 has several improvements:
JSON formatting (with integrated python-json-logger) Easily change colors to custom color codes Allow creating of root loggers Allow file logging with lower loglevel than stream Project readme and history was converted to markdown and displays nicely on PyPI Deprecation of Travis CI Running tests with GitHub Actions, with Python versions up to 3.</description></item><item><title>It's been a while!</title><link>https://www.metachris.dev/2020/10/its-been-a-while/</link><pubDate>Thu, 08 Oct 2020 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2020/10/its-been-a-while/</guid><description>Oh wow, it&amp;rsquo;s been about two years since my last post, and oh boy were those eventful! Most notably, I&amp;rsquo;m now a father of two 🐥🍼. Happy, busy, and frequently getting up way too early for my liking. 😂 Either way, now I seem to find a little bit of time again to hack around and play with interesting things, and even to post about it!
(Recently I&amp;rsquo;ve updated this blog - migrated to a new Hugo version, and gave it an overall UI update and cleanup.</description></item><item><title>City of Zion Project Report — June to August 2018</title><link>https://www.metachris.dev/2018/10/city-of-zion-project-report-june-to-august-2018/</link><pubDate>Sat, 06 Oct 2018 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2018/10/city-of-zion-project-report-june-to-august-2018/</guid><description>Redirecting to https://medium.com/proof-of-working/city-of-zion-project-report-june-to-august-2018-ea6fa87565ea</description></item><item><title>NEO dApps review - CoZ first dApps competition</title><link>https://www.metachris.dev/2017/11/neo-dapps-review-coz-first-dapps-competition/</link><pubDate>Thu, 23 Nov 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/11/neo-dapps-review-coz-first-dapps-competition/</guid><description>Redirecting to https://medium.com/proof-of-working/coz-first-dapps-competition-dapp-review-3a6b284afaef</description></item><item><title>How to build an ICO on NEO with the NEX ICO smart contract template</title><link>https://www.metachris.dev/2017/11/how-to-build-an-ico-on-neo-with-the-nex-ico-smart-contract-template/</link><pubDate>Sun, 19 Nov 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/11/how-to-build-an-ico-on-neo-with-the-nex-ico-smart-contract-template/</guid><description>Redirecting to https://medium.com/proof-of-working/how-to-build-an-ico-on-neo-with-the-nex-ico-smart-contract-template-1beac1ff0afd</description></item><item><title>How to run a private network of the NEO blockchain</title><link>https://www.metachris.dev/2017/11/how-to-run-a-private-network-of-the-neo-blockchain/</link><pubDate>Fri, 03 Nov 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/11/how-to-run-a-private-network-of-the-neo-blockchain/</guid><description/></item><item><title>logzero - Simplified logging for Python 2 and 3</title><link>https://www.metachris.dev/2017/06/logzero-simplified-logging-for-python-2-and-3/</link><pubDate>Thu, 29 Jun 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/06/logzero-simplified-logging-for-python-2-and-3/</guid><description>I&amp;rsquo;ve just published logzero, a small Python package which simplifies logging with Python 2 and 3. It is easy to use and robust, and heavily inspired by the Tornado web framework. I&amp;rsquo;ve recently released python-boilerplate.com which included this module as a file, and people have been asking for it to be published as a standalone package. Finally I&amp;rsquo;ve found some time to do it, and here it is!
https://logzero.readthedocs.io https://github.com/metachris/logzero logzero is a simple and effective logging module for Python 2 and 3:</description></item><item><title>How to test Vue.js plugins and extensions</title><link>https://www.metachris.dev/2017/05/how-to-test-vue.js-plugins-and-extensions/</link><pubDate>Wed, 31 May 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/05/how-to-test-vue.js-plugins-and-extensions/</guid><description>This post shows how to write tests for Vue.js plugins and extensions by creating Vue.js instances, changing state and validating transformation and expected errors, to continuously verify that everything still works after updates, refactorings and merging contributions.
While building python-boilerplate.com, I recently created a Vue.js plugin for syntax highlighting (vue-highlightjs), and wanted to add tests. For this I spent some time researching and testing how to properly test Vue.js plugins and extensions, and I wanted to summarize and share what I&amp;rsquo;ve learnt.</description></item><item><title>Continuous Deployment: Hugo + Travis CI → GitHub Pages</title><link>https://www.metachris.dev/2017/04/continuous-deployment-hugo--travis-ci-github-pages/</link><pubDate>Tue, 25 Apr 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/04/continuous-deployment-hugo--travis-ci-github-pages/</guid><description>This post shows how to automate building and deployment of Hugo static websites to GitHub Pages using Travis CI. Builds are automatically triggered when pushing to the Git repository, and deployment when a build on the master branch succeeds.
Hugo is a static website generator written in Go, and only requires a single binary. The easiest way to run Hugo in the Travis CI container is by including the specific hugo binary with which to build the site as part of the repository (eg.</description></item><item><title>KubeCon Europe 2017 Impressions</title><link>https://www.metachris.dev/2017/04/kubecon-europe-2017-impressions/</link><pubDate>Fri, 07 Apr 2017 22:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/04/kubecon-europe-2017-impressions/</guid><description>Last week I was visiting CloudNativeCon and KubeCon Europe 2017 in Berlin for two days of conference packed with talks. The conference took place in the good ol&amp;rsquo; Berlin Congress Center, which brought up good memory on the earlier Chaos Computer Congresses, which used to take place there. This post is a quick recap of my notes and impressions.
KubeCon 2017 Keynote
Cloud Native Computing Foundation The conference was organized by the [Cloud Native Computing Foundation (CNCF)](https://www.</description></item><item><title>Interesting facts from the Snapchat IPO filing</title><link>https://www.metachris.dev/2017/02/snapchat-files-for-ipo-interesting-facts-from-the-filing/</link><pubDate>Thu, 02 Feb 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/02/snapchat-files-for-ipo-interesting-facts-from-the-filing/</guid><description>Snapchat is going public! And there is lots of interesting data in todays IPO filing.
Snap Inc. is a camera company.
Users: 158m daily active users, grew 7% last quarter (Instagram has about 400m DAU).
Users older than 25 visit Snapchat approximately 12 times per day, on average about 20 minutes each day. Users younger than 25 visited Snapchat over 20 times and spent over 30 minutes on Snapchat every day.</description></item><item><title>Vue.js Syntax Highlighting with highlight.js</title><link>https://www.metachris.dev/2017/02/vuejs-syntax-highlighting-with-highlightjs/</link><pubDate>Wed, 01 Feb 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/02/vuejs-syntax-highlighting-with-highlightjs/</guid><description>Everyone loves a good syntax highlighting. This post explains how to use highlight.js for syntax highlighting in a Vue.js application. The method shown here allows syntax highlighting both on original creation of an element as well as on updates to the source-code, using a simple v-highlightjs directive such as this:
&amp;lt;pre v-highlightjs&amp;gt;&amp;lt;code class=&amp;#34;javascript&amp;#34;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt; You can see a live example here: jsfiddle.net/metachris/1vz9oobc.
To achieve this, we just need to install the highlight.</description></item><item><title>How to install Node.js 6.x Long-Term Support (LTS) on Ubuntu/Debian and CentOS</title><link>https://www.metachris.dev/2017/01/how-to-install-nodejs-6-lts-on-ubuntu-and-centos/</link><pubDate>Thu, 12 Jan 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/01/how-to-install-nodejs-6-lts-on-ubuntu-and-centos/</guid><description>Node.js 6.x is the current Node.js long-term support (LTS) release, with Node.js v6.9.4 being the most recent release as of time of writing. This guide shows a quick and reliable way to install the current Node.js 6.x LTS version (including npm) on Ubuntu/Debian and CentOS.
console.log(&amp;#34;Hello World&amp;#34;); We will use the system package manager (eg. apt or yum) to install Node.js 6.x, to be able to continually receive security updates without risking a major version jump with possibly breaking changes.</description></item><item><title>How to install Node.js 7.x on Ubuntu/Debian and CentOS</title><link>https://www.metachris.dev/2017/01/how-to-install-nodejs-7-on-ubuntu-and-centos/</link><pubDate>Thu, 12 Jan 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/01/how-to-install-nodejs-7-on-ubuntu-and-centos/</guid><description>Node.js 7.x is the current stable release of the Node.js, which is actively maintained in parallel to Node.js 6.x Long-Term Support (LTS). At the moment, the latest version is Node.js v7.4.0, and you can find the Node.js v7.x Changelog here on Github.
This guide shows a quick and reliable way to install the current Node.js 7.x version (including npm) on Ubuntu/Debian and CentOS, using the system package manager, in order to continually receive security updates without risking a major version jump with possibly breaking changes.</description></item><item><title>Custom Errors in TypeScript 2.1</title><link>https://www.metachris.dev/2017/01/custom-errors-in-typescript-2.1/</link><pubDate>Fri, 06 Jan 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/01/custom-errors-in-typescript-2.1/</guid><description>TypeScript 2.1 introduced a number of breaking changes, among them that &amp;ldquo;Extending built-ins like Error, Array, and Map may no longer work&amp;rdquo;.
For a subclass like the following:
class FooError extends Error { constructor(m: string) { super(m); } sayHello() { return &amp;#34;hello &amp;#34; + this.message; } } methods may be undefined on objects returned by constructing these subclasses, so calling sayHello will result in an error. instanceof will be broken between instances of the subclass and their instances, so (new FooError()) instanceof FooError will return false.</description></item><item><title>Great Talks and Presentations at 33C3</title><link>https://www.metachris.dev/2017/01/great-talks-and-presentations-at-33c3/</link><pubDate>Tue, 03 Jan 2017 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2017/01/great-talks-and-presentations-at-33c3/</guid><description>The Chaos Computer Congress is Europe&amp;rsquo;s leading hacker and tech community conference, taking place annualy in Hamburg, Germany between Christmas and New Year. This year was the 33rd time (hence 33C3), and as usual featured a large number of amazing talks and presentations.
My personal favorites
Making Technology Inclusive Through Papercraft and Sound - Introducing the Love to Code Platform, by Bunnie Huang Dissecting modern (3G/4G) cellular modems - all the way to running apps directly on the modem&amp;rsquo;s Linux OS (Blog, Slides, HN) Topics</description></item><item><title>Python Utilities by Peter Norvig</title><link>https://www.metachris.dev/2016/12/peter-norvigs-python-utilities-advent-of-code/</link><pubDate>Tue, 27 Dec 2016 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2016/12/peter-norvigs-python-utilities-advent-of-code/</guid><description>Peter Norvig, the famous American computer scientist and Director of Research at Google Inc., participated in this year&amp;rsquo;s Advent of Code (a series of small programming puzzles), and shared his experience in an interesting blog post.
The post starts with this amazing collection of Python utility functions, which may also be useful for your next project:
# Python 3.x import re import numpy as np import math import urllib.request from collections import Counter, defaultdict, namedtuple, deque from functools import lru_cache from itertools import permutations, combinations, chain, cycle, product from heapq import heappop, heappush def Input(day): &amp;#34;Open this day&amp;#39;s input file.</description></item><item><title>Python Thread Pool</title><link>https://www.metachris.dev/2016/04/python-threadpool/</link><pubDate>Mon, 11 Apr 2016 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2016/04/python-threadpool/</guid><description>A thread pool is a group of pre-instantiated, idle threads which stand ready to be given work. These are often preferred over instantiating new threads for each task when there is a large number of (short) tasks to be done rather than a small number of long ones.
Suppose you want do download 1000s of documents from the internet, but only have resources for downloading 50 at a time. The solution is to utilize is a thread pool, spawning a fixed number of threads to download all the URLs from a queue, 50 at a time.</description></item><item><title>How to install Qt 5.6 and PyQt5 in a Python 3.4 virtual environment on Mac OS X and Linux</title><link>https://www.metachris.dev/2016/03/how-to-install-qt56-pyqt5-virtualenv-python3/</link><pubDate>Thu, 24 Mar 2016 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2016/03/how-to-install-qt56-pyqt5-virtualenv-python3/</guid><description>This is a simple guide on installing the latest Qt (currently 5.6) and PyQt5 on Mac OS X 10.11 (El Capitan) and Linux with Python 3.4, inside a virtual environment.
Installation Steps
Python 3 Xcode and command-line tools Qt libraries Virtual environment SIP Python package PyQt5 Python package Python 3 First of all, make sure that Python 3 is available on your system. You can easily check this by opening the terminal and entering the command python3.</description></item><item><title>Find broken hyperlinks in a PDF document with PDFx</title><link>https://www.metachris.dev/2016/03/find-broken-hyperlinks-in-a-pdf-document-with-pdfx/</link><pubDate>Sat, 19 Mar 2016 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2016/03/find-broken-hyperlinks-in-a-pdf-document-with-pdfx/</guid><description>PDFx is a free command-line tool to extract references, links and metadata from PDF files. You can also use it to find broken links in a PDF file, using pdfx -c:
For each URL and PDF reference, pdfx performs a HEAD request and checks the status code. It there are broken links, PDFx print the link with the page number where the link was found in the original pdf:
$ pdfx https://weakdh.</description></item><item><title>Free Transactional Email Services - The Best Alternatives to Mandrill &amp; Co.</title><link>https://www.metachris.dev/2016/03/free-transactional-email-services-the-best-alternatives-to-mandrill/</link><pubDate>Tue, 08 Mar 2016 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2016/03/free-transactional-email-services-the-best-alternatives-to-mandrill/</guid><description>Mandrill, the beloved-by-many transactional email service, recently announced that it will switch to a paid-only model under the MailChimp umbrella. This came as a surprise to many developers who used them for sending emails for free from various servers and backends. This post provides a round-up of some of the more popular Mandrill alternatives.
Free Transactional Email Providers This section covers a number of popular transactional email providers with a free tier.</description></item><item><title>How to Optimize Wordpress Performance with nginx and WP Super Cache</title><link>https://www.metachris.dev/2016/02/how-to-optimize-wordpress-performance-with-nginx-and-wp-super-cache/</link><pubDate>Sun, 21 Feb 2016 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2016/02/how-to-optimize-wordpress-performance-with-nginx-and-wp-super-cache/</guid><description>This is a simple and effective method how to serve Wordpress pages blazingly fast: produce static HTML files with WP Super Cache, and serve them directly with nginx.
WP Super Cache (on Github) is an immensely popular, official Wordpress caching plugin with more than 1 million active installations. Basically the plugin produces static html pages of your posts and pages, and anonymous users can directly load the html without any interaction with PHP.</description></item><item><title>Comparison of 10 ACME / Let's Encrypt Clients</title><link>https://www.metachris.dev/2015/12/comparison-of-10-acme-lets-encrypt-clients/</link><pubDate>Mon, 14 Dec 2015 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2015/12/comparison-of-10-acme-lets-encrypt-clients/</guid><description>Let&amp;rsquo;s Encrypt is a new certificate authority backed by Mozilla, Akamai, EFF, Facebook and others, which provides free, automated SSL/TLS certificates. The public beta started on December 3, 2015 and a whole lot of certificates have been issued already:
Several clients to automate issuing, renewing and revoking certificates have been released both by the community and the Let&amp;rsquo;s Encrypt team. This post is an overview and comparison of 10 popular Let&amp;rsquo;s Encrypt clients:</description></item><item><title>Creating standalone Mac OS X applications with Python and py2app</title><link>https://www.metachris.dev/2015/11/create-standalone-mac-os-x-applications-with-python-and-py2app/</link><pubDate>Sat, 28 Nov 2015 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2015/11/create-standalone-mac-os-x-applications-with-python-and-py2app/</guid><description>In this tutorial we&amp;rsquo;ll be using py2app to create a standalone OSX application from a Python 2 or 3 source code with a simple Tkinter user interface.
"py2app is a Python setuptools command which will allow you to make standalone application bundles and plugins from Python scripts. py2app is similar in purpose and design to py2exe for Windows." Relevant links about py2app:
Documentation Source on BitBucket (last commit 2015-05-05) Issue Tracker, Mailing List This guide is loosely based on the official tutorial.</description></item><item><title>Python Helpers for String/Unicode Encoding, Decoding and Printing</title><link>https://www.metachris.dev/2015/11/python-tools-for-string-unicode-encoding-decoding-printing/</link><pubDate>Mon, 23 Nov 2015 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2015/11/python-tools-for-string-unicode-encoding-decoding-printing/</guid><description>String encoding and decoding as well as encoding detection can be a headache, more so in Python 2 than in Python 3. Here are two little helpers which are used in PDFx, the PDF metadata and reference extractor:
make_compat_str - decode any kind of bytes/str into an unicode object print_to_console - print (unicode) strings to any kind of console (even windows with cp437, etc.) All of this code is in the public domain via The Unlicense.</description></item><item><title>Machine Learning on Amazon AWS GPU Instances</title><link>https://www.metachris.dev/2015/11/machine-learning-on-amazon-aws-gpu-instances/</link><pubDate>Sun, 22 Nov 2015 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2015/11/machine-learning-on-amazon-aws-gpu-instances/</guid><description>Machine learning algorithms regularly utilize GPUs to parallelize computations, and Amazon AWS GPU Instances provide cheap and on-demand access to capable virtual servers with NVIDIA GPUs.
GPU Instances come in two flavors: G2.2xlarge and G2.8xlarge:
Model GPUs vCPU Mem (GiB) SSD Storage (GB) g2.2xlarge 1 8 15 1 x 60 g2.8xlarge 4 32 60 2 x 120 The GPU instances feature Intel Xeon E5-2670 (Sandy Bridge) Processors and NVIDIA GPUs with 1,536 CUDA cores and 4GB of video memory each.</description></item><item><title>David Beazley - Python Concurrency From the Ground Up (LIVE @PyCon 2015)</title><link>https://www.metachris.dev/2015/11/david-beazley-python-concurrency-from-the-ground-up-live-pycon-2015/</link><pubDate>Fri, 13 Nov 2015 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2015/11/david-beazley-python-concurrency-from-the-ground-up-live-pycon-2015/</guid><description>Great talk and engaging live coding session &amp;ldquo;Python Concurrency From the Ground Up&amp;rdquo; by David Beazley at PyCon 2015! Recommended 47 minutes watch.
A few selected quotes:
The fact that he walked in and did this demo from scratch while keeping the packed room engaged was incredible.﻿ A more comprehensive quote:
David Beazley's 2015 PyCon talk on concurrency was one of my favorite talks of the conference, and it was almost all just live coding.</description></item><item><title>How to install Node.js 5.x on CentOS and Ubuntu/Debian</title><link>https://www.metachris.dev/2015/10/how-to-install-nodejs-5-on-centos-and-ubuntu/</link><pubDate>Fri, 30 Oct 2015 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2015/10/how-to-install-nodejs-5-on-centos-and-ubuntu/</guid><description>Node.js v5.x is deprecated. Take a look at the current instructions on how to install Node.js 6.x Long-Term Support (LTS) and Node.js 7.x.
Node.js v5.0.0 (stable) was released today, just a month after the v4.x long-term-support (LTS) release! Here is a quick and easy way to install the current Node.js 5.x (including npm) on CentOS and Ubuntu/Debian.
Installing Node.js 5.x on CentOS 7 The easiest way is to install the latest Node.</description></item><item><title>PDFx v1.0 - Extract metadata and URLs from PDFs, and download all referenced PDFs</title><link>https://www.metachris.dev/2015/10/pdfx-extract-metadata-and-download-references-from-pdfs/</link><pubDate>Mon, 26 Oct 2015 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2015/10/pdfx-extract-metadata-and-download-references-from-pdfs/</guid><description>I just released PDFx version 1.0, a Python tool and library to extract metadata and URLs from PDFs, and to automatically download all referenced PDFs. The project is released under the Apache license with the source code on Github!
Features Extract metadata and PDF URLs from a given PDF (file or URL) Download all PDFs referenced in the original PDF Works with local and online pdfs Use as command-line tool or Python package Compatible with Python 2 and 3 Quick Start Grab a copy of pdfx with easy_install or pip and run it:</description></item><item><title>How to install Node.js 4.x (LTS) on CentOS</title><link>https://www.metachris.dev/2015/10/how-to-install-nodejs-4-on-centos/</link><pubDate>Thu, 22 Oct 2015 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2015/10/how-to-install-nodejs-4-on-centos/</guid><description>Node.js v4.x is deprecated. Take a look at the current instructions on how to install Node.js 6.x Long-Term Support (LTS) and Node.js 7.x.
Recently io.js and node.js merged again into a single codebase in Node v4.0.0. The fork happened in December 2014 and io.js has seen rapid improvements and fast uptake of upstream V8 features.
Now the merge has happened, and with it comes a lot of features from the io.</description></item><item><title>Retrofit 2.0 Samples</title><link>https://www.metachris.dev/2015/10/retrofit-2-samples/</link><pubDate>Mon, 12 Oct 2015 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2015/10/retrofit-2-samples/</guid><description>This post is about using Retrofit 2.0 (beta) to consume HTTP based APIs.
Retrofit is a great and popular API client library for Java (and by extension also for Android) developed by Square. Here&amp;rsquo;s a few links to start things off:
Retrofit Homepage Retrofit Source on Github Retrofit Javadoc Blog post about Retrofit 2.0 Source code with samples for this post is available on Github.
Retrofit makes it easy to develop API clients by describing API endpoints and the results like this:</description></item><item><title>Yet Another DMCA Takedown</title><link>https://www.metachris.dev/2011/12/yet-another-dmca-takedown/</link><pubDate>Wed, 21 Dec 2011 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2011/12/yet-another-dmca-takedown/</guid><description>Another DMCA takedown of one of my Android apps. This time initiated by The New York Times Company for a three year old app titled &amp;ldquo;NYTimes Article Search&amp;rdquo;. Instead of having their lawyers send the DMCA notice to Google which immediately suspends the respective app, they could have just sent me an email and I’d have changed the name immediately. Quite sad how the world is driven by lawyers these days…</description></item><item><title>App Engine Boilerplate 2.0 – Using html5-boilerplate v2 on Google App Engine</title><link>https://www.metachris.dev/2011/08/app-engine-boilerplate-2-0-using-html5-boilerplate-v2-on-google-app-engine/</link><pubDate>Fri, 12 Aug 2011 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2011/08/app-engine-boilerplate-2-0-using-html5-boilerplate-v2-on-google-app-engine/</guid><description>Just a year ago Paul Irish and several contributors started working on html5-boilerplate, a popular repository of boilerplate and best practices for creating cross-browser compatible, html5-enabled websites. Thanks to the efforts of many front-end developers and researchers who have spent countless hours on developing and evolving best practices, html5 boilerplate is rapidly maturing and establishing itself as the de-facto standard html boilerplate.
The authors just celebrated the one-year anniversary with the release of version 2.</description></item><item><title>App Engine Boilerplate</title><link>https://www.metachris.dev/2011/04/app-engine-boilerplate/</link><pubDate>Tue, 05 Apr 2011 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2011/04/app-engine-boilerplate/</guid><description>I recently started appengine-boilerplate, a repository of often used boilerplate code for Google&amp;rsquo;s App Engine, which allows to quickly setup new projects without having to re-invent the most common wheels. All code is released under the BSD license, and It comes with the following goodies:
html5-boilerplate (incl. jQuery) OpenID authentication User preferences data model (with gravatar image link) Memcache for datastore objects Handlers for /, /profile, /login and /logout Custom template tags Various tools such as is_testenv(), decode(input) and slugify(title) app.</description></item><item><title>How to get 4 to 5 stars in the Android market (Appirater for Android)</title><link>https://www.metachris.dev/2011/03/how-to-get-4-to-5-stars-in-the-android-market-appirater-for-android/</link><pubDate>Mon, 07 Mar 2011 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2011/03/how-to-get-4-to-5-stars-in-the-android-market-appirater-for-android/</guid><description>Short answer: Ask your especially engaged users to rate the app (eg. with a tool such as AppRater).
iPhone developer Amro Mousa published a post yesterday with recommendations about how to reach a high average rating on the AppStore, since many app users are only remembered to rate an app on uninstalling, which naturally leads to less-than-optimal reviews and ratings.
The reality is some developers pay for downloads and reviews to get higher rankings on the App Store.</description></item><item><title>Scaling Python Servers with Worker Processes and Socket Duplication</title><link>https://www.metachris.dev/2011/01/scaling-python-servers-with-worker-processes-and-socket-duplication/</link><pubDate>Sat, 29 Jan 2011 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2011/01/scaling-python-servers-with-worker-processes-and-socket-duplication/</guid><description>Developing servers that scale is usually quite tricky, even more so with Python and the absence of worker threads which can run on multiple cpu cores [1]. A possible solution are worker processes that duplicate the client’s socket, a technique that allows the workers to processes requests and send responses directly to the client socket. This approach is particularly useful for long lasting connections with more than one request per session.</description></item><item><title>Unicode and UTF Overview</title><link>https://www.metachris.dev/2010/12/unicode-overview/</link><pubDate>Mon, 27 Dec 2010 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2010/12/unicode-overview/</guid><description>This post is a brief technival overview of Unicode, a widely used standard for multilingual character representation, and the family of UTF-x encoding algorithms. First a brief introduction to Unicode:
Unicode is intended to address the need for a workable, reliable world text encoding.
Unicode could be roughly described as &amp;ldquo;wide-body ASCII&amp;rdquo; that has been stretched to 16 bits to encompass the characters of all the world&amp;rsquo;s living languages. In a properly engineered design, 16 bits per character are more than sufficient for this purpose.</description></item><item><title>Advice for Android Developers: Prepare for App Acquisition</title><link>https://www.metachris.dev/2010/12/advice-for-android-developers-prepare-for-app-acquisition/</link><pubDate>Mon, 20 Dec 2010 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2010/12/advice-for-android-developers-prepare-for-app-acquisition/</guid><description>Here’s a brief but important advice for Android app developers: starting with your first app, prepare for the situation where a company wants to acquire one of your applications. Use a unique signing key (alias) for each app! Else you’ll be forced to either cancel the acquisition or hand out the key you use for other apps as well.
http://developer.android.com/guide/publishing/app-signing.html:
Android requires that all apps be digitally signed with a certificate before they can be installed.</description></item><item><title>Useful Linux Command of the Day - compgen</title><link>https://www.metachris.dev/2010/12/useful-linux-command-of-the-day-compgen/</link><pubDate>Sat, 11 Dec 2010 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2010/12/useful-linux-command-of-the-day-compgen/</guid><description>I&amp;rsquo;ve just learned about a particularly nice Linux shell command: compgen
$ compgen -c &amp;hellip; list all the commands you could run.
$ compgen -a &amp;hellip; list all the aliases you could run.
$ compgen -b &amp;hellip; list all the built-ins you could run.
$ compgen -k &amp;hellip; list all the keywords you could run.
$ compgen -A function &amp;hellip; list all the functions you could run.
$ compgen -A function -abck &amp;hellip; list all the above in one go.</description></item><item><title>How to Setup Android 2.3 (Gingerbread) in Eclipse, including the Galaxy Tab SDK</title><link>https://www.metachris.dev/2010/12/how-to-setup-android-2-3-gingerbread-in-eclipse-including-the-galaxy-tab-sdk/</link><pubDate>Mon, 06 Dec 2010 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2010/12/how-to-setup-android-2-3-gingerbread-in-eclipse-including-the-galaxy-tab-sdk/</guid><description>Today Android version 2.3 (Gingerbread, API Level 9) was released, including an updated Android plugin for Eclipse and the API Level 9 SDK.
The release includes some very welcome updates for both users and developers, including better text selection tools, access to more sensor data, improved garbage collection, updated video drivers for better OpenGL performance, a new media framework including VP8 video compression, WebM video container format, AAC audio encoding and AMR wideband encoding.</description></item><item><title>History of What.CD’s Bittorrent Tracker Software</title><link>https://www.metachris.dev/2010/10/history-of-what-cds-bittorrent-tracker-software/</link><pubDate>Wed, 13 Oct 2010 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2010/10/history-of-what-cds-bittorrent-tracker-software/</guid><description>An interesting post about the private torrent tracker what.cd surfaced on HN today, portraying the attempts and final success of creating a highly scalable torrent tracker software. It&amp;rsquo;s an interesting read in particular because of the honesty of their development process and the description of multiple attempts to write a tracker from scratch in C.
Ocelot: The story of a torrent tracker</description></item><item><title>Python, Threads and the Global Interpreter Lock (GIL)</title><link>https://www.metachris.dev/2010/10/python-threads-and-the-global-interpreter-lock-gil/</link><pubDate>Wed, 13 Oct 2010 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/2010/10/python-threads-and-the-global-interpreter-lock-gil/</guid><description>This post is about Python, Threads, Multiprocessing, the GIL, and a great talk by David Beazley titled &amp;ldquo;Inside the Python GIL&amp;rdquo;.
Threads Threads make it possible to execute multiple pieces of code in parallel, which means either utilizing multiple processors or having the operating system schedule execution time for the threads sequentially on one processor. In contrast to multiprocessing (forking) where multiple separated processes are started, all threads run in a single process and have access to the same resources.</description></item><item><title>About</title><link>https://www.metachris.dev/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/about/</guid><description>Hey there 👋 I&amp;rsquo;m Chris - aka metachris - a software builder who loves collaborating, dad of two, and living in Austria. I mostly write about software engineering, and occasionally bits about life.
Currently I&amp;rsquo;m at Flashbots, where I contribute to engineering leadership and work with several teams and projects, including BuilderNet and MEV-Boost.
What draws me to Flashbots is the combination of amazing people, a mission I care about (keeping Ethereum decentralized by mitigating the negative externalities of MEV), and the open, collaborative nature of the org.</description></item><item><title>Contact</title><link>https://www.metachris.dev/contact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/contact/</guid><description>chris (at) linuxuser.at
https://twitter.com/metachris</description></item><item><title>Most Simple Ajax Chat Ever</title><link>https://www.metachris.dev/projects/most-simple-ajax-chat-ever/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/projects/most-simple-ajax-chat-ever/</guid><description>Most Simple Ajax Chat Ever
A fun little project from January 2006. Back then ajax just started becoming popular, but with very few tools around. jQuery came out later that year, Github just two years later, in 2008.
Original code on Github Original site on web.archive.org Featured on Wired in February 2006
Features
Super simple Efficient spam filter (thanks to some live &amp;lsquo;hackers&amp;rsquo; at launch) Only 2 files needed (index.html, w.</description></item><item><title>PDFx - Extract references and metadata from PDF documents, and download all referenced PDFs</title><link>https://www.metachris.dev/pdfx/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/pdfx/</guid><description>Reading over this paper and its references recently, I thought it would be great to be able to download all the references at once&amp;hellip; This inspired me to write a little tool to do just that, and now it&amp;rsquo;s done and released under the Apache open source license:
https://github.com/metachris/pdfx
Features
Extract references and metadata from a given PDF Detects pdf, url, arxiv and doi references Fast, parallel download of all referenced PDFs Find broken hyperlinks (using the -c flag) (more) Output as text or JSON (using the -j flag) Extract the PDF text (using the --text flag) Use as command-line tool or Python package Compatible with Python 2 and 3 Works with local and online pdfs Getting Started Grab a copy of pdfx with easy_install or pip and run it:</description></item><item><title>Projects &amp; Previous Work</title><link>https://www.metachris.dev/projects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.metachris.dev/projects/</guid><description>GitHub: github.com/metachris
Organizations &amp;amp; Collaborations I&amp;rsquo;ve had the privilege to work with:
Blockchain &amp;amp; Web3:
Flashbots - MEV research and infrastructure Nash - Cryptocurrency platform and wallet NEO Smart Economy - Smart contract platform City of Zion - NEO developer community Red Pulse - Blockchain research platform Tech &amp;amp; Open Source:
Google Summer of Code (2008) One Laptop Per Child (OLPC) - Educational technology Metalab Vienna - Hackerspace and community MeetMe.</description></item></channel></rss>