• A couple of weeks with Window 10

    April 30, 2016

    It's 2016, WiFi should work

    Microsoft announced Bash on Windows. Basically, it's user-space Ubuntu that proxies kernel-space syscalls through a proxy... what it means is you get something that executes Linux binaries on Windows with little or no performance penalty. Cool.

    Given that I'm a sucker for new toys and new stuff, I went out and bought a Yoga 900 to try Windows 10, Bash, etc.

    The Hardware

    The Yoga 900 is quite a nice piece of hardware. Compared to my 13" MacBook Pro, the Yoga is competitive. It's similar in size, weight, and feel (solid). Is the Yoga as good as the MacBook Pro? No. Is it in the same league, yes.

    Windows 10

    Windows 10 sucks far less than Windows 8.


  • I'm Joining Kiva.org

    December 18, 2015


    I have been doing technology for a very long time... professionally since 1978.

    I have seen technology grow and evolve... software is eating the world... developers are the new king-makers...

    And we as humans have a choice of how we use technology.

    We can use it for marginal personal gain where we offer something that make's someone else's life much better but take a substantial portion of the betterment for ourselves. For example, taking a 30% cut for brokering between a driver and a passenger may be a passable transaction, but is also a radical wealth transfer to the broker.

  • Twitter Revenue by Solving the Lunch Problem

    September 3, 2015

    My Opinion

    Like many other humans, I have an opinion about how Twitter could significantly increase its revenue. We can start down the discussion with lunch...

    The Lunch Problem

    It's coming up on noon... where do I go for lunch?

    This is a non-trivial problem. It's a choice problem. It's a social problem. It's a commerce opportunity.

    Any time there's a choice problem that has social components and commerce, it's an opportunity for Twitter to make money. But I'm getting ahead of myself...

    The Choice Problem

    There are 25+ lunch spots in walking distance of my office. I've fallen into a rut. I'm at Cassava where I've ordered the curry meatballs. Like I do at least once a week. Why?

  • Apple Watch Thoughts

    August 3, 2015


    I spent a week with the Apple Watch. It's in the drawer with my Android watch and my Pebble.

    The hardware

    The Apple Watch is one of the nicest pieces of physical hardware I've ever put on my wrist. I've got a Rolex and a Tudor... a bunch of Seiko watches, and others. My favorite watch is a Traser... but that's mostly because it's very practical.

    I got the 38mm, Black Sport Watch. The physical feel of the Apple Watch is superb. The materials are amazing. The silicon band is the first silicon band I felt comfortable wearing for 12+ hours.

    I would gladly pay $500+ for a watch built like the Apple Watch with a quartz movement and tritium hands.

  • Python: Yuck

    July 23, 2015

    I really dislike Python

    A short blog post about my experience with Python. I've been doing Python/Flask work for about a month. It's long enough to get some sense of the language. It's not long enough to feel "comfortable" in the language. Please read these comments as such.

    My experience includes decades with C, C++, Objective-C, and Java. Years of Ruby. Nearly a decade of Scala. A year with Haskell. A couple of years with Clojure (my fist Lisp). I've also done JavaScript and Pascal and some other languages that I don't remember... oh and 6502 assembler and 68000 assembler and BASIC.

    My net is the Python is a bunch of hacks on hacks that created a mis-shapen beast.


  • Firefox is very disappointing

    July 15, 2015

    And I'm pro-Mozilla

    I've been a Netscape and Firefox fan since the browser wars began in 1996. There's been a special place in my heart for this lineage of browser.

    Every quarter or so, I try to use Firefox over Chrome. Every quarter, I switch back after a week. I switch back because Firefox is unusable.

    My hardware

    My desktop machine is a 6 core i7-4930K CPU @ 3.40GHz with 64GB of RAM and the fastest SSD SATA drives around.

    My laptops are 2014-era MacBook Pros (13" and 15") each with 16GB of RAM and SSD drives.

    My hardware is pretty much top of the line. Nothing should run slowly on this hardware.

    But Firefox does.

    Firefox hangs

  • Some Process Thoughts

    July 7, 2015

    In an Era of Distributed Teams

    Over the last bunch of years, I've worked with a fair number of distributed teams, both doing open source and contracting. Over this time, I haven't ever been in the same room as half the people I've worked with. I've used a ton of tools from AIM to Slack.

    Here are a bunch of thoughts on process.

    Almost Always in the Light of Day

  • You're Stealing from Yourself

    July 6, 2015

    And from Me

    I read Jessie Frazelle's blog post that outlines some of the horrid things that have happened to her solely because she's a woman contributing to the tech industry.

    If you're engaging in acts of aggression against Jessie or any other woman or person of color, you are stealing from yourself.

    Jessie is making a measurable contribution to the tech community. How do I know? Well, because I've heard of her. Because she wrote a very fine post on isolating desktop apps using Docker and done conference presentations as well.

  • Filling the Pipeline

    June 28, 2015

    With qualified People of Color

    Kumi Walker tweeted:

    What a joke: Behind Silicon Valley's Self-Critical Tone on Diversity, a Lack of Progress http://bits.blogs.nytimes.com/2015/06/28/new-diversity-reports-show-the-same-old-results/ cc/ @cbracy

    And he's right!

    There are no excuses for failure to improve the diversity in high tech companies. None!

    The platitudes of "we're trying" and "the pipeline sucks, so we're victims" is bullshit. These are companies that "disrupt" and use "social networking" to get the job (and the revenues) done. They should use the same tools to recruit a diverse workforce that they use to generate revenue: data mining and social networking.

    A plan for Detroit

  • Thoughts from Munich

    June 20, 2015

    Random Stuff

    I'm spending the weekend in Munich on my way to Devoxx in Krakow.

    I've done a ton of travel this year: London, Tokyo, Atlanta, Beijing, and now Munich.

    I'm drafting this post from the San Francisco Coffee Company. So, yeah, I flew 11 hours and 1/3 of the way around the world from San Francisco to sit in a coffee shop named after my town, hacking on my MacBook, and feeling meta-mocking about the whole thing.

    But the differences between cities around the world seems to be less and less. I'm really conflicted about this.

    What's good

  • CSS Selector Transforms in ClojureScript

    June 9, 2015

    Coming full circle

    Lift's CSS Selector Transforms are the best thing in web development, ever.

    Granted, Lift's CSS Selector Transforms are built off concepts in Enlive, Lift treats the transforms as composable components... and that means more concise, reusable code.

    If you're doing client-side work, there's Enfocus and kioo, but they are very brittle and don't play well with Reagent.

    So, I decided to write a bunch of web utilities for ClojureScript, single page apps.

    The code is stand-alone and outputs Hiccup format HTML or it can return a DocumentFragment that can be used any old way.

    The code is the first part of Dragonmark Web.

    So what, and why?

  • We Live in an Amazing World

    May 23, 2015

    We Really Do

    I hung out with a couple of friends last night and we spent a fair amount of time finding interesting and obscure music tracks and videos and playing them for each other. We carry the collective musical creation of all of humankind in our pocket and any of it can be recalled and performed at any time.

    This week, I started work on a new project.

    I was able to access all the tools and documentation that I needed to learn a new computer language. I was able to become proficient with the new computer language and publish code for part of my new project for the world to see and use.

  • My Thoughts on Go

    May 21, 2015


    I have been working on a project that needs to run as small-footprint native code. I've been doing C since 1980 and have written a fair number of commercial packages in C, C++, Objective-C and blends among them.

    But after a couple of decades doing Java and other managed languages, I no longer want to have to think about memory management.

    Plus, the project is Docker related and most of the Docker ecosystem is on Go. So, I decided to do the project in Go.

    Here are my "about a week in" thoughts.

    The Comfortable

  • I Love my MacBook Retina

    May 20, 2015

    It's an Amazing Machine

    On more or less of a lark, I ordered a MacBook Retina. I'm very glad I did.

    First, the lark... I have 4 running MacBook Pro/Airs and a couple of other running Macs floating around. The physical size difference between my 11" MacBook Air and the new MacBook is trivial. But... I like toys.

    The MacBook Retina is a particularly awesome device and it's become my "traveling around town" machine.

    The Keyboard

    The keyboard is, I suspect, love it or hate it kinda thing.

    For me, it's not quite love, but I really like the keyboard. I've been using computer keyboards since my Apple // and have seen keyboards lose travel.

  • Scala Versioning Fragility Rant

    May 8, 2015

    Yes, a Rant

    I've been doing Scala before it was a thing. I founded Lift and wrote the 2nd Scala book (Beginning Scala).

    And this morning, I'm ranting.

    Recently, I've discovered the joys of dual-language (Scala and Clojure) projects... I even did a presentation on it at QCon.

    Yesterday, I was playing around with putting a Reagent front end on a Lift app that talks to Apache Flink. Why? Because Reagent can support multi-hundred-thousand row scrolling grids seamlessly, even on my iPad, Lift is the best web framework I've ever used (yeah, I'm biased), and Flink seems to be well considered.

    But the problem was Scala's version fragility...

    The error manifest itself as: