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. 2024-12-26 The Shell is a Program
  3. 2024-07-02 AnyObject
  4. 2024-04-07 XZ Gon' Give It To Ya
  5. 2024-04-06 Run-time Polymorphism in Swift
  6. 2024-01-20 Online Communication
  7. 2024-01-07 The Biggest Smallest PNG
  8. 2023-12-28 CellLVM
  9. 2023-12-14 Protobuf Is Almost Streamable
  10. 2023-12-13 Daylight Saving Is Temporal Time Zones
  11. 2023-11-26 GitMounter
  12. 2023-10-23 Type Erasure in Rust
  13. 2023-10-09 Soft Orders of Magnitude
  14. 2023-10-04 There's No Such Thing As "Implicitly Atomic"
  15. 2023-07-15 HOW TO REFER TO A MAGIC CONSTANT IN C
  16. 2023-04-01 sNaNs and qNaNs
  17. 2023-02-12 Setting up GoToSocial
  18. 2023-01-22 Rescuing Files From Classic Mac OS...with Swift!
  19. 2022-11-28 The Two Faces of Codable/Serde
  20. 2022-10-09 Swift was always going to be part of the OS
  21. 2022-05-14 Relative References in ARM64 Disassembly
  22. 2022-04-24 Default Arguments and Label-based Overloading
  23. 2022-03-19 #TalkPay
  24. 2022-03-02 UnsafeMutableRawBufferPointer
  25. 2022-02-21 Dynamic Linking Is Bad For Apps And Static Linking Is Also Bad For Apps
  26. 2021-12-31 Swift Regrets: Wrap-up
  27. 2021-12-30 Swift History: Assignment Methods
  28. 2021-12-28 Swift Regret: inout Syntax
  29. 2021-12-26 Swift Delight: Optional Conveniences
  30. 2021-12-23 Swift Regret: try?
  31. 2021-12-21 Swift Delight: try
  32. 2021-12-17 Swift Regret: Operator Function Lookup Rules
  33. 2021-12-15 Swift Regret: "Double" rather than "Float64"
  34. 2021-12-10 Swift Delight: Implicit Member Syntax
  35. 2021-12-08 Swift Regret: Weak Vars in Structs
  36. 2021-12-03 Swift Regret: Lazy Vars in Structs
  37. 2021-11-30 Swift Delight: No Unused Results
  38. 2021-11-24 Swift Regret: Open Protocols
  39. 2021-11-21 Swift Regret: Retroactive Conformances
  40. 2021-11-18 Swift Delight: Library Evolution
  41. 2021-11-10 Swift Mangling Regret: Private Discriminators
  42. 2021-11-05 Swift Mangling Regret: The "Old" Mangling
  43. 2021-11-03 Swift Mangling Regret: Library Evolution
  44. 2021-10-29 Swift Delight: #available
  45. 2021-10-22 Swift Regret: Implicitly-Hashable Payloadless Enums
  46. 2021-10-20 Swift Regret: Top-Level Decls in Script Mode
  47. 2021-10-15 Swift Delight: Names for Generic Parameters
  48. 2021-10-13 Swift Regret: Generic Parameters Aren't Members
  49. 2021-10-08 Swift Regret: OpaquePointer
  50. 2021-10-06 Swift Regret: Unannotated C Enums
  51. 2021-10-01 Swift Delight: Value Semantics Collections
  52. 2021-09-29 Swift Delight: guard
  53. 2021-09-24 Swift Regret: Inferred Property Types
  54. 2021-09-22 Swift Regret: Implicit Optional Initialization
  55. 2021-09-17 Swift Regret: Subscript Trailing Closures
  56. 2021-09-15 Swift Regret: Subscript Argument Label Rules
  57. 2021-09-10 Swift Regrets
  58. 2021-09-10 Swift Regret: Unapplied Instance Methods
  59. 2021-09-08 Swift Regret: Bound Methods
  60. 2021-08-29 Swift Regret: Type-based Overloading
  61. 2021-08-25 Swift Regret: AnyObject Dispatch
  62. 2021-08-20 Swift Regret: Labeled Tuple Elements
  63. 2021-08-18 Swift Regret: Tuples and Argument Lists
  64. 2021-08-13 Swift Regret: Sequence
  65. 2021-08-11 Swift Regret: mutating Protocol Methods vs. Classes
  66. 2021-08-06 Swift Regret: NSUInteger
  67. 2021-08-04 Swift Regret: Protocol Syntax
  68. 2020-11-15 Negotiate Your Offers!
  69. 2020-10-20 The Swift Runtime: Enums
  70. 2020-10-06 The Swift Runtime: Class Metadata Initialization
  71. 2020-09-29 The Swift Runtime: Class Metadata
  72. 2020-09-21 The Swift Runtime: Uniquing Caches
  73. 2020-09-14 The Swift Runtime: Type Metadata
  74. 2020-09-07 The Swift Runtime: Type Layout
  75. 2020-08-31 The Swift Runtime: Heap Objects
  76. 2020-08-26 Objective-Rust
  77. 2020-07-07 Suffusion: Playing with Filesystems
  78. 2020-05-24 ROSE-8 on Mac OS 9
  79. 2020-04-03 Shallow Git Repositories
  80. 2020-04-01 Swift on Mac OS 9
  81. 2020-02-06 Flexible Identities in git
  82. 2020-02-04 Introducing the Game 'by Color
  83. 2020-01-28 ROSE-8: Console Mode
  84. 2020-01-22 Setting up gitweb on Shared Hosting
  85. 2020-01-13 ROSE-8
  86. 2019-12-24 quasiquarantine
  87. 2019-09-25 Queue, Queeu, Quuee
  88. 2019-09-13 Presentation on PrintAsObjC
  89. 2019-08-01 > go east
  90. 2019-02-21 A Shiny Magic Number
  91. 2018-04-29 Misleading Metrics and UX Tradeoffs
  92. 2018-04-03 "FIXME" Doesn't Always Mean "Fix Me"
  93. 2018-03-22 My Little (String) Optimization, Part 2
  94. 2018-03-15 My Little Optimization: The Compiler Is Magic
  95. 2018-02-26 Many-to-Many Protocols
  96. 2018-01-29 Color Palette #8
  97. 2017-09-07 The New Kingdom of Nouns
  98. 2017-09-05 Over-abstraction
  99. 2016-08-21 Macromancy, Part 2
  100. 2016-08-07 Macromancy
  101. 2016-06-19 Pronoun Buttons
  102. 2016-05-29 Webmailer's Update Bar
  103. 2016-05-23 So You Want to Be a (Compiler) Wizard
  104. 2015-12-29 Re: Contempt Culture
  105. 2015-11-18 Recommendations
  106. 2015-05-09 Nibblesort: Adventures in Optimization
  107. 2015-02-22 AlterConf SF/Oakland
  108. 2015-01-24 “Skip the FFI”
  109. 2014-12-28 SIGWINCH
  110. 2012-12-08 How to Write a Checker in 24 Hours
  111. 2012-10-02 Git Tricks
  112. 2012-04-26 Keyboard Adventures
  113. 2011-08-10 "Little Big Details"
  114. 2011-07-29 Weak Linking
  115. 2011-07-25 Using Clang from SVN in Xcode
  116. 2011-07-22 rm vs. Time Machine
  117. 2011-07-14 Priorities
  118. 2011-06-27 git add
  119. 2011-06-20 Automatic Reference Counting
  120. 2011-06-16 Dealing with "Sandwich Code"
  121. 2011-06-05 gdba
  122. 2011-06-03 Chrome vs. Safari
  123. 2011-05-31 User-Side Troubleshooting
  124. 2011-05-30 Auspicious Continuation
  125. 2009-07-21 Scripting Bridge
  126. 2009-07-08 What Happened to Dockyard?
  127. 2009-06-26 Garbage Collectors and Stack Drawers
  128. 2009-06-21 Z shell
  129. 2009-05-22 “Several New Features”
  130. 2009-05-05 C++ Templates are Turing-Complete
  131. 2009-04-21 [Meme] How Many HTML Elements Can You Name in 5 Minutes?
  132. 2009-04-16 Safer Plugin Categories
  133. 2009-04-02 Hacking Safari 4...for Great Convenience
  134. 2009-03-27 Const Correctness
  135. 2009-03-19 Categories and +load
  136. 2009-03-15 Subversion Checksum Problems
  137. 2009-03-06 JavaScript Tetris
  138. 2008-09-04 Objective-J and Objective-C
  139. 2008-08-28 HTTPS and Name-based Virtual Hosting
  140. 2008-03-08 Alerts Without Apps (or nibs)
  141. 2008-01-14 NSNumber, CFNumber, and CFBoolean
  142. 2007-12-13 GenericToolbar and IB3
  143. 2007-10-27 Performance Optimization: Why We Can't Use valueForKeyPath:
  144. 2007-09-01 Short Xcode Tip: Plugins
  145. 2007-07-15 Port 25 Blocked?
  146. 2007-06-27 GenericToolbar Icon
  147. 2007-04-13 The Symbolism of Pretty URLS
  148. 2007-03-07 Flexible PHP
  149. 2007-01-12 Inauspicious Beginnings

Possibly Related Tags