Rescuing Files From Classic Mac OS...with Swift!

My winter break project was getting the files off an old PowerBook from the 90s (my dad’s old work computer) that I’ve had lying around for a while. (There’s probably not anything of interest there to anyone but our family, but who knows?) I’ve looked at this before, but it’s hard to get a 25-year-old computer to talk to a modern OS.

Re: Twitter

Twitter was

  • a place where my shitposts started conversations (or at least joke threads), and where I could participate in conversations (or at least joke threads) on other people’s shitposts

  • a comments section for my blog that wasn’t on my blog, and a comments section for others’ blogs even if they don’t have one on their blog

  • a place to learn about other cool people and projects through the people I already know, and a place for other people to learn about me and my projects through the people they already know

The Two Faces of Codable/Serde

Swift has a pair of protocols, Encodable and Decodable, which represent generic encoding of a tree structure. These protocols are special in that the compiler can provide a default implementation for them under many circumstances. Similarly, Rust has a project called Serde which likewise is used for roughly the same purpose; Serde’s traits are even more complicated than Codable’s, but have even more powerful code synthesis via Rust’s proc-macros. Both tools are very useful but occasionally frustrating, and I think some of the frustrating areas come from a tension between two competing use cases.

Older Posts

  1. 2022-10-09 Swift was always going to be part of the OS
  2. 2022-05-14 Relative References in ARM64 Disassembly
  3. 2022-04-24 Default Arguments and Label-based Overloading
  4. 2022-03-19 #TalkPay
  5. 2022-02-21 Dynamic Linking Is Bad For Apps And Static Linking Is Also Bad For Apps
  6. 2021-12-31 Swift Regrets: Wrap-up
  7. 2021-09-10 Swift Regrets
  8. 2021-07-05 Keyboard Pants
  9. 2020-11-15 Negotiate Your Offers!
  10. 2020-10-20 The Swift Runtime: Enums
  11. 2020-10-06 The Swift Runtime: Class Metadata Initialization
  12. 2020-09-29 The Swift Runtime: Class Metadata
  13. 2020-09-21 The Swift Runtime: Uniquing Caches
  14. 2020-09-14 The Swift Runtime: Type Metadata
  15. 2020-09-07 The Swift Runtime: Type Layout
  16. 2020-08-31 The Swift Runtime: Heap Objects
  17. 2020-08-26 Objective-Rust
  18. 2020-07-18 A Letter To My Congressional Representatives on the DHS Abuses of Power in Portland, Oregon
  19. 2020-07-07 Suffusion: Playing with Filesystems
  20. 2020-05-24 ROSE-8 on Mac OS 9
  21. 2020-04-03 Shallow Git Repositories
  22. 2020-04-01 Swift on Mac OS 9
  23. 2020-02-06 Flexible Identities in git
  24. 2020-02-04 Introducing the Game 'by Color
  25. 2020-01-28 ROSE-8: Console Mode
  26. 2020-01-22 Setting up gitweb on Shared Hosting
  27. 2020-01-13 ROSE-8
  28. 2019-12-24 quasiquarantine
  29. 2019-11-01 Leaving Apple
  30. 2019-08-01 > go east
  31. 2018-04-29 Misleading Metrics and UX Tradeoffs
  32. 2018-04-03 "FIXME" Doesn't Always Mean "Fix Me"
  33. 2018-03-22 My Little (String) Optimization, Part 2
  34. 2018-03-15 My Little Optimization: The Compiler Is Magic
  35. 2018-02-26 Many-to-Many Protocols
  36. 2018-01-29 Color Palette #8
  37. 2017-09-07 The New Kingdom of Nouns
  38. 2017-09-05 Over-abstraction
  39. 2016-08-21 Macromancy, Part 2
  40. 2016-08-07 Macromancy
  41. 2016-06-19 Pronoun Buttons
  42. 2016-05-29 Webmailer's Update Bar
  43. 2016-05-23 So You Want to Be a (Compiler) Wizard
  44. 2015-12-29 Re: Contempt Culture
  45. 2015-11-18 Recommendations
  46. 2015-05-09 Nibblesort: Adventures in Optimization
  47. 2015-02-22 AlterConf SF/Oakland
  48. 2015-01-24 “Skip the FFI”
  49. 2012-12-08 How to Write a Checker in 24 Hours
  50. 2012-10-02 Git Tricks
  51. 2012-05-16 Big News
  52. 2012-04-26 Keyboard Adventures
  53. 2012-04-10 Mail Aliases
  54. 2011-08-14 Header Anchors: A Safari Extension
  55. 2011-08-10 "Little Big Details"
  56. 2011-07-29 Weak Linking
  57. 2011-07-25 Using Clang from SVN in Xcode
  58. 2011-07-22 rm vs. Time Machine
  59. 2011-07-14 Priorities
  60. 2011-06-30 Quick Look in TextMate
  61. 2011-06-27 git add
  62. 2011-06-20 Automatic Reference Counting
  63. 2011-06-16 Dealing with "Sandwich Code"
  64. 2011-06-05 gdba
  65. 2011-06-03 Chrome vs. Safari
  66. 2011-05-31 User-Side Troubleshooting
  67. 2011-05-30 Auspicious Continuation
  68. 2009-07-21 Scripting Bridge
  69. 2009-07-08 What Happened to Dockyard?
  70. 2009-06-26 Garbage Collectors and Stack Drawers
  71. 2009-06-21 Z shell
  72. 2009-05-22 “Several New Features”
  73. 2009-05-05 C++ Templates are Turing-Complete
  74. 2009-04-21 [Meme] How Many HTML Elements Can You Name in 5 Minutes?
  75. 2009-04-16 Safer Plugin Categories
  76. 2009-04-02 Hacking Safari 4...for Great Convenience
  77. 2009-03-27 Const Correctness
  78. 2009-03-19 Categories and +load
  79. 2009-03-15 Subversion Checksum Problems
  80. 2009-03-06 JavaScript Tetris
  81. 2008-09-04 Objective-J and Objective-C
  82. 2008-08-28 HTTPS and Name-based Virtual Hosting
  83. 2008-03-08 Alerts Without Apps (or nibs)
  84. 2008-01-14 NSNumber, CFNumber, and CFBoolean
  85. 2007-12-13 GenericToolbar and IB3
  86. 2007-10-27 Performance Optimization: Why We Can't Use valueForKeyPath:
  87. 2007-09-01 Short Xcode Tip: Plugins
  88. 2007-07-15 Port 25 Blocked?
  89. 2007-06-27 GenericToolbar Icon
  90. 2007-04-13 The Symbolism of Pretty URLS
  91. 2007-03-07 Flexible PHP
  92. 2007-01-12 Inauspicious Beginnings