tag:blogger.com,1999:blog-59648168046235888502024-03-15T00:31:25.582-07:00Digithead's Lab NotebookMad science in silico...Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.comBlogger277125tag:blogger.com,1999:blog-5964816804623588850.post-49648473160533995502019-07-11T19:55:00.002-07:002019-07-18T21:01:39.073-07:00The New Digithead's Lab Notebook<span style="color: #444444;"><br /></span>
<span style="color: #444444;"><br /></span>
<span style="color: #444444;"><br /></span>
<br />
<span style="color: #444444; font-family: inherit;">For more state-of-the-art technological insight<span style="background-color: #fdfdfd;">...</span></span><br />
<span style="color: #444444; font-family: inherit;"><span style="background-color: #fdfdfd; font-size: 15px;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-9evFUhzMf-9v8_S8J60xqVuB41wUXuqRhUCMl2YwuBkIFUJEQudoVg2h3fo9efDCGFyTnUxTgeQZ9EuNu3ZiVkQMpkDQ2aMJOadOOl7ZH3KCEV43qRGrGQz4yEDx4JixjiCud48AROAl/s1600/floor_o_scope_med.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="381" data-original-width="640" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-9evFUhzMf-9v8_S8J60xqVuB41wUXuqRhUCMl2YwuBkIFUJEQudoVg2h3fo9efDCGFyTnUxTgeQZ9EuNu3ZiVkQMpkDQ2aMJOadOOl7ZH3KCEV43qRGrGQz4yEDx4JixjiCud48AROAl/s320/floor_o_scope_med.jpeg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="background-color: #fdfdfd; color: #444444; font-size: 15px;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="background-color: #fdfdfd; color: #444444;">head on over to...</span></div>
<br />
<h2>
<a href="https://cbare.github.io/" target="_blank">The New Digithead's Lab Notebook</a></h2>
<div>
<br />
<br />
<br />
<br />
<br />
[<a href="http://beagle.applearchives.com/the_graphics/beagle_bros_graphics_4/floor-o-scope.html" rel="nofollow" target="_blank">image source</a>]</div>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-59128287106426759262017-06-05T10:16:00.001-07:002017-08-23T17:27:18.283-07:00Postgres lockup on ALTER TABLE<p>You can learn a lot when you break things.</p>
<p>I had a bit of fun and panic with Postgres the other day, while trying to do the equivalent of this innocuous seeming drop column query:</p>
<pre><code>
ALTER TABLE aschema.sometable DROP COLUMN IF EXISTS unwanted_column;
</code></pre>
<p>So innocuous was this query that the column didn't even exist in production. It had already been dropped. I was checking in an <a href="http://alembic.zzzcomputing.com/en/latest/">Alembic</a> migration to keep staging and dev DBs in line with prod. Harmless, right?</p>
<p>The deploy went live and things started going from green to red. <i>Uh oh.</i></p>
<p>Well, it turns out that even a non-consequential ALTER TABLE operation takes a table lock. ...which should be totally fine, unless some long-running process has taken out an AccessShareLock and is sitting on it. There's a nice write-up on this exact situation here:</p>
<blockquote><a href="https://dba.stackexchange.com/a/133047/123985">
The [ALTER TABLE operation] tries to take the ACCESS EXCLUSIVE it needs, and it queues up behind the first lock.
Now all future lock requests queue up behind the waiting ACCESS EXCLUSIVE request.
Conceptually, incoming lock requests which are compatible with the already-granted lock could jump over the waiting ACCESS EXCLUSIVE and be granted out of turn, but that is not how PostgreSQL does it.</a></blockquote>
<p>...in other words, screeching halt - <a href="https://dba.stackexchange.com/a/133047/123985">database frozen</a>. Crap!</p>
<p>Postgres committer Josh Berkus wrote a pair of articles on the topic (<a href="http://www.databasesoup.com/2013/11/alter-table-and-downtime-part-i.html">ALTER TABLE and downtime, part 1</a> and <a href="http://www.databasesoup.com/2013/11/alter-table-and-downtime-part-ii.html">ALTER TABLE and downtime, part 2</a>). Great, now what?</p>
<p>Luckily, Postgres provides means to find and kill errant tasks. So, let's find and <a href="https://dba.stackexchange.com/questions/91338/is-it-safe-to-cancel-a-postgresql-alter-table-query-that-is-waiting-on-a-lock">cancel the blocked ALTER TABLE query</a> and/or the guilty part holding the shared lock.</p>
<p>In case you're ever in the same situation, here are a few key PostgreSQL incantations:</p>
<p><b>What locks are being held?</b></p>
<pre><code>
select d.datname, t.relname, l.relation, l.locktype, page, virtualtransaction, pid, mode, granted
from pg_locks l
left join pg_stat_all_tables t on l.relation=t.relid
left join pg_database d on l.database=d.oid
order by d.datname, relation asc;
</code></pre>
<p><b>What locks are being held on a particular table?</b></p>
<pre><code>
select * from pg_locks where granted and relation = 'my_table'::regclass \x\g\x
</code></pre>
<p><b>Who's breaking my database and what do they think they're doing?</b></p>
<pre><code>
select * from pg_stat_activity where pid=1234567 \x\g\x
select pg_cancel_backend(pid);
</code></pre>
<p><b>See what you get when you break my database?</b></p>
<pre><code>
select pg_cancel_backend(1234567);
</code></pre>
<p>...and finally, thanks to our friend <a href="https://www.postgresql.org/docs/current/static/functions-admin.html">pg_cancel_backend</a>, our DB is unfrozen and we can go track down who had that lock held for so long.</p>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-23296992608553112612016-05-24T13:05:00.000-07:002016-05-24T13:57:07.233-07:00Docker cheat sheet<p>If you're using <a href="https://www.docker.com/">Docker</a>, here's a nice <a href="https://github.com/wsargent/docker-cheat-sheet">Docker cheat sheet</a>. I've collected a few choice bits of Docker magic here.</p>
<p>Docker comes with a point-n-click way to start a shell with docker hooks attached. Here's an easier way:</p>
<pre><code>
eval "$(docker-machine env default)"
</code></pre>
<h4>Terminology</h4>
<p>Docker <a href="https://docs.docker.com/engine/reference/glossary/">terminology</a> has spawned some confusion. For instance: <a href="http://stackoverflow.com/a/26960888/199166">images vs. containers</a> and <a href="http://stackoverflow.com/questions/34004076/difference-between-docker-registry-and-repository">registry vs. repository</a>. Luckily, there's help, for example this stack-overflow post by a brilliant, but under-appreciated, hacker on the <a href="http://stackoverflow.com/a/23667302/199166">difference between images and containers</a>.</p>
<ul>
<li><b>Registry</b> - a service that stores image repositories</li>
<li><b>Repository</b> - a set of Docker images, usually versions of the same application</li>
<li><b>Image</b> - an immutable snapshot of a running container. An image consists of layers of file system changes stacked up on top of a base image.</li>
<li><b>Container</b> - a runtime instance of an image</li>
</ul>
<h4>Working with Docker</h4>
<p>We don't need to ssh into the container. Maybe you could call this "shelling" into a container?</p>
<pre><code>
docker run --rm -it ubuntu:latest bash
</code></pre>
<p>... more here later. In the meantime, see wsargent's <a href="https://github.com/wsargent/docker-cheat-sheet">cheat sheet</a> ...</p>
<p>The Dockerfile is a version-controllable artifact that automates the creation of a customized image from a base image. There's plenty of good advice in the guide to <a href="https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/">Best practices for writing Dockerfiles</a>.</p>
<pre><code>
docker build -t myimagename .
</code></pre>
<h4>Clean</h4>
<p>You should almost always run with the --rm flag to avoid leaving shrapnel around. But, that's easy to forget. If there are lots of old containers hanging around, this bit of magic will help:</p>
<pre><code>
docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm
</code></pre>
<p>Images can pile up, too. In <a href="http://www.projectatomic.io/blog/2015/07/what-are-docker-none-none-images/">What are Docker <none>:<none> images?</a>, Shishir Mahajan show how to clean up dangling images:</p>
<pre><code>
docker rmi $(docker images -f "dangling=true" -q)
</code></pre>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-88158196549955074522016-05-03T17:38:00.002-07:002016-05-03T17:41:19.767-07:00Topic Modeling with LDA<p><a href="https://github.com/robmcdan">Rob McDaniel</a> gave a nice presentation on the flaming-hot topic of topic analysis yesterday evening hosted by Seattle metastartup <a href="https://pitchbook.com/">Pitchbook</a>. Grab <a href="https://github.com/Lingistic/DebateAnalysis/blob/master/slides.pdf">slides</a> and code from the <a href="https://github.com/Lingistic/DebateAnalysis">github repo</a>.</p>
<p>Rob is interested in using NLP to discern the level of objectivity or bias in text. As an example, he took the transcripts of the <a href="http://www.presidency.ucsb.edu/debates.php">debates of this year's presidential campaign</a>. Here's part of what he did with them:</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHek4b1W-H_REIO9dCYvunwz4V-Cvx6pq_rfYexI2ZAiIY1zXEFnOeazibn709FuR06e4BfNOBPELcAjkOGSp4cPragaza60W1royTBuC6Ft5HhUqlFDjH4EmX0mYWP3kChLelT0uUMI5T/s1600/process.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHek4b1W-H_REIO9dCYvunwz4V-Cvx6pq_rfYexI2ZAiIY1zXEFnOeazibn709FuR06e4BfNOBPELcAjkOGSp4cPragaza60W1royTBuC6Ft5HhUqlFDjH4EmX0mYWP3kChLelT0uUMI5T/s320/process.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz2bn05i_nAf1liUtNrP4Vn8LnXB2VKR6FqQfX2cw3xbh5VZFqinyntUIDxqQVD7oj-du-BngWKJaM7VZwaeNzGVI_4bvnukJS_DYabAnmLEM_6RPcieitZr0f2gc0_kq73PTycLRVkFrr/s1600/graph.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz2bn05i_nAf1liUtNrP4Vn8LnXB2VKR6FqQfX2cw3xbh5VZFqinyntUIDxqQVD7oj-du-BngWKJaM7VZwaeNzGVI_4bvnukJS_DYabAnmLEM_6RPcieitZr0f2gc0_kq73PTycLRVkFrr/s320/graph.png" /></a></div>
<p>For more, have a look at the post on <a href="http://www.lingistic.com/blog/2016/2/1/5gtebcogi0xv2hiukgd1lvw9kg4322">Semantic analysis of GOP debates</a>.
<p>Interesting tidbits:</p>
<ul>
<li>Wikipedia is a source of documents labeled as not objective.</li>
<li>Movie reviews are a source of documents labeled by rating, number of stars.</li>
<li>Topic cohesion measures how well a given document stays "on-topic" or even "on-message".</li>
<li>KL Divergence is entropy based measure of relatedness of topics.</li>
</ul>
<p>There was an interesting side discussion of the orthogonality of topic modeling and word embedding (word2vec).</p>
<p>Some of the sources Rob mentioned were <a href="http://diging.github.io/tethne/">Tethne</a> and one of it's <a href="http://diging.github.io/tethne/api/tutorial.mallet.html">tutorials</a>, also a pair of papers <a href="https://www.cs.princeton.edu/~blei/papers/Blei2011.pdf">Introduction to Probabilistic Topic Models</a> and <a href="https://www.cs.princeton.edu/~blei/papers/Blei2012.pdf">Probabilistic Topic Models</a> both by David Blei.</p>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-45757784692888858722016-05-01T12:19:00.002-07:002016-06-14T13:43:00.144-07:00Future looks bright<p>Way back in December of 2008, <a href="https://docs.python.org/3.0/whatsnew/3.0.html">Python 3.0 was released</a>. Seven years later, <a href="https://blogs.msdn.microsoft.com/pythonengineering/2016/03/08/python-3-is-winning/">Python 3 is finally gaining traction</a>.</p>
<p>Why the wait? Broken backward compatibility? Lagging library support? Print's annoying new parentheses? Well, coders are a cranky lot, often not fond of change. <a href="https://news.ycombinator.com/item?id=7799524">Some</a> even thought <a href="http://blog.thezerobit.com/2014/05/25/python-3-is-killing-python.html">Python 3 would be the end of Python</a>, <a href="https://www.quora.com/Will-Python-suffer-the-same-fate-as-Perl">suffering a fate</a> similar to <a href="https://perl6advent.wordpress.com/2015/12/24/an-unexpectedly-long-expected-party/">Perl</a> <a href="http://www.fastcompany.com/3026446/the-fall-of-perl-the-webs-most-promising-language">6</a>. There was a bit of controversy:</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXooFvw5gkXe4-GRkqev-kXk7St7ZFuDVEubcNJWx7kWemiKa4Dhb0VjPNv9HwypaXz0xHptU-Lx2e-FeRT-sojoZumCLv5uvEE8IQoaxQuzpWBksPLAv-YH-McmH0wocUtGs3a55vR4DF/s1600/jBli3.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXooFvw5gkXe4-GRkqev-kXk7St7ZFuDVEubcNJWx7kWemiKa4Dhb0VjPNv9HwypaXz0xHptU-Lx2e-FeRT-sojoZumCLv5uvEE8IQoaxQuzpWBksPLAv-YH-McmH0wocUtGs3a55vR4DF/s320/jBli3.png" /></a></div>
<ul>
<li><a href="http://lucumr.pocoo.org/2010/1/7/pros-and-cons-about-python-3/">Pros and Cons about Python 3</a></li>
<li><a href="http://radar.oreilly.com/2014/09/python-3-threat-or-menace.html">Python 3: threat or menace?</a></li>
<li><a href="http://blog.startifact.com/posts/python-2-gravity.html">the Gravity of Python 2</a></li>
<li><a href="http://blog.thezerobit.com/2014/05/25/python-3-is-killing-python.html">Python 3 is killing Python</a></li>
<li><a href="http://sealedabstract.com/rants/python-3-is-fine/">Python 3 is fine</a></li>
<li><a href="http://www.kennethreitz.org/python-27-python-3-a-sacred-love-story/">Python 2.7 and Python 3 a sacred love story</a></li>
</ul>
<p>The story holds some lessons.</p>
<p>Initially, the Python core developers seem to have imagined that people would take the plunge sooner or later, migrating to Python 3 and never looking back. But, there was something of a chicken-and-egg problem. Library maintainers were confronted with the unappealing prospect of supporting two code bases for some transition period of unknown duration. Python application developers were reluctant to upgrade until all their dependencies had made the move. Libraries and applications saw the majority of their peers waiting to upgrade. So, nothing happened. <a href="https://lwn.net/Articles/640181/">Python 3 adoption</a> languished.</p>
<p>It took a while, but the Python community came up with a better solution. Tools like <a href="https://docs.python.org/2/library/__future__.html">future</a> and <a href="http://pythonhosted.org/six/">six</a> enable a single code base to support both Python 2 and Python 3. Mostly this works by <a href="http://python-future.org/compatible_idioms.html">backporting the new Python 3 idioms to Python 2</a> allowing existing code to adopt new idioms at a measured pace while maintaining backwards compatibility. This strategy makes a ton of sense in a language as dynamic as Python. And with it, the deadlock was broken and migration could get underway. End of Life for Python 2 has been <a href="https://hg.python.org/peps/rev/76d43e52d978">moved out to 2020</a>, so those shims will be in place for a long time.</p>
<p>Contrast the Python 3 story with that of Java where a very high level of <a href="http://www.oracle.com/technetwork/java/javase/compatibility-137462.html">backwards compatibility</a> is the standard. At this point, Java folks may be congratulating themselves on making the right call. But, backwards compatibility comes at a cost. There's no denying that those constraints have limited the evolution of the language. Java generics are marred by type erasure. Widely recognized warts in the standard libraries persist - for example, the inconsistency of string.length(), array.length, and collection.size(). Swing is as clunky as ever. Date support in the standard library has only recently been upgraded after years of criticism. Advanced practitioners like those behind <a href="https://spring.io/blog/2015/10/19/springone2gx-2015-replay-modern-java-component-design-with-spring-framework-4-2">Spring</a> resort to esoteric means like byte-code manipulation to extend the capabilities of the language.</p>
<p>At the same time, the JVM became a <a href="http://www.oracle.com/technetwork/articles/java/architect-languages-2266279.html">laboratory</a> for <a href="http://www.oracle.com/technetwork/articles/java/architect-languages-2266279.html">programming</a> <a href="http://techbytes.northpointdigital.com/java-scala-ceylon/">language</a> design. Scala is essentially an evolved Java. Clojure brings LISPy metaprogramming to the JVM. These advanced JVM languages are a big influence on <a href="http://blog.paralleluniverse.co/2014/05/01/modern-java/">modern Java</a>.</p>
<p>So, finally, Python 3 is humming along. The long incubation period has not been without advantages. Python 3.5 is very polished. Most promenant <a href="http://py3readiness.org/">libraries support it</a>. <a href="http://www.randalolson.com/2015/01/30/python-usage-survey-2014/">Usage</a> is <a href="http://astrofrog.github.io/blog/2015/05/09/2015-survey-results/">accelerating</a>. Core developers promise <a href="http://www.curiousefficiency.org/posts/2014/08/python-4000.html">Python 4.0 won't be like Python 3.0</a>.</p>
<p>What lessons will the Python community and that of other technologies take away from the Python 3 experience? That <a href="https://www.python.org/dev/peps/pep-0387/">breaking backwards compatibility</a> is a terrible, terrible thing that should never be contemplated again? That's a progress limiting point of view. I hope there are lessons in how to manage substantial change and how to avoid fracturing the community in the process.</p>
<p>Careful attention needs to be paid to a smooth transition. Working code should continue to work while experiments continue to push forward with new and potentially better idioms. Those that offer a real improvement will, in time, take over, but <a href="https://plus.google.com/+IanBicking/posts/iEVXdcfXkz7">gradually</a> not as a step function. Periods of stability may alternate with accelerated change. End-users should be firmly in control of how cutting-edge they want to be. An essential ingredient is respect for differing rates of change, differing tolerance for risk, etc. There are those who thrive on the new and those who count on the tried and true. But, living breathing technologies need to evolve.</p>
<blockquote><a href="http://www.kludgecode.com/index.php/remarks-on-epigram-14/">“In the long run every program becomes rococo, then rubble.”</a></blockquote>
<p>...but not yet! ...can't wait 'til <a href="https://us.pycon.org/2016/">PyCon</a> in a few weeks!</p>
<ul>
<li><a href="http://python-future.org/">Python-Future: Easy, clean, reliable Python 2/3 compatibility</a></li>
<li>Brett Cannon - <a href="https://www.youtube.com/watch?v=KPzDX5TX5HE">How to make your code Python 2/3 compatible</a> - PyCon 2015</li>
<li><a href="http://python3porting.com/">Supporting Python 3: An in-depth guide</a></li>
<li><a href="http://lucumr.pocoo.org/2014/5/12/everything-about-unicode/">Everything you did not want to know about Unicode in Python 3</a></li>
<li><a href="http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html">Python 3 Q & A</a>
</li>
</ul>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-35487656135105688712015-11-22T00:15:00.001-08:002015-12-30T15:30:18.406-08:00Rdio was too good to last<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtZN5bYz9rB2aFO8yTwHyl1vmFPZ0ECruTdmfCX5RAUyUNcLwnO18mYVk30n9044ZGi6uO-qs31YLL9VYjZguWE08kVXOhvHweRP877PDGo7pxzj9293Y6q_-F_7FWS02PJZ9dTbV0T7HW/s1600/main-qimg-5fbd81c50ece8b7dca0b040e505a9148.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtZN5bYz9rB2aFO8yTwHyl1vmFPZ0ECruTdmfCX5RAUyUNcLwnO18mYVk30n9044ZGi6uO-qs31YLL9VYjZguWE08kVXOhvHweRP877PDGo7pxzj9293Y6q_-F_7FWS02PJZ9dTbV0T7HW/s320/main-qimg-5fbd81c50ece8b7dca0b040e505a9148.png" /></a></div>
<p>When <a href="http://www.wired.com/2010/04/apple-kills-lala-music-service/">Apple killed Lala</a>, there was a bad guy with motive, opportunity and a smoking gun. In the case of Rdio's recently announced demise, it's different. A postmortem by Casey Newton of the Verge explains <a href="http://www.theverge.com/2015/11/17/9750890/rdio-shutdown-pandora">Why Rdio died</a>. The team had the design chops, engineering talent and love of music to create a fantastic product but lacked the business and marketing savvy to make it pay off.</p>
<p>Rdio's star feature was certainly design. The site enabled individuals to express themselves and relate to others - for their enthusiasm to feed off one another. You could follow people with intersecting tastes. New listening was suggested algorithmically based on what was "On the rise in your network". You could comment and respond, lovingly curate playlists and follow activity by your musical soul-mates. The social dimension is key to something as personal and tribal as music.</p>
<p>If you wanted to take art pop seriously, do a deep dive into electronic music, exhaustively survey the Zappa catalog, or peruse the archives of 5 years of Sunday Jazz Brunch selections, your people were there. Any platform will play music you already know, Rdio was a place to explore.</p>
<p>In some ways, credit belongs to the users themselves - those who shoehorned rich conversations into a relatively bare-bones comment feature, repurposing shared playlists as the equivalent of discussion forums. In one case, <a href="http://www.rdio.com/people/BikerChick/playlists/897971/Community_Playlist_the_Trilogy/">Community Playlist the Trilogy</a> had some 3,522 comments and 116 collaborators.</p>
<p>It had, in a word, community.</p>
<h3>Exodus</h3>
<p>Refugees looking for a new musical home can find lots of resources on the <a href="https://rdiolovers.slack.com/">Rdio lover's slack channel</a>, including a <a href="https://rdiolovers.slack.com/messages/moving-house/files/F0F1LA4B0/">compilation</a> of tools for exporting playlists and other digital assets. A Python script by Jesse Mullan (<a href="https://github.com/jmullan/playlist_helper">playlist_helper</a>), which will soon become the official data exporter, worked nicely for me.</p>
<p>There were several calls for a platform-neutral place for the community to live, independent of which streaming service folks end up migrating to. Some nascent possibilities are <a href="https://medium.com/the-playlist/latest">The Playlist</a> or <a href="https://hatchet.is/">Hatchet</a>. <a href="http://www.last.fm/user/cbare">Last.fm</a> fills that roll for me, at least <a href="http://www.theguardian.com/media/2014/oct/08/last-fm-made-loss">for now</a>. Maybe the <a href="https://rdiolovers.slack.com/">Rdio Lover's slack channel</a> will survive beyond the transition period.</p>
<h3>Alternatives</h3>
<p>Which service comes the closest to Rdio? Users on the slack channel have compiled a helpful guide <a href="https://docs.google.com/spreadsheets/d/1t9vRMucMKvFU4e7MBInxG7ij-veKxMtCRgExrIz6BEM/edit#gid=0">Rdio features compared to the competitors</a>. Roughly in order of how interesting they look to me, the main contenders are:</p>
<ul>
<li><a href="https://www.deezer.com/">Deezer</a></li>
<li><a href="http://tidal.com/">Tidal</a></li>
<li><a href="https://www.spotify.com/">Spotify</a></li>
<li><a href="http://www.apple.com/music/">Apple Music</a></li>
<li><a href="https://play.google.com/music/">Google Play Music</a></li>
</ul>
<h3>Why?</h3>
<p>In <a href="http://www.theatlantic.com/technology/archive/2015/11/a-eulogy-for-rdio/416310/">A Eulogy for Rdio</a> in the Atlantic, Robinson Meyer calls Rdio "a better streaming service in most every way". So, why did a great service with an intensely loyal following fail?</p>
<p>The <a href="http://mashable.com/2015/05/09/spotify-lost-a-ton-of-money-last-year-and-heres-exactly-how-much/">economics</a> of digital music are <a href="http://www.theverge.com/2015/5/19/8621581/sony-music-spotify-contract">tricky</a>. None of the streaming services are really <a href="http://www.npr.org/sections/therecord/2013/08/29/214901688/can-streaming-services-make-money">making money</a>. Rdio's $1.5M in monthly revenue, corresponding to perhaps 150,000 paying users, and $100-150k in advertising couldn't cover their costs of roughly $4M mainly for 140 employees and royalties. This explains the <a href="http://www.musicbusinessworldwide.com/rdio-goes-bust-owing-sony-music-2-4m-shazam-1-2m/">nasty pile-up of $220 million in debt</a>. Music has been called <a href="http://evolver.fm/2012/09/06/music-is-still-too-expensive-to-be-free-too-free-to-be-expensive/">Too free to be expensive. Too expensive to be free.</a></p>
<p>Pandora is buying Rdio's intellectual property and taking on some of the talent with the intention of introducing their own on-demand streaming service some time in 2016. Interestingly, customer data was not part of that transaction.</p>
<p>One message I hope no one takes away is that community doesn't matter. It's one of the few ways for streaming services to <a href="https://www.quora.com/Is-there-a-compelling-reason-why-the-battle-for-on-demand-music-streaming-between-Beats-Spotify-Rdio-and-others-wont-end-in-a-winner-take-almost-all-outcome">differentiate themselves</a>. Without it, you feel "solitary, lonely and probed" in the characteristic phrasing of <a href="http://www.last.fm/user/OMacacoAquatico">CAW a.k.a. The Aquatic Ape</a></p>
<h3>So long</h3>
<p>So, we're left with a reminder that the best doesn't always win. No doubt, us "<a href="http://www.theawl.com/2015/12/burying-rdio-the-music-app-for-men">snobby album purists</a>" will find or coopt <a href="http://www.vanityfair.com/news/2015/11/rdio-made-me-a-teenager">another platform</a> on which to indulge our musical obsessions. Keep in touch, music peeps: <a href="http://www.last.fm/user/cbare">http://www.last.fm/user/cbare</a>.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZoCQInGhgGXTDkwhE8j9vez-ep7-8GxmVJV7SQ-C_NV20RE4VSSwVh1eRSmT9BF0wczz7YpC8kNOrxLr0C5t33Lspb-89gVcD1pjugVD-5dSZ6O2tj73djzgunLEz2eAfG8rQsQnG4sDM/s1600/rdio_screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZoCQInGhgGXTDkwhE8j9vez-ep7-8GxmVJV7SQ-C_NV20RE4VSSwVh1eRSmT9BF0wczz7YpC8kNOrxLr0C5t33Lspb-89gVcD1pjugVD-5dSZ6O2tj73djzgunLEz2eAfG8rQsQnG4sDM/s400/rdio_screenshot.png" /></a></div>
<blockquote>“To all of you that have expanded my musical experience for the past six or so years - thank you, thank you thank you.”</blockquote>
<blockquote>“Man, I'm gonna miss my playlists.”</blockquote>
<blockquote>“I spent A LOT of time here.”</blockquote>
<blockquote>“Thank you all for introducing me to some truly great music (and some truly terrible, which I enjoyed nearly as much).”</blockquote>
<blockquote>“from the start it has been my most active social network”</blockquote>
<blockquote>“perhaps the kindest community in online music.”</blockquote>
<blockquote>“People left comments on albums, and, lo and behold, the writing was good and interesting.”</blockquote>
<blockquote>“you all have been invaluable in helping me not just discover new music, but in helping me open my mind to new kinds of music.”</blockquote>
<blockquote>“such a welcoming and amazing crew of fellow travelers”</blockquote>
<p>...parting comments from Rdio users collected by <a href="http://www.last.fm/user/fangoguagua">fangoguagua</a>.</p>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-76612682179385854622015-08-04T21:21:00.002-07:002015-08-04T21:40:46.755-07:00Hacking Zebrafish thoughts<p>The last lab from <a href="https://www.edx.org/course/scalable-machine-learning-uc-berkeleyx-cs190-1x">Scalable Machine Learning with Spark</a> features a guest lecture by <a href="http://www.jeremyfreeman.net/">Jeremy Freeman</a>, a professor of neuroscience at Janelia Farm Research Campus.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://www.youtube.com/watch?v=YLVdRPVj-XM" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ZLlKMitO4uplCZBxUazts7MGF_TsXH9jF2bDtX1dbxeke8iHRIpapy4JCxMGUbcRq39AI-AIRqTp5RcCBcdW3Zd2SlvY_fwUXigUtCc-NJsTOaLcf_W4XRWknf2XBvtFqtgEqZU8S8ap/s400/fish_brain.png" /></a><p style="font-size:smaller;font-style:italic;text-align:right;margin-right:3em;"><a href="http://www.nature.com/nmeth/journal/vaop/ncurrent/full/nmeth.3040.html">Vladimirov et al., 2014</a></p></div>
<p>His group produced this gorgeous <a href="https://www.youtube.com/watch?v=YLVdRPVj-XM">video of a living zebrafish brain</a>. Little fish thoughts sparkle away, made visible by a technique called light-sheet flourescent microscopy in which engineered proteins that light up when the neurons fire are engineered into the fish.</p>
<p>The lab covers <a href="http://arxiv.org/abs/1404.1100">principal component analysis</a> in a lively way. Principal components are extracted from time-series data and mapped onto an HSV color wheel and used to color an image of the zebrafish brain. In the process, we use some fun matrix manipulation to aggregate the time series data in two different ways - by time relative to the start of a visual stimulus and by the directionality of the stimulus (shown below).</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgLHVM8FDdx4HMeGVltP2D5Pb35LFO3FSQ2XMbaEuYuXTrMSEFJWtogBe43IlNabkef8pItWydO5kQBg49oNJAPhvwxnW8GCc2xTjQ91NHkjGmwQvyclvuBgILk0cLEC0G0U2KEw_Pc1be/s1600/ACjO7SqrFyyIAAAAAElFTkSuQmCC.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgLHVM8FDdx4HMeGVltP2D5Pb35LFO3FSQ2XMbaEuYuXTrMSEFJWtogBe43IlNabkef8pItWydO5kQBg49oNJAPhvwxnW8GCc2xTjQ91NHkjGmwQvyclvuBgILk0cLEC0G0U2KEw_Pc1be/s400/ACjO7SqrFyyIAAAAAElFTkSuQmCC.png" /></a></div>
<p>The whole series of <a href="https://github.com/spark-mooc/mooc-setup">labs</a> from the Spark classes was nicely done, but this was an especially fun way to finish it out.</p>
<p>Check out the Freeman Lab's papers:</p>
<ul>
<li><a href="http://www.nature.com/nmeth/journal/vaop/ncurrent/full/nmeth.3040.html">Light-sheet functional imaging in fictively behaving zebrafish</a>, Vladimirov et al., 2014</li>
<li><a href="http://www.nature.com/nmeth/journal/v11/n9/full/nmeth.3041.html">Mapping brain activity at scale with cluster computing</a> Freeman et al., 2014</li>
</ul>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-44591643433526365372015-07-21T07:43:00.002-07:002015-08-05T18:12:58.676-07:00Machine learning on music data<p>The 3rd lab from <a href="/2015/07/scalable-machine-learning-with-spark.html">Scalable Machine Learning with Spark</a> has you predict the year a song was published based on features from the <a href="http://labrosa.ee.columbia.edu/millionsong/">Million Song Dataset</a>. How much farther could you take machine analysis of music? Music has so much structure that's so apparent to our ears. Wouldn't it be cool to be able to parse out that structure algorithmically? Turns out, you can.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcslX9wcA4XJNiBsu4H1lpOiaswJ_VEBbph-TlG2TxZ6SDE_WL4poOYhsUHpJcG0R68vPQdFAhqDcQDmoBiacyQgtdcZBTrlIHCHUyJUndSrKMYVVzzDiAJZMZIKmAABHIh1w_NmpB9l5c/s1600/music-information-retrieval.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcslX9wcA4XJNiBsu4H1lpOiaswJ_VEBbph-TlG2TxZ6SDE_WL4poOYhsUHpJcG0R68vPQdFAhqDcQDmoBiacyQgtdcZBTrlIHCHUyJUndSrKMYVVzzDiAJZMZIKmAABHIh1w_NmpB9l5c/s400/music-information-retrieval.png" /></a>
<p style="font-size:smaller;font-style:italic; text-align: right; margin-right: 5ex;">from <a href="http://www.nyu.edu/classes/bello/DCMS_files/8-MIR.pdf">Music Information Retrieval - Juan P Bello</a></p></div>
<p>Apparently <a href="http://www.ismir.net/">The International Society for Music Information Retrieval (ISMIR)</a> is the place to go for this sort of thing. A few papers, based on <i>minutes</i> of rigorous research (aka random googling):</p>
<ul>
<li><a href="http://recherche.ircam.fr/equipes/analyse-synthese/peeters/ARTICLES/Peeters_2004_Springer_Summary.pdf">Deriving Musical Structures from Signal
Analysis for Music Audio Summary Generation</a></li>
<li><a href="http://www.cs.cmu.edu/~ninghu/papers/ISMIR02.pdf">Pattern Discovery Techniques for Music Audio</a></li>
<li><a href="http://ismir2010.ismir.net/proceedings/ismir2010-107.pdf">Audio-based Music Structure Analysis</a></li>
</ul>
<p>In addition to inferring a song's internal structure, you might want to relate it's acoustic features to styles, moods or time periods (as we did in the lab). For that, you'll want music metadata from sources like:</p>
<ul>
<li><a href="http://the.echonest.com/">Echo Nest</a></li>
<li><a href="http://www.last.fm/api">Last.fm's API</a></li>
<li><a href="https://musicbrainz.org/">Musicbrainz</a></li>
</ul>
<p>There's a paper on <a href="https://www.ee.columbia.edu/~dpwe/pubs/BertEWL11-msd.pdf">The Million Song Dataset paper</a> by two researchers at Columbia's EE department and two more at the <a href="http://the.echonest.com/">Echo Nest</a>.</p>
<p>Even Google is interested in the topic: <a href="http://research.google.com/pubs/pub41530.html">Sharing Learned Latent Representations For Music Audio Classification And Similarity</a>.</p>
<p>Tangentially related, a group out of Cambridge and Stanford say <a href="http://journals.plos.org/plosone/article?id=10.1371%2Fjournal.pone.0131151">Musical Preferences are Linked to Cognitive Styles</a>. I fear what my musical tastes would reveal about my warped cognitive style.</p>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-7146190389221661532015-07-08T07:38:00.001-07:002015-07-15T14:59:48.379-07:00Scalable Machine Learning with Spark class on edX<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHime7HjbDupPkxaPBHzKEDokqF5nf8E5e-r4ymWA_rwG9-Y5OChjLwQp0I97wpCSIOVWQIRLN79qq9fezdSZ3vqzDmhHLCD8i829NozAfoDiZr5GdLsNP_LdravZBQ6Mnys4oBvhYvesQ/s1600/edx-logo-header.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHime7HjbDupPkxaPBHzKEDokqF5nf8E5e-r4ymWA_rwG9-Y5OChjLwQp0I97wpCSIOVWQIRLN79qq9fezdSZ3vqzDmhHLCD8i829NozAfoDiZr5GdLsNP_LdravZBQ6Mnys4oBvhYvesQ/s320/edx-logo-header.png" /></a></div>
<p><a href="https://www.edx.org/course/introduction-big-data-apache-spark-uc-berkeleyx-cs100-1x">Introduction to Big Data with Apache Spark</a> is an online class hosted on <a href="https://www.edx.org/">edX</a> that just finished. Its follow-up <a href="https://www.edx.org/course/scalable-machine-learning-uc-berkeleyx-cs190-1x">Scalable Machine Learning with Spark</a> just got started.</p>
<p>If you want to learn <a href="https://spark.apache.org/">Spark</a> - and who doesn't? - sign up.</p>
<p><a href="https://spark.apache.org/">Spark</a> is a successor to <a href="https://hadoop.apache.org/">Hadoop</a> that comes out of the <a href="https://amplab.cs.berkeley.edu/">AMPLab</a> at Berkeley. It's faster for many operations due to keeping data in memory, and the programming model feels more flexible in comparison to Hadoops rigid framework. The AMPLab provides a suite of related tools including support for machine learning, graphs, SQL and streaming. While Hadoop is most at home with batch processing, Spark is a little better suited to interactive work.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgPtEyonwc-OL1XKrrrHSzI3osSSXzOOpoxffaDrUoLGaYfAdlbMLRBFsosVRV57fK_mI2PRlUACSnCTanu3_jOWkwRK5FknB6Bnd5BRj77igWdQKLjXx4brbThmHr43rNDgS7t_kuKGf0/s1600/imgres.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgPtEyonwc-OL1XKrrrHSzI3osSSXzOOpoxffaDrUoLGaYfAdlbMLRBFsosVRV57fK_mI2PRlUACSnCTanu3_jOWkwRK5FknB6Bnd5BRj77igWdQKLjXx4brbThmHr43rNDgS7t_kuKGf0/s400/imgres.png" /></a></div>
<p>The first class was quick and easy, covering Spark and RDDs through PySpark. No brain stretching on the order of Daphne Koller's <a href="http://digitheadslabnotebook.blogspot.com/2012/03/probabilistic-graphical-models.html">Probabilistic Graphical Models</a> to be found here. The lectures stuck to the "applied" aspects, but that's OK. You can always hit the papers to go deeper. The labs were fun and effective at getting you up to speed:</p>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9hBpyt6AbpKvr9yolvt5B9OMhCr1WRVT-wS9LdIFTVYm7EHfu-gDss428zI8Hag2nSWyDGPWMdKfyUv_cE85cspin-V4c5azZUL7_rox21SeJvaZ3ZGM_pScq5Bwx1J4V6klXh2Pcztds/s1600/jupyter_spark.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9hBpyt6AbpKvr9yolvt5B9OMhCr1WRVT-wS9LdIFTVYm7EHfu-gDss428zI8Hag2nSWyDGPWMdKfyUv_cE85cspin-V4c5azZUL7_rox21SeJvaZ3ZGM_pScq5Bwx1J4V6klXh2Pcztds/s400/jupyter_spark.png" /></a>
<p>Labs for the first class:</p>
<ul>
<li>Word count, the hello world of map-reduce</li>
<li>Analysis of web server log files</li>
<li>Entity resolution using a bag-of-words approach</li>
<li>Collaborative filtering on a movie ratings database. Apparently, I should watch these: <a href="http://www.imdb.com/title/tt0047478/">Seven Samurai</a>, Annie Hall, <a href="http://www.imdb.com/title/tt0094625/">Akira</a>, Stop Making Sense, <a href="http://www.imdb.com/title/tt0109424/">Chungking Express</a>.</li>
</ul>
<p>The second installment looks to very cool, delving deeper into <a href="https://spark.apache.org/docs/latest/mllib-guide.html">mllib</a> the AMPLab's machine learning library for Spark. Its labs cover:</p>
<ul>
<li>Musicology: predict the release year of a song given a set of audio features</li>
<li>Prediction of click-through rates</li>
<li>Neuroimaging Analysis on brain activity of zebrafish (which I suspect is the phase "Just keep swimming" over and over) done in collaboration with <a href="https://www.janelia.org/lab/freeman-lab">Jeremy Freeman of the Janelia Research Campus</a>.</li>
</ul>
<p>The labs for both classes are authored as <a href="http://ipython.org/notebook.html">IPython notebooks</a> in the amazingly cool <a href="https://jupyter.org/">Jupyter framework</a> where prose, graphics and executable code fit combine to make a <a href="http://digitheadslabnotebook.blogspot.com/2011/02/annotated-source-code.html">really nice learning environment</a>.</p>
<p>Echoing my own digital hoarder tendencies, the first course is liberally peppered with links, which I've dutifully culled and categorized for your clicking compulsion:</p>
<h4 id="big-data-hype">Big Data Hype</h4>
<ul>
<li><a href="http://www.economist.com/node/16349358">Biology 2.0</a> The Economist Jun 17th 2010</li>
<li><a href="http://www.economist.com/node/15579717">The data deluge</a></li>
<li><a href="https://hbr.org/2012/10/big-data-the-management-revolution&cm_sp=Article-_-Links-_-Top%20of%20Page%20Recirculation">Big Data: The Management Revolution</a></li>
<li><a href="https://hbr.org/2012/10/data-scientist-the-sexiest-job-of-the-21st-century/ar/1">Data Scientist: The Sexiest Job of the 21st Century</a></li>
<li><a href="http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/35179.pdf">The Unreasonable Effectiveness of Data</a> Alon Halevy, Peter Norvig, and Fernando Pereira, Google</li>
<li><a href="http://www.forbes.com/sites/gilpress/2013/05/28/a-very-short-history-of-data-science/">A Very Short History Of Data Science</a>, Fortune 2013</li>
<li><a href="http://research.microsoft.com/en-us/collaboration/fourthparadigm/4th_paradigm_book_complete_lr.pdf">The Fourth Paradigm</a></li>
</ul>
<h4 id="papers">Papers</h4>
<ul>
<li><a href="http://research.google.com/archive/mapreduce.html">MapReduce: Simplified Data Processing on Large Clusters</a>, Jeffrey Dean and Sanjay Ghemawat</li>
<li><a href="http://people.csail.mit.edu/matei/papers/2010/hotcloud_spark.pdf">Spark: Cluster Computing with Working Sets</a>, Matei Zaharia et al, 2010</li>
<li><a href="https://www.usenix.org/system/files/conference/nsdi12/nsdi12-final138.pdf">Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing</a> Matei Zaharia et al, 2012</li>
<li><a href="http://idl.cs.washington.edu/files/2012-EnterpriseAnalysisInterviews-VAST.pdf">Enterprise Data Analysis and Visualization: An Interview Study</a>. Classifies data scientists into three archetypes: the hacker, the scripter and the application user. I have to admit, I prefer Joel Grus's <a href="http://joelgrus.com/2014/01/24/what-kind-of-data-scientist-are-you-hereifixeditforyou/">What Kind of Data Scientist Are You?</a>.</li>
<li><a href="https://www.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-28.pdf">2009 Above the Clouds Technical Report</a></li>
<li><a href="http://arxiv.org/abs/1401.4208">Epidemiological modeling of online social network dynamics</a></li>
<li><a href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4174913/pdf/big.2014.0020.pdf">Structured Urban Data</a></li>
<li><a href="https://data.sfgov.org/">City of San Franciso open data</a></li>
<li>Not to be out-done <a href="https://data.seattle.gov/">City of Seattle open data</a></li>
</ul>
<h4 id="data-cleaning">Data Cleaning</h4>
<ul>
<li><a href="http://vis.stanford.edu/wrangler/">Data Wrangler</a>, the academic project that was the basis for the company <a href="http://www.trifacta.com/">Trifacta</a></li>
<li><a href="http://openrefine.org/">OpenRefine</a>, <a href="https://github.com/OpenRefine">source repo</a></li>
<li>Slide deck by <a href="http://www.research.att.com/people/Johnson_Theodore/index.html?fbid=tNT4TEgPwiv">Ted Johnson</a> on <a href="http://www.libvolume8.xyz/textile/btech/semester3/yarnmanufacture1/studyofvariousqualitycontrolstudiessuchaswrappingprocedure/studyofvariousqualitycontrolstudiessuchaswrappingprocedurepresentation2.pdf">Data Quality and Data Cleaning</a></li>
</ul>
<h4 id="background">Background</h4>
<ul>
<li><a href="https://www.fourmilab.ch/rpkp/experiments/statistics.html">Introduction to Probability and Statistics</a></li>
<li>US National Institute of Standards and Technology primer on <a href="http://www.itl.nist.gov/div898/handbook/eda/eda_d.htm">Exploratory Data Analysis</a></li>
</ul>
<h4 id="etc">etc</h4>
<ul>
<li><a href="http://www.infoq.com/articles/apache-spark-introduction">Big Data Processing with Apache Spark – Part 1: Introduction</a></li>
<li><a href="http://www.infoq.com/articles/apache-spark-sql">Big Data Processing with Apache Spark - Part 2: Spark SQL</a></li>
<li><a href="http://benfry.com/">Ben Fry</a>'s <a href="https://youtu.be/bGseXNCR1j0">Keynote on Visualizing Data</a> from VIZBI 2010. Alternate link: <a href="http://vizbi.org/Videos/11551146">Keynote on Visualizing Data</a></li>
<li><a href="https://spark.apache.org/docs/latest/sparkr.html">SparkR</a></li>
<li><a href="http://www.embo.org/">EMBO</a></li>
</ul>
<h4 id="the-data-science-process-according-to">The Data Science Process</h4>
<p>In case you're still wondering what data scientists actually do, here it is according to...</p>
<p>Jim Gray</p>
<ul>
<li>Capture</li>
<li>Curate</li>
<li>Communicate</li>
</ul>
<p><a href="http://benfry.com/">Ben Fry</a></p>
<ul>
<li>Acquire</li>
<li>Parse</li>
<li>Filter</li>
<li>Mine</li>
<li>Represent</li>
<li>Refine</li>
<li>Interact</li>
</ul>
<p><a href="https://twitter.com/hackingdata">Jeff Hammerbacher</a></p>
<ul>
<li>Identify problem</li>
<li>Intrumenting data sources</li>
<li>Collect data</li>
<li>Prepare data (integrate, transform, clean, filter, aggregate)</li>
<li>Build model</li>
<li>Evaluate model</li>
<li>Communicate results</li>
</ul>
<p>...and don't forget: <a href="http://digitheadslabnotebook.blogspot.com/2013/02/data-analysis-class.html">Jeffrey Leek</a> and <a href="http://digitheadslabnotebook.blogspot.com/2011/07/notes-on-engineering-data-analysis-with.html">Hadley Wickham</a>.</p>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-9860100561330923462015-06-02T14:28:00.000-07:002015-06-02T14:28:05.444-07:00Beyond PEP 8 -- Best practices for beautiful intelligible code<p>I didn't really mean to become a Python programmer. I was on my way to something with a little more rocket-science feel. R, Scala, Haskell, maybe. But, since I'm here, I may as well learn something about how to do it right. In this respect, I've become a fan of <a href="https://twitter.com/raymondh">Raymond Hettinger</a>.</p>
<p>Python coders will enjoy and benefit from Raymond's excellent talk given at <a href="https://www.youtube.com/channel/UCgxzjK6GuOHVKR_08TT4hJQ">PyCon 2015</a> about Python style, <a href="https://www.youtube.com/watch?v=wf-BqAjZb8M">Beyond PEP 8 -- Best practices for beautiful intelligible code</a>.</p>
<p>"Who should PEP-8-ify code? The author. PEP 8 unto thyself not unto others."</p>
<p>To Hettinger, PEP-8 is not a weapon for bludgeoning rival developers into submission. Going beyond PEP 8 is about paying attention to the stuff that really matters - using languages features like magic methods, properties, iterators and context managers. Business logic should be clear and float to the top. In short, writing <a href="http://digitheadslabnotebook.blogspot.com/2014/01/transforming-code-into-beautiful.html">beautiful idiomatic Pythonic code</a>.</p>
<p>There are plenty more <a href="https://www.youtube.com/channel/UCgxzjK6GuOHVKR_08TT4hJQ">videos from PyCon 2015</a> where that one came from.</p>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-87181447796506656012015-03-09T20:58:00.003-07:002015-03-09T21:08:34.161-07:00Extended Lake Union Loop<p>The standard running loop around Lake Union is a touch over 6 miles. With the addition of a side loop around Portage Bay, you can bring it up to 8 and a half, taking in a bit of UW's campus and crossing over the cut into Montlake. Sticking to the water's edge keeps the terrain nice and flat, but if you want some climbing, head up into Capitol Hill via Interlaken park.</p>
<p>Here, I've factored in a stop at PCC for a cold drink.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://goo.gl/maps/qvBMW" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMrXLYvUNRPSjrqp-nH710gnvWd-ixu2oMqrqbMFVBz2D4FFHF_cNteVBu01IXyWoQLYN0SshposV1o-c1KZi12QxmnL0oyEfvKJIX8hnUJ4UTEl2kB95XYHcacytFYR5tkIdda1kNNox7/s400/lake_union_running_route.png" /></a></div>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-11981531692699502262015-01-27T16:20:00.000-08:002015-01-27T16:20:38.625-08:00Haskell class wrap-up<p><i>[From the old-posts-that-I've-sat-on-for-entirely-too-long-for-no-apparent-reason department...]</i></p>
<p>Back in December, I finished <a href="https://courses.edx.org/courses/DelftX/FP101x/3T2014/">FP101x, Introduction to Functional Programming</a>. I'm stoked that I finally <a href="http://digitheadslabnotebook.blogspot.com/2014/10/lets-learn-us-haskell.html">learned me a (little)
Haskell</a>, after wanting to get around to it for so long.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgj3EBxMmzGbSdneWdVwSjYeBWTp7xTj-BjDz63h_m4mTOQHKCjZ6Oy39jy8przL4-1mzNcOALKXiVGx9v8l3H555ir7Z3Dt4R73ZCH5nAcmpvV_PX7K3J3Xax_eUhOLBQvqfSBP0yzTr2/s1600/haskell-logo-with-name.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgj3EBxMmzGbSdneWdVwSjYeBWTp7xTj-BjDz63h_m4mTOQHKCjZ6Oy39jy8przL4-1mzNcOALKXiVGx9v8l3H555ir7Z3Dt4R73ZCH5nAcmpvV_PX7K3J3Xax_eUhOLBQvqfSBP0yzTr2/s320/haskell-logo-with-name.jpg" /></a></div>
<p>The <a href="http://digitheadslabnotebook.blogspot.com/2014/11/haskell-class-so-far.html">first part of the course</a> was very straight-forward covering the basics of programming in the functional style. But the difficulty ramped up quickly.</p>
<p>A couple of labs were particularly mind-bending, not just for me judging by the message boards. Both were based on <a href="http://www.cs.ox.ac.uk/people/jeremy.gibbons/pearls/">Functional Pearl</a> papers and featured <a href="http://digitheadslabnotebook.blogspot.com/2014/12/what-is-monad.html">monads</a> prominantly. The first was on <a href="http://www.cs.nott.ac.uk/~gmh/pearl.pdf">monad parser combinators</a> and the second was based on <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.8039">A Poor Man's Concurrency Monad</a>. Combining concurrency (of a simple kind), monads and continuation passing is a lot to throw at people at once.</p>
<p>The abrupt shift to more challenging material is part of a philosophy of "teaching the students to fish for themselves". So is introducing new material in the labs rather than in the lectures. This style of teaching alienated a number of students. It's not my favorite, but I can roll with it.</p>
<p>Just be aware that the course requires some self-directed <a href="http://digitheadslabnotebook.blogspot.com/2014/12/what-is-monad.html">additional reading</a> and don't flail around trying to solve to homeworks without sufficient information.</p>
<h3 id="more-haskell">More Haskell</h3>
<p>Now that the class is over, I'd like to find time to continue learning Haskell:</p>
<ul>
<li>Finish <a href="http://learnyouahaskell.com/">Learn You a Haskell</a></li>
<li><a href="http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours">Write yourself a Scheme in 48 hours</a></li>
<li><a href="https://www.haskell.org/haskellwiki/H-99:_Ninety-Nine_Haskell_Problems">99 Haskell Problems</a></li>
<li><a href="https://www.haskell.org/haskellwiki/Typeclassopedia">Typeclassopedia</a></li>
<li>Chris Allen, aka <a href="http://bitemyapp.com/">bitemyapp</a> has a really great <a href="https://github.com/bitemyapp/learnhaskell">How to learn Haskell</a> guide as well as some interesting thoughts about furthering your <a href="http://bitemyapp.com/posts/2014-12-31-functional-education.html">functional education</a></li>
<li><a href="http://homepages.cwi.nl/~jve/HR/">The Haskell Road to Logic, Maths and Programming</a></li>
</ul>
<p>One reason I wanted to learn Haskell is to be able to read some of the Haskell-ish parts of the programming languages literature:</p>
<ul>
<li><a href="http://worrydream.com/refs/Hughes-WhyFunctionalProgrammingMatters.pdf">Why Functional Programming Matters</a> - John Hughes</li>
<li><a href="http://dl.acm.org/citation.cfm?id=99404">Theorems for free!</a> - Philip Wadler</li>
<li><a href="http://homepages.inf.ed.ac.uk/wadler/papers/essence/essence.ps.gz">The essence of functional programming</a> - Philip Wadler</li>
<li><a href="http://haskell.cs.yale.edu/wp-content/uploads/2011/02/history.pdf">A history of Haskell: being lazy with class</a> - Paul Hudak, John Hughes, Simon Peyton Jones, Philip Wadler</li>
</ul>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-71805924373617792952015-01-12T00:31:00.001-08:002015-01-12T00:31:36.221-08:00Brave Genius<p><a href="http://seanbcarroll.com/brave-genius-story/">Brave Genius</a> is an unlikely dual biography of a biologist and a writer who shared a friendship and a common philosophy. Both were active in the French resistance to the German Occupation and both would later receive a Nobel prize. <a href="http://seanbcarroll.com/">Sean B. Carroll</a> forges an inspiring story from seemingly incongruous elements: the desperate defiance of a few in an occupied country, the exhilarating pursuit of an open scientific question, and a lonely stand on the moral high ground.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0t1CrDIbaEtaKxcUlRgR2LqOdw_v4jUBZ_Hiicso53Vv8CmMF5VWGxtvA9sW2mT__-khpPQ43ZCraUVK7agu6pQI2n-itJZAxKnHqK1x1OGv6lsIXNsW59O7V5b_cAW450V6_NStJ-JLP/s1600/22SCIB-popup.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0t1CrDIbaEtaKxcUlRgR2LqOdw_v4jUBZ_Hiicso53Vv8CmMF5VWGxtvA9sW2mT__-khpPQ43ZCraUVK7agu6pQI2n-itJZAxKnHqK1x1OGv6lsIXNsW59O7V5b_cAW450V6_NStJ-JLP/s400/22SCIB-popup.jpg" /></a></div>
<p>In 1940, <a href="http://www.nobelprize.org/nobel_prizes/medicine/laureates/1965/monod-bio.html">Jacques Monod</a> was a newly married father of twins and a researcher at the Sorbonne. <a href="http://www.nobelprize.org/nobel_prizes/literature/laureates/1957/camus-bio.html">Albert Camus</a>, having already published a couple of books of essays, departed his native Algeria for France in March of that year to find work.</p>
<p>On May 10 1940, German troops crossed into Holland and Belgium. Panzers raced towards the Atlantic coast severing Allied lines and stranding French and British troops in the low countries. French defenses collapsed and Germans arrived in an undefended Paris on June 14. The armistice signed on June 22nd marked the beginning of four years of occupation.</p>
<p>During those years, Camus <a href="http://www.foreignaffairs.com/articles/61602/stanley-hoffmann/camus-at-combat-writing-1944-1947">edited and wrote</a> for the underground newspaper <a href="http://gallica.bnf.fr/ark:/12148/cb34501455d/date">Combat</a> urging resistance to the occupation. As the tide of the war turned, Monod organized sabotage attacks and armed resistance ahead of the approaching liberators.</p>
<blockquote>
<p>“I have always believed that if people who placed their hopes in the human condition were mad, those who despaired of events were cowards. Henceforth, there will be only one honorable choice: to wager everything on the belief that in the end words will prove stronger than bullets.” Camus, Combat (November 30, 1946)</p>
</blockquote>
<p>François Jacob, André Lwoff and Jacques Monod were awarded a Nobel prize in 1965 for their work on the control of gene expression, elucidating the regulation of the <a href="http://en.wikipedia.org/wiki/Lac_operon">lac operon</a> by which bacteria switch on metabolism of the sugar lactose.</p>
<p>In his writing, Camus confronts the absurdity of the human search for clarity and meaning in a world that offers only indifference. The attempt to derive meaning and morality without resort to mysticism links Camus's philosophy to Monod's scientific work, which provided some of the first direct evidence that life is mechanistic rather than the result of some magical "vital force" and that its workings could be understood.</p>
<blockquote>
<p>“The scientific approach reveals to Man that he is an accident, almost a stranger in the universe.” Monod, in On Values in the Age of Science (1969)</p>
</blockquote>
<blockquote>
<p>“One of the great problems of philosophy, is the relationship between the realm of knowledge and the realm of values. Knowledge is what is; values are what ought to be. I would say that all traditional philosophies up to and including Marxism have tried to derive the 'ought' from the 'is.' My point of view is that this is impossible.” Monod</p>
</blockquote>
<p><a href="http://seanbcarroll.com/">Carroll</a>, a biologist himself, embeds philosophy and science into the personal lives of his protagonists and the geopolitical events unfolding around them. Both men did brilliant work in the darkest of times, and did so not by retreating but by fully engaging at great risk with the struggles that faced them. The book serves as a warning of what happens when good people overlook the malfeasance of their leaders, but also as confirmation of the resilience of intellect, creativity and humanity.</p>
<h4 id="more">More</h4>
<ul>
<li><p>In the review paper <em><a href="https://www.pasteur.fr/ip/resource/filecenter/document/01s-000046-03t/genetic-regulatory.pdf">Genetic Regulatory Mechanisms in the Synthesis of Proteins</a></em>, published in 1961, François Jacob, André Lwoff and Jacques Monod synthesized the state of the art of molecular biology at the time.</p></li>
<li><p><em><a href="http://whatislife.stanford.edu/LoCo_files/What-is-Life.pdf">What is Life?</a></em> written in 1943-44 by the physicist Erwin Schrödinger <a href="http://www.theguardian.com/science/blog/2013/feb/07/wonders-life-physicist-revolution-biology">inspired a generation of scientists</a> by conjecturing some unknown "aperiodic solid" containing an "some kind of code-script the entire pattern of the individual's future development and of its functioning in the mature state."</p></li>
<li><p><em><a href="http://www.sciencemag.org/content/332/6031/767.short">The Birth of the Operon</a></em> is François Jacob's essay on "<a href="https://andrewshulman.wordpress.com/2011/05/20/night-science-francis-jacob-and-the-operon/">night science</a>".</p></li>
<li><p><a href="http://en.wikipedia.org/wiki/Chance_and_Necessity">Chance and Necessity</a> Jacques Monod's 1971 book: "For some time now, the unpleasant idea has been dawning on mankind that it may owe its existence to nothing but a role of some cosmological dice."</p></li>
<li><p>Sean B. Carroll gave a wonderfully entertaining <a href="http://bigideas.tvo.org/episode/127688/sean-b.-carroll%3A-remarkable-creatures%3A-epic-adventures-in-th">lecture based on another of his books, <em>Remarkable Creatures</em></a></p></li>
<li><p><a href="http://ofbacteriaandmen.blogspot.com/2012/03/jacques-monod-and-origins-of-molecular.html">Jacques Monod and the origins of molecular biology</a>, a review of the book <em>Origins of molecular biology – A tribute to Jacques Monod</em>.</p></li>
</ul>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-11914237312908617182015-01-04T20:15:00.001-08:002015-01-04T20:15:39.784-08:00The Master Switch<p><em>The Master Switch: The Rise and Fall of Information Empires</em> was described as "essential reading" by my <a href="http://sagebase.org/our-leadership/">boss's boss</a>. If you're at all interested in the interplay of technology, economics and politics, I think you'll agree.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZL31Z4EwPBPsR2KdK-Oiln2tEsrApjfNteXMwhJkZ942nRd0TqIx67UoC3YAObo4pxeMgzpy0qxOIPm1DvhsugJlCqdqz3feClYksJzjtH6KRknm_b3ge-bhLUR0MCmB0dMj2JgMi3_l6/s1600/master-switch.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZL31Z4EwPBPsR2KdK-Oiln2tEsrApjfNteXMwhJkZ942nRd0TqIx67UoC3YAObo4pxeMgzpy0qxOIPm1DvhsugJlCqdqz3feClYksJzjtH6KRknm_b3ge-bhLUR0MCmB0dMj2JgMi3_l6/s320/master-switch.png" /></a></div>
<p>Author <a href="http://timwu.org/">Tim Wu</a> is the originator of the term "net neutrality" and a law professor at Columbia. He has written a fast-forward history of the information technology industry focusing on the people and corporations that have, over time, controlled the commanding heights of the information economy. The book examines the cartels that held sway over telephone, radio, film, and television leading up to the question of whether the internet will also come to fall under similar domination.</p>
<p>The <em>cycle</em> is the author's term for the progression of any given technology from the wide-open wild-west early days through a process of integration and consolidation to an end state of oligopoly or monopoly. This stasis eventually gets disrupted by newer technology or government intervention, leading to another open phase and a new round of the cycle, empires rising and falling in the process. "The one-time revolutionaries always become the next generation of dictators. That's why we need, in technology, another generation of revolutionaries to upend them."[1]</p>
<h4 id="open-vs.-closed-systems">Open vs. closed systems</h4>
<p>The book revolves around the virtues and vices of open and closed systems. Open systems are more adaptable and democratic but have trouble matching the stability, security and efficiency of closed systems. Open systems embrace the advantages of decentralization as espoused in different ways by Friedrich Hayek and Jane Jacobs. But, integrated centralized systems can be reliable and convenient.</p>
<p>Closed systems, of course, appeal to empire builders such as Theodore Vail who created the AT&T Bell System. Wu's knack for sketch biography is put to good use profiling these power-hungry moghuls and the often utopian upstarts that seek to dethrone them. We meet titans, like Vail, and get a glimps into the sometimes contradictory character traits it takes to control an information empire, for example: David Sarnoff, who ruled the Radio Corporation of America (RCA) and NBC; John Reith, founder of the BBC; Adolph Zukor who started Paramount pictures and Ted Turner creator CNN and former head of Time Warner. We also meet hackers like early radio enthusiast Lee De Forest and supressed inventor of FM radio Edwin Armstrong.</p>
<h4 id="the-capture-of-the-internet">The capture of the Internet?</h4>
<p>The American system attempts to carefully balance power within the government, but takes a laissez faire approach to <a href="http://pragmaticpoliticaleconomy.blogspot.com/2012/03/rise-of-private-power.html">private power</a>. If Wu is right and we let things take their natural course, the openness that now characterizes the Internet - the "<a href="http://www.vanityfair.com/culture/2012/05/internet-regulation-war-sopa-pipa-defcon-hacking">integrity of the Internet itself as a reliable, independent, and open structure</a>"[2] - may be lost to a period of lockdown. Network effects, the power of integration and economies of scale favor the monopolist. Consumers may decide to favor consistency and convenience over openness and choice only to regret it later. If this is the case, the internet will not remain open automatically but only with concerted effort.</p>
<p>The remedy Wu proposes is a <strong>principle of separation</strong> akin to the separation of church and state or the separation of powers within the branches of the American government. The common carrier obligation of all infrastructure providers implies net neutrality and opposes verical integration across layers of the network stack. Technology leaders would be expected to self-regulate based on a sense of public duty. The FCC should pursue enforcement with an eye to the special role of information technology in a democratic society. Anti-trust regulation is the back-up, when it's time to bring out the big guns.</p>
<h4 id="fight-on">Fight on</h4>
<p><em>The Master Switch</em> gives a deeper perspective on the great game playing out in the technology sector. After reading it, you'll recognize the historical themes threading through the open-source movement, the Apple vs Google skirmishes or 2012's battle that defeated the SOPA / PIPA acts. The fight over the future of the Internet is surely not over.</p>
<ul>
<li>[1] NPR interview <em><a href="http://www.npr.org/templates/story/story.php?storyId=130982785">The Past And Future Of Information Empires</a></em></li>
<li>[2] Vanity Fair's reporting on SOPA and PIPA <em><a href="http://www.vanityfair.com/culture/2012/05/internet-regulation-war-sopa-pipa-defcon-hacking">World War 3.0</a></em></li>
<li>Colbert interviews Tim Wu <em><a href="http://thecolbertreport.cc.com/videos/qatuhg/end-of-net-neutrality---tim-wu">End of Net Neutrality</a></em></li>
<li>The New Yorker's review <a href="http://www.newyorker.com/tech/currents/tim-wu-on-communication-chaos-and-control"><em>Tim Wu on Communication, Chaos, and Control</em></a></li>
<li>NYT book review <a href="http://www.nytimes.com/2010/12/12/books/review/Leonhardt-t.html?pagewanted=all&_r=0"><em>From Hobby to Industry</em></a> By David Leonhardt</li>
<li><em><a href="http://bits.blogs.nytimes.com/2010/11/14/one-on-one-tim-wu-author-of-the-master-switch/">One on One: Tim Wu, Author of ‘The Master Switch’</a></em></li>
<li><a href="http://arstechnica.com/tech-policy/2010/12/ars-book-review-the-master-switch-by-tim-wu/">Ars technica</a> disputes the book's premise.</li>
<li><em><a href="http://prospect.org/article/manichean-world-tim-wu">The Manichean World of Tim Wu</a></em></li>
<li><a href="http://fortune.com/2014/01/15/why-the-man-who-coined-the-phrase-net-neutrality-feared-apple/">Why the man who coined the phrase 'net neutrality' feared Apple</a></li>
<li><a href="http://www.media.mit.edu/video/view/wu-2011-02-24">Speaking at the MIT Media Lab</a></li>
<li><a href="https://www.youtube.com/watch?v=7uxJwBu-gK0">WGBHForum at the Harvard Book Store</a></li>
<li><a href="https://www.youtube.com/watch?v=LVZLl4EKQis">Speaking at the Berkman Center for Internet & Society at Harvard</a></li>
<li><a href="https://www.youtube.com/watch?v=ij76dh_340w">Stanford Center for Internet and Society</a></li>
<li>Tim Wu's <a href="https://www.youtube.com/watch?v=HD_LfJ4vt7Q">TED talk</a></li>
<li><a href="https://www.youtube.com/watch?v=iHMQUfBEspE">General Assembly and Tim Wu: Net Neutrality and the Politics of Entrepreneurship</a></li>
<li><a href="http://hightechhistory.com/2011/01/13/tim-wu-the-master-switch-at-the-berkman-center-harvard-law-school/">Review of The Master Switch</a> by "High Tech History"</li>
</ul>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-27423281116510948922014-12-24T16:56:00.000-08:002016-02-28T20:49:39.911-08:00What the #@$% is a Monad?<style>
li { padding-top: 6pt; padding-bottom: 6pt; }
</style>
<p>Monads are like fight club. The first rule of monads is don't blog about monads.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvk1TaRXNoJbW2JU9ktRH3DLMqUiymXPFnzh27O9XC9kwKpDB02uahEhEoHuYLvMlJ9bNpBYhDqppEsIWeAtwCOAC737wNg3HqlBkv7TopcTjS_NkPwXSxTIwh4wUnXpURc280fknEcB9u/s1600/monad_symbol.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvk1TaRXNoJbW2JU9ktRH3DLMqUiymXPFnzh27O9XC9kwKpDB02uahEhEoHuYLvMlJ9bNpBYhDqppEsIWeAtwCOAC737wNg3HqlBkv7TopcTjS_NkPwXSxTIwh4wUnXpURc280fknEcB9u/s200/monad_symbol.jpg" /></a></div>
<p>Kind of a design pattern for functional programming, monads are already the subject of more than enough well intentioned but confusing tutorials. We'll not commit the <a href="http://byorgey.wordpress.com/2009/01/12/abstraction-intuition-and-the-monad-tutorial-fallacy/">monad tutorial fallacy</a> here. But, monads are needed for a couple of the labs from <a href="https://courses.edx.org/courses/DelftX/FP101x/3T2014/info">FP101x</a>, an <a href="http://digitheadslabnotebook.blogspot.com/2014/10/lets-learn-us-haskell.html">online</a> <a href="http://digitheadslabnotebook.blogspot.com/2014/11/haskell-class-so-far.html">class</a> in Haskell - labs with a throw-'em-into-the-deep-end quality to them.</p>
<p>Here's a quick list of some of the better resources I found, while struggling to get a handle on these super-abstract objects of mystery.</p>
<h4>Starting points</h4>
<ul>
<li><a href="http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html">Functors, Applicatives, And Monads In Pictures</a>, by Aditya Bhargava, is a friendly place to start.</li>
<li><a href="https://www.youtube.com/watch?v=ZhuHCtR3xq8">Brian Beckman: Don't fear the Monad</a></li>
<li>FPComplete's <a href="https://www.fpcomplete.com/school">School of Haskell</a> explains <a href="https://www.fpcomplete.com/school/advanced-haskell/functors-applicative-functors-and-monads">what monads are</a> and <a href="https://www.fpcomplete.com/user/haroldcarr/example-of-why-to-use-monads-what-they-can-do">why to use them</a>.</li>
</ul>
<h4>Phillip Wadler</h4>
<p>It's been said that "<a href="http://www.johndcook.com/blog/2014/03/03/monads-are-hard-because/">Monads are hard because</a> there are so many bad monad tutorials getting in the way of finally finding Wadler’s nice paper." Find it here:</p>
<ul>
<li><a href="http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf">Monads for functional programming</a></li>
</ul>
<h4>Need more?</h4>
<p>Those got me over the first hump, but here are some I may want to come back to later:</p>
<ul>
<li><a href="http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html">You Could Have Invented Monads! (And Maybe You Already Have)</a></li>
<li><a href="http://bartoszmilewski.com/2011/01/09/monads-for-the-curious-programmer-part-1/">Monads for the Curious Programmer</a> by Bartosz Milewski who used to be in <a href="http://www.rockcellarmagazine.com/2013/11/01/tony-iommi-interview-black-sabbath-through-the-years/">Black Sabbath</a>. See also Milewki's <a href="http://www.quora.com/What-is-the-easiest-way-to-understand-Haskell-Monads/answer/Bartosz-Milewski">easiest way to understand Monads</a>.</li>
<li><a href="http://www.youtube.com/watch?v=b0EF0VTs9Dc">Monads and Gonads</a> a Google Tech-Talk by Douglas Crockford</li>
<li><a href="http://pragprog.com/magazines/2012-11/thinking-functionally-with-haskell">Is There Anything Left to Say about Monads?</a></li>
<li><a href="http://www.leonardoborges.com/writings/2012/11/30/monads-in-small-bites-part-i-functors/">Monads in small bites</a></li>
<li><a href="http://www.stephanboyer.com/post/83/monads-for-dummies">Monads for Dummies</a></li>
<li><a href="http://qr.ae/RUusCo">What are monads and why are they useful?</a></li>
</ul>
<p>To put monads in a more general context, here's a really great guide to <a href="http://stackoverflow.com/questions/1012573/getting-started-with-haskell">Getting started with Haskell</a>.</p>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-62933520956937166762014-12-03T12:09:00.004-08:002014-12-04T05:18:27.052-08:00Lee Edlefsen on Big Data in R<p>Lee Edlefsen, Chief Scientist at <a href="http://www.revolutionanalytics.com/">Revolution Analytics</a>, spoke about <b>Big Data in R</b> at the FHCRC a week or two back. He introduced the PEMA or <a href="http://www.huber.embl.de/dsc/slides/PEMAs_Using_Ref_Classes.pdf">parallel external memory algorithm</a>.</p>
<p><i>“Parallel external memory algorithms (PEMA's) allow solution of both capacity and speed problems, and can deal with distributed and streaming data.”</i></p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj-20W9Pp3Cwpn0L1dtM5mwXuDiZOxhEFLmB08EZUrAUdneCww403Quv9sfhHoND0jphh4y4KPNBJIE6cAR_Ph3tuY4-Ao-BgYwPnWdPsilXYyicO0qOcRNGvQPArTfD9iI9DTu2-Se3ns/s1600/pema.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj-20W9Pp3Cwpn0L1dtM5mwXuDiZOxhEFLmB08EZUrAUdneCww403Quv9sfhHoND0jphh4y4KPNBJIE6cAR_Ph3tuY4-Ao-BgYwPnWdPsilXYyicO0qOcRNGvQPArTfD9iI9DTu2-Se3ns/s400/pema.png" /></a></div>
<p>When a problem is too big to fit in memory, external memory algorithms come into play. The data to be processed is chunked and loaded into memory a chunk at a time and partial results from each chunk combined into a final result:</p>
<ol type="1">
<li>initialize</li>
<li>process chunk</li>
<li>update results</li>
<li>process results</li>
</ol>
<p>Edlefsen made a couple of nice observations about these steps. Processing an individual chunk can often be done independently of other chunks. In this case, it's possible to parallelize. If updating results can be done as new data arrives, you get streaming.</p>
<p>Revolution has developed a framework for writing parallel external memory algorithms in R, <a href="http://packages.revolutionanalytics.com/doc/7.3.0/win/RevoPemaR_Getting_Started.pdf">RevoPemaR</a>, making use of <a href="http://adv-r.had.co.nz/OO-essentials.html#rc">R reference classes</a>.</p>
<p>I couldn't find Edlefsen's exact slides, but these decks on <a href="http://www.huber.embl.de/dsc/slides/PEMAs_Using_Ref_Classes.pdf">parallel external memory algorithms</a> and another from UseR 2011 on <a href="http://www.slideshare.net/RevolutionAnalytics/edlefsen-scalable-data-analysis-in-r">Scalable data analysis in R</a> seem to cover everything he talked about.</p>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-45203059781300799202014-11-22T19:02:00.002-08:002014-11-25T09:12:38.213-08:00Haskell class, so far<style type="text/css">
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
margin: 0; padding: 0; vertical-align: baseline; border: none; }
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; }
code > span.dt { color: #902000; }
code > span.dv { color: #40a070; }
code > span.bn { color: #40a070; }
code > span.fl { color: #40a070; }
code > span.ch { color: #4070a0; }
code > span.st { color: #4070a0; }
code > span.co { color: #60a0b0; font-style: italic; }
code > span.ot { color: #007020; }
code > span.al { color: #ff0000; font-weight: bold; }
code > span.fu { color: #06287e; }
code > span.er { color: #ff0000; font-weight: bold; }
</style>
<p>Well, I'm about 5 weeks into <a href="http://digitheadslabnotebook.blogspot.com/2014/10/lets-learn-us-haskell.html">Introduction to Functional Programming</a>, a.k.a. <a href="https://courses.edx.org/courses/DelftX/FP101x/3T2014/">FP101x</a>, an online class taught in Haskell by <a href="https://twitter.com/headinthebox">Eric Meijer</a>. The class itself is a couple weeks ahead of that; I'm lagging a bit. So, how is it so far, you ask?</p>
<p>The first 4 weeks covered basic functional concepts and how to express them in Haskell, closely following chapters 1-7 of the book, Graham Hutton's <a href="http://www.cs.nott.ac.uk/~gmh/book.html">Programming in Haskell</a>:</p>
<ul>
<li>Defining and applying functions</li>
<li>Haskell's type system
<ul>
<li>parametric types</li>
<li>type classes</li>
<li>type signatures of curried functions</li>
</ul></li>
<li>pattern matching</li>
<li>list comprehensions</li>
<li>recursion</li>
<li>higher-order functions</li>
</ul>
<p>Haskell's hierarchy of type classes is elegant, but some obvious things seem to be missing. For example, you can't <code>show</code> a function. But, it would be really helpful to show something like a docstring, or at least the function's type signature. Also machine-word sized <code>Int</code>'s don't automatically promote, so if <code>n</code> is an <code>Int</code>, <code>n/5</code> produces a type error.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="http://en.wikibooks.org/wiki/Haskell/Classes_and_types" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3YdxqAhijtqPU7xiu5R2JFqT3LBUZMAxiR0XGmOaSrTvPB9E0cbljNB97iMBrmZgo6e0GZHfvKu-q_G1k1crTovWewjhQGHP7TpEzQ6a6o6s0ICCNxzUQSTsd-HmI5qwONG5SS8Y52SER/s400/haskell_type_class_hierarchy.png" /></a></div>
<p>Most of the concepts were familiar already from other functional languages, Scheme via <a href="http://mitpress.mit.edu/sicp/">SICP</a>, OCAML via <a href="https://www.coursera.org/course/proglang">Dan Grossman's programming languages</a> class, and Clojure via <a href="http://www.joyofclojure.com/">The Joy of Clojure</a>. So, this early part was mostly a matter of learning Haskell's syntax.</p>
<p>Some nifty examples</p>
<ul>
<li><p>a recursive definition of <em>factorial</em>:</p>
<pre class="sourceCode haskell"><code class="sourceCode haskell"><span class="ot">factorial ::</span> <span class="dt">Integer</span> <span class="ot">-></span> <span class="dt">Integer</span>
factorial <span class="dv">0</span> <span class="fu">=</span> <span class="dv">1</span>
factorial n <span class="fu">=</span> n <span class="fu">*</span> (factorial (n<span class="fu">-</span><span class="dv">1</span>))</code></pre></li>
<li><p><em>sum</em> of the first 8 powers of 2:</p>
<pre class="sourceCode haskell"><code class="sourceCode haskell">sum (map (<span class="dv">2</span><span class="fu">^</span>) [<span class="dv">0</span><span class="fu">..</span><span class="dv">7</span>])</code></pre></li>
<li><p>a recursive definition of <em>map</em>:</p>
<pre class="sourceCode haskell"><code class="sourceCode haskell">map<span class="ot"> ::</span> (a <span class="ot">-></span> b) <span class="ot">-></span> [a] <span class="ot">-></span> [b]
map f [] <span class="fu">=</span> []
map f (x<span class="fu">:</span>xs) <span class="fu">=</span> f x <span class="fu">:</span> map f xs</code></pre></li>
<li><p>get all adjacent pairs of elements from a list:</p>
<pre class="sourceCode haskell"><code class="sourceCode haskell"><span class="ot">pairs ::</span> [a] <span class="ot">-></span> [(a,a)]
pairs xs <span class="fu">=</span> zip xs (tail xs)</code></pre></li>
<li><p>check if a list of elements that can be ordered is sorted by confirming that each pair of elements is ordered:</p>
<pre class="sourceCode haskell"><code class="sourceCode haskell"><span class="ot">sorted ::</span> <span class="dt">Ord</span> a <span class="ot">=></span> [a] <span class="ot">-></span> <span class="dt">Bool</span>
sorted xs <span class="fu">=</span> and [x <span class="fu"><=</span> y <span class="fu">|</span>(x,y) <span class="ot"><-</span> pairs xs]</code></pre></li>
</ul>
<p>Haskell attains its sparse beauty by leaving a lot implied. One thing I figured out during my brief time with OCAML also seems to apply to Haskell. Although these languages lack the forest of parentheses you'll encounter in Lispy languages, it's not that the parentheses aren't there; <em>you just can't see them</em>. A key to reading Haskell is understanding the rules of <a href="https://www.haskell.org/onlinereport/decls.html#fixity">precedence, associativity and fixity</a> that <em>imply</em> the missing parentheses.</p>
<style>
#precedence { border-collapse: collapse; border-spacing: 0; }
#precedence td,th { border: 1px solid #CCC; }
#precedence th {border-bottom: 2px solid #333; }
#precedence .odd { background: #F7F7F7; }
</style>
<table id="precedence" cellspacing="0">
<colgroup>
<col style="width: 10%" />
<col style="width: 34%" />
<col style="width: 25%" />
<col style="width: 30%" />
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Pre- cedence</th>
<th style="text-align: left;">Left associative</th>
<th style="text-align: left;">Non- associative</th>
<th style="text-align: left;">Right associative</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><p>9</p></td>
<td style="text-align: left;"><p><code>!!</code></p></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"><p><code>.</code></p></td>
</tr>
<tr class="even">
<td style="text-align: left;"><p>8</p></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"><p><code>^</code>,<code>^^</code>,<code>**</code></p></td>
</tr>
<tr class="odd">
<td style="text-align: left;"><p>7</p></td>
<td style="text-align: left;"><p><code>*</code>, <code>/</code>, <code>`div`</code>, <code>`mod`</code>, <code>`rem`</code>, <code>`quot`</code></p></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"></td>
</tr>
<tr class="even">
<td style="text-align: left;"><p>6</p></td>
<td style="text-align: left;"><p><code>+</code>,<code>-</code></p></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"></td>
</tr>
<tr class="odd">
<td style="text-align: left;"><p>5</p></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"><p><code>:</code>,<code>++</code></p></td>
</tr>
<tr class="even">
<td style="text-align: left;"><p>4</p></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"><p><code>==</code>, <code>/=</code>, <code><</code>, <code><=</code>, <code>></code>, <code>>=</code>, <code>`elem`</code>, <code>`notElem`</code></p></td>
<td style="text-align: left;"></td>
</tr>
<tr class="odd">
<td style="text-align: left;"><p>3</p></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"><p><code>&&</code></p></td>
</tr>
<tr class="even">
<td style="text-align: left;"><p>2</p></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"><p><code>||</code></p></td>
</tr>
<tr class="odd">
<td style="text-align: left;"><p>1</p></td>
<td style="text-align: left;"><p><code>>></code>, <code>>>=</code></p></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"></td>
</tr>
<tr class="even">
<td style="text-align: left;"><p>0</p></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"></td>
<td style="text-align: left;"><p><code>$</code>, <code>$!</code>, <code>`seq`</code></p></td>
</tr>
</tbody>
</table>
<p>Another key is reading type signatures of curried functions, as currying is the default in Haskell and is relied upon extensively in composing functions, particularly in the extra terse <a href="https://www.haskell.org/haskellwiki/Pointfree">"point-free" style</a>.</p>
<p>Currently, I'm trying to choke down Graham Hutton's <a href="http://www.cs.nott.ac.uk/~gmh/monads">Addendum on Monads</a>. If I end up understanding that, it'll get me a code-monkey merit badge, for sure.</p>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-15542573193123314422014-11-11T12:14:00.000-08:002014-11-11T15:53:37.974-08:00The DREAM / RECOMB Conference 2014<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvWdjqZE70AsqJ0duCQPhboeW3pWxn6fybORg6njqMN8U9Um85RrFNklpLOcsiCebyUahjCwK8_lhN1NyhEre8PaCnKc016Bx4BKWsANFKqRk2mLasUiAZ8B6lhAJUQQhyZode9iIA9KpZ/s1600/Header.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvWdjqZE70AsqJ0duCQPhboeW3pWxn6fybORg6njqMN8U9Um85RrFNklpLOcsiCebyUahjCwK8_lhN1NyhEre8PaCnKc016Bx4BKWsANFKqRk2mLasUiAZ8B6lhAJUQQhyZode9iIA9KpZ/s320/Header.jpg" /></a></div>
<p>The <a href="http://www.iscb.org/recomb-regsysgen2014/">RECOMB/ISCB Conference on Regulatory and Systems Genomics, with DREAM Challenges and Cytoscape Workshops</a> is running this week in San Diego.</p>
<p>A bunch of us from <a href="http://sagebase.org/">Sage Bionetworks</a> are here to connect with the <a href="https://www.synapse.org/#!Challenges:DREAM">DREAM</a> community. In introductory remarks, Stephen Friend framed the challenges as piloting new modes of collaboration and engagement addressing multidimensional problems based on the idea that open innovation will trump closed silos.</p>
<h4 id="lincoln-stein-the-future-of-genomic-databases">Lincoln Stein: The Future of Genomic Databases</h4>
<p>I first heard Lincoln Stein speak at an <a href="http://conferences.oreillynet.com/biocon2002/">O'Reilly conference</a> in 2002, on building a <a href="http://www.nature.com/nature/journal/v417/n6885/full/417119a.html">bioinformatics nation</a>. The same themes of openness and integration reappeared in Stein's talk on <em>The Future of Genomic Databases</em>.</p>
<p>Stein asks, "Open Data + open source = reproducible science?" Not exactly. Stein presents some emerging solutions to the remaining obstacles: big data sets, complex workflows, unportable code and data access restrictions.</p>
<p><a href="http://genomebiology.com/content/11/5/207">Cloud computing</a>, specifically colocation of data and compute, enables handling big data. Containers (ie Docker) address the problem of code portability. The <a href="http://genomicsandhealth.org/">Global Alliance</a> is working towards providing <a href="http://googleresearch.blogspot.com/2014/02/google-joins-global-alliance-for.html">APIs</a> both to encapsulate technical complexity and to provide a control point at which to enforce restrictions.</p>
<p>In case we're wondering what to do with all the machine cycles made available by Amazon and Google, bioinformatics workflows are growing in complexity. Workflow managers like Seqware and Galaxy provide a formalized description of multistep processes and manage tools and their dependencies.</p>
<p>Legal restrictions hinder data integration. But, donors want their samples to contribute to research. Licensure for data access combined with <a href="https://www.ted.com/speakers/john_wilbanks">uniform consent</a> could reduce the friction resulting in a streamlined data access process. On the other hand, technical solutions involve homomorphic encryption and agent based federated queries.</p>
<p>As a parting thought, Stein notes that digital infrastructure enables experiments in incentive structures and economic models, citing micropayments, ratings, and challenges.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuKxttH-GeOovF56m5HWR5vBjzxdZrWaNYozlyV-JpbsmOKGzXycZRDlA2subYsxVQOMPecqEvLnDO8b_2DBJ6wmMM9ukKMUrCBDB6WL1Jk3nV-Appeh3OHrqmdtsf5iLV4GJ0OVrcFENx/s1600/20141111_122210.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuKxttH-GeOovF56m5HWR5vBjzxdZrWaNYozlyV-JpbsmOKGzXycZRDlA2subYsxVQOMPecqEvLnDO8b_2DBJ6wmMM9ukKMUrCBDB6WL1Jk3nV-Appeh3OHrqmdtsf5iLV4GJ0OVrcFENx/s400/20141111_122210.jpg" /></a></div>
<h4 id="andrea-califano">Andrea Califano</h4>
<p>Andrea Califano spoke on the genotype to phenotype linkage in cancer. Thinking of the cell as an integrator of signals, Califo's group traces from gene or protein expression signatures of cell states (normal, neoplastic, metastatic) back through the network to the master regulators responsible for that signature. One related paper is <a href="http://www.cell.com/cell/abstract/S0092-8674(14)01170-2">Identification of Causal Genetic Drivers of Human Disease through Systems-Level Analysis of Regulatory Networks</a>.</p>
<h4 id="paul-boutros-somatic-mutation-calling-challenge">Paul Boutros Somatic Mutation Calling Challenge</h4>
<p><a href="http://oicr.on.ca/person/oicr-investigator/paul-boutros">Paul Boutros</a> presented the <a href="https://www.synapse.org/#!Synapse:syn312572">Somatic Mutation Calling Challenge</a> (SMC-DNA). He announced the intention for the SMC challenges to become a living benchmark, an objective standard against which future methods will be tested.</p>
<p>Paul also crowned the Broad Institute's <a href="https://github.com/broadinstitute/mutect">MuTect</a> (single nucleotide) and novoBreak (structural variants) by Ken Chen's lab at MD Anderson the winners of the synthetic tumor phase of SMC-DNA. The plan is to announce winners on real tumor data in February after experimental validation.</p>
<h4 id="the-winners">The Winners</h4>
<p>The SMC challenge is a bit unique for DREAM in its level of specialization. In the other challenge, a couple of methods were highlighted: Gaussian process regression and dictionary learning for sparse representation.</p>
<p>But, increasingly, the main differentiator is application of biological domain knowledge, especially with respect to selecting and processing features. <a href="http://www.biodesign.org/people/li-liu">Li Liu</a> of Arizona State's Biodesign Institute, for example, won part of the Accute Myoloid Leukemia challenge by weighting proteins based on their evolutionary conservation.</p>
<p>Another theme is that genetic features seem to have poor signal compared to more downstream features, gene expression or clinical variables. Peddinti Gopalacharyulu, a top performer in the <a href="https://www.synapse.org/#!Synapse:syn2384331">Gene Essentiality Challenge</a>, commented that perhaps the way to use genetics is to extract the component of gene expression that is not explained by genetic features.</p>
<h4 id="dream-9.5">DREAM 9.5</h4>
<p>Two of the Dream 9.5 challenges are follow-ups to the Somatic Mutation Calling challenge from the 8.5 round. The SMC empire expands into <a href="https://www.synapse.org/#!Synapse:syn2813589">RNA</a> and <a href="https://www.synapse.org/#!Synapse:syn2813581">tumor heterogeneity</a>. In the <a href="https://www.synapse.org/#!Synapse:syn2811262">olfaction challenge</a>, the goal is to predict, from molecular features, odor as described by human subjects. The <a href="https://www.synapse.org/#!Synapse:syn2813558">Prostate cancer</a> challenge asks participants to classify patients according to survival using data sourced from the comparator arms of clinical trials.</p>
<p>For the DREAM 10 round, there's an imaging challenge in the works and a sequel to the <a href="http://www.the-dream-project.org/challenges/dream-phil-bowen-als-prediction-prize4life">ALS challenge</a> challenge from DREAM 7.</p>
<h4 id="on-to-recomb">On to RECOMB</h4>
<p>That's just the DREAM part of the meeting, or, really, the subset that fit into my brain. As an added bonus, there were several representatives from <a href="http://www.cytoscape.org/">Cytoscape</a>-related projects and some conversation about the <a href="http://genomicsandhealth.org/">Global Alliance for Genomics and Health</a>.</p>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-38282589683452444952014-10-14T23:18:00.000-07:002014-11-01T12:16:20.455-07:00Let's learn us a Haskell<div class="separator" style="clear: both; text-align: center;"><a href="http://learnyouahaskell.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicn071oC3pM7qlDvYtE6lCdM4vn-WSY0VZPOikJDzgbwW-Fvp3DxR1WlLBVIoznaJe8RgjmP8eV7SaRL0JDoaRc7nQz6Xu8xJg-RkuFz0Fco_y8W3uXXgHN6bZsy1soy_jjKwDpFJ8kwh8/s400/holy_shit.png" /></a></div>
<p>Let's say you've been meaning to learn Haskell for a <a href="/2008/12/functional-programming.html">long</a> <a href="/2007/11/digitheads-to-do-list.html">time</a>, secretly yearning for purely functional programming, laziness and a type system based on more category theory than you can shake a functor at.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHime7HjbDupPkxaPBHzKEDokqF5nf8E5e-r4ymWA_rwG9-Y5OChjLwQp0I97wpCSIOVWQIRLN79qq9fezdSZ3vqzDmhHLCD8i829NozAfoDiZr5GdLsNP_LdravZBQ6Mnys4oBvhYvesQ/s1600/edx-logo-header.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHime7HjbDupPkxaPBHzKEDokqF5nf8E5e-r4ymWA_rwG9-Y5OChjLwQp0I97wpCSIOVWQIRLN79qq9fezdSZ3vqzDmhHLCD8i829NozAfoDiZr5GdLsNP_LdravZBQ6Mnys4oBvhYvesQ/s320/edx-logo-header.png" /></a></div>
<p>Now's your chance. <a href="https://twitter.com/headinthebox">Erik Meijer</a> is teaching an online class <a href="https://www.edx.org/course/delftx/delftx-fp101x-introduction-functional-2126">Introduction to Functional Programming</a> on edX, about which he says, "This course will use Haskell as the medium for understanding the basic principles of functional programming."</p>
<p>It starts today, but I've gotten a head start by working through the first few chapters of <a href="http://learnyouahaskell.com/">Learn You a Haskell for Great Good!</a> which <a href="http://www.quora.com/What-is-the-best-book-for-learning-Haskell">most agree</a> is the best place to <a href="http://stackoverflow.com/questions/1012573/getting-started-with-haskell">get started with Haskell</a>.</p>
<p>Anyone up for a Seattle study group?</p>
<h4>Tutorials</h4>
<ul>
<li><a href="http://lisperati.com/haskell/">Lisperati Haskell Tutorial</a></li>
<li><a href="https://en.wikibooks.org/wiki/Haskell/YAHT">Yet Another Haskell Tutorial</a></li>
<li><a href="https://www.fpcomplete.com/school">School of Haskell</a></li>
</ul>
<h4><a href="http://www.haskell.org/haskellwiki/Books">Books</a></h4>
<ul>
<li><a href="http://learnyouahaskell.com/">Learn you a Haskell</a></li>
<li><a href="http://www.cs.nott.ac.uk/~gmh/book.html">Programming in Haskell</a></li>
<li><a href="http://www.haskellcraft.com/craft3e/Home.html">Haskell: the Craft of Functional Programming</a></li>
<li><a href="http://book.realworldhaskell.org/">Real World Haskell</a></li>
<li><a href="http://homepages.cwi.nl/~jve/HR/">The Haskell Road to Logic, Maths and Programming</a></li>
</ul>
<h4>Other resources</h4>
<ul>
<li><a href="http://www.haskell.org/haskellwiki/Typeclassopedia">Typeclassopedia</a></li>
<li><a href="http://www.haskell.org/haskellwiki/H-99:_Ninety-Nine_Haskell_Problems">H-99: Ninety-Nine Haskell Problems</a></li>
<li>"<a href="http://www.cse.chalmers.se/~rjmh/afp-arrows.pdf">Programming with Arrows</a>" paper by John Hughes.</li>
<li><a href="http://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals">C9 Lectures: Erik Meijer - Functional Programming Fundamentals</a></li>
<li><a href="http://dev.stephendiehl.com/hask/">What I Wish I Knew When Learning Haskell</a></li>
</ul>
<p>It must be some pack-rat instinct that makes me compile these lists.</p>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-55330112691497315862014-07-03T21:17:00.001-07:002014-07-13T16:22:11.205-07:00Galaxy Community Conference<p>The <a href="https://wiki.galaxyproject.org/Events/GCC2014">2014 Galaxy Community Conference</a> (GCC2014) wrapped up yesterday at Johns Hopkins University in Baltimore. The best part for me was the pre-conference <a href="https://wiki.galaxyproject.org/Events/GCC2014/Hackathon">hackathon</a>.</p>
<p>If you're not familiar with <a href="https://usegalaxy.org/">Galaxy</a>, it's a framework for wrapping command line bioinformatics tools in a web UI. On top of that, Galaxy adds lots of sophistication around <a href="https://wiki.galaxyproject.org/Admin/Config/Jobs">job scheduling</a>, configurable to run its job on SGE, SLURM, and other queuing systems and to run on virtual clusters with <a href="https://wiki.galaxyproject.org/CloudMan">Cloudman</a>. Galaxy users can design reproducible workflows and manage tool versioning and dependencies through the <a href="https://toolshed.g2.bx.psu.edu/">Toolshed</a>.</p>
<p>The project has attracted a vibrant community supported by an active <a href="https://biostar.usegalaxy.org">Q&A site</a> and an IRC channel. Vendors offer Galaxy appliances, cloud deployments and consulting.</p>
<h4>Hackathon</h4>
<p>For the hackathon, 40 developers gathered in James Taylor's new computing lab in one of the red brick buildings interspersed with lawns and groves of trees that make up the Hopkins campus. This was a great setting for an accelerated ramp-up on the Galaxy codebase. Out of <a href="https://trello.com/b/3YgU637b/gcc2014-hackathon">18 proposed projects</a>, 9 got far enough to be called finished. I learned how to write <a href="https://wiki.galaxyproject.org/Admin/Tools/ToolConfigSyntax">tool wrappers</a> and how to access the Galaxy API.</p>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX75-gE0P_oMj4-kYPx83tYLT95jyoGZPVo5Ir0kGqT68tspwWbblcAEGjBPc1BGj6vsn7DBndZwaplyHeoyohWtGUnmBz4JL1TaEh6DxyFfAfX1gjopFz3AgnDyZl6oaN_a4E1GAQUY0n/s1600/hackathon.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX75-gE0P_oMj4-kYPx83tYLT95jyoGZPVo5Ir0kGqT68tspwWbblcAEGjBPc1BGj6vsn7DBndZwaplyHeoyohWtGUnmBz4JL1TaEh6DxyFfAfX1gjopFz3AgnDyZl6oaN_a4E1GAQUY0n/s400/hackathon.jpg" /></a><p style="font-style:italic;font-size:7pt; text-align:right;">Photo credit - someone on the Galaxy team</p>
<h4>Galaxy + Synapse</h4>
<p>Specifically, I was there to put together some integration between Synapse and Galaxy, bulding on what Kyle Ellrott had already started. Reproducibile analysis, provenance and annotation are core concerns of both projects, so it seems like a good fit. After data exchange, which Kyle got working, exchanging provenance and metadata sound like logical next steps.</p>
<p>Galaxy histories should be able to refer to Synapse entities and receive annotations along with data objects.</p>
<p>Serializing Galaxy histories, workflows etc. out to Synapse might allow a usage model where a cloud instances of Galaxy can be spun up and shut down on demand, with all the important details preserved in Synapse in between times.</p>
<p>Portable provenance might be a longer term goal. It would be neat to be able to thread provenance through some arbitrary combination of data sources and analysis platforms. All of these provenance-aware platforms - Figshare, Dryad, Synapse, Arvados, Galaxy, etc - ought to be able to share provenance between themselves.</p>
<h4>Next year</h4>
<p>The whole event was well put together in general. Next year's Galaxy Community Conference is scheduled for 6-8 July 2015 in Norwich, England.</p>
<ul>
<li><a href="http://www.bx.psu.edu/~anton/">Anton Nekrutenko</a> group at Penn State</li>
<li><a href="http://jamestaylor.org/">James Taylor</a>'s group which recently moved from Emory to Johns Hopkins</li>
</ul>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-70395550586340586602014-06-17T13:09:00.000-07:002014-06-17T13:11:27.354-07:00Ada's Technical Books<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIXwovfrW71a_bedWskQZLnzhn7S5iBaU-Yn4q7GTCqpA2bTV2punJJAq9_YQZh89PUvVwFZ4fnpXoQI5BbHgGFlXIqRgQiJLybiCTjDWVmdc8zcMul4XbnQHo8K4paWUDn4wxX7KWOLKi/s1600/20140617_103636.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIXwovfrW71a_bedWskQZLnzhn7S5iBaU-Yn4q7GTCqpA2bTV2punJJAq9_YQZh89PUvVwFZ4fnpXoQI5BbHgGFlXIqRgQiJLybiCTjDWVmdc8zcMul4XbnQHo8K4paWUDn4wxX7KWOLKi/s640/20140617_103636.jpg" /></a></div>
<p>If you're in Seattle, you owe it to yourself to spend some time in <a href="http://seattletechnicalbooks.com/">Ada's Technical Books</a> in my old neighborhood. It's on the top of Capitol Hill on 15th between Republican and Harrison.</p>
<p>The shop features books on all sorts of techy topics - science, math, engineering and, of course, computers along with various nifty maker-type gadgets and a cafe full of tasty treats. Geek heaven!</p>
<div class="separator" style="clear: both; text-align: center;"><a href="http://seattletechnicalbooks.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1S3x8y7FqLyIJblnB2jR0Givbp2mhyphenhyphen7wnTNCdotE3HfmIfIP4UU1Lsw90JA_hwKk7eyKzKGI7W6RbYkSF-Av-n6MDtzjeHu8qgXr5c318mTBYLJi7xkO2EiaphVhvoaZEcDd2qWYu8Nod/s400/logo.gif" /></a></div>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-72898659581056413072014-05-08T10:44:00.000-07:002014-05-08T11:38:56.156-07:00How to grep git commits<p>From the There's-got-to-be-a-better-way Department, comes this tale of subterranian Git spelunking...</p>
<p>It all started because I lost some code. I had done my duty like a good little coder. I found a bug, wrote a test that reproduced it and filed an issue noting the name of the failing test. Then, some travel and various fire drills intervened. Memory faded. Finally, getting back to my routine, I had this bug on my docket. Already had the repro; should be a simple fix, right?</p>
<p>But where was my test? I asked Sublime to search for it, carefully turning off the annoying find-in-selection feature. Nothing. Maybe I stashed it. Do <code>git stash list</code>. Nothing that was obviously my test. Note to self: Use <code>git stash save <message></code> instead of just <code>git stash</code>. I did <code>git show</code> to a several old stashes, to no avail. How am I going to find this thing?</p>
<p>A sensible person would have stopped here and rewritten the test. But, how much work are we willing to do to avoid doing any work? Lots, apparently.</p>
<p>So, I wrote this ridiculous bit of hackery instead. I call it <code>grep_git_objects</code>:</p>
<pre><code>import os
import sys
import subprocess
if len(sys.argv) < 2:
print "Usage: python grep_git_objects.py <target>"
sys.exit()
target = sys.argv[1]
hashes = []
for i in range(0,256):
dirname = ".git/objects/%02x" % i
#print dirname
for filename in os.listdir(dirname):
h = "%02x%s" % (i, filename)
hashes.append(h)
cmd = "git cat-file -p %s" % h
output = subprocess.check_output(cmd.split(' '))
if target in output:
print "found in object: ", h
print output
</code></pre>
<p style="font-style:italic;font-size:smaller;">Gist: <a href="https://gist.github.com/cbare/2c723ff936d5959cc57e">grep_git_objects.py</a></p>
<p>Run it in the root of a repo. It searches through the .git/objects hierarchy to find your misplaced tests or anything else you've lost.</p>
<p>You'd think <code>git grep</code> would do exactly that. Maybe it does and I'm just clueless. I hope so, 'cause otherwise, why would you have a <a href="https://www.kernel.org/pub/software/scm/git/docs/git-grep.html">git grep</a> command? In any case, <code>git grep</code> didn't find my missing test. The above bit of Python code did.</p>
<p>Once I found it, I had the hash code for a <a href="http://git-scm.com/book/en/Git-Internals-Git-Objects">Git object</a>. Objects are the leaves of Git trees. So, I grepped again for the hash code of the object and found the tree node it belonged to, working my way up a couple more levels to the commit.</p>
<p>With commit in hand, I could see by the "WIP on develop" message that is was indeed a <a href="http://git-scm.com/docs/git-stash">stash</a>, which I must have dropped by mistake. Anyway, that was fun... sorta.</p>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-3767142655665558632014-04-22T22:21:00.000-07:002014-05-27T09:40:06.820-07:00The damaging effects of hypercompetition<p>In <a href="http://www.pnas.org/content/early/2014/04/09/1404402111">Rescuing US biomedical research from its systemic flaws</a> (PNAS 2014), authors Bruce Alberts, Marc Kirschner, Shirley Tilghman and Harold Varmus recount the ways in which research funding is broken, in particular for life sciences.</p>
<p>PI's pour vast amounts of time and energy into competing for a shrinking pool of funds. Pressure for results causes a shift to short-term thinking and engenders a <a href="https://www.andrew.cmu.edu/user/kzollman/research/Presentations/NancyDec2011.pdf">conservatism</a> poorly suited to producing breakthroughs. In much the same way as the corporate sector abandoned fundamental research in favor of product development, the current funding climate overvalues "translational" research over basic science. The situation is especially dire for young scientists facing the prospect of years as an underpaid and overworked post-doc with faint hopes of ever landing a faculty position. The internet is littered with goodbye-academia letters. [<a href="http://blog.devicerandom.org/2011/02/18/getting-a-life/" title="Goodbye academia, I get a life">1</a> <a href="http://anothersb.blogspot.co.uk/2014/02/goodbye-academia.html" title="Goodbye Academia">2</a> <a href="https://authorea.com/users/3/articles/5287/_show_article/" title="Goodbye academia? Hello, academia">3</a> <a href="http://jakevdp.github.io/blog/2013/10/26/big-data-brain-drain/" title="The Big Data Brain Drain">4</a> <a href="https://chroniclevitae.com/news/216-why-so-many-academics-quit-and-tell/" title="Why So Many Academics Quit and Tell">5</a> <a href="https://chronicle.com/article/On-Leaving-Academe/133717/" title="On Leaving Academe">6</a>]</p>
<p>The Alberts paper proposes a few solutions, some sensible and one in particular that doesn't make much sense to me.</p>
<p>Broadening career paths for scientists is a sound idea. In this respect, life science can borrow from information technology. Computer science departments and the tech industry have a long history of exchange. The barriers in biotech are higher, but the flow of people and ideas between academics and industry can only be a good thing. Probably the biggest factor in diversifying away from the shrinking tenure track, is matching expectation with reality.</p>
<p>Managing expectations seems more sensible than trying to match supply and demand by restricting entry into PhD programs based on the reasoning that the system is training too many PhDs. Isn't too many PhD's a good problem to have? Is educating people a bad thing? Scientifically trained people are a tremendous asset. If we're not using a valuable resource effectively, having less of that resource doesn't seem like an ideal solution. With some creative thinking, productive uses for that talent can and are being found.</p>
<p>I'm not convinced that the <a href="http://www.phdcomics.com/comics/archive.php?comicid=1144">pyramid shaped structure</a> of science is the problem. Harnessing the idealism, curiosity and naive overconfidence of youth works. What doesn't work in absence of perpetual growth is the expectation that everyone at the bottom of the pyramid will eventually be at the top. But, what's wrong with a system in which people are supported for a time on research grants then continue onto many diverse career paths?</p>
<p>Getting the mix of competition and camaraderie right can be the difference between a situation that's nurturing rather than toxic. Economics teaches that incentives matter. But, re-engineering science will require a nuanced understanding of what those incentives are, both in crass terms of money and prestige but also the more subtle psychology around freedom, inner drive and higher purpose.</p>
<h4>Since nobody asked me</h4>
<p>If I was in charge of funding science, I'd place the majority of my bets on longer term grants for small focused labs where the PI does hands-on science and training of new scientists. Longer term grants of 5 years or so would give researchers time to do actual science in teams of 2-8 people. The article recognizes the success of the Howard Hughes Institutes model of explicitly encouraging scientists to pursue risky ideas - "<a href="http://www.nsf.gov/about/history/vbush1945.htm#ch1.4" title="Science: The Endless Frontier, Vannevar Bush, 1945">the free play of free intellects</a>".</p>
<p>I'd be reluctant to fund 40 person labs because neither mentoring nor creative thinking scales up to that size particularly well. I'd avoid large multi-center grants. Funding agencies seem to favor this sort of thing perhaps as a safer bet, they're a recipe for infighting and politicking. They risk getting all the disadvantages of both collaboration and competition with little of the benefits.</p>
<p>Research has a great track record of paying off in the long run. But, Bill Janeway, author of <a href="http://www.billjaneway.com/">Doing Capitalism in the Innovation Economy</a> says that there has to be a surplus in the funding system to absorb the unavoidable costs of uncertainty, both in terms of when the payoff comes and who captures the gains. In the past, this surplus has come from monopolistic corporations like Bell or Xerox, from the taxpayer, or from flush venture capital. In The Great Stagnation, Tyler Cowen posits that we've picked the low-hanging fruit of the current wave of technology - that we're in a period of stagnation while the last wave is fully digested and the stage can be set for the next wave. To that end, maybe some hedge-fund wizard can cook up some financial innovation for reliably financing risky, long-term projects with unevenly distributed payouts.</p>
<p style="font-size:smaller; font-style:italic;">[1] <a href="http://blog.devicerandom.org/2011/02/18/getting-a-life/">Goodbye academia, I get a life</a><br/>
[2] <a href="http://anothersb.blogspot.co.uk/2014/02/goodbye-academia.html">Goodbye Academia</a><br/>
[3] <a href="https://authorea.com/users/3/articles/5287/_show_article/">Goodbye academia? Hello, academia</a><br/>
[4] <a href="http://jakevdp.github.io/blog/2013/10/26/big-data-brain-drain/">The Big Data Brain Drain</a><br/>
[5] <a href="https://chroniclevitae.com/news/216-why-so-many-academics-quit-and-tell/">Why So Many Academics Quit and Tell</a><br/>
[6] <a href="https://chronicle.com/article/On-Leaving-Academe/133717/">On Leaving Academe</a><br/>
[7] <a href="http://www.nsf.gov/about/history/vbush1945.htm#ch1.4">Science: The Endless Frontier, Vannevar Bush, 1945</a><br/>
[8] <a href="http://www.math.washington.edu/Commentary/science.html">The Decline of Unfettered Research, Andrew Odlyzko, 1995</a>
</p>Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-48116603764710209262014-04-11T22:17:00.002-07:002014-04-11T22:17:59.091-07:00Clojure Koans<p>In an attempt to reach a bit higher plane of enlightenment with respect to Clojure, I did the <a href="http://clojurekoans.com/">Clojure Koans</a>. What a great way to get familiar with a new language.</p>
<p>It might be worth watching the video solutions: <a href="https://www.youtube.com/playlist?list=PL1p6TgkbKXqyOwq6iSkce_EY5YWFHciHt">Clojure Koans Walkthrough in Light Table</a>.</p>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0tag:blogger.com,1999:blog-5964816804623588850.post-26545625595435993952014-02-20T21:49:00.001-08:002020-11-30T17:03:34.666-08:00Regression with multiple predictors
<style type="text/css">
tt, code, pre {
font-family: 'DejaVu Sans Mono', 'Droid Sans Mono', 'Lucida Console', Consolas, Monaco, monospace;
}
pre {
margin-top: 0;
max-width: 95%;
border: 1px solid #ccc;
white-space: pre-wrap;
}
pre code {
display: block; padding: 0.5em;
}
code.r, code.cpp {
background-color: #F8F8F8;
}
</style>
<!--Styles for R syntax highlighter-->
<style type="text/css">
pre .operator,
pre .paren {
color: rgb(104, 118, 135)
}
pre .literal {
color: rgb(88, 72, 246)
}
pre .number {
color: rgb(0, 0, 205);
}
pre .comment {
color: rgb(76, 136, 107);
}
pre .keyword {
color: rgb(0, 0, 255);
}
pre .identifier {
color: rgb(0, 0, 0);
}
pre .string {
color: rgb(3, 106, 7);
}
</style>
<!--R syntax highlighter-->
<script type="text/javascript">
var hljs=new function(){function m(p){return p.replace(/&/gm,"&").replace(/</gm,"<")}function f(r,q,p){return RegExp(q,"m"+(r.cI?"i":"")+(p?"g":""))}function b(r){for(var p=0;p<r.childNodes.length;p++){var q=r.childNodes[p];if(q.nodeName=="CODE"){return q}if(!(q.nodeType==3&&q.nodeValue.match(/\s+/))){break}}}function h(t,s){var p="";for(var r=0;r<t.childNodes.length;r++){if(t.childNodes[r].nodeType==3){var q=t.childNodes[r].nodeValue;if(s){q=q.replace(/\n/g,"")}p+=q}else{if(t.childNodes[r].nodeName=="BR"){p+="\n"}else{p+=h(t.childNodes[r])}}}if(/MSIE [678]/.test(navigator.userAgent)){p=p.replace(/\r/g,"\n")}return p}function a(s){var r=s.className.split(/\s+/);r=r.concat(s.parentNode.className.split(/\s+/));for(var q=0;q<r.length;q++){var p=r[q].replace(/^language-/,"");if(e[p]){return p}}}function c(q){var p=[];(function(s,t){for(var r=0;r<s.childNodes.length;r++){if(s.childNodes[r].nodeType==3){t+=s.childNodes[r].nodeValue.length}else{if(s.childNodes[r].nodeName=="BR"){t+=1}else{if(s.childNodes[r].nodeType==1){p.push({event:"start",offset:t,node:s.childNodes[r]});t=arguments.callee(s.childNodes[r],t);p.push({event:"stop",offset:t,node:s.childNodes[r]})}}}}return t})(q,0);return p}function k(y,w,x){var q=0;var z="";var s=[];function u(){if(y.length&&w.length){if(y[0].offset!=w[0].offset){return(y[0].offset<w[0].offset)?y:w}else{return w[0].event=="start"?y:w}}else{return y.length?y:w}}function t(D){var A="<"+D.nodeName.toLowerCase();for(var B=0;B<D.attributes.length;B++){var C=D.attributes[B];A+=" "+C.nodeName.toLowerCase();if(C.value!==undefined&&C.value!==false&&C.value!==null){A+='="'+m(C.value)+'"'}}return A+">"}while(y.length||w.length){var v=u().splice(0,1)[0];z+=m(x.substr(q,v.offset-q));q=v.offset;if(v.event=="start"){z+=t(v.node);s.push(v.node)}else{if(v.event=="stop"){var p,r=s.length;do{r--;p=s[r];z+=("</"+p.nodeName.toLowerCase()+">")}while(p!=v.node);s.splice(r,1);while(r<s.length){z+=t(s[r]);r++}}}}return z+m(x.substr(q))}function j(){function q(x,y,v){if(x.compiled){return}var u;var s=[];if(x.k){x.lR=f(y,x.l||hljs.IR,true);for(var w in x.k){if(!x.k.hasOwnProperty(w)){continue}if(x.k[w] instanceof Object){u=x.k[w]}else{u=x.k;w="keyword"}for(var r in u){if(!u.hasOwnProperty(r)){continue}x.k[r]=[w,u[r]];s.push(r)}}}if(!v){if(x.bWK){x.b="\\b("+s.join("|")+")\\s"}x.bR=f(y,x.b?x.b:"\\B|\\b");if(!x.e&&!x.eW){x.e="\\B|\\b"}if(x.e){x.eR=f(y,x.e)}}if(x.i){x.iR=f(y,x.i)}if(x.r===undefined){x.r=1}if(!x.c){x.c=[]}x.compiled=true;for(var t=0;t<x.c.length;t++){if(x.c[t]=="self"){x.c[t]=x}q(x.c[t],y,false)}if(x.starts){q(x.starts,y,false)}}for(var p in e){if(!e.hasOwnProperty(p)){continue}q(e[p].dM,e[p],true)}}function d(B,C){if(!j.called){j();j.called=true}function q(r,M){for(var L=0;L<M.c.length;L++){if((M.c[L].bR.exec(r)||[null])[0]==r){return M.c[L]}}}function v(L,r){if(D[L].e&&D[L].eR.test(r)){return 1}if(D[L].eW){var M=v(L-1,r);return M?M+1:0}return 0}function w(r,L){return L.i&&L.iR.test(r)}function K(N,O){var M=[];for(var L=0;L<N.c.length;L++){M.push(N.c[L].b)}var r=D.length-1;do{if(D[r].e){M.push(D[r].e)}r--}while(D[r+1].eW);if(N.i){M.push(N.i)}return f(O,M.join("|"),true)}function p(M,L){var N=D[D.length-1];if(!N.t){N.t=K(N,E)}N.t.lastIndex=L;var r=N.t.exec(M);return r?[M.substr(L,r.index-L),r[0],false]:[M.substr(L),"",true]}function z(N,r){var L=E.cI?r[0].toLowerCase():r[0];var M=N.k[L];if(M&&M instanceof Array){return M}return false}function F(L,P){L=m(L);if(!P.k){return L}var r="";var O=0;P.lR.lastIndex=0;var M=P.lR.exec(L);while(M){r+=L.substr(O,M.index-O);var N=z(P,M);if(N){x+=N[1];r+='<span class="'+N[0]+'">'+M[0]+"</span>"}else{r+=M[0]}O=P.lR.lastIndex;M=P.lR.exec(L)}return r+L.substr(O,L.length-O)}function J(L,M){if(M.sL&&e[M.sL]){var r=d(M.sL,L);x+=r.keyword_count;return r.value}else{return F(L,M)}}function I(M,r){var L=M.cN?'<span class="'+M.cN+'">':"";if(M.rB){y+=L;M.buffer=""}else{if(M.eB){y+=m(r)+L;M.buffer=""}else{y+=L;M.buffer=r}}D.push(M);A+=M.r}function G(N,M,Q){var R=D[D.length-1];if(Q){y+=J(R.buffer+N,R);return false}var P=q(M,R);if(P){y+=J(R.buffer+N,R);I(P,M);return P.rB}var L=v(D.length-1,M);if(L){var O=R.cN?"</span>":"";if(R.rE){y+=J(R.buffer+N,R)+O}else{if(R.eE){y+=J(R.buffer+N,R)+O+m(M)}else{y+=J(R.buffer+N+M,R)+O}}while(L>1){O=D[D.length-2].cN?"</span>":"";y+=O;L--;D.length--}var r=D[D.length-1];D.length--;D[D.length-1].buffer="";if(r.starts){I(r.starts,"")}return R.rE}if(w(M,R)){throw"Illegal"}}var E=e[B];var D=[E.dM];var A=0;var x=0;var y="";try{var s,u=0;E.dM.buffer="";do{s=p(C,u);var t=G(s[0],s[1],s[2]);u+=s[0].length;if(!t){u+=s[1].length}}while(!s[2]);if(D.length>1){throw"Illegal"}return{r:A,keyword_count:x,value:y}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:m(C)}}else{throw H}}}function g(t){var p={keyword_count:0,r:0,value:m(t)};var r=p;for(var q in e){if(!e.hasOwnProperty(q)){continue}var s=d(q,t);s.language=q;if(s.keyword_count+s.r>r.keyword_count+r.r){r=s}if(s.keyword_count+s.r>p.keyword_count+p.r){r=p;p=s}}if(r.language){p.second_best=r}return p}function i(r,q,p){if(q){r=r.replace(/^((<[^>]+>|\t)+)/gm,function(t,w,v,u){return w.replace(/\t/g,q)})}if(p){r=r.replace(/\n/g,"<br>")}return r}function n(t,w,r){var x=h(t,r);var v=a(t);var y,s;if(v){y=d(v,x)}else{return}var q=c(t);if(q.length){s=document.createElement("pre");s.innerHTML=y.value;y.value=k(q,c(s),x)}y.value=i(y.value,w,r);var u=t.className;if(!u.match("(\\s|^)(language-)?"+v+"(\\s|$)")){u=u?(u+" "+v):v}if(/MSIE [678]/.test(navigator.userAgent)&&t.tagName=="CODE"&&t.parentNode.tagName=="PRE"){s=t.parentNode;var p=document.createElement("div");p.innerHTML="<pre><code>"+y.value+"</code></pre>";t=p.firstChild.firstChild;p.firstChild.cN=s.cN;s.parentNode.replaceChild(p.firstChild,s)}else{t.innerHTML=y.value}t.className=u;t.result={language:v,kw:y.keyword_count,re:y.r};if(y.second_best){t.second_best={language:y.second_best.language,kw:y.second_best.keyword_count,re:y.second_best.r}}}function o(){if(o.called){return}o.called=true;var r=document.getElementsByTagName("pre");for(var p=0;p<r.length;p++){var q=b(r[p]);if(q){n(q,hljs.tabReplace)}}}function l(){if(window.addEventListener){window.addEventListener("DOMContentLoaded",o,false);window.addEventListener("load",o,false)}else{if(window.attachEvent){window.attachEvent("onload",o)}else{window.onload=o}}}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=n;this.initHighlighting=o;this.initHighlightingOnLoad=l;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="\\b(0[xX][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.ER="(?![\\s\\S])";this.BE={b:"\\\\.",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(r,s){var p={};for(var q in r){p[q]=r[q]}if(s){for(var q in s){p[q]=s[q]}}return p}}();hljs.LANGUAGES.cpp=function(){var a={keyword:{"false":1,"int":1,"float":1,"while":1,"private":1,"char":1,"catch":1,"export":1,virtual:1,operator:2,sizeof:2,dynamic_cast:2,typedef:2,const_cast:2,"const":1,struct:1,"for":1,static_cast:2,union:1,namespace:1,unsigned:1,"long":1,"throw":1,"volatile":2,"static":1,"protected":1,bool:1,template:1,mutable:1,"if":1,"public":1,friend:2,"do":1,"return":1,"goto":1,auto:1,"void":2,"enum":1,"else":1,"break":1,"new":1,extern:1,using:1,"true":1,"class":1,asm:1,"case":1,typeid:1,"short":1,reinterpret_cast:2,"default":1,"double":1,register:1,explicit:1,signed:1,typename:1,"try":1,"this":1,"switch":1,"continue":1,wchar_t:1,inline:1,"delete":1,alignof:1,char16_t:1,char32_t:1,constexpr:1,decltype:1,noexcept:1,nullptr:1,static_assert:1,thread_local:1,restrict:1,_Bool:1,complex:1},built_in:{std:1,string:1,cin:1,cout:1,cerr:1,clog:1,stringstream:1,istringstream:1,ostringstream:1,auto_ptr:1,deque:1,list:1,queue:1,stack:1,vector:1,map:1,set:1,bitset:1,multiset:1,multimap:1,unordered_set:1,unordered_map:1,unordered_multiset:1,unordered_multimap:1,array:1,shared_ptr:1}};return{dM:{k:a,i:"</",c:[hljs.CLCM,hljs.CBLCLM,hljs.QSM,{cN:"string",b:"'\\\\?.",e:"'",i:"."},{cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},hljs.CNM,{cN:"preprocessor",b:"#",e:"$"},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:a,r:10,c:["self"]}]}}}();hljs.LANGUAGES.r={dM:{c:[hljs.HCM,{cN:"number",b:"\\b0[xX][0-9a-fA-F]+[Li]?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+(?:[eE][+\\-]?\\d*)?L\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+\\.(?!\\d)(?:i\\b)?",e:hljs.IMMEDIATE_RE,r:1},{cN:"number",b:"\\b\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"keyword",b:"(?:tryCatch|library|setGeneric|setGroupGeneric)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\.",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\d+(?![\\w.])",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\b(?:function)",e:hljs.IMMEDIATE_RE,r:2},{cN:"keyword",b:"(?:if|in|break|next|repeat|else|for|return|switch|while|try|stop|warning|require|attach|detach|source|setMethod|setClass)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"literal",b:"(?:NA|NA_integer_|NA_real_|NA_character_|NA_complex_)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"literal",b:"(?:NULL|TRUE|FALSE|T|F|Inf|NaN)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"identifier",b:"[a-zA-Z.][a-zA-Z0-9._]*\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"<\\-(?!\\s*\\d)",e:hljs.IMMEDIATE_RE,r:2},{cN:"operator",b:"\\->|<\\-",e:hljs.IMMEDIATE_RE,r:1},{cN:"operator",b:"%%|~",e:hljs.IMMEDIATE_RE},{cN:"operator",b:">=|<=|==|!=|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||\\$|:",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"%",e:"%",i:"\\n",r:1},{cN:"identifier",b:"`",e:"`",r:0},{cN:"string",b:'"',e:'"',c:[hljs.BE],r:0},{cN:"string",b:"'",e:"'",c:[hljs.BE],r:0},{cN:"paren",b:"[[({\\])}]",e:hljs.IMMEDIATE_RE,r:0}]}};
hljs.initHighlightingOnLoad();
</script>
<!--MathJax scripts-->
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<p>Now that I'm ridiculously behind in the Stanford Online <a href="https://class.stanford.edu/courses/HumanitiesScience/StatLearning/Winter2014/info">Statistical Learning</a> class, I thought it would be fun to try to reproduce the figure on page 36 of the slides from chapter 3 or page 81 of the <a href="http://www-bcf.usc.edu/%7Egareth/ISL/">book</a>. The result is a curvaceous surface that slices neatly through the data set.</p>
<p>I'm not sure what incurable chemical imbalance explains <em>why</em> such a thing sounds like fun to me. But let's go get us some data, specifically the <em>Advertising</em> data set from the <a href="http://www-bcf.usc.edu/%7Egareth/ISL/data.html">book's website</a>:</p>
<pre><code class="r">Advertising <- read.csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv",
row.names = 1)
</code></pre>
<p>Previously, we fooled around with <a href="http://digitheadslabnotebook.blogspot.com/2014/02/linear-models.html">linear models with one predictor</a>. We now extend regression to the case with multiple predictors.</p>
<p>\[ \hat{y} = \hat{\beta}_0 + \hat{\beta}_1 x_1 + \hat{\beta}_2 x_2 +···+ \hat{\beta}_p x_p \]</p>
<p>Or, in matrix notation:</p>
<p>\[ \hat{Y} = X \cdot \hat{\beta} + \hat{\beta_0} \]</p>
<p>Where the dimensions of <i>X</i> are <i>n</i> by <i>p</i>, and \( \beta \) is <i>p</i> by 1 resulting in a <i>Y</i> of size <i>n</i> by 1, a prediction for each of the <i>n</i> samples.</p>
<p>Find a fit for Sales as a function of TV and Radio advertising plus the interaction between the two.</p>
<pre><code class="r">fit2 = lm(Sales ~ TV * Radio, data = Advertising)
</code></pre>
<p>Before making the plot, define a helper function to evenly divide the ranges. This probably exists somewhere in R already, but I couldn't find it.</p>
<pre><code class="r">evenly_divide <- function(series, r = range(series), n = 10) {
c(r[1], 1:n/n * (r[2] - r[1]) + r[1])
}
</code></pre>
<p>Generate a 2D grid over which we'll predict Sales.</p>
<pre><code class="r">x = evenly_divide(Advertising$TV, n = 16)
y = evenly_divide(Advertising$Radio, n = 16)
</code></pre>
<p>Using the coefficients of the fit, create a function <em>f</em> that computes the predicted response. It would be nice to use <em>predict</em> for this purpose. From a functional programming point of view, it seems like there should be a function that takes a fit and returns a function equivalent to <em>f</em>. If such a thing exists, I'd like to find it.</p>
<pre><code class="r">beta = coef(fit2)
f <- function(x, y) beta[1] + beta[2] * x + beta[3] * y + beta[4] * x * y
z = outer(x, y, f)
</code></pre>
<p>I copied the coloring of the regression surface from the examples for <a href="https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/persp.html">persp</a>. I'm guessing the important part is create a color vector of the right size to cycle through the facets correctly.</p>
<pre><code class="r">nrz <- nrow(z)
ncz <- ncol(z)
nbcol <- 100
# Create color palette
palette <- colorRampPalette(c("blue", "cyan", "green"))
color <- palette(nbcol)
# Compute the z-value at the facet centres
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
# Recode facet z-values into color indices
facetcol <- cut(zfacet, nbcol)
</code></pre>
<p>OK, finally we get to the plotting. A call to <a href="https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/persp.html">persp</a> sets up the coordinate system and renders the regression surface.</p>
<p>With the coordinate system we got in the return value, we plot the line segments representing the residuals, using a higher transparency for points under the surface. We do the same for the actual points, so they look a bit like they're underneath the surface.</p>
<pre><code class="r"># Draw the perspective plot
res <- persp(x, y, z, theta = 30, phi = 20, col = color[facetcol], xlab = "TV",
ylab = "Radio", zlab = "Sales")
# Draw the residual line segments
xy.true = trans3d(Advertising$TV, Advertising$Radio, Advertising$Sales, pmat = res)
xy.fit = trans3d(Advertising$TV, Advertising$Radio, predict(fit2, Advertising),
pmat = res)
colors = rep("#00000080", nrow(Advertising))
colors[residuals(fit2) < 0] = "#00000030"
segments(xy.true$x, xy.true$y, xy.fit$x, xy.fit$y, col = colors)
# Draw the original data points
colors = rep("#cc0000", nrow(Advertising))
colors[residuals(fit2) < 0] = "#cc000030"
points(trans3d(Advertising$TV, Advertising$Radio, Advertising$Sales, pmat = res),
col = colors, pch = 16)
</code></pre>
<p><img alt="Fit surface" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfgAAAH4CAYAAACmKP9/AAAEJGlDQ1BJQ0MgUHJvZmlsZQAAOBGFVd9v21QUPolvUqQWPyBYR4eKxa9VU1u5GxqtxgZJk6XtShal6dgqJOQ6N4mpGwfb6baqT3uBNwb8AUDZAw9IPCENBmJ72fbAtElThyqqSUh76MQPISbtBVXhu3ZiJ1PEXPX6yznfOec7517bRD1fabWaGVWIlquunc8klZOnFpSeTYrSs9RLA9Sr6U4tkcvNEi7BFffO6+EdigjL7ZHu/k72I796i9zRiSJPwG4VHX0Z+AxRzNRrtksUvwf7+Gm3BtzzHPDTNgQCqwKXfZwSeNHHJz1OIT8JjtAq6xWtCLwGPLzYZi+3YV8DGMiT4VVuG7oiZpGzrZJhcs/hL49xtzH/Dy6bdfTsXYNY+5yluWO4D4neK/ZUvok/17X0HPBLsF+vuUlhfwX4j/rSfAJ4H1H0qZJ9dN7nR19frRTeBt4Fe9FwpwtN+2p1MXscGLHR9SXrmMgjONd1ZxKzpBeA71b4tNhj6JGoyFNp4GHgwUp9qplfmnFW5oTdy7NamcwCI49kv6fN5IAHgD+0rbyoBc3SOjczohbyS1drbq6pQdqumllRC/0ymTtej8gpbbuVwpQfyw66dqEZyxZKxtHpJn+tZnpnEdrYBbueF9qQn93S7HQGGHnYP7w6L+YGHNtd1FJitqPAR+hERCNOFi1i1alKO6RQnjKUxL1GNjwlMsiEhcPLYTEiT9ISbN15OY/jx4SMshe9LaJRpTvHr3C/ybFYP1PZAfwfYrPsMBtnE6SwN9ib7AhLwTrBDgUKcm06FSrTfSj187xPdVQWOk5Q8vxAfSiIUc7Z7xr6zY/+hpqwSyv0I0/QMTRb7RMgBxNodTfSPqdraz/sDjzKBrv4zu2+a2t0/HHzjd2Lbcc2sG7GtsL42K+xLfxtUgI7YHqKlqHK8HbCCXgjHT1cAdMlDetv4FnQ2lLasaOl6vmB0CMmwT/IPszSueHQqv6i/qluqF+oF9TfO2qEGTumJH0qfSv9KH0nfS/9TIp0Wboi/SRdlb6RLgU5u++9nyXYe69fYRPdil1o1WufNSdTTsp75BfllPy8/LI8G7AUuV8ek6fkvfDsCfbNDP0dvRh0CrNqTbV7LfEEGDQPJQadBtfGVMWEq3QWWdufk6ZSNsjG2PQjp3ZcnOWWing6noonSInvi0/Ex+IzAreevPhe+CawpgP1/pMTMDo64G0sTCXIM+KdOnFWRfQKdJvQzV1+Bt8OokmrdtY2yhVX2a+qrykJfMq4Ml3VR4cVzTQVz+UoNne4vcKLoyS+gyKO6EHe+75Fdt0Mbe5bRIf/wjvrVmhbqBN97RD1vxrahvBOfOYzoosH9bq94uejSOQGkVM6sN/7HelL4t10t9F4gPdVzydEOx83Gv+uNxo7XyL/FtFl8z9ZAHF4bBsrEwAAQABJREFUeAHsnQd8FNXWwM+U3dmS3fRK7yBio6lgAVQULPBU1M9nb099NuzdZ/fp82FX7O2p2BtgQcVesIIKShEICel1szO7U75zNplkNiRkAyEJ5JxfbubemTv33vnP7p57z20ALEyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkyACTAB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AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSyPwD5Qv7ooYZhXPAAAAAElFTkSuQmCC" style="border: none;" /> </p>
<p>To be honest, this doesn't look much like the figure in the book and there's reason to doubt the information conveying ability of 3D graphics, but whatever - it looks pretty cool!</p>
Christopher Barehttp://www.blogger.com/profile/01570188379488941406noreply@blogger.com0