Cyborg Planet
For a list of blogs included in this planet, please see PlanetSources.
“Fourteen?!” my husband exclaimed. I looked up. He was talking to J-, who had apparently called from school asking if she could bring her friends over for pie. Fourteen teenagers in total. Two pies. After some hemming and hawing, he agreed, figuring that it was better to have them over than for them to have pie on some street corner.
We scrambled to get things ready. This meant ditching the comfortable bathrobes and breaking out the stack of saucers that I’d accumulated for my tea parties. As the kids tromped closer, W- directed them to the backyard. Although it was cold and the deck was wet, it wasn’t chilly, and there simply was not enough space in the living room to accommodate fourteen sugar-high bundles of energy. So the deck it would have to be.
W- brought the portable workbench out. We put the saucers and forks on the workbench, entrusted the pie server to J-, and stood back as the kids divided the apple pie and the pumpkin pie among themselves. They were apparently celebrating a fundraising milestone: their club had raised $100 for Free the Children. They had been planning the pie party for a month, but had forgotten to figure out where this pie party was going to take place. Fortunately, W- and I were at home and could give permission.
After the pie, the kids brought out their packed lunches. They shared their snacks with each other. Chocolate was the object of much envy, seaweed the currency of cool. They congratulated themselves on their fundraising, and circled around to repeat their oath. (It started with “I like kitties, and turtles too.”) They planned more celebrations for their next fundraising milestones.
It was much less chaotic than one might have expected. The kids tidied up before heading back to school, giving us the saucers and forks with thanks and apologies, and putting other garbage into a large bowl. It was fun hosting everyone, even.
Things that worked well:
- Having lots of saucers and forks, thanks to my tea parties
- Being around in the day for J- and her friends
Things that would make this even better:
- More notice!
- A group shot?
Read the original or check out the comments on: Fourteen kids and an impromptu pie party (Sacha Chua's blog)
For the most part, I'm quite happy with everything that I was able to accomplish last year. I've moved cities (for the second year in a row) and last year I changed jobs twice: in both cases, I think the current will stick for a while. And I'm working on other projects, with some impressive speed. Last year wasn't been great for finishing things, but I guess there's room for improvement this year.
After a fair amount of professional angst I'm finally doing pretty much exactly what I want to be doing: I'm writing a substantial/total revision of a software manual for a company developing an open source database system. I'll leave you to figure out the details, but it's great.
A couple years ago, I said to myself, that I wanted to be a "real technical writer," which is to say, work with engineering teams, write documentation and tutorials for a single product or group of products, and operate on a regular release schedule. I've done a great deal of writing for technology companies: from project proposals and journalism, to tutorials and content for distributors, to white papers, marketing, and sales materials. Delightfully, I've managed to get there, and in retrospect it's both somewhat amazing, and incredibly delightful.
A while back, I had dinner with a friend who's been doing the same thing I do for a long time (we know each other through folk dance and singing,) and by comparing our experiences it was great to learn that my experience is quite typical, both in terms of the work I'm doing and the procedural engineering practice frustrations (e.g. "What do you mean you changed the interface without telling me?!?!")
At work we have this thing where we send in an account of what we did during the day so that other people know what we're working on, and so that we can keep our team on the same page. After all, when you're all looking at computer screens all day, and in a few different time zones, it's easy to loose track of what people are working on.
At the bottom of these emails, we're prompted to ask "what are your blockers and impediments." Often I say something clever like "Compiler issue with Spacetime interface or Library." Or something to that effect. It feels like a good description of the last year.
Onward and Upward!
The more people I talk to about my plans for leaving IBM and experimenting with business, the more real the idea becomes. The more excited and confident I get about it, too, which is a good sign.
Today I sent my formal resignation e-mail, the one that kicks off all the associated HR processes. I named February 17 as my date: four years, four months, and two days after I joined IBM.
I expect to feel more nostalgia as the date approaches, and perhaps uncertainty. That’s all normal, which is why I’m brainstorming and writing down my reasons. The notes will come in handy if I hit a slump. It looks like all systems are go, though. It’s clearly a good idea for me at this point in time.
I’ve found people to take over all of my extracurricular interests. I’ve been braindumping enough throughout my time at IBM to not worry as much about transitions. I’ve always worked on things with the lottery/bus factor in mind: would the project be endangered if I won the lottery or got hit by a bus? (The lottery is highly unlikely, since I don’t buy tickets; I usually look both ways when crossing the street, but one never knows what could happen in the streets of Toronto.) I’ve written lots of notes and shared as much as I could as publicly as I could, and now it’s easy to link things together in a knowledge map on a wiki page that people can even update after I’m gone.
My manager told me of ways back in, and contracting companies that IBM is used to working with. It might be an option. I’d like to spend some time up front seeing if I can develop a business. Freelancing sounds like a reliable alternative, but it’s similar enough to what I currently do at IBM that I think I would learn lots more from trying to build a proper sustainable business with compounding value.
One step at a time. The project that I’m working on looks decent in IE8, IE9, Firefox, and Safari, and it looks a heck of a lot better than it did when I took it over. I’m on track to wrap that up well. Then there’s some HR paperwork to take care of, and more braindumping of memories and thoughts before they fade into fuzziness. Then the transition! Then slowly easing into experiments and feedback cycles and little bets…
Read the original or check out the comments on: Setting things in motion (Sacha Chua's blog)
It’s been four years of awesomeness at IBM. I’ve:
- helped companies and communities collaborate
- facilitated brainstorming workshops with executives from leading companies
- built web apps in Drupal and Ruby on Rails
- created popular tools for community newsletters and analyses
- drawn comics that made people smile across IBM, and
- learned from and shared with people around the world.
It totally rocked. Thank you!
Mid-February 2012, I’ll be on to my next experiment. I want to help people save time and make better decisions. Let’s see how we can make that a sustainable business!
I’m looking forward to learning more about business, and sharing the adventure with you. =)
Stay in touch!
- Blog: http://livinganawesomelife.com
- Twitter: @sachac
- E-mail: sacha@sachachua.com
Stay tuned!
Read the original or check out the comments on: Getting ready for my next experiment! (Sacha Chua's blog)
I have an Aeron chair at my desk at home. Confession.
I got it in April when I moved to New York City. The only piece of furniture that I had that I couldn't move in my (now former) car was my desk chair. I found a good deal on an Aeron chair and I rationalized to myself that the cost of the chair was actually about the cost of movers. Savings right?
It also helped, that I was leaving a job where I had an Aeron chair in my office, and I knew that in the short term I would be working from home. While my old desk chair was (and is) quite nice, it's not quite the same. Sit in an Aeron chair for a couple of two years, and it's hard to go back. I've sat in other chairs since then, and it's never quite the same.
Having said that, after a cleaning incident today, I would like to collect a few gripes about the Aeron chair for your consideration.
The assembly right beneath the chair collects dust and dirt in a proportion that doesn't seem quite possible. It's clearly an artifact of the mesh, and likely a commentary on the air circulation of my apartment.
Regardless, dusting nightmare.
The arms scuff and scratch on desks, if the bottom of the desk isn't completely smooth. This isn't an actual problem: the chair still works fine and is as comfortable as ever, but it's a annoying.
I've never looked at the underside of a desk before seriously. With every other chair I've either ordered a variant sans arms, or I've take then arms off as soon as possible.
The Aeron arms are low enough that they've never bothered me, so I thought "might as well." But it's still annoying.
That's all.
Last January I took apart my computer desk and rebuilt it at standing height. I've been standing at my desk every workday since. Just in my 2011 travels, I've seen standing desks everywhere from the offices of San Francisco startups to the White House.
Over the past 12 months, standing desks went from popular life hacks meme to eyeroll-inducing sign of a certain type of tightly-wound techie, similar to emptying your email inbox. Several people have asked me if I'm still standing. The answer is yes. Here's what I've learned from 365 days of being a professional stander.
Sitting is essential
My typical workday starts around 8 or 9am and wraps around 5 or 6pm. I don't stand the entire time. I stand all morning till lunchtime, and then stand again for a couple of hours after lunch. By 3 or 4pm, fatigue sets in, and my feet need a break. That's when I sit down at a small table I set up in my office or, if I want to put my feet up, push back in an old recliner I commandeered. I also sit at lunch, often sit during conference calls and TWiG, and sit to do paperwork or work on my iPad.
The point is: a standing desk doesn't mean you're standing for 8 hours a day straight. That's just not healthy. For me, standing a few hours a day has had its benefits and drawbacks.
The upsides of a standing desk
My back feels great. My posture is better than ever. My default work position is standing on flat feet, with my shoulders back, and my back slightly arched. I have a makeshift foot rest (a box of unsold books), and I often shift from one foot to another when my knees feel stiff. I lost 3-5 pounds in the first couple of weeks from standing alone. I'm way more active throughout the day, pacing, dancing, fidgeting. Because I'm used to standing all day at work, standing in line anywhere for long periods of time on weekends doesn't bother me in the least.
Thanks to my standing desk, I began naturally splitting activities up into active work (while standing) and passive work (while sitting). Since my legs and brain are fresh in the morning, I start my day by diving into the most effort-intensive work first, like coding and writing. By the afternoon I'm fatigued and ready to sit, so I use that time to process email, read Instapaper, catch up on Twitter and Facebook. Explicitly shifting gears like that helps my brain tackle the right kind of work given my physical and mental capacity at the moment.
The downsides of a standing desk
Ever since I got used to standing all day, sitting for long periods of time became uncomfortable for me. By the end of cross-country flights and even long movies, my back and backside feel stiff and achy. In the past 12 months I developed a silver dollar-sized case of spider veins on my right calf, just below my knee joint. It's not sexy. These are common for women my age, and both my parents had them, so it's difficult to say if I would have gotten these without the standing desk. Excessive standing (and sitting) are both known causes of spider veins.
The fatigue of a standing workday makes getting to the gym at the end of the day more difficult for me. When I was sitting all day, I'd feel so sluggish and sedentary I'd look forward to getting sweaty and exerting myself at the gym. At the end of a standing workday, you just want to sit down. For me, the gym has to happen in the morning, or it doesn't happen at all. While my daily calorie burn is definitely higher at the standing desk compared to sitting, standing at your desk is not a replacement for a good workout at the gym.
Finally, I work at home, alone in a room. Several people have told me that they don't want to be at the one standing desk in a sea of sitters at their office. I understand that. I'm not sure I'd pull this off in an office where I was surrounded by sitting co-workers and didn't have the luxury of two desks, one sitting, one standing.
That all said, once I got past the first couple of weeks, I haven't once considered switching back to a sitting desk full-time. Honestly, I barely give it a thought at all anymore. If you're considering it, here's how and why I switched to a standing desk.
So I’ve taken to calling my personal dashboard Quantified Awesome, and I even have the domain name for it. The name is fun, and it reminds me that this is data tracking for a reason: to live an even more awesome life. Right now, I use it for time, clothes, library books, fruits and vegetables, stuff, and measurements. I’ll add more as ideas come to me, and as I use the tools, I’ll flesh out the interface.
Quantified Self Toronto meetups have been fantastic for getting more ideas and for sharing what I’m working on with other people. I think this kind of tracking would be the kind of geeky thing that might be interesting for the DemoCamp Toronto crowd, too.
DemoCamp demos tend to be mostly startups, and I’m not at the point of turning this into a business yet. I remember they had lots of fun with my Livin’ la Vida Emacs talk, though, and I’d like to inspire people to apply their skills – programming, designing, whatever – to their own lives. I’d also love to connect with other people so that I can be inspired by their examples. People who are into this sort of thing in Toronto are probably already part of Quantified Self Toronto, though, so there may not be that much extra value in presenting something mainly for connection purposes. If I’m going to focus on either inspiring or collecting feedback, then, I want to make sure that people’s activation costs are low.
So, what would it take to get this to the point where I can create a lot of value in 10 minutes of demo and five minutes of Q&A? (Or if this is anything like my other talk, a short demo derailed by people anticipating jokes, turned into a general truth-is-funnier-than-fiction thing. =) )
I’d probably want to have lots of data driving lots of visualizations, because they’re easier to see on a big projected screen. If I build this up over a few months, I’ll have the data to let me ask interesting questions and report on behavioural changes, which will be really useful. I may want to shift from using RaphaelJS to using Protovis or a similar library for visualizations so that I can take advantage of the source code examples for a wide range of charts.
Another key thing would be to either allow other users or share the source code (maybe both! less hassle for helping people get started). That way, it’s not just about “Hey, this is cool! But you can’t use it unless you build your own.”
Opening this up to people will probably mean splitting my project time into development and support. It’s a trade-off: would the increased feedback be worth the support load? Depending on people and expectations (here there be bugs!), it might be okay. It might be a good idea to slow down and apply the same discipline we’re adopting on our work projects, too: test, test, test. I think it might be worth gradually opening this up over the next few months, with an eye towards demonstrating it at ?DemoCamp when I think it’ll help lots of people get started. It’s also highly likely that there’ll be a second Quantified Self conference, so that might be something good to plan for as well.
There are plenty of companies focused on making money by helping people track their life (health, mostly). Me, I want to be able to ask questions about life and figure out how to answer them, I want to inspire other people to try doing that too, and I eventually want to help build tools to make it easier for people to do so. Besides, it’s a great way to practice my development skills without giving in to the temptation to spend all that time on work instead. =)
Read the original or check out the comments on: Thinking about Quantified Awesome, meetups, and ?DemoCamp (Sacha Chua's blog)
Most of this weekend was taken up by schoolwork. J- had a large Math project to work on – cereal box design (volume, surface area, ratios, etc.) and a writing assignment. She also needed to work on her application for the ?CyberArts high school program.
I don’t know how other families handle it. W- has been tutoring J- through the tough parts, and that takes time.
As for me, I followed up on the events I attended last week. I’ve also been working on Project C. Spotted a few things I missed last runthrough. Sometimes it feels like three steps forward, one step back. But that’s okay.
Also, I made spaghetti and meatballs for the first time!
(Helped J- learn Inkscape, too. Yay!)
Read the original or check out the comments on: January 22, 2012 (Sacha Chua's blog)
Big week! Several intense days and late nights, but still lots of progress.
Plans for next week
- Work
[X]Finish functionality-related tasks for project C[X]Work on styling for project C- Decided what I want to do in 2012
- Told my manager and my project manager about my plans for experimenting with business
- Relationships
[X]Go to Rails Pub Nite[X]Go to Quantified Self Toronto meetup[X]Go to IBM get-together- Followed up with people after Rails Pub Nite and Quantified Self Toronto meetup
- Helped J- learn Inkscape for her math / media studies project
- Life
[-]Quantified: Open up time tracking to folks[X]Quantified: Set up bug tracker- Brainstormed business ideas
- Typed up my notes from “Start With Why” and “Lean Startup”
Plans for next week
- Work
[ ]Set up external environment for project C[ ]Finish styling project C[ ]Talk to second-line manager and other coworkers regarding plans[ ]Talk to lots of people about transition
- Relationships
[ ]Get together with Gabriel and other friends
- Life
[ ]E-mail potential users about time tracking analysis[ ]Apply things learned from Quantified Self Toronto: Epic Quest of Awesome, time analysis[ ]Research tips for starting a business in Toronto
Read the original or check out the comments on: Weekly review: Week ending January 20, 2012 (Sacha Chua's blog)
Anil sums up the history and future of web protest as we wrap up the week we stopped SOPA. I had chills on Wednesday, the day the web went black in protest of SOPA, because we were all witnessing—and more importantly, participating in—history in the making. I'm so very glad to be alive during these exciting times.
I came upon an article a few days ago relating software developers to tailors. The author (Patrick Rhone) wishes to have software tailors: people who will customize (or custom-make) software for you, for a price. It’s an interesting idea and not without its practical merits. In particular, given how most software today is “mass-produced” and customization options are in general, limited at best, a cottage industry of software-tailors might not be a bad idea. But for all its merits I think the idea is somewhat short-sighted. Software is sufficiently different from physical goods (including clothes) that applying the same concepts and processes to software and clothes is fundamentally flawed.
Operationally, software is much easier to change than physical matter. There’s no physical matter to change and if you make a mistake you can revert and go back to what you had. Undo is your friend. That means that even new programmers can create things of values, make mistakes and learn quickly by doing. However, conceptually, making software is as hard, if not harder than manipulating physical objects. I’m not a tailor, but I would wager that hacking on a complex piece of software requires as much skill as making alteration to a jacket. In fact, understanding million-line codebases might well be harder than tailoring a suit to custom dimensions.
The second flaw in the software tailor argument is that our software needs are far more varied than our clothing needs. Humans all have the same general body plans, you only need a handful of numbers to make a shirt fit. But our software requirements are far more varied. The text editing requirements for a novelist are different than that of a blogger which in turn are different from that of a programmer. To really understand what each person needs the programmer needs to have a pretty thorough understanding of what the problem domain is. This in turn means that the programmer either needs to be using that specalized software on a regular basis or the customer needs to able to communicate very clearly what they want. As anyone who’s written software for clients knows, getting proper requirements is often the hardest part of the project. This is why the best software is often “dogfooded” – the developers have been using what they’ve been developing. Furthermore making changes to any part of a codebase often requires understanding more than just the component you’re changing. What might be “just a few changes” to Mr. Rhone would probably end up be hours of diving into foreign source code (or at least learning an API). Writing good software is hard, writing good custom software is harder still. I don’t want to dismiss the idea of software tailors out of hand, but I want to make it clear that the job would not be like the analogy that Mr. Rhone provides.
If we can’t have neighbourhood software tailors, then what can we have? Customized software is good, because as I’ve said, people have very varied software needs that standardized software often falls short of accomodating. What I think we need is twofold: a technological shift where developers write extensible software by default and a cultural shift by which users are no longer afraid to modify their own software. Programmers (especially open source developers) are used to modifying and extending their own tools, I want to see common software users modifying their word processors and email filters.
But, but, but, does this mean we should make our own clothes and do the servicing on our cars ourselves? No, of course not. Like I said, the tailor (and the mechanic) analogy is not the right one. A better analogy is cooking. You can eat your meals at restaurants and fast food places (use standard consumer software) or you can cook your own. If you can spend an hour or two a day putting together ingredients in exact proportions and heating them at specific temperatures for specific times, you can spend half an hour a day typing some some code to make your software work the way you want it to.
Now this cultural shift is only possible if the software supports it and right now most of our software doesn’t. But that can change. Text editors like Emacs and shells like Bash and Zsh are meant to be customized and its not hard to do so once someone shows you how. Browsers are also customizable, though not quite as easily. Luckily software is malleable and with more and more people being software literate I think this is a feasible change in the not-too-distant future. Mr. Rhone wants a shift to developers making it easier for software to be extended, but those some changes could just as easily make it easier for users to adapt their software.
So with all due respect to Mr. Rhone, I don’t want a culture of software tailors. That’s not any different from the programmer-priesthood we have today. Unlike our clothes, our computers are incredibly powerful machines and we’re increasingly dependent on them in both general and very specific ways. I want a culture of citizen hackers: a generation of people who can mix and match their software just as we can develop our own dressing or cooking styles.
As programmers, our job isn’t to write code or be better craftsmen. It’s to solve problems, everything else is tangential. I believe the best way to do that is by empowering users to better solve their own problems. We fight for the users so that they can fight for themselves.
Justin Giancola (@elucid) wanted to use full-ack.el to search through his project files using the Ack tool, but Ack refused to run because it didn’t think his terminal had enough capabilities. A simple fix was to set the TERM variable with
(setenv "TERM" "xterm")
which told Ack that Emacs was fine with its output.
(Speaking of Ack integration – This being the Emacs world, there’s more than one way to do things. You might also want to check out ack-and-a-half.el, which is midway between ack.el and full-ack.el.)
It was interesting hanging out with someone else who used Emacs, and being able to share tips. I don’t run into many other Emacs geeks, but I sporadically hang out in the #emacs channel or browse Planet Emacsen to be inspired. It’s funny how many of the meetups I go to end up involving Emacs conversations. It’s like I have a big M-x banner hovering over my head. =) It’s awesome, actually!
Read the original or check out the comments on: Emacs: Telling external processes about terminal capabilities, and watching over other people’s shoulders (Sacha Chua's blog)
Read the original or check out the comments on: Brainstorming breakdowns, assumptions, and possibilities (Sacha Chua's blog)
I’ve read two things recently that have made me think about and reconsider the role of information in our lives and particularly the way in which I consume and process it. We live in an information-dense era of human history. In the western world (and increasingly, the world in general) the tools to access, consume, produce and distribute vasts amounts of information are available to almost everyone at just a moments’ notice. In many ways, we are living in a Golden Age of Information. The problem is, this Golden Age first crept up on us stealthily and then rammed into us headlong at full speed. As a result I think most of us, even those considered “digital natives” (myself included), seem to be perpetually ill-equipped to deal with both the challenges and opportunities of an increasingly information-rich existence.
Last week I read Accelerando, a set of short stories by British science fiction author Charlie Stross. The stories start from the near future (almost the present) and extend to a distant post-Singularity future where humanity lives among the stars, but in the shadows of godlike intellects. Though the entire collection is worth reading (and available for free), the first few stories about a world not too different from our own were particularly interesting. At one point one of the main characters, a very intelligent serial entrepreneur (and “venture altruist”) name Manfred Macx claims to consume a megabyte of text and several gigabytes of multimedia a day just to keep current.
That’s a lot of information for any person to consume in a day – a megabyte is roughly half a million English words. Though this is science fiction, I think we’re quickly getting to the point where people who want to stay current with the pace of science and technology will be required to consume enormous amounts of information regularly. Half a million words a day may be too much for an unaugmented human (Macx has an array of cybernetic implants and software agents forming a “exocortex” for information processing) but I think tens of thousands of words a day will soon become par for the course. And that’s just text. I’m not including understanding diagrams, source code, operations manuals or even video or audio. If we’re supposed to be assimilating such huge quantities of information on a regular basis how are we supposed to make sense of it all?
That brings me to a piece on The Atlantic website dramatically titled “Is Google Making Us Stupid?“. It’s about how the use of search engines and similar fast information retrieval systems is supposedly rewiring our brains. While some parts of the piece are overly sentimental and melodramatic, the core point is sound: the tools we have access to and the way we use them plays a role in shaping the functionality of our brains. I also sympathize that a habit of continually sampling little bites of information can be deeply unsatisfying. It’s easy to get hooked on to a Facebook or Twitter stream but as you stay hooked you can feel your brainpower wither as you lose the ability to concentrate longer than 140 characters. When I get stuck on Hacker News or Reddit for hours I feel terrible by the end of the day. Though I love good stories and movies it’s easy to get hooked on Netflix, passively consuming information but not really doing anything. But I’d like to believe that we can train our brains to be not quite so helpless in the face of endless streams of juicy tidbits.
A growing body of research is showing that the human brain is an incredibly flexible organ. Neuroplasticity is the norm, not the exception. As the amount of information we need to process increases (and our tools to do so get better) our brains change to accomodate it all. That of course begs the question: how far can we push ourselves? Can we train our brains to not just flit from hyperlink to hyperlink but actually digest and understand large amounts of interconnected material with greater efficiency and accuracy? Can we ensure that Google makes us smarter and wiser, not stupider?
Though our reading habits (and by extension our general thought patterns) might be changing, the change is not accidental nor is it inevitable. Instead of bemoaning the loss of the slow reading habits of yesteryear I think we should be trying to embrace the information-dense world around us. In particular, we need to stop thinking of deep reading and skimming as antagonistic to each other. Perhaps what we need to do is not to read slower, but rather separate the physical act of reading from the mental act of comprehending what we have read. I would love to be able to read text fast, look up links and references and then let the mass of information “ferment” in my brain. I’d like to be able to train my brain to think of what I’ve read after I’m done looking at the text forming connection betweens concepts and ideas while I’m walking down the street or taking a shower.
Perhaps this is an exceedingly computer-science centric way of thinking about the brain and thought processes. To be honest, I’ve been writing code and processing data algorithmically far longer than I’ve been learning about how the brain works. I do tend to think of the brain primarily as an information processor. Unlike the author of The Atlantic article I’m not nearly as attached to the so-called “human” aspect of my intelligence (but that’s a matter for another blog post). I like settling down with a cup of coffee and a good book in a nice armchair as much as the next guy, but only on the weekends. During the week I’d like to come up with six impossible things before breakfast and figure out how to make them possible through the course of the day. To do that I need to keep the information machine fed, creativity doesn’t happen in a vacuum. I’d love to know how to do that better.
This weekend brought a cold snap, or maybe this is regular winter in contrast to the mild days earlier. We dealt with it by cooking and baking our way through many of the vegetables that had come from the community-supported agriculture program, stockpiling frozen lunches for the weeks to come. It was a productive weekend.
I spent most of the weekend working on Quantified Awesome. I’m looking forward to opening it up to people next week. It’s still rough in places, but people will probably be able to use it for tracking time, stuff, and clothes. I have a few more things to nail down before I reach out to the 35 people who’ve indicated their interest so far, but I feel like I’m getting close.
I hit my library checkout limit of 50 books the other day, what with all the books I’ve been checking out on psychology, planning, and other things I’m curious about. W- let me check things out on his card. There’s been a steady stream of books and movies going back to the library, and no late fines so far. I’ve been making an effort to read things roughly in order of due date. I sometimes give in to the temptation to read things out of order. (Like The Lean Startup, read the day I picked it up and quoted soon after.) The Toronto Public Library is amazing, and I’m happy to support it.
My time-tracking tweaks seem to be working out. David Ing wondered if I was getting limited by reductive analysis. I rather like the clarity of choosing one activity at a time. I’m satisfied with tweaking my goals to encompass the sustainability of growth at work, too.
This week: more functionality/theming changes at work, and three events to attend. Let’s see how it goes!
Read the original or check out the comments on: January 15, 2012 (Sacha Chua's blog)
From last week’s plans
- Work
[X]Work on more functionality for project C[X]Check end date for project C, next gig[X]Check out U – pretty cool[-]Draw more IBM comics?- Fixed Lotus Connections community toolkit forum support
- Relationships
[-]Tidy up downstairs[X]Spend time with Ninong Gus and Ninang Amparo
- Life
- [\] Open up Quantified Awesome to at least one other person – Still working on cleaning it up. Maybe I should just bring people in and see what breaks.
- Quantified Awesome: Added graphical goal feedback
- Quantified Awesome: Started cleaning up registration
- Settled into more memory on website
Plans for next week
- Work
[ ]Finish functionality-related tasks for project C[ ]Work on styling for project C
- Relationships
[ ]Go to Rails Pub Nite[ ]Go to Quantified Self Toronto meetup[ ]Go to IBM get-together
- Life
[ ]Quantified: Open up time tracking to folks[X]Quantified: Set up bug tracker
Time analysis
| Work | Good | 40:57 hours this week |
|---|---|---|
| Sleep | Good | 61:05 hours, average of 8:43 |
| Personal/social discretionary | Good | 23:05 social to 17:44 personal |
| Work/discretionary balance | Good | 40:57 work, 40:49 discretionary |
Pretty good, actually! It was a little tight in the beginning, because I used last weekend to get some work done instead of tinkering with Quantified Awesome or focusing on chores. I used the time on Friday to focus on building and planning, and that was time well-spent.
Next week, I’m attending a couple of events, so I have less evening hacking time. I’m looking forward to being inspired by the events, and to more hacking and planning.
Life is good.
Read the original or check out the comments on: Weekly review: Week ending January 13, 2012 (Sacha Chua's blog)
It snowed today. Both W- and I worked from home. We closed the blinds and lowered the shades so that I wouldn’t have to look at the snow falling. I’m still in the stage of preferring winter to be abstract; savoured as baking season in a warm kitchen instead of seen – or experienced – as flurries and blizzards.
After the snow and wind subsided, we walked to the supermarket to pick up some supplies. Snow has a way of making everything farther, but good company makes a good walk.
I had shifted plenty of work time to the previous weekend in order to try something new this week. I felt stretched a little bit, but I think it paid off. I collected more data to help me make decisions.
I had more time today to focus on Quantified Awesome, too. I’m working on opening the site up to registrations. Yes, still that. I have a development environment up on the server so that I can work on it even when I’m away from home. After I build a tutorial, I think it will be ready for a couple of users.
I fixed some issues with the Lotus Connections community toolkit I’d created at work. It’s good to get that sorted out.
We held our first study group session for this year, reviewing areas, circumferences, and volumes. The kids asked for help with their other subjects, too. Writing: the five-paragraph structure. Drama: Romeo and Juliet.
After they departed, W- and I got ready for a cooking sprint. We watched Rashomon while having dinner. After I finished my beef bulgogi, I settled in and scrubbed more potatoes. The fingerling potatoes we received from the community-supported agriculture program had been crusty with dirt that was hard to dislodge. Half of the potatoes were relatively clean, thanks to last night’s movie-accompanied scrubbing. I worked my way through the rest of the potatoes as Akira Kurosawa’s classic story unfolded. Scrubbing kept my hands busy and didn’t demand too much attention away from the subtitles. When the potatoes were done, we roasted them along with the beets and the two chickens that W- had marinated in pandan mix. Yum.
A snow day, but not really a quiet one.
Read the original or check out the comments on: January 13, 2012 (Sacha Chua's blog)
"Bloggers are famous enough to have stalkers, but not famous enough to have bodyguards." —Danny O'Brien
Everyone thinks they want a million Twitter followers and a million pageviews a day on their blog and the incredible high that it must be to walk around in the world knowing you're "internet famous." Yes, being famous among dozens has its privileges, but it also has a flip side netizens rarely discuss.
I passed 200,000 followers on Twitter this week. I'm not a celebrity. I've written books and made apps, but I've never been on primetime TV and I wasn't on Twitter's suggested user list during its heyday. I am an early adopter, a dedicated self-promoter, a daily user, and a leader in two large internet communities. All these things translated into an outsized follower count on both Twitter and Google+. Nowadays, when someone notices my follower count—and many people do, because it's a status symbol which indicates which echelon of web society you belong to—they get wide-eyed. "Wow, you're famous," they say.
Reality check: Lady Gaga is famous. Bloggers are not famous.
I'm not famous, but I have an outsized audience. I can ask a question and get hundreds of replies, reshares, and favorites in a matter of hours. If I want a lot of people to see something, I can make that happen in a few keystrokes without any help from a PR firm or media outlet. I've mentioned my follower counts and blog stats in book deal and paycheck negotiations, because people who hire me are often buying my ability to market my book or project.
But you know what else happens when you have an outsized audience?
You field a weekly flood of pitches.
Having a big audience means you're a commodity, and you get to constantly field pitches from strangers, acquaintances, former co-workers, and distant family members who you never hear from otherwise asking you to mention their new app, book, Kickstarter project, or ?MySpace page. People decide how important you are by your Klout score and treat you accordingly. Ad agencies look up how much your tweets are worth and recruit you to tweet on behalf of their clients for money. It's a bizarre and sometimes awkward crash course in saying "sorry, no" to the requests that just don't feel right (and most of them don't).
People who don't know you make wildly inaccurate assumptions about things you say.
If you crack a joke, use sarcasm, or don't fully explain your 140-character statement, you will be misunderstood, because most of your followers barely know you. Last week I said I have mixed feelings about lesbian contestants in a beauty pageant. A handful of people tried to explain why lesbians are just as worthy of beauty pageants as heterosexual women. Having to explain stinks.
You forget how to share with people who do know you.
To avoid misunderstandings, you start dumbing down your posts and only writing things which are literal and mostly non-controversial. (At least I do.) But that means your friends don't enjoy the connection that comes with hearing you be you, instead of edited-you. In an attempt to fix this problem, I set my Facebook user profile to friends-only access. But by now I'm so ruined by my addiction to the flood of retweets, favorites, and replies I get from public posts to my big audience, I spend less time sharing privately.
You get addicted to the approval of strangers.
The addiction to the attention you get from a crowd of strangers turns you into a performer instead of a sharer. You look for cheap laughs, stars, retweets, and replies, instead of meaningful conversation with people you actually care about.
Your view of the world gets skewed.
An outsized audience presents problems like the ones listed here that no one else has. When you have a big audience, you're the 1% of the web, and that means your view of the world is skewed. You get paranoid about privacy, cynical about requests from friends, and impatient about misunderstandings. I spent two years building an app that helps people organize and archive hundreds of tweet replies, solving a problem that basically no one else has.
You're a spam magnet and a troll target.
Like mosquitoes to a lightbulb at night, high visibility attracts spammers. Seven percent of the comments I receive on a given post on Google+ can be spam. Seven percent! Not to mention the daily trolling, harassment, and for women, weekly messages from men who feel the need to share their opinion on your physical appearance.
At this point you're wondering, If having a big audience is so bad, why not just shut down your accounts and start fresh under an unknown pseudonym? On more than one occasion, I've considered burning it all down and going back to using these tools for their intended purpose: as a way to keep up with friends.
But ultimately the advantages of an outsized audience outweigh the crappy parts for me. Even when I have a job that pays a salary, I work with a freelancer's mind-set. Employers, projects, and clients will come and go, but I've created an online network under my own name that's helped me a lot more than it's hindered me.
Still, when someone tells me they want more Twitter followers and a highly-trafficked blog and the ability to reach so many people so easily, I usually say, "Be careful what you wish for."
Yesterday I sat down to put some of my old screenplays online. Screenplays have a very specific format – monospaced fonts, fixed directions for margins, etc. Unfortunately all those rules are for paper and if there’s one thing I really don’t plan on doing, it’s distributing my writing on dead trees. But I still wanted to put my work online and have it look like a screenplay.
When I was taking my creative writing class last semester I used ?LaTeX to output nicely formatted PDFs to submit and I wrote directly in ?LaTeX. Though PDFs are great for class submissions and printing I’m very much an HTML fanboy when it comes to publishing online. Unfortunately ?LaTeX doesn’t seem to export directly to HTML. That’s understandable, HTML still has a way to go before it supports all the beautiful typographic nuances that ?LaTeX is capable of. There are some ?LaTeX-to-HTML converters out there, but I couldn’t them to compile on my Macbook. Instead of trying to debug the compile process I threw some regexes at the existing ?LaTeX source and turned it into fairly semantic hypertext.
HTML is a flexible markup language, but there was some abuse of existing HTML elements involved in coming up with a structure that worked for screenplays. Each piece of dialog becomes a section tag and I’ve really abused the header and paragraph tags. If you can come up with a more semantically “correct” interpretation, I’d love to see it. Anyways, the translation went quickly and with some CSS the result isn’t bad, in my opinion. I converted one of my shorter pieces and put it on my website, if you care to take a look. The whole process took about half an hour including fiddling with regexes and CSS.
So much for taking a ?LaTeX screenplay and translating it to HTML. But what about writing a screenplay for the web first? By way of inspiration, Stories and Novels is a beautiful site that features complete stories and novels in a beautiful web format (as well as Kindle editions). I’d love to see something similar for screenplays. Now admittedly, people don’t usually read screenplays the same way they read novels or stories, but who’s to say that once the trend starts it won’t pick up (and it would be a interesting experiment regardless)?
Of course, writing HTML (or any form of XML) by hand is not something I would wish on my worst enemy. It’s ok when working on a design and layout but I’d rather not write entire screenplays (or stories or novels or even blog posts) in HTML by hand. Recently, lightweight markup languages such as Markdown and Textile have become popular. They’re designed to be easily converted to HTML and they feel natural to write in. Maybe we could come up with something similar for screenplays? Sounds like an interesting weekend project, I’ll let you know how it goes on Monday.
I remember now why I had stopped tracking time before. Breaking things down at the project level made me feel weird about my extracurricular interests at IBM, like the community toolkit and now the IBM comics. On one hand, I wanted to support our utilization goals and claim time as accurately as possible. On the other hand, I didn’t want to give up personal time, especially as I could use it to build more functionality into Quantified Awesome. I felt conflicted. I found myself slipping from the feeling of an abundance of time to the feeling of a scarcity of it, to be carefully portioned out among too many demands.
Today, brainstorming how to address my worst-case scenario considerations, I realized something: I’d been thinking about it the wrong way. It’s not extra time I’m donating or a hobby I might outgrow. It’s a live opportunity to test ideas with a massive, built-in internal market.
Comics on the intranet homepage? A fledgling artist couldn’t buy that kind of space. A community analysis tool that other people have come to rely on? Good practice in supporting disparate users and scaling up value.
No money might change hands, but a steady stream of thank-you notes helps my manager argue for a top rating, which often translates into a bonus.
So now I’ve got a couple of ways to rethink how this fits into my life.
I can promote these extracurriculars from the category “Work – Other” to “Discretionary – Other” or something similar, and budget myself four or five hours a week. It’s not work, it’s learning.
Alternatively, I can keep it under “Work – Other” and add an effective 10% overhead to my billable work. Many people have told me that I’m a fast developer, anyway, so scaling my output down to that of a somewhat above average developer will still mean that we do good stuff. The cognitive surplus goes into process improvement, self-development, and happiness, which is definitely worthwhile. I get stressed when I feel like I’m letting my other priorities slip, so spending time on them is important too.
These extracurricular interests can create a lot of value. I should adjust my measurements accordingly so that my measurements don’t lead to conflicting feelings.
How you measure affects how you manage.
Read the original or check out the comments on: Work, extracurriculars, and measuring time: an epiphany (Sacha Chua's blog)

If you're sending Gmail messages from anywhere other than Gmail itself, they may look like they're phishing attempts. Up until today, whenever I sent messages using my Google Apps account with the From: address set to my vanilla Gmail address, my Gmail-using recipients got an alarming, bright red message at the top which said "This message may not have been sent by [who it appears to be from]. Learn more Report phishing." Make sure this doesn't happen to you.
Senders: If messages from your Gmail address look like phishing
If you're sending email with the From: field set to your Gmail email address (that is, username@gmail.com or username@googlemail.com) from any client other than Gmail itself, use Gmail's SMTP servers to send the mail.
The process for setting your email software to use Gmail's SMTP server will vary depending on what email client you're using. If you're like me and using another Gmail or Google Apps account to send custom From: address Gmail, here's how to set the SMTP server.
In your primary Google Apps/Gmail account where you actually send messages from, in Settings > Accounts > Send mail as, click on "edit info" next to your custom Gmail From: address.
Double-check your name and email address listed there, and click on the "Next Step" button. On the "Send mail through your SMTP server?" step, don't use the default SMTP server. Instead, check the "Send through gmail.com SMTP servers" option, and enter your Gmail username and password for the account you want to send From.

If you're using Google's two-step verification for your Gmail account (and you should be), you'll need to generate an application-specific password for the SMTP server use. Click on the "Save Changes" and you're done. Your messages will no longer look like they are phishing attempts.

Senders: If messages from your Google Apps address look like phishing
If messages from your Google Apps domain name are getting the red phishing warning, you've got to tweak a DNS setting to fix it. In short, you've got to add a Sender Policy Framework (SPF) record to your domain which verifies that Google Apps' mail servers are authorized to send your messages on your domain's behalf. The exact process for doing this depends on where you registered and administer your domain, but Google Apps Support runs down the general steps to create an SPF record for a domain:
1. Log in to the administrative console for your domain.
2. Locate the page from which you can update the DNS records. You may need to enable advanced settings.
3. Create a TXT record containing this text: v=spf1 include:_spf.google.com ~all
4. Save your changes. Keep in mind that changes to DNS records may take up to 48 hours to propagate throughout the Internet.
If it's not clear where or how to add an SPF record for your domain, get in touch with your domain registrar support to find out how.
Recipients: If your friends' messages look like phishing
Gmail's phishing alert on messages that look like they came from unauthorized SMTP servers helps recipients identify email scams, but it stinks for senders for using custom From: addresses legitimately, because they don't know it's happening. The only way I knew it was happening to my email is because Adam told me it was!
So, if you're getting this phishing alert on friends' or co-workers' messages that you know are legit, send them a link to this article or to Google's Support page on the subject. They'll appreciate it.
Why am I seeing the error "This message may not have been sent by...."? [Gmail Help]
The urge to check things off can be a great way to start a new habit. On our recent trip to the Philippines, we found out that packing our vitamin supplements into pill organizers made it much easier to remember to take them daily. I get this compulsion to tick things off in order, to open each box on the right day, to see the chain of empty boxes grow.
It’s a well-known trick, this idea of making habits visible. Jerry Seinfeld says don’t break that chain, and that works wonders. It’s part anticipation and part loss aversion. People use it to pick up all sorts of habits. Mel Chua uses it to get the hang of flossing her teeth, for example. Visible progress is wonderful.
We’re back home now, but I’m going to keep using the pill organizers to keep track of supplements. Let’s see what else might benefit from this idea…
Read the original or check out the comments on: Tip: Use visibility to motivate new habits (Sacha Chua's blog)
Testing business assumptions: I like this definition from Eric Ries’ book, “The Lean Startup”:
A startup is a human institution designed to create a new product or service under conditions of extreme uncertainty.
I’ve come to realize that the most important part of this definition is what it omits. It says nothing about the size of the company, industry, or the sector of the economy. Anyone who is creating a new product or business under conditions of extreme uncertainty is an entrepreneur whether he or she knows it or not and whether working in a government agency, a venture-backed company, nonprofit, or decidedly for-profit company with financial investors.
I like the idea of treating work as an experiment that reduces uncertainty and helps us do something better. I want to get better at bringing out those uncertainties and planning how to resolve them.
Visualizing data and making better decisions: I like collecting data, bringing them together in dashboards, and figuring out visualizations that can help people make better decisions. Last year, I implemented a visualization for a Drupal project so that investors could see where the gaps in funding were. I’m working on some visualizations for my personal dashboard. I think it’s useful to be able to help people find patterns while avoiding false positives or visual noise.
Building systems that fit the way people need to work: I like the way we tailored the last project based on constant client feedback. I like saving people time by building systems that help them work more effectively instead of requiring a lot of repetitive work.
Hmmm…
Read the original or check out the comments on: Things I want to learn more about through work (Sacha Chua's blog)
It is now just about a third of the way through the first month of the year. I’m not really one for resolutions so I didn’t make any. In fact, I didn’t do anything by way of preparing for the start of a new year. However there is one thing that I’ve been wanting to do for years that I hope to finally get around to doing: concentrate more on my writing, in particular, paying more attention to this blog.
I’ve never really wanted to be a full-time blogger, not even a technology blogger. I’ve always preferred to be someone who wrote code (or at least studied writing code) and wrote about those experiences on the side. By and large, that’s been true. However the thing is that I really like writing. It’s a good break from coding and thinking about computer science research and I enjoy communicating directly with people instead of machines for a change (which is why I refuse to pander to search engines and write SEO-directed stuff). Anyways, despite my not being a very regular writer this blog has been moving along nicely. I get around 400 hits on an average weekday and that number has been going up steadily. I’ve been on Hacker News more than once and that’s always generated a good burst of traffic.
I’ve also been discovering technologists and scientist writing interesting and very useful blogs. These are people like danah boyd (Senior Researcher at Microsoft), Matt Might (CS Professor at the University of Utah) and Andrea Kuszewski (a researcher at the George Greenstein Institute). I admire their blogs and their writing but I also admire them for being dedicated scientists and researchers. These blogs reaffirm my belief that writing on a regular basis is important (and healthy) for everyone especially if you’re involved in research and development of new technologies.
All that is a way of saying that I would like to blog more. Looking over my archives for last year I’ve only made about one post a week. Ideally I would like to increase that to two or three a week, not including the Sunday Selection link posts (I doubt I could keep up quality for anything more than that). I also want to start tackling more technical subjects. I’ve been talking a lot about the intersection of technology and productivity for a while now, but I’m starting to get a tired of the productivity aspect. Long story short, I’ve found the small set of everyday tools and environments that I need to get work done. For the foreseeable future it’s more a question of being able to stick to habits and schedules than of using the right tools. When I do speak of tools I want to give concrete examples (like my post on showing Git information in your Bash prompt) rather than handwavey suggestions.
On a related note I’ve been considering moving off ?WordPress.com. ?WordPress is great if you’re using their web-based interface but is harder to use if you live in Emacs. I’m starting to itch for a writing system that integrates well with Emacs. I’d like to be able to include my own HTML, CSS and ?JavaScript in my posts and be able to customize things a bit more than ?WordPress.com allows. I haven’t given much thought to this matter, but I’m looking at alternate systems such as Jekyll and Octopress. Whatever I decide to do I’ll probably test it out at my personal website before doing anything over here.
While this blog is definitely my most serious writing project, it’s not the only one. I took a few creative writing classes in college and enjoyed them immensely. I would like to be able to continue writing fiction (and maybe even get in shape for ?NaNoWriMo 2012). But for I’ll be content with just regular blogging output. Glad to have you all along for the ride.
The Drupal site I’m working on is slowly coming together. I still feel an itch to redo the big, hardcoded structures that a previous developer left behind, but I’m focusing on all the functional pieces first. Then I’ll do the styling and spacing tweaks, and then I’ll think of making that structure more flexible.
I like working with other people’s code, even if the code occasionally makes me go “Huh? What were they thinking?” It’s good to be able to work with other people’s structures and gradually immerse yourself in a project. Otherwise, you’d be limited to just the things you can build from scratch.
We’re still quite a bit away from having something that would be ready for launch, but we’re making progress. I don’t know if I’ll be on this project through launch, but it would be nice.
I like launches. =) I want to have more of them.
Read the original or check out the comments on: Making good progress on theming the site (Sacha Chua's blog)
Kudos to NASA for launching code.nasa.gov, where NASA will try to nurture some of the space-related open source projects in its, ahem, orbit.
In 2005, I was briefly involved in some efforts to create a code hub within NASA, but balked when I read the NASA Open Source Agreement and NASA appeared unable the modify it. The license is fatally flawed. Here’s what FSF says about it:
The NASA Open Source Agreement, version 1.3, is not a free
software license because it includes a provision requiring
changes to be your "original creation". Free software development
depends on combining code from third parties, and the NASA
license doesn't permit this.
We urge you not to use this license. In addition, if you are a
United States citizen, please write to NASA and call for the use
of a truly free software license.
That’s quite the right position on this license, which is to say if you are choosing a license for your project, please don’t choose NOSA. You’re probably better off with something more permissive (i.e. something that can be turned into NOSA if needed).
NOSA is also not a general license, although my initial 2005 look at the world of NOSA-licensed code turned up a lot of stuff using it as such. If you are going to release a new project under NOSA and you are not a Government Agency, things can get murky. Best to avoid NOSA when you can.
I’ve been a sworn fan of version control for a good few years now. After a brief flirtation with Subversion I am currently in a long term and very committed relationship with the Git version control system. I use Git to store all my code and writing and to keep everything in sync between my machines. Almost everything I do goes into a repository.
When I’m working I spend most of my time in three applications: a text editor (generally Emacs), a terminal (either iTerm2 or Gnome Terminal) and a browser (Firefox or Safari). When in Emacs I use the excellent Magit mode to keep track of the status of my current project repository. However my interaction with git is generally split between Emacs and the terminal. There’s no real pattern, just what’s easiest and open at the moment. Unfortunately when I’m in the terminal there’s no visible cue as to what the status of the repo is. I have to be careful to run git status regularly to see what’s going. I need to manually make sure that I’ve committed everything and pushed to the remote server. Though this isn’t usually a problem, every now and then I’ll forget to commit and push something on one of my machines, go to another and then realized I’ve left behind all my work. It’s annoying and kills productivity.
Over the last few days I decided to sit down and give my terminal a regular indicator of the state of the current repository. So without further ado, here’s how I altered my Bash prompt to show relevant Git information.
Extracting Git information
There are generally three things I’m concerned about when it comes the Git repo I’m currently working on:
- What is the current branch I’m on?
- Are there any changes that haven’t been committed?
- Are there local commits that haven’t been pushed upstream?
Git provides a number of tools that gives you a lot of very detailed information about the state of the repo. Those tools are just a few commands away and I don’t want to be seeing everything there is to be seen at every step. I just want the minimum information to answer the above question.
Since the bash prompt is always visible (and updated after each command) I can put a small amount of text in the prompt to give me the information I want. In particular my prompt should show:
- The name of the current branch
- A “dirty” indicator if there are files that have been changed but not committed
- The number of local commits that haven’t been pushed
What is the current branch?
The symbolic-ref command shows the branch that the given reference points to. Since HEAD is the symbolic reference for the current state of the working tree, we can use git symbolic-ref HEAD to get the full branch. If we were on the master branch we would get back something like refs/heads/master. We use a little Awk magic to get rid of everything but the part after the last /. Wrapping this into a litte function we get:
function git-branch-name
{
echo $(git symbolic-ref HEAD 2>/dev/null | awk -F/ {'print $NF'})
}
Has everything been committed?
Next we want to know if the branch is dirty, i.e. if there are uncommitted changes. The git status command gives us a detailed listing of the state of the repo. For our purposes is the very last line of the output. If there are no outstanding changes it says “nothing to commit (working directory clean)”. We can isolate the last line using the Unix tail utility and if it doesn’t match the above message we print a small asterisk (*). This is just enough to tell us that there is something we need to know about the repo and should run the full git status command.
Again, wrapping this all up into a little function we have:
function git-dirty {
st=$(git status 2>/dev/null | tail -n 1)
if [[ $st != "nothing to commit (working directory clean)" ]]
then
echo "*"
fi
}
Have all commits been pushed?
Finally we want to know if all commits to the respective remote branch. We can use the git branch -v command to get a verbose listing of all the local branches. Since we already know the name of the branch we’re on, we use grep to isolate the line that tells us about our branch of interest. If we have local commits that haven’t been pushed the status line will say something like “[ahead X]“, where X is the number of commits not pushed. We want to get that number.
Since what we’re looking for is a very well-defined pattern I decided to use BASH’s built-in regular expressions. I provide a pattern that matches =”[ahead X]” where X is a number. The matching number is stored in the BASH_REMATCH array. I can then print the number or nothing if no such match is present in the status line. The function we get is this:
function git-unpushed {
brinfo=$(git branch -v | grep git-branch-name)
if [[ $brinfo =~ ("[ahead "([[:digit:]]*)]) ]]
then
echo "(${BASH_REMATCH[2]})"
fi
}
The =~ is the BASH regex match operator and the pattern used follows it.
Assembling the prompt
All that’s left is to tie together the functions and have them show up in the BASH prompt. I used a little function to check if the current directory is actually part of a repo. If the =git status= command only returns an error and nothing else then I’m not in a git repo and the functions I made would only give nonsense results. This functions checks the =git status= and then calls the other functions or does nothing.
function gitify {
status=$(git status 2>/dev/null | tail -n 1)
if [[ $status == "" ]]
then
echo ""
else
echo $(git-branch-name)$(git-dirty)$(git-unpushed)
fi
}
Finally we could put together prompt. BASH allows for some common system information to be displayed in the prompt. I like to see the current hostname (to know which machine I’m on if I’m working over SSH) and the path to the directory I’m in. That’s what the \h and the \w are for. The Git information comes after that (if there is any) followed by a >. I also like to make use of BASH’s color support.
function make-prompt
{
local RED="\[033[0;31m\]"
local GREEN="\[033[0;32m\]"
local LIGHT_GRAY="\[033[0;37m\]"
local CYAN="\[033[0;36m\]"
PS1="${CYAN}\h\
${GREEN} \w\
${RED} \$(gitify)\
${GREEN} >\
${LIGHT_GRAY} "
}
Conclusion
I like this prompt because it gives me just enough information at a glance. I know where I am, if any changes have been made and how much I’ve diverged from the remote copy of my work. When I’m not in a Git repo the git information is gone. It’s clean simple and informative.
I’ve borrowed heavily from both Jon Maddox and Zach Holman for some of the functionality. I didn’t come across anyone showing the commit count, but I wouldn’t be surprised if lots of other people have it too. There are probably other ways to get the same effect, this is just what I’ve found and settled on. The whole setup is available as a gist so feel free to use or fork it.
I want to free up time later this week to focus on Quantified Awesome and explore something new, so I spent part of the weekend working on the Drupal engagement. In addition to the feature requests, there’s a fair bit that I need to do to clean up the previous code and make the site more maintainable, so I’m chipping away at the task list.
Still, there’s time to spend with friends and family, and that’s important, although I woke up too late to talk to my mom.
It’s a little odd shifting time around like this. The crunch time is temporary and self-imposed, and the freed-up time later this week might come in very handy.
I would like to spend more time on building the things that people are asking for, but I can’t think of anywhere else I’d want to take that time from. Sleep, work, and socialization are all important, and I enjoy working on my personal projects too. Chores don’t take us a lot of time – not enough to justify the cost and time of outsourcing them.
So it’s a matter of patience, dealing with the fact that there is only so much time in the day. I’d still rather build this slowly than not do it at all. At work, I’ve been opening up my extracurriculars to other people so that I’m not the bottleneck. For Quantified Awesome and these other personal interests, I’m not quite at the point of paying other people to work on them.
One of the books I’m reading is “Money Can Buy Happiness”, by MP Dunleavey. The book quotes:
Time is the coin of your life. It is the only coin you have, and only
you can determine how it will be spent.
- Carl Sandburg (quoted on p63, Money Can Buy Happiness)
I am okay with how I spend my time. It would be interesting to have more of it, but the constraint of 24 hours is fair and equal. In a few years, I might experiment with different balances, but there are still many things I want to do and learn with this balance.
Read the original or check out the comments on: Moving time around (Sacha Chua's blog)
There's a vast difference between software you can use for free and apps you pay to use: different customers, different business model, different commitment for developer and user.
When you price your mobile app, for example, it doesn't really matter whether you make it cost $1 or $2. The majority of people who want your app and are prepared to pay something for it won't balk at two bucks versus one. But making your app cost anything at all puts up a hurdle much greater than 100 pennies, especially in new markets.
Android Market users have paid for significantly fewer apps than iOS/iTunes Store users. My own numbers confirm this. This isn't because Android users are inherently freeloaders, it's because they're not prepared to buy apps, psychologically and practically.
Amazon is a place where you buy things online. iTunes is a place where you buy things online. Your credit card information is already entered; you're all set up to go shopping at these destinations. Acquiring a new app, song, movie, game, TV show is a one-click affair.
Google, as a brand, isn't a place where you buy things online.
This is one of the challenges for the Android Market. Android users don't already have their credit card information entered into Google Checkout (or is it Wallet), so the difference between downloading a free app versus buying an app is the inconvenience of setting that all up. Since apps are often impulse buys, and typing your credit card information into a form on a touchscreen handset is annoying, it's easier for an app-buying virgin to pass, or decide to put it off till later... indefinitely. My own wife hasn't bought my Android app on her phone because she hasn't gotten around to setting up her Google Checkout account yet. For a year.
That's why Google's recent 10 cent app promotion made a ton of sense. Instead of giving apps away for free, the 10-cent price tag gave users incentive and a deadline to get their Google Checkout account set up in order to get the deals. Once a new user breaks the seal and buys an app for the first time, they're much more likely to buy again.
Starting in 2003 with 99-cent songs, Apple made buying digital content not only easy, but normal. In 2011, that means indie app developers like me can charge a couple bucks for a software application and not price myself out of the market. Back when I was running Lifehacker, we almost never reviewed downloads or webapps if they were not free. Today, I'd do things differently, in large part because of the app store model.
A couple of people have asked why my (simple, small) app costs $2, instead of $1 or free. The answer is pretty simple. I'm charging at all because I can, and I'm charging $2 instead of $1 because for the customer, the difference between those two prices is tiny enough to justify doubling revenue.
Related: The Oatmeal's "This is how I feel about buying apps"
We used the holiday weekend to organize and back up our files, so there was a ton of tidying up. Looking forward to taking more pictures and writing more notes this year!
From last week’s plans
- Work
[-]Finish styling inner pages for project CG – worked on converting more pages to panels[-]Implement automated screenshots – not yet done[X]File insurance claims – filled out form, will drop in mailbox tomorrow
- Relationships
[X]Hang out with Scott and Maira[X]Connect with more friends[-]Help W- with his projects- Celebrated J’s 14th birthday
- Life
[X]Add data entry to Quantified Awesome offline interface[-]Add access control to QA for privacy[-]Write tests for QA- [\] Add charts for time – in progress
[X]Post results from tracking community-supported agriculture[X]Take more book notes- Upgraded website hosting; much snappier now, although may downgrade after a month
Plans for next week
- Work
[ ]Work on more functionality for project O[ ]Check end date for project O, next gig[ ]Check out U[ ]Draw more IBM comics?
- Relationships
[ ]Tidy up downstairs[X]Spend time with Ninong Gus and Ninang Amparo
- Life
[ ]Open up Quantified Awesome to at least one other person
Time analysis
| Work | Good | 32:12 hours this week | Four-day work week |
| Sleep | Medium | Average of 8 hours per day | Made up for two short nights; overall more tired, though (stdev 1:16) |
| Personal/social discretionary | Medium | 18:37 personal stuff vs 8:13 social | Focused more on personal projects |
Lots of time spent tidying up files and sorting pictures!
Read the original or check out the comments on: Weekly review: Week ending January 6, 2012 (Sacha Chua's blog)
W- picked up the LEGO Indiana Jones game to round out our collection, and we’ve all been enjoying it. The puzzles sometimes take a while to figure out, but like all LEGO games we’ve played so far, they’re never frustrating and the little touches of humour make us laugh.
We started with the episodes for Indiana Jones and the Kingdom of the Crystal Skull. It hadn’t stuck in our memory as much as the previous films, so the game episodes were a little mystifying (although still lots of fun). To help clear things up, I requested the movie from the library. It was a lot more fun than I’d remembered it to be, possibly because of all the jokes we’d remembered from the game. The movie by itself, I don’t know… The movie and the game, yay. =)
We like the LEGO games. The puzzles are easy to solve, but still contain plenty of jokes. Looking forward to getting LEGO Batman 2 when it comes out (and rewatching the movies!).
Read the original or check out the comments on: LEGO and Indiana Jones: nuking the fridge got a lot more fun (Sacha Chua's blog)
After a year of starts and stops and some flailing and nail-biting, we finally shipped. The Todo.txt mobile app is now available for iOS. Get it for your iPhone, iPod touch, or iPad in the iTunes Store now.
Just like the Android app, Todo.txt for iOS is open source and built by a community of contributors. It's priced at $1.99 to defray the costs of running the project and help me fund its continued development.
Making this app was a whole new experience for me across several axes. As a Java developer and full-time Android user, I was a stranger in a strange land, learning a new language and a new culture. I wasn't familiar with iOS usage conventions, not to mention its technical aspects. As such, I did more directing others who know much more than I do than I did actual coding. We modeled the UI after the existing Android app, and added in a few iOS specific features where UI conventions didn't align. (For example, iOS doesn't have an ever-present search button like Android does, so you pull down your to-do list to reveal a search box.)
The app has been live in the iTunes Store for just over 24 hours, and it's gotten 11 five-star ratings and one one-star rating, and eight reviews, all positive with one exception. But what about sales compared to the Android app's launch day?
40% More iOS Apps Sold on the First Day of Sales Than Android
I announced the app went on sale yesterday morning on Twitter, Facebook, and Google+, then Lifehacker ran a post on it. It got no other press coverage. I announced the Android app release in exactly the same way on January 24th of last year (minus Google+, which didn't exist then). If my Googling skills serve me right, Lifehacker did not run a post the day the Android app went on sale, though they did the week before when I was beta-testing it.
The first day of iOS app sales was solid: just around 365 apps sold, compared to the 215 I sold on the first day of Todo.txt Touch's availability in the Android Market. That means the iOS app sold 40% more units under somewhat similar conditions as the Android app on release day.
This isn't a fair comparison, of course. Many users were asking for an iOS version of the Android app, whereas when we released the Android app, a mobile/Dropbox version of Todo.txt was completely new. More people have Android devices in January 2012 than they did in January 2011 relative to iOS devices. Yesterday's Lifehacker post no doubt drove sales. Unlike the Android app, there is no way to download a compiled version of the app to install on your device for free; you must purchase it to get it. The iOS app's beta tester's installations will expire, but the Android apps' won't. Also, due to TWiG and my own Android use, I'm more likely to be followed by Android power users, which is the app's target audience.
It'll be interesting to compare a year's worth of sales overall in January of 2013.
I've gotten a few questions since the launch yesterday. Here are some answers.
Who made the iOS app?
Through luck and connections, a small team of Todo.txt users and iOS developers came together to donate their time and effort to the project in the past three months. If this app was not open source, it would not have happened.
Chuck B. Jones has been the lead coder. He's also an Android developer, and he ported the lion's share of the app's objects and Dropbox interface from the Android to the iOS project. Bewildered by the confusing process of testing an iOS app with a small number of users (what, you can't just email it to 'em?), Shawn ?McGuire helped me set up TestFlight, which was a godsend. Shawn also wrote the code which made the app iPad-compatible, because unlike Android, iOS app layouts are not relative, so they don't automatically fill a larger screen by default. Ricky Hussmann did quite a bit of work on the list and task view layouts among other things, and in general helped kickstart interest in moving the project forward after a long fallow period. John Rowley, the creator of the Todo.txt Apps' project icon, also put in time and effort to make the art comply with Apple's design guidelines. Thanks to them and all the folks who contributed code, bug reports, and feedback to the project.
How is the app open source? Don't you know that VLC got pulled from the iTunes Store?
Yep, we know. Unlike the Android version, which is licensed under the GPL, the iOS app is dual-licensed under the GPL and MIT licenses. As far as I know, the iTunes Store distribution of an MIT-licensed app doesn't present conflicts.
Why is the app $1.99 in the iTunes Store and $2 in the Android Market? Why the 1 cent difference?
That's an Apple thing. You don't set your own price in the iTunes Store, you choose one of the preset pricing tiers, $0.99, $1.99, etc. In general I don't like using the 99-cent psychological trick of making customers think something is cheaper than it is. I prefer pricing my books, apps, etc, at a simple number (10 bucks versus $9.99). But I didn't have a choice in iTunes.
In general, this lack of freedom around setting app details really put me off. Apple's opinions about what your app should be are foisted upon you, and sometimes you can opt out, but not always. For example, right now I'm completely annoyed that the "shine effect" iOS automatically adds to your app icon is showing up on the icon in the iTunes store, even though I opted out of it in the app's plist file so it doesn't appear on your homescreen when you actually install the app. Argh.
What did you think of Xcode?
Xcode is very nice, and compared to Eclipse (where I do my Android development), much faster, simpler, and better-looking. I still have a lot to learn about using it.
Are you switching to an iPhone now?
To celebrate the app's release, I bought myself an iPhone 4S yesterday. It's nice. I don't know if it's nice enough to make me abandon my Nexus S. I'm already missing navigation and Android's superior Google Voice app, which I live in on my phone. But, it's been years and several versions since iOS has been my full-time mobile OS, and I'd like to get better-versed in the pros and cons of it versus Android. So we'll see.
Anything I didn't cover? Comments here are off for technical reasons (they're broken), but you can ask me on Twitter.
I spent most of the holiday weekend organizing and backing up my files. I used ?VisiPics to delete duplicates and lower-resolution copies. I went through the rest to get rid of blurry pictures, and rated the pictures so that I could easily find highlights.
Although hard drive storage is relatively inexpensive, attention costs more, so I was more ruthless when it came to weeding things out. I figured that since we’ve survived thus far without a complete pictorial record of our lives, I’ll be okay even if decades down the line, I wish I’d kept this or that blurry picture of Neko sleeping under the blanket on the couch. No sense in stressing out over storage, or in overloading my ability to organize by insisting on keeping everything.
I burned my archives for 2011 and 2010 onto DVDs so that I could restore the data even if something happened to my hard disk. I also backed up my data to network storage.
With the basics out of the way, it’s time to think about what I want from my archives and how to structure things to make it even easier to work. I care the most about the following categories:
- Blog posts and notes: I want to be able to review my experiences, decisions, and lessons learned.
- Pictures: I want to trigger memories, particularly as I help write family stories. I want to index the pictures by person, so that I can search for combinations of people.
- Drawings, sketchnotes, and mindmaps: I want to trigger memories and lessons learned using sketches. I also want to track my progress, which means chronologically ordering my sketches as well.
- Book notes: I want to be able to review my book notes by topic and annotate them with questions, actions, and follow-up items. I want to slow down and take more notes while reading books, translating them into ways I can improve my life.
Archives are good for recovering data, but I wonder how I can structure things so that I can use the past to make the future even better.
Some ideas for what usefulness might look like:
- A photograph encourages me to write a story, fleshing out the memory more; it might also get me to write that person
- A blog post prompts me to revisit an idea and build on it.
- A decision review leads to better decisions
- Book notes nudge me to follow up on how I’m applying what I’ve learned, and I might reach out to people and tell them about the book
We use Bibble 5 to organize our photos. Bibble has a mode slideshow that can go through more than one slide a second, which is great for rapid review. That might be good for reviewing photographs and drawings to see if any of them trigger a quick memory or feeling. Rotating my desktop background through chosen highlights can also give me a peripheral awareness of faraway family and friends.
For blog posts and decision reviews, my monthly-ish and annual reviews are good for revisiting recent posts. Now that I’ve loaded my archives onto the Kindle, I can also flip through them while waiting.
My scanned mindmaps aren’t as useful for quick recall/addition as I’d hope. This could be because my paper-drawn mindmaps sometimes have text written sideways or upside down (yay for rotating), which is harder to read when I’m flipping through everything in the same orientation. If I stick to writing horizontally and I use bigger, more visual concepts, I can get more of an impression during a quick review. I’ve also used computer-based mindmaps like Freemind. They feel a little different, and I still have to figure out a better way to build mindmapping into my workflow.
Sketchnote-wise, I’ve learned that although ?OneNote’s infinite scroll of paper is nifty, I like the limits and easy review of a single screen with layers. That’s why I’ve switched to using Autodesk Sketchbook Pro for most of my sketchnotes. They’re much easier to flip through, and I can add them to presentations and yearly reviews easily.
For book notes, slowing down and using a template will help me take better notes from books. It’s not about quantity, it’s about quality. It’s not how much I read, it’s how much I keep (and act on!).
It looks like the key things I can do are:
- Export picture highlights and set them as my desktop background. Print them for extra backup/flipping fun.
- Import my sketchnotes into Bibble and organize them using keywords. Figure out how to set up a slideshow shortcut to review them. I’ll organize them by year, then use metadata to pull different topics together.
- Use Picasa to tag faces in all of my pictures.
- Slow down and take more book notes. Translate books into actions.
How do you get more out of your archives?
Read the original or check out the comments on: Thinking about reviewing archives (Sacha Chua's blog)
Codecademy's Code Year is a weekly lesson for people who want to learn how to program. Over at Slate, Farhad Manjoo explains a few good reasons why you might want to do that at all, with a quick quote from me. When Manjoo emailed, he asked, "What are some good reasons for people to be more familiar with programming?" I replied:
First and foremost, learning to code demystifies tech in a way that empowers and enlightens. When you start coding you realize that every digital tool you have ever used involved lines of code just like the ones you're writing, and that if you want to make an existing app better, you can do just that with the same foreach and if-then constructs every coder has ever used. Learning how to code also makes you respect the incredible accomplishments of all the engineers who came before you, the importance of good data, and the systems and services we all take for granted every day, even mundane things like the software that runs an elevator or processes a credit card.
Secondly, an app is an act of self-expression, the same way a novel, a painting, a Lego starship, or a gourmet meal is. The difference is you can distribute your app to millions of people from your spare room over a phone line, so the potential impact of your creation is enormous. You can do the same with a blog post or an ebook, but a software app is a utility as well as a work of art. If you make a great one, it can become an intimate part of your users' everyday life, like their fork or belt.
To be completely honest with you, learning and knowing how to code is a huge power trip. It's hard work, but if you keep at it, you'll experience one revelation after another, and in the end, you're a mini-god. You can say "I made that machine perform an action I imagined in my head with these words." That's the best feeling in the whole world.
You Need To Learn How To Program [Slate]
I’m pretty happy with my Nexus S so far. It’s a decent phone with some solid apps and services. More importantly, it’s a well-equipped little pocket computer. However the more I use smartphones (and similar devices like the iPod Touch) the more I feel a nagging sense that I’m not really these devices well, at least not to their full potential.
While the devices in our pockets might be increasingly powerful general purpose computers I feel like we use them more for communication than for computation. That’s not to say that communication does not require computation (it does, lots of it), but we’re not using our devices with the goal of solving problems via computation.
This is perhaps a very programmer-centric viewpoint of mobile technology, but one that is important to consider. Even someone like me, who writes code on a regular basis to solve a variety of both personal and research problems, does very little computation on mobile devices. In fact, the most I’ve been using my Nexus for is email, RSS reading, Twitter, Facebook and Foursquare. While all those services definitely have good uses, they are all cases where most of the computation happens far away on massive third-party datacenters. The devices themselves act as terminals (or portals if you prefer a more modern-sounding term) onto the worlds these services offer.
Just to be clear, I’m not saying that I want to write programs on these devices. Though that would certainly be neat, I can’t see myself giving up a more traditional computing environment for the purposes of programming anytime soon. However, I do want my device to do more than help me keep in touch with my friends (again, that’s a worthy goal but just the beginning). So the question is, what kind of computation do we want our mobile devices to do?
Truth be told, I’m not entirely sure. One way to go is to have our phones become capable personal assistants. For example, I would like to be able to launch an app when I walk into a meeting (or better yet, have it launch itself based on my calendar and geolocation). The app would listen in on the conversation, apply natural language processing and generate a list of todos, reminders and calendar items automatically based on what was said in the meeting. Of course there are various issues (privacy, technology, politics, corporations playing nicely with each other) but I think it’s a logical step forward.
As payment systems in phones become more popular, I’d like my phone to become my banker too (and I’m not just talking about budgeting and paying bills on time). For example if I walk into a coffee shop my phone should check if I’m on budget as far as coffee shops go and check coffee shops around the area to suggest a cheaper (or better, for some definition of better) alternative. And it doesn’t just have to be limited to coffee shops.
Mobile technology is sufficiently new that most of us don’t have a very clear idea of what to do with it (or a vision of what it should do). Most so-called “future vision” videos focus more on interfaces than actual capabilities. However this technology is evolving fast enough that I think we’re going to see the situation improving quickly. With geolocation-based services, NFC and voice commands becoming more ubiquitous and useful the stage is becoming set for us to make more impactful uses of the processors in our pockets. As a programmer I would love to be able to hook up my phone to any cloud services or private servers I’m using and be able to interact with them. The mobile future promises to be interesting and I’m definitely looking forward to it.
I’ve been fiddling with Quantified Awesome, this personal dashboard that I’m building so that I can keep track of what’s going on in my life and use that data to make it even more awesome. For example:
- Tracking my time helps me make sure work doesn’t tempt me too much, and that I make time for both personal projects as well as connecting with other people. It also helps me improve my time estimates: How much time does it really take to walk to the subway station? How instant are instant noodles?
- Tracking library books reminds me before they’re overdue, helps me collect my reading history, and gives me a greater appreciation for where my tax dollars go.
- Tracking my clothes helps me remember to wear different types of clothes more often, makes it easier to donate items I don’t typically wear, and encourages me to try new combinations.
- Tracking the produce we get from community-supported agriculture helps us avoid waste.
- Tracking stuff helps me remember where infrequently-accessed items are.
It turns out that other people are interested in this too. 21 people have signed up through my “I’ll e-mail you when I figure out how to get this ready for other people” page, and my mom wants to use it too. That’s awesome!
Now I have to go ahead and actually build it so that other people can use it. That’s scary.
And like the way I deal with other scary, intimidating, procrastination-inducing things, I’m going to list my excuses here, so that I can shine a light on those assumptions and watch them scurry away like the cockroaches they are and, if necessary, squishing them with a well-applied flipflop.
- Excuse #1: Idiosyncrasy. The way I work might be really weird, and other people may not be able to figure out what to do.
- What’s the worst-case scenario? “I have no idea how this works!” I end up with lots of crufty special cases because I can’t figure out how to reconcile different ways of working.
- What’s the best case? I adapt the system to the way other people work, and I get inspired by what they do. I build a lovely, flexible web app and API.
- Excuse #2: Risk. I’m fine with loading my own data into an experimental system, but if I mess up and delete other people’s data, I’ll feel terrible. Also, they might trigger bugs.
- What’s the worst-case scenario? Catastrophic data failure, nothing saved.
- What’s the best case? Regular backups help me recover from any major mishaps, and careful coding avoids more common mistakes.
- Excuse #3: Support. I’m going to spend more time handling bug reports and feature requests, and less time building little things that might be useful only for me.
- What’s the worst-case scenario? People get annoyed and frustrated because I’m currently focused on other things, like my work.
- What’s the best case? I get the system to become mostly usable for people, and I use my discretionary time to build more features. People’s requests inspire me to build more stuff and create more value.
- Excuse #4: Documentation. I’ll need to write documentation, or at the very least online help. This means confronting the less-than-intuitive parts of the system.
- What’s the worst-case scenario? I describe what currently exists, get frustrated because I want to improve it, and end up cycling between updating documentation and improving the system.
- What’s the best case? I describe what currently exists, and end up improving it along the way. I build online help into the system so that it’s easy to change. There’s a blog that helps people learn about updates, too.
- Excuse #5: Offline access. A web-based time tracker might be of limited use if you don’t have web access often. I’ve been working on an offline HTML5 interface, but it’s still buggy.
- What’s the worst-case scenario? Early testers try it out, but get frustrated because of the lack of offline access.
- What’s the best case? I figure out the HTML5 offline thing. Someone else might be interested in building a native app, and we work together on fleshing out an API.
- Excuse #6: Impatience. If I bring people on too early, they might get annoyed with a buggy system, and lose interest.
- What’s the worst-case scenario? People give it a cursory try, and give up in annoyance.
- What’s the best case? Early users are extraordinarily patient. We figure out a minimal viable product for each of them – the simplest thing that could possibly support what they want to do. Over time, things keep getting better and better. Also, I build a decent export interface, so even if people move on to a different system, they’ll still have their data.
- Excuse #7: Privacy and control. A bug might accidentally expose people’s information, which is not fun. I also don’t want to have to police the system for objectionable content, considering the thumbnail uploads.
- What’s the worst-case scenario? Someone’s private notes get accidentally published.
- What’s the best case? People sign on knowing that I might have bugs, and don’t save any super-secret or inappropriate information on the system.
Okay. I think I can deal with that. So, what are the smallest, least-intimidating steps I need to take in order to get closer to opening up?
- Write a quick test to make sure that people’s data will stay private. We’ll make people’s accounts private by default, although mine will stay mostly-public.
- Make a list of things that people should be able to do right now. (Not including new functionality!) Gradually write tests to nail down that behaviour.
- Make a list of things that people may want to do some day. Eventually set up an issue tracker.
- Enable Devise’s invitable feature so that I can set up accounts for people easily.
- Doublecheck backups.
- Bring one person on. Then the next, then the next…
It will still be better than nothing, it will be a good learning experience, and participation is purely voluntary anyway.
One step at a time.
Read the original or check out the comments on: Quantified Awesome: Squishing my excuses (Sacha Chua's blog)
Link: The maker makes: on design, community, and personal empowerment
Jeffrey Zeldman:
The first thing I got about the web was its ability to empower the maker. I say “it made me” but I made it, too. You get the power by using it. Nobody confers it on you.
I’m working on the stylesheets for a site, which means lots of fiddly little changes.
I decided to make all of my styling changes to my Sass source files instead of editing the attributes in Google Chrome because I found myself forgetting to copy attribute values back from Chrome. Editing the source files directly meant that the changes would be persistent – a slightly slower workflow, but a more reliable one.
I used Chrome to set selected divs to show up with display: block. This meant that I didn’t have to keep triggering hover behaviours myself. Then I used CSS Reloader to reload the stylesheet. Chrome kept my manual attribute changes, like display: block, while applying the new styles. Awesome!
I wanted a quick way to update my browser windows after I saved the file. Saving would automatically trigger Compass’ conversion of the Sass files into CSS, but the browser still used the old stylesheet until I trigged CSS Reloader with F9 or the context menu. I didn’t want to refresh the entire page because that would lose the display: block I’d manually set.
?AutoHotkey to the rescue! I wrote a function that saved the current file, waited for Compass to convert the Sass file into CSS, and then used the CSS Reloader shortcut key on all open Chrome windows. This meant that I could have a translucent browser window superimposed on the design PDF for easy comparison (thanks, ?WinWarden), and an opaque browser window for inspection and navigation.
RefreshStylesheets() {
Send, ^x^s
Sleep, 2000
?SetTitleMatchMode, 2
?WinGet, id, list, Chrome
current := ?WinExist("A")
Loop, %id%
{
?StringTrimRight, this_id, id%a_index%, 0
?WinActivate, ahk_id %this_id%
?WinWaitActive, ahk_id %this_id%,,2
Send {F9}
}
?WinActivate, ahk_id %current%
}
Then I mapped it to my foot pedal, just because I could. I didn’t need to take advantage of the 3-way switch, so I mapped all 6 possible functions to ?RefreshStylesheets.
+F1::RefreshStylesheets() +F2::RefreshStylesheets() +F3::RefreshStylesheets() +F4::Send, +F1 +F5::Send, +F2 +F6::Send, +F3
To make it even easier to fine-tune tiny differences, I installed Magnifixer. I used the “Fixed” mode to magnify the translucent portion I was working on, and I moved the display next to my code. That meant that I could avoid turning my head all the time. I could simply tweak my code, nudge the pedal with my toes, glance at the display (or use peripheral vision!), get it right, and then check the overall view.
Foot pedals are fun. More fun than mapping the shortcut to something like F9 or F12, which would involve taking my fingers off home row and finding a small key. You can literally stamp out bugs.
All this put me in such a good humour that I ended up getting the homepage almost pixel-matched to the specs, except for the limitations on letter-spacing and the adjustments I made for the inconsistencies in the spec layout.
Whee! I can’t wait to use this idea when developing backend code. I’ve played around with Autotest on a Rails project, and it should be a simple matter to write a shell script running selected tests on any project. Fun!
Foot pedal + second monitor = awesome squared.
Read the original or check out the comments on: CSS theming, magnification, and foot pedals (Sacha Chua's blog)
I missed last Wednesday's 2011 Year in Review episode of This Week in Google because I was on an airplane somewhere over New Mexico. That doesn't mean I don't have a list of things I'd like to see Google do in 2012.
In no particular order:
Release a killer tablet. Price this tablet head-turningly less than the iPad, make it run Ice Cream Sandwich flawlessly, and offer completely sandwiched-out apps that absolutely scream for the big screen. Forget trying too hard not to offend other Android device manufacturers. Googorola should get this tablet exactly right, down to every last ever-loving detail, with the hardware and the software teams living, breathing, eating, and sleeping together on it. Get at least a few third parties who make apps that cover the major categories of things people do on tablets (news browsing, gaming, social media) to play along before launch, like the NY Times, Twitter, Angry Birds. Google has their core apps covered: Gmail, Calendar, and Maps already appear to be upgraded for ICS and therefore should look fantastic when they unfold on a tablet screen. Don't use chase scenes and explosions or even robots in the advertising. Cash in on Google's brand loyalty and recognition and market it simply as "the Google tablet." The messaging should be: If you use and love Google, this is your tablet.
Stop talking about Google TV and start shipping. The latest Google TV update to Honeycomb came so many months late that it's already behind a version. With the exception of Netflix and Plex (which is total nerdware), the GTV app selection and functionality is pitiful. Google needs to do whatever it takes to get the ABC/CBS/NBC player apps for GTV done, so the main selling point for Google TV—a browser on your TV—isn't completely undermined by ABC/CBS/NBC.com's "Sorry this episode is not available for your device" message.
Beyond Android, more broadly I'd like to see Google:
Raise the bar for what's ready to ship. Google's always taken the release-early-iterate-quickly approach to shipping software, and it's worked very well for them. But sometimes it backfires. Honeycomb was not ready to ship. G+ business pages was not ready to ship. Google+'s community rules around real names was not ready to ship. Betas can be shipped too early. In 2012, I'd like to see Google hold back more and fully bake products before they release.
Aggressively design for users first, not nerds. Siri de-nerdified voice interaction on a mobile device. Google had the opportunity and the technology to do this with Android's Voice Actions and they didn't. Suddenly Google is playing catchup on a technology they had a huge initial jump on. Speaking of...
STOP playing catchup. Google' mobile and social product releases in 2011 felt like they were chasing the taillights of Apple and Facebook. Stop chasing and start forging new paths with innovative user interfaces designed for humans. Give us something new. Be clear and opinionated about how it differentiates itself from every other offering, and ship when it's ready, on your timeline, not someone else's.
Compromise less. Play hardball more. Google needs to throw their weight around more when it comes to product. For example, every device that runs Android and carries Google's name on it should guarantee operating system updates within a reasonable amount of time (reduce 18 months to 6), should NOT ship with un-uninstallable crapware, and it should not disable core Android features.
"Open" doesn't necessarily mean every feature gets included, it doesn't necessarily mean design-by-committee, and it doesn't necessarily mean cheap and mediocre. Google is in a position to prove this. In 2012, they need to work harder to do so.
This year I’ve decided to make a foray into the future by finally getting myself a proper smartphone. I’ve had an iPod Touch for a while but also had a simple Nokia not-smart phone to make actual phone calls. It’s always been somewhat annoying to have to manage two devices: a real phone for calls or texts and the iPod for any Internet and data-related work. A large part of my resistance to getting an actual smartphone was that I simply didn’t want to spend a lot of money on a cell phone plan when I was surrounded by wi-fi all the time and barely made actual phone calls. But now that there are finally both reasonably cheap unlocked smartphones and contract-free data plans I decided to bite the bullet.
The unlocked iPhone 4S would end up costing me a tad over $800 after tax and Applecare. I was also getting bored of the iOS ecosystem and its closed, silo system for apps. So instead I got myself a much cheaper unlocked Android phone – the Google/Samsung Nexus S. I’m pairing that with a $30 a month T-Mobile data and phone plan. I’m still waiting for a new SIM card to show up but till then I’m making use of the ample wifi coverage that’s a side-effect of living in a college town. For now, I’m only going to talk about my first impressions on the Nexus S itself.
The Nexus S is Google’s previous flagship phone. Its current flagship is the Galaxy Nexus which Google is also selling unlocked. However it’s almost twice the price I paid for the Nexus S and in my opinion, isn’t sufficient of an upgrade to justify the price. Even though it’s about a year old by now (and technically running the old version of Android), I haven’t had a problem with it so far.
It looks pretty different from the iPhone and the plastic feel takes some getting used it. I also think it slips more easily, but that might just be a personal problem. The back of the phone has something of a ridge at the bottom which I guess is supposed to make it easier to hold. Though the build quality does feel inferior as compared to the iPhone, I like it and have no major complaints.
The Android sofware feels like a breath of fresh air as compared to the iPhone. It is considerably more customizable and I like the presence of both tradiiontal apps as well as “widgets” that add functionality directly to your home screens. I’ve found widgets great for quickly looking up data like the weather, Twitter mentions or what system services are currently running.
The tinkerer in me loves how customizable the Android system is. Changing the look and feel is just the beginning. There are a lot of bells and whistles and options and sometimes it can be a rather confusing. For now I’ve only stuck to the usual set of apps (Twitter, Foursquare, Camera) but I’m looking forward to trying out new and interesting apps in the future. More than that I feel like Android would be a really good platform if I decide to get into mobile dev anytime soon.
There are a few things about the Nexus S that I’m concerned with. I think the battery life is a tad too short, especially with the geolocation services on all the time. Luckily, the battery monitor widget makes it simple to turn off services with a touch so maybe some manual management might make it better. While the Google apps are really well integrated (especially Google Voice) and apps from large companies are well done, third-party apps seem to be of considerably less quality than iOS equivalents. I don’t really blame the developers given the multitude of devices but it does mean that finding good apps for simple things like RSS is more difficult than it should be.
Despite the glitches and minor annoyances I really like the Nexus S. The hardware is pretty solid and I like Android so far. Right now having a fully functional smartphone is still pretty new to me, but I’m hoping that when the novelty wears off I’ll dive into actually programming the powerful computer in my pocket.
After a good summer season with Plan B Organic Farms, we decided to sign up for their fall season as well. This time, I made sure to weigh and track all the produce that came in. I also took notes on what we did with the produce to make it easier to think of ways to use them before they were wasted.
Here’s what I was curious about:
- How much did we get?
- What was the cost per kilo or pound?
- How does it compare to organic produce prices at the supermarket?
- What were the proportions like? Did they match up with our perceptions?
- How do I feel about the different vegetables now?
How much did we get? Over the 11 distributions I tracked, we received a total of 71.6 kilograms of organic produce and a container of apple cider. This worked out to an average of 6.5kg per distribution, with a standard deviation of 1.08kg.
What was the cost per kilo or pound? Weekly half-shares cost $25, about $3.84/kg or $1.75/lb of organic produce (not including the cider).
How does it compare to organic produce prices at the supermarket? The No Frills supermarket we usually shop at doesn’t have a wide selection of organic produce, so I used prices from ?GroceryGateway instead. In a past analysis, I found them to be usually 10% more than No Frills prices, and there are minimum order limits and delivery fees as well. Using the prices for organic produce whenever available and guessing “bunch” weights from my data, I calculated that we received an average of $31 of produce each week (including the cider). This worked out to a savings of $6 per week, or 20% (not including taxes, delivery charges, or other purchases to meet the minimum).
Would we have bought all that produce if we weren’t part of the community-supported agriculture program? I’m not sure, but the commitment device of having a box of vegetables come into our house every week helped us improve our diet.
What were the proportions like? Did they match up with our perceptions?
I’m surprised by this, because it felt like we received a whole lot more squash and cabbage (which I’ve included in the Greens category). They were bulky and not in our usual cooking repertoire, so they were more of a challenge. We mostly managed to finishing the cabbage, but we had to cut up and throw some of the squash away. The apples and tomatoes were occasionally suspect, too.
Here’s the breakdown within each category:
On average, we received 11 different types in a distribution (standard deviation = 1.2), covering 32 different types in total. The fall box included imported items such as bananas and kiwi to fill out the selection, as well as produce grown in greenhouses.
How do I feel about the different vegetables now? After two seasons of community-supported agriculture, I’m more comfortable with dealing with the increased volume of vegetables passing through our kitchen. We’ve organized the pantries with bins so that we can store all the squash and onions neatly, and we manage to get through the produce in our fridge drawers in a reasonable period of time. We waste a small fraction of the produce through inattention (apples, mostly), but have managed to convert most of the produce into good food. I’d say we’re working at 90-95% efficiency or so.
Some experimental recipes have been more fun than others. Sweet potato fries have become a favourite in the house. Baked acorn squash with brown sugar and butter is a nice winter dessert. We discovered that adding sausages to butternut squash soup makes it much easier to finish. Turnips and beets still need a lot of tweaking.
We’ve signed up for a bi-weekly winter share from Cooper’s Farm CSA in order to take advantage of delivery. We happened to start with their program in time to make a side-by-side comparison with Plan B Organic Farms, and they turned out favourably (although their produce required more scrubbing). We’ll see how things work out over the next season.
How I tracked this: I built a small tool for tracking community-supported agriculture into my Quantified Awesome website. Every week, I weighed all the produce and typed in the their names and weights. At the end of the season, I copied the data and used pivot tables in Microsoft Excel to analyze the results by category and week. I manually checked the ?GroceryGateway website for prices, and I used VLOOKUP to cross-reference the data with the prices.
My input system didn’t do anything special that a spreadsheet couldn’t handle, although I liked how the weights became part of my dashboard. If you want to start tracking either community-supported agriculture or your regular groceries, you can start with a spreadsheet (Microsoft Excel or ?OpenOffice). Log the produce you receive or buy, and summarize them in ways that help you answer your questions. Have fun!
Read the original or check out the comments on: Quantified Awesome: Community-supported agriculture with Plan B Organic Farms, fall 2011 (Sacha Chua's blog)
About the Planet
All content is the property of the original authors, and is republished here: with permission of the author, under the terms of a creative commons license, or with the understanding that this reproduction constitutes fair use. If you have been included in this planet in error or wish to be removed (or have a blog that you would like to add), please contact me. For a (mostly) current list of sites aggregated in this feed, please see PlanetSources.
Links: people/madalu
Last edited Mon 07 Sep 2009 04:55:14 PM EDT

