YAML is (not) my preferred configuration format

Sometimes you have configuration files or simple data files that you want to maintain by hand, in a text editor. There are dozen of reusable formats for this, but only a few of them really support hierarchical entries. You can argue that configuration files should stay relatively flat, but if you eventually run into a situation where you need hierarchy, you’ll be unhappy not to have it.

What's in a Button?

A while back I posted this spicily-phrased take:

I appreciate that someone else understands that being a GUI has some basic requirements and “draws to the screen” is not the interesting one. The bar is about 20cm off the floor but everyone forgets to jump.

Despite mostly not working on GUIs in my career, I have strong opinions about consistency and about affordances for beginners and power users alike. So today, let’s take a simple case study: a button.

SICPelago

SICPelago is a randomized Scheme environment where you unlock core capabilities by solving carefully selected exercises adapted from Structure and Interpretation of Computer Programs. Starting only with your trusty lambda and the supporting quote, climb your way to the top of the textbook, exploring math puzzles, composite data structures, and infinite sequences. Happy April Prototypes Day!

Older Posts

  1. 2025-01-12 ROSE-8 in customasm
  2. 2025-01-06 “Pretty Good, Pretty Good”
  3. 2024-12-26 The Shell is a Program
  4. 2024-07-17 Trunic
  5. 2024-07-02 AnyObject
  6. 2024-04-07 XZ Gon' Give It To Ya
  7. 2024-04-06 Run-time Polymorphism in Swift
  8. 2024-01-20 Online Communication
  9. 2024-01-07 The Biggest Smallest PNG
  10. 2023-12-28 CellLVM
  11. 2023-12-14 Protobuf Is Almost Streamable
  12. 2023-12-13 Daylight Saving Is Temporal Time Zones
  13. 2023-11-26 GitMounter
  14. 2023-10-23 Type Erasure in Rust
  15. 2023-10-09 Soft Orders of Magnitude
  16. 2023-10-04 There's No Such Thing As "Implicitly Atomic"
  17. 2023-08-12 Multiplayer Slipways
  18. 2023-07-15 HOW TO REFER TO A MAGIC CONSTANT IN C
  19. 2023-04-01 sNaNs and qNaNs
  20. 2023-02-12 Setting up GoToSocial
  21. 2023-01-22 Rescuing Files From Classic Mac OS...with Swift!
  22. 2022-12-03 Re: Twitter
  23. 2022-11-28 The Two Faces of Codable/Serde
  24. 2022-10-09 Swift was always going to be part of the OS
  25. 2022-05-14 Relative References in ARM64 Disassembly
  26. 2022-04-24 Default Arguments and Label-based Overloading
  27. 2022-03-19 #TalkPay
  28. 2022-03-02 UnsafeMutableRawBufferPointer
  29. 2022-02-21 Dynamic Linking Is Bad For Apps And Static Linking Is Also Bad For Apps
  30. 2021-12-31 Swift Regrets: Wrap-up
  31. 2021-09-10 Swift Regrets
  32. 2021-07-05 Keyboard Pants
  33. 2020-11-15 Negotiate Your Offers!
  34. 2020-10-20 The Swift Runtime: Enums
  35. 2020-10-06 The Swift Runtime: Class Metadata Initialization
  36. 2020-09-29 The Swift Runtime: Class Metadata
  37. 2020-09-21 The Swift Runtime: Uniquing Caches
  38. 2020-09-14 The Swift Runtime: Type Metadata
  39. 2020-09-07 The Swift Runtime: Type Layout
  40. 2020-08-31 The Swift Runtime: Heap Objects
  41. 2020-08-26 Objective-Rust
  42. 2020-07-18 A Letter To My Congressional Representatives on the DHS Abuses of Power in Portland, Oregon
  43. 2020-07-07 Suffusion: Playing with Filesystems
  44. 2020-05-24 ROSE-8 on Mac OS 9
  45. 2020-04-03 Shallow Git Repositories
  46. 2020-04-01 Swift on Mac OS 9
  47. 2020-02-06 Flexible Identities in git
  48. 2020-02-04 Introducing the Game 'by Color
  49. 2020-01-28 ROSE-8: Console Mode
  50. 2020-01-22 Setting up gitweb on Shared Hosting
  51. 2020-01-13 ROSE-8
  52. 2019-12-24 quasiquarantine
  53. 2019-11-01 Leaving Apple
  54. 2019-09-25 Queue, Queeu, Quuee
  55. 2019-09-13 Presentation on PrintAsObjC
  56. 2019-08-01 > go east
  57. 2019-02-21 A Shiny Magic Number
  58. 2018-04-29 Misleading Metrics and UX Tradeoffs
  59. 2018-04-03 "FIXME" Doesn't Always Mean "Fix Me"
  60. 2018-03-22 My Little (String) Optimization, Part 2
  61. 2018-03-15 My Little Optimization: The Compiler Is Magic
  62. 2018-02-26 Many-to-Many Protocols
  63. 2018-01-29 Color Palette #8
  64. 2017-09-07 The New Kingdom of Nouns
  65. 2017-09-05 Over-abstraction
  66. 2016-08-21 Macromancy, Part 2
  67. 2016-08-07 Macromancy
  68. 2016-06-19 Pronoun Buttons
  69. 2016-05-29 Webmailer's Update Bar
  70. 2016-05-23 So You Want to Be a (Compiler) Wizard
  71. 2015-12-29 Re: Contempt Culture
  72. 2015-11-18 Recommendations
  73. 2015-05-09 Nibblesort: Adventures in Optimization
  74. 2015-02-22 AlterConf SF/Oakland
  75. 2015-01-24 “Skip the FFI”
  76. 2014-12-28 SIGWINCH
  77. 2012-12-08 How to Write a Checker in 24 Hours
  78. 2012-10-02 Git Tricks
  79. 2012-05-16 Big News
  80. 2012-04-26 Keyboard Adventures
  81. 2012-04-10 Mail Aliases
  82. 2011-08-14 Header Anchors: A Safari Extension
  83. 2011-08-10 "Little Big Details"
  84. 2011-07-29 Weak Linking
  85. 2011-07-25 Using Clang from SVN in Xcode
  86. 2011-07-22 rm vs. Time Machine
  87. 2011-07-14 Priorities
  88. 2011-06-30 Quick Look in TextMate
  89. 2011-06-27 git add
  90. 2011-06-20 Automatic Reference Counting
  91. 2011-06-16 Dealing with "Sandwich Code"
  92. 2011-06-05 gdba
  93. 2011-06-03 Chrome vs. Safari
  94. 2011-05-31 User-Side Troubleshooting
  95. 2011-05-30 Auspicious Continuation
  96. 2009-07-21 Scripting Bridge
  97. 2009-07-08 What Happened to Dockyard?
  98. 2009-06-26 Garbage Collectors and Stack Drawers
  99. 2009-06-21 Z shell
  100. 2009-05-22 “Several New Features”
  101. 2009-05-05 C++ Templates are Turing-Complete
  102. 2009-04-21 [Meme] How Many HTML Elements Can You Name in 5 Minutes?
  103. 2009-04-16 Safer Plugin Categories
  104. 2009-04-02 Hacking Safari 4...for Great Convenience
  105. 2009-03-27 Const Correctness
  106. 2009-03-19 Categories and +load
  107. 2009-03-15 Subversion Checksum Problems
  108. 2009-03-06 JavaScript Tetris
  109. 2008-09-04 Objective-J and Objective-C
  110. 2008-08-28 HTTPS and Name-based Virtual Hosting
  111. 2008-03-08 Alerts Without Apps (or nibs)
  112. 2008-01-14 NSNumber, CFNumber, and CFBoolean
  113. 2007-12-13 GenericToolbar and IB3
  114. 2007-10-27 Performance Optimization: Why We Can't Use valueForKeyPath:
  115. 2007-09-01 Short Xcode Tip: Plugins
  116. 2007-07-15 Port 25 Blocked?
  117. 2007-06-27 GenericToolbar Icon
  118. 2007-04-13 The Symbolism of Pretty URLS
  119. 2007-03-07 Flexible PHP
  120. 2007-01-12 Inauspicious Beginnings