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

Possibly Related Tags