Google Glass as an Apple strategy

If the recently hyped Google Goggles (AKA Project Glass) aren’t vaporware, they represent a classic move from the Apple playbook:

Invent the products that replace your best-sellers

I’m thinking of this in terms of Glass replacing Android handsets. Apple doesn’t wait for a competitor to offer something better than their products — they control the killing-off of their best-sellers with each next-generation release. While some companies delay innovation in attempt to extract every ounce of profit (and increasing margins) out of their products, Apple doesn’t leave their timelines, forecasting, and supply-chain in the hands on it’s competitors.

Don’t compete head-on (Android v. iOS)

Android is making great progress, but it’s an head-on fight; and advancements are always compared to the iPhone. Sure, there’s money to be made with Android handsets — but it’s a “me too” game.

Change the conversation (iPad vs. everything else)

Tablet computing is hot right now; but so far, trying to capture a piece of the iPad market (AKA the Tablet market), is a losing proposition. Apple owns this segment. Instead of playing catch-up, change the conversion. Invent a new platform, and own it’s market segment instead.

 

Of course, as nice as all of this sounds, daringfireball has the right interpretation: This vaporware R&D fluff looks more like Microsoft or Nokia than Apple. Apple wouldn’t say “we’re exploring ideas for a future product that will change the world.” Apple would just do it.

05. April 2012 by erik
Tags: , , , | Leave a comment

Python decorator to perma-cache method results

I was generating some reports recently that involved accessing expensive object methods whose results were known to not change on subsequent calls; However, instead of using local variables, I sketched-out this quick decorator to save method responses as variables on the object (using a leading ‘_’ followed by the method-name as the variable name):


def cache_method_results(fn):
    def _view(self, *args, **kwargs):
        var_name = '_{n}'.format(n=fn.__name__)

        if var_name in self.__dict__:  # Return the copy we have
            return self.__dict__[var_name]

        else:  # Run the function and save its result
            self.__dict__[var_name] = fn(self, *args, **kwargs)
            return self.__dict__[var_name]

    return _view

You might use it like this:


class Foo(object):
    @cache_method_results
    def some_expensive_operation(self):
        ...calculate something big and unchanging...
        return results


f = Foo()
print(f.some_expensive_operation())  # This first call will run the calculation
...
print(f.some_expensive_operation())  # but this one will used the cached result instead

It’s not rocket science, but these little tricks add to the fun of using Python.

19. March 2012 by erik
Tags: , | Leave a comment

Leanpub

Leanpub – Neat ebook publishing service that uses a shared Dropbox, and Markdown (or HTML) files.  Geeky, but amazingly self-service and easy.

30. June 2011 by erik
Tags: | Leave a comment

Writing Hadoop jobs as shell commands

parbash – Parallel BASH – Google Project Hosting – Looks like an interesting project — it allows writing/running Hadoop jobs as shell commands (grep, awk, perl, etc.) for text processing.

08. June 2011 by erik
Tags: | Leave a comment

Python library for auto-tagging text

Here’s an interesting text-classifying library that extracts/computes “tags” for a given piece of text:

apresta/tagger – GitHub – Python library that generates 'tags' for a piece of text (i.e., useful for auto-tagging, or classifying an article.)

24. May 2011 by erik
Tags: | Leave a comment

“Mining of Massive Datasets”

My earlier work with Social Book Club, and current work with Kirkus Reviews, has me spending a fair amount of time exploring and developing recommendation systems. There are a variety of good books and papers on the subject, but I recently finished reading “Mining of Massive Datasets” (a free ebook that accompanies a Stanford CS course on Data Mining), and it was a surprisingly good read.

The book covers a number of topics that come up frequently in data mining: reworking algorithms into a map-reduce paradigm, finding similar items, mining streams of data, finding frequent items, clustering, and recommending items. Unlike many texts on the subject, you won’t find source-code in this book; but rather, extensive explanations of multiple techniques and algorithms to address each topic. This lends itself to a better understanding of the theory, so that you understand the trade-offs you might be making when implementing your own systems.

There are easier texts to get through, but if you’re getting started with recommendation or data-mining systems, and haven’t read this book, I’d encourage you to do so.

24. May 2011 by erik
Tags: , , | Leave a comment

Cleaning an Idle Air Control Value (IACV) on a Subaru

My ’02 WRX started-up with a wandering (and lean) idle this morning. Thankfully, all it took was a $6 gasket and 20-minutes of pulling, cleaning, and re-installing the IACV. So far, it seems to have worked. See the following for detailed instructions:

16. May 2011 by erik
Tags: , , | Leave a comment

Last day at Optaros…

Last day at Optaros. New world awaits on Monday. Exciting times!

19. November 2010 by erik
Tags: | Leave a comment

Mint offering a free view into aggregate spending patterns

One of the most fascinating aspects of http://data.mint.com/ is that it’s public. CC companies have had similar data, but never shared it.

31. October 2010 by erik
Tags: | Leave a comment

Mr. Job: A python framework for writing Hadoop jobs

mrjob at master – GitHub – A python framework for writing/deploying jobs to a Hadoop cluster or Amazon Elastic MapReduce service.

30. October 2010 by erik
Tags: | Leave a comment

Using progressive enhancement for mobile/web layout

"Rethinking the Mobile Web" by Yiibu – Contains some nice examples on using progressive enhancement to skin a website for a wide variety of devices (desktop, mobile, etc.)

11. October 2010 by erik
Tags: | Leave a comment

You can’t (afford to) innovate like Apple

You Can’t Innovate Like Apple — by Pragmatic Marketing – A great piece on Apple design and experience, and what it takes to achieve it.

06. October 2010 by erik
Tags: | Leave a comment

An insufficient focus on UX can kill your company

Insufficient focus on User Experience and design cost Wasabe their company: http://blog.precipice.org/why-wesabe-lost-to-mint

04. October 2010 by erik
Tags: | Leave a comment

Corn industry trickery

Corn industry hopes to rename High Fructose Corn Syrup to “corn sugar”. New name, same product to avoid. “Goodbye High Fructose Corn Syrup, Hello Corn Sugar (Signed, Corn Industry)“.

14. September 2010 by erik
Tags: | Leave a comment

Interface design patterns 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

…and yes, I switched back to save the milliseconds it takes to orient to the new layout and select the right button.

02. September 2010 by erik
Tags: , | Leave a comment

Google closure-linter for JS style conformance

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

Note that I’m currently partial to running it like this:

gjslint.py --strict $filename | grep "^Line" | grep -v "Line too long"

02. September 2010 by erik
Tags: | Leave a comment

New Firefox builds expose JavaScript parse tree

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.

25. August 2010 by erik
Tags: | Leave a comment

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.]

25. August 2010 by erik
Tags: , , , , | Leave a comment

I do appreciate it when companies try to…

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

19. August 2010 by erik
Tags: , , | Leave a comment

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

19. August 2010 by erik
Tags: , , , | Leave a comment

← Older posts