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!

ROSE-8 in customasm

Last week a friend shared the existence of hlorenzi’s customasm, a tool that can serve as the assembler for arbitrary CPU architectures just by defining a mapping of instructions to encodings.

Hey, I made a CPU once! How hard would it be to make a customasm definition for ROSE-8? Turns out…not very! I played around with it for about two hours, and by the end of it I’d translated an entire ROSE-8 program to customasm, with most of the definition file looking basically the same as the text reference for the ISA encoding.

Older Posts

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