Iteration is Key

You can learn all the theory you want. And create lots of projects that go from bad to mediocre. But improving on a task- any task, requires iteration. Do a project once and learn more. Go back to that project and try to redo parts better, using your newly acquired knowledge and skills. Go back again and improve on that. Repeat. Repeat. Repeat. And do that with all major undertakings, with all skills you strive to get better at. Don’t let a project hang and simply move on. Go back and redo, reiterate. 

“As we move int…

“As we move into a world where more and more civic decisions are data-driven, those in power are becoming more data-literate. They are becoming more agile with the language of data. This approach can quickly disempower those without any data literacy.
Language has a tradition of being used to deny one class access to empowerment. The Roman Catholic Church resisted an english language bible. Techies (like me) purposefully use technical jargon to stay aloof about our wizardly. Lawyers to this day speak an unidentified language that they spend years learning in special schools!”

Rahul Bhargava does a good job as summarizing data and specialized language as disempowering.

Mitch Resnick Part 2: “From ‘Informing’ to ‘Empowering’ “

(Submitted to the Civic Media Blog by mres on October 30, 2007 – 7:37am)

“For me, our new Center for Future Civic Media at MIT provides an opportunity to weave together several strands of my career. I started my career as a journalist, writing about science and technology for Business Week magazine. Then I decided to make a career shift. I went to graduate school in computer science, and I began developing educational technologies — in particular, technologies to engage children in creative learning experiences.

How do I make sense of these two seemingly-disconnected careers? I have often explained that both careers grew out of the same underlying motivation: to help people understand the world around them.

That’s true. But I now realize that it’s only part of the story. Over the years, I have come to realize that I have a strong preference for certain ways of helping people understand the world. I am skeptical about approaches that focus primarily on “transmitting” or “delivering” information. I believe that the best way to help people understand the world is to provide them with opportunities to actively explore, experiment, and express themselves.”

Note to self: I haven’t been able to express it as clearly as Mitch has, but I think that this is precisely why I have been hesitant about fully diving into journalism (though an insatiable personal curiosity and helping people understand the world are two of the most attractive aspects of journalism), and been pulled toward learning how to create, evaluate and teach forms of self-expression, especially writing, critical thinking and the skills needed to build and use creative technologies.

The journalism/media projects that I admire most initiate curiosity, exploration and experimentation: Radiolab, WBEZ’s Curious City, Zeega’s interactive poetry walks and maps. To me, their storytelling methods, their ability to make the seemingly mundane seem surprising and curious are sparks for exploration, for experimentation and self-expression. And I think that these sparks are lit by the ability of a story to test our assumptions, to make us feel a sense of connectedness to others, to aspects of our surroundings that we hadn’t quite seen in that particular light before.

Most news journalism doesn’t have that ability. It’s informative; a shallow and quick debriefing. It can spark shock, satiate a moment of curiosity. But it’s limited, not in itself able to satisfy those deeper yearnings for connectedness and self-expression that every person has. At its best, it amplifies unheard voices, tells stories to interpret the fast-moving, confusing world around us. But that’s also where its weakness lies.  Information in itself is like currency; the act of informing someone somehow implies a transaction. Being only a medium, it momentarily amplifies and then moves on to the next story; leaving those voices to fend for themselves, unequipped, still lacking the tools needed to grow stronger and stronger. That requires iteration, relationships, feedback, practice. And those are things that journalists looking for “newsy” stories are unable to provide. Perhaps it will be found in the future of journalism? In a kind of journalism grounded in dialog with the audience? Enabled not by broadcasting news but digital tools that pave communication channels between content creators and the listeners/readers, so that at times, they switch their roles; journalists becoming aware and informed audiences and citizens becoming content creators.  

Mitch Resnick on Papert’s Dream

“Probably the biggest challenges for Scratch—and for realizing for Papert’s dream—are not technological but cultural and educational. There needs to be a shift in how people think about programming, and how they think about computers in general. We need to expand the conception of digital fluency to include designing and creating, not just browsing and interacting.” – from the essay “Reviving Paper’s Dream” written by Mitch Resnick, Lifelong Kindergarten Group at the MIT Media Lab

D3 (JS Data Vis Library)

D3 is a JS (JavaScript) library that allows efficient manipulation of documents based on data. It’s closest analogs are other document transformers such as jQuery, CSS and XSLT.

Like other JS libraries, D3 builds on the concept of selection (i.e. a filtered set of elements queried from the current document). Selection is at the core of D3 and it basically involves two steps: 1) identify a set of elements using simple predicates and 2) apply a series of operators that modify those elements. See, for example, Bostock (2011):

Screen shot 2013-01-09 at 13.27.22

D3’s basic elements

  • operators  act on selections, modifying content.
  • Data joins enable functional operators that depend on data by binding input data to elements. They also produce enter and exit subselections, which create and destroy elements so that these correspond with the data.
  • Animated transitions  interpolate attributes and styles over time
  • event handlers: special operators which respond to user input and enable interaction
  • helper modules: layouts and scales which simplify common visualization tasks


D3 adopts the W3C Selectors API, which is a mini-language that consists of predicates that filter elements, for example, by tag (“tag”), class (“.class”), unique identifiers (“#id”), attribute (“[name=value]”). The intersection of predicates can be selected (“.a.b”) or several can be selected (“.a, .b”).

select‘ and ‘selectAll‘ methods can be used to obtain selections. While ‘select’ selects only the first element that matches the predicate, ‘selectAll’ selects all matching elements.

Selections can be specified via subselection, which restricts queries to descendants of each selected element. For example, d3.selectAll(“p”).select(“b”) returns the first bold (“b”) elements in every paragraph (“p”) element.


Can be applied to ‘attr’, ‘style’, ‘property’, ‘html’ and ‘text’ content. They are either specified as constants or functions.

D3 supports method chaining when applying multiple operators. For example, the following is a single statement:Screen shot 2013-01-09 at 14.36.00

The ‘append‘ and ‘insert‘ operators add a new element for each element in the current selection. The ‘remove’ operator discards selected elements.

An example of D3’s syntax and structure by Bostock (2011):