Categories: learning

RSS - Atom - Subscribe via email

Tickling my brain

| kaizen, learning, parenting

I like tickling my brain. How can I improve the way I invest time into tickling my brain? What's working and what needs tweaking?

Observing and interacting with A- tickles my brain. She's awesome. Besides, this way I can collect stories for W-, too. I can tickle my brain more effectively by quickly jotting down some keywords or taking pictures to help me tell stories at dinner. I can also level everything up by engaging playfully and thoughtfully with A-, so that she has fun and so that her world keeps expanding. She uses my attention as a cue for her attention too, so energy pays off.

Learning more about parenting tickles my brain when I try something new with A-, and when something I've read helps me see, understand, and extend something A- is doing. I enjoyed picking up tips from Playful Parenting and Happiest Toddler on the Block. Ideas I want to try out tend to be few and far between, though, so maybe I'm not being particular enough about the books I read. I've been prioritizing writing time over reading time on my phone, anyway.

In terms of writing, I like exploring a single question with a little background, some things I've tried, and some ideas to check out next. It's hard to keep context in my head with a small screen, lots of interruptions, and no outlining support, so it pays to keep things short and fairly linear. Maybe writing in Orgzly or an outline editor instead of the Markor markdown editor will help me with a bit of structure. I have a list of ideas to write about. It's disorganized and ever-growing, but that's probably okay.

Drawing hasn't fit in my priorities lately. I liked drawing on my Lenovo X220 as a way of exploring thoughts, especially for brainstorming, analyzing, or planning. I enjoyed sketching books to help me remember and share them. I'm not yet familiar enough with the iPad Pro to feel comfortable about getting those sketches into my archive. Besides, A- wants to draw on the iPad if she sees me on it, and if she's asleep, I tend to write or code instead. I also haven't replaced my workflows for reviewing, renaming, and writing about my sketches, so that reduces the value I get from them. Hard to combine ideas from multiple sketches on my cellphone screen.

Our upcoming trip might be a good time to dig deeper into this, since I won't bring my laptop. I can improve by splitting this into doodling time for developing drawing skills and thinking time for sorting out thoughts. I can expand my visual vocabulary by looking at graphic organizers and other people's sketchnotes, particularly if I can find more people who use them for personal reflection rather than recording other people's content. Still, writing tickles my brain a little more efficiently, especially since drawings tend to need extra work to make them usable in my archive and shareable with others. Doodles can be ephemeral, though, so that sounds like a good plan: doodle a lot around A-, especially with pen and paper.

Tech tweaking works well in tiny, low-risk doses, with maybe a max of two hours of somewhat sleepy coding time. I can tinker with Android while in bed with A-, or in the tiny pockets of time I get throughout the day. Emacs is almost always fun to play with. I like learning about Linux things that I can share with W-. Troubleshooting is annoying, and exploring packages and features is a lot more fun. For example, I found it hard to sustain enough focus to dig into Docker + WordPress issues. I felt like I was going around in circles even though I was trying to take notes along the way. On the other hand, it was fun playing with exiftool to get it to do what I wanted, because I could make incremental improvements with clear progress and I could stop whenever I was satisfied. I can also use my time away from the computer to think of ideas, while troubleshooting tends to need computer access.

To have more fun with tech, I can pick up inspiration by browsing blogs, documentation, and source code whenever I want to take a break. I've come across many useful things by just rereading the Emacs and Org manuals. I can also keep a list of manual things that might be easy to automate, and I can pick something from the list when I have time.

I like picking up new recipes, although I rarely get to do that unless I feel comfortable starting something with A- around. I can probably take more risks in this area, especially if I look at it more from the sensory experience and skill development angles. I can focus on recipes people suggest for cooking with kids and fit that into our weekly routines.

Continuous improvement tickles my brain, and so does keeping an eye out for good ideas. A- is into saying "Good idea!" these days, and maybe I should be too!

Consulting used to tickle my brain a lot (problem-solving and prototyping with external validation!), but because I haven't been able to focus as much lately, I don't feel right billing for things that I might not be able to tweak based on feedback or turn over to other developers. Instead, I've been using snippets of coding time to improve personal systems, and that will probably pay off quite a bit too.

I could shift time away from A- towards other forms of tickling my brain by sorting out babysitting. Still, I've only got so many years of the former, so it seems to make sense to make the most of them. I'm not 100% focused on that, though. I like the way writing helps me remember and coding is fun, so I make time for those. Besides, that also gives A- space to go do her own thing periodically. If I can get better at tickling my brain with five minutes here and there, accumulating the results over time, that might be pretty handy.

Hmm. For the next few weeks, it might be fun to focus on tickling my brain by interacting with A-, keeping an eye out for good ideas, and doodling. I can deemphasize coding (hard to do on my phone anyway) and save writing for when we're in bed or when she's off playing independently. Tweak tweak tweak…

Dealing with thought fragmentation, reducing mental waste

Posted: - Modified: | kaizen, parenting

I've been figuring out how to deal with the mental fragmentation that can come with being the primary caregiver of a nursing toddler.

It was useful for me to let go of wanting to focus. If I think of childcare as a distraction from what I really want to do, I miss out on what I can get from childcare too. Instead, I've been looking for ways to make the most of this stop-and-go life.

Kaizen emphasizes reducing waste. What does mental waste look like when it comes to thinking with a toddler around?

I waste energy if I let my mind fill up with mental clutter. So:

  • Appointments go on my calendar so that I don't have to worry about forgetting them, and a weekly review helps me remember to check the week ahead.
  • Near-term tasks go into my todo list. Tasks Free lets me quickly reprioritize tasks so that I know what to do the moment A- lets me unlatch and slip away.
  • Blog post ideas go into Markor so that I can write them in Markdown and export them to HTML for my blog.
  • Long-term ideas and notes go into Org Mode. It's been super helpful to have step-by-step instructions and checklists for things I do infrequently.

Waste happens if I prioritize ineffectively. So:

  • Once A- is asleep, I quickly take care of personal and household tasks, and then work on my laptop. I can do phone tasks while I'm nursing her in bed, but laptop time is very rare. If I focus on improving my systems and making more things doable from my phone, the benefits compound.
  • Small tasks with small benefits tend to beat large tasks with large benefits, because of interruptions. I try to find ways to break large tasks down into small ones with incremental benefits. Many things can wait until next year.

Waste also happens if I repeat myself. So:

  • When I manage to have computer time, I slow down and write notes in an Org Mode file instead of trying to speed ahead and do everything before A- wakes up. This helps me resume my train of thought after the inevitable interruption. It also helps me put together blog posts, which means I can find things in my archive, help people, and maybe even learn from people's comments.
  • If I'm thinking about a question or idea, I jot down keywords. That makes it easier to remember those thoughts and build on them. I scribble these on paper if I'm around A-, so that she can see me writing and so that she doesn't get distracted by my phone. If a thought looks promising, I stick it in my pocket in case I want to refer to it during phone time.

Waste happens if I do low-value activities instead of high-value ones. It's easy to get sucked into reading lots of social media or books on my phone, so I work on getting more value out of phone time. I can:

  • write
  • ssh to my web server or backup server, and code or run scripts – hard with a virtual keyboard and no swiping to type, but doable
  • organize pictures and other files
  • prepare an Emacs News summary
  • read e-books from the library, mainly looking for interesting parenting ideas to try or things to learn about early childhood education

Waste happens when I don't notice, so it's good to get enough sleep and to pay attention.

Waste happens when I forget, so it's good to write, reflect, and organize my notes.

Waste happens when we stay too comfortable and when we push too hard. It's good to work on finding the sweet spot – the zone of proximal development for A-.

I can reduce waste further by getting more value from my time. For example, being interested in making books for A- lets me get more out of reading books with A-. Writing about stuff lets me remember, and I might even be able to help or learn from other people.

This phase is temporary. Next year, A- will probably be more interested in playing with her peers, and she might be independent enough to participate in activities without me. The year after that, she'll be old enough for school. I want to make the most of this time instead of rushing ahead. I guess that's part of why I haven't prioritized night weaning or finding a babysitter. There's still plenty of potential to explore even with the setup, and it's fun working with the constraints.

What could better look like?

  • Sleeping more predictably or more in sync: She seems to adjust her sleep cycle earlier if I go to sleep when she does instead of staying up to do my discretionary things, so maybe I can sacrifice a week or two of discretionary time to see if we can shift to using daytime better
  • Written note workflow: maybe snapping a quick picture and then referring to it when I type; maybe doing small sketchnotes that can be cleaned up by an app and included as images
  • Trying out other ssh apps to see which one I like the most, in case that makes it easier to code
  • Trying more things (new food, etc.), which could take a bit of planning

Lots of things to play with!

Quick thoughts on leadership, impact, and finding my own path

| business, leadership, learning, purpose, reflection

I was talking to a friend about leadership, succession, and impact. In particular, my friend was curious about how to grow more leaders. I realized some things about how my parents made big differences and about how I want to grow.

Succession is hard. Big companies spend millions on leadership programs, have huge, motivated talent pools to draw on, and even turn to external recruitment, and it's still uncommon to have a successful transition or a long-lived company. It's even tougher in the nonprofit and volunteer worlds.

I wonder if going sideways can help work around the succession challenge. Instead of hoping for the right intersection of same time, same place, same Bat channel (an interested, capable, available potential leader turning up when you want to start grooming one and sticking around until the right time), what about the franchising approach instead?

I realized that this is one of the things my parents did, and that's how they managed to do so much. They didn't count on any one initiative staying around for the long term. My dad probably would have gotten impatient and bored anyway. Instead, they got the hang of quickly starting things up, and they inspired people to start similar efforts. After the first few projects, happy sponsors and relationships made the next ones easier and easier. My dad could just share a crazy idea on Facebook and people would sign up to help make it happen. Professionally, my parents cared about teaching both the art and the business of photography, and having workshops open even to active competitors.

This approach is probably out of scope from most leadership programs that focus on succession planning because they assume you need a specific thing to continue, but franchising is the closest business analogy, I think. It might be a good way to increase impact through a wider reach. It could be like:

  • Getting more out of the stuff you're already doing: My dad was media-savvy. He could imagine the pictures and news articles that would come out of a project, and he was great at lining those up. Something similar (or partnering with someone who thinks about that sort of stuff) could increase the visibility and impact of things you're already doing some making people feel good about the projects too.
  • Getting better at sharing the cool stuff you're doing and the initiatives you're involved in: pictures and stories on social media could let people find out about stuff, explore things you're into, get updates, etc. Similar to the previous point, but more personal.
  • Accelerating your startup for ideas: people to talk to, channels for sharing ideas, ways to get people involved, templates, etc.
  • Getting better at sharing lessons learned, questions, and artifacts
  • Automating, simplifying and documenting processes so that people with less experience can do better work: Can be very useful for both your initiatives and other people's, and it's good for both direct succession and franchising. This is definitely my focus, and it's awesome for expanding reach over space and time (even without active attention). My mom focuses on this too, although she often struggles with adoption. The E-Myth book might be relevant here.

Figuring out swarms might be an interesting challenge: how to quickly gather people around a particular project, and how to help other people with their own. There's a lot that to practice even without a candidate successor, so that might be one way to keep growing.

At the moment, I'm focusing on:

  • automating/simplifying/documenting: Perfect timing! I need to make things simple enough so that a child can do it, and there happens to be one handy for testing. I also personally benefit from automating and simplifying things enough to fit into the snippets of discretionary time I have, and documenting things so that I can declutter my brain and make the most of scattered moments.
  • getting better at sharing lessons learned, questions, and artifacts: Hooray for blogging! I'm getting better at writing on my phone while A- sleeps on top of me (like right now), and I'll figure out how to mix drawing back in, too. I'm probably never going to feel comfortable using the “expert” voice. I like the “Here's what I'm figuring out, and here's what I'm thinking about next” sort of approach. There are so many ways forward, and it's fun to think of everything as a grand experiment.

We were talking about the 2×2 matrix of size of impact versus number of people affected. My friend said many people focus on the “big impact, lots of people” quadrant. I think I like the “small impact, few people” quadrant, which perfectly characterizes things like my Emacs stuff and my consulting. I like small fixes and improvements. I scale up by trying to help things stay fixed/improved and available even when I'm not actively thinking about them, which is why coding and writing fit me well. If I can get even better at making and sharing those little improvements, and making them findable when other people want them, that sounds like a good path for growing. I also like connecting the dots between ideas, which is another example of a small contribution that can have a larger effect.

The long-term impact could be mostly about the ripples from people I've helped (like the way I get to learn more about cool things to do with Emacs by people who tell me I helped them get curious about it a long time ago! :) ) and maybe maybe maybe someday, books worthy of being part of the Great Conversation / archive of human knowledge.

I probably won't do anything as awesome as my dad's advocacies, but I think this path of sharing little ideas, experiments, and lessons learned – this path could work for me. :) If it happens to resonate with you and you want to pass along lessons learned or share the things you're figuring out, that would be great!

What do I want to think through when writing on my phone?

| kaizen, writing

My first priority is to get thoughts out of my head and into a form I can work with. This often becomes an explosion of lists and keywords, which can be handy for thinking and drawing, but not for my blog posts. It helps me clear my mind and be less distracted. It lets me make progress instead of covering the same ground. It also helps me make better decisions. I can see the costs and benefits more clearly when they’re written down. I can brainstorm options and compare them. I can review the decisions afterwards, too.

Prose makes things slower to capture and harder to read on my phone, but also a little easier to search or reflect on after a while, and possibly good for review or conversation when turned into a blog post.

And then there’s stuff I’d flesh out in writing anyway, like my weekly/monthly/yearly reviews. Those start off as sketches on my computer, then lists of keywords, and then paragraphs on my phone.

If my list is cluttered, it’s hard to pick one thought and follow it through. I end up adding little bits here and there, and I’m not sure how useful that is. Things below a couple of screens get ignored. It might be helpful to dedicate some time to processing. I can either flesh out the top idea on the stack, or move it to my inbox if it needs computer time.

I don’t have to worry too much about writing for other people’s benefit. That can come later, when I have more focused time. People can always choose what to read and what to skim or skip. What’s important is that I think things through and then capture them for later review.

So, how can I do this more effectively? Where are my gaps?

  • Motivating questions, not just a scratchpad of ideas: It’s useful to ask questions when I’m going to change something based on the answer. For example, I can describe the gaps and points of friction, then explore why those are so, and then come up with ideas and actions.
  • Reviews are less motivating, but I can get the ball rolling by focusing on tidbits rather than overviews. It’s hard to see context on a small screen.
  • I don’t have to spend a lot of time picking the best thing to write about. Practically everything will move me forward, even if the distances vary. I can write and write and write, and then reflect.
  • If I don’t feel like writing, I can always snuggle or sleep. No need to force it.

The best time to write is when I’m nursing A- and she’s drifting off to sleep, but is awake enough to root if I try to move away. Trade-offs / other things I could be doing during that time:

  • Sleeping: Good up to a certain point. It’s handy to use A-‘s first nap to catch up on sleep if needed, but I don’t want to sleep too much.
  • Browsing social media: Tempting time sink. Occasionally useful or interesting, but best in small doses.
  • Answering email: Nice thing to do, although expectations are low. Some things can only be answered when I’m at my computer.
  • Prioritizing my to-do list and adding items to it: Helps me hit the ground running during computer time.
  • Reading research and tech stuff: Gives me ideas to explore when I’m at my computer. Less efficient than reading when I’m on my laptop, but it’s okay to just index things for later exploration.
  • Reading e-books: sometimes useful, especially if I pick my questions and titles carefully.
  • Reading fiction: occasionally entertaining, although often bleh. Maybe I should try library recommendations.
  • Playing games: my interest comes and goes. Exercises problem-solving. Artificial sense of progress.

I think it makes sense to prioritize sleep, then writing, with maybe a notification-based pomodoro for social media during breaks. If I don’t feel like writing, I can use the time to learn more about tech or parenting. Let’s see if I can find a pomodoro app that’s compatible with a sleeping baby, or if I can make something using Tasker…

How can we prepare for W-‘s return to work?

Posted: - Modified: | kaizen, life, parenting

The next shift in our household will be when W- returns to work in a little over a month. It’ll be just me and A- most of the day. What will change in our daily routines, and what do we want to do now to make that easier? I’ve been reading Reddit posts to get a sense of what to expect, what kinds of friction points might come up, and what helps. There are some things to watch out for, but I think it’ll be manageable.

  • I won’t be able to pass A- to him during the day. That means we should have leftovers or a quick meal ready for lunch, so I don’t have to try to cook something with A- underfoot. If there’s laundry to fold, we should probably take it upstairs the night before. A- will become more independent over time, so I’ll be able to do more and more things.
  • W- will need work lunches,too. We’ll free up some space in our chest freezer and go back to preparing individual portions. It might be good to prepare most of the week’s food as well, so that dinner is easier.
  • I might have to take A- to her medical appointments by myself. We can meet the cardiologist at North York instead of Scarborough. Going to the Sick Kids Hospital is a bit harder by myself (bringing gear, going to the bathroom, comforting A- when she needs to be sedated for an exam), so we might save W-‘s days off for that, or I can tough it out. We survived long-haul flights, and we can deal with this too.
  • W- can’t easily rescue us if we get sick or need a lift when we’re out and about, but that’s why I have a transportation budget. If necessary, I can call a cab. It probably needs to be a public taxi so that I can carry A- without a car seat – I’m not sure Uber qualifies for that exception.
  • We’ll keep nights flexible so that W- can work if he wants to or hang out with A- if he wants to. He can play with her while I do the evening routines. I’ll let W- decompress from work and settle in before passing her over.
  • I’ll try to get groceries and do other errands in the afternoon so that we can free up evening time. It’ll also be good to take A- to centres for socialization.
  • Weekends will be mostly the same as now, I think: laundry, cooking, cleanup, errands, play, and a bit of hobby time.
  • Many people find it difficult and isolating to go without adult conversation or external validation for long stretches. Based on my experience with hermit mode and with my 5-year experiment, I’ll probably be okay. Writing is a good opportunity to string words together and think about stuff, and I can do that during A-‘s nursing sessions and naps. My blog, my journal, consulting, and the Emacs community help with validation and a sense of accomplishment.
  • I have my own savings and I contribute to the household, so I don’t feel financially dependent. I can even invest for the long term.
  • It’s also good to make sure W- and I stay in sync even if we’re moving in different worlds. Cooking is an obvious touchpoint. Keeping up with tech helps me relate to his stories and interests, and observing A- will probably give me plenty of stories to share. I can use some of my late-night discretionary time to play video games with him, and I can read about woodworking and other DIY pursuits. Duplo would be good to explore, too – we can have fun with the build of the day. If I pay close attention, the minutiae of everyday life is actually quite fascinating, and I can share what I learn.

The next shift after this will probably be when A- starts walking around. I might need to keep a closer eye on her to make sure she doesn’t get into too much trouble, and we might also modify our routines so that she gets lots of practice. As she learns how to ask questions, we’ll add more field trips, too.

Okay. Let’s do this!

Oops, forgot my library card

| kaizen

One of the nice things about minor oopses is that they let you see all sorts of little experiments to try. =)

It took me a little over 4,400 steps to reach the Jane/Dundas library, where I found two of the new videos I'd been looking forward to borrowing (too new to request through the system, so you have to catch them at your library branch). As I went to check them out, I realized I had left my belt bag at home. I'd been using my belt bag as a purse organizer, actually, tucking the bag into whichever tote I was going to use for a walk. This time, however, I'd remembered to add two folded-up tote bags, a water bottle, my e-reader, and my keys to my main bag, but I forgot the belt bag on the kitchen table. I'd forgotten to do my usual pre-flight verbal checklist, so I hadn't caught the error as I headed out the door. So there I was at the library: no library card, no other forms of identification, nothing. No point in going to the grocery store without cash or a credit card, either. Oh well!

Still, it turns out that a walk passes by pretty quickly when there's something I can read. The e-reader works out well for this because I can page through it with gloves on. Better than my smartphone, which is finicky even with touchscreen gloves. Better than a paper book, even, since the pages can be hard to turn with gloves on. Four winters after I bought my Kindle, I've finally found its niche, so there's that.

I rarely forget my cards like this. It's been more than a year since the last time, I think. Maybe even two or three. No big deal. =) There's always another walk, another opportunity to get some exercise. In the meantime, there are lots of small changes I can play with if I think this situation might come up more often. I could:

  • Keep an extra copy of the barcode on my library card: I could photocopy a set of cards and keep that copy in my winter hat (along with a little bit of cash), since I usually wear that when I go for a day-time walk.
  • Keep the belt bag in my favourite canvas bag.
  • Switch to my vest of many pockets, since leaving that behind is slightly more obvious than leaving behind a small belt bag. The extra layer might be more comfortable in winter, too.
  • Strengthen the practice of doing a verbal pre-flight checklist as I head out the door.

There and back was an hour and a half of walking at the leisurely pace of about 3.5km/h. Although there were some points when I might have liked to have thicker gloves, it was pleasant enough without strong winds and with only a slight scattering of snow. I might go for another long walk tomorrow, perhaps to a different library. The walk fits my life nicely, and it feels good to move a bit.

It's nice to have the buffer of time so that I don't have to worry about little mistakes, and it's nice to live in such a walkable neighbourhood that oopses like these still give me the benefit of exercise. =)

Exploring neighbourhood libraries and other notes from the Toronto Public Library Hackathon

Posted: - Modified: | development, geek, kaizen

UPDATE 2015-11-30: Here's the Toronto Public Library's recap, along with other videos.

UPDATE 2015-11-27: Here's the video of my hackathon pitch:

UPDATE 2015-11-18: I figured out how to make this entirely client-side, so you don't have to run a separate server. First, install either Tampermonkey (Chrome) or Greasemonkey (Firefox). Then install the user script insert-visualize-link.user.js , and the Visualize link should appear next to the library branch options on Toronto Public Library search result pages. See the Github repository for more details.

Yay! My neighbourhood library visualization won at the Toronto Public Library hackathon. It added a Visualize link to the search results page which mapped the number of search results by branch. For example, here's a visualization of a search that shows items matching "Avengers comics".

avengers

It's a handy way to see which branches you might want to go to so that you can browse through what's there in person.

Librarians could also use it to help them plan their selections, since it's easy to see the distribution across branches. For example, here's the visualization for books in Tagalog.

tagalog

The collections roughly match up with Wellbeing Toronto's data on Tagalog as the home language, although there are some areas that could probably use collections of their own.

tagalog census

Incidentally, I was delighted to learn that Von Totanes had done a detailed analysis of the library's Filipino collections in the chapter he wrote in Filipinos in Canada: Disturbing Invisibility (Coloma, McElhinny, and Tungohan, 1992). Von sent me the chapter after I mentioned the hackathon on Facebook; yay people bumping into other people online!

Personally, I'm looking forward to using this visualization to see things like which branches have new videos. Videos released in the past year can only be borrowed in person – you can't request them online – so it's good to check branches regularly to see if they're there. It would be even better if the library search engine had a filter for "On the shelf right now", but in the meantime, this visualization tool gives me a good idea of our chances of picking up something new to watch while we're folding laundry. =)

Notes

https://github.com/sachac/explore-neighbourhood-libraries

More notes will probably follow, but here are a few quick drawings:

2015-11-15b Tech - Exploring neighbourhood libraries -- index card #tpl #hackathon

2015-11-15c Kaizen and the Toronto Public Library hackathon -- index card #tpl #hackathon #kaizen #improvement

2015-11-15e Ideas for following up on TPL hackathon -- index card #prototyping #tpl #hackathon

 

The code works by extracting the branch names and totals on the left side of search pages and combining those with the locations of the branches (KML). I don't really need the server component, so I'm thinking of rewriting the script so that it runs entirely client-side – maybe as a Chrome extension or as a user script. That way, other people can play with the idea without running their own server (and without my having to keep a server around), and we can try it out without waiting for the library to integrate it into their website. That said, it would be totally awesome to get it into the interface of the Toronto Public Library! We'll just have to see if it can happen. =) Happy to chat with library geeks to get this sorted out.

It was fun working on this. W- decided to join me at the last minute, so it turned into a fun weekend of hanging out with my husband at the library. I wanted to keep my weekend flexible and low-key, so I decided not to go through the team matchmaking thing. W- found some comfy chairs in the corner of the area, I plugged in the long extension cord I brought, and we settled in.

I learned a lot from the hackathon mentors. In particular, I picked up some excellent search and RSS tips from Alan Harnum. You can't search with a blank query, but he showed me how you can start with a text string, narrow the results using the facets on the left side, and then remove the text string from the query in order to end up with a search that uses only the facets. He also showed me that the RSS feed had extra information that wasn't in the HTML source and that it could be paginated with URL parameters. Most of the RSS feeds I'd explored in the past were nonpaginated subsets of the information presented on the websites, so it was great to learn about the possibilities I had overlooked.

The faceted search was exactly what I needed to list recent videos even if I didn't know what they were called, so I started thinking of fun tools that would make hunting for popular new videos easier. (There have been quite a few times when I've gone to a library at opening time so that I could snag a video that was marked as available the night before!) In addition to checking the specific item's branch details to see where it was on the shelf and which copies were out on loan, I was also curious about whether we were checking the right library, or if other libraries were getting more new videos than our neighbourhood library was.

W- was curious about the Z39.50 protocol that lets you query a library catalogue. I showed him the little bits I'd figured out last week using yaz-client from the yaz package, and he started digging into the protocol reference. He figured out how to get it to output XML (format xml) and how to search by different attributes. I'm looking forward to reading his notes on that.

Me, I figured that there might be something interesting in the visualization of new videos and other items. I hadn't played around a lot with geographic visualization, so it was a good excuse to pick up some skills. First, I needed to get the data into the right shape.

Step 1: Extract the data and test that I was reading it correctly

I usually find it easier to start with the data rather than visualizations. I like writing small data transformation functions and tests, since they don't involve complex external libraries. (If you miss something important when coding a visualization, often nothing happens!)

I wrote a function to extract information from the branch CSV on the hackathon data page, using fast-csv to read it as an array of objects. I tested that with jasmine-node. Tiny, quick accomplishment.

Then I worked on extracting the branch result count from the search results page. This was just a matter of finding the right section, extracting the text, and converting the numbers. I saved a sample results page to my project and used cheerio to parse it. I decided not to hook it up to live search results until I figured out the visualization aspect. No sense in hitting the library website repeatedly or dealing with network delays.

Step 2: Make a simple map that shows library branches

I started with the Google Maps earthquake tutorial. The data I'd extracted had addresses but not coordinates. I tried using the Google geocoder, but with my rapid tests, I ran into rate limits pretty early. Then it occurred to me that with their interest in open data, the library was the sort of place that would probably have a file with branch coordinates in terms of latitude and longitude. The hackathon data page didn't list any obvious matches, but a search for Toronto Public Library KML (an extension I remembered from W-'s explorations with GPS and OpenStreetMap) turned up the file I wanted. I wrote a test to make sure this worked as I expected.

Step 3: Combine the data

At first I tried to combine the data on the client side, making one request for the branch information and another request for the results information. It got a bit confusing, though – I need to get the hang of using require in a from-scratch webpage. I decided the easiest way to try my idea out was to just make the server combine the data and return the GeoJSON that the tutorial showed how to visualize. That way, my client-side HTML and JS could stay simple.

Step 4: Fiddle with the visualization options

Decisions, decisions… Red was too negative. Blue and green were hard to see. W- suggested orange, and that worked out well with Google Maps' colours. Logarithmic scale or linear scale? Based on a maximum? After experimenting with a bunch of options, I decided to go with a linear scale (calculated on the server), since it made sense for the marker for a branch with a thousand items to be significantly bigger than a branch with five hundred items. I played with this a bit until I came up with maximum and minimum sizes that made sense to me.

Step 5: Hook it up to live search data

I needed to pass the URL of the search results, and I knew I wanted to be able to call the visualization from the search results page itself. I used TamperMonkey to inject some Javascript into the Toronto Public Library webpage. The library website didn't use JQuery, so I looked up the plain-vanilla Javascript way of selecting and modifying elements.

document.querySelector('#refinements-library_branch')
  .parentNode.querySelector('h3').innerHTML =
  'Library Branch <a target="_blank" style="color: white; ' +
  'text-decoration: underline" ' +
  'href="http://localhost:9000/viz.html?url=' +
  encodeURIComponent(location.href) + '">(Visualize)</a>';

Step 6: Tweak the interface

I wanted to display information on hover and filter search results on click. Most of the tutorials I saw focused on how to add event listeners to individual markers, but I eventually found an example that showed how to add a listener to map.data and get the information from the event object. I also found out that you could add a title attribute and get a simple tooltip to display, which was great for confirming that I had the data all lined up properly.

Step 7: Cache the results

Testing with live data was a bit inconvenient because of occasional timeouts from the library website, so I decided to cache search results to the filesystem. I didn't bother writing code for checking last modification time, since I knew it was just for demos and testing.

Step 8: Prettify the hover

The tooltip provided by title was a little bare, so I decided to spend some time figuring out how to make better information displays before taking screenshots for the presentation. I found an example that showed how to create and move an InfoWindow based on the event's location instead of relying on marker information, so I used that to show the information with better formatting.

Step 9: Make the presentation

Here's how I usually plan short presentations:

  1. Figure out the key message and the flow.
  2. Pick a target words-per-minute rate and come up with a word budget.
  3. Draft the script, checking it against my word budget.
  4. Read the script out loud a few times, checking for time, tone, and hard-to-say phrases.
  5. Annotate the script with notes on visual aids.
  6. Make visuals, take screenshots, etc.
  7. Record and edit short videos, splitting them up in Camtasia Studio by using markers so that I can control the pace of the video.
  8. Copy the script (or keywords) into the presenter's notes.
  9. Test the script for time and flow, and revise as needed.

I considered two options for the flow. I could start with the personal use case (looking for new videos) and then expand from there, tying it into the library's wider goals. That would be close to how I developed it. Or I could start with one of the hackathon challenges, establish that connection with the library's goals, and then toss in my personal use case as a possibly amusing conclusion. After chatting about it with W- on the subway ride home from the library, I decided to start with the second approach. I figured that would make it easier for people to connect the dots in terms of relevance.

I used ~140wpm as my target, minus a bit of a buffer for demos and other things that could come up, so roughly 350 words for 3 minutes. I ran through the presentation a few times at home, clocking in at about 2:30. I tend to speak more quickly when I'm nervous, so I rehearsed with a slightly slower pace. That way, I could get a sense of what the pace should sound like. During the actual presentation, though, I was a teensy bit over time – there was a bit of unexpected applause. Also, even though I remembered to slow down, I didn't breathe as well as I probalby should've; I still tend to breathe a little shallowly when I'm on stage. Maybe I should pick a lower WPM for presentations and add explicit breathing reminders. =)

I normally try to start with less material and then add details to fit the time. That way, I can easily adjust if I need to compress my talk, since I've added details in terms of priority. I initially had a hard time concisely expressing the problem statement and tying together the three examples I wanted to use, though. It took me a few tries to get things to fit into my word budget and flow in a way that made me happy.

Anyway, once I sorted out the script, I came up with some ideas for the visuals. I didn't want a lot of words on the screen, since it's hard to read and listen at the same time. Doodles work well for me. I sketched a few images and created a simple sequence. I took screenshots for the key parts I wanted to demonstrate, just in case I didn't get around to doing a live demo or recording video. That way, I didn't have to worry about scrambling to finish my presentation. I could start with something simple but presentable, and then I could add more frills if I had time.

Once the static slides were in place, I recorded and edited videos demonstrating the capabilities. Video is a nice way to give people a more real sense of how something works without risking as many technical issues as a live demo would.

I had started with just my regular resolution (1366×768 on my laptop) and a regular browser window, but the resulting video was not as sharp as it could have been. Since the presentation template had 4:3 aspect ratio, I redid the video with 1024×768 resolution and a full-screen browser in order to minimize the need for resizing.

I sped up boring parts of the video and added markers where I wanted to split it into slides. Camtasia Studio rendered the video into separate files based on my markers. I added the videos to individual slides, setting them to play automatically. I like the approach of splitting up videos onto separate slides because it allows me to narrate at my own pace instead of speeding up or slowing down to match the animation.

I copied the segments of my script to the presenter notes for each slide, and I used Presenter View to run through it a few more times so that I could check whether the pace worked and whether the visuals made sense. Seemed all right, yay!

Just in time, too. I had a quick lunch and headed off to the library for the conclusion of the hackathon.

There wsa a bit of time before the presentations started. I talked to Alan again to show him what I'd made, hear about what he had been working on, and pick his brain to figure out which terms might resonate with the internal jargon of the library – little things, like what they call the people who decide what kinds of books should be in which libraries, or what they call the things that libraries lend. (Items? Resources? Items.) Based on his feedback, I edited my script to change "library administrators" to "selection committees". I don't know if it made a difference, but it was a good excuse to learn more about the language people used.

I tested that the presentation displayed fine on the big screen, too. It turned out that the display was capable of widescreen input at a higher resolution than what I'd set, but 1024×768 was pretty safe and didn't look too fuzzy, so I left it as it was. I used my presentation remote to flip through the slides while confirming that things looked okay from the back of the room (colours, size, important information not getting cut off by people's heads, etc.). The hover text was a bit small, but it gave the general idea.

And then it was presentation time. I was third, which was great because once I finished, I could focus on other people's presentations and learn from their ideas. Based on W-'s cellphone video, it looks like I remembered to use the microphone so that the library could record, and I remembered to look up from my presenter notes and gesture from time to time (hard when you're hidden behind the podium, but we do what we can!). I stayed pretty close to my script, but I hope I kept the script conversational enough that it sounded more like me instead of a book. I didn't have the mental bandwidth to keep an eye on the timer in the center of the presenter view, but fortunately the time worked out reasonably well. I concluded just as the organizer was getting up to nudge me along, and I'd managed to get to all the points I wanted to along the way. Whew!

Anyway, that's a quick braindump of the project and what it was like to hack it together. I'll probably write some more about following up on ideas and about other people's presentations, but I wanted to get this post out there while the experience was fresh in my head. It was fun. I hope the Toronto Public Library will take the hackathon ideas forward, and I hope they'll get enough out of the hackathon that they'll organize another one! =)

View or add comments (Disqus), or e-mail me at sacha@sachachua.com