The Curious Engineer

All blogs / Apple / classic Mac

persistent.info

blog.persistent.info

Apple / classic MacEmulationSoftware / engineering practiceDev tools / editors / IDEs

Posts
502 from 23 Sep 1998 to 30 Oct 2026
Posting
monthly (6 in the last year)
Kind
personal blog
Feed
https://blog.persistent.info/feeds/posts/default

2026 6

  1. Infinite Mac: BeOS
  2. Computer History Museum Apple and NeXT Oral Histories
  3. Infinite Mac: Snow and A/UX
  4. Sierra MCP Gateway Dev Diary
  5. Weather Text Work Location Mode
  6. How I consume Bluesky (and Twitter and Mastodon)

2025 5

  1. Infinite Mac: Resource Fork Roundtripping
  2. Pair Domains Pricing
  3. Infinite Mac Construction Set
  4. Infinite Mac OS X
  5. Gardening Week: Evergreen Engineering

2024 4

  1. Infinite Mac: Macintosh Garden Library
  2. Weather Text: My Own Bespoke Weather App
  3. Infinite Mac: Turning To The Dark Side
  4. Infinite Mac: The Case Of The Missing Text

2023 14

  1. Infinite Mac: DingusPPC Explorations
  2. Infinite Mac: Improved Persistence
  3. 20 Years of Blogging
  4. Infinite Mac: Disks, CD-ROMs and Custom Instances
  5. Slack Canvas In The Streets, Quip In The Sheets
  6. 10th Anniversary of Google Reader Shutdown
  7. Tailscale battery life instrumentation
  8. You won't believe what this one weird ioctl will do
  9. Infinite Mac: infinitemac.org
  10. Reducing Tailscale’s Binary Size on macOS
  11. How I Consume Mastodon
  12. Tailscale iOS and macOS Shortcuts
  13. Places Mihai Has Committed Code From
  14. Infinite Mac: 2022 In Review

2022 7

  1. Tailscale Fast User Switching
  2. If you wish to make a web SSH client from scratch, you must first invent the network stack
  3. The Case of the Spiky File Descriptors
  4. How Well Did the Original iPhone Sell?
  5. Infinite Mac on a (Virtual) LAN
  6. Infinite Mac 7.5 Weeks Later
  7. Infinite Mac: An Instant-Booting Quadra in Your Browser

2021 5

  1. A-12 Software Development Parallels
  2. Communicating With a Web Worker Without Yielding To The Event Loop
  3. Archiving Mscape Software on GitHub
  4. Making Git Understand Classic Mac Resource Forks
  5. Solving Bee: An Augmented Reality Tool for Spelling Bee

2020 2

  1. The Case of the Missing Equals Sign
  2. Quip's TypeScript Migration

2019 1

  1. In-Product Debugging Tools

2018 4

  1. Accidental DDoSes I Have Known
  2. Some Observations Regarding JavaScriptCore's Supported Platforms
  3. Google Reader: A Time Capsule from 5 Years Ago
  4. Efficiently Loading Inlined JSON Data

2017 2

  1. Understanding WebKit behavior via lldb
  2. Disabling the click delay in UIWebView

2016 4

  1. Perils of Measuring Long Intervals with Performance.now()
  2. Avoiding Incremental Rendering in Hybrid Desktop Apps
  3. Grafting Local Static Resources onto Production
  4. Multiple Windows in Hybrid React Desktop Apps

2015 4

  1. Google Reader's Launch Was 10 Years Ago
  2. WKWebView Communication Latency Revisited
  3. Teaching the Closure Compiler About React
  4. WKWebView Communication Latency

2014 13

  1. RetroGit
  2. HTML Munging My Way To a React.js Conf Ticket
  3. How did Quip implement the spreadsheet feature?
  4. Two Hard Things
  5. Gmail's HTML Tag Whitelist
  6. The Modern WebKit API is Open Source
  7. Using ASan with iOS Applications
  8. Adding Keyboard Shortcuts For Inspecting iOS Apps and Web Pages in Safari
  9. Per-Package Method Counts for Android's DEX Format
  10. Getting ALL your data out of Quip
  11. Saving The Day For (A Few) Veronica Mars Fans
  12. Finding Messages Explicitly Marked as Spam in Gmail
  13. JavaScript Array Sorting Performance Puzzler

2013 11

  1. A Faster UIWebView Communication Mechanism
  2. Programmatically accepting keyboard auto-corrections on iOS
  3. Quip: Back to app development
  4. Internet Memories
  5. Using Google Reader's reanimated corpse to browse archived data
  6. Getting ALL your data out of Google Reader
  7. Google Reader Shutdown Tidbits
  8. Image-based SVG Masking
  9. Source Quicklinks
  10. The People Behind Google Reader
  11. A REPL for Chrome Apps APIs

2012 13

  1. Screenshot-proof images via temporal dithering
  2. I like Cilantro with my Avocado
  3. Clipboard Sync Chrome Extension
  4. How I Consume Twitter
  5. Protecting users from malware via (strict) default settings
  6. My Chrome Apps Journey
  7. Life Imitates Art
  8. Feed Web Intent Viewer
  9. Bookmarklet to download complete Google+ albums to Picasa
  10. Being a new parent as told through Reader trends
  11. Playback Rate Chrome Extension
  12. Stack Overflow Musings
  13. PuSH Bot Lives!

2011 12

  1. Google Reader Social Retrospective
  2. Adventures in Retro Computing
  3. Intersquares
  4. An interesting bug
  5. There's a (web) app for that site
  6. In Praise of Incrementalism
  7. Non-fiction books for (curious) busy people
  8. Chrome Startup Bookmarks Extension
  9. Asynchronous what now?
  10. Feed Playback and Stream Spigot
  11. WebKit Layout Tests: Practice
  12. WebKit Layout Tests: Theory

2010 11

  1. Delicious to Google Bookmarks: Redux
  2. Visualizing DeviceOrientation Events
  3. Making git faster on large repositories on Mac OS X
  4. Distortion Grid using CSS 3D Transforms
  5. Chrome Performance Puzzler
  6. Bloglines Express, or How I Joined The Google Reader Team
  7. New Toy
  8. Replicating Flipboard's "page fold" animation with CSS 3D transforms and transitions
  9. Moving down the stack
  10. Partychat Hacking
  11. Google Reader Play Bookmarklet

2009 7

  1. Most visible change
  2. Google Reader and Closure Tools
  3. PuSH Bot: PubSubHubbub to XMPP Gateway
  4. Twitter PubSubHubbub Bridge
  5. Twitter Streaming API from Python
  6. Exporting likes from Google Reader
  7. HTML Color OneBox

2008 6

  1. Porting Twitter Digest to Google App Engine
  2. Intern on the Google Reader team
  3. persistent.coffee
  4. Mail Trends
  5. Two Safari 3.1 Tips
  6. Decommissioning Mscape Software

2007 17

  1. plusplusbot: Karma for anything and anyone
  2. Macros for the new version of Gmail
  3. Feed Proxy: View Raw RSS/Atom Feed Data in Firefox 2.0
  4. Valleywag, brought to you by....Google?
  5. Twitter Digest
  6. iPhone Game Development: A Tale of Failure
  7. Bad Headlines
  8. Tiled Windows Are the Way of the Future
  9. Communicating through screenshots
  10. Two Web Development Tips
  11. Determining Twitter's Growth
  12. Intern on the Google Reader team
  13. Blogger Migration Part II: Getting Data Into Blogger
  14. Understanding feed reader marketshare numbers
  15. Blogger Migration Part I: Getting Data Out of Movable Type
  16. Switched to Blogger
  17. More Efficient FeedBurner Visitor Tracking

2006 22

  1. Moving my Gmail Greasemonkey scripts to code.google.com
  2. Greasemonkey Script Updates
  3. Using security holes to work around carrier lock-in
  4. Import your del.icio.us bookmarks into Google
  5. Google Reader Redux
  6. Facebook meets Dodgeball
  7. Coincidence?
  8. overplot: Overheard in New York meets Google Maps
  9. Poor Man's Google Reader Search
  10. Smart Google Reader Subscribe Button
  11. Export Google Personalized Homepage Feeds to OPML
  12. Changing the Homepage on the Motorola v710
  13. 410 Annoying
  14. Expanding Gmail's Filter Input
  15. Firefox 1.5.0.2 and Greasemonkey
  16. Google Reader Tidbits
  17. Updated Gmail Macros Script
  18. Rendering Text Inside the Canvas Object
  19. Google Search History as RSS
  20. Interviewing at Google
  21. Birthday
  22. Date & Time Google Homepage Module

2005 33

  1. A Greasemonkey Christmas
  2. ChainShot ColorJunction Lives!
  3. Greasemonkey Hacks
  4. More Scraped Feeds
  5. Google Reader
  6. Movable Type 3.2 and Comments
  7. Google Blog Search Filtering Trick
  8. Gmail Conversation Preview Bubbles
  9. Google Maps vs. MSN Virtual Earth
  10. Impromptu Market Research
  11. Putting Your Reading List Online
  12. data: URL-based Animation
  13. Gmail and Persistent Searches
  14. Google and Valid HTML
  15. Big (Build) Brother is Watching
  16. Nifty Navigation Widget
  17. In How Many Ways Can an URL be Mispelled?
  18. Penny Arcade's RSS Feed
  19. Persistent Persistent Searches
  20. ChangeLog for Safari 1.3/2.0
  21. "By 'cruise' I mean 'Russia'"
  22. Expanding Snippet Feeds in Bloglines
  23. Life Immitating Art
  24. Greasemonkey Followups
  25. The Relentless March of Progress
  26. Adding Persistent Searches to Gmail
  27. Integrating Bloglines and del.icio.us
  28. XmlSerializer and JavaScript
  29. Thefacebook Adoption Rates
  30. Flexible Drop Shadows
  31. Bluetooth Internet Access with the Motorola v710
  32. The New Machine Order
  33. Unofficial Comic Feeds

2004 91

  1. Marketing in Action
  2. Autosaving Form Data
  3. Transitioning to del.icio.us
  4. "We'll make it up on volume"
  5. DIY Large Panorama Prints
  6. Automatically Generated Blogroll from Bloglines
  7. Squatters of the world, unite!
  8. Skinning Gmail with a Custom Stylesheet
  9. Getting Pictures onto the v710
  10. JavaScript Associative Arrays
  11. ourTunes: Search iTunes Shares
  12. Commercial Skipping with QuickTime Player a.k.a. Poor Man's TiVo
  13. Facilitating Blog Navigation
  14. Three Random Tips
  15. Pseudo-Local W3C Validator Favelet
  16. JavaScript DOM Iteration and Date Function Optimization
  17. Bookmarklet/Favelet Generator
  18. All Mac Developers Think Alike?
  19. Reshapable Tables
  20. Gmail vs. Grendel
  21. Bus Times On Your Cellphone
  22. Early Bird...
  23. NetNewsWire Subscription Favelet
  24. Custom Draggable Frame(set) Borders
  25. RSS-based PageRank™ Monitoring Tool
  26. Spam Tidbits
  27. Mail Scripting: Part Deux
  28. Perl, AppleScript and Mail.app: Prototyping and Benchmarking
  29. YASC: Yet Another Spam Chart
  30. libopendaap and Mac OS X: follow-up
  31. My Plan For Spam
  32. Email-based Dictionary Service
  33. ImageMagick Tips
  34. Building and Running libopendaap on Mac OS X
  35. nntp2rss Update
  36. Magnifier Follow-up
  37. CSS/DOM-based Draggable Magnifiers
  38. Under the radar
  39. Automatically Generated Blogroll from NetNewsWire
  40. The most important checkbox
  41. Semi-transparent image overlays
  42. Importing Away
  43. Displacement Magick
  44. Cleaner Access Logs
  45. Google Search Terms Highlighting for All Browsers
  46. Serendipity
  47. Bridge: New and Improved
  48. On the joys of grotty code
  49. Roll Up/Down
  50. Write-only mode
  51. Spam Filtering
  52. Snails and other dilatory creatures
  53. Build it up
  54. Odds and Ends
  55. BBEdit vs. Prebinding
  56. Datsets and Databases
  57. Histograms everywhere
  58. Yearly Archives
  59. New and Improved
  60. Hair Loss Considered Useful
  61. Tables vs. CSS
  62. Thinning Trouble
  63. Spider-induced tweaks
  64. Java Line/Line Intersections
  65. Balance act
  66. Installing XML::DOM on Mac OS X
  67. One Stroke, One Point, One Sampling
  68. Loose ends
  69. No pain, no gain
  70. Inching forward
  71. Trendiness++
  72. I am not for sale
  73. My own private OPML repository
  74. XP Tweaks
  75. Mouse Drawing
  76. Glooey DBs
  77. Floats and such
  78. Limping with the left
  79. Positive Impulse Needed
  80. Clause after Clause
  81. Bridging NNTP and RSS
  82. Moving house
  83. Iterations++
  84. Prettification
  85. Photoshop, a man's best friend
  86. Further Sidebar Tweaking
  87. And a fancy hammer at that
  88. Archive Fun
  89. Done for now
  90. Writing++
  91. Writing away

2003 55

  1. Little Things
  2. Putting it together
  3. Queueing up is in my blood
  4. Stroke junction, what's your [error] function?
  5. Who needs presents when you've got a thesis
  6. The Thinning Continues
  7. Just like the Stephen King novel
  8. Monkey see, monkey do
  9. Good news and bad news
  10. New look
  11. Convoluted Operations
  12. More WIMPification
  13. Visually yours
  14. How else would I be spending my vacation?
  15. Last minute work
  16. My travails begin...
  17. iLeech + Eclipse = almost there
  18. Efficient Movie Piracy
  19. dap. daap. daaap.
  20. Mythical Something or Other
  21. Temporal Discontinuity
  22. Hello World!
  23. Progress Report
  24. Progress Report
  25. Progress Report
  26. Progress Report
  27. Progress Report
  28. Progress Report
  29. Progress Report
  30. Un-perfect
  31. Under-promise, Over-deliver
  32. Genre Work
  33. Spit 'n' Polish
  34. Ego Boosting++
  35. Finishing Up
  36. Building Things For Myself
  37. Blobby Stuff
  38. Mac Integration
  39. IW Options
  40. LDAP-ulous
  41. Genre Mappings
  42. Kills Bugs Dead
  43. Too Much Publicity Perhaps...
  44. Genre Work Continues
  45. Build Me Up...
  46. 'And on the left, we have "Parparita Hall"'
  47. Responsibility Shifting
  48. FreeDB Overnight
  49. Quickies Rock
  50. Chaining Things Up
  51. It's really that simple...
  52. Match Me Up
  53. Get Me Out Of Here
  54. Seinfeld Rocks
  55. Faster, Faster

2002 1

  1. Initial Measurements

1999 61

  1. Ressurection
  2. Floating and Gloating
  3. JavaScript and Dates
  4. Revulsion
  5. Who needs a database?
  6. Drivers and Selections
  7. Breaking Lines
  8. Template-based factory
  9. Best of Both Worlds
  10. Undo Tweaks
  11. You're on Object3D Camera
  12. Files
  13. Web Everywhere
  14. Perl: The Write-Only Language
  15. Coding Begins
  16. Still Planning Away
  17. Ro-bust!
  18. It's Alive!
  19. Mock me up
  20. Stick a fork in it
  21. Re: Replies
  22. Smooth as a baby's bottom
  23. Basic Architecture
  24. Descriptions of All Current Projects
  25. IB Dossier Requirements
  26. The Usual Excuses
  27. Stability Improvements & Future Plans
  28. Commenting++
  29. Mangler Documenting
  30. Lamely Recursing
  31. Excuses
  32. clip2icns pre-8.5 Hacking
  33. Misc. Cleanup, Releases
  34. Compulsive Cleaning
  35. The Great Commenting Begins
  36. Why do I even bother...
  37. Templates 0wnz m3!
  38. Undo Bugs, Swatches
  39. Custom Event Filters Rock My World
  40. Overlays
  41. Dragging: I 0wnz j00
  42. The Quest Continues...
  43. Curiouser and curiouser
  44. Happy Birthday
  45. Another Day, Another Bug(s) Squashed
  46. Doc Day
  47. clip2icns Reloaded
  48. I am the bitch of user feedback
  49. Goodies in the Mail
  50. Mangler, Seeding
  51. More Power, Less Waiting
  52. Spotlight: Leak Locator
  53. Small Cursor Enhancement
  54. Canvassing Something or Other
  55. Reproducible: Always
  56. Ego Boosting++
  57. Statically Yours
  58. Little Things, Here and There
  59. The Browser Takes Shape
  60. Shrinking That To Do List
  61. Rotation of Perspective

1998 91

  1. Selections Ruin Everything
  2. Constraints and Transforms
  3. Preview, Prototyping, etc.
  4. Undos, Everything Must Change
  5. I Drag You, You Drop Me
  6. Dropping Prevails
  7. Dropping some I
  8. Stupidity Reigns Supreme
  9. Color Indirection
  10. Lassoing It in
  11. Selection Day
  12. Magic Colors
  13. Selections++
  14. Selection Commencement
  15. it's the Little Things...
  16. Location Relativity
  17. Filling Things Up
  18. Semi-decent Excuse
  19. Printing Override
  20. Sampling Breakthrough
  21. We Now Serve All Depths
  22. School? What's That?
  23. Friends Are Your Friend
  24. Ui Fickleness
  25. Ui Decision
  26. Linux Temptation
  27. Compression Tweaking
  28. Colors Everywhere
  29. A Swatch-y Control
  30. Thinking Hierarchically
  31. Weirdness Abounds
  32. Je m'excuse
  33. Be Thankful for Your Icons
  34. Fixing Things Is Good
  35. Refreshing Issues
  36. Exception Thrown
  37. Blast From The Past
  38. Onto More Exciting Things
  39. (Re)size Me Up
  40. Control Freak
  41. The GUI-fication Continues
  42. Newton Awaits
  43. Loose Ends
  44. Crash Nevermore
  45. Modality Overthrown
  46. Smooth as Silk
  47. Schedule Me This
  48. CDDB Discovered
  49. Puzzling Refreshes
  50. Visualize Them Towers
  51. Standardization Galore
  52. Glypher: The Program Ra Would Endorse
  53. Sync-ing it Up
  54. Ladies and Gentlemen: Mscape Software!
  55. Attention Is Divided
  56. Creepin' Featurism
  57. Preferentially Yours
  58. Dancing Away
  59. In The Name Of The...
  60. Generic Excuse
  61. Tester Confirmation
  62. More Compression Nastiness
  63. Compression Weirdness
  64. Demo Day
  65. And The Money Keeps Rolling In
  66. My First Customer *sniffle*
  67. The Floodgates Are Open
  68. Registration Complete
  69. Little Things
  70. Beta Testing
  71. Crunch Time
  72. Code Reuse: A Good Thing
  73. Uncompress This!
  74. Register Me This
  75. RLE Decyphered
  76. Compression: The Beginning of a Grand Adventure
  77. Sure, Sure...
  78. Sanity Prevails
  79. Featuritis
  80. Old School Mac OS Compatibility
  81. At The Testers' Request
  82. Docs Rewrite
  83. Check Here, Check There, Check Everywhere
  84. Anti-Alias This!
  85. I'm Famous!
  86. Masking Mystery
  87. Sure, That's What They All Say
  88. Icon Mangler: started work
  89. Photoshop: You're Next
  90. Non-coding Stuff
  91. And So It Begins...