The Curious Engineer

All blogs / JavaScript / TypeScript

Christian Fei's Blog

cri.dev

Christian Fei's blog - Software Developer and hobbyist maker - A blog about Programming, DIY and personal ramblings

JavaScript / TypeScriptWeb developmentElectronicsDev tools / editors / IDEsGeneral

Posts
318 from 1 May 2020 to 24 Jun 2026
Posting
now and then (2 in the last year)
Kind
personal blog
Feed
https://cri.dev/rss.xml

2026 2

  1. node.js syntax checker bug about shadowing in private fields
  2. AI hype

2025 3

  1. How to fix hanging tests in Node.js
  2. How to use an iPad Pro as an external display
  3. Implementing HTTP range requests in Node.js

2024 18

  1. Crazy CSS experiments
  2. Visualize Bitcoin buys on Google Sheets - cri.dev
  3. Wanna learn something? Recreate it
  4. How to install Epic Games store on iPad with iOS 18
  5. Exclude specific tags in Eleventy using a custom filter
  6. Start Kindle script on system boot with init.d
  7. Converting my Kindle to a digital photo frame
  8. Display jailbroken Kindle info using lipc-get-prop
  9. Displaying RTSP stream on a jailbroken Kindle Paperwhite
  10. No ImageMagick? No problem, use FFmpeg!
  11. Display IP address on a jailbroken Kindle using eips
  12. Rooted / Jailbroke my Kindle Paperwhite
  13. How to add a TP-link Tapo camera to homeassistant
  14. PETG I love you, but you're bringing me down
  15. Google domains / Squarespace transfer (using Porkbun and Cloudflare)
  16. Google Sheets got fixed on iPad
  17. Google Sheets on iPad? More like 'Google Shiits' 💩
  18. Today is my Lucky Backup Day

2023 41

  1. ZenGPT: a simple ChapGPT alternative frontend
  2. htmx and Alpine.js are actually pretty awesome
  3. Using pure functions as views (with htmx and alpine.js)
  4. iPad can now control the audio when connected to an external monitor
  5. My iPad/iOS 17 wish list for 2024
  6. 3d printed stuff over the years
  7. Improving my tags using OpenAI's Chat completions API
  8. ChatGPT for learning Jamaican Patois
  9. A stupid web component
  10. Apple watch personal use cases
  11. htmx is just too much - cri.dev
  12. Protonmail iOS team seems super reactive to user feedback
  13. Southworking
  14. Learning about Web Components
  15. MiCA pizza e fichi
  16. Unblock single domain in AdGuard Home
  17. Airtag battery still low after replacing with new CR 2032 batteries
  18. Opinions on working fully remotely
  19. Favorite music while programming
  20. WebAuthn and Secure Payments Confirmation (SPC)
  21. Ti ricordi di Jumpy?
  22. About 1:1s
  23. Modern frontend apps with ES modules and import maps
  24. My impractical RSS reader in Google Sheets
  25. Provisioning a Raspberry Pi with Ansible (and an iPad)
  26. Node.js 20 is here
  27. ChatGPT practical use cases and examples
  28. Self-hosting miniflux with docker and provisioning with Ansible
  29. How to add Node.js & npm to jekyll in GitHub Codespaces
  30. Programming on an iPad - cri.dev
  31. Minimal Ansible Playbook to provision a server - cri.dev
  32. 3D printing with an iPad, Raspberry Pi and OctoPrint - cri.dev
  33. Update Node.js version on CloudFlare Pages - cri.dev
  34. malicious chrome extension - cri.dev
  35. yubikey spare keys - cri.dev
  36. 'Being agile' vs 'Doing Agile' - cri.dev
  37. How I edit this site on an iPad - cri.dev
  38. I cannot wait for the passwordless authentication future of the web - cri.dev
  39. How to become a better Software Developer - cri.dev
  40. OpenAI iOS Shortcut: Siri-like ChatGPT - cri.dev
  41. Artificial "intelligence" - cri.dev

2022 13

  1. Voracious RSS - cri.dev
  2. Escaping the bullshit web - cri.dev
  3. minimal-analytics, one year later - cri.dev
  4. Did an ES module migration, and it was okay - cri.dev
  5. Self-hosting nitter with docker-compose and nginx - cri.dev
  6. Fix node command not found using nvm - cri.dev
  7. Screen Wake Lock API - cri.dev
  8. Elixir GenServer name registration - cri.dev
  9. Web Workers + search index = decent blog search - cri.dev
  10. Barcode Detection API - cri.dev
  11. Kernel.===/3 - cri.dev
  12. WebTransport - cri.dev
  13. Productive macOS tricks - cri.dev

2021 64

  1. elixir alias __module__ - cri.dev
  2. cons - cri.dev
  3. Aggregates in domain driven design - cri.dev
  4. Domain events in domain driven design - cri.dev
  5. My Domain-Driven-Design study path - cri.dev
  6. Pattern matching with Enum.map in Elixir - cri.dev
  7. elixir mix test --stale --listen-to-stdin - cri.dev
  8. cqrs es with commanded in elixir - cri.dev
  9. osint framework - cri.dev
  10. Elixir Ecto guides and tutorials - cri.dev
  11. redirect route in phoenix - cri.dev
  12. Most useful mac keyboard shortcut - cri.dev
  13. What is a charlist in Elixir - cri.dev
  14. Vex, a validation library in Elixir - cri.dev
  15. exploring the github cli - cri.dev
  16. Spoonerism - cri.dev
  17. QR code - cri.dev
  18. 4 rules of simple design - cri.dev
  19. Useful homebrew formulas for Mac - cri.dev
  20. How to execute a remote script with Ansible - cri.dev
  21. 7 Visual Studio Code extensions I regularly use - cri.dev
  22. Spotlight not working on Big Sur: how to fix Spotlight index on MacOS Big Sur - cri.dev
  23. duckduckgo short url - cri.dev
  24. mallet operator - cri.dev
  25. queueMicrotask - cri.dev
  26. manjaro connect bluetooth keyboard at login screen - cri.dev
  27. Experiment: Navigating the web with JavaScript disabled - cri.dev
  28. Discontinuing comments - cri.dev
  29. scroll-behaviour - cri.dev
  30. How many visitors block ads and web analytics? - cri.dev
  31. How to solve manjaro different login, missing plasma desktop package - cri.dev
  32. nmtui - cri.dev
  33. CAPTCHA - cri.dev
  34. Self-hosting with nginx + docker-compose - cri.dev
  35. Lazy loading images in 11ty/eleventy - cri.dev
  36. Simple Server-sent events example in Node.js/JavaScript - cri.dev
  37. How to test a function that works with time - cri.dev
  38. Making Minimal Analytics - cri.dev
  39. Beware of Monero mining attack through GitHub Actions and malicious Pull requests - cri.dev
  40. Switching to CloudFlare Pages, from AWS S3 + CloudFlare DNS - cri.dev
  41. Simple Static site/blog search in 14 Lines of JavaScript - cri.dev
  42. Cos’è e com’è stato sviluppato il Lean Validation Playbook - cri.dev
  43. What apps I'm currently self-hosting - cri.dev
  44. Manage multiple network connections in Manjaro (Wireguard VPN + Pi-hole) - cri.dev
  45. Self-hosted Miniflux + Wallabag - cri.dev
  46. Tracking RSS subscriptions with UTM parameters - cri.dev
  47. Learn Elixir - A study path - cri.dev
  48. Beware of new Ledger phishing emails from myledgerlive - cri.dev
  49. Read mbox file with mutt or Thunderbird - cri.dev
  50. Bitcoin is trademarked. Is it really? - cri.dev
  51. 3D-printed Bitcoin desk watcher - cri.dev
  52. My reading stack with Miniflux/RSS & Pocket - cri.dev
  53. My notes while learning Elixir - cri.dev
  54. 5$/month Self Hosted VPN with WireGuard - cri.dev
  55. Let's learn some Elixir, again - cri.dev
  56. Comments on cri.dev are BACK - cri.dev
  57. Put that in the URL, please - cri.dev
  58. A retrospective of 100k yearly pageviews - cri.dev
  59. Getting started with Mastodon - cri.dev
  60. About donations, free and paid content - cri.dev
  61. Pair AirPods with Linux Ubuntu - cri.dev
  62. Experimenting with Webmention - cri.dev
  63. From Mac to Linux - cri.dev
  64. 2020 - A retrospective - cri.dev

2020 59

  1. How to convert Pandas Series column values to lowercase - cri.dev
  2. GreeMta Madrid Green Sustainability challenge - cri.dev
  3. Notes on 'Blogging for Business' - cri.dev
  4. Node.js 15 is here - cri.dev
  5. What is technical debt? - cri.dev
  6. Cleanup docker dangling images - cri.dev
  7. Indie makers and the Sunk Cost Fallacy - cri.dev
  8. Test driving a HackerNews scraper with Node.js - cri.dev
  9. Tracking HackerNews history in git - cri.dev
  10. How to make Polls with Plausible Analytics - cri.dev
  11. Fix npm process killed during npm install - cri.dev
  12. Communicating with Bangle.js Watch over BLE with Node.js - cri.dev
  13. Bangle watch as an accelerometer mouse - cri.dev
  14. How to fix xcode-select no developer tools found - cri.dev
  15. Top resources for Bangle.js Watch Development - cri.dev
  16. The High Privacy Cost of a “Free” Website - cri.dev
  17. Show realtime visitors on your website with Plausible Analytics and CloudFlare Workers - cri.dev
  18. Notes "Edward Snowden interviewed by Ron Paul" - cri.dev
  19. Why privacy matters - Glenn Greenwald - cri.dev
  20. Fast virtual scrolling with preact - cri.dev
  21. Get things done for real - cri.dev
  22. Notes on “I've got nothing to hide” - cri.dev
  23. What is a retrospective? - cri.dev
  24. Raspberry Pi as a local server for self hosting applications - cri.dev
  25. 'But I have nothing to hide.' - cri.dev
  26. DIY IoT door monitor with ESP8266 - cri.dev
  27. Simple Time-lapse with a Raspberry Pi - cri.dev
  28. Watermark images with montage (ImageMagick) - cri.dev
  29. 4 Most powerful Mini-PCs in 2020 - cri.dev
  30. Don't buy the AirPods Pro - Another Rattlegate story - cri.dev
  31. Simple email trick to manage your newsletters - cri.dev
  32. Techniques to improve SEO for a static website or blog - cri.dev
  33. Made 13 Dollars with Brave and Basic Attention token - cri.dev
  34. How to fix possible EventEmitter memory leak detected - cri.dev
  35. Simple event tracking with Plausible Analytics - cri.dev
  36. Notes on 'Marketing for Developers' - devmarketing.xyz - cri.dev
  37. Aggregations with sub-documents in MongoDB - cri.dev
  38. Get distinct field names of sub documents in MongoDB - cri.dev
  39. How to solve Docker 'Incompatible CPU detected' - cri.dev
  40. How to solve Docker 'docker-credential-desktop not installed or not available in PATH' - cri.dev
  41. Most valuable developer linux notebooks in 2020 - cri.dev
  42. Install Homeassistant on Raspberry Pi - cri.dev
  43. Notes on "Code BEAM V 2020" - cri.dev
  44. Solve Verdaccio EINTEGRITY error - cri.dev
  45. Authenticated uplinks with verdaccio - cri.dev
  46. Upgrade HTTP requests with X-Forwarded-Proto Header in HAProxy - cri.dev
  47. Upgrading MongoDB 3.6 to 4.2 with brew - cri.dev
  48. Clean up Mac OS: How I freed 35GB of space - cri.dev
  49. Testing in Node.js by example using the SOLID principles - cri.dev
  50. Fixing 431 Request Header Fields Too Large in Node.js - cri.dev
  51. Setting up a Verdaccio npm registry - cri.dev
  52. Privacy-friendly alternatives to popular services and tools - cri.dev
  53. Elixir trick: start an Observer window with mix - cri.dev
  54. Minimal dark mode with CSS and JavaScript - cri.dev
  55. Validate your RSS feed - cri.dev
  56. Ad blocking with Raspberry Pi and Pi-hole - cri.dev
  57. Using µcompress to dramatically optimize static assets - cri.dev
  58. Nullish coalescing in Node.js 14 and JavaScript - cri.dev
  59. Optional chaining in Node.js 14 and JavaScript - cri.dev

Undated 118

  1. 2020 04 28 Road to Elixir: Monitor Crypto assets
  2. 2020 04 24 Resuming Elixir by self hosting plausible analytics
  3. 2020 04 23 How to exclude Google Analytics in your Cypress E2E tests
  4. 2020 04 19 devblog yet another static site generator seriously
  5. 2020 04 07 Preferred Visual Studio Code theme in 2020
  6. 2020 04 05 Boring software development
  7. 2020 04 04 Full list of Chromium Puppeteer flags
  8. 2020 03 30 How to connect puppeteer to a Proxy
  9. 2020 03 30 How to solve Puppeteer Chrome Error ERR INVALID ARGUMENT
  10. 2020 03 27 How to solve Please specify which branch you want to rebase against
  11. 2020 03 09 Crawling a web site with browserless, puppeteer and Node.js
  12. 2020 03 08 Ultimate web scraping with browserless, puppeteer and Node.js
  13. 2020 03 07 How to create a Twitter application for user login
  14. 2020 03 07 Twitter OAuth Login with fastify and Node.js
  15. 2020 03 05 Twitter OAuth Login by example with Node.js
  16. 2020 03 04 Send a Telegram message with Darklang
  17. 2020 03 02 First steps with Darklang
  18. 2020 03 01 About Cloudflare's support for ccTLDs and gTLDs
  19. 2020 02 29 Take a photo with raspistill on a Raspberry Pi
  20. 2020 02 25 Simple npmrc management
  21. 2020 02 15 Twitter OAuth by example in Nodejs
  22. 2020 02 13 So Long and Thanks for All the Veggies
  23. 2020 02 08 Connect to mongo with monk in Node.js
  24. 2020 02 08 Minimal environments with dotenv and Node.js
  25. 2020 02 08 Simplest Vanilla JavaScript static site blog search for Jekyll, Hugo, 11.ty eleventy
  26. 2020 02 05 Lazy loading images in 2020
  27. 2020 01 29 How to recover from failed lerna publish
  28. 2020 01 28 The cleanest way to maintain connect express middlewares in node js
  29. 2020 01 03 Raspberry SSH connect over Wi Fi Wireless not working host not found
  30. 2019 12 12 the color fe1
  31. 2019 12 11 better web scraping with nodejs
  32. 2019 12 08 completed hacktoberfest 2019
  33. 2019 10 27 my blogging stack in 2020
  34. 2019 08 31 Run Cypress Integration Tests with GitHub Actions Workflow
  35. 2019 08 30 AWS Lambda S3 ffmpeg Timelapse
  36. 2019 08 29 Deploy Eleventy site with Github Actions on AWS S3
  37. 2019 08 29 Preferred way of defining flags in bash
  38. 2019 08 29 Simple telegram message with GitHub Actions
  39. 2019 08 26 Simple ad and trackers blocking with DNS
  40. 2019 08 25 Build for a slow connection
  41. 2019 07 19 Fun with single letter commands
  42. 2019 07 16 Upgrade MongoDB 3 to 4 on Ubuntu
  43. 2019 04 07 Get last non empty cell value in a spreadsheet
  44. 2019 04 04 How to fix Ansible error The task includes an option with an undefined variable
  45. 2018 12 09 Notes about Crash course in Machine Learning
  46. 2018 11 28 Publishing org scoped npm packages with travis
  47. 2018 10 31 my current blogging stack
  48. 2018 10 18 Start an npm script with pm2
  49. 2018 10 06 Make Anaconda executables available in your PATH fish shell
  50. 2018 07 11 clean android device storage move files to sd card remove junk files
  51. 2018 07 03 pm2 deploy shallow git repository with depth also known as fetch fast
  52. 2018 04 18 Fix Python 2 7 issue on OSX bad interpreter
  53. 2018 04 12 Easy rate limit API calls with p limit
  54. 2018 04 12 Notes about Blockchain for Smart Communities trentosmart TSCW18
  55. 2018 04 09 Fix issue with Pandoc MacOS Sierra and pdflatex xelatex
  56. 2018 04 05 Offloading my Inbox items to discover
  57. 2018 02 07 setup nginx as a reverse proxy with basic auth for an upstream
  58. 2018 01 31 a story about npm publish unpublish
  59. 2017 12 11 Mapping historic market data
  60. 2017 10 21 Building the new version of pomodoro.cc in the open
  61. 2017 10 13 Keeping an eye on your Crypto currency trades with Uebersicht
  62. 2017 04 15 Loop jekyll data directory files
  63. 2017 03 30 My dotfiles
  64. 2017 03 27 Prevent accidental quit of iTerm
  65. 2017 03 24 how i deploy my site
  66. 2017 03 23 how i build my site
  67. 2017 03 22 npm package kata
  68. 2017 02 24 Trying out Redash
  69. 2017 02 22 Chaining and indenting after the return statement
  70. 2017 02 10 How to read Hacker Newsletter
  71. 2017 02 05 Use Simple Jekyll Search on your blog in these easy steps
  72. 2016 05 28 discourse first installation steps
  73. 2016 02 03 i was at fosdem 2016 and it was awesome
  74. 2016 01 07 Forking is a commitment
  75. 2015 11 23 Using a daily activity log to keep track of your studies and bookmarks
  76. 2015 10 25 Elixir Plug order matters
  77. 2015 10 24 Jekyll new post script
  78. 2015 10 20 Introduction to AngularJS
  79. 2015 10 19 What Elixir and Angular have in common
  80. 2015 10 18 Favor Viewmodel over $scope
  81. 2015 10 15 Always $digest after you expect
  82. 2015 08 12 How to invalidate app cache
  83. 2015 07 07 The simplest way to set vagrant default directory
  84. 2015 07 05 Backup mongodb database from docker container to host
  85. 2015 07 04 Conforming to protocols in JavaScript
  86. 2015 05 09 Functional JavaScript write your negate not function
  87. 2015 05 24 write a damn readme
  88. 2015 04 27 About business value and confidence in legacy projects
  89. 2015 04 23 Angular ui router same url different state
  90. 2015 03 06 Cache speed up docker node modules
  91. 2015 03 04 How to pull request from command line
  92. 2015 02 23 How to use morgan with node simple router
  93. 2015 02 21 start your kata the right way
  94. 2015 01 17 Write your Protractor tests in Cucumber
  95. 2015 01 16 How to zsh and hub auto completition
  96. 2015 01 09 Debugging acceptance tests with Angular and Cucumber
  97. 2014 12 23 keep docker container running with upstart and dockers restart policy
  98. 2014 10 27 a list of angular style guides
  99. 2014 08 22 Angular Filter already selected items from ng options
  100. 2014 08 20 Solution to PhoneGap issue device ready has not fired after 5 seconds
  101. 2014 08 03 How to configure Drone behind an nginx proxy on a subdomain
  102. 2014 08 02 How to setup Drone CI on your server
  103. 2014 07 05 A practical workflow for resizing images with ImageMagick
  104. 2014 06 30 DRY dependency injection in Angular with gulp ng annotate
  105. 2014 05 26 A closer look at Angular's dependency injection
  106. 2014 03 04 updating dynamic fields and nested arrays in mongodb
  107. 2014 01 19 node and sudo now kiss
  108. 2014 01 18 simplest apache configuration for hosting multiple sites
  109. 2014 01 05 create a new github repository from the command line
  110. 2014 01 04 about vanity metrics and social media bullshit
  111. 2013 10 12 simple templating with regular expressions
  112. 2013 09 17 keep ssh connection alive
  113. 2013 07 16 how to gzip compression of css and js files on s3 with s3cmd
  114. 2013 06 06 how to lazy load disqus comments
  115. 2013 05 08 auto mount partitions on linux the easy way
  116. 2013 04 21 berlin april 2013
  117. 2013 03 29 replace links in files with regular expressions
  118. 2012 12 23 enable indexing of ntfs partition on mac