Tuesday, March 31, 2015

Part 6 of Who are you designing for? Or, thoughts on the Lenovo Thinkpad X1 Carbon. Or, trying to buy some more happiness.

Here is what each elevator lobby looks like in the new San Francisco Federal Building:

Pretty awesome, right?  However, it turns out that there's a reason most elevator lobbies are not five elevators wide.  That's because when the elevator comes at the far side of the lobby, the doors will be closing by the time you walk over to it.  You can try to figure out where to stand based on which elevator may come next, but only the ground floor has indicators.  And those are illegible because of the fancy lighting:

Thanks, award-winning architect Thom Mayne.  Like most fancy architects, he seems to most concerned with how things look.  And to be fair, I do feel a nice boost walking around in such a pretty building.

Of course, not all parts of the building are pretty.  The measure of an architect, I think, is how they do with the less glamorous parts of a building.  Like bathrooms and staircases.  I'll spare you the bathrooms and just show you the stairs:

What does that have to do with the X1 Carbon laptop?  My thesis is that designers of luxury consumer electronics tend to fail in the same way that architects do, in the actual human usability of their designs as compared to their visual impact.
... some say that "it's not a copy of the MacBook Air at all". However, you mentioned that "you cannot say that the design wasn't influenced by the MacBook Air". Could you elaborate on this?
Hirano: Our CEO's request was to "beat the MacBook Air". For this reason, I did a lot of research on the MacBook Air.
To be honest, I have a high regard for the current 2nd generation MacBook Air. It's a great product. ... What I learned from looking at the MacBook Air was not little. ... However, after more designing and internal reviewing was held, I received a request for it be "more like a ThinkPad and have a design geared towards businesses". In the back of my mind, I was happy because I didn't want to just make copy of the MacBook Air.
So then, the final design was born with my idea of "what a ThinkPad should be like".
What a ThinkPad should be like is, in my opinion, it should be like something that works well for its purpose, which is computing.  Function over form.  And form is not nothing, so it should also follow ThinkPad form, which is black and square.

Not to Hiroki Hirano, lead designer of the X1 Carbon.
What exactly was the design concept of the X1 Carbon?
Hirano: It's hard to put in a nutshell. I'm not confident I can put it in words because a lot of my designs are created naturally based on the feature/functions and those kinds of things aren't put in words usually.
I guess if I had to say, the concept would be something like a "well-tailored, slim-cut, airy and sexy business suit". ...
The basic concept of the ThinkPad has not changed for 20 years. A lot of people call it the "Black Bento Box". Among designers, we like to think more out of the box and look at it with its "ThinkPad DNA". With such, it doesn't have to be black, have sharp edges or have a rock-solid like body.
If ThinkPad DNA doesn't have to include black, square, solid, or usable, then what exactly is left?
The concept of the X300 was as its code "Kodachi" implies, "a sharp cutting sleek sword". The X1 Carbon does not have a single concept but the major idea behind it is to be a "well-cut pair of chopsticks".
A "well-cut pair of chopsticks" is easy to hold and made to not slip with a polygonal shape.

Steve Jobs' design DNA seems to be "consumer electronics as mass market luxury art object."  The front edge of the keyboard perfectly symbolizes the difference between Apple DNA and IBM ThinkPad DNA. When I put my hands on a MacBook, I was instantly uncomfortable because the edge is actually sharp and dug into the palms of my hands:


Steve Jobs seemed to have a recurring contempt for the flesh, his own and everyone else's.

In very stark contrast, this is the front edge of a typical ThinkPad keyboard; here, an X200s.  Not nearly as shiny or pretty.  But very usable.

At least, it was, until Hirano decided that chopsticks and knives were good models for ThinkPad designs, and then literally (look at the chopsticks picture above.  Literally) forgot which end of the chopstick or knife one is supposed to hold.  Here's the edge of the ThinkPad X1 Carbon:

Thanks, Steve.  Lenovo stole the most user-hostile parts of your design.  You must be very happy.  The hole at the edge of the older ThinkPad keyboard, by the way, is a drain, because the whole keyboard tray is designed to contain spills, keep them out of the electronics, and direct them out the drains.  In Steve-world, only fallible humans would ever spill liquid on their keyboards.

So.  In summary, I love the X1C3.  In many ways it's the best laptop I've ever had.  Once Linux support catches up to the boneheaded fixes to the boneheaded design errors, it will be even better.  But to get there, we had a nice long detour through the hubris of a few industrial designers, or their bosses, or both.

Monday, March 30, 2015

Part 5 of Who are you designing for? Or, thoughts on the Lenovo Thinkpad X1 Carbon. Or, trying to buy some more happiness.

So, I bought a ThinkPad X1 Carbon 2nd Generation, which had a horrible keyboard design, and while I had my own peculiar reasons for liking the rearranged keys, I still found the replacement of physical mouse buttons and function keys with touch strips unworkable.  After I'd had it for two months, I learned that the 3rd Generation had been rushed to market and undone these changes.  Too bad the return policy was only good for 1 month.

Here's where things actually get happy.  I called and complained and Lenovo offered a full refund, conditional on buying another laptop.  That seemed pretty reasonable so I went for it.  This time it took about a month, not two weeks, of driving myself mad by checking the manufacturing status page every day, many times a day.  But at least there was an explanation to be found out in the fringes of the internet:

... I've ordered X1C3 22/01/2015, made complete payment, during checkout it estimated 7-9 busyness days for shipment. 1 month passed already since that moment and I still did not receive anything ...
I'm pretty upset with Lenovo's delivery methods and estimates too at the moment. But before I rant, I'll let you know what I've been told.
The past week was the Chinese New Year so Lenovo's plant has been closed and will not open until tomorrow the 24th (I think).

Okay, I can live with that.  The saga wasn't over, since the laptop then got delayed briefly when a massive snowstorm shut down the state of Kentucky, which is the UPS hub airport, but these are the very definition of first-world problems.  I got my third generation, and ... well, the physical keyboard has been fixed, but who are you designing for?  Windows users, of course.  Restoring the buttons was apparently a rush job, and the Lenovo engineers took shortcuts in the hardware that they compensated for in the Windows software.  The Linux community was left to figure it all out and compensate for it on their own.
So in short, Lenovo has decided to wire the newly re-introduced trackpoint buttons to the touchpad, not the trackpoint.
In case you've heard of Linus Torvalds but don't know what he actually does all day, here's a taste.  He spends his days adjudicating proposed changes to Linux such as this:
[Update 19/03/15]: The patches queued in Dmitry's for-linus branch re-route the trackstick buttons in the kernel through the trackstick device.
And it's Linus's job to look at that code and decide if it can be put into the official Linux kernel.  Fun.

Okay, I think that covers the whole keyboard debacle, when Lenovo went insane and tried to destroy recklessly innovate with the core feature of their most famous brand.  The X1 Carbon 2nd Generation was released with self-congratulatory blog posts and marketing videos.  Was there a blog post mea culpa for the 3rd Generation?  No, there was not.  In the next installment, let's talk about the similarities between designers and architects.  Hint: hubris.

Sunday, March 29, 2015

Part 4 of Who are you designing for? Or, thoughts on the Lenovo Thinkpad X1 Carbon. Or, trying to buy some more happiness.

Look at this ThinkPad X1 Carbon 2nd Generation Keyboard.  Look for the Home, End, CapsLock, Backspace, and Delete keys.  They are all moved around!

I'm actually totally fine with this, but only for uncommon reasons.  The complaints I've read about this are, first, that it breaks keyboard convention, and so screws up muscle memory for anyone switching between it and other layouts, and second, that these new placements are wrong and illogical.

I don't really care about laptop to desktop muscle memory conflicts because, when I'm using my personal or work desktop computer, I'm on this keyboard:
Which is different enough that its muscle memory doesn't interfere with laptop keyboard neurons (and when I use somebody else's keyboard, the fact that it's not Dvorak makes everything else trivial.  don't be weird and picky, or nothing will ever be to your satisfaction). And with a month of use I was getting pretty used to the new arrangement, and I do find them more logical.  Backspace and Delete have exactly the logical relationship implied by this keyboard arrangement (backspace to delete the thing to the left of the cursor, delete the thing to the right of the cursor) and I think this vindicates Jef Raskin.  Similarly, Home and End make perfect sense side by side and replacing the CapsLock, but a) I've never gotten around to replace CapsLock with Control, which is probably better, and b) I'm already used to Control-A for Home, so my left pinky is already good to go over there.

I did have trouble consistently hitting the innermost in each of the key pairs (End, Backspace), which I think shows that Fitts's Law applies to fingers as much as mouse pointers.  It's easy to reach the outermost of each key pair, because the finger goes quickly to the edge of the keyboard by touch and then selects the key, just as it's very easy to mouse to any point on the edge of the screen, but it was much harder to move the fingers half-way.  I think my fingers can only reliably go one and a half rows away from the home row, so the number row is never quite automatic.  Past that, I can reliably touch-type keys at the corners of the keyboard.  Anything in between requires a look, especially if the keys deviate from convention.

And that's the real problem with this design: it breaks convention for a minor improvement. Breaking convention imposes a cost on users to switch, and a minor improvement rarely justifies that cost.  Who are they designing for?

Well, it turns out that they learned pretty quickly.  The X1 Carbon 2nd Generation came out two years after the 1st Generation, but the 3rd Generation was released only one year later and it reversed all three changes:

Of course I'm thrilled about the mouse buttons and the function keys coming back.  I'm less happy about Home/End/Insert/Delete.  It seems like laptops have no idea or standard where to put these keys, and I think the most popular and successful convention is to keep the three by two row from the standard 101-key keyboard.

That's what they did on the X300 (look at the top right corner):

Why not just go back to that? Okay, so with the latest X1 Carbon, the 3rd Generation, the Lenovo designers abandoned the three major changes of the 2nd Generation keyboard and returned to the 1st Generation design, in a change that was rushed out in half the time of the previous version.  They saw the light, or the sales figures.  But I was stuck with a 2nd Generation.  Or was I?  Stay tuned ....

Saturday, March 28, 2015

Principal-agent problem

I think what is going on here is that the local CVS franchise trying to bribe customers to give it a high score in survey from the central corporate office.  Thanks to my MPA degree I can recognize this as a principal-agent problem.  Perhaps if I go back for a doctorate I will learn what to do about it.  Or I suppose Gramsci or someone else from the Marx Madness bracket would ask, why do I immediately see it from the perspective of the corporate office, which does not want a franchisee to manipulate the system?  Why does anything have to be done about it?

Friday, March 27, 2015

Part 3 of Who are you designing for? Or, thoughts on the Lenovo ThinkPad X1 Carbon. Or, trying to buy some more happiness.

Let's talk about the incredible decision to radically change the keyboard of the ThinkPad X1 Carbon 2nd Generation, when a great, traditional, and high-performing keyboard has been the defining characteristic of the ThinkPad brand.

The first big change is that the mouse buttons are gone.  The second big change is that the physical function keys are replaced with a touch strip.  The third big change is that some of the keys are re-arranged from a more traditional arrangement.  The first two changes are disastrous; the third is just a bad idea that I actually kind of like.

Instead of physical mouse buttons, the entire touchpad clicks, and the system then guesses which button you intended to press based on where you are touching it with your fingers, where your fingers are near its surface, where the thumbs you didn't realize count as fingers are, and the purity of your heart.  This does not work.  I got the mouse click I wanted about 50% of the time, and sometimes needed three or four or five clicks to get the desired result.  If this were a mouse I would consider it broken.  I suppose results may be different if you use the touchpad instead of the TrackPoint as the pointer, and perhaps none of the human beings who ever physically touched an X1C2 prototype ever used the TrackPoint; it's hard to imagine any other scenario in which this was not considered a showstopper problem.  The ThinkPad design blog offers this justification:
We unified the clickpad by integrating the trackpoint buttons into the elegant glass touchpad, making it appear even larger and more streamline.
The second bad decision is the function key touchstrip.  It has no tactile response to clicking, it has no tactile way to know where the key boundaries are, it takes around a second to change modes, and it is sensitive to false positives.  Each and every one of these four problems individually disqualifies it from replacing physical keys.  It offers no significant benefit over keys in usability.  I can't even speculate why they thought it was a good idea.  Here is what it's like to use to lower the volume:

1. look at it
2. touch it in the general region of the volume down icon
3. wait a moment while nothing happens
4. realize it's in the wrong mode.  If it was in the right mode before, you probably missed it and hit the adjacent mode-changing button anyway, but it was probably already in the wrong mode.
5. touch the mode-changing button (Linux only supports two of the four modes, so I guess that's a blessing in disguise)
5. wait a moment while nothing happens
6. look at it to confirm it's changed modes
7. touch it in the general region of the volume down button
8. wait a moment while nothing happens

and then the volume changes.

Here are the steps with a physical key, after your body has integrated it into your muscle memory:

1. press the volume down key

Even people who don't touch-type probably develop this muscle memory quite easily, I speculate without any evidence.  The touch strip is a horrible design decision.  Instead of working function keys and laptop control keys, the X1C2 has a replacement that is worse in every way and better in none.  For anyone who routinely uses function keys in touch-typing, this should render the X1C2 unusable; for me it was a close call.  I can't really imagine which user they thought would benefit.  It's not like they don't test these things:
... to determine if and how we would make the changes to our keyboard in 2012, we embarked on one of the most in-depth keyboard studies ever conducted for ThinkPad. We did 350 hours of user testing with people in four countries. With each participant, we conducted 90- to 120-minute one-on-one interviews with hands-on use of different keyboard conditions to understand the latest about keyboard use and design preferences.
What doesn't make sense is how they managed to put that much effort into the new keyboard redesign in the X1 Carbon 1st Generation, which had a normal function key row and normal mouse buttons, and then so completely screw up the 2nd Generation.  There are mysterious hints of trouble at Yamato Labs in these interviews with the designers. These comments are from 2012, predating the X1 2nd Generation, but they do not instill confidence in the stewards of the brand.
I heard that there was a major turnaround during development. Did it involve the mechanical engineering?
Otsuka: Yes. I believe it affected the mechanical engineering more than anything else.

There were significant changes after the injection mold and die cast mold were completed. Of course, the changes also affected the product direction and the project as a whole, so all hell broke loose at the Yamato Office. Opinions on the changes were divided even within the company.

However, we took on the challenge that this major turnaround presented.


Looking back now I believe it was the right decision, as the X1 Carbon was improved so much that it became almost a completely different product to the initial plan.

I feel like for this one product we did enough design work for two or three products. I'm exhausted (LOL).

Otsuka: Allow me to share three surprises I think the whole development team would agree we encountered for the X1 Carbon.

1. The fact we actually achieved our goals
2. The changes in key members
3. A major turnaround

Unfortunately I can't go into the details of the changes in key members or the major turnaround.
A message from Akira Fukushima
This is Akira Fukushima, the new head of ThinkPad development Yamato Labs since August of this year [2013].
Would you trust this man with your eyes and hands?

It's fascinating that the blog provides all of this detail, and certainly the fact that I'm poring through it illustrates an alarming, almost Apple-fanatic-esque depth of investment on my part in the details of this piece of consumer electronics.  All I can say is that the moral has to be, don't be weird and picky, or nothing will ever be to your satisfaction, certainly nothing that requires economies of scale.

But let me pretend to sociological/marketing/usability research and point out that, despite all of this information, there is no good explanation of what benefits they anticipated from these two horrible changes. More hints in these comments:
Why, oh why do you remove the seventh row of the keys? Because it "avoids visual complexity and most people have no idea what these keys even do"? That's what you say in one of your videos. (Dom Delimar)
I took the liberty of calling 2 people at Morrisville and Raleigh and finding out what the reason was behind this and the answer was quite interesting: Lenovo are selling more of this type of keyboard. So that means die-hard ThinkPad enthusiasts are now becoming a minority in the sales figures and new Lenovo customers who probably have never had the history of typing on ThinkPads for decades, are on the rise. (ElliotR)
That's a pretty tough spot for brand stewards. How do you keep the die-hard fans and also grow your market? We'll come back to that after we talk about the third major, controversial change to the keyboard. Have you spotted it yet?

Thursday, March 26, 2015

This clause seems to be over on the evil side of the spectrum of Terms and Conditions

Roku reserves the right to amend this Agreement at any time, in whole or in part, in its sole discretion. Such amendments shall be effective immediately upon posting of the amended Agreement on Roku’s website at www.roku.com, via the Player, or within any Mobile App. In its sole option, Roku may also notify You of the amended Agreement by sending a notice to the last email address You have provided to Roku. You agree to provide accurate and complete information when You establish Your Roku Account, and You agree to promptly update Your account information (including contact information) to keep it accurate and complete. Following the posting of the amended Agreement by any of the methods described above, continued use of Your Player or any Mobile App, or continued access to Your Roku Account, constitutes Your express agreement to be bound by the terms and conditions of the amended Agreement.
So Roku can change the Terms and Conditions of their service at any time without notice and continuing to use the service constitutes agreement to the new terms.  Uninformed consent.  The only way a person could possibly have informed consent would be to download and read the Roku Terms and Conditions (a 21-page PDF) every time they went to use their Roku, and, I guess, every few minutes throughout usage.  It's hard to imagine that being legally enforceable but then I don't really have a sick and twisted enough imagination to be a lawyer.

Another fun gotcha term:
30-Day Right to Opt Out: You have the right to opt out of this agreement to arbitrate by sending a written notice of Your decision to opt out to the following address: Legal Department, Roku Inc., 12980 Saratoga Avenue, Suite D., Saratoga, California 95070; provided that, such notice shall be postmarked on or before the 30th  day after the first to occur of the following events: (i) the purchase of Your Player, (ii) Your receipt of the Player, (iii) the establishment of a new Roku Account if You do not already have a Roku Account prior to using Your Player, (iv) using or accessing the Channel Store, or (v) using, accessing or downloading the Software or any Mobile App. Your notice should include Your full name, Your current postal
Do I actually need to go read the privacy section or is it safe to assume Roku is selling every data point they collect in spammer auction houses?

Wednesday, March 25, 2015

Pop Quiz (with answer)


Are you utterly compelled to know what the book says?

a) yes
b) no

Quiz questions are normally not revealed but this one is so obviously a) that I thought I would go ahead and show you what the book says:

Tuesday, March 24, 2015

Part 2 of Who are you designing for? Or, thoughts on the Lenovo ThinkPad X1 Carbon. Or, trying to buy some more happiness.

So.  I got my Lenovo X1 Carbon 2nd Generation and put hands to it.  I'm going to tell you about it in lists:
  1. design decisions things that I like,
  2. design decisions that are reasonable tradeoffs
  3. design decisions that are horrible, disastrous mistakes that should never have made it into a released product, much less a flagship product from a traditional market leader,
  4. design decisions that favor style over functionality and thus betray ThinkPad brand, which stands for functionality over style—which is not the same thing as stylelessness or bad style, and
Here's what I liked unreservedly about the X1C2 (X1 Carbon 2nd Generation):
  • It's pretty
  • It's light (under 1.3 kg)
  • The screen is big and high-resolution.  2560x1440 in 14" diagonal is a bit over 200 DPI, or "Retina"-equivalent as long as it's at least 40 centimeters from your face.
  • The feel of typing on the keys, while different from traditional ThinkPad keyboard, is at least as good.
  • The keys light up nicely.
  • Performance is adequate to good (with the mid-range CPU option)
Here are the reasonable trade-offs:

Battery life.  There are basically two levels of battery life.  For any product.  Short enough that you are always worried about charging, and long enough that you are a bit surprised when it finally does need charging.  All of my previous ThinkPads have been level two, at least six hours of heavy use.  In exchange, the cost and weight of an expanded battery pack has brought them to 1.4 to 1.5 kg, and that has to be replaced, for $100 or more, after maybe two years, to maintain that performance.  The X1C is lighter, but battery life is right between the two levels, and the built-in battery is going to be harder to replace. In partial compensation, it charges really really fast.

Touch Screen.  I hate fingerprints on the screen, love the TrackPoint, prefer keyboard shortcuts, and won't be using Windows, so I got one without.  It adds weight and cuts brightness.

Brightness.  It's not super-bright.  The X1C3 is a bit better than the X1C2, but still not especially bright.

Now to the horrible mistakes and betrayals of the brand.  The big news about this laptop is the keyboard, so let's get a good look at it before we proceed.

Monday, March 23, 2015

Fuzzy time is so much gentler

Fuzzy time.  So much gentler.  Shown is Fuzzy Clock for Android in Daydream mode in the dock, which is a fancy label for "screensaver while it's docked or plugged in".  In KDE fuzzy clock is a built in Panel widget. Here's a widget for Windows, although I haven't used it.

Bizzare to realize that two displays pictured have the same resolution.

Sunday, March 22, 2015

Part 1 of Who are you designing for? Or, thoughts on the Lenovo Thinkpad X1 Carbon. Or, trying to buy some more happiness.

I still haven't gotten used to the fact that when people say "my computer", they usually mean a laptop instead of a desktop.  But I've owned laptops since my nomadic phase at the beginning of the millenium, and they've all been ThinkPads, starting back when they were still IBM ThinkPads..  When it came time a few months ago to replace my current X200s, I took the leap to the controversial new X1 Carbon.  Lenovo intends for it to compete with the MacBook Air.  It's both great and terrible; some of the ways its terrible reflect Lenovo copying Apple too closely and getting the bad with the good.  And its story illustrates the dilemma between the Steve Jobs approach of holding your customers in contempt inventing the future and more traditional approach of listening to them.

The first terrible thing about the X1 Carbon is the name.  The first terrible thing about the name is the word "Carbon", which is redundant.  No other Thinkpad has "Carbon" in the name or is designated X1. There was an X1 before the X1 Carbon, which now must be referred to as the X1 No Not the X1 Carbon. X1 is a pretty name but even NASA moved on.  (Pictured: X2)

The second terrible thing about the name is that Lenovo keeps changing the X1 but not changing the model number.  So there's an X1 Carbon 1st Generation, 2nd Generation, and now 3rd Generation.  All of them are sold as X1 Carbon, and Lenovo is not always careful to include the Generation.  Which is why model numbers traditionally change when the product changes substantially, a detail Lenovo gets right with all of the other ThinkPad models.  What replaces the X240?  The X250.  Why are they so scared of the number 2?

Anyway, what I bought in December 2014 was the 2nd Generation.  Actually, I bought it twice, because I got 4Gb of RAM to save a little money and then decided that was a stupid compromise for a laptop I'd have for a long time.  You can't change the RAM or CPU on the X1 because, in order to help it be so skinny, they are soldered to the motherboard.  This is the first example of Lenovo's lemming-like leap, following Apple to a bad place where style is more important than function.  I called to change my mind, but (to make a boring even for me story short) they couldn't change the order, but they could change the shipping so that it went straight from the factory in China to the return facility in South Carolina and a 100% refund and while all of that was happening I ordered a second one and checked the status daily and when it shipped checked UPS many times a day and watched it come and go through Anchorage Alaska and generally tried to squeeze as much joy as possible from the process of purchasing globally created luxury goods.

What did I think of it when I got it?  I'll tell you in the next episode, but let me leave you with these nice promotional product photographs:

And see if you can tell what's special about the 2nd Gen's keyboard:

Saturday, March 21, 2015

14 million pixels for my Sit/Stand/Walk/Flowerpot desk

A shuffle at the office freed up my old (pre-millenial) Dell 20" monitor, which I have added to the SSWF desk. It's the fifth monitor for the desk all scavenged from other sources, so a bit rag-tag.  I'm well past the point where one Linux computer, with the horrible video driver support Linux has from graphics chip vendors, can easily run all the monitors.  So my main desktop runs three of them, two for tasks and the third for task tracking, and the Roku runs one for baseball via MLB.tv.  Interestingly, the MLB.tv Roku app replaces the commercials with a pause screen, whereas the MLB.tv Flash app, in addition to being so horribly buggy and poorly written that I have literally never watched a complete baseball game without a crash or glitch, disables the controls at each commercial break to force you to watch inserted commercials while you are trying to watch a baseball game you already paid for via subscription.  I'm not sure if that's a technical oversight or they just haven't figured out yet how to get paid for the ads on Roku.  Anyway, for now the baseball is better on Roku than on the web.

The fifth monitor, in this picture the top left one, is hooked up to a Windows computer for watching Windows-only content (forgive us, rms, our sins).  The two top monitors are mounted with Vitek VT-LCD/PMT pole mounts, and use spacers to ensure clearance from the pole.  After a bunch of hassle with the third monitor, I wised up and added the Ergotron 60-589-060 Quick Release LCD bracket: "Perfect for fast-paced financial environments and other mission critical operations where every second of display functionality matters."  It's also perfect for letting you install a mount to a pole over your head without that mount already being screwed to ten pounds of monitor.  I used HP quick release brackets for the big monitors, and it would be nice if they were all the same, but  these are cheaper.  Note that the Samsung TV, with a wide bezel at the bottom, has to be mounted upside-down in order to have the clearance to tilt down; Linux and Windows both handle upside-down monitors but Roku does not.

Total pixel count:

HP 30" 2560 1600 4,096,000
Dell 30” 2560 1600 4,096,000
Dell 20" 1600 1200 1,920,000
Samsung 23” TV 1920 1080 2,073,600
Insignia 1280 720 921,600
Galaxy Nexus 720 1280 921,600
Total     14,028,800

Friday, March 20, 2015

Where are you going?

The only answer I could think of was Planet Ten, and if he was a Lectroid odds are he was a Red Lectroid, so I steered clear.

Thursday, March 19, 2015

Our Lady of Perpetual Agitation

KCBS has learned that Saint Mary’s Cathedral, the principal church of the Archdiocese of San Francisco, has installed a watering system to keep the homeless from sleeping in the cathedral’s doorways.
Since the cathedral is in the news, I want to again promote the name I have heard, "Our Lady of Perpetual Agitation".

Additional Thoughts:
1) It must be frustrating, just because you claim as an institution to have access to infallible truth provided by an omnipowerful and benevolent deity, and to serve that deity by providing love and compassion and service to the weakest and neediest in the world, having on that premise one of the largest accumulations of wealth and property in the world as well as tax exempt status in most jurisdictions, to be held to that standard ALL THE TIME.

2) In fairness to the eager water spritzers, the building is in the shape of a washing machine part.

3) The church's apology is an instant classic which includes every conceivable traditional defense of the indefensible: we do other good things, somebody told us it was okay, everybody else does it, we did it for the children, "our intentions have been misunderstood", we're sorry it backfired, we didn't know it was wrong.

Tuesday, March 17, 2015

Programming as a series of tiny a-has

One fundamental issue in project planning is big vs small.  Estimating and tracking tasks generally requires them to be small.  Once its component tasks are broken out small enough to work with day to day, any non-trivial project will have hundreds or thousands of tasks or more.  It's hard to work with a list of a thousand items.  It's hard just to read a list of a thousand items.  That's why Top Ten lists are much more popular than Top One Thousand lists.

In WhatNext, my experiment in nihilistic project management software, I am playing with a few different ways to manage tasks.  I want to be able to navigate from literally thousands of tasks, everything from simple one-time TODOs to books to read to more complex things like episodic TV shows to watch or recurring errands to remember, and get down to a list of about ten relevant and appropriate tasks that I might choose to do right now.  How?

Filtering is one obvious method: I want to relax, so show me only books and movies.  Or filtering by modality: I'm on a desert island, so only show me things I can do without internet.  Prioritizing is another: show me only the top few items.  Grouping is another, and the subject of this post.

There are many ways to group tasks; one essential decision is, can groups contain other groups?  Some tools allow a few fixed levels of depth, such as
  - Task
    - Sub-Task
while other tools allow indefinite hierarchies.  Either way, tasks are generally grouped via hierarchies.
I. Cook Dinner for Children
  1. choose a recipe
  2. obtain ingredients
     a. Make list of what is not in pantry
     b. go to the forest
     c. gather items on list
  3. cook the recipe
  4. set the table
  5. let the children out of the dungeon
II. Conquer the world
  1. watch all episodes of Pinky & The Brain
  2. pick the best strategy
  3. implement the best strategy
I have a few qualms about task hierarchies as they apply to task lists.  The complex structure of a hierarchy complicates using filtering and sorting to narrow down a list of thousands to a list of ten.  And in terms of estimation, the list is a bit redundant: Item I contains exactly the same work as items I.1 through I.5 (and I.2 is the same as I.2.a + I.2.b + I.2.c).  Estimation can be top-down or bottom-up; if I have estimated both ways then adding everything up leads to double-counting.  Should I use the top-down estimate for I or the bottom-up sum of the rest or somehow merge the two kinds of estimates?  From a data modeling perspective, it seems unclean; even if I can't say for sure how I'll use this data, I don't want to build on the foundation of a flawed model.  In fact, that's even more important when I can't say for sure how I'll use the data: if the model is more accurate, it'll probably hold up better in unforeseen circumstances.  So let's do some modeling.

A task is a piece of work to be done, but think about it in context of WhatNext's motto, "Be very, very humble, for the hope of mortals is worms."  Why are you doing this task?  So that after the task is done, the state of the world is different.  After the task is done, you will be living in a world in which your children are well-fed (for now), your laundry is clean (for now), your boss is mollified (for now).  So a task is implicitly two things: a piece of work, and a desired outcome.  This gives us a method for task breakdown: keep the parent task's intended outcome, and replace its piece of work with many smaller pieces.

So "Cook Dinner for Children" becomes
outcome:           the children are nourished
constituent work:  choose a recipe
                   obtain ingredients
                   cook the recipe
                   set the table
                   let the children out of the dungeon
This may seem like an overly elaborate way to break out a task; what problem does this solve?  One problem this solves is how to have a single prioritized list of heterogeneous tasks: tasks of wildly different sizes, with sub-tasks of different goals inter-mingled.  Consider this simple task list:

With this task list, all of task 1 has to be done before task 2 can be started.  What if you need to make progress on both tasks?  Convert these tasks into outcomes, break out work into smaller tasks, and you have a chance to mix things up a little bit, sneak in a little progress on the second desired outcome before necessarily finishing all the tasks for the first outcome.

Something that often happens in the real world, however, is that even before you can start on your top task, new things get added to your list.  WhatNext assumes that new items go either at the top or bottom, usually at the top, so you could quickly end up with this list:

Here's another version of that table, trying to simplify by only showing the outcome as a detail of the final relevant task.  (I'm still struggling to find a pretty way to show both Outcomes and Tasks in one list.)

Still ugly, but let's go with it for now.  Anyway, we are finally ready for the new feature I've been working on.  Suppose I decide that "Nourish children" is the most important and urgent outcome on the list, and I want to get it done as soon as possible, even before things that I briefly thought I had time to do first.  How do I do that?  The simplest way I can think of is to add a button to each Outcome to move it to the top.

And now we get to the essence of "business analysis" or "requirements gathering", or step 1 of programming.  What exactly should happen when the arrow button is clicked?  Let's say, all of the tasks for "Nourish children" should move above all other tasks in the list, while preserving their order relative to each other.  I think.  (What if there are snoozed tasks that we aren't seeing?  When they unsnooze, what will their orders be?  What about closed tasks, are they affected by this re-ordering?  etc etc.  All fun details to consider.)

And now the specific tiny a-ha moment that I wanted to share with you. How exactly should the tasks be moved to the top?  In WhatNext, task order is internally tracked using a number between 0 and 1.  So what's really happening behind the scenes is:

The second step in programming this is to translate the human-language expression into a slightly more algorithmic expression, in some kind of pseudo-code.
1. make a list of all tasks associated with the selected outcome
2. move each item on the list from step 1 to the top of the master list
But if you go and implement that naively, you may get something like this:

See the problem?  When the Nourish children tasks were moved up one at a time, top one first, each succeeding one went on top of that, so ultimately their order was reversed.  So we need to refine the algorithm a bit:
1. make a list of all tasks associated with the selected outcome, ordered by internal sequence
2. for each item on the list, considered in order:
  1. identify the first task in the master list 
  2. change the internal sequence of the item to a number
     1. just smaller than the interal sequence of the first task,
     2. but also, if this is not the first item on the list,
        to a number just larger than any previous 
        just-resequenced tasks
And now we translate this into  the relevant programming language.  By which I don't mean just Python or whatever programming language one is using.  The "language" available includes everything available in the platform, any added libraries, and any functions one has already written.  Happily, I already wrote a function that can do all of item 2.1,  get_task_order. But we still have to handle all that stuff in 2.2.2 about remembering which task we are moving so that we don't scramble the order of the tasks.  And here is the tiny a-ha: If we reverse the order in step 1, we can skip all of step 2.2.2, because the whole problem with step 2.2.1 is that it reverses order, so just pre-reverse it in step 1 and 2.2.1 will reverse it a second time. (Caveats: make sure that nothing else changes in the middle of this operation. And a test case that only had one task wouldn't have revealed this problem.)
Since I don't need to add any new functions, the Python/Django code is quite simple:
outline = Outline.objects.get(id=pk)

tasks = outline.tasks.order_by('-task_order')

for task in tasks:
    task.task_order = get_task_order()
These tiny a-has are, I suspect, one of the sources of the addictive pleasure of programming.

Sunday, March 15, 2015

Third monster bootie

Both booties fell off on the sidewalk the very first time they were worn, and only one could be found.  It took me a while to get around to making a replacement, but now they are done other than figuring out how to keep them on next time.

The Ravelry project.

Saturday, March 14, 2015

Hat experiment: qualified success or interesting failure?

I'm excited that my knitting skills have progressed to the point that I could make up this pattern on the fly and have it not be terrible.  I'm disappointed in my color choices.

The Ravelry project.

Friday, March 13, 2015

Consumption problems

These garments are identical in every way except color, and were purchased in the same order.  Why were they sent separately, and more importantly, why was the black one boxed with airbags while the gray one was sent in a padded envelope?  Living in a big building with daily UPS deliveries allows me to believe that our rampant consumerism is still less destructive than driving to the mall, but this packaging is chipping at the self-image.

Thursday, March 12, 2015

Technology is amazing

This is a fairly recent APS-C mirrorless SLR with a Vivitar lens that is almost as old as I am. It's a bit of a challenge to take fully manual photos, but I guess that's how they all used to go. The combination still works pretty well.

Wednesday, March 11, 2015

Hats for twins

Nothing fancy here, just hats in black and off-black, intended for twins, to help tell them apart.

The Ravelry project.

Tuesday, March 10, 2015

Series: BMWs with tickets

I thought I wouldn't have anything more to post on this thread for some time, but if you relax and surrender to the universe, she provides!  Two tickets!

Sunday, March 8, 2015

Saturday, March 7, 2015

Hillary Clinton, public officials, secrecy, and tech literacy

It's clearly a bad thing for public officials to circumvent the public interest by using private email accounts for official business.  But, I have to say that if Hillary actually set up her own mail server in a closet of her Chappaqua mansion, I would see that tech literacy as a plus.  Well, depending on what she was using.  djb's qmail?  SpamAssassin?  Perhaps this face is because she's trying to use mutt in a terminal window on a Blackberry screen?