It's the APIs, stupid! (part 3)
Apr. 14th, 2010 07:52 pmIn the first part, I talked about why learning to program GUIs is frustrating and hard. Last time was all about what "easy" would mean in this context, and why nothing meets that goal.
My project is tentatively called Scribble. It's supposed to solve these problems, and not solve any others.
The "not solve any others" is important. Most GUI libraries are made for people like me, not people like our hypothetical student, so they offer a bewildering selection of crap to deal with. So, I thought to myself, what's the least possible feature set you can have and still be able to do stuff? And I sat on this problem for close to three years.
The key is, you have to define "do stuff". I think a good selection of goals would be:
Originally, in 2006, this was called Swan, and was trying to solve the much different problem of platform-independent GUIs. What I realized was you don't want a platform-independent GUI. The best GUIs are platform-integrated; they're iTunes or Coda or Tinygrab or Dave's thing.
Scribble is centered around the idea of a canvas that you draw stuff on, instead of a fluid layout that you put controls into. Canvas library, not GUI library. The goal isn't to make a GUI with grid widgets or whatever, it's to noodle around with drawing graphics.
None of this is any good if it doesn't solve the main problem, though, which is that it can't require you to deal with libraries. What I finally came up with was making it a standalone application. You download Scribble as a separate, prebuilt binary, and bundle it with your program. Your program runs it and sends it commands. I'll provide bindings for a few different languages, but the bindings won't be anything that a bright programming student couldn't write herself. It'll send your program back commands when an event happens, and so all you need to do is process text strings.
It wouldn't be for everything, but it would make it a little easier to make the computer do something neat. So, what do you think?
My project is tentatively called Scribble. It's supposed to solve these problems, and not solve any others.
The "not solve any others" is important. Most GUI libraries are made for people like me, not people like our hypothetical student, so they offer a bewildering selection of crap to deal with. So, I thought to myself, what's the least possible feature set you can have and still be able to do stuff? And I sat on this problem for close to three years.
The key is, you have to define "do stuff". I think a good selection of goals would be:
- Draw a smiley face, a flower, and a line drawing of a house, on a light-blue-to-white gradient background
- Draw a grid of repeated images (loaded from a PNG file), and when you click one it becomes a different image
- Draw a rectangle that can be dragged around by the mouse
- Draw a text entry box, then below, draw the contents of the box in orange, at a 30 degree angle from horizontal
- Tetris
Originally, in 2006, this was called Swan, and was trying to solve the much different problem of platform-independent GUIs. What I realized was you don't want a platform-independent GUI. The best GUIs are platform-integrated; they're iTunes or Coda or Tinygrab or Dave's thing.
Scribble is centered around the idea of a canvas that you draw stuff on, instead of a fluid layout that you put controls into. Canvas library, not GUI library. The goal isn't to make a GUI with grid widgets or whatever, it's to noodle around with drawing graphics.
None of this is any good if it doesn't solve the main problem, though, which is that it can't require you to deal with libraries. What I finally came up with was making it a standalone application. You download Scribble as a separate, prebuilt binary, and bundle it with your program. Your program runs it and sends it commands. I'll provide bindings for a few different languages, but the bindings won't be anything that a bright programming student couldn't write herself. It'll send your program back commands when an event happens, and so all you need to do is process text strings.
It wouldn't be for everything, but it would make it a little easier to make the computer do something neat. So, what do you think?