41554 blogs ยท [ { "id": "01a08764-b9c5-704b-b532-d41170a2108f", "title": "node.js syntax checker bug about shadowing in private fields", "url": "https://cri.dev/posts/2026-06-24-nodejs-syntax-checker-bug-private-fields-shadowing/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2026-06-24T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117191e364", "title": "AI hype", "url": "https://cri.dev/posts/2026-06-13-ai-hype/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2026-06-13T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41171c75f9d", "title": "How to fix hanging tests in Node.js", "url": "https://cri.dev/posts/2025-08-20-how-to-fix-node-js-mock-timers-enable-setinterval-tests-hanging-pending/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2025-08-20T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41171eb693d", "title": "How to use an iPad Pro as an external display", "url": "https://cri.dev/posts/2025-08-15-how-to-use-connect-ipad-as-primary-monitor-display-for-mac-mini-computer-nintendo-switch-playstation/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2025-08-15T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41172300112", "title": "Implementing HTTP range requests in Node.js", "url": "https://cri.dev/posts/2025-06-18-how-to-http-range-requests-video-nodejs/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2025-06-18T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d411728f5615", "title": "Crazy CSS experiments", "url": "https://cri.dev/posts/2024-12-19-crazy-css-experiments-visualization-animation/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-12-19T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117fb45b2b", "title": "Wanna learn something? Recreate it", "url": "https://cri.dev/posts/2023-09-03-learning-recreate-software-framework/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-11-16T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d411746074c4", "title": "How to install Epic Games store on iPad with iOS 18", "url": "https://cri.dev/posts/2024-09-14-how-to-install-epic-games-store-ipad-ios-18/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-10-12T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d411734b061f", "title": "Exclude specific tags in Eleventy using a custom filter", "url": "https://cri.dev/posts/2024-09-21-how-to-exclude-tags-collection-filter-eleventy/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-09-21T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41173cc1190", "title": "Start Kindle script on system boot with init.d", "url": "https://cri.dev/posts/2024-09-15-Start-Kindle-script-on-system-boot-with-init/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-09-15T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d411741015f8", "title": "Converting my Kindle to a digital photo frame", "url": "https://cri.dev/posts/2024-09-16-Kindle-image-carousel-custom-script/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-09-15T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41174575218", "title": "Display jailbroken Kindle info using lipc-get-prop", "url": "https://cri.dev/posts/2024-09-14-Display-jailbroken-Kindle-info-using-lipc-get-prop/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-09-14T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41174978ac8", "title": "Displaying RTSP stream on a jailbroken Kindle Paperwhite", "url": "https://cri.dev/posts/2024-09-13-display-tapo-surveillance-camera-kindle-ffmpeg-jailbreak-root/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-09-13T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41174f57271", "title": "No ImageMagick? No problem, use FFmpeg!", "url": "https://cri.dev/posts/2024-09-13-no-imagemagick-no-problem-use-ffmpeg/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-09-13T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41175407633", "title": "Display IP address on a jailbroken Kindle using eips", "url": "https://cri.dev/posts/2024-09-13-first-kindle-rooted-jailbreak-script-eips-show-ip-address/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-09-11T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117589365d", "title": "Rooted / Jailbroke my Kindle Paperwhite", "url": "https://cri.dev/posts/2024-08-28-rooted-my-kindle-paperwhite/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-08-28T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41175db8a22", "title": "How to add a TP-link Tapo camera to homeassistant", "url": "https://cri.dev/posts/2024-08-03-how-to-add-tplink-tapo-camera-c210-homeassistant/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-08-03T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d411765b1786", "title": "PETG I love you, but you're bringing me down", "url": "https://cri.dev/posts/2024-07-11-3d-printing-petg-stringing-blobs-first-layer-tips-tricks/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-07-11T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d411774ffb3e", "title": "Google domains / Squarespace transfer (using Porkbun and Cloudflare)", "url": "https://cri.dev/posts/2024-07-07-google-domains-squarespace-transfer-using-porkbun-cloudflare-dns/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-07-07T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41177602481", "title": "Google Sheets got fixed on iPad", "url": "https://cri.dev/posts/2024-02-13-google-sheets-ipad-working/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-06-27T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41178424c89", "title": "Google Sheets on iPad? More like 'Google Shiits' ๐Ÿ’ฉ", "url": "https://cri.dev/posts/2023-11-04-google-sheets-ipad-slow/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-06-27T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41177b1f413", "title": "Today is my Lucky Backup Day", "url": "https://cri.dev/posts/2024-01-26-Today-is-my-Lucky-Backup-Day/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2024-01-26T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41179389988", "title": "ZenGPT: a simple ChapGPT alternative frontend", "url": "https://cri.dev/posts/2023-10-17-zengpt-chapgpt-alternative-frontend-opensource-self-hosting/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-10-22T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41178d213d9", "title": "htmx and Alpine.js are actually pretty awesome", "url": "https://cri.dev/posts/2023-10-19-htmx-alpine-awesome-javascript-frontend-stack/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-10-19T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41179eadaa1", "title": "Using pure functions as views (with htmx and alpine.js)", "url": "https://cri.dev/posts/2023-10-16-functions-as-views-javascript-node-javascript-template-htmx-alpine/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-10-16T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117a2c4c59", "title": "iPad can now control the audio when connected to an external monitor", "url": "https://cri.dev/posts/2023-10-15-apple-added-ipad-audio-control-external-monitor/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-10-16T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117dcaed6d", "title": "My iPad/iOS 17 wish list for 2024", "url": "https://cri.dev/posts/2023-09-27-ipad-ios-17-wish-list-2024/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-10-16T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117b4d971c", "title": "3d printed stuff over the years", "url": "https://cri.dev/posts/2023-10-06-3d-printed-stuff-useful-office-gadgets-travel/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-10-13T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117ac1e841", "title": "Improving my tags using OpenAI's Chat completions API", "url": "https://cri.dev/posts/2023-10-08-improve-tags-blogging-openai-chatgpt-nodejs-ai/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-10-08T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117afee7b5", "title": "ChatGPT for learning Jamaican Patois", "url": "https://cri.dev/posts/2023-10-07-chatgpt-language-learning-pidgin-creole-patois/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-10-07T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117c155c8c", "title": "A stupid web component", "url": "https://cri.dev/posts/2023-10-06-a-stupid-web-component/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-10-06T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117cd4aff0", "title": "Apple watch personal use cases", "url": "https://cri.dev/posts/2023-10-04-apple-watch-personal-use-cases/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-10-04T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117eb39346", "title": "Protonmail iOS team seems super reactive to user feedback", "url": "https://cri.dev/posts/2023-09-19-protonmail-ios-team-super-reactive-user-feedback/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-09-19T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d4117f405cbe", "title": "Southworking", "url": "https://cri.dev/posts/2023-09-14-southworking/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-09-14T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41180733f88", "title": "Learning about Web Components", "url": "https://cri.dev/posts/2023-08-25-learning-web-components/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-08-25T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-5367922c329d", "title": "MiCA pizza e fichi", "url": "https://cri.dev/posts/2023-04-21-MiCA-pizza-e-fichi/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-07-26T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d411815e3d71", "title": "Unblock single domain in AdGuard Home", "url": "https://cri.dev/posts/2023-07-24-unblock-single-domain-adguard-home/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-07-24T00:00:00+00:00" }, { "id": "01a08764-b9c5-704b-b532-d41181af38b2", "title": "Airtag battery still low after replacing with new CR 2032 batteries", "url": "https://cri.dev/posts/2023-07-08-airtag-battery-still-low-cr-2032-bitterant-coating-duracell/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-07-08T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-53678e443ba2", "title": "Opinions on working fully remotely", "url": "https://cri.dev/posts/2023-07-03-remote-work-opinions-software-development/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-07-03T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-53678e8e15fb", "title": "Favorite music while programming", "url": "https://cri.dev/posts/2023-06-27-favorite-music-programming-chill-lofi-trap-2023/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-06-27T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-53678f502c66", "title": "WebAuthn and Secure Payments Confirmation (SPC)", "url": "https://cri.dev/posts/2023-06-15-web-authentication-and-payments-future/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-06-15T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-53679049f716", "title": "Ti ricordi di Jumpy?", "url": "https://cri.dev/posts/2023-06-13-chi-si-ricorda-di-jumpy/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-06-13T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-53679104e735", "title": "About 1:1s", "url": "https://cri.dev/posts/2023-06-09-about-one-on-one-meetings/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-06-09T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-536791ec1824", "title": "Modern frontend apps with ES modules and import maps", "url": "https://cri.dev/posts/2023-05-03-Modern-frontend-apps-using-ES-modules-and-import-maps/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-05-03T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-536792b03c14", "title": "My impractical RSS reader in Google Sheets", "url": "https://cri.dev/posts/2023-04-20-My-impractical-RSS-reader-in-Google-Sheets/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-04-20T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-53679326cdc9", "title": "Provisioning a Raspberry Pi with Ansible (and an iPad)", "url": "https://cri.dev/posts/2023-04-20-Provisioning-a-Raspberry-Pi-with-Ansible-Playbook-iPad-Docker/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-04-20T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-536793889d79", "title": "Node.js 20 is here", "url": "https://cri.dev/posts/2023-04-19-nodejs-20-is-here/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-04-19T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-5367945866f5", "title": "ChatGPT practical use cases and examples", "url": "https://cri.dev/posts/2023-03-25-ChatGPT-practical-use-cases-examples/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-03-25T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-536795237efb", "title": "Self-hosting miniflux with docker and provisioning with Ansible", "url": "https://cri.dev/posts/2023-03-25-ansible-miniflux-nginx-provisioning-self-hosting/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-03-25T00:00:00+00:00" }, { "id": "01a08764-b9c6-7330-82b9-53679549fa56", "title": "How to add Node.js & npm to jekyll in GitHub Codespaces", "url": "https://cri.dev/posts/2023-03-25-jekyll-github-codespaces-node-js-npm/?utm_medium=rss&utm_source=rss&utm_campaign=rss", "published_at": "2023-03-25T00:00:00+00:00" } ] posts Claim your blog
Back to Christian Fei's Blog - cri.dev
Blog ยท corpus.blog/blogs/cri.dev/posts

Christian Fei's Blog - cri.dev

cri.dev

2026

2025

2024

2023