1. bipython 0.1.0

    bipython
logo

    the boldly indiscriminate python interpreter

    "...because you shouldn't have to choose."

    PROLOGUE

    Two interpreters, both alike in dignity,
    In fair Pythona, where we lay our scene,
    From ancient grudge break to new mutiny,
    Where civil code makes git commits unclean.
    From forth the fatal loins of these two foes
    A newer kind of stranger's given life;
    Whose misadventured piteous overthrows
    Doth with its birth bury its parents' strife.

    ACT I

    Enter bpython and ipython

    bpython

    I'm a fancy terminal-based interface to the Python interpreter. I give you
    inline syntax highlighting and auto-completion prompts as you type, and I'll
    even automatically show you a little tooltip with a docstring and parameter
    list as soon as you hit ( to make the function call, so you always know
    what you're doing! I'm svelte and proud of it - I don't try to do all of the
    shenanigans that ipython does with the shell and the web, but the cool kids
    love my rewind feature for demos. I strive to make interactive python coding
    a joy!

    ipython

    I'm an awesome suite of interactive computing ideas that work together.
    For millennia, I've given you tab-completion and object introspection via
    obj? instead of help(obj) in Python. I also have sweet shell features,
    special magic commands (%run, %timeit, %matplotlib, etc.) and a
    history mechanism for both input (command history) and output (results
    caching).

    More recently, I've decoupled the REPL into clients and kernels, allowing
    them to run on independent of each other. One popular client is the
    IPython Notebook which allows you to write code and prose using a web
    browser, sending code to the kernel for execution and getting rich media
    results back inline. The decoupling of clients and kernels also allows
    multiple clients to interact with the same kernel, so you can hook-up to
    that same running kernel from the terminal. The terminal workflow makes
    more sense for some things, but my user interface there isn't as polished
    as bpython's.

    Enter bipython

    bipython

    By your powers combined... I am bipython!

    Exeunt

    The Power is Yours!

    pip install  bipython
    easy_install bipython
    

    bipython requires ipython, pyzmq, bpython, and urwid.

    For now, you'll need to have a running ipython kernel before running bipython. You can do this by either opening a notebook or running ipython console. It won't always be like this, I'll fix it as soon as I can, but it'll be sooner with your help over ivanov/bipython.

    After that, just run bipython and enjoy the ride.

    Here's a walkthrough of ipython, bpython, and bipython:

    The screencast is 20 minutes long, but here I'll play it back double speed. There's no sound, and you can pause at any time and select / copy portion of the text as you like. Changing the browser font size in the usual way works, too. (click here if the embed didn't work)

    permalink
  2. stem-and-leaf plots in a tweet


    Summary: I describe stem plots, how to read them, and how to make them in Python, using 140 characters.

    My friend @JarrodMillman, whose office is across the hall, is teaching a computational statistics course that involves a fair amount programming. He's been grading these homeworks semi-automatically - with python scripts that pull the students' latest changes from GitHub, run some tests, spit out the grade to a JSON file for the student, checks it in and updates a master JSON file that's only accessible to Jarrod. It's been fun periodically tagging along and watching his suite of little programs develop. He came in the other day and said "Do you know of any stem plot implementation in python? I found a few, and I'm using one that's ok, but it looks too complicated."

    For those unfamiliar - a stem plot, or stem-and-leaf plot is a more detailed kind of histogram. On the left you have the stem, which is a prefix to all entries on the right. To the right of the stem, each entry takes up one space just like a bar chart, but still retains information about its actual value.

    So a stem plot of the numbers 31, 41, 59, 26, 53, 58 looks like this:

     2|6
     3|1
     4|1
     5|389
    

    That last line is hard to parse for the un-initiated. There are three entries to the right of the 50 stem, and these three entries 3 8 and 9 is how the numbers 53, 58, and 59 are concisely represented in a stem plot

    As an instructor, you can quickly get a sense of the distribution of grades, without fearing the binning artifact caused by standard histograms. A stem-plot can reveal subtle patterns in the data that are easy to missed with usual grading histograms that have a binwidth of 10. Take this distribution, for example:

    70:XXXXXXX
    80:XXXXXXXXXXX
    90:XXXXXXX
    

    Below are two stem plots which have the same profile as the above, but tell a different story:

     7|7888999
     8|01123477899
     9|3467888
    

    Above is a class that has a rather typical grade distribution that sort of clumps together. But a histogram of the same shape might come from data like this:

     7|0000223
     8|78888999999
     9|0255589
    

    This is a class with 7 students clearly struggling compared to the rest.

    So here's the code for making a stem plot in Python using NumPy. stem() expects an array or list of integers, and prints all stems that span the range of the data provided.

    from __future__ import print_function
    import numpy as np
    def stem(d):
        "A stem-and-leaf plot that fits in a tweet by @ivanov"
        l,t=np.sort(d),10
        O=range(l[0]-l[0]%t,l[-1]+11,t)
        I=np.searchsorted(l,O)
        for e,a,f in zip(I,I[1:],O): print('%3d|'%(f/t),*(l[e:a]-f),sep='')
    

    Yes, it isn't pretty, a fair amount of code golfing went into making this work. It is a good example for the kind of code you should not write, especially since I had a little bit of fun with the variable names using characters that look similar to others, especially in sans-serif typefaces (lI10O). Nevertheless, it's kind of fun to fit much functionality into 140 characters.

    Here's my original tweet: @ivanov/status/443980372192137216

    You can test it by running it on some generated data:

    >>> data = np.random.poisson(355, 113)
    >>> data
    array([367, 334, 317, 351, 375, 372, 350, 352, 350, 344, 359, 355, 358,
       389, 335, 361, 363, 343, 340, 337, 378, 336, 382, 344, 359, 366,
       368, 327, 364, 365, 347, 328, 331, 358, 370, 346, 325, 332, 387,
       355, 359, 342, 353, 367, 389, 390, 337, 364, 346, 346, 346, 365,
       330, 363, 370, 388, 380, 332, 369, 347, 370, 366, 372, 310, 348,
       355, 408, 349, 326, 334, 355, 329, 363, 337, 330, 355, 367, 333,
       298, 387, 342, 337, 362, 337, 378, 326, 349, 357, 338, 349, 366,
       339, 362, 371, 357, 358, 316, 336, 374, 336, 354, 374, 366, 352,
       374, 339, 336, 354, 338, 348, 366, 370, 333])
    >>> stem(data)
     29|8
     30|
     31|067
     32|566789
     33|00122334456666777778899
     34|02234466667788999
     35|001223445555577888999
     36|12233344556666677789
     37|0000122444588
     38|0277899
     39|0
     40|8
    

    If you prefer to have spaces between entries, take out the sep='' from the last line.

    >>> stem(data)
     29| 8
     30|
     31| 0 6 7
     32| 5 6 6 7 8 9
     33| 0 0 1 2 2 3 3 4 4 5 6 6 6 6 7 7 7 7 7 8 8 9 9
     34| 0 2 2 3 4 4 6 6 6 6 7 7 8 8 9 9 9
     35| 0 0 1 2 2 3 4 4 5 5 5 5 5 7 7 8 8 8 9 9 9
     36| 1 2 2 3 3 3 4 4 5 5 6 6 6 6 6 7 7 7 8 9
     37| 0 0 0 0 1 2 2 4 4 4 5 8 8
     38| 0 2 7 7 8 9 9
     39| 0
     40| 8
    

    To skip over empty stems, add e!=a and in front of print. This will remove the 300 stem from the output (useful for data with lots of gaps).

    >>> stem(data)
     29| 8
     31| 0 6 7
     32| 5 6 6 7 8 9
     33| 0 0 1 2 2 3 3 4 4 5 6 6 6 6 7 7 7 7 7 8 8 9 9
     34| 0 2 2 3 4 4 6 6 6 6 7 7 8 8 9 9 9
     35| 0 0 1 2 2 3 4 4 5 5 5 5 5 7 7 8 8 8 9 9 9
     36| 1 2 2 3 3 3 4 4 5 5 6 6 6 6 6 7 7 7 8 9
     37| 0 0 0 0 1 2 2 4 4 4 5 8 8
     38| 0 2 7 7 8 9 9
     39| 0
     40| 8
    

    Thanks for reading.

    @ivanov/status/443981782635921408

    permalink
  3. disabling blinking

    2014 01 29 technology

    python vision

    Background: Text editing in the IPython Notebook is provided by an excellent JavaScript-based CodeMirror text editor. This might be more detail than you want, but I'm a vision scientist so I hope you'll indulge me.

    The cursor is meant to tell the user the current location.

    The human visual system has a pre-cortical lag of roughly 50-90 ms (read more about P1).

    That's how long it takes from something changing on the screen to cause an avalanche of photons to barrel towards your eyeball, be phototransduced and processed by several stages of cells in the retina, finally causing retinal ganglion cells to fire an action potential down their axons through the optic nerve, make its way to a processing relay station called the LGN, with those cells firing action potential down their axons, with those spikes finally ending up in the primary visual cortex.

    By ~150 ms, our brains have processed the visual input enough to perform a non- trivial ammount of object recognition.

    The default blink rate for CodeMirror is 530ms.

    That's as slow as molasses in January!

    Say that I've been distracted and looked away from the screen. When I look back at the scree, half of the time it will take 3 times longer for me to get the information that I want ("where's my cursor") than if that cursor was clearly visible at all times. Now it's not always that bad, because sometimes my gaze will land on the screen and even though the cursor isn't visible, it appears in a few milliseconds, and so it takes just as long as if the cursor was there the whole time. But if I happen to be particularly unlucky (there's a reason I don't gamble), it can take 6 times longer.

    Try it out

    Here's the bit of JavaScript code you need to disable blinking in CodeMirror.

    CodeMirror.defaults.cursorBlinkRate=0
    

    If you type that into the JavaScript console of your webbrowser, that setting will apply to all cells created in the current IPython Notebook. If you don't know how to open your browser's Javascript console, don't frett, just make a new cell with just the following lines in there, execute it, and make a new cell to see how you like it.

    %%javascript
    CodeMirror.defaults.cursorBlinkRate=0
    

    Make the change stick

    IPython has a notion of profiles to allow for different kinds of configurations. If this is news to you, you've probably just been using the default profile and not known it. In the shell, run the ipython profile create command to be sure (don't worry, if you alreay have a profile, this won't overwrite it). Now ipython locate profile will tell you the directory which contains all of the configuration for the default profile.

    In [1]:
    !ipython profile create
    
    In [2]:
    !ipython locate profile
    
    /home/pi/.ipython/profile_default
    
    In [3]:
    x = !ipython locate profile
    
    In [4]:
    cd $x.s
    
    /home/pi/.ipython/profile_default
    
    In [5]:
    ls
    
    db/  history.sqlite  history.sqlite-journal  ipython_config.py  ipython_nbconvert_config.py  ipython_notebook_config.py  log/  pid/  security/  startup/  static/
    
    There's a lot of stuff there, but we just need to add our one line to the end of the file in ``static/custom/custom.js``
    In [6]:
    cd static/custom/
    
    /home/pi/.ipython/profile_default/static/custom
    
    In [7]:
    ls
    
    custom.css  custom.js
    
    In [8]:
    !echo "codemirror.defaults.cursorblinkrate=0" >> custom.js
    
    ## "I want it all and I want it now!" You say you don't want to save your current notebook and reload it to get the updated CodeMirror settings? You just want all cells in the current notebook to change their behavior? Well, OK, Freddie:
    In [9]:
    %%javascript
    var rate = 0;
    // apply setting to  all current CodeMirror instances
    IPython.notebook.get_cells().map(
        function(c) {  return c.code_mirror.options.cursorBlinkRate=rate;  }
    );
    
    // make sure new CodeMirror instance also use this setting
    CodeMirror.defaults.cursorBlinkRate=rate;
    
    I hope you enjoyed this little IPython customization detour. If you want more information about how to get rid of blinking in other programs you use every day, [here is an invaluable resource on that matter](http://www.jurta.org/en/prog/noblink). Remember, blinking in user interfaces is bad, [but blinking in vision is very important](http://www.brower.co.uk/opticians/blinking.html). ** This post was written as an IPython Notebook. You can view it on [nbviewer](http://nbviewer.ipython.org/url/pirsquared.org/blog/notebooks/notebook-blink.ipynb), or [download it](/blog/notebooks/notebook-blinking.ipynb) ** permalink
  4. What happens to a talk deferred...

    2013 06 17 technology

    python talk

    I'll be in Austin, TX for SciPy next week, and I'll be giving an updated talk about tools for reproducible research.

    What follows is the abstract of a talk that I really wanted to give and submitted to the general track which did not get in. I care deeply about this topic, and I'm hoping to have conversations with others about it. The talk was deferred to a poster, so if you don't bump into me at other times, seek me out during the poster session (mine's poster #15, 10:35 AM - 11:35 AM on June 27th). This post is intended as a pre-conference warm up to that.

    Navigating the Scientific Python Communities - the missing guide.

    The awful truth: our newcomers have a deluge of options to wade through as they begin their journey. What tools are available, how do I install them, how do I make them work together -- all hard questions facing a budding scipythonista.

    On developer-friendly platforms, the popular approach is to just install numpy, scipy, matplotlib, and ipython using package management facilities provided by the operating system. On Mac OS X and Windows, the least painful, bootstrapping approach is to use a Python distribution like Python(X,Y), EPD, Anaconda, or Sage.

    Both of these paths obscure a reality which must be stated explicitly: the development of packages is fundamentally decentralized. The scientific python ecosystem consists of a loose but thriving confederation of projects and communities.

    The chaos of installation options and lack of centralization around a canonical solution, which on the surface appears to be a point of weakness that is detrimental to community growth, is a symptom of one of its greatest strengths. Namely, what we have is a direct democracy for user-developers. They vote with their feet: filing bug reports, testing pre-release versions, participating in mailing lists, writing and reviewing pull requests, and advertising the tools they use in talks, papers, and conversations at conferences.

    I will discuss why this is the case, why this is a good thing, and how we can embrace it. The talk will present the ethos and expectations of an effective newcomer, as well as resources and strategies for incremental progress toward becoming a master scipythonista.

    permalink
  5. tags-vs-categories in Pelican

    So, following up on my transition to pelican, here's a little help for navigating a pelican site. If you've ever wondered why sometimes there's a highlighted menu item at the top, and other times there isn't, read on.

    Categories

    With Pelican, every post belongs to exactly one category - that category is 'misc' if one is not provided (and you can override that named by setting DEFAULT_CATEGORY = 'somethingelse' in your pelicanconf.py file). Alternatively, if the post is in a subdirectory, it's category becomes the subdirectory name. So if you have a situation like this:

    .../content/unicorns/lady-rainicorn.md
    

    The lady-rainicorn post will be filed under the category of unicorns. You can explicitly override this category-from-subdirectory behavior, by specifying the category in the header of the file, like so:

    title: All about Lady Rainicorn
    slug: lady-rainicorn
    category: adventure-time
    

    Categories are where a lot of the pelican themes get the top navigation bar, which is referred to as the menu in Pelican. You'll notice that this post is filed under technology. If you're viewing this on the main page, that won't be highlighted, but if you click on the title of this post, you'll see that technology will become highlighted. Same deal if you just click on technology, which will get you a listing of the latest post in that category, and a pagination of all previous ones.

    Pages

    The menu items need not be limited to categories, however. With the popular notmyidea template (which is what I've customized for my journal here), if you create any pages (by putting the file in a content/pages/ directory), then the title of that page will appear in front of all of the categories in the menu. These pages don't show up in RSS feeds, though.

    Menuitems

    Additionally, you can specify other MENUITEMS in pelicanconf.py, which will go in front of all pages and categories. MENUITEMS is a list of tuples, each tuple should be composed of a link name, and a url. This is how I link to the listing of all of my blog posts:

    MENUITEMS = [('all', '/blog/archives.html')]
    

    Tags

    Finally, you can have zero or more tags attached to a post. Tags, by default, do not get a feed generated for them. To enable a tag feed, you'll have to set a line like this in your pelicanconf.py files:

    TAG_FEED_ATOM = "feeds/tag_%s.atom.xml"
    

    Menu highlighting

    The notmyidea template only contains logic for highlighting the active category. This is why, if you click on 'All' at the top of mine, it doesn't stay highlighted when you're on that page.

    On the other hand, if you click at cycling at the menu bar, it will stay highlighted, and you will see a listing of the articles in that category. But if you click on the cycling tag in one of those posts - the menu item will not be highlighted, and you will see some more articles - in particular, right now my review of Just Ride will also be listed, but it lives in the category of books, because that's where I'm keeping book reviews.

    Summary

    So there you have it - now you know the differences between categories, tags, pages, and menu items, as far as Pelican is concerned. For me, the bottom line is that I'll probably stick to just using categories, and will try to use tags sparingly. In my transition from WordPress, I cleaned up and removed a whole bunch of tags (since they were either redundant (the same tags kept appearing together), or were too specific (most tags were only used for one post).

    permalink
  6. embracing my hypertextuality

    Well, it's happened again, I've jumped (back) on the static blog engine bandwagon. Early versions of my site were generated literally using #define ,#include, gcc, and a Makefile...). Back then I was transitioning away from using livejournal, and decided to use WordPress so I wouldn't have to roll my own RSS feed generator.

    I tolerated WP for a while - and the frequency of my posts was so low, that it wasn't much of an issue.

    Except for the security upgrades. I logged into the wp-admin console way more times than I cared to just to press the little "upgrade" box. The reason is that wordpress keeps everything in a database that gets queried every time someone hits the site. I was never comfortable with the fact, because content can be lost in case of database corruption during either an upgrade or a security breech. Also, my content just isn't that dynamic. The WP-cache stuff just seemed overkill, since I don't get that many visitors.

    But lately, I've found myself wanting to write more, to post more, but also shying away from it because I hate dealing with the WordPress editor. And I also hate being uncertain about whether any of it will survive the next upgrade, or the next security hole, whichever I happen to stub my toe on first.

    And the thing is, I really like to use version control for everything I do. I liked my blog posts to be just text files I can check into version control. I also like typing "make" to generate the blog, and now I get to!

    For added fun, I'm hoping that writing my posts in markdown will make it easier to coordinate my gopher presence, since it's pretty close.

    For posterity, I'm capturing what the first version of my Pelican-based blog looked like. I did the same thing when I moved to WordPress.

    Embracing my
hypertextuality

    I ran into some confusing things about transitioning to Pelican, so I thought I'd note them here, for the benefit of others.

    Unadulturated code blocks

    I like to use indentation as a proxy for the venerable <tt> tag - which uses a monospace font.

    If you just want to use an indentation, but do not want the indented text parsed as a programming language, put a :::text at the top of that block. Here's what I mean. Take this Oscar Wilde quote, where I've inserted a line break for drammatic effect, for example:

    A gentleman is one who never hurts anyone's feelings
    unintentionally.
    

    Now, you see that ugly red box around the apostrophe? Well, That's because all I did was indent the two lines. If I just put a :::text above the quote, indented to the same level,

        :::text
        A gentleman is one who never hurts anyone's feelings
        unintentionally.
    

    the result will render like this.

    A gentleman is one who never hurts anyone's feelings
    unintentionally.
    

    As the pelican documentation specifies, this is also the way you can also specify the specific programming language you want, so :::python would be one way to not make pygments guess. You can get a list of all supported languages here, just use one of the short names for your language of choice.

    And you should really do this, even if you aren't bothered by the red marks, because the code highlighting plugin goes in and tokenizes all of those words and surrounds them in <span> tags. Here's the HTML generated for the first version:

    <div class="codehilite"><pre><span class="n">A</span> <span class="n">gentleman</span> <span class="n">is</span> <span class="n">one</span> <span class="n">who</span> <span class="n">never</span> <span class="n">hurts</span> <span class="n">anyone</span><span class="err">&#39;</span><span class="n">s</span> <span class="n">feelings</span>
    <span class="n">unintentionally</span><span class="p">.</span>
    </pre></div>
    

    and here's the version generated when you add the :::text line at the top:

    <div class="codehilite"><pre>A gentleman is one who never hurts anyone&#39;s feelings
    unintentionally.
    </pre></div>
    

    nikola?

    At some point, having a dialogue with myself, I wrote in here "or should I not use pelican and use nicola instead?"

    Ok, tried it - nikola takes too long to startup -

    nikola --help
    real    0m1.202s
    user    0m0.876s
    sys     0m0.300s
    
    pelican --help
    real    0m0.639s
    user    0m0.496s
    sys 0m0.132s
    

    I'm sure it's a fine static blogging engine - and Damian Avila's already written IPython Notebook converters for it, but it just feels like it tries to do too many things. Constraints are good. I'll stick with Pelican for now. (Though I did use the nikola wordpress import tool to grab the wp-upload images from my WordPress blog)

    another set of instructions I consulted: Kevin Deldycke's WordPress to Pelican, which is how I did get my articles out using exitwp which I patched slightly, so files got saved as .md, and preserve other format properties.

    Redirects

    also known as: not breaking the web

    I wanted to preserve rss feeds, and also not break old WordPress style /YYYY/MM/DD urls - the Nikola wp-import script had created a url remapping scheme in a file called url_map.csv.

    I don't have that many posts, so I just added them in by hand:

    Options +FollowSymLinks
    RewriteEngine on
    RedirectMatch 301 /blog/feed/ /blog/feeds/all.atom.xml
    RedirectMatch 301 /blog/2006/10/18/todd-chritien-greens-choice-voting/ /blog/todd-chritien-greens-choice-voting.html
    RedirectMatch 301 /blog/2007/01/04/changelogs-with-dates-gui-goodness/ /blog/changelogs-with-dates-gui-goodness.html
    ...
    

    Enabling table of contents for posts

    If you want to include a table of contents within a post using [TOC], you must enabled the markdown toc processor with a line like this is your pelicanconf.py:

    MD_EXTENSIONS =  [ 'toc', 'codehilite','extra']
    

    Categories and tags

    Ok, so this was never clear to me in wordpress, either - but what's the difference between a tag and a category? is it the case that a post can only belong to one category, whereas it can have any number of tags?

    I think I used categories as tags on wordpress. Looks like all posts on Pelican can have at most one category. Turns out this little aside was long enough to turn into its own post, so if you're interested, pelican tags-vs-categories has got you covered.

    That's it for now

    Thanks to Preston Holmes (@ptone) for encouraging me to transition away from WordPress, and pointing me to this post by Gabe Weatherhead (@MacDrifter) for how to do that. It should be said that the pelican documentation itself is very good for getting you going. Additionally, I consulted this post by Steve George which has a good description to get you started, and also covers a bunch of little gotchas, and lots of pointers. Also, thanks to Jake Vanderplas (@jakevdp) for his writeup on transitioning to Pelican, which I will consult later for incorporating IPython notebooks into my markdown posts, in the future. This is good enough for now. LTS.

    permalink
  7. Cycling

    2013 05 23 cycling

    cycling

    A page about cycling in the East Bay (and the San Francisco Bay Area in general).

    This started off as the sort of resource that I wish I had when visiting a new town: so hi there, out-of-towner, welcome to our corner of the world. Hope you enjoy your stay and find these resources helpful.

    You need a bike, a water bottle, a jersey or a saddle bag (to store your snack, phone, patch kit). Everything else is optional.

    Routes

    Though I consider myself an avid cyclist, the reality is that I am only mildly so. I have not been on a ton of rides in the area, and don't know them well at all outside of the East Bay - I have yet to cycle across the Golden Gate Bridge - and the Marin Headlands (an omission I plan to rectify soon). I did mountain bike a bit in Marin when I was a kid, and rode a fair bit around the Peninsula while I was in high school. I got my first roadie the summer before heading off to UC Davis. It was a wonderfully light steel blue Peugeot from the 70s (you can see a picture of it here). I convinced (my then future roommate) Philip to get a matching white one. But it was taken from me my first year in grad school (2006). I hadn't been cycling much since, until I started up again recently. Below, you will find a concise guide to some of my favorite rides in the area. As far as my actual experiences, you can get a flavor of the rides I go on by reading my cycling log.

    20-40 km

    Here is the overview: If you want a shorter ride with a great view - I recommend this 24 km (15 mi) loop from UC Berkeley to Grizzly Peak. The ascent to Grizzly Peak Rd is steady and manageable. The road does get pretty rough when you turn off of College until you get to Broadway, but you avoid the dangerous Ashby route to Tunnel Road. Recently, I've been doing a similar ride that avoids that rough patch by going down College Ave all the way to Broadway. As an alternative option, instead of going up to Grizzly Peak, you can turn off for a slightly shorter (but really fun) descent that ends at the historic Claremont Hotel.

    What's nice about these loops is that you can do them back-to-back for a total of ~50 km. But If you want to do a ride that long with more variety, read on for the longer routes.

    50 km and beyond

    If you have some time (about twice the time it takes to do the shorter routes above), the Redwood-Pinehurst route will take you through an incredible canyon that's filled with redwoods! You can take the loop in the other direction - Pinehurst-Redwood.

    Another local favorite is the "Three Bears" ride, which has some truly scenic views all throughout (62 km, ~1 km gain).

    My longest ride was the El Cerrito to Davis 200K

    My previous longest ride took me half-way up Mt Diablo - the views from there are breathtaking. Can't wait to go all the way up! (115.5 km, 1825 m gain)

    Centuries

    I haven't yet completed a century. April 2014 - El Cerrito-Davis 200K was my first century! (132 miles)

    Here are some local ones that I have my eye on.

    Grizzly Peak Century is one that goes through some of the local East Bay routes I described above.

    Best of The Bay Century likewise starts off in the East Bay routes I'm most familiar with, and heads south all the way to San Jose, before returning a bit to Fremont BART station.

    Foxy's Fall Century is an organized ride based out of Davis, CA, where I was an undergrad.

    Davis Double Century is in my sights as well. Maybe next year I'll get on the board of the California Triple Crown.

    There are a lot of long rides listed on the Different Spokes San Francisco website. San Francisco Randonneurs run a very regular brevet series.

    Routes to avoid

    Ohlone Greenway: it's not fun - there are too many stops and unprotected crossings. This is a nice route to take a stroll through, on a bike it's just frustrating.

    Local Bike Shops

    I want to keep track of reasonable places that rent bicycles in the area (in particularly road bikes), as well as routes you should be sure to checkout (with variations, caveats, and general overview).

    Missing Link Bicycle Cooperative - One can't say enough good things about this place, super friendly atmosphere. They're located right downtown Berkeley, they both sell gear and fix bikes, and even have two complete sets of tools and stands you can use to fix up your bike for free!

    Blue Heron Bikes - a relatively new shop (opened in 2012), in "Westbrae" right of the Ohlone Greenway, I cycle past it every day on my commute. Soon after they first opened, I chatted with the owner, Rob, and he's a great guy.

    Wheels of Justice Cyclery - The wheels of justice grind slowly, but exceedingly fine.

    Resources

    Bike East Bay - a very active local group (previously went by the name East Bay Bike Coalition).

    Albany Strollers and Rollers - Albany, California, is a little 1.5 square mile city just north of Berkeley which I call home.

    Berkeley Critical Mass - 2nd Friday of each month - departs at 6pm from Downtown Berkeley BART station.

    East Bay Bike Party - a monthly evening ride.

    Just Ride - my review of Grant Petersen's book.


    Here's some ASCII art I made that I now use as my email signature:

                       _
                      / \
                    A*   \^   -
                 ,./   _.`\\ / \
                / ,--.S    \/   \
               /  `"~,_     \    \
         __o           ?
       _ \<,_         /:\
    --(_)/-(_)----.../ | \
    --------------.......J
    
    permalink
  8. Just Ride

    2013 05 17 books

    cycling

    This is a pretty good book - though it's more of a set of short little blog posts combined into a book. It's nice to read the very opinionated thoughts of someone who's been dealing with bicycles for a very long time.

    The whole time I was reading this, I felt like this is the type of stuff that my pal Jon G would have said, and in a similar style to the way he would have said it. I look forward to reading Jon's treatises on cycling in the future.

    Reading this book made me proud to and convinced me to continue to never wear clipless pedals and cycling shoes (I have toe clips), and having a kickstand on my roadie. I'm an unracer - and to quote the title of one of the little chapters: "Racing ruins the breed".

    I also learned how to corner and turn properly - which has been invaluable in my windy descents lately. Finally, I was reminded to not just count miles, because every ride counts ("No ride too short"). Also it makes as much sense to count time spent on the bike, and the amount of elevation gain, and the number of days biked, period. Thanks to my commute, this means my days biked per week stays above 5 during the most of the year in California.

    I also learned a new word: Beausage (byoo-sidj). My current bike doesn't have any, but my last laptop certainly does.

    It also felt kind of cool that the author is local. Grant Petersen founded and still runs Rivendell Bicycle Works in Walnut Creek, CA.

    permalink
  9. Cycling log

    2013 04 17 cycling

    cycling

    Why do I keep a log? Read here. This log is terse, if you want longer descriptions of the rides, read my advice for cycling in the East Bay.


    2018-06-17 Bay Trail to Mountain View I <3 the Bay Trail - especially the gravel portions which Jon had introduced me to almost two years ago (2016-08-07). Had a coffee and waffle at Blue Bottle in Jack London Square near the beginning, and took an eggs benedict breakfast in Newark before crossing via Dumbarton Bridge.

    88.4 km +127 m


    2018-06-09 Treasure Bica loop - I've sort of lost my cadance of logging these rides. I guess the ones I do alone all end up blending together, unless they're particularly long.

    60.6 km +771 m


    2018-05-19 Fort Bragg 600k - Wow. What an adventure. We started at 6am and I made it to Fort Bragg (mile ~180) at 10pm after riding along the coast to beautiful fog filtered sunset. Stayed there for an hour, then finally headed back to a campground at mile 225, because Kaley was leaving (otherwise I don't know how long I would have stayed there). Again, couldn't keep up with her the whole time, but didn't fall too far behind. At the camp, I slept in a chair in front of a fire pit from 3:15am to about 5:15, when I woke up to fresh eggs, bacon, and coffee being made for riders faster than me who were getting ready to head out. Left the campground at 6:15am, and needed to be at Pt Reyes Station by 6pm to make time cut off. Rode with Juliayn and Tom for a while - from Cloverdale to Healdsburg. Then took a longer break as they continued on and hooked up with Pierre - having a pleasant chat and good company almost all the way back to Freestone, where Pierre got a flat and insisted I keep going on my own. After figuring out that I wasn't as tired as much as I was cold - especially through the headwinds at Keys Creek - I proceeded to layer back up. I got to Point Reyes Station at 4:23pm (plenty ahead of the 6 something cutoff time), and then proceeded to ride more leisurely, taking a nap in a bus stop booth on Sir Francis Drake, getting tea and a morning bun at a cafe in Fairfax, and finally finishing at 8:20pm at Chrissy Field back in SF. Pierre ended up catching up right at the end of the last climb out of Sausalito and we rode in together. So that's 38 hours and 19 minutes elapsed time for this 600k. You can read more about this annual ride from Rob Hawks.

    600 km +5900 m 38 hours 19 minutes


    Hopland 400k - the beer and hard cider in Hopland seemed like a good idea at the time... Rode a big chunk of this with Phillip again - but had to let him go shortly after Petaluma safeway - I was too slow and nauseous after throwing up.

    400 km +3921 m 24 hours 10 minutes


    2018-05-07 Treasure Bica loop - The building that was in the median at the stop sign as you enter treasure island is gone. Saw a coyote near the top of South Park Dr.

    60.6 km +771 m


    2018-04-14 Treasure Bica + Wildcat 72.5 km +979 m 4 hours


    2018-04-11 - Hawk Hill and Sausalito. Mario and Shawn joined me to brave the rain.


    2018-03-30 A local 100k Treasure island, Bica, Papa Bear, Orinda. I should make something like this into a RUSA perm and ride it for a P-12

    97.2 km, 1846m gain


    2018-03-10 Healdsburg 300k - Yet another wonderful day on the bike. I stayed at my brother's in the city to make the 6am start, but as a result my breakfast was a banana just before the store. So after I got to the first control quickly, 9:10 - I decided to have a nice breakfast and stayed till about 9:45. Rode with Eri[ck]a, Matt and Mike for a while to the second control. Caught up with Jack in Samuel P Taylor Park and paired up for a bit. He let me go on the last climb on Sir Francis Drake.

    My legs felt good - I was able to power through Marin .

    Here's Brian Chun's video of the ride.

    300.2 km +2549 m 15 hours 34 min


    2018-03-04 Treasure Bica loop - The building that was in the median at the stop sign as you enter treasure island is gone. Saw a coyote near the top of South Park Dr.

    59.2 km +758 m


    2018-02-26 - Mt Hamilton 200k - amazing ride - we rode through the snow in the Bay Area (the peak had a good bunch of it, including some on the road) - lucked out into a paceline through most of Mines Rd to beat the wind. Rode a chunk of this with Phillip. Saw a fox riding through the dark on Pinehurst.

    see Eric Walstad's photos, or Greg Merrit's video

    201.9 km +2869 m


    2018-02-17 - Treasure Bica, with more Bay Trail - got rained out so decided to skip the tunnel road climb. 55.4 km +400 m


    2018-02-10 - Treasure Bica loop - 59.2 km +758 m


    2018-02-03 - Treasure Bica loop - fell off the wagon there in keeping these updated.. missed a few rides - Sara and Kayvon, and Greg, too. 59.2 km +758 m


    2017-08-12 Another coffee run - took a more creative descent. [48km, 1000m gain, 3 hours]


    2017-08-05 Coffee run - the descent on Tunnel Road is the worst it's been in many years - way too many potholes and broken asphalt 53km, 1000m gain, 3 hours)


    I rode several times between May and July, but somehow neglected to document any of thos rides


    2017-05-07 Grizzly Peak Century - Rode to the start to add an extra 20k and 300m of climbing. (140km, 2100m gain)


    2017-04-30 Treasure Island - rode with Sara and Kayvon - so good to see them both again.


    2017-04-01 Tunnel Road + Orinda dash - A reasonably short ride with Greg


    2017-02-25 SF Tri Club in the East Bay - Kilian invited me and it was great ride. I had to take easy since I haven't ridden any significant amount lately. (113km, 1710m gain, 7 hours)

    -- 2017-03-22 Direct to Orinda and back - left my water bottle there the weekend prior

    -- 2017-03-15 Happy Valley loop

    -- 2017-02-25 Pt Richmond


    2017-02-18 Pt Richmond


    2017-02-11 Pt Richmond


    2017-01-29 Ciba and back - a lovely weather ride with Greg. I stuck around for a Hawk Hill loop before heading home. First time at Ciba - great coffee!


    2017-01-16 Happy valley loop - saw Gabi hiking in Tilden.


    2017-01-13 Friday morning ride - it's been a long time since I did one of these. This time I went alone, fueling up at Bica before heading up the last bit of Broadway.


    2017-01-02 Tour the Flats - Greg and I decided to start the year off right by going all the way across the Bay Bridge. It was cold. The flats gods tried to deter our plans, and halted our progress only 1.3 miles into the ride from our rendez-vous point. But Greg fixed it with grace, and we were on our way. Only to get another flat as soon as we made it to Yerba Buena Island. Once he patched that up, we decided to reward ourselves with cinnamon rolls from Ikea for our heroism.


    2016-10-23 Happy valley loop - didn't take any snacks with me, was OK.


    2016-10-18 Social ride - With Sara and Kayvon.


    2016-10-09 Russian River 200k (modified) - Stork and I had a great day on our bikes. On the way back, we decided to get off Highway 1 and instead backtracked our morning rollout (for calmer road conditions, and at the cost of some extra climbing. This was my first ride in 2 months and it showed - I had to go painfully slow from Bodega Bay to Valley Ford, spinning in low gear without being able to provide any power.


    2016-08-13 El Cerrito - Davis 200k - a my 5 consecutive monthly 200k. Left El Cerrito at 7am and got to St Helena at noon, which is 45 faster than usual for me - but it was so hot that, despite the extra time cushion, I ended up rolling into Davis at 6pm - which is an hour longer than last time. (213km, 2472m climbing, 11 hours total)


    2016-08-12 Friday morning social ride - Danny and Jon, over Grizzly Peak (42 km, 759m gain, 1.5 hours)


    2016-08-07 Bay Trail - Oakland to Fremont with Jon - beautiful day, the mixed terrain was very welcome. (90km, 137m gain, 5 hours)


    2016-08-05 Friday morning social ride - just Danny and I, took Claremont. (40km, 678m gain, 1.5 hours)


    2016-07-23 Happy valley loop - good to be back on the bike, it was a hot one. (57km, 1062m gain, 2.5 hours of saddle time)


    2016-07-10 Cloverdale to SF 200k - Stayed up front at the beggining and got a chance to ride with some fast riders through the first two controls, and then from just before Sir Francis Drake climb. (202km, 1694 gain, 8 hours 40 minutes)


    2016-07-09 Boonville Lollipop 300k - My first 300k! (310km, 3188m gain, 14 hours 56 minutes)


    2016-07-07 Hawk Hill with Janet! We saw whales when we stopped part way down the descent.


    2016-07-03 Return to Reliez - haven't ridden on Reliez Valley Rd for over a year, maybe two... Decided to correct that today. (73km, 1463m gain, 3 hours 40 minutes)


    2016-07-01 Friday with Jon - had a good conversation about 3D modeling tools, and a possible stealth project... (52km, 860m gain)


    2016-06-25 Russian River 200k - what a lovely ride! (205km, 2026m gain, 9 hours 25 minutes)


    2016-06-24 Friday with Danny and Jon - good thing I did this ride, because the only water I had at the start of the 200k the next day was a single mostly full bottle from this outing.


    2016-06-11 Happy valley loop - Saw a gorgeous Stellar's Jay in the woods, and two young deer on the Wildcat on the way back. (57km, 1062m gain, 2.5 hours of saddle time)


    2016-05-22 El Cerrito - Davis 200k - a solo ride, the second in my quest for my first R-12. Took a bunch of photos. (213km, 2472m climbing, 10 hours total)


    2016-05-12 Bike to Work day! A sweet leisurely ride from the office to Hawk Hill (my first time there) with Danny and Janet. Danny and I rode the ferry from Oakland, so I had another 13km before the SF portion of the ride. Danny has a few photos on his Strava (56km, 650m gain, 3 hours)


    2016-05-08 Bear-y Happy Nice and foggy morning ride, fueled by Doughnut Dolly! (75km, 1174 m gain, 3 hours)


    2016-05-01 Grizzly Peak Century - Spontaneously ended up riding with Mark within the first few miles, and after meeting at the first rest stop, we rode most of the 110 mile version of the ride together at a brisk pace. The conversation sure made the miles go by a lot faster. Also bumped into randonneurs Rob Hawks and Barb who volunteered separate rest stops - nice to see familiar faces. (190km, 3101 m gain, ~ 10.5 hours total)


    2016-04-30 The ride of two Pauls - I took Paul The Elder on his first ride in the East Bay. It was a beautiful morning, which we started at Semifreddi's. I had to ditch Paul at the top of Happy Valley to head home, but he was a good sport about it. (56km, 1062m gain, 3.5 hours of saddle time)


    2016-04-29 Another Friday with Danny - Danny and I took on Grizzly Peak - I returned home the more direct way, opting out of the extra climbing. (33km, 579m gain, 2 hours)


    2016-04-16 El Cerrito - Davis 200k - a wonderful day for a ride (213km, 2472m climbing, 9 hours of saddle time, 10 hours total)


    2016-04-10 Happy LaMo return via Arlington again - the weather kept me from leaving earlier in the morning in trying for Mt Diablo. Climbed around Albany Hill when I got back just to add a little extra. (57km, 1062m gain, 3 hours of saddle time)


    2016-04-03 Longer training ride, the 200k is only two weeks away, so I extended my usual loop by going through Moraga. Pleasant sounds of bubbling creeks on Redwood Road: delightful. (88 km, 1720m gain, 4.5 hours)


    2016-04-01 (Anti) Social ride - Danny slept in, so I took on Grizzly Peak by myself. (42 km, 759m gain, 2.5 hours)


    2016-03-26 Happy LaMo return via Arlington - trying to get ready for the El Cerrito-Davis 200k (57km, 1062m gain, 3 hours of saddle time)


    2016-03-25 Friday with Dmatt - Danny and I decided to take on Grizzly Peak. (42 km, 759m gain, 2.5 hours)


    Wildcat Only - wow, not

    -- Friday with Dmatt

    -- 2016-01-23 A run - ran to El Cerrito BART station, then the North Berkeley one, once around UC Berkeley campus and back. 16.7km, 222m gain

    -- 2016-01-15 Tunnel Road to Claremont - Danny was freezing, Jon's back tire had a slow leak, but we still got out there! I wore a jacket and was much warmer. (40km, 678m gain, 1.5 hours)


    2016-01-08 Tunnel Road to Claremont - with Jon, I was very cold, was shivering at Fourne for quite a while after the Claremont descent. Jon and I came up with and idea for an electronics project. (40km, 678m gain, 1.5 hours) 2016-01-01 Wildcat Only - wow, not cycling for two months really made me weak... The cold temperature (5-7°C / 41-45° F) didn't help. (31km, 560m gain, 2 hours)


    2015-10-25 Happy LaMo return via Arlington - saw one turkey doing a pretty dance for another turkey... in the middle of the road... Turkey's aren't very smart, it turns out. (57km, 1062m gain, 3 hours of saddle time)


    2015-10-30 Tunnel Road to Claremont - Jon, Danny, and I. Saw some turkeys, one of whom had beef with us and took it out on the car behind us.


    2015-10-25 Happy LaMo return via Arlington (2.5 hours of saddle time)


    2015-10-16 Tunnel Road to Claremont - Just Danny and I today.


    2015-10-10 Winters 200k - continuing my tradition of forgetting to put water in my bottles before rolling out - rode 'dry' and ended up filling them at the first control (38km into the ride). For the first half of the ride, I somehow ended up in a group with 2 anciens and 2 anciennes (Robert, Barry, Kris, and Renee). Having done only two 200k rides before this, I was actually surprised to keep up with them for as long as I did. We got to the Winters control (93km) at 10:10 - I was aiming for 10 hours which would have only put me there a bit before noon. The cardiac hill climb is where I couldn't keep up anymore, though our paths still crossed at the next control (124km) - but I decided to sit and cool off for a bit as they rolled out from there (and finished exactly an hour before me). I was pretty much alone for the second part of the ride, which is too bad, because the headwind was quite strong and took a lot out of me, but I'm happy with my performance. (Photos from an SFR member) (200km, 2266m gain, 9 hours, 28 minutes)


    2015-10-04 Willow Ave Park and Ride Scoped out the Winters 200K start control for next week. (51 km, 460 m gain, 2 hours)


    2015-10-02 Tunnel Road to Claremont - All of us again (Sara, Kayvon, Danny and Jon) - met up at Blue Bottle this time. Fournée post-ride stop again! (40km, 678m gain, 1.5 hours)


    2015-09-27 Pt Reyes Station loop with Danny and Stork! Danny's longest ride ever - but he paid for it with two flats. I played with staying in the big gear for several of the climbs, and the new-to-me segments of the Cross Marin Trail were delightful. (150km, 8 hours)


    2015-09-25 Tunnel Road to Claremont - Our biggest turnout! Sara, Kayvon, Danny and Jon all showed up. Jon got a flat halfway up Tunnel Road. Our first time at Fournee bakery afterwards, yummy! (40km, 678m gain, 1.5 hours)


    2015-09-18 Tunnel Road to Centennial - A ride with Jon and "Hawkeye" Danny! (40km, 678m gain, 1.5 hours)


    2013-09-14 Lucas Valley Populaire: Danny's first randonneuring event, it was a really nice, overcast day. (113km, 1417m gain, 6 hours)


    2015-09-06 Happy Valley First weekend ride with Danny! (56km, 1057m gain, 3 hours)


    2015-09-04 Tunnel Road to Claremont - With Danny and Jonathan! Rode up Euclid for good measure afterwards. (40km, 678m gain, 1.5 hours)


    2015-09-01 Tunnel Road to Centennial - Sara, Kayvon, and Danny! (37km, 600m gain, 1.5 hours)


    2015-08-27 Wildcat and South Park - went for a run with Stéfan afterwards (1.5 hours)


    2015-08-21 Tunnel Road to Centennial - Just DMatt and I this time, we split off with Danny taking Centennial down, whereas I stayed on Grizzly and came down Spruce. (37km, 600m gain, 1.5 hours)


    2015-08-09 Wildcat Moraga Redwood - a good weekend ride. (80km, 1.5km gain, 3.5 hours saddle time)


    2015-08-07 Tunnel Road to Centennial - another Friday morning with Sara and Danny. Danny's first time up to Grizzly Peak. (37km, 600m gain, 2 hours)


    2015-08-03 Freestone Bread Run 200K - Awesome ride with SF Randonneurs, - here's an album where I can be seen holding a coffee at the beginning of the ride. (205km, 3km of climbing, 11 hours 45 minutes of saddle time, 3 wild blackberry pickings on the side of the road)


    2015-07-31 Tunnel Road to Claremont with Sara and Danny (DMatt's first time!). Sadly, found out that Nobolom is closing after 40 years this Sunday, glad to have gotten a chance to go there one last time.


    2015-07-13 Biked to Oakland for coffee and bacon at Sara and Kayvon's place, followed by a ride to Concord for a long lunch with Kenji. Took BART from Pleasant Hill to Rockridge, and then biked home from Rockridge. (3 hour of saddle time)


    2015-07-10 Tunnel Road up and down with Sara and Kayvon. We persevered, despite the rain, and it mostly cleared up and dried out by mid-ride. (1 hour of saddle time)


    2015-07-04 Happy LaMo return via Arlington (2.5 hours of saddle time)


    2015-06-26 Tunnel Road to Claremont - another Friday morning ride with Sara and Kayvon. Ascended on Kavon's single speeder. (1.5 hours of saddle time)


    2015-06-14 Happy LaMo return via Arlington (2.5 hours saddle time)


    2015-06-12 Tunnel Road to Claremont - joined by Sara and Kayvon again (1.5 hours of saddle time)


    2015-06-07 Morgan Territory and Mount Diablo (junction only). A ride with Jeff and his team (Team Roaring Mouse) - it was waaayy too hot - but the company was good. (66.6 miles, 5 hours altogether with waits / regroups)


    2015-06-05 Tunnel Road to Claremont - joined by Sara and Kayvon (1.5 hours of saddle time)


    2015-05-30 Happy LaMo return via Redwood Wow! First ride on my new Surly Long Haul Trucker - and it rolls like a dream. I was able to push myself the entire ride, thanks to the higher gears, as well as the wide handle bars that allowed for easier breathing during recovery. (4 hours of saddle time)


    2015-05-25 Went up Centennial after checking out a Surly Long Haul Trucker at The Missing Link. Was cold at Grizzly peak, only had enough time to go down to Wagner Ranch and come back (1.5 hours of saddle time)


    2015-05-23 Happy LaMo return via Redwood. Inaugural ride in my brand new SF Randonneurs jersey! (4 hours of saddle time)


    2015-05-10 Happy LaMo return via Kensington (2.5 hours of saddle time)


    2015-05-02 Happy LaMo - yay! (2.5 hours of saddle time)


    2015-04-18 El Cerrito - Davis 200k with SF Randonneurs. (213 km, 9.5 hours of saddle time, 11 total)


    2015-04-05 Happy LaMo return via Redwood. Downhill portion of tunnel road is seriously messed up now. (5 hours of saddle time)


    2015-03-29 Wildcat only. Was sick last week, still not fully recovered, but figured I'd get at least a short ride in. (35.5 km, 665 m gain, 1.5 hours of saddle time)


    2015-03-15 Happy LaMo return via Pinehurst, then Euclid and return via Kensington. Glad I had the time to push myself a bit, to get back into shape for the El Cerrito 200 km. (4.25 hours of saddle time)


    2015-03-08 Happy LaMo return via Kensington (2.5 hours of saddle time)


    2015-03-01 Wildcat only, return through Kensington. First ride of the year? Yikes. I did go on a few runs though. Need to make this a regular morning ride before work a few times per week. (1.5 hours of saddle time)


    2014-10-18 SF Randoneurs' Lucas Valley Populaire - awesome ride again this year - my time was 5h 35 minutes - and I did take a few nice breaks, including the extravagance of a double espresso and a morning in Fairfax on the tail end of the ride. Seriously considering my first 200K in a few weeks. Been trying to get in shape the last couple of weeks by compensating for a lack of saddle time with running for an hour twice per week.


    A few out and back to Wildcat Canyon



    2014-09-07 Happy LaMo - Wasn't as hot, and I took some snacks with me, so didn't even need to stop in Orinda as I made my way home. (56km, 1057 m gain, 3 hours of saddle time)


    2014-08-31 Happy LaMo - finally working my way back up to a longer ride. It was pretty hot today. (56km, 1057 m gain, 3 hours of saddle time)


    2014-08-24 Wildcat and back A good pace,


    2014-08-10 Wildcat and back via Arlington First ride in a long time due to back injury that's been slowing me down. The top of Wildcat Canyon is so incredibly smooth now.


    2014-06-14 Wildcat and back via Arlington short ride again today.


    2014-06-01 Never Again a fun "shortcut" from Inspiration Point ended up costing me an extra hour, and had me off-roading in my poor roadie. I did see 5 bunnies up there while riding through the park, though. (61 km, 1254 m gain, 3 hours of saddle time)


    2014-04-27 Reliez LaMo - Got a flat in as soon as I got on Pleasent Hill Rd, had to walk to Hank and Frank's who fixed me up. Again, did this after a 5k run up to campus, but could actually walk down stair the next day (unlike last time) (km, m gain, 3 hours of saddle time)


    2014-04-20 Happy LaMo - met up with Lena in Orinda and at Inspiration Point. Did this after a 5k run up to campus. (56km, 1057 m gain, 2 hours 20 minutes of saddle time)


    2014-04-12 - Happy LaMoRedwood - longer ride


    2014-04-06 Happy LaMo - good to be back on my bike. Beautiful weather today. (56km, 1057 m gain, 2 hours 40 minutes of saddle time)


    2014-03-?? - A Bay Trail ride with Jon.


    2014-03-09 South Park - got a flat at the beginning of Wildcat, so had to turn back and walk down for an hour and a half all the way to Wheels of Justice where Matt fixed it in 7 minutes, and I was on my way back up. Found out I can't shift into my lowest gear when I got to South Park, so that was a painful ascent.


    2014-02-16 to Happy Valley Rd - actually felt like I really pushed hard the whole ride - stayed in my highest gear all along the top of Wildcat Canyon Rd on the way out. Brought just enough snacks to stay filled with energy. (56.7 km, 1291 m gain)


    2014-02-12 Brazilian Room and back only had an hour, but that's an hour longer than I rode in the last 3 weeks. (18 km, 339 m gain)


    2014-01-19 Wildcat Only same ride again, faster pace this time. (35.5 km, 665 m gain)


    2014-01-18 Wildcat Only short ride to get back on that horse. (35.5 km, 665 m gain)


    2014-01-10 Grizzly Peak My first ride of the year (and in well over a month), wearing jeans and with my messenger bag on, right after therapy. The best thing for depression is exercise.


    2013-12 Bay Trail short ride with Jon and Sofia ()


    2013-11 Grizzly Peak with Sara via South Park ()


    2013-11 a ride with with Minh ()


    2013-09-23 Bay Trail Stroll with an extra 30 kilo in tow. (15 km, 55 m gain)


    2013-09-14 Lucas Valley Populaire: Took BART over to Embarcadero, and after an espresso and waffle at Blue Bottle at the Ferry Building with my friend JB, we headed over to Chrissy Field, where JB left me in the good company of Guy, James, Sara, and Kayvon. It was a great day for a nice long ride, we were mostly bringing up the rear the whole time, but I got to take a bunch of pictures. Without a doubt, I'm ready for my first 200k (112.6 km, 1505 m gain)


    2013-09-08 Orinda via Happy Valley alone today. It was a hot one, so I took my shirt off and got some of the late-summer sunshine. (55.4 km, 1254 m gain)


    2013-09-08 Bay Trail Stroll we skipped the Solano variety, and just took a new trailer to the bay trail (19.8 km, 78 m gain)


    2013-09-07 The new bridge and Port of Oakland Rode across the new section of the Bay Bridge with my buddy Jon, then he showed me a couple of parks around the Port of Oakland. (45 km, 75 m gain)


    2013-09-06 Moraga-Wildcat Started off as the Mutton-Chop ride with Cal Cycling. Met tri-athlete and optometry student Christie, who said she's thinking of going to Moraga when we got to the intersection of Skyline and Grizzly Peak. She didn't object to me tagging along, and we proceeded at a pretty damn fast pace. By the time we were climbing out back into Tilden, I could barely keep up, but it was a great ride. (55.3 km, 1062 m gain)


    2013-09-02 Orinda via Happy Valley same ride as the day before, more people were out because of labor day. Stayed in the highest gear the whole time on Wildcat on my way out. (55.4 km, 1254 m gain)


    2013-09-01 Orinda via Happy Valley A cyclist with a Portland jersey let me lead but kept me honest up Wildcat, then he got ahead of me on the downhill - it sucks to not have a reasonable high gear. Didn't visit Granny's house on the way up the Happy Valley hill. (55.4 km, 1254 m gain)


    2013-08-31 Orinda via Upper Happy Valley rode with Dan, his first time up Papa Bear. (52.5 km, 1239 m gain)


    2013-08-24 Orinda and back - had an iced green atomic sludge thing from Peet's in Orinda. (47.4 km, 966 m gain)


    2013-08-20 Grizzly Peak I was running late this morning, Dan waited patiently for me at Bica again, and then we went up to Grizzly Peak and split off our separate ways. (37.2 km, 702 m gain)


    2013-08-19 To Bica and Back This hipster cafe was giving away free coffee on account of their third anniversary, so I met up there with Dan, had a good conversation catching up, and then headed home. (17.4 km, 86 m gain)


    2013-08-17 Pinehurst - MacArthur Got to do some exploring around upper Rockridge while waiting for Jon, and then we did the Pinehurst - Redwood ride together. (64.4 km, 1171 m gain)


    2013-08-14 Grizzly Peak morning ride with Sara. Bumped into Matt Davis during our pre-ride coffee at Actual Cafe (he just moved to the neighborhood) (32.5 km, 722 m gain)


    2013-08-11 A ride to Concord where I met up and chatted with my old friend Janet. We chatted for a few hours, and I did not have enough time left to ride all the way home, so I took BART from Concord to Rockridge, and took a ride home from Rockridge BART. (56 km, 1182 m gain)


    2013-08-01 Pinehurst - Reliez - Spruce Finally went on a good long ride. Bonked and took a 10 minute nap in the sun at Wagner Ranch elementary before heading up Wildcat Canyon. (96.6 km, 2048 m gain)


    2013-07-22 Tunnel - Claremont loop Another morning ride with Sara. (27 km, 583 m gain)


    2013-07-21 A ride to Jon and Sarah's new place! I dropped off some freshly made preserves from strawberries we had picked from our farm the day before. Redwood is pretty steep over there. (50 km, 809 m gain)


    2013-07-13 Tunnel - Claremont loop First ride with Sara Emery! Neither of us had ridden in a few weeks due to travel and being sick, so we took it easy. Actual Cafe apparently only opens at 8am on the weekend, so we doped at Cole Coffee in Rockridge. (35 km, 591 m gain)


    2013-07-03 Marin - Tunnel Rd loop - first ride in over a week due to extensive conferencing and travel. Met David, who has a cool rig with an aerodynamic bubble out front, vertical steering, and an electric regenerative assist. (33.7 km, 765 m gain)


    2013-06-22 The Populaire (SF Randoneurs) my first randoneuring event! (116.3 km, 1637 m gain)


    2013-06-18 Mt Diablo (half-way) - My first metric century. Ran out of time and decided to not try for the summit this time. Good thing I didn't, it was dark by the time I made it back to Tilden. Took a new basket I got at a big box for $15 in preparation for the Populaire on Saturday - but made the mistake of carrying my U-lock and empty metal sandwich container - tons of rattling the whole time, except for the slow ascents. Mt Diablo's south side road is freshly paved and the views are breathtaking. (115.5 km, 1825 m gain)


    2013-06-14 Broadway-Centennial Another morning ride with Dan, another double espresso cubano doping dosage at Actual (pre-ride). Dan found some rope for his boat as we approached campus. (32 km, 671 m gain)


    2013-06-13 Spin class with Randy. Climbed some hills, had several streaks around 300 watts and higher, which seemed impossibly high a couple of months ago. Randy told me that the North side of Mt Diablo is steeper, but he prefers it - South side is nicely paved and better for descents. (22 km, 35 minutes)


    2013-06-13 Broadway Terrace - Grizzly Peak - First time going up Broadway Ter - it's steeper than Tunnel Rd, and my left calf was very unhappy about that. Also, I Wish I had a higher gear for downhills - another cyclist in a red jersey that I passed during the climb caught up with me on the descent from Grizzly Peak, but pedaling at those speeds and my gearing is useless. We chatted briefly after Centennial, and he was impressed that I wasn't wearing cleats - strapless toe-clips for the win! (24.5 km, 638 m gain)


    2013-06-11 Tunnel Rd Only Road again with Dan Coates this morning. We had pre-ride espressos at Actual, and post-ride pastries with coffee at Nabolom, with thick fog sandwiched in between. (36 km, 637 m gain)


    2013-06-09 Happy-Reliez Overcast and a bit chilly. New slightly thicker jersey and long sleeved shirt kept me adequately warm. In good spirits, was told I'm "going way too fast" as I passed a cyclist going up Happy Valley road. :) (77.5 km, 2062 m gain)


    2013-06-04 Centennial-Happy-Lamorinda Succeeded in doing a standing climb all the way up Happy Valley Rd. (64.5 km, 1604 m gain)


    2013-06-01 Mt Diablo Prelude I flirted with Mt Diablo, but got a flat and was stranded in Danville until the cavalry came and picked me up. (50.5 km, 1216 m gain)


    2013-05-31 Wildcat Only it was really hot on the other side of the hill. (35.5 km, 665 m gain)


    2013-05-30 Morning Claremont Loop - Dan Coates joined me for a ride. I was doping (Espresso Cubano at Actual Cafe), but carried my bag the whole way, as a handicap. (27 km, 583 m gain)


    2013-05-28 Spin Class at RSF: speed (30-30 sprints and standing endurance). We got a bonus 15 minutes at the end. (29 km, 60 minutes)


    2013-05-28 Redwood-Pinehurst-Tunnel - glad to see dozens of cyclists going up Tunnel Road in pairs as I was coming down. (50 km, 1099 m gain)


    2013-05-26 South Park-Papa-Happy-Reliez-Bear Creek-Happy-Orinda-Wildcat Had an extra hour today, made good use of it with some extra climbing. Went through the blocked off section of El Toyonal - lots of horses, and also a terrible road, wouldn't recommend it. (90 km, 2276 m gain)


    2013-05-25 Wildcat-Papa Bear-Happy Valley-Lamorinda - First time taking Happy Valley Rd - rough on the ascent, but buttery smooth on the way down. Stopped for sugary coffee in Orinda. I like ridewithgps's interface a lot better, and the elevation gain it recorded was 1.5 km, a full 500m later than MapMyRide - because MMR smooths things over more. I like the interface better (you can zoom in on portion of a ride quicker), so I think I'm going to stick with RWGPS from now on. (72 km, 1550 m gain)


    2013-05-23 Tunnel-Claremont Right leg kind of bumming - but surprised at how much strength my legs had at the top of Grizzly Peak - stayed in high gear all along even that last hill. (23 km, 405 m gain)


    2013-05-21 Inspiration Point-Wildcat Roundtrip-Grizzly Peak - South Park Drive still kicks my butt, so I'll have to do it more often. (37 km, 690 m gain)


    2013-05-17 - Spin class at RSF, got there 10 minutes late, but hey, every ride counts! (16 km, 35 minutes)


    2013-05-17 - Tunnel Rd-Claremont-Tunnel Rd-Grizzly Peak Tunnel Rd uphill is so nice, today I rode it twice! On the second go around, on the rolling part of Grizzly Peak Blvd, I hit the Bohemian Rhapsody solo - and left a cycling team in the dust! (48 km, 893 m gain)


    2013-05-16 - Redwood-St Mary's-Reliez Valley-Three Bears-Grizzly Peak (93.5km, 1451 m gain)


    2013-05-14 - Tunnel-Pinehurst-Redwood-Tunnel A good ride, solid two hours. Watched a raptor taking off right in front of me while cycling up Redwood, beautiful bird. (49.5 km, 822 m gain)


    2013-05-11 - Three bears - Papa first Helped one guy find his cycling computer. Saw a wild turkey with a bunch of chicks. Was way to windy on San Pablo Dam Rd as I approached 80, and all along 80. I wouldn't like cycling in the pacific northwest - apparently it's always windy there. (53.5 km, 589 m gain)


    2013-05-10 - Claremont-Tunnel Rd. Morning ride - thick fog along Grizzly Peak Blvd and Skyline. Bumped into and chatted with Kirk McKusick while enjoying my cup of coffee after the ride.
    (26.5 km, 443 m gain)


    2013-05-08 - Centennial-Grizzly Peak-Tunnel Rd Was told "hey bro, call it out!" when I passed another cyclist on Grizzly Peak, which I'm ok with, but he kept yelling something long after I was out of hearing range. My first time going down Tunnel Rd. (22.5 km, 441 m gain)


    2013-05-06 - Page Mill-Altamont Loop, from Stanford. After the first day of Software Carpentry at Stanford, I spent an hour in front of the Thai restaurant where Bernard, Ariel, and I had dinner trying to get my bike lock unlocked. Bob suggested I put WD-40 in the lock, and it worked to revive it! (22.5 km, 214 m gain)


    2013-05-05 - Page Mill-Altamont Loop Saw three deer on Page Mill. Remarkable how easy this was compared to what a Page Mill ride was like a decade ago for me. (14.4 miles, 702 ft gain)


    2013-05-03 - Centennial-Grizzly Peak-Claremont Short ride. Didn't have much time, just enough for a small climb. But every ride counts. (9.4 miles, 1398 ft gain)


    2013-05-01 - Redwood-Pinehurst, again. Concentrated on cadence. A fellow cyclist I passed on the Tunnel Road climb stayed not too far behind the whole way up, and caught up near the top. I told him "Thanks for keeping me honest", to which he replied "It was the other way around". He took a left onto Grizzly, as I continued down Skyline. Briefly stopped at the Canyon post office at 4:30pm, as they were closing up. Will have to send postcards from there, sometime. (31 miles, 2772 ft gain)


    2013-04-30 - Redwood-Pinehurst Pushed through in higher gears as much as possible, strength training. Took a slightly different route to get to the hills, taking College all the way to Broadway. (31 miles, 2772 ft gain)


    2013-04-28 - Wildcat-Three Bears-Wildcat My first time riding Three Bears! I was not super fond of the beginning of the Three Bears route (Alhambra Valley Rd) - it's quite choppy and not as nicely paved as most other places I'm used to riding, but having the road talk to you is quite encouraging and novel, to me. Examples of signage in the asphalt: "Momma" at the beginning of the first big hill, or "feeding zone", or "almost" within the last 100 yards of the "Papa Bear" hill. (38.5 miles, 3051 ft gain)


    2013-04-27 - Wildcat-Orinda-Moraga-Pinehurst-Grizzly Peak, with a Rosie finish

    Fueled by two cups of coffee (one from Nabolom, one from Local-123), and pastries from Nabolom, Crixa Cakes, and Starter Bakery - I decided to binge on the pain, as well. I particularly loved slicing through Camino Pablo and Moraga Way in high gear. Made it almost all the way up Pinehurst in second lowest gear - only had to switch to the lowest for the last 100 yards, or so. The finish was anything but rosy - a very strong wind from the bay made me wish I had a sail with me. (44 miles, 2782 ft gain)


    2013-04-24 - Grizzly Peak loop, same as a week ago, had to wade through the thick low-lying clouds all along the ridge - near zero visibility up there this time. Bumped into Brandon at the gym afterwards. Turns out the VS ride I missed yesterday was just him and Zack, and they went up Spruce and came down Centennial. (15 miles, 1575 ft gain)


    2013-04-23 - Claremont Only. Missed the Vision Science ride, and had to get back quickly, so only had time for a very short (but fairly intense climb) ride. Claremont has too much automotive activity this time of day (4-5pm). (6.25 miles, 974 ft gain)


    2013-04-21 - Rosie the Riveter to Lake Anza. Amazing how a bar I ate along the way made me not even tired at the end of the ride. The last hill (Canon Drive) was easier than it had been all winter long. Snacks FTW!

    Wore boardshorts today, and amazing how many fewer nods I got from fellow cyclists - it's like they don't recognize their own if I don't look the part. It's the cadence, not the clothes that make a cyclist. (20 miles, 1119 ft gain)


    2013-04-19 - Longer ride: Redwood-Pinehurst, ran out of steam (completely bonked) at the bottom of the last hill on Pinehurst to get back to the ridge, and had to just slowly waddle my Resolved to never go on rides longer than 15 miles without a snack. (30 miles, 2680 ft gain)


    2013-04-17 - Rode the Grizzly Peak loop, from campus to Broadway and then up. Dan Coates would have joined, but had a flat, and turns out the glue in his patch kit was all dry. Brandon Lujan also stopped by, on his bike, wondering why no one responded to his Bay-to-Breakers thread on vs-social. I watched the sun set behind Mount Tam as I rode along the Grizzly Peak ridge, and got back to the gym just at twilight.
    (15 miles, 1575 ft gain)


    Why keep a log?

    This is a log that's inspired by the Davis Wednesday Night Skate Log. I'm in there somewhere at least a couple of times (01/21/04, 09/29/04) and my brother Mike even more frequently. Another point of inspiration is Ned "Bike Nomad" Konz's trip logs and Steven Roberts' "Miles with Maggie" portion of his bicycle adventures.

    About a month after I started keeping this log, I came across yet another example of why I like keeping logs (and reading them) - this one is from Rob, the owner of Blue Heron Bikes in Berkeley. Read Rob's October Bike Vacation

    I don't keep track of every single time I get on a bicycle - that would be too tedious, since I have a 6 mile round-trip home-campus commute every day. These are just rides I do for fun and exercise. I get no sense of accomplishment keeping track of rides where I'm riding in a manner as to minimize my sweatiness during my trips to and from campus.


    Here's some ASCII art I made that I now use as my email signature:

                       _
                      / \
                    A*   \^   -
                 ,./   _.`\\ / \
                / ,--.S    \/   \
               /  `"~,_     \    \
         __o           ?
       _ \<,_         /:\
    --(_)/-(_)----.../ | \
    --------------.......J
    
    permalink
  10. remembering John Hunter (1968-2012)

    John Hunter, the author of matplotlib, passed away on August 28th, 2012. He will be dearly missed.

    Please donate to the John Hunter Memorial Fund. A giant in our community, John lead by example and gave us all so much. This is one small way we can give back to his family.

    what follows are excerpts from my paper journal over the past week:

    John Hunter passed away this morning,
    Oh my god. John Hunter was incredibly
    kind and warm -- I can't believe he bought
    me this laptop. I can't believe that such
    a wonderful man could be dead -- so suddenly.
    
        What a tremendous loss.
    

    Dear Merlin,
        John Hunter died yesterday --
    getting unstuck. It is entirely appropriate
    to be stuck -- to feel it, smell it, taste it
    feel it drilling though your head
    

    I keep pacing around the house.
    I just need to leave.
        calmly.
    My thoughts are with John's
    family. & with the folks in Louisiana.
    
        A rat in a maze --
    panicked -- & the water
    level rises still. escalates.
    

        Our loss of John makes me
    want to code furiously.
    

    I feel the urge to code furiously,
    but only have the capacity to tweet about
    it, and lack thereof to censor myself.
    

    I don't believe I'm losing
    my mind. I believe I never had
    one to begin with.
      I'm not losing my mind. I never
      had one to begin with.
      I'm not losing my mind.
      That would imply I had one
      to begin with.
    Left the house without shoes --
    waiting for my laptop to charge.
    
      I want to share this with the
      group -- so I can come to
    terms with it myself. forgive myself.
    
      Connection with a stranger -- can be a form of escape.
    but it can help you gain perspective on
    your own life. I think it has for
    me.
      I am a severely broken
    person. Ok. Time to get shoes,
    shower, & then go to try &
    talk w/ Greg Wilson.
    

    I must be mistaken. Maybe I was.
    Who's to say that I wasn't.
    

    The scientific python community lost one
    of it's giants this week, and
    I lost an important mentor.
    
    Remembering John Hunter (JDH)
    
        People keep dying. I don't know
    how to deal with that -- I feel like
    I never really processed dedushka's death --
    nor Ken Green's, nor Jessi Debaca's,
    nor babushka's
    
    ... I lost another mentor. Most of
    these people (all?) don't know that they
    were mentors to me -- but they were.
    I looked up to John -- I secretly
    wanted to please him -- but did not
    even dare to do so directly (I
    have Fernando Perez to thank for getting
    my first contribution into Matplotlib.
    
    I remember feeling really bad after my first
    sprints at SciPy 2009 -- John actually
    knew who I was -- and wanted me
    to work on some matplotlib stuff --
      I ended up doing some rote work with
    David Warde Farley (and felt kind
    of like a third wheel - since dwf
    (pronounced "dwoof" - did I get
    that right, David?) is more than
    capable as a command-line
    cowboy (David doesn't know this --
    but I learned a great deal from
    just sitting next to him and watching
    him string together standard unix
    tools, pipe-after-pipe -- to clean
    up some scipy wiki content, to
    try and export it to a new site.
    David's also a role model in other ways --
    he's very calm and collected (unless
    he senses you've pushed the bozo button from
    some punditry vending machine - instead of
    understanding and engaging with the full complexity of some
    social or political issue)
    
        John was extremely kind and understanding -- 
    he wanted to invite & welcome me to
    code alongside other matplotlib developers,
    but there was no expectation.
    
      I got to hang out with John the 
    most at the PyData conference in
    Mountain View in late February. He was
    giving a matplotlib talk, and was seeking
    feedback on what to talk about --
    & how to do it. He's warm -- and always
    had this kind smile about him.
    
        After hanging out with John at PyData --
    this email arrived in my inbox
    

    Hey Paul, It was great seeing you again at pydata, and thanks for your help during the talk. We’ve decided that you could be a lot more productive in all your efforts to help ipython, mpl and others if you had a shiny new laptop, so I want to buy you one out of the mpl donations fund. If you spec out the machine you want and send me a link and details, and your preferred shipping address, I’ll order it for you and have it shipped to you. Pick a machine good enough that you can rely on it for a few years, because it looks like you get good use from these things! In other words, don’t feel compelled to be frugal on our behalf.  JDH

    Fernnado knew about the email -- & I was at
    a barbecue at his house -- to sort of
    celebrate an awesome week of lots of
    Python Giants in from out of town.
      Fernando was giddy -- "Have
    you checked your email?" -- with a
    twinkle in his eye "Let's go have you
    check your email right now" -- & he
    walked over to turn on his desktop machine.
    

        On the mailing lists -- I always tried to
    emulate John's approach -- helping everyone
    even if in the slightest manner.
    
    I was offered commit rights sort
    of out of the blue -- after sending
    a couple of pull requests.
    
        We are a community.
    We need to remember John, & keep
    remembering John -- for many, many,
    many years to come.
    
    I feel the urge to reach
    out to everyone I know & don't know.
    I'm desperate -- i think I've been that
    way since I was a little kid -- I
    remember having the same feelings when
    we were leaving Moscow -- a ten-year old,
    talking to friends and my teachers,
    many for the very last time.
    

    I am posting this, but it isn't finished.
    
    This is broken, half-finished, confused,
    necessarily so -- because there is no way
    to mend what we have lost. This
    is an expression of my current state --
    and if I don't let this out, it will just
    keep ricocheting around in my head for years
    to come.
    
        This is a first pass. This is me
    grieving. This will never be enough. This
    is just a start.
    

    videos of John Hunter's talks:

    matplotlib: Lessons from middle age. (Scipy 2012)

    Advanced Matplotlib Tutorial (PyData)

    SciPy 2009 - Advanced tutorial 3: Advanced topics in matplotlib

    (beginning) SampleDoc

    Scipy '09 Panel on Visualization tools

    Scipy '02 Core Projects update

    NIPS Workshop on Machine Learning Open Source Software (MLOSS)

    Fernando Perez and John Hunter

    Sept 2009: "some fun stories like 'Jeez, you guys have some crazy examples. I am surprised there isn't dolphins swimming around inside a sphere.' So now there is."

    permalink

« Page 3 / 6 »