41554 blogs · [ { "id": "01a087df-e5f8-730e-9b8c-e13d7ffc66ea", "title": "Book review: Parable of the Sower", "url": "https://shivankaul.com/blog/parable-of-the-sower", "published_at": "2026-08-08T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d80026079", "title": "Firefox browser has started shipping Brave's adblock-rust engine", "url": "https://shivankaul.com/blog/firefox-bundles-adblock-rust", "published_at": "2026-04-20T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d80442ada", "title": "Presentation on privacy leadership inflection point", "url": "https://shivankaul.com/blog/privacy-inflection-point", "published_at": "2026-03-25T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d810d9be8", "title": "Cookbook club: Samin Nosrat's Good Things", "url": "https://shivankaul.com/blog/cookbook-club", "published_at": "2026-02-22T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d81dce51f", "title": "Book review: The Correspondent", "url": "https://shivankaul.com/blog/the-correspondent", "published_at": "2026-01-18T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d81e621e4", "title": "Using FlatBuffers to reduce memory usage in adblock-rust", "url": "https://shivankaul.com/blog/adblock-memory-reduction", "published_at": "2026-01-05T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d829c32f8", "title": "Fixing Claude Code's process forking bug", "url": "https://shivankaul.com/blog/claude-code-process-exhaustion", "published_at": "2026-01-04T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8321c8f3", "title": "2025 Wrapped", "url": "https://shivankaul.com/blog/2025-wrapped", "published_at": "2026-01-02T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d83fe64ee", "title": "Disable \"How is Claude doing this session\" feedback prompts in Claude Code", "url": "https://shivankaul.com/blog/disable-claude-code-feedback-prompts", "published_at": "2025-12-30T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d848c52bb", "title": "Downloading a browser video stream into an MP4", "url": "https://shivankaul.com/blog/hls-to-mp4", "published_at": "2025-12-21T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d85510a13", "title": "Comet sends all your URLs to Perplexity servers (and there's no way to stop it)", "url": "https://shivankaul.com/blog/comet-privacy", "published_at": "2025-10-19T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d85df17e1", "title": "How to fix your terminal prepending 00~ when pasting in anything", "url": "https://shivankaul.com/blog/paste-bracketing-iterm2", "published_at": "2025-10-16T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d86831316", "title": "Movie reviews: In the mood before sunrise", "url": "https://shivankaul.com/blog/in-the-mood-before-sunrise", "published_at": "2025-10-12T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d871646ee", "title": "Beyond cookies: browser fingerprinting in 2025 (Part 2)", "url": "https://shivankaul.com/blog/beyond-cookies-browser-fingerprinting-in-2025-2", "published_at": "2025-09-01T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d872fdfbc", "title": "Beyond cookies: browser fingerprinting in 2025 (Part 1)", "url": "https://shivankaul.com/blog/beyond-cookies-browser-fingerprinting-in-2025-1", "published_at": "2025-09-01T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d87368fc8", "title": "Prompt injections in agentic browsers", "url": "https://shivankaul.com/blog/prompt-injections-in-agentic-browsers", "published_at": "2025-08-31T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d87b34a81", "title": "2024 Wrapped", "url": "https://shivankaul.com/blog/2024-wrapped", "published_at": "2024-12-26T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d881c0f77", "title": "Book review: Victory City", "url": "https://shivankaul.com/blog/victory-city", "published_at": "2024-05-01T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d88a3d451", "title": "Movie review: Valley of Saints", "url": "https://shivankaul.com/blog/movie-review-valley-of-saints", "published_at": "2024-01-28T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8900ac9e", "title": "What they talk about when they talk about Privacy Engineering", "url": "https://shivankaul.com/blog/privacy-engineering-archetypes", "published_at": "2024-01-26T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d89af7156", "title": "Trust issues", "url": "https://shivankaul.com/blog/trust-issues", "published_at": "2023-12-02T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8a20fce5", "title": "Vancouver → San Francisco", "url": "https://shivankaul.com/blog/sf", "published_at": "2023-11-30T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8a659a76", "title": "USENIX PEPR 2023", "url": "https://shivankaul.com/blog/pepr-2023", "published_at": "2023-09-15T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8b36c5bc", "title": "Vinyl", "url": "https://shivankaul.com/blog/vinyl", "published_at": "2023-08-05T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8bee4db5", "title": "Delegated Domain Verification in DNS", "url": "https://shivankaul.com/blog/delegated-domain-verification", "published_at": "2023-05-07T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8c564d08", "title": "Domain Verification using DNS", "url": "https://shivankaul.com/blog/domain-verification-using-dns", "published_at": "2023-04-16T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8d45c4c0", "title": "April Fools' Day RFC, 2021", "url": "https://shivankaul.com/blog/april-1-2021-rfc", "published_at": "2021-04-26T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8de86655", "title": "Running Jekyll locally on MacBook M1", "url": "https://shivankaul.com/blog/running-jekyll-locally-on-mac-m1", "published_at": "2021-04-21T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8ee76e90", "title": "FLoCBlock", "url": "https://shivankaul.com/blog/floc-block", "published_at": "2021-04-21T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8f570df3", "title": "Solving Sudoku using Knuth's Algorithm X", "url": "https://shivankaul.com/blog/sudoku", "published_at": "2021-02-21T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8f7a57f9", "title": "How to generate a TLS pin from a key or certificate", "url": "https://shivankaul.com/blog/tls-pinning", "published_at": "2020-09-02T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8f8ea6ae", "title": "Consent in contact tracing", "url": "https://shivankaul.com/blog/consent-in-contact-tracing", "published_at": "2020-05-15T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d8f97ae0c", "title": "Contact Tracing vs. Exposure Notification", "url": "https://shivankaul.com/blog/contact-tracing-vs-exposure-notification", "published_at": "2020-05-08T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9035f20f", "title": "Naming map variables", "url": "https://shivankaul.com/blog/naming-maps", "published_at": "2020-03-04T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9122be43", "title": "Keeping in touch", "url": "https://shivankaul.com/blog/keeping-in-touch", "published_at": "2019-12-30T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d91dd3f73", "title": "PEARG at IETF 104", "url": "https://shivankaul.com/blog/pearg-ietf-104", "published_at": "2019-04-07T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d921a34b0", "title": "2018 - a review", "url": "https://shivankaul.com/blog/2018", "published_at": "2019-02-04T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d92c10bb9", "title": "Radio", "url": "https://shivankaul.com/blog/radio", "published_at": "2018-07-30T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d935f197c", "title": "Privacy and consent in the age of browsers: The question of WebRTC", "url": "https://shivankaul.com/blog/privacy-and-consent-in-the-age-of-browsers-the-question-of-webrtc", "published_at": "2018-07-26T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d943b4659", "title": "How to figure out why users hate your Chrome Extension", "url": "https://shivankaul.com/blog/feedback-form-for-chrome-extensions", "published_at": "2017-07-14T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d951e8e1f", "title": "Zero-length arrays in C have to go at the end of the struct", "url": "https://shivankaul.com/blog/zero-length-arrays", "published_at": "2017-07-03T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d96111884", "title": "Brief intro to NFA, DFA and regexes", "url": "https://shivankaul.com/blog/nfa-dfa-and-regexes", "published_at": "2017-03-01T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9667929d", "title": "TheNews", "url": "https://shivankaul.com/blog/thenews", "published_at": "2017-02-18T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9670aff3", "title": "Typewriter", "url": "https://shivankaul.com/blog/typewriter", "published_at": "2017-01-07T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d969cf71b", "title": "'Clean your desk' : My Amazon interview experience", "url": "https://shivankaul.com/blog/clean-your-desk-yet-another-amazon-interview-experience", "published_at": "2016-12-07T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d973b92da", "title": "Redirect loops and Wi-Fi login pages: Getting around VIA Rail's stupid network configuration", "url": "https://shivankaul.com/blog/redirect-loops-wi-fi-login-pages-getting-around-via-rails-network-configuration", "published_at": "2016-10-06T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d98188566", "title": "git fresh", "url": "https://shivankaul.com/blog/git-fresh", "published_at": "2016-09-30T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d984065ed", "title": "Writing a compiler for a DSL in Haskell using Parsec", "url": "https://shivankaul.com/blog/writing-a-compiler-in-haskell", "published_at": "2016-05-18T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d98f1ebe9", "title": "Markdown to PDF in Vim", "url": "https://shivankaul.com/blog/markdown-pdf", "published_at": "2015-12-14T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d99179a65", "title": "Boingo HotSpot security loophole", "url": "https://shivankaul.com/blog/boingo-hotspot-loophole", "published_at": "2015-11-03T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d99c6a66a", "title": "HackMcGill", "url": "https://shivankaul.com/blog/hackmcgill", "published_at": "2015-10-14T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d99cbfcd3", "title": "Finding min and max in MongoDB with null fields", "url": "https://shivankaul.com/blog/min-and-max-in-mongodb", "published_at": "2015-07-21T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9a63ad7f", "title": "aliasify", "url": "https://shivankaul.com/blog/aliasify-gem", "published_at": "2015-06-28T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9b3f9a23", "title": "PrettyPrintGmail", "url": "https://shivankaul.com/blog/pretty-print-gmail", "published_at": "2015-06-10T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9bff89fb", "title": "FrontPageOfScience", "url": "https://shivankaul.com/blog/frontpage-of-science", "published_at": "2015-03-15T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9ce7ea07", "title": "Authentication Certificate Rejected Locally error while trying to connect to wifi on Chromebook", "url": "https://shivankaul.com/blog/authentication-certificate-rejected-locally-error-on-chromebook", "published_at": "2015-03-04T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9d8236ca", "title": "HashMaps", "url": "https://shivankaul.com/blog/hashmaps", "published_at": "2015-02-28T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9e66fb1e", "title": "Running a script in ChromeOS", "url": "https://shivankaul.com/blog/running-a-script-in-chromeos", "published_at": "2015-01-07T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9e9c5ec8", "title": "Editing Read-Only files on Chromebook", "url": "https://shivankaul.com/blog/editing-read-only-files-chromebook", "published_at": "2015-01-06T00:00:00+00:00" }, { "id": "01a087df-e5f8-730e-9b8c-e13d9f67a522", "title": "Running Chrome Remote Desktop service on waking up host", "url": "https://shivankaul.com/blog/running-chrome-remote-desktop-service-on-waking-up-host", "published_at": "2014-12-30T00:00:00+00:00" }, { "id": "01a087df-e5f9-7340-9483-3149bba37989", "title": "Sending email from your McGill email using Gmail", "url": "https://shivankaul.com/blog/sending-email-using-your-mcgill-email-from-gmail", "published_at": "2014-12-29T00:00:00+00:00" }, { "id": "01a087df-e5f9-7340-9483-3149bbfdcc4a", "title": "Connecting to a Linux box using Chrome Remote Desktop", "url": "https://shivankaul.com/blog/connecting-to-a-linux-box-using-chrome-remote-desktop", "published_at": "2014-12-28T00:00:00+00:00" }, { "id": "01a087df-e5f9-7340-9483-3149bc808804", "title": "How to install Tuareg Mode on Emacs without needing a hair transplant", "url": "https://shivankaul.com/blog/marmalade-emacs", "published_at": "2014-12-26T00:00:00+00:00" }, { "id": "01a087df-e5f9-7340-9483-3149bc8db017", "title": "New Post script", "url": "https://shivankaul.com/blog/New-Post-script", "published_at": "2014-12-26T00:00:00+00:00" } ] posts Claim your blog
Back to shivankaul.com
Blog · corpus.blog/blogs/shivankaul.com/posts

shivankaul.com

shivankaul.com

2026

2025

2024

2023

2021

2020

2019

2018

2017

2016

2015

2014