c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
esc
cancel

Recent Updates RSS Hide threads | Keyboard Shortcuts

  • erik 2:16 pm on September 2, 2010 | 0 Permalink | Reply
    Tags: ui,

    Sometimes you break the interface guidelines to evolve

    Interface design patterns evolve — it’s to be expected. However, doing so sometimes breaks the “don’t make me think” mantra. Case in point with the change to the window control’s orientation in the new iTunes 10:

    Screen shot 2010-09-02 at 2.46.09 PM.png

    The red, close button is in the expected location; However, the green, switch-to-mini-controller button is now below, rather than beside it.

    The trio of gum-drop buttons has always been less than self-explanatory, but at least they were consistently located. iTunes 10 breaks the pattern, and not really for the benefit of other applications (since the vertical orientation doesn’t suit most UI designs quite as well).

    It would have been interesting to be in the room when this new design was pitched. I’d guess that the rationale was to free-up additional vertical height (which is a common design direction seen in applications designed for widescreen monitors), but I would have loved to hear the answer to “Do we really need those 12 pixels so badly that we’ll violate our own user interface guidelines?” Sometimes the answer is “Yes”.


    BTW, it seems you can switch back to the normal button orientation using the following:

    defaults write com.apple.iTunes full-window -boolean YES

     
  • erik 9:16 am on September 2, 2010 | 0 Permalink | Reply
    Tags:

    I had started writing a JavaScript style-guide conformance tool. Might not be needed now: http://code.google.com/p/closure-linter/

     
  • erik 2:00 pm on August 31, 2010 | 0 Permalink | Reply
    Tags:

     
  • erik 3:59 pm on August 25, 2010 | 0 Permalink | Reply
    Tags:

    New Firefox builds offer JavaScript parse tree API: “An API for parsing JavaScript” Neat for tool devs. No word on whether you can modify/write to it.

     
  • erik 10:25 am on August 25, 2010 | 0 Permalink | Reply
    Tags: , , , product mangement,

    Listening to customers

    Back when I was in Product Management, I used surveys to gather feedback from beta testers. Given how valuable (and appreciated) the feedback could be, I now make a point to participate in surveys when asked. Unfortunately, even something as simple as a survey doesn’t always go as planned. Here’s what I was greeted with yesterday during an attempt to provide feedback:

    Screen shot 2010-08-24 at 9.16.04 AM.png

    Pretty awesome, huh?

    I had better luck loading the page today; However, after spending a few minutes filling out a survey, guess which button didn’t work?

    Screen shot 2010-08-25 at 10.58.30 AM.png

    I generally expect only a very small percentage of customers to fill-out surveys, so the reliability of the survey service is of utmost importance — if you actually want to listen. In this case, I hope that web metrics can be used to track how many customers started the survey vs. how many completed the task. [NOTE: If you're designing surveys, tracking abandonment points during the survey process can also give you an idea whether your surveys are too long, or asking the wrong questions.]

     
  • erik 11:59 am on August 23, 2010 | 0 Permalink | Reply
    Tags:

    Obama warns Americans of covert sponsored manipulation of peoples opinion

     
  • erik 8:46 am on August 20, 2010 | 0 Permalink | Reply
    Tags:

    Would be nice if my Apple bluetooth keyboard had a backup USB port for the mornings when it refuses to pair with my MacBook.

     
  • erik 4:15 pm on August 19, 2010 | 0 Permalink | Reply
    Tags: , ,

    Security use-cases that weaken security

    I do, appreciate it when companies try to address “security”, but this is so bad it’s comical. I hope “math” wasn’t your favorite subject in school:

    Screen-shot-2010-08-17-at-9.27.43-AM.png

     
  • erik 4:06 pm on August 19, 2010 | 0 Permalink | Reply
    Tags: , , ,

    Stuck with the “critical security problems” of Flash?

    It is not helpful when this:

    Screen shot 2010-08-19 at 5.00.50 PM.png

    Links to this:

    Screen shot 2010-08-19 at 5.01.01 PM.png

     
  • erik 3:29 pm on August 19, 2010 | 0 Permalink | Reply
    Tags:

    So can I get an “iris-scan block” coating for my glasses? And at what point will such coatings become illegal? (Remember, it’s illegal to put a shiny coating on a vehicle’s license plate for the same reason — interfering with automatic plate scanners.)

    Iris Scanners Create the Most Secure City in the World. Welcome, Big Brother

     
  • erik 9:00 pm on August 18, 2010 | 0 Permalink | Reply
    Tags:

    Using satellite surveillance of parking-lot traffic to estimate retail profits http://classic.cnbc.com/id/38722872/ #bigbrother #bigdata

     
  • erik 3:00 pm on August 18, 2010 | 0 Permalink | Reply
    Tags:

    damiannz’s ofxPd at master – GitHub – "ofxPd is an addon for openFrameworks that embeds the Pure Data synthesis engine in an openFrameworks application."
     
  • erik 1:26 pm on August 12, 2010 | 0 Permalink | Reply
    Tags: , , ,

    The self-defeating effects of micro-management

    I started drafting a blog post about the self-defeating effects of micro-management when I came across this interview response (from Yahoo CEO Carol Bartz) which sums it up perfectly:

    What classic mistakes do you see managers making over and over?

    “Setting a goal is one thing. Telling people how to do it step-by-step is another thing. That’s what happens especially with new managers. They not only tell the result that’s supposed to happen but they also tell them how to do it, which is such an insult. People just friggin’ shut down–I guess I’m not going to do it well enough. I’ll just wait to have you tell me how to do it.”

    (via Yahoo CEO Carol Bartz: “I’m Just a Manager”.)

    I’ve seen teams “shut down” for this exact reason, and the result is a loss for everyone.

    When faced with continual “managerial vetoes” and micro-management, teams stop delivering the value they are capable of. They no longer seek the best solutions — they no longer listen to their customers. By not delegating and trusting their team, these managers have created more work for themselves! And the odds are pretty good that whatever comes out of this process will be sub-par.

    The idea raises an interesting perspective on the evaluation of new products and services: If the solution is sub-par, was it for lack of ability on the part of the implementation team? Or was it lack of ability on the part of their management?


    On a related note, I highly recommend
    The Effective Executive” by Peter Drucker if you happen to be new to management (or, in this case, have under-performing teams.) “Reflections on Management: How to Manage Your Software Projects, Your Teams, Your Boss, and Yourself” by Watts Humphrey has some nice views on this issue as well.

     
  • erik 9:55 pm on August 10, 2010 | 0 Permalink | Reply
    Tags: ,

    “Fun example of programming language sc…

    “Fun example of programming language scope” is only “fun” for a certain type of geek; But I like programming examples that help explain how your code is interpreted, particularly if the lesson can help prevent a certain class of bug.

    Now that you’re expecting a scope puzzle, what will the following JavaScript print? (Ignoring the line numbers, of course, which are here to aid in discussion.)

    
     1:  var foo = 1;
     2:
     3:  function bar1() {
     4:   print("A: " + foo );
     5:  }
     6:
     7:  function bar2() {
     8:   print("B: " + foo );
     9:   var foo = 2;
    10:   print("C: " + foo );
    11:  }
    12:
    13:  function bar3() {
    14:    print("D: " + foo );
    15:    eval("var foo = 2;")
    16:    print("E: " + foo );
    17:  }
    18:
    19:  bar1();
    20:  bar2();
    21:  bar3();
    

     
     

    No peeking…

     
     


    Answer


    A: 1
    B: undefined
    C: 2
    D: 1
    E: 2
    

     

    “A” is easy. Since foo is a “free variable” (i.e., not defined within function bar1), the interpreter goes up the scope chain, and finds the global foo, defined on line 1.

    For bar2, “C: 2″ is obvious — it’s “B: undefined” that lets you in on the magic under the hood. You sort of expect to see “B: 1″ (or a compiler error.) However, JavaScript interpreters scan-ahead, searching for variable definitions (e.g., var statements) when parsing a code block. The interpreter sees/re-writes bar2 like this:

    
     1:  function bar2() {
     2:    var foo;
     3:    print("B: " + foo );
     4:    foo = 2;
     5:    print("C: " + foo );
     6:  }
    

    With that definition, “B: undefined” makes perfect sense.

    To short-circuit the magic, bar3 uses eval() to do it’s trickery. At line 14, foo still points to the global foo, much like in bar1; However, the eval statement on line 15 modifies the local scope, introducing a new, local foo. By line 16, “E: 2″ is using the newly introduced foo.

     

    The lesson: Even though JavaScript allows you to declare variables at any point within a block, putting your var statements at the beginning of the block can help eliminate scope confusion around whether an inner- or outer-closure contains the correct value.

     
     


    Bonus Question

    Is JavaScript’s var a let or let*? It’s easy to find out using the following:

    
     1:  var x = 2, y = 3, z = x + y;
     2:  print(z);
    

    Is this legal? Will it print ’5′?

     
  • erik 10:38 am on August 10, 2010 | 0 Permalink | Reply
    Tags: , motorsports, opensource

    An open source track car, AKA, drivable “open hardware”

    There have certainly been “open source car” projects in the past (and I’m very much a fan of Locost builds), but this new track car by Reynard Racing seems surprisingly well polished (e.g., it’s now UK road-legal.)

    The business model is interesting, and very similar to Open Hardware projects. The idea is that Reynard Racing designs, builds, and tests the car. They will sell kits, and full-builds; but also offer 2D “engineering plans” for free, and 3D CAD models for purchase. They’ll even sell jigs and molds for franchising.

    With all specifications shared openly, Reynard hopes to create a market where multiple manufacturers can sell interoperable parts (which, for the consumer, could mean lower costs).

    Screen shot 2010-08-10 at 11.03.20 AM.png

    If all goes to plan, a DIYer should be able to fabricate as much as they feel comfortable with, then purchase any remaining parts from a variety of vendors. By working with the community, makers can modify the plans to accept different engines, etc., and then share the updated designs for peer review and collaboration.

    For more:

     
  • erik 9:19 am on July 31, 2010 | 0 Permalink | Reply
    Tags: ,

    Great quote on the value of being a good client

    “Clients who are easy to work with … don’t just get our best work. They also get the lowest invoices, because we can work efficiently and don’t have to fight our way through the process.”

    The article is about working with Graphic Designers, but it applies equally well to technology or strategy engagements.

    via “10 Secret Code Phrases to Get What You Want from Your Graphic Designer“.

     
  • erik 12:37 pm on July 30, 2010 | 0 Permalink | Reply
    Tags:

    Made me laugh (old guy with a beard style) to see a “small code” contest where 10k is considered small http://10k.aneventapart.com/

     
  • erik 8:45 am on July 30, 2010 | 0 Permalink | Reply
    Tags:

    OmniFocus is nice, but $40 more to get an iPad-specific build? That’s not an impulse-buy price. That’s a “reevaluate the competitors” price.

     
  • erik 5:35 pm on July 24, 2010 | 0 Permalink | Reply
    Tags:

    If you disrupt a large enough industry, expect lawsuits, lobbying, and gov. protection for the incumbent (re: short rental vs. hotels in NY)

     
  • erik 10:03 am on July 23, 2010 | 0 Permalink | Reply
    Tags:

    I really hope iOS 4.1 improves the experience on the 3G device. It’s *terrible* with iOS 4. Buggy and painfully slow.

    This video seems to be about right: “OS 4.0 on 3G iPhone (parody)“.

    [Update Jul 30 2010]
    I tried this tip “Disable Spotlight Searches to Improve iPhone 3G Performance on iOS 4” combined with the “double hard reset“… Not sure that it helped yet. Opening the Messages/SMS app still takes ~5 seconds, but some actions feel a little better. (Related note, I do the same, disable as much Spotlight as possible, on all my desktop machines as well, for the same reason — the daemon is a painful hit to performance for a feature I don’t use.)