Elizabeth Sandberg’s story about a savvy pie pumpkin seller reminds me of the advice to sell benefits, not features.
She wasn’t actually selling pumpkins. She was selling the only remaining ingredient I needed for an easy, award winning recipe — two pie pumpkins. She was selling me what I came to the farmers market for — not individual produce items, but a delicious meal.
Speaking of food, Laura Grace Weldon shares an intriguing inside-out caramel apple recipe on GeekMom. I like the occasional caramel apple, but the store-bought ones are enormous, and we’re slowly phasing out sweets and desserts. This might still sneak into one of our experimental kitchen days, though.
Another GeekMom find: Amy Craft recommends graphic novels geared towards kids. J- likes graphic novels, and has been working her way through the Toronto Public Library’s manga collection.
Photo of pumpkins © 2010 llstalteri, Creative Commons Attribution License
I miss my Planner wiki! I think it’s time to organize things into a personal wiki again. Blogs are great for chronological updates, but I need to be able to group ideas into more than just categories, and WordPress pages aren’t as convenient as a proper wiki. Org-mode outlines are also good, but they can get unwieldy when large. I have an 1.7MB outline right now, all plain text, and I can’t fit it into my head.
What kind of tool should I use? I thought about whether I wanted a web-based wiki editing environment. I realized that editing and publishing the wiki from Emacs is probably the way to go for me, because that gives me offline access, synchronization, and all sorts of other goodies.
Here’s what I want to do:
Here are other capabilities I care about:
I thought about using Muse because of its project-publishing support, and because of the good experience I had with Planner and Emacswiki (the predecessor to Muse). Muse supports Org-format tables, but it uses a different way to signify code blocks, examples, and other parts. For ease of implementation, then, I’ll probably see if I can get Org Mode to deal well with the case of either multiple small files, or narrowed portions of one large file. Anyway, the first step is to organize my resources, and that will be useful no matter which wiki system I end up using.
Do you have an Emacs-based personal wiki? What do you use, and what do you think about it?
Hat-tip to Holly Tse for organizing this interview!
Holly Tse: I heard you mention a lot about a blog being about sharing stories. We have a question here about Charles from Sydney. He’s asking, “What happens when you blog about something that’s private or could offend others if you were to publish it?” For example, he wants to write a blog article about the bad manners he encounters at his workplace, particularly inappropriate use of smartphones. What advice do you have?
Sacha Chua: It’s a tough question, especially since even with how careful I am on my blog to not offend anyone, I’ve accidentally offended people before. One time I was writing about my teaching reflections. I was teaching computer science in university, and I was writing about what I was learning in the process. The example I often bring in here is the Sartrian existentialism we learned about in philosophy classes in school where when you make a choice, it’s as if you were choosing for everybody. In this case, my writing about what I wanted to do made this friend of mine feel that I was criticizing the way he taught. We had a bit of a fight about that.
In terms of offending people… Accidentally offending people, there’s not much you can do, because you can’t control other people’s reactions. When you’re writing about something sensitive that you know might offend people… I often like to step back and look for the really, really positive way to look at it. Not the fake-positive and not the constructive-criticism “I will smile as I will tear you apart” – which unfortunately is the way most people put constructive criticism – more along the lines of “This is what we’ve got. What are some small things I can do to make this better?” When you’re talking about what you can do, whether it’s… In terms of modifying other people’s smartphone use, maybe I’ll take my conference calls elsewhere, or maybe I’ll mentally rehearse different things that I can say to people in case their conversations are disturbing me.
When you’re focused on what you can do about it, then you come across less “this is what you should do” and high-and-mighty and whatever else. Trying to bring that incredibly positive “Well, here’s where we are; let’s figure out how we can move forward” approach to it will probably will do you much more good. It will probably make you feel better in real life also!
HT: Once again, it’s like using your blog to figure things out. In this case, it’s a way to take a step back and try to step away from the heated emotion you might feel, and to think of a way to constructively write it… and that might result in a constructive way to approach it in real life.
SC: That reminded me of a time when someone close to me said something pretty mean–thoughtlessly mean, but still pretty mean–to me. I stopped and I thought about it. I managed to slow down and respond nicely during the situation itself. Afterwards, also, I stopped and I thought about it. I thought, well, how would I like to respond in the future, too? Do I want to take the approach I did (stay calm, don’t take it personally, and all that stuff)? I realized that having that space – being able to decide what kind of response I’d like to have, and maybe even rehearsing some of the things I might do in the future when faced with a situation like this – really really helped. It’s like a fire drill. The next time you find yourself in a situation like that, you’re not going for the knee-jerk reaction. You’ve already thought: okay, for the kind of person I want to be, this is how I want to respond. And I want to respond with love, even though sometimes people have a harder time maintaining their self-control. It happens. People are human, and that’s okay.
HT: So I take it then that you blogged about the incident too.
SC: I did. I wrote about it because people run into these situations. If what I’ve written or what I’ve thought about can help somebody else put in that little bit of a gap between something bad happening–someone saying something mean to you, or someone doing something that annoys you–that gap between that stimulus and your response to it–and the quote by Victor Frankl is one of the things I used in that post as a point of reflection… Between that stimulus and response is our freedom to choose our reaction. Writing about it, thinking about it–bringing your conscious or more positive or more loving mind to bear on it–really really helps.
I should say that it is also possible to use all of this writing and blogging to descend into a vicious circle of feeling really really bad. For example, if you wanted to take this as an opportunity to rant about all the things that are going badly in your life, and how miserable you are and all that stuff… Being able to look back at your archive will probably make you feel a lot worse. It’s a powerful tool. Be careful with it. Try to focus on the things that you’d like to see, because people do tend to find what they’re looking for. I like to focus on the really really good stuff, and I’m surrounded by it, surprisingly enough.
HT: Very true. We actually had a speaker last week talking about the “law of attraction” and she basically says the same thing. From a spiritual, metaphysical perspective, what you focus on, you attract into your life. You’re a great example of someone who’s very positive, and you’re surrounded by positive influences.
SC: I wouldn’t go so far to call it the “law of attraction”, which I don’t quite subscribe to. I’d say that you get better at seeing the things you’re looking for. For example, if you’re writing about the things that you’re grateful for–which is a great practice, by the way, if you need cheering up or if you want to make your life extra happy–if you’re writing about the things that you appreciate and are grateful for, then you get better at recognizing and appreciating those things. If you write about how you want to improve things, then day by day, you’ll find more opportunities to improve your life. It’s amazing when you build that habit of asking yourself these questions, or looking for the bright side of things… You do get better and better at it. And why, yes, I do have a blog post about this too. I think I called it the martial art of happy-do.
We were going to be away for a week and a half, so we needed to make plans for our three cats. In the past, J- had done a little cat-sitting for us. I’d also asked a friend before, but that was for a weekend. With our cats occasionally throwing up or pooing outside the litter box when they’re upset, I didn’t want to inflict that on friends, even if I was happy to pay market rates. We wanted to make sure the cats were watched over and played with during the day, so we decided to give cat boarding a try.
Boarding cats is more expensive than hiring a cat sitter. We felt anxious about having someone else come into our house while we’re away, though, so we considered the difference a worthwhile premium for peace of mind – no litterbox accidents or throw-ups to worry about, and no worrying about stuff missing either. We also liked the ability to specify instructions like feeding Neko small, frequent meals – if you give her a lot of food in one go, she sometimes rushes and then throws up.
There was a small risk that the cats would pick up colds, ticks, or fleas from other cats, but we decided we could deal with that.
After calling up a few cat boarding places, we settled on Lonesome Kitty, a nearby cat boarding place. I checked out the location, and it seemed fine. The resident cats looked bright and alert, and none of them were obviously scratching themselves. We decided that it would be better to board there than with a veterinarian because vet offices tend to be busy (and occasionally full of sick animals!), so we e-mailed our confirmation. On the day before our flight, we dropped the cats off along with enough cat food for their stay.
After we got back, Luke and Leia sought attention more often than usual, and Neko had a cold. (The poor dear.) The cats were okay, though, and life returned to normal a week or so after we got back.
The cost of boarding three cats worked out to around $32 per day. A cat sitter would have cost around $23 per day. Lonesome Kitty has since then raised its prices to $36 for three cats / day.
I worked 46 hours this week. Most of the overtime was from a 12-hour sprint on Tuesday, getting all our tests to run again after weeks of collective neglect. I tried to cut back on work on Thursday and Friday. Between meetings and my own desire to make good progress, I ended up working a regular day.
I don’t feel particularly time-deprived this week. I’ve made good progress on a stuff-tracking component for my personal dashboard, and I’ve improved the tracker for community-supported agriculture produce. I read lots of books. We hosted another study group, too. I’ve prepared lots of food for the coming week.
My bottleneck is more like energy and interest, not raw time. A lot of things are down on my list. Working long hours on client projects means being less inclined to spend additional hours on extracurricular work stuff. I’ll see if I can work out a lighter work week next week so that I can save time and energy for these things. In particular, the Lotus Connections Toolkit is one of those high-leverage things – a little effort can go a long way.
Maybe my time analysis will help me see where the time came from. Hmm…
[X]Project O: Lots more work
[X]Project I: Follow up on SQL Server changes
[-]Project T: Follow up on pre-launch – meeting next week
[-]Prototype flashcards – probably Rails
[X]Facilitate another fun study group
[-]Help J- with writing – maybe next week
[X]Write about more quantified self stuff
[X]Find other quantified self bloggers
[X]Improve measurements for home dashboard – added summary
[ ]Work on project O: write more tests
[ ]Project O: get e-mail templates finally sorted out
[ ]Get project T closer to launching
[ ]Prototype flashcards
[ ]Work on Lotus Connections Toolkit migration
[ ]Have Maira and Scott over for board games?
[ ]Help out with home renovation planning
[ ]Follow up on things Mom was interested in
[ ]Make lots of food
[ ]Continue tracking stuff
|Activity||Sat||Sun||Mon||Tue||Wed||Thu||Fri||Total||Average||Weekday average||Weekend average|
|Activity||This week||Last week||Delta||Notes|
|Work||46.5||44.5||2.0||Extra time getting tests to pass|
|D – Break||1.3||-1.3|
|D – Drawing||0.1||0.7||-0.6|
|D – Other||9.4||0.1||9.2||Worked on personal tracking system|
|D – Personal||0.6||6.6||-6.0|
|D – Reading||4.9||4.4||0.5|
|D – Shopping||2.1||2.1||0.1|
|D – Social||4.3||17.1||-12.8|
|D – Writing||11.1||5.3||5.8||Made time for this|
|P – Eating||1.9||1.3||0.6|
|P – Exercise||11.3||1.8||9.5||Biking on weekends, walking to subway for work|
|P – Routines||8.9||9.5||-0.6||Pre-cooked oatmeal saves a little bit of time, but not much|
|UW – Cooking||9.0||1.9||7.2||Processed the vegetables, prepared lamb korma|
|UW – Tidying||4.6||6.6||-2.0|
|UW – Travel||2.6||3.7||-1.2||Worked from home one day, biked to work another day|
So it looks like most of the extra time got moved from sleep, hobbies, and socialization. We didn’t have J- this week, so we spent less time helping her with homework (just the Friday study group). I made more time to write, which felt good. I’m also experimenting with doing more up-front cooking instead of waiting until our home-made frozen lunches dwindle, so I spent more time cooking this week.
I’d like to get work under control next week. This probably involves comparing the relief and happiness I can get by scratching the itch in my brain (bugs, tests that still need work…) versus other things that might have less immediate but still valuable payoff (working on my personal projects, investing in relationships). It seems like an excellent idea to work when something’s taking up brainspace so that I can get it out of my head, but there’s always more work to do. Solving one issue leads to another, and another, and another. Work can pose an infinite number of challenges with short-term payoffs. Down this path lies a dangerous temptation to neglect other things, though, so I think it might be more useful to get better at putting those brain-itches into perspective.
I’m sure that if I sit down and make space to think about it, I can come up with ideas for non-work activities that create even more value. I need to externalize that list, because it can be hard to compare a clearly-defined work task (solve issue X in our queue) with a vague idea that I may want to spend more time on relationships or personal projects. It can be difficult to admit that some clearly-defined tasks (ex: get the Lotus Connections Toolkit working again) end up with lower priorities than exploratory tasks (ex: do a freezer audit and nudge us closer to a better finished meals:frozen ingredients ratio).
There’s also the risk of procrastinating things that are really worth doing. At some point, the mental cost of carrying these ideas around (or even stashing them in one’s to-do list) outweighs the benefits of other activities. Still, it’s a good idea to make sure your priorities strongly influence how you spend your time, particularly when work is so fun that it can suck you into flow experiences. Flow isn’t bad, but it’s also not always good.
I’ve circled around this idea for several paragraphs now, so there’s probably something here that I need to pay attention to. Hmm.
Also, wake-up times have edged forward a little bit. Let’s see how the end of Daylight Savings Time changes things, too.
2011-12-14: Updated step code
In terms of testing code, behaviour-driven development is fantastic. You can write your tests in pretty much plain English using a testing tool like Cucumber for Rails, which makes it easier to communicate with other people (including clients!). There’s a certain satisfaction in getting your tests to pass, and when they break, you know something needs fixing.
I’ve been thinking about what automated tests might look like in life. It turned out to be easy to prototype, thanks to the data I’m already collecting. It’s almost like development-driven behavior: can I apply the tools I use in software development to help me change my behaviours in life?
Here are some results from my very first integration test of real life:
Feature: Development-driven behaviour Scenario: Check for overdue books # features/life.feature:2 When I check our library items # features/step_definitions/life.rb:3 Then there should be no items that are overdue # features/step_definitions/life.rb:7 Scenario: Check my work load # features/life.feature:5 When I look at my time use for the past 7 days # features/step_definitions/life.rb:11 Then I should have time data # features/step_definitions/life.rb:19 And I should have worked between 40 and 44 hours # features/step_definitions/life.rb:24 <46.5166666666667> expected to be <= <44.0>. (Test::Unit::AssertionFailedError) ./features/step_definitions/life.rb:26:in `/^I should have worked between (\d+) and (\d+) hours$/' features/life.feature:8:in `And I should have worked between 40 and 44 hours' Scenario: Check if I'm sleeping # features/life.feature:9 When I look at my time use for the past 7 days # features/step_definitions/life.rb:11 Then I should have slept between 8 and 9 hours a day # features/step_definitions/life.rb:29 Failing Scenarios: cucumber features/life.feature:5 # Scenario: Check my work load 3 scenarios (1 failed, 2 passed) 7 steps (1 failed, 6 passed) 0m0.833s
Cucumber highlights failing tests in red and it lists the failures as well.
steps.rb that I’ve started fleshing out:
When /^I look at my time use for the past (\d+) days?$/ do |arg1| @start_time = (Date.today - arg1.to_i.days).midnight.in_time_zone @end_time = Date.today.midnight.in_time_zone @log = TimeTrackerLog.new(User.first) @entries = @log.entries(@start_time, @end_time) @summary = @log.summarize(@start_time, @end_time) end Then /^I should have time data$/ do assert @entries != nil assert @entries.size > 0 end Then /^I should have worked between (\d+) and (\d+) hours$/ do |min, max| assert_operator @summary['A - Work'] / 1.hour, :>=, min.to_f assert_operator @summary['A - Work'] / 1.hour, :< =, max.to_f end Then /^I should have slept between (\d+) and (\d+) hours a day$/ do |min, max| average = @summary['A - Sleep'] * 1.0 / (1.hour * ((@end_time - @start_time) / 1.day)) assert_operator average, :>=, min.to_f assert_operator average, :< =, max.to_f end # LIBRARY When /^I check our library items$/ do nil # Actually stored in database, so we don't need anything here. This is more for semantics end Then /^there should be no items that are overdue$/ do assert_equal 0, LibraryItem.where('status = ? AND due < ?', 'due', Date.today).size end
I am pleasantly boggled that this is possible, and will probably write all sorts of odd tests now. Because Cucumber can fill in web forms, click on stuff, and so on, I might even be able to use it to check information on other sites. (When I check my mail, then all the messages in my inbox should be less than a week old?)
Oh, the possibilities…
October was an excellent month. My work laptop upgrade meant that I could bring just one laptop to work instead of two. I’ve added lots of things to my Quantified Awesome personal dashboard. J- has caught up at school, and is doing well. We’re looking into how to make the house more energy-efficient. I’m learning more about cooking, and have picked up some new recipes. Life is good.
From my plans from September: I added library functionality to my dashboard, tracking the currently-checked out items as well as some statistics on the books I’ve read (retail price, number of pages, and so on). I think I’ll postpone the blog review to December or August.
In November, I’m going to focus on having a place for everything and everything in its place. I’m experimenting with the stuff-tracking I’ve added to my personal dashboard. Looking forward to sharing screenshots and experiences, and maybe even opening it up so that other people can track their things too. I’d like to see if I can complete a month of tracking stuff, and what I find myself needing to add to it. Let’s see how that works out!
Blog posts this month:
I don’t listen to music a lot. Words interfere with my programming or writing (hmm, I should test to see how big the effect is), and I got used to working in silence or with white noise. Some people have a lot of music, though. R. Galacho wrote this Python script that uses the ID3 information in MP3s to sum up listening time in each genre, and wanted me to share it in case anyone else might find it useful:
# -*- coding: utf-8 -*- __doc__=""" muasure v.0.1 How long could you listen... Many times I've talked with friends about my digital record collection's size (mmm... we are talking in the order of GB) and how long could I've been listen if I make a playlist with the hole collection and play it completely. Well, I made some mind calculations setting up average time and making a proportion to the number of files taken in my HDD. So, spare time and the speed and versatility inherent to Python give me the rest. Music Measure (Muasure for short) calculates the total time of your music collection. Finally show data in screen and writes a text file with that information into collection base directory (so if you clean your screen you don't have to relaunch the process). The only parameter expected is the base location of your record collection (by default is the current directory when invoked). Written, tested, runned and commited on GNU Emacs 23.2.1 (i686-pc-linux-gnu, GTK+ Version 2.24.4) ;) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. """ __author__="R. Galacho" __version__="0.0.1" __date__="20111010" import os, sys, re from datetime import timedelta from mutagen.mp3 import MP3, HeaderNotFoundError from collections import OrderedDict from cStringIO import StringIO def get_total_time(directory, collection): content_types = dict() lengths = 0 for mp3_file in collection: try: id3v = MP3(mp3_file) lengths += id3v.info.length content = str(id3v.get('TCON')) if content_types.get(content) == None: content_types[content] = id3v.info.length else: content_types[content] += id3v.info.length except HeaderNotFoundError: sys.stderr.write("Error reading file %s\n" % mp3_file) total_time = timedelta(seconds = lengths) avg_length = timedelta(seconds = float(lengths / len(collection))) file_str = StringIO() file_str.writelines(["Total time : ", str(total_time), "\nAverage time: ", str(avg_length), "\n\n"]) ord_content_types = OrderedDict(sorted(content_types.items(), key=lambda t: t, reverse=True)) for (k, v) in ord_content_types.items(): total_time = timedelta(seconds = content_types.get(k)) file_str.writelines([k.ljust(15), ": ", str(total_time),"\n"]) print file_str.getvalue() if os.access(directory, os.W_OK): result_file = open(('%s%smuasure-data.txt' % (directory, os.sep)), 'w') result_file.write(file_str.getvalue()) result_file.flush() result_file.close() file_str.close() def main(collection_dir): directory = os.path.expanduser(collection_dir) if not os.access(directory, os.R_OK): raise Exception("Not enough permission on %s" % directory) collection =  pattern = re.compile(r'\.mp3') for dir, subdirs, files in os.walk(directory): collection.extend("%s%s%s" % (dir, os.sep, f) for f in filter(lambda x: pattern.search(x), files)) collection = map(os.path.abspath, collection) get_total_time(directory, collection) if __name__ == "__main__": if len(sys.argv) > 1: main(sys.argv) else: main("./")
This requires Python 2.6 or later and Python-mutagen 1.19 or later.
What else can you automatically extract from the files or data you already have? People have done interesting analyses based on geocoded photos, times of tweets, and so on. Have fun exploring!
One of my coworkers asked me if I knew interesting examples of visualizations. I mentioned quite a few sites and she found them super-helpful (like, give-Sacha-a-hug helpful! =) ). Just in case you find these handy: (no hugs required)
IBM Many Eyes
This collaborative visualization project makes coming up with charts and graphs so much easier. Lots of data sets and lots of examples to explore, too. Note: don’t upload private data.
Hans Rosling shows you can do play-by-play commentary for statistics and have people on the edge of their seats.
OKCupid visualizations are fascinating. It turns out that one can get all sorts of insights out of a massive online dating database. The blog posts are cleverly written and often include practical tips, like this one on profile picture attractiveness, camera types, flash, depth of field, and time of day. They have mind-boggling data. You may not want to open the blog posts in a school or work context, though.
What are your favourite sources for visualization inspiration?
We like cooking in bulk. We find it to be an efficient way to make sure we’ve got healthy, inexpensive meals ready for the workweek. How can we improve our processes?
Cost and delegation: I’ve been tracking the cost per portion for the meals we prepare in bulk. Cost per portion tends to be between $1 and $3, while eating lunch outside tends to be about $8-12. I can prepare about 20 portions in 3 hours (+ tidying up of one hour or so), and have scaled up beyond that too. If we use $12-15 per hour as the replacement cost of labour (it looks like you can hire housekeepers for around that range), that works out to around $100 of savings if I outsourced preparation, and $160 if we do things ourselves.
I might experiment with this by hiring someone who’s experienced in bulk cooking and freezing, particularly if we can squeeze in 40 portions or more on one day. (It’s possible – see Once a Month Cooking.) If it works, then it can save us a chunk of focused time.
Variety: Along those lines, we can adjust our grocery shopping so that we can eat even better. I was pleasantly surprised to find that lamb korma worked out to around $1.25 per serving. It still felt like such a treat. We don’t have to eat chicken most of the time, then!
We can experiment with new recipes for bulk cooking, and we can revisit old favourites. Next on my list: beef bulgogi, proper lamb korma (should try a few different recipes), lasagna (it’s baking season again!), shepherd’s pie…
Prepared meals and ingredients: We don’t use a lot of prepared ingredients like pre-cooked bacon, chopped carrots, or peeled potatoes. They’re more expensive than regular ingredients, and they’re typically not as fresh. We do use frozen vegetable mixes, which are much handier than cutting off corn kernels and chopping up carrot bits ourselves. We occasionally buy chicken drumsticks or thighs in order to save us time and mess in quartering them, and we also buy rotisserie chicken. We like frozen steamed buns, and J- has frozen nuggets from time to time. We buy the occasional frozen pizza when it’s on sale. In summer, we buy frozen burgers. We like the packaged lamb korma and the Jamaican beef patties. Canned soup is also handy. We hardly ever buy other frozen meals, prepackaged stock, and other convenience foods.
I would totally go for pre-chopped onions, as I hate crying over them. (None of the little fixes I’ve tried have worked so far; I’ll keep trying to hack this!). I would also go for peeled and chopped garlic, because I use so much of it. Fortunately, I can make my own packages. I’ve chopped and frozen most of our onions and all of our garlic. We’ll see how that works out! I’ll keep an eye out for other supermarket offerings, too. Being in a community-supported agriculture program means we buy very few additional vegetables (I’m currently drowning in a sea of broccoli rabe). We might experiment with using prepared meals to explore new recipes (like the way prepacked lamb korma firmly established that we have a taste for it) and with using prepared ingredients to make bulk preparations easier.
Prepared 1- or 2-person meals tend to cost around $4 to $5 per portion. Bulk meals like lasagna casseroles cost around $1.50 per portion, which is actually cheaper than our cost per portion for lasagna. Pizza costs around $2 per portion when it’s on sale.
Tools: I need to get better at using the tools we have: breaking out the food processor and chopping up lots of things, using the stand blender or the immersion blender for soups and purées, and so on. If I can use the food processor to do all the onions, then freeze chopped onions for use in future recipes, that would save me a lot of crying.
Meals:ingredients ratio: Right now, both our chest freezer and our under-fridge freezer compartment are at about about 1:4 (meals to ingredients by volume). We can make a concerted effort to spend weekends either cooking or editing one stack of frozen ingredients in order to replace it with one stack of frozen meals. Then we can shift to the chest freezer containing practically all frozen meals and the fridge freezer containing ingredients.
Meal density: Instead of packing individual ready-to-go portions, we might store just the main dish. That would double or triple our freezing capacity, but it would require more planning. Every three days, then, we would take out enough food for the next three days and defrost it. The next day, we would repack lunches. We would always make a large pot of rice each week, and we would keep frozen vegetables in stock. We might keep a few individual portions for emergencies.
For this month, I’m going to focus on improving our meals:ingredients ratio, so that we can gradually clear out the old ingredients and provide a good base for future experiments. I may also prepare a large bag of chopped onions to see how well that works.
Do you cook in bulk? How are you improving your processes?
Hat-tip to Holly Tse for organizing this interview!
Holly Tse: We have another question here from Charles. He’s asking, “Can you comment on the benefit you’ve made by preparing yearly digests of your blog in PDF format and printing out your blog?” He says he always enjoys reading your annual review of your life.
Sacha Chua: Awww… So I started keeping a paper backup of my blog after my mom inspired me, because she started printing out my stuff too. Also, it’s kinda fun to flip through what you’ve actually written. We don’t have any visuals now, but I’ve got this thick binder that’s maybe 3-4″ thick, double-sided printed paper with two columns printed on it, and all of that stuff… I’ve been writing for a while. You don’t have to write that much. It’s okay. But it is fun being able to look at it. Every year – sometimes twice a year, since I tend to do one around my birthday and I tend to do one around the Christmas/New Year holidays too – I look back at what I’ve done over the past 12 months, where I wanted to be by the time I would’ve done my review, and I match things up. What did I learn?
When I was doing my most recent review – when I turned 28 – I flipped back through my blog posts in August 2010, and I started just reading forward. As I went through things, I was, like, “Oh yeah, this was the year that we disassembled the washing machine and managed to successfully put it back together!” Yes. We had to do that to get the 27″ machine down a 26″ hallway or something like that. Anyway. It was quite an adventure, and the blog post is on my blog, of course. Little things like that, that I might otherwise be really fuzzy about remembering (“Oh yeah, we did this some time ago, but I don’t really know when”)… It was there, in my blog, and it reminded me about other things. Reading about all these things reminded me about things I hadn’t written down, but which has happened anyway. It’s like being able to take a step back and bring up all those different feelings and ideas and memories. It’s a fantastic thing, and I would never have thought that I’d enjoy writing that much.
Yearly digests. Even if you really just stop, look at what you’ve done, celebrate all these memories… See what you’ve learned that you can share with other people. Then think, okay, what do I want the next year to look like? What are some of the ideas here that I want to build on?
I’ve actually moved away from having bucket list sorts of goals. You know how people make lists: I want to climb Mount Everest, I want to dive in the Great Barrier Reef, I want to eat at a 5-star restaurant… I started feeling like that was like how people collect stuff, except this is collecting experiences. It’s cool for people who do that, but after lots of reflection (also on my blog), I decided it wasn’t really for me at this stage. In terms of saying, “What are the things I’d like to learn next year?” “What are the ideas I want to focus on?” Next year, I want to focus on slowing down and doing things deeply. Doing things well. Writing more. (If that’s even possible…) But writing, and polishing… I’ve gotten good at building things quickly, trying things out quickly… What can I do to make it easier for people to learn from it or make use of it?
Being able to sketch out this idea for myself, and then over the next few months, being able to go back and track how I’m doing with that — whether my goals still call to me or whether I want to shift to something else… Having that written down gives me the ability to do that, whereas doing some hand-waving or letting the months and the days just flow past without any kind of record… This is why people wake up and ask, “Where did my life go?” Well, when I wake up, I know where my life’s going, and I know where my life went, and it’ll be fun figuring out how much more I can do in the years ahead.
After a pleasant weekend bike ride with W-, I thought I’d get back into the habit of biking to work.
I’d stopped in August because I didn’t want to risk damaging my new laptop. During a bumpy trip to the office, W’s previous laptop had bounced unnoticed out of his panniers and onto the road, where several passing trucks flattened it into a pancake. Fortunately, it was a work laptop, so replacement wasn’t difficult. If I damaged my spiffy new souped-up laptop, though, I’d probably regret it a bit. (Yes, stuff is stuff, but it’s okay to be cautious.) So I commuted via subway, wheeling along a small suitcase with my personal laptop and my work laptop.
The small suitcase’s wheels finally gave out, and I switched to bringing a backpack. It was tough with two computers, but fortunately I received a much-anticipated hardware upgrade at work. Because my new work laptop could handle running my development virtual machines and the programs we needed for work, I started leaving my personal laptop at home. This meant that I could bike into work if I wanted to.
I biked to work once. The next day, up much earlier than sunrise, I thought about whether I should just give in to the idea of getting a public transit pass instead of trying to tough it out and bike for as long as possible in November.
Biking: Exercise; ease of doing errands; will still prefer to take transit when rainy or snowy
Public transit pass (Metropass): $121
Public transit tokens: 40 tokens at $2.50 = $100, plus extra tokens if I need to go to the client site and the office on the same day.
Because a Metropass was not much more expensive than paying for public transit tokens, using the pass is more convenient than juggling tokens, I decided to go for a pass. Work covers the expense, but even if I were paying for it myself, I’d probably still make the same decision. With the transit tax credit of 15.25%, the after-tax cost comes out to around the same as buying tokens for weekday travel, and weekend travel would be a bonus.
I’m going to take the subway this month, although I might still bike if the weekends are pleasant. I’ll use the time to listen to podcasts like the Psych Files (behavioural psychology = hacking your brain) or to draft posts. Maybe I might even pick up a few more books for my Kindle. We’ll see. =)
I realized that I was feeling conflicted about tracking my time because I treated the numbers as prescriptive statistics instead of descriptive ones. “I should work around 40 hours a week, or I might be letting it tempt me away from other things in life.” “I should sleep around 8 hours a day.” It meant that I spent a little bit of extra mental energy keeping things in check, particularly in resisting the urge to work just a little bit more.
This week, I tried not thinking about time and just working on whatever felt like the most valuable thing at the moment. By suspending value judgement, I could see what it’s like to work without that friction – to track time as a way of describing my day, without feeling odd about how I actually spend it.
I ended up working 54.4 hours last week. I slept 6.9 hours a day. With the brakes off, I still managed to spend 35.9 hours on discretionary pursuits (close to another week’s total of 37, but not as high as a total of 45.4 hours during one of my late-night weeks).
I can’t cut out the value judgment, though. Even when I’m not comparing it with some arbitrary number like 40 hours of work, I can tell something’s a little bit off.
I’m not under any strong pressures at work, but coding is just so much fun and I keep wanting to fix just one more thing. It’s easy to focus on work because there’s a good pay-off for doing things earlier rather than later: more functionality to demonstrate to clients, more things to get feedback on, more awesomeness.
I’m happy, but I’m a little fuzzy and I had an out-of-sync moment last Thursday (forgot that W- was planning steamed buns for breakfast, and delayed my lunch so much that it interfered with supper plans). My lunch times have been moving later, and my wake-up times have been doing so as well. Those are probably good clues that I can be misled by what I feel like working on, and that the brakes are worth the mental energy.
There’s a little bit of that “just one more thing!” frustration I have to learn how to deal with, and some awkwardness with scheduling, and it’s better to fix that now before it develops into the full-fledged kind of work addiction that many people have. Over time, it might get easier, particularly as other skills and interests develop.
But work is fun! And it’s a great way to develop my skills! Awesome clients and coworkers, fascinating projects that help make a difference… I’m growing so much as a developer. My next goal is 100% test coverage, now that I’ve figured out how to use rcov, rspec, and Cucumber. I want to pack as much learning as I can into each project, because it’s so good to be able to learn with this kind of scaffolding.
But I should also focus on learning how to build things myself, and imagining new things, and investing in strategic delegation or elimination of tasks, and building relationships…
It’s okay. I’ll eventually get the hang of this. This is just something many people go through, and some people even figure it out. Burnout is a danger for many people in my profession – interests usually break down before fingers do. So while it’s frustrating to not scratch a mental itch until the next week, and it’s embarrassing to have outstanding bugs, and it’s far too much fun to check things off a list, I’m going to keep working on slowing down.
[X]Work on project O: write more tests
[X]Project O: get e-mail templates finally sorted out
[X]Get project T closer to launching – chased down a few more bugs
[-]Work on Lotus Connections Toolkit migration – some more work needed
[X]Have Maira and Scott over for board games?
[X]Help out with home renovation planning
[X]Follow up on things Mom was interested in
[X]Make lots of food
[X]Continue tracking stuff
[ ]Give a presentation on automated testing
[ ]Get project T closer to launch
[ ]Finish applying the theme for project O
[ ]Set up production environment for project O
[ ]File expenses
[ ]Host another study group
[ ]Help out with home renovations planning
[ ]Add contexts to stuff-tracking
[ ]Get system ready for Quantified Self demo
|Activity||Sat||Sun||Mon||Tue||Wed||Thu||Fri||Total||Average||Weekday average||Weekend average|
|Activity||This week||Last week||Delta||Notes|
|! Personal care||14.8||22.2||-7.5|
|! Unpaid work||14.8||16.2||-1.4|
|A – Sleep||48.1||50.7||-2.6|
|A – Work||54.4||46.5||7.9||Time came from not biking|
|D – Drawing||0.1||0.1||0.0|
|D – Other||12.4||9.4||3.0||Work on quantifiedawesome.com|
|D – Personal||0.1||0.6||-0.5|
|D – Reading||2.5||4.9||-2.4|
|D – Shopping||2.1||-2.1|
|D – Social||16.1||4.3||11.8||help with homework and study group; board games with Maira and Scott|
|D – Writing||4.6||11.1||-6.4|
|P – Eating||1.8||1.9||-0.1|
|P – Exercise||3.7||11.3||-7.7||used Metropass, but started walking from one station away|
|P – Routines||9.2||8.9||0.3|
|UW – Cooking||6.1||9.0||-3.0||beef bulgogi experiment|
|UW – Tidying||6.9||4.6||2.3|
|UW – Travel||1.8||2.6||-0.8||Worked at home 2 days this week|
Next week, I want to sleep more, work less, and channel some of that extra time back into discretionary work.
The security guard looked at our tickets and said, "Congratulations! You’re at the wrong terminal!" – but so cheerfully that it took the edge off my panic.
I scrambled to find my cellphone. I called my parents, who had dropped us off. "Eep! Terminal 3!" Fortunately, they weren’t far off. More hugs, a quick un-pile and re-pile of luggage, and we were at the (relatively) new Terminal 3. We had flown out of and into that terminal for our domestic flights, so I was familiar with it, but this is the first time we’d flown out of it for an international flight.
Anyway, it stuck with me a little. =) It’s fun to see people having fun at work.
A month is a good size for experimenting with life. This month, I’m focusing on having a place for everything and everything in its place.
Brains are bad at recall. Infrequently-used items fade into the fog of memory, like the loyalty cards and IDs I stash in a sometimes too-secret place. Frequently-moved items end up with confused associations: did I leave my belt bag on top of the dresser, or is it on the kitchen table? Under stress, recall is an even more difficult task, and it’s easy to glaze over and miss something when you’re trying to think of where else it might be.
Dean Vaughn’s How to Remember Anything has great tips on making object locations more memorable by visually exaggerating the association between an object and its location. For example, if you put your keys on the table, imagine locking your door with the entire table. The unusual association will probably make it easier to recall one-off locations, but
There’s the classic advice to have one place for everything, and put everything in its place. This works if you have foresight, discipline, and an organized space. Our house looks more like like a Martha Stewart centerfold… the “before” picture.
Because I’m a geek and I’m tired of rummaging through the house for things I’ve misplaced, I added a simple system for tracking things to my home dashboard. I’ll start by tracking the things that frustrate me the most. Infrequently-used things like loyalty cards and passports, frequently-moved items like my lunch bag or my mouth guard…
On my dashboard, I can see what’s out of place and where it should be returned. Here’s a screenshot from November 4:
I can view a summary and do some quick updates:
The detail page makes it easy to see where something is, change an item’s location or view other things that are associated with it. Here, my keys are in my belt bag, which is on the kitchen table.
I’ve just added this idea of a context, which groups together things. This way, I can check whether everything’s in the right place, and I can mark everything moved in one go.
Slowing down and tracking things might help me improve my peace of mind. Even if I don’t always update my system, I think seeing a list of possible locations will help a lot. A table of stuff, current locations, and home locations will also make it easier to ensure that everything has a rightful place. I can identify things that are out of place and where they should be returned, which would be great for daily and weekly sweeps.
I think this would be even better if I built an Android app, as sometimes web access from my Android is slow. (Or maybe it’s my web hosting: I’m using too much memory, so I’m swapping out.)
I hope to collect interesting data over time. Maybe usage stats will tell me what’s worth improving or eliminating. Maybe this is something I’ll discontinue after a month, or maybe it’s something I’ll open up for wider use. Who knows? I’ll give it a try to work out the usage patterns, then maybe I’ll look into tweaking my personal dashboard so that people can try using it to track their own lives too.
Like this? Check out my other self-tracking posts.
One of the great things about spending time with my family is seeing them with old friends, the kind of friendships developed over decades and despite distance.
Mel Chua shares this poem by James Hayford:
Time to plant trees is when you’re young So you will have them to walk among – So aging, you can walk in shade That you and time together made. – James Hayford, "Time To Plant Trees"
Greg Wilson writes about friendship and running partners in life:
In the end, the search for that feeling is the common thread through
almost everything I’ve done. … We are none of us long in this life,
and I think we all want to believe that when we have to run our last
lap, we won’t have to run it alone. I think we all want friends to
keep pace with, day after day, while we’re alive, so that we can be
sure that someone will be out there, still running, when we’re not.
I want to enjoy and be inspired by great friendships through the decades. It’s easy to be insular, but if no man can really be an island (or at least be healthy doing so), I might at least be a peninsula. =)
Speaking of planning ahead, Trent (The Simple Dollar) has great advice on what to do at life’s crossroads. Living a frugal life and keeping expenses down means that we can take more risks, yay.
Photo © 2006 lincolnian, Creative Commons Attribution ShareAlike License
IBM benefits include an allowance for massages by registered massage therapists (RMTs), and I try to make the most of it each year. I like getting massages for preventive care. I want to know about bad habits before they warp my posture or worsen into injuries. Massages are also a great way to learn more about muscles, habits, and how the body is structured. They’re relaxing, too, but that’s icing on the cake.
I’ve been having my massages at The Well of Alternative Medicine since 2008. We started going there because we knew Marta, the owner, from krav maga. W- used to get his massages from Marta. I’ve been working with Shelagh Albert for my massages, so she’s used to my asking lots of questions.
It can be difficult to stay awake during a good massage, but I try to pay attention to the kind of feedback that the massage is giving me. In particular, I’m looking for tense muscles and stubborn knots. I often ask Shelagh to recommend some exercises I can do in order to stretch and relax those muscles.
I pay attention to the height of the tables I work on because I spend a lot of the time at the computer, and I don’t want to end up with a tense neck, hunched shoulders, or repetitive strain injury. I asked Shelagh to focus on my neck and shoulders so that we could see if my new work conditions (more work at the office or on client sites instead of at home) affected my posture or neck muscles. She found that I was generally okay, although my upper trapezius was a little tense. She recommended some sideways neck stretches.
I also typically have tight spots in my gluteus. I asked her how much of that might be caused by sitting with crossed legs versus how much might be caused by sitting a lot. Shelagh said that I don’t have any particularly bad habits, but many people who sit a lot have the same issues, and that some stretches would help. I may also see if I can create a makeshift standing desk setup at the office or at the client setup, and streamline so that I’m carrying one laptop (or even no laptop, just lunch!).
I’m pretty good at remembering to stand up and stretch, a side benefit to my habit of drinking plenty of water (around 2.5L per day). If I tack the stretches onto that habit, then they might become part of my routine too.
You can get more out of your massages by using them for physical feedback and behaviour modification. Have fun!
Massage photo © 2009 Nick Webb, Creative Commons Attribution License. Image of trapezius from Gray’s Anatomy lithograph, now public domain.
Hat-tip to Holly Tse for organizing this interview!
Holly Tse: I actually wanted to ask you, speaking of looking forward and looking backwards, since this is a telesummit about Asian women owning your voices and sharing their voices with the world… Where were you born and what is your ethnicity?
Sacha Chua: I grew up in Manila. My mom and my dad and my middle sister are still there. It was actually very difficult to move to Canada in the first place. Coming from a tropical country from the Philippines… Oookay, winter is really scary. Anyway, I grew up in the Philippines. I love love love all sorts of things that I miss from there. Mangoes, and my friends, and all of that stuff… And of course, family and relatives… anyway, so. The Philippines! And Canada! Now I have two homes. I’m definitely Filipino. I will still cook with bagoong and patis and try to get by with… In Toronto, it’s fantastic. You’re surrounded by all the different ethnicities. I always hear Filipino accents around. It’s like being home except it occasionally gets cold. Anyway, that’s my story. I moved to Canada in 2005 to pursue my master’s because I was offered a scholarship, and hey, why not… And then I fell in love, which is rather inconvenient when you’re planning to move back home. So that kinda helped me tough it out until I discovered the trick to dealing with winter.
The trick to dealing with winter, by the way, is to call it baking season, and then to bake.
HT: Yeah, I’m originally from Toronto, I know how cold winter can be up there. I’m in California now, so I’ve turned into a softie now.
SC: You get no sympathy from me whatsoever if you complain about the weather. Anyway, that’s another the blog has really helped me. I’ve been writing about all these stories. I can tell how I grew out of most of my homesickness. Still hits every so often, but I can see those shifts. I can use these stories to keep in touch with my friends back home, and to make new friends here as well. It’s been really, really helpful for me. Even with Facebook and Twitter and Google Plus and all these other social networks, there’s still that need for a place to tell your own stories, share your pictures, and have these conversations without it being fragmented over all these different places.
I was glad that I’d gotten into writing, especially during those difficult times. I’m sure that whatever challenges come in the future, I will try best to write my way through them.
Mel Chua asked about my experience with tablets, so I thought I’d look at the results of getting a Lenovo X220i tablet PC last August.
J- needed a replacement laptop, so I passed along my Lenovo X61 tablet and took the opportunity to buy a new Lenovo X220i tablet. I kitted it out with maximum memory and a decent (but not solid-state) hard drive. For a while, I did my work development on it as well. After my work laptop got upgraded, I switched to using the new work laptop for development and work mail. Now I use the X220 for drawing, writing and personal projects.
The X220 arrived on September 1. From September 1 to October 27, I used it for work and life. My work laptop arrived on October 27. Here’s how that time breaks down:
September 1 to October 28 (58 days, 443 hours)
and occasional use during our trip to the Philippines
October 29 to November 4 (7 days, 21 hours; day before time of writing)
464 hours so far (probably undercounted)
Total cost so far $1300 = ~ $1150 + memory and hard drive ~ $150?
~ $2.80/usage hour (not including electricity, etc.) over 65 days
I think it’s definitely worth it, especially considering it’s only been two months. If I assume use of about 2-4 hours each day, that’s about 900 hours for the rest of a full year or a total of 1360 hours or so, which brings the cost per usage hour to about $1. If I use it for two or more years before replacing, cost per usage hour goes down even more.
I haven’t done as much drawing with the new computer as I thought I would, but that’s because building a personal dashboard has been filling my spare brain space, and I’ve been drawing on paper too. I should see about building in a routine of regular drawing lessons and exercises.
Other stats: I’ve been using the free Workrave program to remind myself to take breaks. One of the side benefits is that it can also report on some usage statistics, such as keystrokes and mouse clicks.
Keystrokes are reported using the axis on the left, and mouse clicks are reported using the axis on the right. For ease of comparison, I’ve made the keystrokes scale ten times bigger than the scale of the mouse clicks. This tells me that how much I kept using my X220 for programming while I eased into using the X420 (so my work hours are undercounted in the table above), and that I used the X220 very lightly during our trip (October 4 to October 15).
Total number of keystrokes: 2,287,106, or around 450,000 words if I were typing just words instead of programming, navigating my system, deleting and replacing stuff, and so on. I’m surprised to see my mouse stats: a little over 1 mouse click for every 20 keystrokes. I’m not entirely sure how Workrave handles tablets, so a lot of that might come from drawing. Unfortunately, I don’t have stats from my X61 – it might’ve been interesting to do a comparison and see if I did end up using it much more.
Also, I now have even more appreciation for the things I can do with time-tracking and Workrave data. =) Yay multipurpose or effectively free data! Who knows, maybe I’ll even set up things like ManicTime so I can automatically track at the application level.
J- is delighted with the hand-me-down X61 and has been doing her homework on it. She’s even started taking it to school. She draws with it, too. It’s getting a lot of good use.
Conclusion: Good decision. Would make the same decision again if I needed to. In fact, would have probably gotten a new tablet at an earlier decision point. =)
Other tablet notes for helping people decide:
If you need the finer resolution, pressure sensitivity, and visual feedback of a Cintiq, it’s a terrific pro tool. If you don’t mind not being able to see your screen and you’ll usually have a flat surface to work on, a small tablet is a less expensive experiment. Tablet PCs are much, much more awesome, though – portability means actually using it more often!
History: I saved up for the Cintiq because I wanted the reassurance of being able to see what I was drawing without having to rely on hand-eye coordination. I also reasoned that keeping the drawing functionality separate from processing (so a tablet instead of a tablet PC) would make it easier for me to upgrade the processor/hardware specs, because I could just upgrade the computer it was connected to.
Getting the Cintiq was a good decision at the time. It helped me learn how to draw more quickly and more confidently. I ended up spending my drawing time downstairs, though, so I bought a small Bamboo Pen + Touch for portable experiments. I used that one from time to time on the kitchen table, but I found myself rarely using it elsewhere because I needed too much desk space, and the separated visual feedback wasn’t much fun. When I got an X61 second-hand, that was amazing, and I had much more fun drawing with it. Later, I crunched the numbers and realized that buying a current Lenovo X220 cost about the same as buying a used X61, replacing the battery, and adding other stuff. When J-’s old laptop broke, we decided to pass my X61 down to her, and I got an X220. (Which is awesome!)
In short: a tablet PC was more than worth it for me, and way more fun than a regular PC or a regular tablet. I’d recommend that as the path of least regret, although not if it involves going to debt or eating unhealthily. A small drawing tablet is a decent way to experiment, but it’s not very portable. The Cintiq is not portable at all, and doesn’t get you that much more compared to a relatively recent tablet PC. Hope that helps!
Good week! Lots of progress on coding and testing work projects as well as Quantified Awesome. Getting there…
[X]Give a presentation on automated testing
[X]Get project T closer to launch
[X]Finish applying the theme for project O
[X]Set up production environment for project O
[-]File expenses – postponed
[X]Host another study group
[X]Help out with home renovations planning
[X]Add contexts to stuff-tracking
[ ]Project O: Get ready for big demo
[ ]Project O: Get to 100% test coverage
[ ]Project T: Bugfixes, final round of testing?
[ ]File expenses
[ ]Move flashcard app to internal host
[ ]Get ready for flashcard demo
[ ]Go to Rails Pub Nite on Monday
[ ]Host study group
[ ]Build memories into Quantified Awesome
[ ]Work on user support for Quantified Awesome
[ ]Simplify stuff interface – what would it take to make it a system my mom can start using?
[ ]Get ready for Quantified Self Toronto demo
[ ]Fix mobile version
Okay! I decided to work less and sleep more, and I did. I still got plenty of stuff done at work (lots of development, a presentation, and more!). Interestingly enough, discretionary time was down a little from last week, even though it felt like I had more free time. Oh, that was because I counted repointing the bricks on Saturday as exercise time, although it could also be filed under social.
|Activity||Sat||Sun||Mon||Tue||Wed||Thu||Fri||Total||Average||Weekday average||Weekend average|
|Activity||This week||Last week||Delta||Notes|
|! Personal care||22.2||14.8||7.4||More exercise|
|! Unpaid work||11.2||14.8||-3.6||Less cooking|
|A – Sleep||58.7||49.1||9.6||Yay more sleep (more than a full night of additional sleep, even!)|
|A – Work||41.7||54.4||-12.7||Keeping it within reasonable bounds|
|D – Break||8.2||8.2||This is all LEGO Harry Potter…|
|D – Drawing||0.9||0.1||0.7||A little bit of planning for the website|
|D – Other||7.5||12.4||-4.9||Lots of progress on my Quantified Awesome project!|
|D – Personal||3.6||0.1||3.5|
|D – Reading||0.5||2.5||-2.0|
|D – Shopping||1.6||1.6|
|D – Social||9.4||16.1||-6.7||Study group|
|D – Writing||2.4||4.6||-2.2||I should write more blog posts about what I’m learning|
|P – Eating||4.9||1.8||3.1||More relaxed meals|
|P – Exercise||9.2||3.8||5.4||Repointing, lots of walking|
|P – Routines||8.2||9.2||-1.1|
|UW – Cooking||5.1||6.1||-1.0|
|UW – Tidying||2.9||6.9||-4.0||Should do more tidying up today|
|UW – Travel||3.2||1.8||1.4||Commuting to work every day|
I think I’m on the right track. Next week will probably involve more socializing (Rails Pub Nite meetup, etc.) and more hacking (getting Quantified Awesome ready for demo on Nov 30), so I might take time away from cooking and playing, and maaaybe a little from sleep.
I totally fell off the waking-up-early bandwagon. I think that’s due to playing LEGO Harry Potter, because I ended up going to bed around 11:30 instead of around 10. I could reset and save the game for weekends, which stretches it out for longer enjoyment.
I could also wait for J- and only play it with her, turning it into a social-ish activity. We’d complete it in a little less time, but playing would be a little less flexible for me. It’s okay, I can just spread it out over time.
Life is good.
Here’s the model I made following the first tutorial in the book and 2.8 hours of learning with W-. It’s fun!
Google SketchUp has a Ruby interface. I wonder if I can use that to visualize my data…
People often ask me why I measure what I measure. I do it because I’m curious, and measurement lets me collect the data I need to answer those questions. For example:
There might be long-term advantages to tracking, too. I’ll be able to see trends and changes that might not be noticeable day-to-day. I can use data to support longer-term decisions. I can get better at estimating and dealing with risks, costs, and benefits.
It doesn’t cost a lot of time or attention to track. For example, I prefer to manually track my activities using an app on my smartphone (Time Recording for Android Pro, although there’s a free version). It takes me a few seconds to switch activities, and I do that as I’m heading out the door, waiting for the subway, or doing other things that don’t need a lot of attention. It does take some time to analyze my data, particularly as I build many of my own tools. That also counts as professional development time (Ruby on Rails, visualization, etc.), though, so it might even be more of a benefit than a cost.
I love reading about behavioural psychology, economics, and other sciences that illuminate our predictable irrationality. I can see how I compare in terms of sleep, leisure, and other areas that researchers have explored. It’s fun finding patterns and getting a sense of what lies ahead.
What could help me take this to the next level?
I’ve started sharing work in progress to motivate myself to track data. This also makes it easier to refer to data and visualizations when sharing observations. The more I add to it, the more I come up with ideas for improving it.
I’d like to organize my posts better, so that you can easily find experiments and ongoing observations. It will also help me see what I’ve changed and review my decisions.
I’d like to write more about how people can try things out themselves, and build publicly-available tools to simplify analysis. That way, I might get to learn from other people’s observations and be inspired by the changes they make.
Reading primary research would be great, I think. I can find some papers online, but not all. Summaries in popular psychology books often skip the details, like the methodology the researchers used. I’ll see which journals are carried by the Toronto Public Library. I can also try writing to the authors to ask, or I can look into getting a digital subscription to the University of Toronto’s Robarts Library ($79.10 for six months or $135.60 for one year, mostly access to ProQuest 5000).
I also want to connect with other people who also measure and experiment. I like going to the Quantified Self Toronto meetups, sharing my experiences and ideas, and following up with sketchnotes of those sessions. Edison and the Quantified Self forums might be good ways to connect with people outside Toronto as well.
Plenty of room for growth!
Drupal / Rails development: John (from john & cailin) posted good interview tips for hiring Drupal developers. A comment in the blog post led to this funny learning curve graph, which reminds me of the Emacs learning curve. There are similar hiring tips for Rails developers.
I like the work I’m doing at IBM (mostly nonprofit projects funded by IBM grants, yay changing the world!), but it’s interesting to see lots of demand for Drupal and Rails skills. I want to get wizardly at Rails and/or Drupal, and I think this will be fun.
Winter vegetables: Thanks to the community-supported agriculture program, we have three butternut squashes, one pepper squash, lots of turnips, and lots of kale. We’ve just gotten through turning all those beets into borscht. I’m learning about all these winter vegetables. Fortunately, Cheap Vegetable Gardener has tips on what to do when you’re swimming in kale, beets, squash, mustard, or chives.
Connecting with people: A post from Linked Intelligence on social networks and relationships led me to the Mackay 66 Customer Profile – a 66-question template that you can use to gradually flesh out your knowledge of a person. I like questionnaires. I think this will help me get better at talking to people – I can pick one or two questions to focus on, then gradually fill in the blanks. Maybe I should build a CRM into Quantified Awesome…
Publishing an e-book: Allison Abel shares tips on publishing your own e-book. I’m collecting data and ideas for a possible mini-book on quantifying life and changing behavior, so I’ll want to come back to this post and other tips on this topic.
Spending money well: Jason Chen points out that you may want to spend your money where you spend your time. Fortunately, I track both time and money, so I can tell if my priorities line up. =) (Good laptop? Yes, worth it!)
One of the things I really like about Rails is the ability to add to existing classes so that your code can be cleaner. For example, in the app we’re working on, I need to be able to display a list of offers associated with an organization. I also need to filter that list of offers by different criteria. If the user is not in tutorial mode, I need to filter out any tutorial-related offers. I want to show offers with different workflow states, too.
If I had to do this in straight SQL, I would need to write many queries to cover the different cases, or write my own query-building engine that takes conditions into account. In the Drupal world, I might try to build a View with lots of arguments, and then use a
views_pre_execute hook to monkey around with the generated SQL.
In the Rails world, things are much simpler. I started off by chaining queries, because you can add conditions to the end of an ActiveRelation and go from there. That gave me code that looked like this:
base = Offer.includes(:donation).where("organization_id = ? AND (donations.deadline IS null OR donations.deadline >= ?) AND (NOT (offers.workflow_state IN (?, ?, ?)))", @organization.id, Time.now, Offer::DRAFT, Offer::ALLOCATED, Offer::CONFIRMED).order('offers.deadline') @direct_offers = base.where("offers.workflow = ?", Donation::DIRECT) @open_offers = base.where("offers.workflow = ?", Donation::OPEN)
Then I asked myself: How can I make this code even cleaner? I thought about adding instance methods. For example, in my Organization class, I could define the following:
class Organization # Other stuff goes here def current_offers self.offers.includes(:donation).where("(donations.deadline IS null OR donations.deadline >= ?) AND (NOT (offers.workflow_state IN (?, ?, ?)))", Time.now, Offer::DRAFT, Offer::ALLOCATED, Offer::CONFIRMED).order('offers.deadline') end def current_offers_by_workflow(workflow) self.current_offers.where("offers.workflow = ?", Donation::OPEN) end end
That would allow me to replace the code above with something like this:
@direct_offers = @organization.current_offers_by_workflow(Donation::DIRECT) @open_offers = @organization.current_offers_by_workflow(Donation::OPEN)
… so if I wanted to filter out tutorial entries, I could do that in
def current_offers by adding a where clause for the tutorial column.
But it seemed clunky to have to specify all these instance methods in order to filter by different ways. What I really wanted was to be able to chain my custom filters together, so that I could write code like this:
@direct_offers = @organization.offers.filter(current_user).direct @open_offers = @organization.offers.filter(current_user).open
and then eventually be able to do things like:
list = @organization.offers.filter(current_user).current.direct.allocated
(If I really wanted to.)
I couldn’t figure out where to add the methods so that they’d be defined in the right place. If I added the methods to the Organization class, they couldn’t be called on the ActiveRecord relations. A little bit of searching, and I figured out how to do it in Rails. It turns out that you can extend ActiveRecord relations with your own methods! Here’s how.
You’ll need to extend ActiveRecord::Base with your own methods. I put this in
module ProjectNameActiveRecordExtensions def filter(control) exclude_tutorial = true # Include the tutorial offers for users in tutorial mode if control.is_a? User and control.tutorial exclude_tutorial = false # You can also pass filter(false) to turn off these filters for testing elsif !control exclude_tutorial = false end if exclude_tutorial scoped.joins(:donation).where('donations.tutorial=?', false) else scoped end end # other methods go here... end ActiveRecord::Base.extend ProjectNameActiveRecordExtensions
The trickiest part was figuring out how to do a conditional filter, and that’s what
scoped is for. I wanted to include the tutorials if the user was in tutorial mode, so my function should be a pass-through in that case. I couldn’t return self or nil, because that broke the associations.
scoped turned out to be the magic keyword that refers to the current scope of the query.
What if you want to use the same words in different contexts? For example, “pending” might need to result in two different queries depending on whether you’re asking for pending offers or pending requests.
ActiveRecord::Base is used for all classes, but you can use
self to find out what class is being used for scoping. For example:
def pending if self == StandingRequest scoped.where("standing_requests.workflow_state=?", StandingRequest::PENDING) else # Replace with other cases as I find the need for them raise "Undefined behaviour" end end
I love the fact that Rails lets you modify so much in order to make building sites easier. It’s like Emacs for the Web, and it makes my brain happy.
Hat-tip to Holly Tse for organizing this interview!
Holly Tse: This is a question that probably is worth asking again, because Charles has sent another question about your recommendation if you should write every day, or every week, or just write when the fancy takes us. He says, “I know that having a regular deadline or writing quota has a positive benifit.” Do you use any deadlines or quotas when you’re writing your blog?
Sacha Chua: In terms of choosing a quota for my blog – and I have a blog post about this called “One post a day” – my quota is actually in the reverse direction. I found myself so excited that I was writing so much… I thought, well, all these people are getting e-mails, and they’re subscribed to all this stuff… Maybe I should throttle it down to one blog post a day. If you stop and you think about it, you learn so much each day. You experience so much each day. If you don’t have at least one thing worth writing about each day, there’s more in your life that you can hack and improve. There’s so much going on each day. For me, blogging has become such a useful tool that I like writing every day.
Some days are a little slower than others. Maybe I have a hard time grasping for the right thing to say. I’ve posted my thoughts on grocery shopping, for example. For the most part, I just sit down and I think, “What did I learn today that somebody else might want to learn?” “What do I want to do to make things better the next day?” There’s always an opportunity to do this.
It all depends on your comfort level. You can write every week, every month, sporadically if you want to… On the other hand, if you flipped it around and you stopped thinking, “I’m going to have to blog; what do I blog today?” and you think, “Well, there’s so much happening in life; what do I want to write about most? What do I most want to remember? What do I most want to share?” You’re surrounded by stories. You’re surrounded by ideas. Then you just have to deal with the frustration of not being able to get it all out and into other people’s heads as easily as you want to do so! There’s just so much to write about. Write as often as you can. Write because it helps you, not just because you need to. Write as a way to have fun, and learn more about yourself and life and everything.
HT: Good answer. Basically, whatever works for you.
SC: Whatever works for you, but you know, this writing daily thing is actually really really awesome. Of course, I’m going to be nice. I’m not going to stand over you with a whip and say, “Back to work! You haven’t written your blog post for the day.” But life is just full of awesome amazing things. Even though it seems like sitting down and writing for fifteen minutes or thirty minutes is an interruption that takes you away from your day, if you flip it around–if you write in the process of doing something…
For example, if I’m working with a particularly knotty programming problem or I’m trying to figure out a difficult decision, I’m not waiting until the end, when I’m busy and other things demand my time; I’m writing in the process of figuring things out. Then, afterwards, it’s just: Can I tidy these notes up and share them with other people? Which parts am I saving in my private notes, and which parts am I sharing on my blog? That takes five minutes, ten minutes to clean things up for other people after I’ve been writing in the process of learning.
Something I’d recommend too: don’t just sit down and think, “I’ve got to write a blog post; what am I going to write about?” Use it to learn. Use it in the process of living. Then decide: Is this something I can share with other people? What can I do to this so that I can share it with other people? Then you’ll find that your life is full of material.
I started using Posts Calendar to plan my blog while preparing for our trip to the Philippines. I wanted to schedule posts, and I also wanted to neatly organize a 15-part blog series so that people knew what to expect. Even after we returned from our trip, I continued using Posts Calendar to organize my posts into rough themes.
Before I started using this editorial calendar plugin, I mostly managed my posts using a modified WordPress post index that gave me some additional information. I wanted to avoid flooding people with lots of posts, so I set it up to warn me if I’d double-posted and also if I had gaps between posts. This is what that interface looked like:
With Post Calendar, my admin interface looks like this:
It’s much easier to move posts around, to see gaps, and to get nudged into making patterns. Hence: quantified self / tracking posts on Mondays, blogging-related tips on Thursdays, decision reviews on Fridays, and weekly reviews on Saturdays or Sundays depending on when I get to do them. Tuesdays are a good time to post other bits and pieces, like items from feeds and books, or a round-up of other thoughts that don’t merit their own blog posts yet. Sundays might be for telling stories from life.
This involves more structure than I’ve used on my blog in the past. I started by posting notes as soon as I wrote them, which was a little overwhelming. I limited my blog to around one post per day, but the occasional topic sprints (Emacs week! Drupal week!) were probably less useful to a mixed audience. (My mom skips most of my geek posts, although she occasionally checks out a few.) With this kind of plan, I think I’m making it easier for people to pick which topics they’re interested in and tweak their reading habits without necessarily learning the ins and outs of category-based feed subscriptions.
The plan helps me remember to write about different parts of life, too. Like the way status meetings help motivate me to make regular progress each week on projects, regular blog posts nudge me to keep moving along. It’s a little like the 20-mile march described by Jim Collins and Morten Hansen in the recently-published book Great by Choice. Regular progress can be much more effective than sprints and waits. Knowing I want to post something about self-tracking every week, I make time to work on my systems and analyze my data. Knowing I want to review a decision or think through a future decision every week, I keep an eye out for opportunities to do so. I should dedicate a day to sharing things I’m learning at work, so that I get into the habit of posting those regularly as well.
Because I tend to write about what’s going on in my life today instead of trying to write “timeless” articles, sometimes I feel odd about posting screenshots or stories that might be dated. I still keep personal notes in any sort of order, so I’m not losing stories or ideas because of the blog structure. The value I get from reviewing chronological printouts is a bit lower now that blog posts are less tied to the time they happened, but I might play around with other methods for supporting memories. Despite the disadvantages, I think the system is working well for me.
Conclusion: For me, this is a good decision so far. A possible next step is to post more frequently if I find myself getting a big backlog and if my rate of writing is much higher than my rate of posting. I treat “one post a day” more as a guideline than as a rule, anyway. =)
What’s it been like for you? How can I tweak my blog to make it even easier for you or other people to enjoy it? If you blog, what are your experiences with planning or scheduling posts?
We’re getting ready to launch a big project, so I’ve been working overtime. The Ruby on Rails system is coming along well, and our demo on Thursday went wonderfully. Although I’m torn between spending extra time on that versus other projects (Quantified Awesome or the Lotus Connections toolkit, for example), I’m learning a lot and I want clients to be delighted, so it’s okay for now.
I had a lot of fun at the Rails Pub Nite on Monday. It turns out that I know many people in the Rails scene, and I enjoyed hanging out with them.
A couple of weeks of crunch, and then life should be back to normal-ish.
[X]Project O: Get ready for big demo
[-]Project O: Get to 100% test coverage – at 92%
[-]Project T: Bugfixes, final round of testing? – mostly there, check again Monday
[X]Move flashcard app to internal host
[X]Get ready for flashcard demo
[X]Go to Rails Pub Nite on Monday
[X]Host study group: long division, repeating decimals, views of 3D objects, nets
[-]Build memories into Quantified Awesome
[X]Work on user support for Quantified Awesome
[-]Simplify stuff interface – what would it take to make it a system my mom can start using?
[-]Get ready for Quantified Self Toronto demo
[X]Fix mobile version
[ ]Project O: Get ready for launch
[ ]Project T: Get closer to launch
[ ]File expenses
[ ]Work on Connections Toolkit
[ ]Clear furniture so that insulation can be installed
[ ]Go to Quantified Self Toronto meetup
[ ]Add memories to Quantified Awesome
[ ]Get Quantified Awesome ready for other users
[ ]Take pictures of rest of clothes
[ ]Increase test coverage to at least 60%
|Activity||Sat||Sun||Mon||Tue||Wed||Thu||Fri||Total||Average||Weekday average||Weekend average|
|Activity||This week||Last week||Delta||Notes|
|! Discretionary||29.5||34.2||-4.8||Channelled into work instead|
|! Personal care||14.2||22.2||-8.1|
|! Unpaid work||11.4||11.2||0.2|
|A – Sleep||59.6||58.7||0.9||That’s good|
|A – Work||53.4||41.7||11.7||Lots of overtime; did this instead of playing Harry Potter|
|D – Break||0.9||8.2||-7.2||Less playing this week|
|D – Drawing||0.9||-0.9|
|D – Other||4.1||7.5||-3.5||Slightly less work on Quantified Awesome|
|D – Personal||3.6||-3.6|
|D – Reading||0.5||-0.5|
|D – Shopping||2.8||1.6||1.1|
|D – Social||18.6||9.4||9.2||Visiting family, going to Rails Pub Nite, helping with homework|
|D – Writing||3.0||2.4||0.6|
|P – Eating||2.2||4.9||-2.7|
|P – Exercise||2.9||9.2||-6.2||Hitched a couple of rides, so didn’t walk to the subway station as often as I normally do|
|P – Routines||9.0||8.2||0.9|
|UW – Cooking||3.5||5.1||-1.6||Mmm sweet potato fries|
|UW – Tidying||2.4||2.9||-0.5|
|UW – Travel||5.6||3.2||2.3|
J-‘s schedule is pretty packed these days: homework, high school applications, and the occasional extracurricular (karate or yearbook). We compensate by making time to help out. She learns a lot more with guidance than by floundering on her own, and she works more independently as she gains confidence and skill.
Right now, she’s working on her Media Studies homework. Their task is to analyze a commercial and create a multimedia response to it, identifying the marketing strategies that food companies use. The multimedia commenting tool was a little frustrating in the beginning, but she’s starting to get the hang of it. We helped her figure out some of the intricacies of the tool, and we helped her refocus when she was getting distracted. Now she’s planning her comments so that she can record things smoothly.
I’m getting better at helping without getting impatient. Sometimes it’s difficult. I bite back suggestions. I remind myself that the purpose of the exercise isn’t to come up with the best results, or to learn a lot about behavioural psychology and marketing. The exercise is so that she can become a little more aware of the marketing strategies that try to convince us to buy things, and so that she can learn how to learn about a new tool.
We provide a little scaffolding. We walk through the tutorials with her. We give her some suggestions on how to edit and trim her drafts. We help her get over the technological humps. The end product must be completely hers, though, because it’s much better to have an average result that she feels she truly owns than an excellent result that she feels confused by.
We’re also trying to help her learn how to manage her time and energy. Like many people, she shows frustration and elation clearly in her face and in her posture: slumping when she runs into problems, brightening up when she solves them. The odd thing is that both are self-reinforcing states. It’s hard to solve problems when you’re tired and unhappy; it’s easy to deal with life when you’re happy and energetic.
A very useful trick is that of knuckling down and doing something even when you’re feeling blah about it. If not that, then redirect your energy into something that will help you keep moving forward. You can lose a lot of energy to the friction of frustration, or you can use that energy to take the next step.
J-‘s slowly learning the value of choosing her response to work, I think, and that’s a tremendously useful lesson. So we help, but not so much that the path is smooth. A little striving is good for learning.
I like reading about other people’s adventures in self-tracking and experimentation. It’s a great way to pick up ideas and connect with other people. There’s Quantified Self, but it has a handful of authors. One morning, I went through twenty pages of search results in order to put together this list for you and me.
(In case you’re curious, it took me a little over two hours to put this together, and Google Chrome hung twice.)
In no particular order…
One of the risks for this Rails project that I’m working on is that new users won’t have enough ramp-up time before we finish the project. We’re planning to wrap up in December, which is the end-users’ busiest time of year. The project also highly depends on external factors we can’t control, so it might be weeks or even a few months before people get a chance to try the most important parts of the application.
To make it easier for people to get started, we decided to build an interactive tutorial into the system. When people log in, the tutorial should create an offer that they can respond to, walk them through the process of working with it, and then tell them about the next steps they can take. People should be able to stop the tutorial at any time, and they should be able to start the tutorial from the beginning whenever they want a refresher.
People will be on a system that other people use and that generates reports, so all the tutorial information needs to be hidden from reporting and from people who are not in tutorial mode.
I started off by writing a Cucumber test that described how things should work: what people should see, what they could do, and so on.
To keep all the tutorial-related methods in one place, I put them in a file called
tutorial_methods.rb and I included these methods in my controller. I added a conditional div to my
application.html.erb that displayed the tutorial in a consistent spot if a tutorial was specified for the current page. Then I defined a function that took the current page and figured out what needed to be done for a tutorial. This function created a sample offer at the beginning of a tutorial, performed the behind-the-scenes work to approve the offer once people finished the first step, and loaded the tutorial text from the localization file into an instance variable.
I decided to use Rails’ built-in internationalization support instead of putting the tutorial in the database so that it could easily support multiple languages, although I might use a gem to support internationalization of database values if we need to.
To make things easier on the reporting side, I extended ActiveRecord::Base with my own association methods that filtered the queries depending on whether or not the user was in tutorial mode. These custom association methods made it much easier to make sure all the relevant queries were filtered.
I really liked adding an interactive tutorial to this project, and I think I’ll use that technique for Quantified Awesome as well. Online help is good, but it’s even better if people can practice on something and know it won’t mess up anything else.
Library: I’ve been tracking the list prices of the library books I read, and it’s mind-boggling to think that I can go through 1,075 CAD and 10,671 pages’ worth of books from the library just in November. The library is so worth my tax dollars and donations, considering all the other months in the year.
Food: By golly, does the CSA program ever give us a whole lot of vegetables – 39.7 kilos over the 6 weeks I’ve been tracking, or roughly 6.6 kilos per week. The cost per week is $25, giving us a cost of $3.78 per kilogram or $1.72 per pound for organic produce. Granted, quite a lot of that has been in the form of squash (6.2kg so far). I should check out the prices at our neighbourhood organic food store so that I can see what the difference is.
Stuff: I started tracking stuff – actual, physical stuff – as my focus in November. My goal was to have a place for everything and everything in its place, which turned out to be easier when I accepted that the “place” for things might be different based on the context (going to work, home from work, going to bed, and so on).
I got some value out of tracking, but there was a little friction preventing me from making the most of it. Tracking through my web app was fast when I’m returning things, but it took a few more clicks when I’m taking things out of their regular places unless a context is involved. Maybe if I build a native Android app, things will be faster.
My stuff use has settled a bit. I generally don’t need to add new locations for things, and even if I stopped updating, my logs would still tell me where things are likely to be. If I don’t need up-to-the-minute tracking and I don’t need accurate statistics, then my web interface will do.
I did change a few things. I changed the home location of my work laptop to work, which is great because I don’t have to carry it back and forth all the time. I changed the home location of my belt bag from the dresser to the front shelf. I like using the web app to track the location of the Kindle, as that sometimes moves between my backpack to my bedside table, but not so often that it’s habitual.
Clothes: I’m more adventurous when it comes to pairing colours thanks to tracking and paying attention to these things. I’ll wear a yellow shirt with a violet scarf, for example. It might not be an exact match of colours, but it tickles my fancy.
I’ve worn almost everything in my closet, with the exception of two pants that I need to hem and a black velvet top that I haven’t had the occasion to wear.
Time: Time use has swung a bit. An upcoming launch has skewed my time towards work, but I think we’re at the point now where I can ease back into a 40-hour week for more sustainable progress and lower risk of bugs or burnout.
I recently switched to a different way of tracking time, on the suggestion of Andrew Louis. Instead of using Time Recording (which gave me instant reports, although it was useful only for time), I started using Tap Log. This lets me take timestamped structured notes, which also means I can capture more information such as conversations or feelings. On the downside, I have to write my own analysis program to figure out the time spans and totals. Another alternative would be to use Time Recording for time tracking and Tap Log for everything else, but the duplication of effort was getting in my way, so I’ll probably build a tool for summarizing time use from these timestamps in time for my weekly review.
Next steps: adding memories to the system, working with the new timestamp-based system for tracking my time…