Archive for December, 2008

Bleah.


I hate doing the right thing sometimes. Especially when it’s hard.


On needing permission to be tired


One thing about being a good teacher is that you can’t teach everything. Or rather, that you can’t teach anything, in the sense that there is no action on your part that ; you can only do your best to help your student learn. And when you can’t say anything, you find someone who can.

And if you’re a student, when you can’t say anything – sometimes you have to spring into action, muddle around, crash into things, get your hands dirty – but sometimes, when you’re exhausted and panting and up to your elbows in a greasy, muddy mess, you have to sit, be quiet, open your eyes and ears. And listen for a while.

“The world in which you were born is just one model of reality. Other cultures are not failed attempts at being you; they are unique manifestations of the human spirit.” –Wade Davis

from Chris Hardie, via Ian Bicking. Chris also has an excellent post on leaving that I’m using as a reminder to myself on how to stay properly and not “ghost” (my terminology), another on how flash mobs redefine our perception of reality, another on practicing what you preach, and another on being quiet which I identify with a lot.

And then Rainer Maria Rilke, via Josh Gay.

You are so young, so much before all beginning, and I would like to beg you, dear Sir, as well as I can, to have patience with everything unresolved in your heart and to try to love the questions themselves as if they were locked rooms or books written in a very foreign language. Don’t search for the answers, which could not be given to you now, because you would not be able to live them. And the point is, to live everything. Live the questions now. Perhaps then, someday far in the future, you will gradually, without even noticing it, live your way into the answer.

And then more.

What is necessary, after all, is only this: solitude, vast inner solitude. To walk inside yourself and meet no one for hours – that is what you must be able to attain… It is also good to love: because love is difficult… loving, for a long time ahead and far on into life, is: solitude, a heightened and deepened kind of aloneness for the person who loves. Loving does not at first mean merging, surrendering, and uniting with another person (for what would a union be of two people who are unclarified, unfinished, and still incoherent?), it is a high inducement for the individual to ripen, to become something in himself, to become world, to become world in himself for the sake of another person; it is a great, demanding claim on him, something that chooses him and calls him to vast distances.I

I have noticed in myself a need to be alone with other people in the last few days. To just be with a small number of people that I deeply love and trust, not necessarily saying anything in particular, with no pre-set agenda, and no need for me to inject sparkling happy lemonade energy into the proceedings. Yeah, long conversations usually ensue. And at some point, I typically do get sort of hyper (it’s a hard habit to break, and when I rev up, I can’t stop myself sometimes). But I don’t want to have to rev up all the time right now. I really don’t.

Hm. I guess what I am really saying is that while I can make myself not-tired at will, I am tired. And I want to let myself be tired. And so I need to be with people I can allow myself to be tired around.

PS: I’ve chosen to skip the inbox cleaning for the night and just pass out now.


Inbox cleaning: 127/763 (a.k.a. an attempt to distract people from my last post)


Total emails answered today: over 400. I’ve got to find ways to reduce the influx. Strategic mailing list unsubscriptions seem like the thing to do.

This post is mostly in order to distract folks from the video of me talking, to distract my future self when I next come across this post, and to make me stop thinking “GAH! Did I just post a transcript of me talking? That feels weird.” Yeah, I’m working on being less uncomfortable in spotlights. At some point I will make myself stop whining about it; the first step is to actually get in spotlights. Seriously. I almost said “but I can’t give a talk on that! I don’t know anything and I can’t speak!” when I was asked to do that presentation. So I’m happy with that victory, and allowing myself to feel uncomfortable about it.

Right. On to the distractions!

Pia found some Max Payne Stick Figure Safety Instructions in her hotel. This case makes the iPhone more accessible to the visually impaired.

On the more serious side: Sacha’s post triggered me to realize why I’m uncomfortable asking people “what do you do?” What I really want to do is ask someone what they’re passionate about; I tend to be around people who are passionate about their work, so “what are you working on?” has been good for me. Sumana made me stop and think about mastery and servant leadership and… Conversations with Caroline, Yifan, Matt, Michael, and 5-ee over the weekend – and a long note from Andrew – have also helped to crystallize some of my thinking on… life, to use the wide hand-sweeping gesture of a person struggling for a word to encompass far too much.

It’s cold here; first snow fell today, and I’m a little sick. I want to drink hot broth, hot cider, not eat food. I want to bundle up in a warm, warm, warm place and read and read and read, and sleep. I can manage the “sleep” part now, at least. I did read a bit today (2 books) and found this quote in a book by Vivian Gussin Paley, attributed to Annie Dillard.

No child on earth was ever meant to be ordinary, and you can see it in them, and they know it too, but then the times get to them, and they wear out their brains learning what folks expect, and spend their strength trying to rise over those same folks.

I’ll not grow up like that.


Sugarcamp: 5-minute talk on community


This post is going to leave me somewhat mortified, but I’m going to stand by my long-ago promise to not censor myself.

Scott posted up (thank you, Scott!) the videos from Sugarcamp. One of the things at Sugarcamp was a session about community. Now if you want to learn how to properly run a community, you should watch the earlier part of the talk featuring Greg DeKoenigsberg; it starts here, and you can follow the sequential links to the videos called “SugarCamp: Community (N of 9)” for N /in /integers, 0 < n < 6. See Greg-1, Greg-2, Greg-3, Greg-4, Greg-5, and the first 2 minutes of Greg-6. They are 10 minutes each. If you want to hear about community-participation blockers, listen directly to the people fighting through them – Elsa and Yifan, Ryan, Adam, and Seth.

And then there’s my bit. all of 5 minutes long, from approximately 2:30 to 7:30 in this video.

Transcript (as best as I could type it down):

We’re short on time, and you guys know I like short speeches, so… I had the backstory of how I tried and failed to be volunteering for OLPC in 2006; I almost didn’t end up doing anything at all for them, because it was so hard.

But I’m going to skip that because there are at least 3 people in this room by my count that can give you a much better picture of why it’s hard right now. Sitting in the back there is Elsa and Yifan, who are building Olin College’s chapter, and in the back is Ryan, who flew in, and this is his first taste of working with Sugar. And if you want to know what’s hard, and what’s stopping them, and what blockers need to be removed, there are three people here that you should be asking these questions of!

So that’s my first point. [Audience laughter]

Second one, show of hands – how many people here want community around Sugar, OLPC, and all that? [Murmurs around the room as people raise their hands offscreen.] Okay. I think that’s pretty much everybody in this room. Seth has a little hand-wavy… okay.

How many people are willing to put in the time to do it? [Long pause; offscreen, a much smaller number of more hesitant hands are now raised.] Do you know how much time it takes?

One of my big complaints before was “Oh my gosh, why aren’t they doing more to help develop and foster community? This is very easy! Why…” It’s – it is low-hanging fruit, but it still takes time to pick low-hanging fruit.

So I’ve been doing test community for 3 weeks, almost 4 weeks now. We meet 1 hour per week on IRC. Well, one time it was 1 hour and 1 minute because I was a slacker, but… we meet for one hour per week. It takes me at least 3 hours before the meeting to prepare for that 1-hour meeting, 4 hours after the meeting to clean up after that 1-hour meeting, and twice as much time as the entire total I have described before to ping people in the background saying “how are you doing? Can I get things out of your way?”

It takes a lot of effort, and the things is, right now, this effort is invisible. If you do your job really, really well as a community facilitator, nobody should know you exist. Every… all the spotlight, all the credit needs to go to the people who you want to participate. [Voice in the audience: Hear, hear.] You should not be visible at all. I’m not good at that yet, I still talk too much at meetings, but we’re – we’re getting there.

And the third one is, it’s not a matter of… We’re- we’re talking about how organizations are… maybe they’re “anti-community, and we’re the community and we have it right…” It’s not a matter of us being right and them being wrong. We are – there are two worlds that see the world in very, very different ways. These are two systems of functioning that are… they’re not incompatible with each other, but they take translation.

I felt Greg did a much better job of translating that than I ever will, because I’ve been in the business world for about 3 months – but where they’re coming from is not because they’re bad or mean or stupid. They have [and here I mumble and I can't transcribe myself], they have things that they want to do, and I think we also need to give them a little credit before rebelling wholesale against them, and see “okay, where are you coming from,” because they’re also smart, they’re also – we’re trying to solve the same problem, right? Why are we fighting each other?

[Audience member says something offscreen; I can't lipread it from the video, but I'm nodding.] So try to walk a mile in someone else’s shoes before you say they’re being dumb. That’s my third point. That’s all I have.

Who’s next? I’ve got a camera in my face, I’m going to move off now… [scoots offscreen]

(This is the end of my transcript.)

I’d love comments and feedback on this (mostly in terms of content, but also on
delivery – I know my presentation/speaking skills need work).

Note that this talk was completely improvised. I’d scribbled notes on what I’d planned on talking about
earlier that afternoon with the intent of winging it according to that outline (I hate writing talks down word-for-word beforehand). As Greg led
the earlier part of the presentation and discussion, I began to realize that the things I’d
planned to say were not the things that needed to be said, and also that we were completely out of time. So I scrapped the idea of talking that evening, intending to take the time to reflect and compose an email to the list, an essay, or some other well-thought-out written version of my thoughts after the session. In other words, at that point, I’d expected not to speak at all.

So the pause
between Scott saying I should take the floor and me beginning to speak
is me frantically thinking “OH MAN WHAT DO I SAY?” followed by “I guess I’ll say the 3 things I was thinking of writing about after the session,” followed by opening my mouth in what I hoped would be a mercifully concise spiel (it was). I don’t like talking to people; I like talking with people, which is why I try to keep my monologues as minimal as possible.

Anyhow. Shoot.


Some nifty marketing


From my parents – I thought that this was quite clever.

Take a look at HEMA’s product page. You can’t order anything, and it’s in Dutch, but just wait a couple of seconds and watch what happens. Don’t click on any of the products, just wait and see what happens. And be sure you have your sound turned up. [Edit: Apparently things that are soft to me are very loud to other people. Whoops. Make sure you have your sound turned on, but to a more moderate volume than originally stated.]

From Tim Smith (I agree, and think groups that want to make things that will quickly be internationally understood should take note):

350.org, a climate change activist group, put together a totally sweet and basically wordless animation to describe their mission and its urgency. I think it’s really well-done.

(Marketing. I’m interested by marketing. I think I’m turning into my father in some ways – ways that are very much not such a bad thing.)


Making rules about legos, making assumptions about people.


Katie sent me a story a while back. It’s a story about an early childhood classroom that removed free play and construction with lego blocks and replaced it with rules about how legos could be used.

Okay. Stop right there. What was your reaction to that sentence? What kind of story are you writing in your mind? My first knee-jerk reaction was something like this, and a rising sense of rage about “those grownups! They don’t understand!” and the story in my mind was something like this:

  1. Children playing freely, exploring and constructing their own worlds.
  2. OH NO! We don’t like what the children are doing! We take their toys away.
  3. Now there are rules about how they can use the toys, and everything is better!

That having been noticed, I went back and actually read the story.

In the weeks after the trading game, we explored questions about how rules are made and enforced, and when they ought to be followed or broken. We aimed to help children see that all rules (including social structures and systems) are made by people with particular perspectives, interests, and experiences that shape their rule-making. And we wanted to encourage them to consider that there are times when rules ought to be questioned or even broken…

Now, my reaction tells me something about the assumptions that I’m making about the roles and motivations of various demographics. And my summary isn’t an inaccurate one. But it’s interesting to think about what it misses and what it loses because of the lens I chose to write it with. Here’s another three-sentence version.

  1. Children playing freely, creating social hierarchies that reflect the (not always benign) cultural assumptions they’re surrounded by.
  2. Interesting – let’s encourage them to reflect on what they’re doing, facilitating conversations without the toys around as a point of contention.
  3. By examining their behavior and codifying what kind of behavior they wanted to have, the children came to a more powerful understanding of how they wanted to use and share their toys, reflected in the rules they made.

What groups do we identify ourselves with, and what assumptions and reactions does that make us have?


Ben Fisher on HyperCard


Introduction:

These words aren’t mine; they’re from Ben Fisher, whose blog (titled “half hour hacks”) includes things like “So, just for fun, I quickly wrote a Python script to translate assembly-like code into assembly” and “Today I was kind of bored and made… a system for checking if a link is a rickroll.” I enjoyed our conversation so much I asked for his permission to repost it.

Ben starts by explaining why he likes HyperCard, then continues with a description of what HyperCard is and how its design encouraged his early adventures in programming, ending with an abstraction of several design principles that programs with similar goals can emulate. I’ve split Ben’s text up into several sections to make it easier to follow. Other than this and several spelling/punctuation corrections, the text is Ben’s unaltered, original prose.

I’ll be quiet now and let Ben talk.

Why Ben likes HyperCard

HyperCard was what introduced me to hacking, a long time ago. HyperCard is the right thing – encouraging independent explorations of coding. In my case at least, you didn’t need anyone to teach you.

Note that I say “introduced me to hacking” and not “introduced me to programming.”

Programming is something anyone can learn in a computer science course: you learn the syntax of a language. You write 50 primitive programs and are bored to tears, rarely having to use any creativity. At the end of the course you know some syntax but are woefully unprepared to do real coding. What is worse, your opinion of programming has been deadened, and you see it has a dull, boring task.

Hacking, on the other hand, is not something easily taught. One is curious, independent, passionate, creatively trying new things. Coding is not a dull, menial task – it is a rich means of expression.

HyperCard allowed you to start coding with no knowledge of data structures, compilers, bytes. After working with it for a short time, though, one is inspired to learn about these things voluntarily because now coding is so much more than just syntax. My dream is to create something inspired by HyperCard in Python. Over the next few days I will send you some of my analysis of HyperCard and why it worked so well…

What is HyperCard?

Originally planned to be a simple database for home users. But, because of the powerful scripting
language, people began to write programs for it. Home users and non-technical users were able to write programs because of the awesome interface.

Then Apple killed it over a slow starving process of many years. Despite being very popular, Apple never even gave it color support, and since it is Mac Classic, it is now obsolete. But its ideas are very valuable, and relevant today.

HyperCard’s programming model

Your application window is called a “stack.” Each stack contains “cards.” Each card is essentially a form that has its own layout, but lives in the same stack window (think tabs – you are only in one card at a time). There are also “backgrounds” that can be shown on multiple cards. Cards typically have “links” to other cards- where a link can be a button with a script that says (go to card x). I don’t think these ideas are too relevent to applications today, though.

Using the interface

There is no compile step. There is not even a run – you are always running the program you are working on. Form builder, paint tool, code editor, were all built in seamlessly.

This is how it would work: you have a tool palette of about 15 choices. You can choose a paintbrush and draw on your form as if you were in MS Paint. Then you could choose the “Button” tool and create a button widget by drawing it on the screen. Select the button you made and choose “Edit script.”

Sample code

on mouseup
ask "What is a number?"
put it into myNumber
ask "Type in some data points."
put item 1 of line 3 of it into x
put item 2 of line 3 of it into y
answer x*x + y*y
end
mouseup

This says to perform those steps on the “mouseup” event. That’s all there is to it. To test this, you change to the “browse” tool. This is the tool that can create mouse events. Then, when you click the button, that code is executed.

More on widgets

There is also a text widget called a “field.” Fields can respond to text events. All widgets can respond to mouseenter, mouseup, mousedown, and so on. (Sound like JavaScript? That’s because hypercard inspired javascript.)

It is important that HyperCard’s scripting language is not a toy by any means. It’s really handy for string parsing (get character 5 of item 4 of line 2 of mydata) – where the itemdelimiter defaults to “,” but could be anything. Custom functions, loops, arrays, were all there. I hate to admit that the syntax may look like Basic, but the resemblance is only in the good things (natural language) and not the bad (Ugly Code And Often Arbitrary Conventions). It is easy code to read, even if you don’t know coding.

All of the widgets have properties. (put the location of btn id 3 into myvar. set the name of btn id 3 to “new”).

All widgets have an “id” that can be used as a reference, passed to other functions, and so on. When stated this way, these concepts seem really natural and intuitive, whereas when using vc++ they are painful.

Source files

In HyperCard, the user does not see one long source file. Instead, each object that responds to events has its own code. However, because of the hierarchy, one would place common functions in the Card or Stack level, so that every lower element like a button could see them.

Other cool tricks

There were lots of other cool tricks that allowed you to use Hypercard in a lot of ways. A button
widget could have an image icon, and with the border turned off, you have an image “widget.” You can then change the location in a loop to have a moving picture. One of the classic hacks is to completely forgo the typical button widgets and draw on the forms with the paint tools. Draw on many cards, and make each card like a frame by slightly moving something. Then by running through the cards, you see an animation.

Sound effects and images

Adding sound effects and images to your stack was point and click. In your scripts you would say “play soundeffect”, or if you were creative, “play soundeffect a4 b4 c4 b4 a4″ to make
a melody.

Message passing

One of the good things about HyperCard was its inuitive message passing hierarchy. Events would be first passed to the most specific target (lowest first), and then bubble up until caught. Once caught, the message could be optionally be “passed” further up the chain.

It just makes sense, and you don’t need to register events or have listeners or anything. Keyevents (on keydown, on arrowkey), Mouseevents (on mouseenter, on mousedown, on mouseleave…), initialization (on opencard, on openstack). Global variables could be declared anywhere (global myvar).

Error messages

You could not make your programs hang. An error message would show up pointing out the line of code at fault.

Relatives of HyperCard today

Revolution

  • Very powerful,the closest good alternative today.
  • Loses charm of HyperCard for some complexity
  • Very closed source. :(
  • Not the answer.

PythonCard

  • Good idea but not there yet.
  • Interface is extremely clumsy
  • Needs work. Not that easy to get started.

Design: Real coding

HyperTalk (HyperCard’s scripting language) is a language in its own right. It uses the same concepts (if, else, repeat while) as other programming languages while being a bit more verbose. I do not believe in a complete abstraction from code. This would be too limiting. It should be possible to move to other worthwhile languages without feeling completely lost.

Design: “Simple things should be simple, and complicated things should be possible.”

Starting a new project is done by opening the program and clicking New. Making a gui is as as dragging the widgets onto the screen. IDEs are nice.

The scripting language allows complicated things to be done. It is nice to have simple communication with mulimedia like “move this graphic to (x,y)”

Design: Explore

It is cool to be constantly running your program, without needing to compile/run/debug. HyperCard had a “message box” – a little pallette with a text box for executing code. You could try out some code. Your scripts could also use the the message box for easy debugging. It’s nice to have a “trace” for displaying output, when it’s not a console program.

Design: Encourage exploration

The design should be intuitive and simple. Do not overwhelm the user.


A jacket that blends into Harvard square


Happy belated birthday, Mako and Chris!

Scott found captioning tools, something that always makes me happy. Tomeu wrote up notes from Sugarcamp (part 1 and part 2); it’s neat to see an event you’ve been at from someone else’s perspective. Rosemary still won’t let me pay for dinner. I won’t write about work or projects tonight, aside from mentioning that people continue to make me happy and thankful – and grateful – for the honor of working with them. I think this sense of constant gratitude is a big part of what drives me towards community creation wherever I happen to be.

Sitting in front of the heating vent at my aunt’s house to keep my fingers warm while typing; I have my laptop propped up on my knees so that the hot air flows over my hands as they’re on the keyboard. I love my scarf and jacket. I am not sure why I did not do this “scarf” thing before. Scarves. They keep your neck from freezing. And your nose, and head, and…

Thanks to Frances for the most efficient wardrobe-winterizing shopping trip I’ve ever been on – I was whining about clothes shopping until 15 minutes after we’d started when I realized that we were on the 8th jacket and the 2nd store and that things were progressing fast enough to be Not That Annoying, Actually. Mostly I’m totally won over by this Being Warm thing; I’m a wardrobe functionalist and try to get what Ryan Mitchell and I have termed “eigenclothing” – the fewest clothing elements that one can own and still have appropriate types and numbers of outfits for the situations one is commonly in. My eigenclothing set needs to be idiot-proofed (this process is underway) because this is my clothes-picking procedure:

  1. Grab first pair of socks and underwear I come across in socks-and-underwear drawer
  2. Grab top pants from clean pants stack
  3. Grab top tshirt from tshirt drawer
  4. Continue to pop clean-clothing stack onto self until I am no longer cold

The danger in this is that given the presence of certain “incompatible” (I’m told some things are incompatible; I’m apparently very bad at noticing this kind of thing myself) clothing items in said stacks, I may end up walking downstairs in plaid green and brown jogging pants, a ragged neon yellow tshirt, and a nice collared pullover to cries of horror from the breakfast table. (Not that… anything like this has ever happened, necessarily. Um… yes. Moving on.)

Next: find hat. Head is cold. Scarf is not particularly designed to cover head (although it sort of works out, in a pinch).

My inbox is not getting any shorter tonight; I barely kept it at steady-state today. That’s fine; today was an especially crazy email day, and I’m proud that I’ve managed to maintain that steady state. I’ll tackle it again later. I think it’s time for another herioc effort in that direction. (Yeah, it’s a sort of silly goal, but knowing that i have unanswered email is just sucking thought and time and energy away from me, and I am going to freakin’ end this. No more vampires. It’s not worth my time.)


Inbox cleaning: 139/763


That is all.


Here’s what I’m trying to do. (The current draft.)


This is a personal statement – the goal of the Mel. I speak here only for myself; I do not speak for any of the projects or people I’m working with. I found this to be useful when – as with most useful output I create – I was trying to explain something to someone else (in this case, what I was trying to do with all the stuff I’m doing). Cutting the prelude short, here’s why I’m here and what I want. It’s two sentences long; one’s accurate, the other is my favorite. The accurate sentence is annotated (ostensibly for accuracy).

I want to maximize the amount of impact that independent, interconnected, small, local grassroots volunteer open teams have on enabling people to be self-directed learners and teachers, through example and invisibility. I want to make a world where makers make themselves.

Go, annotations, go!

specific names, projects, groups, and tools: are not present in the above sentence.

technology: isn’t either.

impact:
as measured by… metrics I don’t know about yet, but they’re not standardized tests alone. They’ll probably more sociological-ish, both qualitative and quantitative, and I’ll be conscious that they’re models and not the things themselves.

independent: regardless of their ties to any central org(s), these teams run themselves and make their own decisions, and are accountable to who they choose to be accountable to.

interconnected: …but they talk to one another.

small: I want teams, not working groups and unneeded hierarchies or bureaucracies. I think I’ve heard that optimum team size is somewhere around 7-ish, depending. I want to keep group sizes as low as possible to force ad-hocracy and the development of leaders.

local: when possible, avoid the Hand of God Reaching Down From Above. Sustainability and avoiding cultural imperialism are important. This will be a tough balance to strike, because I want to travel everywhere, as noted before… but maybe I should concentrate on what I can bring back home to share, rather than thinking I Will Fix Everything!!! when I go someplace.

grassroots volunteers: bottom-up, self-directed, driven by passion rather than profit, doing what they want to do. What the world needs is people who have come alive. (Gui knows where I got this quote.)

open: Open in the sense of open-source, but not just limited to technology. Content, curriculum, the legal bits of open licensing, and peer production are also packed into this term.

teams: see “small.”

enabling: ultimately, the students are the ones that are going to make the learning happen; all we can do is shape the environment we think might help them get there.

people: primarily – and ultimately – young people and new learners, but not necessarily all; see “by example”

self-directed learners: “learning learning” and “teach them how to teach themselves”, that sort of thing.

and teachers: it’s bidirectional and generative! Mm, exponential growth! Also note that I haven’t said what people are learning or teaching.

through example: all this stuff we want volunteers to do for learners, we need to do for volunteers – all the way up and all the way down the impact chain.

and invisibility: “When his work is done, his aims fulfilled, they will all say, ‘We did this ourselves.’” –Tao Te Ching

There are many ways to optimize for this.

Also, as usual, this is wide open to feedback and subject to revision as I go along and learn more things myself.