October 2010

The Exploratorium, or playgrounds for the mind

October 1, 2010 - Categories: family, life

In this post about visiting San Francisco, Devin Reams wrote:

We also enjoyed walking around the Marina area and
visiting the Exploratorium. I’ve been to some pretty good science
museums (Denver, Smithsonian) but this place is amazing. The energy
and exhibits possibly could’ve kept us there all day.

Ah, the Exploratorium.

When I was in grade school, one of my most-loved books was the Explorabook: A Kid’s Science Museum in a Book. I read it until it was tattered and falling apart. No, I did more than read it – I did stuff with it. I used the included Fresnel lens to burn holes in leaves. I looked at streetlights through the diffraction grate. I pulled paperclips along paper using the magnet. (Hence the falling-apart thing: I disassembled the book to get to my favourite tools.) My only regret about the book: I wish I had worked up the courage to make agar jelly.

I remember reading and re-reading the blurb about the Exploratorium, the San Francisco science museum that helped develop the book. When my parents were planning our backpacking trip across the United States, there were two things I dreamed about: being tall enough to ride the rollercoasters at Disney World, and going to the Exploratorium.

The Exploratorium was every bit as scientifically magical as I imagined. I could’ve spent days there. We also visited the Smithsonian, which I also loved. (They had a replica of Babbage’s calculating machine!) The Smithsonian probably takes weeks, even years to properly explore. But to a kid without all the deep background one needs to appreciate all the history, what was that compared to the giant soap bubbles and interactive exhibits of a science museum?

Whenever I have time in a new city, I make a trip to its science museum. I went to the one in Odaiba in Tokyo, where I saw a kinetic sculpture that simulated SMTP mail delivery. I went to the one in Boston and the one in Montreal. When I was in San Francisco for another trip, I dropped by the Exploratorium again. The exhibits were a little smaller than I remembered (I’d grown a bit since I was nine years old, but not by much), but it was still magical. I checked out one of the new science museum in Manila when I visited, and I’m looking forward to yet another one that I’ve heard is being built. We’ve been to the Ontario Science Centre a number of times, of course. We’ve even made a trip to a place specifically to see a science museum (Sudbury, Science North).

What keeps me coming back? Many of the exhibits are similar across different science museums, but sometimes I come across an interesting surprise, a clever way of turning a concept into an experience. And even with the familiar exhibits or in the less-endowed museums, there’s always the wonder of someone encountering these ideas for the first time – the kids on school trips, the parents and teachers and other visitors puzzling things through…

For me, science museums are like direct connections to the wonder of discovery. Love love love. I think science exhibit designers must have one of the coolest jobs around. Science museums and libraries are my favourite ways to imagine my tax dollars hard at work.

Share a science museum with someone!


October 2, 2010 - Categories: Uncategorized


Quick catch-up

October 3, 2010 - Categories: Uncategorized

Too many things going on. Haven’t been able to sit down and properly write for almost a week, and probably won’t get a chance to do so until people have left. Fortunately, my parents (already awesome storytellers) have gotten addicted to writing, so I can probably piece together the important bits from their Facebook news feed. (It’s really cool. You can almost see my dad go, “Hmm, I should share that.”)

Everything turned out even awesomer than we’d planned. =D

Lotus Notes mail practices

October 7, 2010 - Categories: lotus

Here is a partial list of interesting practices I’ve seen, which I can compile into an internal or external wiki if I don’t come across an existing repository yet:

  • Voting buttons in newsletters to allow people to rate the usefulness
  • Subscription button in newsletters to allow people who received forwarded messages to be added to the distribution list
  • Calendar buttons
  • Forms/surveys
  • RSVP+calendar entry buttons in event invitations – creating non-blocking entries if necessary
  • Calendar button for scheduling replays if you can’t make it to the original event
  • Using sections to hide material (note: manually configure section properties so that sections are collapsed by default, but automatically expanded for printing)
  • Voting/volunteering buttons
  • Response summarization agents
  • Mail merge
  • Stationery
  • Standard response documents
  • Introductory sentence explaining why people are getting mail
  • Reply button with template

Cleaning up HTML from Microsoft Word

October 8, 2010 - Categories: tips

I often see HTML pasted in from Microsoft Word. It has a lot of non-standard and irrelevant code in it, so sometimes it breaks our systems. It’s also hard to edit afterwards.

An easy way to clean that up is to paste it into Windows Live Writer using Edit > Paste Special > Thinned HTML, which removes most of the Microsoft Word extras while leaving the basic formatting in place. You can then copy-and-paste it into the blog/wiki editor. You can also use View > Source to get the HTML source code, which you can paste into the HTML mode of the blog/wiki editor.

Hope that helps!

Week ending October 10, 2010

October 12, 2010 - Categories: weekly

From the other week’s plans:

  • Work
    • [X] Organize Idea Labs: Run report for external Idea Lab
    • Take a break!
    • Sent spreadsheet with Idea Lab discussions
  • Relationships
    • [X] Plan wedding: Get married!
    • [X] Plan wedding: Host barbecue reception for lunch/afternoon
    • [X] Plan wedding: Take family to Niagara falls
    • Also went to New Jersey for family reunion / party
    • Took lots of pictures; still need to sort through them
    • Rescheduled barbecue
  • Life
    • [X] Stay sane =)
    • Bought serger and other useful things

Plans for next week:

  • Work
    • [  ] Organize Idea Labs: Support planning for upcoming Idea Lab
    • [  ] Build Connections Toolkit: Build requested improvements
    • [  ] Build career: Connect with manager regarding new projects
  • Relationships
    • [  ] Wedding: Review and select pictures
    • [  ] Wedding: Collect mailing addresses and e-mail addresses for everyone
    • [  ] Wedding: Send thank-you notes with prints
  • Life
    • [  ] Improve productivity: Reorganize house, put things away
    • [  ] Sew dress: Mark chalk lines on dress
    • [  ] Writing: Flesh out wedding stories

Elsewhere on the Net:

Monthly review: September 2010

October 13, 2010 - Categories: monthly

Last month, I wrote:

September: more Idea Labs, preparations, keeping things sane

We’re halfway through October already. As predicted, September was packed with preparations. The tools I had built made it easy to delegate my work, and the simplicity of our wedding plans meant fewer last-minute panics. We survived.

October, of course, was for the wedding and the family get-togethers. All three of us sisters married or will marry in October, making anniversaries easy to remember and group dictations easy to plan. We had also all partnered up with electrical engineers, in the kind of coincidence that’s usually reserved for identical twins. (And then there’s the unusual number of people named John in our family…)

The rest of October will be for recuperation, getting back into the patterns of everyday life after so many months of preparation. I look forward to returning to that rhythm of writing that helps me make sense of the days.

Book: How to Win Every Argument: The Use and Abuse of Logic
Book: Thank You for Arguing
Book: Getting to Yes
Systematically eliminating choices
How to be dispensable, and why you should document and automate yourself out of a job
New note-taking workflow with Emacs Org-mode
Old notes on staffing a virtual conference booth
Tips from remote workers
What can I do to help make the world more equitable?
Getting past generation-based conversations
Welcome, listeners of the Taking Notes podcast!
Tips for entrepreneurs
‘round the bend
Towards equity
Getting the WordPress Lifestream plugin to work on my blog
Emacs Org mode and publishing a weekly review
Stuff is just stuff, and experiences are just experiences
Labour Day painting
Redoing things
Fit for You: Thinking about my priorities
Thinking of autumn
The value of constraints
Book: Leading Outside the Lines
It’s okay if you can’t remember or spell my name; being human


Placeholder: The Examined Life: Technology and Experimentation

October 14, 2010 - Categories: presentation, speaking

This is a placeholder for the Technology and Humans talk I’m giving today on “The Examined Life.” I want to explore how people are using technology to practice relentless improvement, and I’ll tell a couple of stories of how I’m improving my skills, sharing what I’m figuring out, and learning from others through my blog and other tools.


From overall description of conference:

    Technology pervades our developed world and mediates our perception of it. We are alive in a period of profound technological transformation, from a world of limited discrete technology appliances to one where technology is both pervasive and embedded in us and our environment. This transformation can be exciting, fun, and inspiring. Or it can be stressful, frustrating, and isolating. For all of us, it is forcing and evolution in our thinking, skills, learning methods, and perception. This conference explores perspectives on this transformation and how our adaptation will change the opportunities for IBM and the world. Get broad perspectives on the human impact of technology, now and in the future.

Toaster’s toasted

October 15, 2010 - Categories: geek, life

Our wedding vacation was a whirlwind of cooking, thanks to the talents of my middle sister Kathy and our family friend Tita Gay. When the dust cleared, casualties included one burned-out stove element, and one broken toaster oven. We can work around the burned-out stove element easily – just use the other elements – but no toaster oven means that toast, biscuits, and tarts take more energy than before.

W- took advantage of his electrical engineering training to troubleshoot the toaster. He identified the solenoid as the problem part. Now we’re figuring out if we should repair the toaster, replace it, or eliminate it.

The decision is complicated by the fact that the toaster was an under-cabinet Black and Decker toaster oven, which was great because it saved counter space. Almost all toasters these days are countertop models, and we’d need to make space for them. The two under-cabinet models still sold by Black and Decker have middling reviews on Amazon.com.

We’re going to try replacing the solenoid on our toaster first. If that doesn’t work, we might bring it into a small appliance repair shop (if we can still find one of those!). If that fails, then we’ll look into other options.

Yay geeks!

Back on the writing wagon

October 16, 2010 - Categories: family, writing

From October 6:

It’s been a whirlwind week. My family flew into Toronto to celebrate our wedding. I’ve been jotting quick notes in my ever-growing text file, rough sketches of things I’d like to tell stories about. I just haven’t made enough time to sit quietly and turn quick thoughts into something longer. I chose sleep, which turned out to be a good decision.

I’d normally choose to do fewer things so that I could write and sleep, but my family just overflows with awesomeness and stories. I can think of this as braindump mode – cramming a year’s worth of interaction into a week.

Besides, I can review my parents’ Facebook posts for stories to tell. Yay social media!

A few quick stories:

Languages: I like how undistinguished I feel around them. For example, my sister Kathy jokes around in English, Tagalog, German, Dutch, and Afrikaans. I can’t understand everything she’s saying, but I’m glad she has fun, and it nudges me to learn Cantonese and review my Japanese. I am going to learn Cantonese because I want to be able to listen and talk to W-‘s family, and because it’s fun to pick up a new language. I also want to learn how to write it eventually.

Halibut: My dad says he will only eat fish he can spell. My sister once tried making him halibut, but it was a no-go. But Gene Hattori deep-fried cubes of halibut (that he had caught himself in Alaska!) in a beer batter, and it was scrumptious. So my dad learned how to spell–and eat–halibut.

School: J- ended up skipping a week of school and then some. She had a bad cold and cough for the first few days, so her dad kept her home from camp. She felt a little better by Thursday, but she was learning so much from my dad and the rest of my family that W- decided it was better for her to take advantage of those learning opportunities. He also got her excused from Monday afternoon’s classes so that she could come with us to the Hattoris. After all, it’s not every day that one gets to chat with someone who has been an official photographer for the Queen. =) (… is how W- explained it to J-‘s teacher, I think. Not that there was much talk of government over the excellent food the Hattoris prepared.)

Everyone: It has been so much fun having everyone over. This is the first time my entire family has visited me here in Canada. I don’t think our kitchen has ever been this busy – or smelled this good — before. Tita Gay and Kathy treated us to days of constantly eating gourmet home-cooked food, and everyone regaled us with stories.

Stories: W- and I like the way people tell stories. There are several parts to that: developing confidence and fluency in free-flowing conversations; developing an archive of stories; and connecting stories to each other. We’d like to get better at that. We can do that by hosting or hanging out with storytellers, going on our own adventures, and practicing telling stories around the kitchen table. I also enjoy writing.

More snippets as I make time to write.

Weekly review: Week ending October 17, 2010

October 17, 2010 - Categories: weekly

From last week’s plans

  • Work
    • [X] Organize Idea Labs: Support planning for upcoming Idea Lab
    • [X] Build Connections Toolkit: Build requested improvements
    • [X] Build career: Connect with manager regarding new projects
    • Built text template tool for Darrel Rader
    • Added thread sorting to forum export
    • Submitted Lotusphere abstract
    • Submitted Community Toolkit as Hackday project
    • Attended DrupalCampToronto
    • Got back into Drupal development: prototyped with Workflow, Profile Permission, Calendar, etc.
    • Sent talk description to Adil Sardar
  • Relationships
    • [-] Wedding: Review and select pictures
    • [-] Wedding: Collect mailing addresses and e-mail addresses for everyone
    • [-] Wedding: Send thank-you notes with prints
    • Drafted most of the thank-you notes
    • Followed up with lawyers and photographers
    • Attended concert with MIL
  • Life
    • [X] Improve productivity: Reorganize house, put things away
    • [-] Sew dress: Mark chalk lines on dress
    • [X] Writing: Flesh out wedding stories
    • Starting to get back into the habit of using Org for timetracking
    • Tried out datetree for org-capture – looks useful
    • Installed Dragon NaturallySpeaking 11

Plans for next week

  • Work
    • [ ] Work on Drupal project: Learn about Features
    • [ ] Work on Drupal project: Try out CiviCRM
    • [ ] Organize Idea Labs: Support Idea Lab
    • [ ] Build Connections Toolkit: Add event feed and other information
    • [ ] Build career: Configure hard-disk encryption
  • Relationships
    • [ ] Wedding: Send thank-you notes
    • [ ] Wedding: Download and organize photos
    • [ ] Shared interests: Try a new recipe
  • Life
    • [ ] Improve productivity: Track sleep, wake-up, and snooze
    • [ ] Sew dress: Mark chalk lines on dress

Elsewhere on the Net:

Book: Fast Track Networking: Turning Conversations into Contacts

October 18, 2010 - Categories: book, connecting, reading

Lucy Rosen with Claudia Gryvatz Copquin
Franklin Lakes, NJ: Career Press 2010
ISBN 978-1-60163-121-3

In Fast Track Networking, Lucy Rosen shares networking tips from more than two decades of organizing networking events. Many of these tips can be found in other books and blogs: wear your nametag on your right side, act as a host, and follow up. Where Fast Track Networking goes into more depth than other books I’ve read, however, is how to set up and run a networking group (also known as a mastermind group). Rosen includes step-by-step planning, sample forms, and a plan for following up.

In addition, she also provides several examples of referral sheets, which are short descriptions of how you help other people and what an ideal client looks like. I’ve come across that advice before, but printed referral sheets (as she suggests in her book) can be much more effective than the verbal descriptions I’ve seen encouraged in other books.

If you’re tired of going to yet another networking event with too many people, you may want to read this book for tips on smaller-scale, more intimate networking.

Plans: After the wedding, I’d like to experiment with one of the techniques she describes: inviting up to a dozen people out to have dinner at a restaurant. People pay for their own meals, but they come for the conversation and the potential connections. I’ve thought about doing that in the past, but I decided to host people instead because I could bring people together for more relaxed conversation (and for less money!) than we could in a restaurant or cafe. I find that I host these get-togethers infrequently, though, and perhaps alternating with eating out might be good for convenience as well as for expanding the circle of conversation.

Notes from DrupalCampToronto 2010

October 19, 2010 - Categories: drupal, geek, work

Update May 21, 2012: Sorry, sketches are missing!

I’m shifting from a emerging technologies consulting project (organizing executive workshops and brainstorming sessions) to Drupal development projects here in IBM, so I took the opportunity to attend DrupalCampToronto 2010 last Saturday. It was great to see a lot of activity around Drupal, and I’m looking forward to catching up with all the new features. =)

I wrote and sketched notes using Microsoft Onenote on my Lenovo X61T tablet. Check out my DrupalCampToronto 2010 sketchnotes in the gallery. Example:Sketch notes from conversion optimization(… there’s more – click on the image to see the rest of this!)

I still have a lot to do before my sketchnotes can be as pretty as these, but I had a lot of fun taking notes, and sketching helped me stay focused.

Some sessions covered things I could probably figure out from blog posts, articles, READMEs, slides, and handbook pages, but it was good to meet people and take a quick tour of what the community thought was important. I’m looking forward to reviewing the topics with a Drupal site at hand, so that I can experiment with these interesting ideas.

OneNote’s handwriting recognition got confused by the sketches, I think, but I can resummarize sessions here:

Conversion optimization: Think about your website as an asset. You can increase your return on investment by measuring and optimizing your conversion. Keep your audiences in mind, and use personas instead of just demographics in order to make them concrete. Establish trust through consistency and relevance. Create ongoing experiments, where you use Google Website Optimizer to test one thing at a time through split-testing. Make sure your offer pages pass the 6-second test (can people remember all the relevant details after a 6-second look at the website?). Sketchnotes for conversion optimization

Search engine optimization: There are a whole bunch of modules to help you with SEO on Drupal. Key ones: pathauto to add search engine keywords to the URL, path redirect to redirect old aliases, page title to set the page titles and target specific keywords, node words for metadata (including description – set this for better search engine listings), global redirect to avoid duplicate content penalties for multiple URLs, XML sitemap to aid in discovery and indexing, and SEO checklist for lots of other tips. The Zen theme is really handy because it puts your content earlier in the page, too. Sketchnotes for search engine optimization

An agile project management toolkit built with Drupal: Demo of the Fragile Solutions tool a company built to manage its projects. The code hasn’t been released as modules on drupal.org and I think they’re not planning to package it, but they said they’re open to sharing the code if you contact them. Good use of Views + Panels for dashboards, plus custom modules for calculating velocity, tracking revision history when stories are moved across sprints. Good use of programmatic views for greater database independence. Interesting company-wide view of sprints (instead of individual project views) makes it easier to do forecasting on a company level. Sketchnotes for agile project management

If you give away the milk for free, they’ll buy the cow (Selling Drupal services): Focus on benefits, not technology. Lullabot has great criteria for leads (see Liza Kindred): must be nice people, and must have healthy budget and/or interesting projects. Use the qualification process to ask lots of questions, trying to figure out why you shouldn’t work with someone. Charge for diagnosis/discovery/design phase as well (see doctor example). Use business hours for calling people, not for developing. Books to check out: “Getting Naked” (Patrick Lencioni) and “The Win Without Pitching Manifesto” (Blair Enns, free). Great story illustrating show vs tell: Tupperware, hammers. Paraphrased here:

One of the selling points of Tupperware was that the plastic Tupperware containers were much less fragile than the glass containers popular then. At a big Tupperware sales convention, people got together to share notes. They found that one representative outsold the others by a significant margin. The other representatives asked him for his secret. He said that instead of telling potential customers that Tupperware was hard to break, he always took a hammer and tried to break the Tupperware in front of them.

The next year, sales improved as people started carrying hammers – but the same representative still outsold everyone. They asked him what he did. He said that he now gave potential customers the hammer so that they could try to break the Tupperware.

Showing people is better than telling people. Letting people experience the benefits is the best of all.

On a related note, someone in the session also told a story about a real estate agent who lets potential buyers park in the driveway and unlock the door with the house key, further giving people that sense of ownership before they discuss the deal. Sketchnotes for selling Drupal

The sessions on Panels 3: Panels 3 looks really cool. Looking forward to trying it out. Must check out the Total Control and Views Bulk Operation modules too, and keep in mind that Panels and CTools need to be upgraded at the same time. Sketchnotes for architecting with Panels 3 and Emma Jane’s talk

Memories of Mandelbrot

October 20, 2010 - Categories: geek, ibm

Image (c) 2007 fsse8info Creative Commons Attribution Copyleft Licence

Benoit Mandelbrot, father of fractals, passed away from pancreatic cancer on October 14, 2010. He was 85 years old.

Fractals made me fall in love with mathematics. I must’ve come across them in first year high school, training for programming competitions. When we weren’t solving problems, we often wrote demo programs to show off what we could do with mathematics, graphics, music, animation, or brute force. One of my team members showed us the Mandelbrot set – beautiful complexity from simple equations. After that, I looked for fractals elsewhere: applications that let you zoom in, animations in the Encarta encyclopedia, the ferns along the path.

Also in high school: on learning that I was interested in fractals, one of my best friends lent me a thick book all about fractals. Partly to impress him (I had a crush on him then, which led to the requisite drama, from which we have thankfully long recovered) and partly for fun, I wrote a Turbo Pascal program that drew several of the fractals described in the book. In fact, it remains my oldest source code still posted on the web (1997), archived by a Russian demo site. Later on, in the breaks between programming contest training sessions, I wrote Lindenmayer system (L-system) evaluators using QBasic so that I could draw binary trees, Koch snowflakes, and Peano curves. When I encountered fractals in fiction – the dragon fractal that iterated through the chapters of Jurassic Park – it was like understanding an in-joke.

Part of the appeal, perhaps, was the combination of limitations and infinities. For example, the Koch snowflake has an infinite perimeter enclosing a finite area. Like the Foxtrot strip where Jason stretches his mind by imagining negative infinity and positive infinity, fractal dimensions boggled me. I loved the feeling. Simple rules belying complexity. And from there it was a short random walk along the chapters and articles to chaos, Lorenz attractors, and butterflies and storms. I may never understand it all fully – but it was reassuring to know that we may never understand it all either.

High school as well, perhaps: I remember a few minutes spent in a bookstore in Hong Kong, hurriedly reading a book on mathematical equations that model nature or produce interesting graphs, hoping I could remember at least a few of the equations from the book by the time I got to a computer. The book was too expensive for me to ask my parents for it on impulse, so I regretfully tucked it back into the crowded bookshelf.

Now, of course, Amazon lists thousands of books about equations and fractals, but I don’t know which books were those that tweaked my life to the mathematical inclination. It’s okay, I remind myself. It’s not important that I have them, and they may not have the same fascination for others.

One last anecdote about fractals; my only anecdote about Benoit Mandelbrot, actually. We were walking through the halls of the IBM research lab I was visiting. Another researcher walked by, nodding. When he was out of earshot, my guide – the awesome Michael Muller – whispered to me, “That was Benoit Mandelbrot.” I was immediately aflutter. I had dimly recalled that computers helped enable the exploration of fractals, but that Benoit Mandelbrot–a figure I had once thought of with the Olympian distance of long-dead science and math heroes like Einstein or Madame Curie–was alive and active, and not only that, he was at IBM… Wow. I wondered if I should run back and ask for his autograph. I didn’t – I try not to be distracted by celebrity – but I kept that feeling of wonder as my souvenir.

It was so hard to not just turn around and fangirl.

So I’m doing that now, here.

Saving development time through virtual appliances

October 21, 2010 - Categories: development, drupal, geek, work

Photo (c) 2008 JakesDad – Creative Commons Attribution Licence 2.0

I’m beginning to be a big fan of virtual images for development work, because they save me from having to have the setup above. I already bring two laptops – don’t need more!

By downloading and customizing an image of a system that is already configured for typical development tasks, I can save myself a lot of administrative time – and keep development work more cleanly separated from the other files on my computer.

Both VMWare and Virtualbox have many virtual appliances available, and you can start using them with the appropriate player. Both VMWare and Virtualbox are free for personal, non-commercial use. I’ve taken advantage of a VMWare licensing program at work, installing VMWare Workstation so that I could take snapshots of my development environment if necessary.

I picked the Turnkey Drupal 6 distribution, a 175MB download. Installing Apache, MySQL, and PHP on Ubuntu is easy, but it was good to be able to take advantage of Turnkey’s support for https and other niceties. I may still have to install everything onto the production server manually, but at least we can do the setup easily. I changed the passwords from the defaults, of course.

I didn’t think it would be this easy. I had avoided virtualization for a while because it had felt slow and clunky the last time I tried it years ago. With 3GB of memory, this tablet PC can run both Windows 7 and the development server images just fine. Running Linux inside Microsoft Windows (instead of the other way around) might have helped, too. Setting up networking was a breeze, too. I chose bridged networking, which made the virtual machine seem like a new computer on the network.

The only quibble I’d like to fix is definitely a nerdy one – I’m back to QWERTY in the virtual machine, because it ignores the Dvorak keyboard mapping I’ve chosen on the host operating system. It’s an easy matter to change this on Linux (“loadkeys dvorak” at the command-line), but an even easier (and more responsive) way to work with this is to use ssh to connect to the virtual image.

Full speed ahead!

Book: Critical inquiry: the process of argument

October 22, 2010 - Categories: book, reading

Photo source: I Can Has Cheezburger

Critical Inquiry book

Critical Inquiry: The Process of Argument
Michael Boylan, 2009, Westview Press
ISBN: 9780813344522

I wish I had read Critical Inquiry (or a book like it) before going to school. It would’ve made my required courses in philosophy, theology, and literature much more engaging and more rewarding. The tips in the book are straightforward:

  1. Identify the conclusion and the premises,
  2. Organize them in a logical outline, and
  3. Develop arguments for or against premises that can be objected to, repairing minor flaws so that you’re fighting the strongest version of the argument.

This make sense. But for some reason, I didn’t have that framework before. If I had thought of those classes as partly about debugging arguments, applying the same decomposition skills I loved to use in computer science, I would’ve enjoyed the courses a lot more and gotten a lot more out of them. Better late than never!

The book also shares classic structures for developing a response in support of or against someone’s position. You outline the original position, develop the pros and cons, choose a position, state the strongest arguments of the opposing side, and refute those arguments with your own. Although this might feel a little formulaic–or too stifling for casual blog posts that start with captioned animals!–it’s a good way to make sure you thoroughly examine different sides.

I’m going to experiment with using these ideas when writing blog posts. I think the bigger challenge for me is taking a position. I’ve discovered there are a number of things I can’t help but get on my soapbox about, so there’s a start. Essays can lead me to more questions and arguments. It’ll be a fun way to discover what I think.

Drupal Features and Drush: updating our development workflow

October 23, 2010 - Categories: drupal, geek, work

I’m working with two other people on a Drupal project, so we’re coordinating our work through a Subversion source code repository. A lot has changed in Drupal since the days when I dived into the source code to figure out the code I needed in order to duplicate the configuration changes I made through the web interface (Drupal staging and deployment: it’s all code). Now, the Features module can export various configuration bits as a module that you can check into your source tree and enable on your site. It will even show you which settings you’ve overridden through the web interface, so you can regenerate the code and make sure everything’s included.

Drush (the Drupal shell) has some commands that make Drupal features even easier to use. For example, I use drush features-diff <feature_name> to see which settings I’ve changed, and drush features-update to re-export the settings to source code.

Because we’ll be using Features to share our changes instead of working off SQL backups, I need to make sure that I’ve included all the relevant components in the features I create. One way to test that is to use Backup and Migrate to save my configured database (just in case!), load a previous backup, enable the feature, and confirm that everything works as expected.

Tests using either SimpleTest or Selenium would be the best way to confirm everything is working, of course. When Stuart comes back on Monday, he can help us set up an environment using hudson as a continuous integration server. Stuart has set up Selenium tests before, and it might be possible to use simpletest with hudson also.

Thinking about getting better at writing

October 24, 2010 - Categories: blogging, delegation, kaizen, writing

Photo (c) 2009 Markus Rodder – Creative Commons Attribution No Derivatives Licence 2.0

I want to become a more engaging, more thorough, and more organized writer. I want to be able to write clear and insightful essays – not high school book report essays, but discovering-life essays. I want to get good at capturing all this raw material that flows through life, and digesting them so that I and other people can learn.

Practice is essential, of course. Stephen King writes:

If you want to be a writer, you must do two things above all others: read a lot and write a lot. There’s no way around these two things that I’m aware of, no shortcuts.

I’m not looking for a shortcut. I’m looking forward to decades of figuring this out. If I remember to keep backups along the way, it will be fun to review the archives.

Deliberate practice and feedback would be good, too. A few weeks ago, I posted an oDesk listing for a personal blog editor and writing coach. I’m not particularly impressed by any of the candidates. Part of it is because I’m not yet clear on what I want.

Part of it is because what I want is different from what most people writing blogs want. I don’t want to write a niche blog that rockets to the top of Google rankings and becomes a passive income stream through affiliate marketing, ads, or information products. I’m not failing with my current blog, and I’m not looking for help “fixing” it. I’m doing better than I could’ve imagined my notes could do. Who knew so many people would keep coming back and reading? One of these days I might discover what you like about this blog – or maybe you can tell me, and I can think about doing more of it.

Here’s how I want my blog to work, in some ideal future: I’ve got an excellent capture workflow that encourages me to write about everything I’m learning. A subset of this is published to my blog, where interested passers-by and the occasional searcher can find (a) technical snippets that save them hours of work, or (b) reflections that make them go “hmm” or “aha”. My evil plan is that people might discover other interesting posts along the way and will look up from their browser window several minutes or hours later having learned about all sorts of things they wouldn’t have thought of searching. I will settle for going through that same discovery process myself, as I find things I’ve forgotten writing.

How can someone help now? I want someone to read my planned posts and tell me: here you need to explain things more. Tighten this up. Take this out and put it into another post because you’re trying to do too much. Get rid of “nice” and use a real word.

But more than this surface-level editing, I want logical editing. What’s your point here? It doesn’t make sense. That argument doesn’t support your conclusion, so get rid of it. That’s a fallacy there. Let’s work on that metaphor. If you reorganize it like this, everything falls into place.

And then I want meta help: on how to ask interesting questions that lead to exploration, how to capture as much learning as possible, and how to organize all of that so I can make sense of it later. Like Lion Kimbro’s How to make a complete map of every thought you think, except maybe less rigorous and more technologically-assisted. I want to be able to work with an archive spanning years and years.

I could edit myself. I have old entries I’m no longer attached to, and future ones that I can examine closely. I keep looking for ways to improve my system. I can just throw a lot of time and effort at it, and become much better in a decade or two.

It would be good to work with other people, though, who can be more ruthless. It would be great if they’ve spent lots of time figuring out their own workflow and system for keeping everything organized and they can tell me the pitfalls I should avoid or address.

I haven’t found anyone I really want to work with. I don’t think I’ll find other people who are passionate about this kind of braindumping on oDesk or any other freelance site. (Particularly geeks who can also help me tweak my Emacs setup to totally rock.)

Sometimes it feels like I’m going after the fiddly bits, that last 20% that will take another 80% of effort. I’m a good-enough writer, and my notes are organized well enough. The blog is searchable, and I’ve got structured text files holding almost everything else. Sometimes I worry that I’m leaning towards perfectionism and indistinguishable differences. But then I read people who are better writers, and I think: I’ve barely begun.

No substitute for writing, reading, or living. I’m going to have to do the hard but fun work: reading interesting people and figuring out what I like about them, living, writing about life, revising, tinkering around with some kind of organizational system.

Ah, well. I guess there are some things you can’t learn from books. There are some things you can’t even learn from teachers.

Weekly review: Week ending October 24, 2010

October 25, 2010 - Categories: weekly

Almost back to normal. The freezer is full of lunch portions of rice, chicken, squash, and vegetables. Life is good.

From last week’s plans

  • Work
    • [X] Work on Drupal project: Learn about Features
    • [X] Work on Drupal project: Try out CiviCRM
    • [X] Organize Idea Labs: Support Idea Lab
    • [X] Build Connections Toolkit: Add event feed and other information
    • [X] Build career: Configure hard-disk encryption
    • Also: Idea Labs: Export discussion spreadsheet
  • Relationships
    • [X] Wedding: Send thank-you notes
    • [X] Wedding: Download and organize photos
    • [X] Shared interests: Try a new recipe
    • Had dinner with Maira
    • Attended Rebecca’s birthday parthy
    • Visited Morgan, Cathy, and Micah
  • Life
    • [X] Improve productivity: Track sleep, wake-up, and snooze
    • [X] Sew dress: Mark chalk lines on dress
    • Sewing: Sewed most of dress
    • Sewing: Set up serger
    • Added folder and goal support to my copy of org-toodledo
    • Added org capture template that uses org-toodledo tasks and folders
    • Checked out library books

Plans for next week

  • Work
    • [ ] Drupal: Work on Drupal project
    • [ ] Idea Labs: Help compile Idea Lab results
    • [ ] Idea Labs: Touch base with Innovation Discovery team
    • [ ] Speaking: Give presentation for IBM Toronto Lab Toastmasters: “But what can I talk about?”
    • [ ] Connections Toolkit: Split off source code for easy packaging on catalog.lotus.com
  • Relationships
    • [ ] Sewing: Make burp cloths for nephew
    • [ ] Friends: Host get-together
  • Life
    • [ ] Sewing: Fix seams for dress, add zipper
    • [ ] Buy winter things
    • [ ] Cook green tomatoes

How I got into computer science

October 26, 2010 - Categories: geek, life

How did I get into computer science? I don’t know. I grew up immersed in computers.

A preschooler: At the panel interview for my admission to grade school (this additional scrutiny required because my parents want me admitted a year early), the principal is relieved to hear I can’t write my name. She is about to reject the application–when I ask for a computer mouse so that I can write it. The bemused principal asks, “A mouse?”

I’m in grade one, in my first computer class. The computers are PC XTs, older than the computer we have at home. The program is LOGO. I light up. It’s an old friend. I finish my exercise quickly and fidget. Before long, I’m helping my classmates with the blessing of my teacher. Then I’m helping the teachers with Wordstar.

At home. My sister is learning Turbo Pascal in high school. I idolize my eldest sister, seven years older than I am. I want to wear the same kinds of clothes, read the same books, do the same kinds of things. She is in high school, and is probably annoyed by this at home and embarrassed by this in front of friends. My first taste of rebellious learning: when people are busy or distracted, I sneak into the computer area and dive into the Turbo Pascal manuals. I don’t understand them yet, but given enough reading – and whatever experimentation I can fit into my ration of computer time – I will.

And I do. I watch Doogie Howser type his episodic summary into a simple text editor. I figure out how to create a similar tool myself, and discover the interesting secrets of the ASCII character set along the way.

Grade school English classes. I teach myself how to speed-read through the SRA reading labs, focusing on which parts are likely to turn up in the review sections. I finish well ahead of schedule. The teacher sends me to the computer lab to play educational games and tinker.

My eldest sister relents and teaches me about bulletin board systems. I’m nine, one of the youngest. I hide it with clear writing and good punctuation, although my poetry is still trite. I write. A lot.

By the time I hit high school, I’m firmly established as a computer geek. In a school full of nerds and geeks, I can code circles around most people in my batch. While my classmates get the hang of MSDOS Edit and Microsoft Word, my high school teacher Hagee Sarmago gives me root access on a Linux machine and a few tips on how to find documentation. He asks me to set up a Linux-based BBS. It’s my first time to work with that operating system. I love it.

My teacher also invites me to try out for the programming competitions team. I scribble some algorithms in Turbo Pascal-like pseudocode and others in flowcharts. I make it into the list of trainees.

Then it’s a crash course in QBasic and competitive problem solving. The rest of high school computing class is a blur – Turbo Pascal (officially now), SQL, Visual Basic – nothing as challenging or as fascinating as the competitions. My parents take us backpacking through Europe over my protests; I’d rather be in training all summer, even if I’m not on the main team. By my second year of contests, I consistently place among the top spots.

This is also where I discover that it’s interesting to be a geek girl. I have crushes on, am crushed-on by, and go through the requisite high school drama mostly within the closeknit tech group. Sometimes I take advantage of this, turning up at programming contests in a dress in case people will underestimate me. Sometimes I struggle to navigate friendships complicated by expectations.

There’s no question about what course I want to take in university, only where I want to take it. I want to go to the University of the Philippines, where many of my friends have gone. My parents make me apply to another school, just in case – Ateneo de Manila University. I go to Ateneo’s computer science open house and see the professors laughing, having fun with the orientation. Everyone is nice. I go there.

I discover a few of my former team members in the same course, a few years ahead. We start joining programming competitions again, training during summers. We do well. In my spare time, we build web systems and other tech projects for the school. I get a kick out of seeing teachers use our system. Much better than projects that get deleted at the end of the term. I support it through several incarnations.

Some of my friends talk the residence manager into bumping me up the waitlist because of my technical skills. I get a spot in the girls’ dorm. I have my own key to the server room, which is in the boys’ dorm. It’s airconditioned, a paradise in August heat.

I help administer the network: everything from installing LAN cards and crimping cables, to labelling wires with the help of a tester, to creating firewall rules and managing our small web server. There are a number of other geeks who do amazing things. I learn by osmosis.

I’m in third year university, looking at my curriculum. I hear operating systems class will be high-level; learn from the textbook, understand, and answer the tests. I look with envy at the syllabus from Georgia Tech, where students learn about operating systems by hacking Linux on the Compaq iPaq PDA. I decide that if ordinary undergraduates at a good school can do that, surely I should be able to figure something out. I ask my parents for an iPaq for my 18th birthday, instead of a fancy party. I get the iPaq and flash Linux onto it carefully. It works.

I want to try out the ideas from class. I skim a book about the Linux kernel, but it’s too big for me to grasp. I start with the iPaq bootloader. I read the C source code and spot two small errors: = instead of ==. I write the developers and confirm that those were really errors. Emboldened, I read some more, and write code for some their low-priority task items. They teach me how to send a diff. It’s finals week and I’m procrastinating studying, so I hack some more features in. Several days of this, and Jamey Hicks from the Compaq Research Labs calls me up to ask me who I am and if I want commit access to their repository. I add tab completion and help to their shell, and FAT support for long filenames.

I try different editors until Unix Power Tools convinces me to stick with Emacs for a while. I do. I learn to tweak it. I try things out. I fall in love with the Emacs Planner mode for managing your day, and I send John Wiegley a note volunteering to help track down bugs.

He promptly makes me the maintainer.

I’m down to four classes a semester during my final year, because I got extra credits from advanced placement and took summer classes too. I have plenty of time to code, and I do. I start using Emacs Planner to keep my notes. Following people’s requests and my ideas, I build publishing tools, cross-referencing tools, tracking tools. I build a community through a mailing list, start hanging out on IRC.

A bug of mine wipes out someone’s data. He writes me an unhappy but polite note. I’m mortified, but we keep working on it, and eventually we solve the problem. The solution helps another, inspires yet another, and we add more and more.

And there I am, an 18-year-old girl in a developing country, and I’m making a difference in hundreds of people’s lives through code.

Open source transformed computer science for me. It wasn’t about figuring out the right algorithm for a problem – although that was fun for years. It wasn’t about building projects that would get briefly reviewed by a teacher and then forgotten. It was about making things that helped people work or live better. It was a profoundly social experience, a conversation with countless others through the medium of code.

Part of the reason why I have this deep love of Emacs (irrational for a computer program?) is this experience of layer upon layer of accreted functionality from programmers solving problems and scratching itches, a treasurehunt of gems, an incredible community across time and space. And always that question: how can I do things a little bit better?

You might know this story. You may even have helped me through it, and know more clearly the parts that are fuzzy or forgotten. There’s luck in it, but I owe a lot more to conscious decisions by others: my family, my teachers, my friends, and so many other people. Thanks.

(… and thanks to Cate Huston for the nudge to write about this!)

"But what can I talk about?" Toastmaster tactics for tackling topics

October 27, 2010 - Categories: presentation, speaking, tips, toastmasters

This is a talk I’m giving to the IBM Toronto Lab Toastmasters today. I should trim a few hundred words from it to get it to more comfortably fit in 5-7 minutes, but it’s got the key points.

Today, we’re going to transform the way you benefit from Toastmasters. Right now, ten people in this club have a speech scheduled. After this talk, I want each of you to sign up to give three speeches, all committed to in advance. Not only that, I want you to get into the habit of always working on a talk – and it’s going to take you less time and give you more results than before.

"You’re crazy, Sacha. What can I talk about? When am I going to find the time to work on it? It’s not like I do interesting things, anyway."

I know. I’d be thinking that, too. But you’re in Toastmasters, and it’s not just so that you can spend lunch time listening to other people talk. I’m going to share three lessons I learned the hard way. If these three lessons help you get over the hump and get on with speaking, fantastic! Mission accomplished. If they don’t, get in touch with me and we’ll figure out what will.

So here’s what I’ve learned about coming up with topics to talk about.


We have really high standards for ourselves. We want to be as insightful as New York Times columnists, as funny as standup comedians, and as persuasive as managers during performance reviews.

Me, I have days when I don’t want to give a presentation because I’m sure that I’m going to suck.

Newsflash: It doesn’t have to be brilliant. You don’t have to be brilliant. In fact, if you’re giving a Toastmasters presentation like this, even if you bore people, they’re only bored for seven minutes. You’re not going to ruin anyone’s lunch, much less their life.

What about longer talks? As long as you’re telling the truth in your title and abstract, then the organizer of the talk can decide if it’s a great fit, and people can choose whether to show up or not – or whether to check their e-mail.

There are plenty of things you can share: everything from the structural determination of organic compounds to how to buy a car from the US. Pick one thing you’ve learned or experienced and put together a talk about it.

But there’s a harder reality to this. The truth is that you don’t get to be interesting until you go through the boring parts. Being interesting is hard work. You have to figure out what you want to say and how you want to say it, and you can only do that by trying.

So after this talk, you’re going to SIGN UP FOR YOUR NEXT TALK. When you finish that, you’re going to sign up for your next talk, and the next, and the next. Always be working on your next talk.

Which brings us to secret #2.


You’re not going to figure everything out on the first try. Have you ever heard stand-up comedians during their off hours? One of my friends was doing stand-up comedy. You could tell because whenever we met someone new, he’d tell the same joke. He’d change the timing. He’d change the words. He kept practising until he nailed each joke.

I looked up all the talks people gave in this Toastmasters club this year. There’s one repeat. Everything else is all new, all the time.

Remember: It doesn’t have to be new. REDUCE your effort by REUSING your talks and RECYCLING your ideas.

Don’t be a one-trick pony, though. Make things better. How can you do that?

Do you have copies of your past speeches? What about your notes? Your conversations? Your ideas? If you don’t keep at least some of that, you’re throwing so much away.

Everything I work on goes into one big text file. I write as much as I can. Everyday, I take notes so that I can remember, because forgetting is such a waste of time.

I might write or present about a topic four or five times so that I can understand it better. It’s part of the learning process.

I learn something about a topic every time I present it. It’s part of the process.

Your topic doesn’t have to be new. Go back and look at your old stuff. Start saving your work from now on: your talks, your notes, your ideas. Writing down notes is incredibly powerful. Over time, you’ll build this amazing library that you can refer to any time you need. In fact, if you share it with people – and it’s incredible when you do – you can get crazy return on investment. I have presentations from three years ago that people are still looking at, still learning from, because they can find those presentations through search engines.

Last secret. This is a big one.


I have a confession to make. I propose topics I don’t know about, so that I can force myself to learn.

It’s an amazing excuse to get going. When you’ve committed yourself to teaching people, you learn more deeply. And you’ve got a deadline, too.

Don’t limit yourself to things you know. Pick something you want to learn, and promise a talk on it. Then learn it, share what you’ve learned, and save people time.

You might be thinking: "But what can I share if I’m just a beginner?" This is actually the perfect time to share. By the time you’re an expert, you’ve forgotten all the things people need to learn. Share as you go. You don’t have to be brilliant, and you might need to try it a few times before you figure things out, but there’s no better way to learn.

If you can convince people to try something out, or help them avoid your mistakes, or save people an hour or two of figuring things out on their own, then that’s already worth it.

So, how does this line up with what you are going to do after lunch? Well, you’re going to sign up to give three speeches.

Your first speech doesn’t have to be brilliant. Look up your next goal from your workbook, pick something you’ve learned at work or at home, and commit to sharing it.

Your second speech doesn’t have to be new. Pick something you’ve already shared, and make it better.

Your third speech doesn’t have to be what you already know. Pick something you want to learn, and commit to sharing it. If you’re doing one speech a month – that’s plenty of time to prepare – you have at least two full months to try an experiment. It can be a technical overview, or something as practical as a speech about "How to wake up at 6 AM everyday for one month." Just do it.

Then make life easier for yourself! REDUCE, REUSE, RECYCLE. Make your own library of past speeches and ideas for future ones. Keep an eye out for interesting things to share. You’ll find yourself with plenty of material in no time.

Who’s ready to sign up? Who needs some more coaching? We’ll figure out something that works. Take that card, use it as a reminder, and get in touch with me if there’s any way I can help. There’s so much you can talk about, but you’ve got to take that step.

Notes from Quantified Self Toronto, October 27, 2010

October 28, 2010 - Categories: geek, life, quantified, sketches, sketchnotes

Bits from the meetup: automated tracking of computer activity, CureTogether.com for aggregated health self-reporting of conditions and treatments, and the oddly popular desire for a statistical silver bullet that will crunch your data and tell you what’s potentially interesting about you, instead of you coming up with questions and designing proper experiments. This makes me think about t-tests and how you can do too many tests for significance (PDF). Intentional experiments may be slower, but I think they’re worth it.

Anyway, here are the notes!

I took these notes using Microsoft OneNote 2007 on a Lenovo X61T tablet. I then exported the graphics to the Gimp, did a little bit of editing, and uploaded them to Gallery2 on my blog. See my other sketch-related blog posts, or check out my other sketches in the gallery.

Speaking: In case of emergency, break glass

October 29, 2010 - Categories: presentation, speaking


IBM Fellow John Cohn shares a tale of two talks: one that sucked, and another that rocked. He says:

I don’t know.. all that I know is that really empty feeling of being half way through a talk .. all eyes on you.. and you just know that you’re sucking big time.. You can’t gracefully just stop.. though
perhaps that would be better than continuing.. maybe the best thing to
do in a circumstance like that is to reach for the fire alarm and jump
out a window.

It’s reassuring to know that even seasoned tech celebrities (he’s got an awesome TV show, even!) have panic moments like that. =)

I know that feeling. I’ve run into that a couple of times, and it’s never any fun. One time, I was just a few minutes into a talk for high school students when I realized that the presentation I prepared was likely to bore me, not to mention the tough crowd. So I threw out my slides, turned off the projector, gave people a quick idea of what I knew about, and had a great conversation instead.

When in doubt, listen and improvise. (Which I’m sure John Cohn has done more times and more effectively than I ever have!)

If you find yourself unavoidably sucking at a presentation, don’t be so hard on yourself afterwards. You propose a topic, the organizer accepts it, and people usually have a choice of whether or not to attend – and certainly, whether or not to pay attention. If one of these points fail – maybe you or the organizers misread the audience, maybe people just aren’t having a good day – that doesn’t make you any less awesome. Keep trying.

Emacs, keypresses, and why keyboard combinations aren’t that scary

October 30, 2010 - Categories: emacs

I came across this comment on Chris Lowis’ blog post about small-screen development in Emacs:

Alex: I can’t be geek enough to use Emacs… it’s not that I think the
editor is bad: it’s the excessive number of keys to press to
accomplish anything.

It made me stop and think, because one of the things I love about Emacs is that I can press lots of keys to accomplish anything.

What’s the alternative? Mouse clicks? Eeew.

My most-common keyboard shortcuts are one or two keys long. Yes, there are many of them, and I use a small subset depending on what I’m working on. If I forget the keyboard shortcut for something, or I want to run a command that doesn’t have a keyboard shortcut, I use M-x (which is really Alt-x on my keyboard) to call the function by name (ex: M-x shell-command-on-region, which turns out to have M-| as a shortcut).

I hardly ever type entire function names. icomplete-mode offers autocompletion for M-x. I also shows me the keyboard shortcuts for a command in order to help me work more efficiently.

If I like something a lot, I can easily define a keyboard shortcut for it using global-set-key. I can set mode-specific keyboard shortcuts so that some shortcuts are active when I’m programming and inactive when I’m not. I can load sets of shortcuts depending on what I want to do. It’s incredibly flexible. Yes, it requires some learning, but it’s been well worth the investment for me.

Because you only have so many keys on a keyboard, it’s useful to be able to define multiple-key shortcuts. I’d rather type Ctrl-c r t than Ctrl-Alt-Shift-R or something like that. (Or worse: spend time looking for just the right toolbar button, and try to click on it with the mouse.) I think of it like super-fast selection through a menu that makes sense to me. In my case, Ctrl-c turned out to be easier to get to than F9 (which I’d previously been using for personal shortcuts), r means remember, and t means task.

You might think that a keyboard-driven editor is slow, but it’s fast enough to keep up with me, and I can probably code circles around you. ;)

Weekly review: Week ending October 31, 2010

October 31, 2010 - Categories: weekly

From last week’s plans

  • Work
    • [X] Drupal: Work on Drupal project
    • [X] Idea Labs: Help compile Idea Lab results
    • [X] Idea Labs: Touch base with Innovation Discovery team
    • [X] Speaking: Give presentation for IBM Toronto Lab Toastmasters: “But what can I talk about?”
    • [-] Connections Toolkit: Split off source code for easy packaging on catalog.lotus.com – postponed, busy!
    • Drupal: Made AutoHotkey script for copying tasks into Rational Team Concert
    • Drupal: Set up virtual machine for integration server
    • Volunteered for job shadowing and had fun. Francis probably now more interested in computers and engineering than before.
    • Started working on deck for social media and retail
    • Sent my manager possible contacts for my yearly review
    • Made lots of frozen lunch portions
  • Relationships
    • [-] Sewing: Make burp cloths for nephew – bought fabric
    • [X] Friends: Host get-together
    • Helped J- learn more about writing
  • Life
    • [-] Sewing: Fix seams for dress, add zipper – postponed, busy this weekend
    • [-] Buy winter things – not yet stocked in stores
    • [-] Cook green tomatoes

Plans for next week

  • Work
    • [ ] Work on yearly review documentation
    • [ ] Give presentation on social media and retail
    • [ ] Work on Drupal project: get integration server set up, etc.
  • Relationships
    • [ ] Write stories
    • [ ] Smoothen household routines
  • Life
    • [ ] Go to writing group
    • [ ] Redeem salon coupon