1. Taking grad students to PyCon

    I am still up at PyCon 2015 in Montreal, and most of my lab is here with me.

    On Saturday, I told Terry Peppers and some others that PyCon had been one of my (limited) lifelines to (limited) sanity during my early tenure-track years. Whenever I was in danger of …

    read more

    There are comments.

  2. My 2013 PyCon talk: Awesome Big Data Algorithms

    Schedule link

    Description

    Random algorithms and probabilistic data structures are algorithmically efficient and can provide shockingly good practical results. I will give a practical introduction, with live demos and bad jokes, to this fascinating algorithmic niche. I will conclude with some discussions of how our group has applied this to …

    read more

    There are comments.

  3. Assembling the heck out of soil - paper posted

    We just posted yet another pre-submission paper to arXiv.org:

    Assembling large, complex environmental metagenomes

    Authors: Adina Chuang Howe, Janet Jansson, Stephanie A. Malfatti, Susannah Tringe, James M. Tiedje, and C. Titus Brown

    arXiv link

    Paper repository on github

    Abstract:

    The large volumes of sequencing data required to deeply sample …
    read more

    There are comments.

  4. Assembly artifacts paper posted

    We just posted another pre-submission paper to arXiv.org:

    Illumina Sequencing Artifacts Revealed by Connectivity Analysis of Metagenomic Datasets

    Authors: Adina Chuang Howe, Jason Pell, Rosangela Canino-Koning, Rachel Mackelprang, Susannah Tringe, Janet Jansson, James M. Tiedje, and C. Titus Brown

    arXiv link

    Paper repository on github

    Abstract:

    Sequencing errors and …
    read more

    There are comments.

  5. Welcome to my new blog!

    I've just moved my blog over to Pelican, a static blog generator that takes in reStructuredText and spits out, well, this! I'm now using Disqus for commenting, too.

    The main motivations for the move (apart from slightly better theming) were to escape dynamic-blog-land in favor of static-blog-land, while enabling a …

    read more

    There are comments.

  6. Some early experience in teaching using ipython notebook

    As part of the 2012 Analyzing Next-Generation Sequencing Data course, I've been trying out ipython notebook for the tutorials.

    In previous years, our tutorials all looked like this: Short read assembly with Velvet -- basically, reStructuredText files integrated with Sphinx. This had a lot of advantages, including Googleability and simplicity; but …

    read more

    There are comments.

  7. Trying out 'cram'

    I desperately need something to run and test things at the command line, both for course documentation (think "doctest" but with shell prompts) and for script testing (as part of scientific pipelines). At the 2011 testing-in-python BoF, Augie showed us cram, which is the mercurial project's internal test code ripped …

    read more

    There are comments.

  8. A memory efficient way to remove low-abundance k-mers from large (metagenomic?) DNA data sets

    I've spent the last few weeks working on a simple solution to a challenging problem in DNA sequence assembly, and I think we've got a nice simple theoretical solution with an actual implementation. I'd be interested in comments!

    Introduction

    Briefly, the algorithmic challenge is this:

    We have a bunch of …

    read more

    There are comments.

  9. Course announcement: Analyzing Next-Generation Sequencing Data

    Analyzing Next-Generation Sequencing Data

    May 31 - June 11th, 2010

    Kellogg Biological Station, Michigan State University

    CSE 891 s431 / MMG 890 s433, 2 cr

    Applications are due by midnight EST, April 9th, 2010.

    Course sponsor: Gene Expression in Disease and Development Focus Group at Michigan State University.

    Instructors: Dr. C. Titus …

    read more

    There are comments.

  10. What's with the goat?

    A new meme was born at PyCon 2010: The Testing Goat.

    Or, "Be Stubborn. Obey the Goat."

    The goat actually emerged from the Testing In Python Birds of a Feather session at PyCon, where Terry Peppers used slides full of goat in his introduction. This was apparently an overreaction to …

    read more

    There are comments.

  11. Managing student expectations for open-source projects

    On the heels of my aggressive competence post, about (among other things) my failure to outline my expectations for students, I've started putting together a page to help manage student expectations for the pony-build project, which is participating in the Undergraduate Capstone Open-Source Projects (UCOSP) course this term.

    (Please comment …

    read more

    There are comments.

  12. A Tale of a Bug

    or, "those python-dev people are awesome."

    My experience with the Python bug tracker has been pretty sparse and largely limited to some of the eternaissues like "make HTMLParser deal with even more broken HTML" that never really get resolved because they're not very important and don't have a champion. So …

    read more

    There are comments.

  13. Lazyweb query: CloudStore (or KosmosFS)

    Does anyone have any experience with CloudStore, formerly known as KosmosFS? From http://en.wikipedia.org/wiki/CloudStore:

    CloudStore (KFS, previously Kosmosfs) is Kosmix's C++ implementation of
    Google File System. ... CloudStore supports incremental scalability,
    replication, checksumming for data integrity, client side fail-over and access
    from C++, Java and Python.
    

    The …

    read more

    There are comments.

  14. Diversity in a Nutshell

    Since a few people have asked, here's a rough guide to the diversity discussion. No specifics allowed.

    1. diversity list created to (among other things) ponder an official diversity statement for Python. List is closed-archive but open for general subscription.

    2. Various diversity list discussions become heated. Some people (including …

    read more

    There are comments.

  15. GHOP to run again; HELP.

    The contest formally known as GHOP is going to run again this fall, and we need your help.

    Yes, you. YOU, over there in the corner. Stop avoiding this post!

    GHOP, for those of you who don't remember or weren't around 2 years ago, was the very successful pilot sister …

    read more

    There are comments.

  16. Buggy Python code?

    I'm looking for examples of frustratingly simple-yet-wrong Python code, suitable for an undergrad class to debug. I'd prefer things that don't rely on tricky features of Python (like shared list references), but rather code where subtly bad logic or program flow leads to bad behavior.

    Comment below, or e-mail me …

    read more

    There are comments.

  17. Success, at last!

    For only the second time (out of many tries) I managed to smoke some salmon and trout so that it was not overcooked and dry as a bone. Conclusion? I think my smoker thermometer is about 50 deg F off of the true "on grill" temperature, probably because it's about …

    read more

    There are comments.

  18. Upgrading PlanetPlanet.

    OK Folks, I know that planet.python.org and planetpython.org underwent a merger, and during the merger a new, or patched, or somehow upgraded version of planet went into effect on both. However, I cannot find a link to the info post any more.

    I would like to put …

    read more

    There are comments.

  19. Easily Accessible Web-Based Tools For Analyzing Next-Generation Sequencing Data From Agricultural Animals

    Just submitted this on Thursday:

    Next generation sequencers are beginning to impact agricultural biology. Over the next few years, next generation sequencing will produce incredibly large datasets that will address structural (e.g., SNPs, CNVs, indels, methylation, translocations) and functional (e.g., RNA expression, transcription factor binding sites) variation in …
    read more

    There are comments.

  20. Python in the humanities?

    I'm writing some proposals to expand support for Python infrastructure (think cross-platform build and test farms a la Snakebite) and for the Mellon Foundation application, I'd like to find out how Python is being used in the humanities. I found NLTK, the Natural Language Toolkit; what else is big?

    thanks …

    read more

    There are comments.

  21. Software testing in science

    As part of a CiSE submission I'm working on, I interviewed the lead developer on a scientific software package today. This software package is mainly used for evolutionary studies, and has a small but devoted following - ~6 developers and ~12 users locally, plus a few dozen users outside of MSU …

    read more

    There are comments.

  22. Open Source is like a mistress

    Open source coding is like a not-so-demanding mistress: I work on it at night, surreptitiously, after my wife and daughter are asleep. twill and figleaf are like bastard children, who only get attention when I can spare it from my "real" family (my teaching, research or my actual family, depending …

    read more

    There are comments.

  23. Twill lives!

    One of the advantages of this year's PyCon was that it was (again) held in Chicago, the home town of Leapfrog Online. Since they use twill quite a bit, and were bothered by some of the poor design decisions and bugginess, they were keen to get together with me to …

    read more

    There are comments.

  24. Pursuing simplicity

    John Gall apparently said:

    A complex system that works is invariably found to have evolved from a simple system that worked. The inverse proposition also appears to be true: A complex system designed from scratch never works and cannot be made to work. You have to start over, beginning with …
    read more

    There are comments.

  25. Twitter Ho!

    OK, I'm going to try out twitter for the first time, in order to see if it works out at PyCon for keeping track of what's going on and letting people know what I'm up to. I guess you have to e-mail me to get in touch with me, though …

    read more

    There are comments.

  26. What's a good Python code base?

    A friend asks,

    i'm going to be recoding <x> from scratch starting next week, in python.
    what codebase would you recommend as good to model after?
    

    Any thoughts on a well-formed, reasonably sized (yet not huge), and simple Python code base?

    There have to be some examples somewhere! I'd suggest …

    read more

    There are comments.

  27. PyCon review process

    We're going through the PyCon '09 review process, and participating in the process has been pretty interesting. (I joined the Program Committee in large part because I was told to put up or shut up after I critiqued PyCon '08. Ahh, the open source world... where you're encouraged to go …

    read more

    There are comments.

  28. Python is a ... little language?

    Here at MSU, we just had a 40th anniversary celebration of the Computer Science department. As it happens, Carl Page (Sr.) was a founding member of CSE at MSU, and so his son, Carl Page (Jr.) came and participated in a panel. In response to my question about what we …

    read more

    There are comments.

  29. Python for Intro CS?

    I'm surprised I haven't seen this on planetpython yet...

    ...an emerging consensus in the scripting community holds that Python is the right solution for freshman programming. Ruby would also be a defensible choice.

    (emphasis mine). Originally found via Lambda the Ultimate, and also passed onto me by Rich Enbody.

    In …

    read more

    There are comments.

  30. Helping Python

    Recently the question came up: suppose you wanted to give enthusiastic people some guidance on how to help work on Python. What suggestions do you have? Surely there's a Web page on this!

    Well, no: a few quick Google searches led me to discover that "contributing to Python" was answered …

    read more

    There are comments.

  31. Serving XML-RPC over HTTPS with Python

    We've been talking about how to manage pygr resources remotely via the existing XML-RPC interface, and for that HTTPS is a requirement. I offered to track down the code necessary for running an XML-RPC server over HTTPS. Here's what I found:

    It turns out that while the Python stdlib supports …
    read more

    There are comments.

  32. Threading and subprocess

    I'm having a long-running discussion with some people about threading and why using threads with simple subprocess calls is almost certainly an overcomplicated (== BAD) use of threads. Everyone seems to think I'm wrong (at least, there's either deafening silence or straight out argument ;) and I think I finally figured out …

    read more

    There are comments.

  33. Some new terminology?

    In some discussions with a moderately new Python programmer who seems to value complexity over simplicity, I may have coined a new term:

    "Penis size" style of programming -- the (mistaken) belief that the
    more advanced programming language features you use, the more
    impressive your code will look.
    

    I think it's …

    read more

    There are comments.

  34. Google Highly Open Participaton Contest -- another notch in the source code!

    Pavel Vinogradov <fastnix> has been keeping me updated on an issue he discovered while testing TCMalloc with Python as a Google Highly Open Participation (GHOP) task, task 105.

    Briefly, Pavel discovered a situation in which replacing the Python memory allocator with TCMalloc resulted in really bad performance. The latest is …

    read more

    There are comments.

  35. Google's AppEngine OneThousand

    At Google Campfire One, v 2.0 -- introducing AppEngine.

    IT'S FREEZING. The cider ran out. Brr.

    Deploying Web apps is annoyingly difficult. Technical hurdles, etc. Need machines. Blech. Costly.

    AppEngine solves all these problems. Runs web apps, handles app lifecycles, apps are run on Google infrastructure can make use of …

    read more

    There are comments.

  36. Yahoo is bouncing my mail server's e-mail.

    On top of dreamhost dropping off the 'net just when I posted a bunch of screencasts... our socal-piggies meeting nearly got whacked because this month's organizer uses Yahoo, and most of the messages going through my mail server (which hosts the mailing list) were filed as "spam".

    Now Yahoo is …

    read more

    There are comments.

  37. PyCon Tip of the Day

    I'm at PyCon, and I have a tip for people: don't stay at the same hotel as everyone else.

    My hotel room Internet connection is great, perhaps in part because I'm not sharing it with the rest of the PyCon attendees! (Plus it's free -- the DoubleTree wireless Internet doesn't charge …

    read more

    There are comments.

  38. Where are the Zope tutorials?

    I've been a hater of Zope (2) for a while, but I hear great things about Zope 3. I also know that the Zope community contains some of the smartest folks in Python, so I'm sure Zope 3 is worth hearing about.

    So I thought to myself, maybe a 3 …

    read more

    There are comments.

  39. Useless 'net arguments

    The blognet is full of people posting their own opinions, and that's a good thing. What is a little less supportable is flawed argumentation.

    I recently spent some time discussion a post about software engineering; I was trying to figure out why the author thought what he did. The annoying …

    read more

    There are comments.

  40. Building test fixtures for PostgreSQL

    I'm having trouble with some tests of a PostgreSQL-based system. Briefly, I have a set of functional tests that

    • create a new database
    • populate it with a data model
    • run a Web server (in-process)
    • test the integrated Web server - database functionality

    The tests are now slow enough that I'm averse …

    read more

    There are comments.

  41. Dear Lazyweb: Config file guidelines?

    Tracy recently asked me if there were any good guidelines about how to write configuration files -- not coding-level guidelines, but guidelines on structure and content.

    I was unable to come up with anything: my Google-fu failed me, and my DevonThink database was silent (although it did have some nice testing …

    read more

    There are comments.

  42. Conversions between classes in Python

    My future colleague, Bill Punch at MSU, is teaching Python to intro CS students. He asks (slightly edited):


    In C++, you can write multiple constructors, each one taking a different type and/or number of arguments. Let's say we are writing a RationalNumber class. I could write 2 constructors:

    class …
    read more

    There are comments.

  43. Coming up with GHOP tasks at your Python Interest Group meetings

    If anyone is having a Python Interest Group meeting this month, please consider devoting 15-30 minutes to coming up with random task ideas for the Google Highly Open Participation Contest.

    Briefly,

    • tasks must involve Python and Open Source;
    • non-core pet projects are welcome;
    • building screencasts, updating documentation, and adding unit …
    read more

    There are comments.

  44. Two entertaining quotes

    I'm going through some of my saved up e-mail from the last few months, and found these two gems.

    Noah Gift on grokking threads, from the testing-in-python list:

    Trying to understand what massive pools of threads that spawn other
    massive spools of threads, that spawn other massive pools of threads …
    read more

    There are comments.

  45. Projects for people new to Python

    Hi all,

    I need to find some useful projects for new, young contributors, especially in the area of 3rd party packages; we've been thinking about things like porting 3rd party packages to Py3K, adding tests to existing projects, and providing Windows binary eggs for various packages. Everything would be open …

    read more

    There are comments.

  46. Lesson of the day

    If you use sys.settrace to set a tracing function, and that function prints to sys.stdout`, then don't ever trash ``sys.stdout, even briefly. You will raise an invisible exception and your trace function will be removed.

    (I don't know precisely what is supposed to happen when a trace …

    read more

    There are comments.

  47. Yes, Software Is Hard

    I haven't seen Kyle Wilson's article, Software is Hard, making the rounds yet... worth reading!

    --titus


    Legacy Comments

    Posted by Noah Gift on 2007-10-03 at 08:15.

    Great article, at least it is a comfort that some people admit it is
    hard and that "software is hard" is becoming more …
    read more

    There are comments.

  48. Writing Code That Doesn't Suck

    Note: this is ultimately intended for the biology-in-python Wiki at http://bio.scipy.org/. I will release it under a CC license, so please feel free to use it for your own site! --titus

    Here are some prescriptions for writing Python code that other Python programmers will find more usable …

    read more

    There are comments.

  49. A disappointing SoC experience

    I was the official mentor for a Google Summer of Code student this year -- Martin van Loewis was "technical mentor" -- and I found it to be a disappointing experience. At the beginning, I felt guilty about not being more on the ball about pushing the student to do more work …

    read more

    There are comments.

  50. SciPy '07: General Report

    Last week, SciPy 2007 came to Caltech. Unfortunately, I wasn't able to attend many of the talks because I was busy with lab work and other deadlines, and because SciPy was held immediately upstairs from my lab I could just duck out to go back to work. However, I did …

    read more

    There are comments.

  51. Commenting on posts

    I wanted to write a comment on timing unittests, but that blog does not allow anonymous comments and there is no obvious place to e-mail the author.

    Bummer.

    (The short version of my comment is that getting the basic data out with something like nose is trivial; see my pinocchio …

    read more

    There are comments.

  52. Faculty programming contest?

    Does anyone know if there are any faculty programming contests out there?

    It'd be fun, and I can't imagine that the competition would be as tough as the student programming contests probably are ;).

    --titus


    Legacy Comments

    Posted by jt on 2007-06-22 at 19:56.

    Um... faculty members... programming? You lost …
    read more

    There are comments.

  53. Seen on the agile-testing list

    Recently seen on a list (with a nasty archival system that I don't want to link to):

    "Don't write a test plan. Instead, test."
    
                 -- Bret Pettichord
    

    Need I say more?

    Probably.

    One of the most important tenets of agility (<-- little 'a' ;), in my opinion, is to not overthink. Unless you're …

    read more

    There are comments.

  54. Array permutation in Python

    Just saw this, in-place permutation (of a Java array, in this case).

    In Python, if you ignore the battery that's included (random.shuffle) you have this:

    import random
    l = range(0, 20) # array to permute
    
    for j in range(1, len(l)):
       k = random.randint(0, j)
       l[j], l …
    read more

    There are comments.

  55. Looking for a Django Reader

    I've just finished the last rough draft of a short e-book, An Intro to Testing Web apps with twill and Selenium. The book has four sections:

    1. Introduction
    2. twill intro
    3. Selenium intro
    4. Testing an app with twill and Selenium

    The "app" being tested in #4 is just the very simple poll …

    read more

    There are comments.

  56. A new BLAST parser

    I spent the weekend hacking out a BLAST parsing package with pyparsing.

    BLAST is a really common bioinformatics tool used to search large-ish sequence databases, and the NCBI BLAST program is probably the single most heavily used program in bioinformatics by a long shot. Unfortunately, the NCBI folk have a …

    read more

    There are comments.

  57. Strangling Your Code and Growing Your Test Harness: The 9 Phases of Building Automated Tests Into Legacy Code

    I'm in the early throes of building tests into my Cartwheel project. Cartwheel was one of the two projects that inspired my Web testing project, twill, so naturally I'm happy to finally be putting twill to good use in my own projects. Naturally the transition from building tools for building …

    read more

    There are comments.

  58. PyCon '07 Talk -- source code

    I've put together a brief discussion, with links to the source code, surrounding the demos I did at PyCon '07 during my testing tools talk. Here's a brief TOC:

    # Demo 1: Testing CherryPy
    # Demo 2: Testing CherryPy without exec'ing a process
    # Demo 3: Basic code coverage analysis with figleaf
    # Demo …
    read more

    There are comments.

  59. PyCon travel is cursed!

    Last year, Grig and I flew down to Dallas together to attend PyCon. I don't recall the exact problem, but for some reason the plane didn't go and we ended up flying through Houston and missing our original flight to Dallas. (We did have some unreasonably yummy BBQ in Houston …

    read more

    There are comments.

  60. PyCon Web Panel Thoughts

    First, let me mention that I've recruited Duncan McGreggor to the panel to talk about twisted.web and Nevow. That makes it a real party! In random order, we now have:

    • Zope: Jim Fulton
    • Pylons: Ben Bangert
    • Django: Adrian Holovaty
    • CherryPy: Robert Brewer
    • TurboGears: Kevin Dangoor
    • pyjamas: James Tauber
    • twisted …
    read more

    There are comments.

  61. The PyCon Web Panel

    So, I'm the organizer/moderator of the PyCon Web Panel. This will be a forum for maintainers of many of the main Python Web frameworks -- Jim Fulton/Zope, Ben Bangert/Pylons, Adrian Holovaty/Django, Robert Brewer/CherryPy, and Kevin Dangoor/TurboGears -- to discuss their take on Python, the Web, and …

    read more

    There are comments.

  62. MSU Position

    Just a short note to say that I've taken a faculty position at Michigan State University, in Lansing, Michigan. The position is split 65%/35% between the Computer Science and Microbiology & Molecular Genetics departments, and I expect to be working on a fairly wide range of problems. My computational "focus …

    read more

    There are comments.

  63. GalCon Strategy Guide

    I just wrote a small GalCon strategy guide, available here. Comments welcome.

    --titus


    Legacy Comments

    Posted by Brian Dorsey on 2007-01-05 at 13:24.

    I think we should play some GalCon at PyCon this year! (Your earlier
    post about GalCon got me completely addicted.)    Take care,    -Brian
    

    Posted by Titus …

    read more

    There are comments.

  64. Done!

    Done. DONE. done. Done done done done done.

    I defended Sep 5th. That went well.

    Unfortunately I had lots of revisions to do.

    That is finally finished: everyone signed off on the revisions.

    If I don't officially have my nigh-irrevocable PhD by the new year, it will be because of …

    read more

    There are comments.

  65. Galcon

    Over the last week, I've spent far too much time playing Galcon, an addictive game developed by Phil Hassey using Pygame and other tools.

    In Galcon, you are a general out for conquest. You start with one or a few planets that produce fighters, and you're pitted against "independent" planets …

    read more

    There are comments.

  66. PyCon talk & Web panel accepted

    So, it looks like I will be giving a talk on twill, scotch, and figleaf at PyCon! One of the reviewers said something very nice, albeit probably unjustified; to quote:

    ...twill is more or less Py web-developer 101 at this point, so a talk
    about it should be enlightening.
    

    Hmm …

    read more

    There are comments.

  67. Learning Python as a CS Professor

    Here's a (slightly edited) message from Bill Punch, a professor at MSU who is hoping to transition their Intro CS class over to Python. I would appreciate your thoughts and comments, both on his questions and my responses! (I do have permission to post it, in case you're wondering. ;)

    (Just …

    read more

    There are comments.

  68. Testing is hard.

    I spent the better part of today refitting Cartwheel for testing. Cartwheel is a bioinformatics framework that is used by a few hundred people; it's mostly a database-backed Web site, with a compute server queueing system tacked on.

    Cartwheel is one of the two sites that got me interested in …

    read more

    There are comments.

  69. Some advice on niche OSS projects

    A local friend asked for advice on her OSS project, because her boss is questioning the value of making things OSS. Here's my rambling reply, preserved for posterity:

    There are several de facto models of open source at this level (the
    small niche projects level, that is).
    
    The first is …
    read more

    There are comments.

  70. My final Web Panel proposal (submitted)

    I'll edit http://us.pycon.org/TX2007/WebFrameworksPanel as I update things, but here's the proposal I submitted:

    Frameworks:
    • Zope (?)
    • CherryPy (Robert Brewer)
    • TurboGears (Kevin Dangoor?)
    • Django (Adrian Holovarty?)
    • Pylons (Ben Bangert?
    • Quixote (Neil?)
    • Twisted web (?)
    • web.py (Aaron Swartz?)
    2 minute presentation by each representative, introducing:
    • point of framework …
    read more

    There are comments.

  71. Spammers are funny.

    So, I wrote a custom plugin called 'ocomments' that uses an SQLAlchemy- based database API to assign cookies to users who make comments. That way I can control who has automatic posting access (anyone who posts a sensible message, basically) and who doesn't. I can also toggle comment visibility on …

    read more

    There are comments.

  72. E-mail notification via Jabber/iChat

    A simple program to get pinged whenever you get new e-mail:

    #! /usr/bin/env python
    import sys, email
    from pyxmpp.jid import JID
    from pyxmpp.jabber.simple import send_message
    
    inp = sys.stdin.read()
    message = email.message_from_string(inp)
    
    jid = 'someid@xmpp.us'
    password, recpt = 'XXXXX', 'otherid@xmpp.us' …
    read more

    There are comments.

  73. Chairing a Web Panel at PyCon

    After learning from Jeff Rush that no one had volunteered (yet) to organize a panel on Web technologies, I stepped up to the plate. I've also submitted a talk proposal about twill/scotch/figleaf and (with Grig) I'm going to submit a proposal for a testing tutorial, so attendees may …

    read more

    There are comments.

  74. corebio proceedeth

    corebio, the joint effort by a junta of California bioinformaticians to replace BioPython with something we like better, is proceeding interestingly. So far we have discussed the following issues:

    • what license? (BSD)
    • what focus? (sequence manipulation & parsing)
    • what about binary extensions? (focus on API, provide fast implementations where appropriate, but …
    read more

    There are comments.

  75. RSS feeds are up.

    I fixed a problem in the tagging plugin (which was really a bug in the way I was entering tags, sigh) so now I can provide RSS feeds based on my tags. This is important because I want to continue being syndicated on planetpython/planet.python, but I don't want …

    read more

    There are comments.

  76. « Page 2 / 38 »

    Proudly powered by pelican, which uses python.

    The theme is subtlely modified from one by Smashing Magazine, thanks!

    For more about this blog's author, see the main site or the lab site

    While the author is employed by the University of California, Davis, his opinions are his own and almost certainly bear no resemblance to what UC Davis's official opinion would be, had they any.