Flashcard strategies

The on-line widget I showed yesterday was a very simple version of a flashcard program. Which leaves me wondering — how would you add to a program like that to make it better?

A number of things are missing which might or might not make it better. For example, in the current version you need to refresh the page to see the next question. It would probably be better to have an on-screen button to do that.

Also, right now there is no penalty for wrong answers. I wonder whether there should be, and if so how much the penalty should be.

Similarly, I don’t currently provide any sort of running score. So you don’t know until you’re done how much progress you’ve made.

More seriously, I don’t tell you whether the answer you just provided was wrong or right. From my time recently playing Spelling Bee, I know that getting an answer right feels great, and people should be rewarded for that.

Also, there is no very easy way for somebody else to substitute their own test questions. In case you are curious, there is a file there called flashcards.js which contains the content of the test.

Right now the only way you could substitute in your own test is to copy the index.html file from my folder, and put up a copy of the flashcards program on your own site, with your own version of flashcards.js.

Ideally you shouldn’t need to do that. For example, I could provide a way for you upload your flashcards.js file to my system. Then people could take your test instead of mine.

So many choices, so many possible things to do! Maybe it’s good that I stopped where I did. Otherwise I might end up spending the next year working on flashcard programs.

Widget Wednesdays #13

I had such a good time implementing last week’s Wednesday widget, that I decided I’d keep going in the same general direction. This week I’ve implemented a little flash card program.

There are all sorts of facts that I would like to learn better, so I can really use a flash card program. One design consideration I thought was important was to make it easily reconfigurable.

For this example, I chose the State capitals, because that’s kind of a canonical topic. But the questions/answers themselves are in a separate file, so it’s easy to substitute a new set of questions and answers.

You can try it for yourself here.

Old phones and Zoom

I remember sometime back in the 1980s looking at my telephone and being frustrated. I knew there was a computer in there, but the phone company did not give me access to it.

“If only I could add to the software in that thing,” I would tell myself, “I could do make this experience so much better.” But of course, I didn’t have the needed access.

Skip forward a couple of decades, and now I can program my phone to my heart’s content. And so can a lot of other people, which is why there are so many cool apps on my phone.

But we haven’t yet gotten there with video chat. Zoom only entered the consciousness of the general public about two years ago, on or around March 12, 2020. That is the very definition of recent history.

So not surprisingly, there is, as yet, no way for those of us who don’t work for Zoom to program it. As we say in the software biz, there is no API for Zoom.

But inevitably that will change. If Zoom doesn’t provide an API, some competitor will show up who does. And those third party apps are going to make the experience of video-chat with your friend or your colleague or your grandma a lot cooler and more interesting.

Fun times ahead.

American Beauty

I listened to the Grateful Dead’s American Beauty album this evening. Just played it straight through.

I don’t really know what prompted me to think of it. Some random association from years ago, perhaps. But I’m glad I did.

It’s a beautiful collection of songs, with an amazing level of musicianship, and a great tribute to many American musical genres all at once. Yet back in 1970 that album was something else as well.

It was the center of a particular way of being in the world, one that today seems nearly incomprehensible. There was a kind of idealism there that I think has been long beaten out of us.

I am sure that a younger person hearing that album would appreciate it on a musical level. But the cultural language it speaks would probably remain completely opaque.

I wonder how many cultural artifacts become lost in plain sight. They remain available — transcribed from paper, celluloid or acetate, but they represent a cultural mindset that is either fading away or already long gone.

Without cultural context, a song can lose its deepest meaning — it’s a hand-me-down. The thoughts are broken, perhaps they’re better left unsung.

I don’t know, don’t really care. Let there be songs to fill the air.

Migrating from feature to structure

I’ve recently notice that I frequently use a very productive programming pattern. Usually I just take it for granted, but today I’ve decided to call it out, in case it might be useful to others.

When I’m developing new capabilities, I think of them as “features” — things that I’m adding to the outside of the system. They are sort of like adornments, add-ons, things that make the system more powerful or fun to use, but aren’t essential.

Working this way allows for very rapid iteration. If you aren’t changing the core structure of anything, then you can make changes very fast, and you can switch between changing code and the resultant change in experience pretty much instantly. Not needing to “recompile the system” is a big win.

But eventually (in a good scenario) the feature grows powerful and stable enough that it starts to feel like a core capability of the system itself. Then it’s time to move things inward.

Rather than continuing to present the new capability as a feature, after it has matured enough I move it into the core part of the software. So now instead of just being available as an add-on, it becomes available everywhere.

Over time this way of doing things results in an ever more powerful set of tools. And it does so without the risk of suddenly breaking things by constantly adding new stuff that tinkers with the inner core of things.

I suspect that a lot of people who develop code use the same pattern. I wonder whether there is a name for it.

The Casablanca problem

If you show the iconic film Casablanca for the first time to somebody in their 20s, you might be disappointed in the response. From their point of view, it just looks like a myriad other cinematic romances.

But back in 1942, that was very much not the case. Casablanca invented much of cinematic storytelling language that we now take for granted. So much so, that it’s hard to remember that before that film came out, nobody had ever seen anything quite like it before.

You’ll run into the same problem if you try to show Hill Street Blues to a young person who knows nothing about it. It just looks like everything they grew up seeing.

But back in 1981, Steven Bochco and company were literally creating something that nobody had ever seen before. In that year, because of that TV show, the collective culture changed, and it has never looked back.

Yet it’s hard to appreciate that now, because we’ve been watching Hill Street Blues knock-offs for more than forty years. We’ve reached the point where there are now even knock-offs of those knock-offs.

I wonder how many such cultural artifacts there are out there — great classics that changed everything, to the point where they no longer seem innovative to the uninitiated. Maybe we could compile a list.

Like that scene from Bugsy

There is a scene in the Barry Levinson film Bugsy that I absolutely love. Warren Beatty, as the title character, is dashing back and forth from one room in his house to another.

In one room, he is the ruthless mobster Bugsy Siegel. In the other, he is a devoted husband and father, spending quality time with his family.

Nobody except him knows that any of this is going on. And we see his growing desperation as he tries to multitask without slipping up.

Every time he moves between one room and another, he needs to completely transform. At every moment he needs to keep track of who he is supposed to be, and where the conversation left off the last time he left the room.

My day today at work reminded me of that scene. I had a visiting student, a meeting with a Ph.D. student, a group research meeting over Zoom, and several other Zoom meetings to look at other people’s demos and to establish research connections with other faculty. Several of those meetings overlapped, even though they weren’t supposed to.

For much of that time I was playing phone tag with the secretary in a doctor’s office, while also trying to cancel some plane flights before it was too late. Each of these meetings and events asked me to put on a different hat, so to speak.

I still love that scene from Bugsy, but now I also like how it helps me to appreciate one of the best things about movies: They are not real.

Working from a coffee shop

This evening I find myself working in a coffee shop. Just me and my notebook computer and Wifi and some random strangers.

You’ve probably been there too. There is something oddly random about it. People come and go, and other folks’ life plays out before you in little snippets.

Mostly I focus on what I’m working on, but every once in a while I notice the sweet young couple on their first date, an old man wandering around looking a little sad and lost, the students hunched over their laptop computers, intent on making the next deadline.

I am not sure whether these various events are helpful to my process or not, as I try to get my own work done. But whatever it is, I’m enjoying the vibe.

Widget Wednesdays #12

As I mentioned yesterday, this week’s widget is an experimental vocabulary builder.

It’s as simple as it can be. You are presented with ten words that exist in the English language. If you are confident that you know that word, check it off, and that word won’t appear again.

I didn’t bother implementing a server for this, because it’s just a design experiment. So your checked-off choices only appear in your browser’s local cache.

This means that every time you clear the cache, it will forget what words you’ve checked off. If I make this into a more permanent thing, I’ll get around to implementing a proper server side.

You can try it here.


Playing the NY Times Spelling Bee has gotten me much more interested in words I’ve never heard of. For example, the other day I found all the words except “lolling”, which I had never heard of.

Every time I miss a word, I look it up, and learn all sorts of fascinating things I had not known. So it occurs to me that it would be interesting to go about building my vocabulary in a more systematic way.

I’m thinking of writing a little program that presents me with random words, and then lets me check off the ones that I already know. If I don’t know some word, then the program will keep testing me on that one until I get it right.

If I manage to get this implemented by tomorrow, then I’ll put it on line as for this week’s Widget Wednesday. We’ll see!