All blogs / Apple / classic Mac
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
2025 5
2024 4
2023 14
- Infinite Mac: DingusPPC Explorations
- Infinite Mac: Improved Persistence
- 20 Years of Blogging
- Infinite Mac: Disks, CD-ROMs and Custom Instances
- Slack Canvas In The Streets, Quip In The Sheets
- 10th Anniversary of Google Reader Shutdown
- Tailscale battery life instrumentation
- You won't believe what this one weird ioctl will do
- Infinite Mac: infinitemac.org
- Reducing Tailscale’s Binary Size on macOS
- How I Consume Mastodon
- Tailscale iOS and macOS Shortcuts
- Places Mihai Has Committed Code From
- Infinite Mac: 2022 In Review
2022 7
- Tailscale Fast User Switching
- If you wish to make a web SSH client from scratch, you must first invent the network stack
- The Case of the Spiky File Descriptors
- How Well Did the Original iPhone Sell?
- Infinite Mac on a (Virtual) LAN
- Infinite Mac 7.5 Weeks Later
- Infinite Mac: An Instant-Booting Quadra in Your Browser
2021 5
2020 2
2019 1
2018 4
2017 2
2016 4
2015 4
2014 13
- RetroGit
- HTML Munging My Way To a React.js Conf Ticket
- How did Quip implement the spreadsheet feature?
- Two Hard Things
- Gmail's HTML Tag Whitelist
- The Modern WebKit API is Open Source
- Using ASan with iOS Applications
- Adding Keyboard Shortcuts For Inspecting iOS Apps and Web Pages in Safari
- Per-Package Method Counts for Android's DEX Format
- Getting ALL your data out of Quip
- Saving The Day For (A Few) Veronica Mars Fans
- Finding Messages Explicitly Marked as Spam in Gmail
- JavaScript Array Sorting Performance Puzzler
2013 11
- A Faster UIWebView Communication Mechanism
- Programmatically accepting keyboard auto-corrections on iOS
- Quip: Back to app development
- Internet Memories
- Using Google Reader's reanimated corpse to browse archived data
- Getting ALL your data out of Google Reader
- Google Reader Shutdown Tidbits
- Image-based SVG Masking
- Source Quicklinks
- The People Behind Google Reader
- A REPL for Chrome Apps APIs
2012 13
- Screenshot-proof images via temporal dithering
- I like Cilantro with my Avocado
- Clipboard Sync Chrome Extension
- How I Consume Twitter
- Protecting users from malware via (strict) default settings
- My Chrome Apps Journey
- Life Imitates Art
- Feed Web Intent Viewer
- Bookmarklet to download complete Google+ albums to Picasa
- Being a new parent as told through Reader trends
- Playback Rate Chrome Extension
- Stack Overflow Musings
- PuSH Bot Lives!
2011 12
- Google Reader Social Retrospective
- Adventures in Retro Computing
- Intersquares
- An interesting bug
- There's a (web) app for that site
- In Praise of Incrementalism
- Non-fiction books for (curious) busy people
- Chrome Startup Bookmarks Extension
- Asynchronous what now?
- Feed Playback and Stream Spigot
- WebKit Layout Tests: Practice
- WebKit Layout Tests: Theory
2010 11
- Delicious to Google Bookmarks: Redux
- Visualizing DeviceOrientation Events
- Making git faster on large repositories on Mac OS X
- Distortion Grid using CSS 3D Transforms
- Chrome Performance Puzzler
- Bloglines Express, or How I Joined The Google Reader Team
- New Toy
- Replicating Flipboard's "page fold" animation with CSS 3D transforms and transitions
- Moving down the stack
- Partychat Hacking
- Google Reader Play Bookmarklet
2009 7
2008 6
2007 17
- plusplusbot: Karma for anything and anyone
- Macros for the new version of Gmail
- Feed Proxy: View Raw RSS/Atom Feed Data in Firefox 2.0
- Valleywag, brought to you by....Google?
- Twitter Digest
- iPhone Game Development: A Tale of Failure
- Bad Headlines
- Tiled Windows Are the Way of the Future
- Communicating through screenshots
- Two Web Development Tips
- Determining Twitter's Growth
- Intern on the Google Reader team
- Blogger Migration Part II: Getting Data Into Blogger
- Understanding feed reader marketshare numbers
- Blogger Migration Part I: Getting Data Out of Movable Type
- Switched to Blogger
- More Efficient FeedBurner Visitor Tracking
2006 22
- Moving my Gmail Greasemonkey scripts to code.google.com
- Greasemonkey Script Updates
- Using security holes to work around carrier lock-in
- Import your del.icio.us bookmarks into Google
- Google Reader Redux
- Facebook meets Dodgeball
- Coincidence?
- overplot: Overheard in New York meets Google Maps
- Poor Man's Google Reader Search
- Smart Google Reader Subscribe Button
- Export Google Personalized Homepage Feeds to OPML
- Changing the Homepage on the Motorola v710
- 410 Annoying
- Expanding Gmail's Filter Input
- Firefox 1.5.0.2 and Greasemonkey
- Google Reader Tidbits
- Updated Gmail Macros Script
- Rendering Text Inside the Canvas Object
- Google Search History as RSS
- Interviewing at Google
- Birthday
- Date & Time Google Homepage Module
2005 33
- A Greasemonkey Christmas
- ChainShot ColorJunction Lives!
- Greasemonkey Hacks
- More Scraped Feeds
- Google Reader
- Movable Type 3.2 and Comments
- Google Blog Search Filtering Trick
- Gmail Conversation Preview Bubbles
- Google Maps vs. MSN Virtual Earth
- Impromptu Market Research
- Putting Your Reading List Online
- data: URL-based Animation
- Gmail and Persistent Searches
- Google and Valid HTML
- Big (Build) Brother is Watching
- Nifty Navigation Widget
- In How Many Ways Can an URL be Mispelled?
- Penny Arcade's RSS Feed
- Persistent Persistent Searches
- ChangeLog for Safari 1.3/2.0
- "By 'cruise' I mean 'Russia'"
- Expanding Snippet Feeds in Bloglines
- Life Immitating Art
- Greasemonkey Followups
- The Relentless March of Progress
- Adding Persistent Searches to Gmail
- Integrating Bloglines and del.icio.us
- XmlSerializer and JavaScript
- Thefacebook Adoption Rates
- Flexible Drop Shadows
- Bluetooth Internet Access with the Motorola v710
- The New Machine Order
- Unofficial Comic Feeds
2004 91
- Marketing in Action
- Autosaving Form Data
- Transitioning to del.icio.us
- "We'll make it up on volume"
- DIY Large Panorama Prints
- Automatically Generated Blogroll from Bloglines
- Squatters of the world, unite!
- Skinning Gmail with a Custom Stylesheet
- Getting Pictures onto the v710
- JavaScript Associative Arrays
- ourTunes: Search iTunes Shares
- Commercial Skipping with QuickTime Player a.k.a. Poor Man's TiVo
- Facilitating Blog Navigation
- Three Random Tips
- Pseudo-Local W3C Validator Favelet
- JavaScript DOM Iteration and Date Function Optimization
- Bookmarklet/Favelet Generator
- All Mac Developers Think Alike?
- Reshapable Tables
- Gmail vs. Grendel
- Bus Times On Your Cellphone
- Early Bird...
- NetNewsWire Subscription Favelet
- Custom Draggable Frame(set) Borders
- RSS-based PageRank™ Monitoring Tool
- Spam Tidbits
- Mail Scripting: Part Deux
- Perl, AppleScript and Mail.app: Prototyping and Benchmarking
- YASC: Yet Another Spam Chart
- libopendaap and Mac OS X: follow-up
- My Plan For Spam
- Email-based Dictionary Service
- ImageMagick Tips
- Building and Running libopendaap on Mac OS X
- nntp2rss Update
- Magnifier Follow-up
- CSS/DOM-based Draggable Magnifiers
- Under the radar
- Automatically Generated Blogroll from NetNewsWire
- The most important checkbox
- Semi-transparent image overlays
- Importing Away
- Displacement Magick
- Cleaner Access Logs
- Google Search Terms Highlighting for All Browsers
- Serendipity
- Bridge: New and Improved
- On the joys of grotty code
- Roll Up/Down
- Write-only mode
- Spam Filtering
- Snails and other dilatory creatures
- Build it up
- Odds and Ends
- BBEdit vs. Prebinding
- Datsets and Databases
- Histograms everywhere
- Yearly Archives
- New and Improved
- Hair Loss Considered Useful
- Tables vs. CSS
- Thinning Trouble
- Spider-induced tweaks
- Java Line/Line Intersections
- Balance act
- Installing XML::DOM on Mac OS X
- One Stroke, One Point, One Sampling
- Loose ends
- No pain, no gain
- Inching forward
- Trendiness++
- I am not for sale
- My own private OPML repository
- XP Tweaks
- Mouse Drawing
- Glooey DBs
- Floats and such
- Limping with the left
- Positive Impulse Needed
- Clause after Clause
- Bridging NNTP and RSS
- Moving house
- Iterations++
- Prettification
- Photoshop, a man's best friend
- Further Sidebar Tweaking
- And a fancy hammer at that
- Archive Fun
- Done for now
- Writing++
- Writing away
2003 55
- Little Things
- Putting it together
- Queueing up is in my blood
- Stroke junction, what's your [error] function?
- Who needs presents when you've got a thesis
- The Thinning Continues
- Just like the Stephen King novel
- Monkey see, monkey do
- Good news and bad news
- New look
- Convoluted Operations
- More WIMPification
- Visually yours
- How else would I be spending my vacation?
- Last minute work
- My travails begin...
- iLeech + Eclipse = almost there
- Efficient Movie Piracy
- dap. daap. daaap.
- Mythical Something or Other
- Temporal Discontinuity
- Hello World!
- Progress Report
- Progress Report
- Progress Report
- Progress Report
- Progress Report
- Progress Report
- Progress Report
- Un-perfect
- Under-promise, Over-deliver
- Genre Work
- Spit 'n' Polish
- Ego Boosting++
- Finishing Up
- Building Things For Myself
- Blobby Stuff
- Mac Integration
- IW Options
- LDAP-ulous
- Genre Mappings
- Kills Bugs Dead
- Too Much Publicity Perhaps...
- Genre Work Continues
- Build Me Up...
- 'And on the left, we have "Parparita Hall"'
- Responsibility Shifting
- FreeDB Overnight
- Quickies Rock
- Chaining Things Up
- It's really that simple...
- Match Me Up
- Get Me Out Of Here
- Seinfeld Rocks
- Faster, Faster
2002 1
1999 61
- Ressurection
- Floating and Gloating
- JavaScript and Dates
- Revulsion
- Who needs a database?
- Drivers and Selections
- Breaking Lines
- Template-based factory
- Best of Both Worlds
- Undo Tweaks
- You're on Object3D Camera
- Files
- Web Everywhere
- Perl: The Write-Only Language
- Coding Begins
- Still Planning Away
- Ro-bust!
- It's Alive!
- Mock me up
- Stick a fork in it
- Re: Replies
- Smooth as a baby's bottom
- Basic Architecture
- Descriptions of All Current Projects
- IB Dossier Requirements
- The Usual Excuses
- Stability Improvements & Future Plans
- Commenting++
- Mangler Documenting
- Lamely Recursing
- Excuses
- clip2icns pre-8.5 Hacking
- Misc. Cleanup, Releases
- Compulsive Cleaning
- The Great Commenting Begins
- Why do I even bother...
- Templates 0wnz m3!
- Undo Bugs, Swatches
- Custom Event Filters Rock My World
- Overlays
- Dragging: I 0wnz j00
- The Quest Continues...
- Curiouser and curiouser
- Happy Birthday
- Another Day, Another Bug(s) Squashed
- Doc Day
- clip2icns Reloaded
- I am the bitch of user feedback
- Goodies in the Mail
- Mangler, Seeding
- More Power, Less Waiting
- Spotlight: Leak Locator
- Small Cursor Enhancement
- Canvassing Something or Other
- Reproducible: Always
- Ego Boosting++
- Statically Yours
- Little Things, Here and There
- The Browser Takes Shape
- Shrinking That To Do List
- Rotation of Perspective
1998 91
- Selections Ruin Everything
- Constraints and Transforms
- Preview, Prototyping, etc.
- Undos, Everything Must Change
- I Drag You, You Drop Me
- Dropping Prevails
- Dropping some I
- Stupidity Reigns Supreme
- Color Indirection
- Lassoing It in
- Selection Day
- Magic Colors
- Selections++
- Selection Commencement
- it's the Little Things...
- Location Relativity
- Filling Things Up
- Semi-decent Excuse
- Printing Override
- Sampling Breakthrough
- We Now Serve All Depths
- School? What's That?
- Friends Are Your Friend
- Ui Fickleness
- Ui Decision
- Linux Temptation
- Compression Tweaking
- Colors Everywhere
- A Swatch-y Control
- Thinking Hierarchically
- Weirdness Abounds
- Je m'excuse
- Be Thankful for Your Icons
- Fixing Things Is Good
- Refreshing Issues
- Exception Thrown
- Blast From The Past
- Onto More Exciting Things
- (Re)size Me Up
- Control Freak
- The GUI-fication Continues
- Newton Awaits
- Loose Ends
- Crash Nevermore
- Modality Overthrown
- Smooth as Silk
- Schedule Me This
- CDDB Discovered
- Puzzling Refreshes
- Visualize Them Towers
- Standardization Galore
- Glypher: The Program Ra Would Endorse
- Sync-ing it Up
- Ladies and Gentlemen: Mscape Software!
- Attention Is Divided
- Creepin' Featurism
- Preferentially Yours
- Dancing Away
- In The Name Of The...
- Generic Excuse
- Tester Confirmation
- More Compression Nastiness
- Compression Weirdness
- Demo Day
- And The Money Keeps Rolling In
- My First Customer *sniffle*
- The Floodgates Are Open
- Registration Complete
- Little Things
- Beta Testing
- Crunch Time
- Code Reuse: A Good Thing
- Uncompress This!
- Register Me This
- RLE Decyphered
- Compression: The Beginning of a Grand Adventure
- Sure, Sure...
- Sanity Prevails
- Featuritis
- Old School Mac OS Compatibility
- At The Testers' Request
- Docs Rewrite
- Check Here, Check There, Check Everywhere
- Anti-Alias This!
- I'm Famous!
- Masking Mystery
- Sure, That's What They All Say
- Icon Mangler: started work
- Photoshop: You're Next
- Non-coding Stuff
- And So It Begins...