<?xml version="1.0"?>
<rss version="2.0.">
  <channel>
    <title>Advogato blog for titus</title>
    <link>http://www.advogato.org/person/titus/</link>
    <description>Advogato blog for titus</description>
    <language>en-us</language>
    <generator>mod_virgule</generator>
    <pubDate>Wed, 14 May 2008 04:52:37 GMT</pubDate>
    <item>
      <pubDate>Mon, 12 May 2008 08:05:03 GMT</pubDate>
      <title>E-mail is getting *really* unreliable</title>
      <link>http://www.advogato.org/person/titus/diary.html?start=368</link>
      <guid>http://ivory.idyll.org/blog/may-08/email-is-getting-really-unreliable</guid>
      <description>&lt;div class="document"&gt;
&lt;p&gt;I've been hit by a few different e-mail-related problems over the last
few months, and it's becoming intensely frustrating.&lt;/p&gt;
&lt;p&gt;Some servers seem to randomly drop messages from me, for no obvious
reason; at least, people don't get one message and then do get
another, a day later.  gmail may be at the center of this but it's not
clear.  (Changing my public From: address to &lt;a class="reference" href="mailto:ctb&amp;#64;msu.edu" &gt;ctb&amp;#64;msu.edu&lt;/a&gt; may have
contributed to the lossage rate, but cannot be the only cause.)&lt;/p&gt;
&lt;p&gt;Yahoo at first decided to mark messages as spam, then drop messages,
and now likes me again.&lt;/p&gt;
&lt;p&gt;As I write, caltech.edu seems to be bitch-slapping a select subset of
my messages.  Either they're grey-listing and waiting to forward some
messages on, or they've dropped some messages entirely.&lt;/p&gt;
&lt;p&gt;My daily e-mail load has grown to the point where I appear to be
hand-deleting &lt;em&gt;real&lt;/em&gt; messages from my inbox when my eye gets them
confused with spam or automated notices.  I know of at least two
messages that I've deleted in the last month -- I found them in my
received-not-spam folder (where I save all incoming messages) but have
no recollection of having read them.  Before this month, I can't
recall having accidentally deleted two e-mails in the last &lt;em&gt;5 years&lt;/em&gt;.
And it's not like my spam filter has a high false negative rate: I
barely get any spam at all in my inbox.&lt;/p&gt;
&lt;p&gt;Now I'm trying to start sending messages to people in my lab, and some
of them are not responding or acknowledging the messages.  Maybe
they're not getting them.  Maybe they're out to lunch.  Maybe they
don't like me, or authority, or something.  I don't want to hassle
people who don't want to respond, but I also want to make sure they
got the $!%#$#$ message!  Ah well, I will be physically there soon...&lt;/p&gt;
&lt;p&gt;All of this goes to say that for a variety of reasons -- increasing
amounts of e-mail, increasing amount of SPAM e-mail, increasingly
random and annoying anti-spam measures implemented by the big inbox
providers -- e-mail has become unreliable enough that I have to think
about it.  Even worse, the number and variety of anti-spam measures in
play mean that neither I nor the receiver may have any ability to
affect the spam filter that is dropping e-mail (translation: I don't
know what to do to make things more reliable).&lt;/p&gt;
&lt;p&gt;Grr.&lt;/p&gt;
&lt;p&gt;I think the time is coming where a reputable SMTP forwarder could make
some $$; I'd be willing to pay a $ or $$ for a bonded SMTP provider!
Anything like that out there that actually works?&lt;/p&gt;
&lt;p&gt;--titus&lt;/p&gt;
&lt;p&gt;p.s. In a largely unrelated side note, the number of blog comment
spammers attempting to post to my blog continues to hit record highs
on a daily basis.  I've &lt;em&gt;never&lt;/em&gt; approved a spam comment -- yet they
continue to try.  It's mind-bogglingly stupid and it just goes to show
that stupid behavior will continue indefinitely if it's approximately
zero-cost to the commit-ee.   Grr x 2.&lt;/p&gt;
&lt;p&gt;So, err, drop me a line if you wrote a witty comment that didn't get
posted, and if I don't accidentally delete your e-mail I will approve
your comment.&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    <item>
      <pubDate>Fri, 9 May 2008 18:03:44 GMT</pubDate>
      <title>pygr gets some summer love</title>
      <link>http://www.advogato.org/person/titus/diary.html?start=367</link>
      <guid>http://ivory.idyll.org/blog/may-08/pygr-gets-some-summer-love</guid>
      <description>&lt;div class="document"&gt;
&lt;p&gt;(&lt;a class="reference" href="http://bioinformatics.ucla.edu/pygr/" &gt;pygr&lt;/a&gt; is a neat
bioinformatics framework in Python.)&lt;/p&gt;
&lt;p&gt;After some commenters on my last post seemed happy to hear that pygr
was the focus of some summer work, I realized I had only discussed the
pygr summer work in &lt;a class="reference" href="http://lists.idyll.org/pipermail/biology-in-python/2008-April/000306.html" &gt;a post to the biology-in-python list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Whoops.&lt;/p&gt;
&lt;p&gt;So, here's the scoop: not only is pygr the focus of &lt;a class="reference" href="http://code.google.com/soc/2008/psf/appinfo.html?csaid=B6BADB61050FB8F0" &gt;Rachel McCreary's
Google Summer of Code project&lt;/a&gt;,
but &lt;a class="reference" href="http://code.google.com/soc/2008/psf/appinfo.html?csaid=16FD71A42C4B7B" &gt;Jenny Qian will be using pygr to build an ENSEMBL interface&lt;/a&gt;,
also as part of the Google Summer of Code.&lt;/p&gt;
&lt;p&gt;That's not all!&lt;/p&gt;
&lt;p&gt;In addition to Rachel and Jenny (under the sterling mentorship of
Chris Lee, Robert Kirkpatrick, Namshin Kim, and myself) I have two MSU
students working with me over the summer, Alex Nolley and Marie
Buckner.  They'll both be working with pygr-related things, although
like Jenny their efforts may end up being more on ways to use pygr
than on pygr's code itself.&lt;/p&gt;
&lt;p&gt;I also have a grad student or two that may drop in on pygr, if only to
use it for something research-y.&lt;/p&gt;
&lt;p&gt;So all in all, pygr will get a lot of love this summer.  Hopefully we can
polish the code and documentation and tutorials to the point where the
learning curve is as minimal as it can get, and this fabulous package will
become readily available to many others...&lt;/p&gt;
&lt;p&gt;Why am I personally putting so much effort into pygr?  Well, I've been
using it more and more over the last few months, and (&lt;a class="reference" href="http://www.vetta.org/2008/05/scipy-the-embarrassing-way-to-code/" &gt;somewhat like
scipy&lt;/a&gt;)
it's transformed my work by turning annoyingly difficult data
organization problems into trivial Python transformations.  I can
literally throw together a custom genome browser in a matter of hours
-- I've implemented two or three already, for different projects --
and it has enabled several new research program.  pygr seems to be one
of those rare packages (kind of like Python itself) that is not only
functional and effective but presents a unified and coherent
intellectual interface.  pygr is the only good middleware layer I've
seen for sequence intertwingling in bioinformatics.  It's not that
mature yet, but it has serious promise, and I'm hoping to get in on
the ground floor, so to speak :).&lt;/p&gt;
&lt;p&gt;cheers,&lt;/p&gt;
&lt;p&gt;--titus&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    <item>
      <pubDate>Wed, 7 May 2008 22:05:07 GMT</pubDate>
      <title>Dear Lazyweb: JavaScript "imagemaps" and/or image subselection?</title>
      <link>http://www.advogato.org/person/titus/diary.html?start=366</link>
      <guid>http://ivory.idyll.org/blog/may-08/lazyweb-javascript-image-stuff</guid>
      <description>&lt;div class="document"&gt;
&lt;p&gt;Dear Lazyweb, help!&lt;/p&gt;
&lt;p&gt;I'm embarking on a number of summer projects in my &lt;a class="reference" href="http://ged.cse.msu.edu/" &gt;new lab at MSU&lt;/a&gt;, and several of them focus on using &lt;a class="reference" href="http://code.google.com/p/pygr" &gt;pygr&lt;/a&gt; to do cool genomic stuff.  In
particular, I'm planning to build a personal genome annotation system
that will let people run their own full genome Web sites and annotate
the genomes with private information such as Solexa data, cDNA/EST
projects, ChIP-seq, cis-regulatory reporter constructs, ncRNA
predictions, etc. etc.  (If you're interested in this sort of thing,
&lt;a class="reference" href="mailto:ctb&amp;#64;msu.edu" &gt;get in touch&lt;/a&gt; -- it will, of course, be open
source and open development, albeit in Python :)&lt;/p&gt;
&lt;p&gt;As I've been thinking more about how to do the display side of things,
I've been running headfirst into a serious lack of knowledge.  I would
like to make an interface that looks somewhat like your standard
genome browser/GMOD/UCSC interface, such as &lt;a class="reference" href="http://genome.ucsc.edu/cgi-bin/hgTracks?hgsid=107080583&amp;amp;clade=vertebrate&amp;amp;org=Chicken&amp;amp;db=galGal3&amp;amp;position=chr8%3A28%2C563%2C111-28%2C563%2C687&amp;amp;pix=620&amp;amp;Submit=submit&amp;amp;hgsid=107080583" &gt;this UCSC view of the
chicken genome&lt;/a&gt;.
I already have the basics of that view working; for example, see this
&lt;a class="reference" href="http://iorich.caltech.edu/~t/transfer/pygr-draw/doc/simple-example.html" &gt;simple example&lt;/a&gt;
and &lt;a class="reference" href="http://iorich.caltech.edu/~t/transfer/pygr-draw/doc/group-example.html" &gt;a group-feature example&lt;/a&gt;.
But I'd like to add more - a LOT more -- interactivity.&lt;/p&gt;
&lt;p&gt;Ideally I'd like to be able to draw simple objects (squares, rectangles,
lines) on some sort of canvas and then use JavaScript and AJAX to pop
up windows and display bits of information.  But I don't really know this
space of functionality very well.&lt;/p&gt;
&lt;p&gt;So I'm turning to the lazyweb.&lt;/p&gt;
&lt;p&gt;Are JavaScript+image maps the right way to go (for example, &lt;a class="reference" href="http://www.sbrady.com/hotsource/javascript/mapdis.html" &gt;this&lt;/a&gt;, &lt;a class="reference" href="http://www.w3schools.com/js/js_image_maps.asp" &gt;this&lt;/a&gt;, and &lt;a class="reference" href="http://www.webmonkey.com/webmonkey/98/29/index3a_page2.html?tw=programming" &gt;this&lt;/a&gt;)?
Do they work well with multiple browsers?  Or are there good JS
libraries for &lt;em&gt;drawing&lt;/em&gt; images on the fly in the browser?  Is SVG a
good thing to look at?  Were you stuck with this task, what would you use?&lt;/p&gt;
&lt;p&gt;The most important things for this project are, in order of importance:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;basic functionality (JS image maps seem fine for this)&lt;/li&gt;
&lt;li&gt;cross-browser functionality&lt;/li&gt;
&lt;li&gt;selection (e.g. &lt;a class="reference" href="http://www.gmod.org/wiki/index.php/RubberBandSelection" &gt;GMOD RubberBandSelection&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;flexibility: reordering and redrawing of images.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Your thoughts are much appreciated!  Please &lt;a class="reference" href="mailto:ctb&amp;#64;msu.edu" &gt;drop me a line&lt;/a&gt; or comment, whichever is most convenient.  I'll summarize the options.&lt;/p&gt;
&lt;p&gt;thanks,&lt;/p&gt;
&lt;p&gt;--titus&lt;/p&gt;
&lt;p&gt;p.s. I'm perfectly fine with &amp;quot;Google this, dumby!&amp;quot;  I just don't have much
in the way of google keyword knowledge in this area...&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    <item>
      <pubDate>Sun, 20 Apr 2008 20:07:25 GMT</pubDate>
      <title>Eating your own dogfood (but only eating half the bowl)</title>
      <link>http://www.advogato.org/person/titus/diary.html?start=365</link>
      <guid>http://ivory.idyll.org/blog/apr-08/eating-your-own-dogfood</guid>
      <description>&lt;div class="document"&gt;
&lt;p&gt;So I'm &lt;a class="reference" href="http://ivory.idyll.org/blog/mar-08/software-quality-death-spiral.html" &gt;pretty bullish on testing&lt;/a&gt;
for maintenance reasons.  It was nice to see how well it worked out
for me when a user recently reported a problem with &lt;a class="reference" href="http://cartwheel.idyll.org/" &gt;Cartwheel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is what happened: third-party package (LAGAN) that the user was running
through the Web interface depended on certain command-line behavior from
'sort'.  Now, I wasn't aware the the command-line arguments to sort were
still evolving, but apparently they are -- my latest Debian upgrade removed
some options (the '+1' behavior) in favor of '-k 1'.  In any case, I did
this big upgrade of many packages, and didn't realize that this third-party
program was now broken.  (More on that later.)&lt;/p&gt;
&lt;p&gt;The user reported weird results, so I went and verified that he'd set
everything up properly and that this was in fact a real problem.  Then
I ran the Cartwheel automated test suite.  Voila!  Problem was instantly
pinpointed in a reproducible manner.&lt;/p&gt;
&lt;p&gt;I fixed the program (editing Perl, ick), re-ran the tests, and then
re-ran the user's analyses.  Tada, done.&lt;/p&gt;
&lt;p&gt;OK, so, great, the tests pinpointed the error for me after the user had
found it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why did I have to wait for a user to report it?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Because I wasn't running the tests under continuous integration on my
compute server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why not?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Can't think of why.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What would you have done differently?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I would have made sure all my tests were passing on my compute server
after I upgraded the thing, i.e. not been a schmuck.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What have we learned?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tests are only useful if (first) you write them -- that's half the battle --
and (second) you run them.  Oops.&lt;/p&gt;
&lt;p&gt;More generally, it was fun to note that by putting a fairly high-level
functional test on the batch-processing backend, I discovered a bug
several levels down in my software stack -- a problem lying between a
third-party package and a system utility.  Unit tests wouldn't have
found this bug, unless the third-party package had them (don't think
so) &lt;em&gt;and&lt;/em&gt; I was running the third-party package unit tests (good
grief...)&lt;/p&gt;
&lt;p&gt;OK, back to work.&lt;/p&gt;
&lt;p&gt;--titus&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    <item>
      <pubDate>Sat, 19 Apr 2008 10:09:32 GMT</pubDate>
      <title>John Ringo is a caricature of a wingnut</title>
      <link>http://www.advogato.org/person/titus/diary.html?start=364</link>
      <guid>http://ivory.idyll.org/blog/apr-08/john-ringo-is-a-caricature</guid>
      <description>&lt;div class="document"&gt;
&lt;p&gt;I read a lot of total crap, and one of my recurring crap authors has
been John Ringo.  He's a total nutjob politically, but he writes good
battle scenes and is an enjoyable read once you cut through the
nonsense.  Still, I'm having a tough time getting through the opening
chapters of &lt;a class="reference" href="http://www.webscription.net/chapters/1416555536/1416555536_toc.htm" &gt;The Last Centurion&lt;/a&gt;.
In this book, Ringo constructs a near-future world where Hillary
Clinton is president, global &lt;em&gt;cooling&lt;/em&gt; is the problem, and the
chemicals from processed food and big farming are life saving.&lt;/p&gt;
&lt;p&gt;Let's take those one at a time.&lt;/p&gt;
&lt;p&gt;One of Ringo's favorite tropes is that the left, and the Clintons
especially, are what's wrong with America.  It's hard to convey the
dripping scorn with which he discusses these topics, but it involves a
lot of naughty words.  In this book, Hillary Clinton (or a straw woman
facsimile thereof) is president through the Big Chill and the
simultaneous deadly bird flu outbreak, and she makes every mistake
possible.  While Hillary Clinton is not my favorite politician, it's
worth noting that our current president (who can do little wrong in
Ringo's eyes) has &lt;em&gt;actually&lt;/em&gt; made almost every mistake possible, and
this makes Ringo's text unbearably difficult to read.  If Ringo is
hoping to even tell a good story, much less sway anyone's opinion, he'd
be better off with less in the way of textual histrionics.&lt;/p&gt;
&lt;p&gt;Another one of Ringo's tropes is that the global warming hypothesis is
nonsense.  Not only does he mention this frequently, but he literally
pauses in the middle of his books to deliver four page diatribes on
the subject.  In this latest book, Ringo makes the next big climate
change event a major solar COOLING, which has predictable effects on
the food supply. Now, I'm a scientist and a lefty, and I've even
worked on science relevant to climate change, so presumably (by
Ringo's criteria) I am unfit to comment, being moderately
knowledgeable.  But when your social commentary depends &lt;em&gt;entirely&lt;/em&gt; on
fiction, it loses any relevance and becomes a distraction.&lt;/p&gt;
&lt;p&gt;The most interesting novelty in this book (which presumably will
become another abortive series, to join the ranks of his other five
unfinished series?) is the device where American lives are saved by
having eaten so many processed foods.  As far as I can tell, the idea
is that eating processed foods conveys resistance to chicken flu, and
this leads to a dramatically greater survival rate in America.  I'm
not sure why this device is in the book, unless it's another imaginary
nail in Ringo's imaginary coffin of liberalism.  Whyever it's there,
it's entertainingly stupid -- there's plenty of evidence that weird,
random chemicals do weird, random things to your DNA, and that's one
reason why cancer is so prevalent.  There's no reason at all to
believe that these chemicals would somehow &amp;quot;cancel out&amp;quot; bird flu.  But
what do I know?  I'm just a molecular freakin' biologist...&lt;/p&gt;
&lt;p&gt;Combine all that with Ringo's inimitable writing style in which no
breasts are too big, no hero goes unfucked by multiple
(large-breasted) women, and no terrorist goes unpunished, and these
books are truly a piece of work.  I do &lt;em&gt;not&lt;/em&gt;, however, mean &amp;quot;of art&amp;quot;.
In fact, this last book is so outlandish that I'm actually becoming a
bit suspicious of Ringo's sincerity.  It's hard to read such complete
and utter crap without thinking that perhaps the author is secretly
making fun of the very viewpoints he is espousing.  But it's been
a consistent trend towards lunacy thus far, so I'm inclined to believe
that he's actually somewhat sincere.&lt;/p&gt;
&lt;p&gt;Anyway, here's my judgement: Ringo's latest book is masturbatory
fodder for hard right wingers, and it's becoming increasingly
difficult to enjoy his books if you're not actually lobotomized.
Luckily that ensures him an 18% market.&lt;/p&gt;
&lt;p&gt;--titus&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    <item>
      <pubDate>Sat, 19 Apr 2008 09:18:54 GMT</pubDate>
      <title>Threading and subprocess</title>
      <link>http://www.advogato.org/person/titus/diary.html?start=363</link>
      <guid>http://ivory.idyll.org/blog/apr-08/threading-and-subprocess</guid>
      <description>&lt;div class="document"&gt;
&lt;p&gt;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 why.&lt;/p&gt;
&lt;p&gt;The task at hand: use subprocess to run some command (say, 'ping') a
bunch of times.  Because the command is I/O bound, you want to run the
commands in parallel.  Should you use threads to do this?  Is it necessary
in order to achieve good performance?&lt;/p&gt;
&lt;p&gt;Well, consider these two examples ('common.py' is down at the bottom;
it just contains the list of IP addresses to ping, and a function to
call subprocess.Popen).&lt;/p&gt;
&lt;p&gt;nothread.py:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
from common import IP_LIST, do_ping

z = []
for i in range(0, len(IP_LIST)):
   p = do_ping(IP_LIST[i])
   z.append(p)

for p in z:
   p.wait()
&lt;/pre&gt;
&lt;p&gt;thread.py:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
import threading
from common import IP_LIST, do_ping

def run_do_ping(addr):
   p = do_ping(addr)
   p.wait()

###

# start all threads
z = []
for i in range(0, len(IP_LIST)):
   t = threading.Thread(target=run_do_ping, args=(IP_LIST[i],))
   t.start()
   z.append(t)

# wait for all threads to finish
for t in z:
   t.join()
&lt;/pre&gt;
&lt;p&gt;Both of these work fine, and in both cases are easily modifiable to
retrieve the output, exit status, etc. of the ping command.  (In the
threaded example you have to keep track of 'p' in 'run_do_ping' to
retrieve this kind of info, and I wanted to keep things as simple as
possible.)&lt;/p&gt;
&lt;p&gt;They also run in about the same amount of time, although the non-threaded
one is quicker by a few milliseconds for me.  I think this is because
thread starts &amp;amp; joins are extra overhead.&lt;/p&gt;
&lt;p&gt;The key misunderstanding in the discussion seems to have been that the
examples at hand were using subprocess.call, which &lt;strong&gt;blocks&lt;/strong&gt;
waiting for the subprocess to exit, i.e. equivalent to
using this code in nothread.py:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
for i in range(0, len(IP_LIST)):
   p = do_ping(IP_LIST[i])
   p.wait()
&lt;/pre&gt;
&lt;p&gt;Here the pings would execute serially rather than in parallel, with
the obvious performance problem :).  However, you can bypass this
effect of subprocess.call by using subprocess.Popen, which creates a
new process that executes in parallel with the calling process.&lt;/p&gt;
&lt;p&gt;So, for this simple use of subprocess -- running a shell command and
gathering the output -- which is &amp;quot;better&amp;quot;?  I think 'nothread.py' is
better because it is simpler, shorter, clearer, and less complicated.
Of course, as soon as you start doing more complicated stuff like
reading the streams of information coming out of the subprocess
commands, the threaded version may well have its advantages.  But
that's not the case here, I think.&lt;/p&gt;
&lt;p&gt;Comments welcome.&lt;/p&gt;
&lt;p&gt;--titus&lt;/p&gt;
&lt;p&gt;common.py:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
import subprocess

IP_LIST = [ '131.215.17.3',
            '131.215.17.4',
            '131.215.17.5',
            '131.215.17.16',
            '131.215.17.17',
            '131.215.17.18',
            '131.215.17.19',
            '131.215.17.24',
            '131.215.17.25',
            '131.215.17.31']

cmd_stub = 'ping -c 5 %s'

def do_ping(addr):
    cmd = cmd_stub % (addr,)
    return subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
&lt;/pre&gt;
&lt;/div&gt;
</description>
    </item>
    <item>
      <pubDate>Tue, 15 Apr 2008 18:03:34 GMT</pubDate>
      <title>Some new terminology?</title>
      <link>http://www.advogato.org/person/titus/diary.html?start=362</link>
      <guid>http://ivory.idyll.org/blog/apr-08/new-terminology</guid>
      <description>&lt;div class="document"&gt;
&lt;p&gt;In some discussions with a moderately new Python programmer who seems
to value complexity over simplicity, I may have coined a new term:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
&amp;quot;Penis size&amp;quot; style of programming -- the (mistaken) belief that the
more advanced programming language features you use, the more
impressive your code will look.
&lt;/pre&gt;
&lt;p&gt;I think it's a fair generalization to say that experienced programmers
value simplicity over complexity, all other things being equal.&lt;/p&gt;
&lt;p&gt;A search for &amp;quot;penis size programming&amp;quot; came up with &lt;a class="reference" href="http://freewareapp.com/penis-size-o-matic_download/" &gt;this link&lt;/a&gt;, which is
entertainingly apropos.&lt;/p&gt;
&lt;p&gt;--titus&lt;/p&gt;
&lt;p&gt;p.s. I originally used &amp;quot;dick size&amp;quot;, but now that I'm a professor, I have to
be decorous, right?&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    <item>
      <pubDate>Wed, 9 Apr 2008 08:03:22 GMT</pubDate>
      <title>Google Highly Open Participaton Contest -- another notch in the source code!</title>
      <link>http://www.advogato.org/person/titus/diary.html?start=361</link>
      <guid>http://ivory.idyll.org/blog/apr-08/ghop-scores-again</guid>
      <description>&lt;div class="document"&gt;
&lt;p&gt;Pavel Vinogradov &amp;lt;fastnix&amp;gt; has been keeping me updated on an issue he
discovered while testing &lt;a class="reference" href="http://goog-perftools.sourceforge.net/doc/tcmalloc.html" &gt;TCMalloc&lt;/a&gt; with
Python as a Google Highly Open Participation (GHOP) task, &lt;a class="reference" href="http://code.google.com/p/google-highly-open-participation-psf/issues/detail?id=105" &gt;task 105&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Briefly, Pavel discovered a situation in which replacing the Python
memory allocator with TCMalloc resulted in really bad performance.
The latest is that there appears to be a bug or gotcha in TCMalloc
with glibc, where TCMalloc does a poor job in cases where mremap can
be used by glibc.  The TCMalloc folk are going to look into it more, I
gather.  (See google-perftools thread &lt;a class="reference" href="http://groups.google.com/group/google-perftools/browse_thread/thread/4cc0f545c25caecc" &gt;here&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Anyway, this was a situation where we just threw the task at the
students to see if anything interesting would pop out -- not expecting
much of anything other than a learning experience for the student --
and yet through some simple-yet-dogged testing, Pavel really
contributed something.&lt;/p&gt;
&lt;p&gt;Awesome stuff!&lt;/p&gt;
&lt;p&gt;There have been several real success stories to GHOP.  I need to write them
down, sigh... my kingdom for some time :)&lt;/p&gt;
&lt;p&gt;--titus&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    <item>
      <pubDate>Tue, 8 Apr 2008 08:03:17 GMT</pubDate>
      <title>Google's AppEngine OneThousand</title>
      <link>http://www.advogato.org/person/titus/diary.html?start=360</link>
      <guid>http://ivory.idyll.org/blog/apr-08/freezing-your-ass-off-at-google-with-leslie-and-guido</guid>
      <description>&lt;div class="document"&gt;
&lt;p&gt;At Google Campfire One, v 2.0 -- introducing AppEngine.&lt;/p&gt;
&lt;p&gt;IT'S FREEZING.  The cider ran out.  Brr.&lt;/p&gt;
&lt;p&gt;Deploying Web apps is annoyingly difficult.  Technical hurdles, etc.
Need machines.  Blech.  Costly.&lt;/p&gt;
&lt;p&gt;AppEngine solves all these problems.  Runs web apps, handles app lifecycles,
apps are run on Google infrastructure can make use of GFS, auth etc. etc. etc.&lt;/p&gt;
&lt;p&gt;Components&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Scalable serving infrastructure&lt;/li&gt;
&lt;li&gt;Python runtime&lt;/li&gt;
&lt;li&gt;Soft Dev Kit&lt;/li&gt;
&lt;li&gt;Web-based admin console&lt;/li&gt;
&lt;li&gt;Data&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Config is in YAML, with mapping done by regexp.&lt;/p&gt;
&lt;p&gt;from google.appengine.ext import webapp, looks like Java to me.&lt;/p&gt;
&lt;p&gt;Naah, that was mean.  It's python.&lt;/p&gt;
&lt;p&gt;Oooh, WSGI built in.&lt;/p&gt;
&lt;p&gt;def get, def post -- looks like web.py.  why do people do that?&lt;/p&gt;
&lt;p&gt;Using introspection, building SQL-like GQL, to drop stuff into/suck
stuff out of database with proper names.&lt;/p&gt;
&lt;p&gt;Django templates.&lt;/p&gt;
&lt;p&gt;Single-command deployment.&lt;/p&gt;
&lt;p&gt;Scalable serving infrastructure: when app pushed, pushed to multiple fault
tolerant servers.  Any one may fail, but request will always go through.
THE ROADS MUST ROLL.&lt;/p&gt;
&lt;p&gt;All Python runtime and many third-party libraries available.  (How do they
deal with security?  What about SQL and ORMs?)&lt;/p&gt;
&lt;p&gt;SDK: releasing for Linux etc.&lt;/p&gt;
&lt;p&gt;Web-based admin console.  Standard stuff, stats collected in
&amp;quot;near-real time&amp;quot;.&lt;/p&gt;
&lt;p&gt;Data store.  BigTable. Yah.  Horizontally distributed fault-tolerant system.&lt;/p&gt;
&lt;p&gt;No joins in GQL?!  Rationale: joins may need to work across computers and
individual ram capacity.&lt;/p&gt;
&lt;p&gt;Send e-mail, make HTTP reqs, auth with Google accounts, use a variety of
frameworks.&lt;/p&gt;
&lt;p&gt;Went to get cider, they replenished.  There are also meatballs wrapped in
dough (!?!)  It is still FREEZING.&lt;/p&gt;
&lt;p&gt;Guido gets up.  He's on the AppEngine team.&lt;/p&gt;
&lt;p&gt;All about making tools for developers.  But hates root password.  Thinks
AppEngine solves this.&lt;/p&gt;
&lt;p&gt;&amp;quot;First time Google lets other people run stuff on their servers.&amp;quot;&lt;/p&gt;
&lt;p&gt;Isn't this a support nightmare?  Software versions etc??  Well, can upload
your own frameworks.&lt;/p&gt;
&lt;p&gt;Stdlib emasculated in three ways: writing to the file system is forebidden;
cannot talk directly to the network (urlfetch &amp;amp; mail sending API); no
threads (chuckle, I think GvR not so secretly hates threads).&lt;/p&gt;
&lt;p&gt;Python is not the only language (you heard it from Guido).  Perl?  COBOL?
Assembly?&lt;/p&gt;
&lt;p&gt;Stuff about admin infrastructure.&lt;/p&gt;
&lt;p&gt;Lots of nice error logging/tracking stuff.&lt;/p&gt;
&lt;p&gt;Data viewer.  Interactive query.  Nifty.  (Hmm, how do you upload bulks of
data??)&lt;/p&gt;
&lt;p&gt;Version control built in. Yay.&lt;/p&gt;
&lt;p&gt;Is testing built in???&lt;/p&gt;
&lt;p&gt;Adding a domain...&lt;/p&gt;
&lt;p&gt;Host limits: 5mn page views a month for a well written application is free.&lt;/p&gt;
&lt;p&gt;Over and out.  I'm freezing.  Still.&lt;/p&gt;
&lt;p&gt;--titus&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    <item>
      <pubDate>Sat, 5 Apr 2008 01:03:15 GMT</pubDate>
      <title>2008 Summer Internship at Disney Animation</title>
      <link>http://www.advogato.org/person/titus/diary.html?start=359</link>
      <guid>http://ivory.idyll.org/blog/apr-08/disney-intern</guid>
      <description>&lt;div class="document"&gt;
&lt;p&gt;Please send this on to anyone who might be interested...&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;Disney Animation has an opening for a summer intern to work on a testing
project under the supervision of Paul Hildebrandt and Dr. C. Titus Brown.  The
ideal candidate will have experience with a dynamic language supporting
introspection (Python preferred) as well as experience developing unit,
functional, and regression tests, but the ability to learn quickly is the only
requirement.  The work will consist of building a new testing tool for aiding
test automation on large existing code bases.  We expect to release the tool
under an Open Source license.&lt;/p&gt;
&lt;p&gt;Please send your CV and a short personal statement to
&lt;a class="reference" href="mailto:da-testing-2008&amp;#64;idyll.org" &gt;da-testing-2008&amp;#64;idyll.org&lt;/a&gt;, c/o Paul Hildebrandt and C. Titus Brown.&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;BA/BS requested, MA or PhD in-progress desired.&lt;/li&gt;
&lt;li&gt;Housing stipend provided; competitive hourly wage.&lt;/li&gt;
&lt;li&gt;2 months commitment minimum, 3 months preferred.&lt;/li&gt;
&lt;li&gt;Opportunity for follow-on work or continued employment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Disney Animation is located in Burbank, CA.&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;I'll post what I can of the specific project proposal when I have a cleaner version.&lt;/p&gt;
&lt;p&gt;--titus&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
  </channel>
</rss>
