{ "metadata": { "name": "nb_in_octopress" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "A few weeks ago, Fernando Perez, the creator of IPython, wrote a [post](http://blog.fperez.org/2012/09/blogging-with-ipython-notebook.html) about blogging with IPython notebooks. I decided to take a stab at making this work in Octopress.\n", "\n", "I started by following Fernando's outline: I first went to [http://github.com/ipython/nbconvert](http://github.com/ipython/nbconvert) and obtained the current version of the notebook converter. Running ``nbconvert.py -f blogger-html filename.ipynb`` produces a separate html and header file with the notebook content. I inserted the stylesheet info into my header (in octopress, the default location is ``source/_includes/custom/head.html``) and copied the html directly into my post.\n", "\n", "I immediately encountered a problem. ``nbconvert`` uses global CSS classes and style markups, and some of these (notably the \"hightlight\" class and the ``
`` tag formatting) conflict with styles defined in my octopress theme.  The result was that every post in my blog ended up looking like an ugly hybrid of octopress and an ipython notebook.  Not very nice.\n",
      "\n",
      "So I did some surgery.  Admittedly, this is a terrible hack, but the following code takes the files output by nbconvert, slices them up, and creates a specific set of CSS classes for the notebook markup, such that there's no longer a conflict with the native octopress styles\n",
      "(you can download this script [here](http://jakevdp.github.com/downloads/code/convert_notebook.py)):"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "#!/usr/bin/python\n",
      "import os\n",
      "import sys\n",
      "\n",
      "try:\n",
      "    nbconvert = sys.argv[1]\n",
      "    notebook = sys.argv[2]\n",
      "except:\n",
      "    print \"usage: python octopress_notebook.py  /path/to/nbconvert.py  /path/to/notebook_file.ipynb\"\n",
      "    sys.exit(-1)\n",
      "\n",
      "# convert notebook\n",
      "os.system('%s -f blogger-html %s' % (nbconvert, notebook))\n",
      "\n",
      "# get out filenames\n",
      "outfile_root = os.path.splitext(notebook)[0]\n",
      "body_file = outfile_root + '.html'\n",
      "header_file = outfile_root + '_header.html'\n",
      "\n",
      "\n",
      "# read the files\n",
      "body = open(body_file).read()\n",
      "header = open(header_file).read()\n",
      "\n",
      "\n",
      "# replace the highlight tags\n",
      "body = body.replace('class=\"highlight\"', 'class=\"highlight-ipynb\"')\n",
      "header = header.replace('highlight', 'highlight-ipynb')\n",
      "\n",
      "\n",
      "# specify 
 tags\n",
      "body = body.replace('\"\n",
      "header = header.replace('body {', 'div.ipynb {')\n",
      "\n",
      "\n",
      "# specialize headers\n",
      "header = header.replace('html, body,',\n",
      "                        '\\n'.join((('h1.ipynb h2.ipynb h3.ipynb '\n",
      "                                    'h4.ipynb h5.ipynb h6.ipynb {'),\n",
      "                                   'h1.ipynb h2.ipynb ... {',\n",
      "                                   '  margin: 0;',\n",
      "                                   '  padding: 0;',\n",
      "                                   '  border: 0;',\n",
      "                                   '  font-size: 100%;',\n",
      "                                   '  font: inherit;',\n",
      "                                   '  vertical-align: baseline;',\n",
      "                                   '}\\n',\n",
      "                                   'html, body,')))\n",
      "for h in '123456':\n",
      "    body = body.replace(']"
       ]
      },
      {
       "output_type": "display_data",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD9CAYAAABQvqc9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlYVdX6B/DvUchSc0zQACUFBZwNMzWTQjRREcRUyjRt\nsMG6eS1/3e7vuVdv5U8fu5Vdy6x7LS3nCTGR1Aw1lUjFIbXEAWVQKqcknMD9++O9OKIezjn7rD18\nP8/DY+ph71c6vKz9rrXe5dA0TQMREdlCJdUBEBGR9zDpExHZCJM+EZGNMOkTEdkIkz4RkY0w6RMR\n2YhbSX/48OHw9/dHy5Ytb/ial19+GaGhoWjdujWysrLcuR0REbnJraQ/bNgwpKWl3fDvU1NTsW/f\nPmRnZ+OTTz7B888/787tiIjITW4l/S5duqB27do3/PuUlBQMHToUANChQwecPHkShYWF7tySiIjc\n4KPnxfPz8xEUFHTp94GBgcjLy4O/v/9Vr3M4HHqGQURkWRVtqqD7RO61Ad0owWuaZsqPb77R0L27\nhpo1NTzxhIZFizR8+62G9es1fPedhkmTNHTsqKFWLQ3PP6/h+PGbX+/vf/+78n+TUT74tbDP1yI3\nV8Mbb2jw85Pvp48/1rB0qYZNmzRkZWmYNk1DUpIGf38N99zzd/z4o/qYjfDhCl1H+gEBAcjNzb30\n+7y8PAQEBOh5S68pLgb+53+A5GTg//4PWLIEqFr1+td17gy8+ipQUAC8/TbQogXw4YdAfLz3YyYy\notmzgT/9CXjsMWDdOqBZs+tf06YN8OyzQEkJEBcHPPQQkJQEjB0L3KTCTOXQdaQfFxeHmTNnAgAy\nMjJQq1at60o7ZvT990DbtsCJE8COHcDgweUn/Cvdfbck+zlzgDFjgIEDgaIi78RLZERnzkgiHzsW\nWL0amDy5/IR/JR8f4L77gN27gXPn5IfB7t1eCdcy3BrpJyUlYe3atfjtt98QFBSEcePG4cKFCwCA\nESNGIDY2FqmpqQgJCUG1atXw2WefeSRolVaulCT/0UdA//4V//wHHwS2bwdeeAF45BEgNRWoUePy\n30dFRXksVrPj1+Iyq30tCgqAnj2BiAhgyxbgzjud/9yoqCjcdRfw8cfAl18CDz8sT9odO+oXr5U4\nNFcLQ54MwuFwuT7lTatXyyNocjLQqZN717p4EXjxRWDbNmDFCqBWLc/ESGR0x47J4CcpCfjrXwF3\n13GsWAEMHQrMmCE/SOzEldzJpO+kNWuAQYOAxYuBBx7wzDU1DXjlFWDDBnmCqFPHM9clMqqiIiA6\nGujaFZg40f2EX2bTJpkn+/JLICbGM9c0AyZ9nWzeDMTGAgsXygjFkzQN+POfpeSzcqXULIms6Nw5\noFcvIDgY+PRTzyX8MmvXAgMGABs3Ak2aePbaRsWkr4MTJ4B77wUmTQISE/W5R2mp1PfbtwfGj9fn\nHkSqDRsGnD4NzJsHVK6szz0++kg+Nm2q2DyBWTHpe5imAQkJQKNGsrJAT7/+Kj9cpkyRJWlEVjJn\njqzS2boVqFZNv/toGjBihHw/LVoEVLJ4S0kmfQ97911g7lzgu++A227T/34ZGZLwN22yz+MpWd/B\ng0CHDkBaGtCunf73O39eVvTExgJvvKH//VRi0vegsgScmSk1SG+ZMgWYPl32Avj6eu++RHooKZF5\nsMREYPRo7903N1d+wKxdK8tCrcqV3Gnxhx/XnDsnS8CmTvVuwgdkGedddwHvv+/d+xLp4R//kNr6\nqFHevW9QEPDmm8Dw4TJnRpdxpF+Ot96SEX5Kipr7798vj8ObN3v/hw6Rp+zcKcszt28HGjTw/v0v\nXpR2DfHx3v+h4y0s73hAWcLdskUmcFUZP17W73/1leeXthHpTdMk4Q4YILvPVcnOlp26mZlA48bq\n4tALyztu0jRg5EjgtdfUJnxAmrQdOiR7A4jMZt484NQpWUmjUmioNEZ89ln5/iYm/assWiQTQH/+\ns+pIZLXQtGmyY/fUKdXREDmvqEgGLVOm6LcevyJGjQKOHpWnZmJ555LiYunwN3s20KWL0lCuMny4\n1EPfflt1JETO+ctfgPx84L8Ndg1h+XL5QbRzp7V2vbOm74ZJk2SZpNHKKYcPSxvnH39UMxlGVBHZ\n2dKMcMcOY71fNU3W7iclSanHKpj0XXTqlNT+0tONuaZ39Gjg7Fnpx09kZI8/DjRvbsxNUZs3y96b\nvXuB6tVVR+MZTPou+vvfZdL088+VhXBTv/0GhIXJkwh36pJR7d4tK3b27TNu35vHHpPvpb/9TXUk\nnsGk74Jff5U3webNwD33KAnBKW++Cfz0EzBrlupIiMo3cCAQGSmr34zq4EGJcdcuoH591dG4j0nf\nBWYpnRQVSQkqLQ1o3Vp1NERX27ED6NFDRvl6NlTzhJdfBqpUkXk8s2PSr6C8PKBVK/mpb6RJpxv5\n4AM5zCU5WXUkRFfr109WvZlh52turpytm51t/oOLmPQraNQoab36z396/dYuKS6WElR6OhAerjoa\nIrF1K9Cnj4zy77hDdTTOeeop2YBp9to+k34FnDghk6I7dgCBgV69tVvefFPqktOnq46ESCQkyATu\nyy+rjsR5e/fKsacHDph7JQ+TfgWMHy//4426YudGjh8HQkLM98OKrCk7G+jcGcjJAapWVR1NxQwc\nKH22jLAD31VM+k46e1a6V65eDbRo4bXbesyoUbK9/Z13VEdCdvfCC0DduvIEajbbtsmZvQcOyMSu\nGTHpO+mTT4ClS2VrthmVTUTt2wfUrq06GrKrY8dkRdnu3eZd/tirl2zYUt0YzlXssumE0lKZuB0z\nRnUkrgsKAnr3lkNeiFSZOlXq+WZN+IB04HzvPem9bxe2S/opKUDNmnKEm5mNGSNLOM+dUx0J2VHZ\n3hYzLNG8mS5dgNtvB1atUh2J99gu6f/zn7Jj0OwHkzRvLnsMFixQHQnZ0ezZsknQjHNiV3I4gJde\nAv71L9WReI+tavrbt0sNLyfHGu1Vly4FJkwANm1SHQnZiaYBLVtKWSQmRnU07jtzBmjYEMjIMF9v\nK9b0b2HqVGmraoWED0hdv6BANscQeUt6uvzarZvSMDzmjjvk3Aqjt2LxFNuM9H//XXbg7doF3H23\nrrfyqvHj5Vzf//xHdSRkF4MGycamkSNVR+I5hw4B7drJr2barMUlmzfx4YfA2rXA/Pm63sbrfvlF\nTvw6cIDLN0l/hYXSlTYnRxZEWElCgjSNe+451ZE4j+WdG9A04KOPZCOJ1fj5yTzFZ5+pjoTs4LPP\ngMRE6yV84PKErvphsL5skfTXrZP/kV27qo5EHy++KD/U7LTWmLzv4kVg2jTzbmS6lYcekn/jhg2q\nI9GXLZJ+2Sjf7Ms0b+T++4EaNYCVK1VHQla2cqW0Io6MVB2JPhwO6b5p9fkxy9f0rVyDvNLHHwPf\nfMN1+6Sf+HgpJT7zjOpI9PPLL0DTpsDhwzKQMjrW9MvxxRfyZrVywgdkRcWqVXKeLpGn5eVJmTQp\nSXUk+vLzA6KjgblzVUeiH0snfU2Tiadhw1RHor9atWTd/uzZqiMhK/rsM2lFbKbljK566ing3/9W\nHYV+LJ30f/hBetN06aI6Eu8YPlzqkeoLdmQlmibnTgwfrjoS7+jRAzhyBNi5U3Uk+rB00v/sM+DJ\nJ607gXutqCjZhJaVpToSspLvvpOmZFadwL1W5cqSN6w6oWvZidwzZ+RkqW3bpBWxXYwbB/z6KzBl\niupIyCqeflomN83cjryiDhyQU7Xy8ox9wAoncq+QnAzce6+9Ej4gI5Q5c6T1LZG7iouBRYuAwYNV\nR+JdjRtLF9HkZNWReJ5lk75dJnCv1aiR9BBZulR1JGQFS5bIPhAr9aty1pNPAjNnqo7C8yyZ9A8f\nBrZskaWadjR8ODB9uuooyAo+/1ySnx3Fx8vu3F9+UR2JZ1ky6X/xBTBggLRMtaO+fYHMTODoUdWR\nkJnl5krb7r59VUeiRvXqsgx63jzVkXiW5ZK+pgFffgk88YTqSNSpWlUOe7byBhPS3xdfAI8+Kit3\n7OqJJySfWInlkv727TKJ2bGj6kjUevxxYNYs1VGQWWma1LOHDFEdiVrR0dJj/+efVUfiOZZL+rNm\nyVZxu6zNv5GHH5blZnv3qo6EzCgrCzh/noMnHx/JJ1YaQFkq6V+8KMsVH39cdSTq+fjItnkrvVnJ\ne+bM4eCpzODBUuJRv6PJM9xO+mlpaQgLC0NoaCgmTpx43d+np6ejZs2aaNu2Ldq2bYu33nrL3Vve\n0Pr1QN26QPPmut3CVMpKPFZ5s5J3XLwo80FWb67mrHbtZF5j40bVkXiGW0eEl5aWYuTIkVi9ejUC\nAgLQvn17xMXFITw8/KrXde3aFSkpKW4F6oxZszjKv1JkJFCpkqzk6dBBdTRkFt99J0dvtmihOhJj\ncDguj/Y7d1YdjfvcSvqZmZkICQlBcHAwAGDQoEFYunTpdUnfmW3CY8eOvfTfUVFRiIqKqlAs587J\nzkH2nbnM4bg82mfSJ2eVlXbosscek0HUBx8Avr7q4khPT0d6erpb13Ar6efn5yPoij4HgYGB+P77\n7696jcPhwMaNG9G6dWsEBATgnXfeQURExHXXujLpuyItTUYmDRu6dRnLefxxGZ28+67U+Ylu5sIF\nYOFCeTqky4KDgZAQOajokUfUxXHtgHjcuHEVvoZbNX2HE7M87dq1Q25uLrZv346XXnoJ8Tptk509\nW34a09VCQuQNu2aN6kjIDFavBkJDgXvuUR2J8QwcaI2NWm4l/YCAAOTm5l76fW5uLgIDA696zZ13\n3omqVasCAHr27IkLFy7g+PHj7tz2OkVFMtLv39+jl7WMAQN4jCI5Z/ZslnZu5NFHpafV+fOqI3GP\nW0k/MjIS2dnZyMnJwfnz5zFv3jzExcVd9ZrCwsJLNf3MzExomoY6deq4c9vrLF8u64nr1vXoZS2j\nf39pnHXhgupIyMiKi4Fly2SQQNcLDJSVgStXqo7EPW5VeX18fDBlyhT06NEDpaWleOqppxAeHo5p\n06YBAEaMGIGFCxdi6tSp8PHxQdWqVTFXh94ACxbwjXozjRrJI/uaNXIqEFF5VqyQyUp/f9WRGFdZ\niad3b9WRuM70h6gUFQEBAcDBg4CHHyAs5b33gB9/tO5pQOS+QYNkJ/ezz6qOxLiOHAEiIuRXI/Qk\nsuUhKsuXA506MeHfSv/+ciCE2euRpI8zZ2RezK7tyJ3VoAHQpo08FZmV6ZP+ggUywUI3FxQEhIXJ\nkjOia6WlyUlzfn6qIzG+gQOB+fNVR+E6Uyf9oiJg1SqOTpw1YIC536ykHw6enJeYKCP94mLVkbjG\n1EmfpZ2K6d/fGkvOyLPOngVSU4GEBNWRmEO9ekD79uYt8Zg66c+fz1U7FREQIEvOVq1SHQkZyddf\nA23bctVORSQmStsXMzJt0i8qkt2Ddj3KzVWPPsqNWnQ1lnYqLj5eRvrnzqmOpOJMm/RTU1nacUVC\nAvDVV9yoReLcOSmT9uunOhJzqV8faNnSnE/Npk36ixfLIxZVTFAQ0KQJsG6d6kjICFauBFq1kiRG\nFWPWEo8pk/7Zs7LE7JqOD+Skfv3M+WYlz1u4kD2rXNWvn7StMNtTsymT/urVskGCa4pdk5AgvXgu\nXlQdCal04YKU+rhqxzVBQUDjxsDataojqRhTJv3Fi/lGdUfTpsBddwEZGaojIZXWrpXW29c0xqUK\nMGOJx3RJv6QESElh0ndXv37yw5Psa8kSfh+5KzFRvo6lpaojcZ7pkv66dXLAA0/Ick9ioiR99e32\nSIWLF6UXE5O+e0JCZH+DmQ5NN13SX7yYy8s8oWVLOTR92zbVkZAKmZlArVpAs2aqIzE/s5V4TJX0\nL16URykmffc5HCzx2BlLO56TkCDtTczy1GyqpM/RiWdx6aY9aRoXQ3hSixby1Lxjh+pInGOqpM/S\njmfddx9w8iSwd6/qSMibdu2Spnvt2qmOxBocDmnLkJysOhLnmCbpa5o8krKNsudUqiQb3JYuVR0J\neVNZacfhUB2JdTDp62DPHtmJy9GJZ8XHM+nbDUs7ntepE5CfD+TkqI7k1kyT9JculY6aHJ141kMP\nydm5hYWqIyFvyMkB8vKAzp1VR2ItlSsDffqYYwBlmqSfnMw2ynqoUgXo0UO245P1paQAvXoBPj6q\nI7GehARzlHhMkfQLCmSysWtX1ZFYU9++5nizkvvKnpjJ86Kjgaws4Ngx1ZHcnCmS/rJlQM+ewG23\nqY7EmmJjpQ9LUZHqSEhPJ04AP/wAdO+uOhJruuMOoFs34z81myLpJydz1Y6eatUCOnSQ3upkXamp\n8rRcrZrqSKzLDKt4DJ/0T58GNmwAHnlEdSTWZoY3K7mHpR399eoFrFkDFBerjuTGDJ/009JkOVSN\nGqojsba4ODk2r6REdSSkh3Pn5EmuTx/VkVhb7drAvfcC33yjOpIbM3zSZ2nHO4KCpHvp+vWqIyE9\npKcDERHSEZL0FRcnq6SMytBJ/8IFOXGexyJ6R1ycTJqT9bC04z19+sj3kVFPpjN00l+/XvpV3323\n6kjsoWyEYpZugeQcTZP/r0z63tGkiZxMl5mpOpLyGTrpp6RwlO9NrVtLI649e1RHQp60ZYus2AkL\nUx2JffTta9wSj2GTftnohBNP3uNwGL8eSRXHwZP3Gfn7yLBJf/duOXeyVSvVkdiLkd+s5Bomfe9r\n3x747Tdg/37VkVzPsEm/7I3KBmve1bWr/MBlAzZrOHxYGqx17Kg6EnupVOnyhK7RGD7pk3dVqSLb\n9JcvVx0JecJXX0mbDTZY8z6jPjUbMukXFspkIhusqcGlm9bBwZM60dHA5s3A8eOqI7maIZP+8uUy\n2mSDNTViY2Ur+ZkzqiMhd5w+DWzcyAZrqlStKudVrFihOpKrGTLpc3SiVp06QNu2kvjJvFaulFo+\nW5ioY8S6vuGS/pkzkmxiY1VHYm9mOQWIbmzZMi55Vq1XL+Drr6W7gFEYLumvWSPn4NapozoSe+vT\nRyYBjbqVnG6utFTKpEz6ajVoAISGGqunleGSfkoK0Lu36iioaVPgzjuBrVtVR0KuyMiQ9iWNGqmO\nhIxW4jFU0tc0GV1ydGIMRnuzkvNY2jGOPn2M1dPKUEk/K0t6hDRrpjoSApj0zYwtTIyjdWup6Rul\np5Whkj5HJ8bSuTNw6JDs6CTz2L9f1oa3b686EgKkq4CRBlBM+nRDPj5yTKXRD3qmqy1bJqtGKhnq\nu9vemPTLUVAAHDggo0syDiO9Wck5nBcznqgoYOdOacKmmmGS/ldfyajS11d1JHSlRx6R5WZ//KE6\nEnLGqVNyeEdMjOpI6Eq33y5tGVJTVUfigaSflpaGsLAwhIaGYuLEieW+5uWXX0ZoaChat26NrKys\ncl/D0o4x1aoFREYa+6Bnuuzrr4EHHpAFEWQsRnlqdivpl5aWYuTIkUhLS8Pu3bsxZ84c7Llmijo1\nNRX79u1DdnY2PvnkEzz//PPlXmvtWhlVkvEY5c1Kt8bBk3H16gWsWiWn06nkVtLPzMxESEgIgoOD\n4evri0GDBmHpNXv3U1JSMHToUABAhw4dcPLkSRSW06y9XTugdm13oiG9cHeuOZSUSHMvbm40Jj8/\nIDxcBrgqudVlOz8/H0FBQZd+HxgYiO+///6Wr8nLy4O/v/9Vr6tSZSzGjpX/joqKQlRUlDuhkQeF\nhEiZZ8sWLgM0sk2bgKAg+SBjKntqdnXOJT09Henp6W7F4FbSdzh5rJV2zVa08j5vypSxCA11JxrS\nU9mblUnfuFjaMb4+faSD8OTJrp0KeO2AeNy4cRW+hlvlnYCAAOTm5l76fW5uLgIDA2/6mry8PAQE\nBFx3LSZ8Y2Nd3/i4VNP4WrSQMumuXepicCvpR0ZGIjs7Gzk5OTh//jzmzZuHuGsa4cfFxWHmzJkA\ngIyMDNSqVeu60g4ZX8eOQG6ufJDx7N8PnDgB3Huv6kjoZsp256rc8OhW0vfx8cGUKVPQo0cPRERE\nYODAgQgPD8e0adMwbdo0AEBsbCwaN26MkJAQjBgxAh999JFHAifv8vEBevbk7lyjWrZMJnC5C9f4\nVD81O7RrC+4qgnA4rqv7k/HMnw98/rkxNpjQ1R5+GHjlFZ44ZwbnzgH+/kB2NlCvnnvXciV3MumT\n006dkpUhR45w84+RnDwJNGwIHD0q57KS8SUmyg/o/65md5kruZMPg+S0mjWB++6TDSZkHGlpwIMP\nMuGbicoSD5M+VYjqeiRdj0s1zSc2Fli9Wko93sakTxXSu7ecvcrducZQUiIjfe7CNRc/PyAiQs3u\nXCZ9qpAmTeTQ+h9+UB0JAcCGDUBwMFDO1hcyOFVPzUz6VGFxcSzxGAVLO+ZV9n3k7TUsTPpUYazr\nGweTvnlFRMi+ip07vXtfJn2qsPvvl2Wbhw6pjsTe9u4FioqkQy2Zj8Oh5qmZSZ8qrHJlWX3A0b5a\nZbtwXWncRcag4qmZSZ9cEhcHpKSojsLeli3jDlyz69IF+Pln2VjnLUz65JLu3YGMDOD331VHYk/H\njgFZWdJ+gczrttuAHj1kGbS3MOmTS6pXBzp3ljNZyftWrJCEf8cdqiMhd3m7xMOkTy7jKh51UlJY\n2rGKnj2Bb78Fzpzxzv2Y9MllffpIx82SEtWR2Mu5c8DKlXLQNplfnTpA27bAmjXeuR+TPrms7DzW\njRtVR2Iva9cCzZvLVn6yBm8ujGDSJ7dwd673sbRjPWVJ3xs9rZj0yS1xccDSpaqjsA9NY9K3opAQ\n7/W0YtInt7RrBxQXAz/9pDoSe9i+HahSBQgLUx0JeVrfvt4ZQDHpk1vKtpJztO8dZaN87sK1nr59\nvVPXZ9Int8XHA8nJqqOwh5QUNlizqvbtZdPd/v363odJn9wWFSXlHW9uJbej3FwgJwd44AHVkZAe\nKlWSH+h6PzUz6ZPbyraScxWPvlJSZG2+j4/qSEgv3qjrM+mTR3hrEsrOkpOllEbWFR0NbNsG/Pab\nfvdwaJq3z20pJwiHAwYIg9xw8iTQsCFQUCB9ecizTpwAGjWScwyqVVMdDempXz/54T5kyK1f60ru\n5EifPKJWLaBDBzZg00tqKvDQQ0z4dqD3UzOTPnkMSzz6YWnHPnr3Blav1q8BG5M+eUzfvmzApoez\nZ4FVqyQZkPXVrSubHlet0uf6TPrkMUFBUndev151JNayZg3QqhVQr57qSMhbEhKAJUv0uTaTPnlU\nv376vVntiqUd+4mPlyXQejw1M+mTR5WNULgYyzNKS2V9ft++qiMhb2rYEAgO1uepmUmfPCo8XFaY\nbN6sOhJr+P57Kes0aaI6EvI2vUo8TPrkUQ6HlHgWL1YdiTUsXixfT7KfhAQp7Xn6qZlJnzwuIUGS\nFUs87tE0YNEiIDFRdSSkQni4HHy/ZYtnr8ukTx4XGSk99vfsUR2JuW3bBlSuDLRsqToSUsHh0KfE\nw6RPHqfXm9Vuykb57J1vX0z6ZBqs67uP9Xxq3x44dQr4+WfPXZNJn3TxwAPA4cPS/50qbs8e4PRp\n+aYn+6pUSX7wL1rkwWt67lJEl/n4yLF+LPG4ZvFiebSvxO9Q2+vfH1iwwHPX41uKdJOY6NkRip1w\n1Q6VeeABaam9b59nrsekT7rp1k3KFPn5qiMxl4MH5WvGYxEJkBVcnizxMOmTbm67Tc785Gi/YhYv\nlrYLlSurjoSMwpMlHiZ90tWjj3q2HmkHCxdy1Q5d7cEHZWHEwYPuX4tJn3QVEwPs2iXHKNKtHTok\ntdvoaNWRkJH4+EjnTU88NTPpk65Y4qmYBQtk1Y6vr+pIyGg89dTMpE+6e/RRYP581VGYw/z5wIAB\nqqMgI4qKAvbvl6dBdzDpk+5Y4nHOgQOymS0qSnUkZES+vjLB7+5TM5M+6a5KFZZ4nLFggazN9/FR\nHQkZ1YAB7j81u5z0jx8/jpiYGDRt2hTdu3fHyZMny31dcHAwWrVqhbZt2+K+++5zOVAyN67iubV5\n81jaoZt7+GF5IjxwwPVruJz0J0yYgJiYGOzduxfR0dGYMGFCua9zOBxIT09HVlYWMjMzXQ6UzK2s\nxJOXpzoSY8rOlvLXgw+qjoSMzNdX1uzPnev6NVxO+ikpKRg6dCgAYOjQoUhOTr7hazWepmF7VarI\nqpR581RHYkwLFsg3Mzdk0a0MGuRe0ne5elhYWAh/f38AgL+/PwoLC8t9ncPhQLdu3VC5cmWMGDEC\nzzzzTLmvGzt27KX/joqKQhRnsywnKQkYMwYYPVp1JMYzbx7wr3+pjoKMLj09Hd9+m45Dh4AXX3Tt\nGjdN+jExMTh69Oh1f/72229f9XuHwwHHDU562LBhAxo0aIBff/0VMTExCAsLQ5cuXa573ZVJn6wp\nKkoaR/38M9CsmepojGP3buC334DOnVVHQkZXNiD+4w/g9tsBYFyFr3HTpL9q1aob/p2/vz+OHj2K\n+vXr48iRI/Dz8yv3dQ0aNAAA1KtXDwkJCcjMzCw36ZP1Va4MDBwIzJkD8Gf8ZbNmAY89xtIOOS8p\nyfVJf5dr+nFxcZgxYwYAYMaMGYiPj7/uNcXFxTh9+jQA4I8//sDKlSvRkgd+2tpjjwGzZ/PQ9DIX\nL0rSHzxYdSRkJu3auX7WgstJ//XXX8eqVavQtGlTrFmzBq+//joAoKCgAL169QIAHD16FF26dEGb\nNm3QoUMH9O7dG927d3f1lmQBkZGS6LZsUR2JMWzYAFSvDrRqpToSMhOHQ0b7Ln2uZoClNQ6Hgyt8\nbORvfwOKioB331UdiXrPPQcEBwP/HTMROW3PHiAiouK5k0mfvG7PHukimZtr7zr2uXNAQACwdSvQ\nsKHqaMiMXMmdbMNAXhceDtSvD6Snq45ErRUrgObNmfDJu5j0SYknngBmzlQdhVqcwCUVWN4hJX75\nBWjaVEo8d96pOhrvO3kSaNRIumrWrq06GjIrlnfINPz8gK5d7duEbeFCmddgwidvY9InZYYNAz7/\nXHUUakyfLv9+Im9jeYeUOX8eCAwENm4EQkJUR+M9e/ZIi9zcXPbOJ/ewvEOmctttskP3vxu7bWP6\ndGDoUCZc1LS0AAAJ8UlEQVR8UoMjfVJq2zYgLk4mNF3dVm4mFy4AQUHA2rVsOkfu40ifTKdNG6Bu\nXeDbb1VH4h3LlwOhoUz4pA6TPin35JNS8rCD//wHGD5cdRRkZyzvkHLHjgFNmgD79gF33aU6Gv0U\nFMgO3NxcabJG5C6Wd8iU6taVur7Vl2/OnAkkJjLhk1oc6ZMhbNokrRn27rXmhO7Fi7ID+YsvgI4d\nVUdDVsGRPpnW/ffLCPibb1RHoo+vvwZq1JB/J5FKTPpkCA6H9JafOlV1JPr48ENg5Ej5dxKpxPIO\nGcbp09KEbOdO6TNvFfv3ywj/8GHgjjtUR0NWwvIOmdqddwKDBgGffqo6Es+aOlX67DDhkxFwpE+G\nsnMn8MgjskPX11d1NO4rLpZDUn74AbjnHtXRkNVwpE+m17KlNF9btEh1JJ4xZw7QqRMTPhkHkz4Z\nzquvApMmAWZ/+NM0YMoUmcAlMgomfTKcXr2AP/6QpmRmtm6dlHe6dVMdCdFlTPpkOJUqAaNHA++8\nozoS90yYALz2mjU3m5F5cSKXDOnsWSA4GFizBoiIUB1NxW3bBvTuLcs1q1RRHQ1ZFSdyyTJuvx14\n8UXg3XdVR+KaCROAUaOY8Ml4ONInwzp2THrP794N1K+vOhrn7dsn/XUOHJC9B0R64UifLKVuXTlO\n8b33VEdSMZMmAc8/z4RPxsSRPhlaXh7QurWM9v39VUdzawUFQIsWwM8/A/XqqY6GrM6V3MmkT4b3\nyivy6/vvq43DGaNHyzm4H3ygOhKyAyZ9sqSjR+XEqW3b5FBxozp8GGjbFvjxR6BBA9XRkB0w6ZNl\nvf46cPIk8PHHqiO5sWHDpDvoW2+pjoTsgkmfLOvYMaBZMyAzE2jcWHU019u5U3beZmfLYSlE3sDV\nO2RZdetKD5tx41RHUr433pAPJnwyOo70yTROnQLCwoCUFKB9e9XRXLZ+PTBkCPDTT9yMRd7FkT5Z\nWs2astP1hReA0lLV0YiLF4ExY6SOz4RPZsCkT6YyZIi0aDDK6Vr//rf8mpSkNg4iZ7G8Q6azY4dM\nmu7apXYDVEEB0KaNNIVr0UJdHGRfXL1DtjFqlBykXjbSViExUfYP/OMf6mIge2PSJ9v4/XcgPByY\nPRvo2tX791+yBPjLX2TD2O23e//+RAAncslGatSQuv4TT8gafm86dQp46SW5PxM+mQ1H+mRqr74K\n7N0LLF0KOBz630/TgP79pdXzhx/qfz+im+FIn2xn/HjpzeOtBmcTJgD5+eY93IWII30yvQMHgPvv\nB1asAO69V7/7rFwJPPmktIIIDNTvPkTO4kifbKlxY2DqVCA+Xs6k1cPBgzJ/MHcuEz6Zm4/qAIg8\nITER+PVXWb+/bp1nWzDn5wOxscD//i/w4IOeuy6RCkz6ZBnPPQecOQNER0vi98S5uvv3AzExcvzh\nSy+5fz0i1VjeMZj09HTVIRiGK1+LUaOkVUN0tLQ5dseuXbIHYMwY4LXX3LuWu/i+uIxfC/e4nPQX\nLFiA5s2bo3Llyti6desNX5eWloawsDCEhoZi4sSJrt7ONviGvszVr8Vf/ypN2Tp1AmbMkGWWFaFp\nUruPjpbVOs8951IYHsX3xWX8WrjH5aTfsmVLLFmyBA/epMhZWlqKkSNHIi0tDbt378acOXOwZ88e\nV29J5BSHA3jxRemJM2mSNEP75RfnPnffPqBHD1kKumQJMHiwvrESeZvLST8sLAxNmza96WsyMzMR\nEhKC4OBg+Pr6YtCgQVi6dKmrtySqkJYtgR9+kPNqmzaVTVUrVlzflvn33yXBP/OMLP3s3h3YsgXo\n2FFN3ES60twUFRWlbdmypdy/W7Bggfb0009f+v0XX3yhjRw58rrXAeAHP/jBD3648FFRN129ExMT\ng6NHj1735+PHj0efPn1u9qkAZOOAMzRuzCIi8oqbJv1Vq1a5dfGAgADk5uZe+n1ubi4CubOFiEgZ\njyzZvNFIPTIyEtnZ2cjJycH58+cxb948xMXFeeKWRETkApeT/pIlSxAUFISMjAz06tULPXv2BAAU\nFBSgV69eAAAfHx9MmTIFPXr0QEREBAYOHIjw8HDPRE5ERBVX4VkAD1uxYoXWrFkzLSQkRJswYYLq\ncJQ5fPiwFhUVpUVERGjNmzfXJk+erDokpUpKSrQ2bdpovXv3Vh2KcidOnNASExO1sLAwLTw8XNu0\naZPqkJQZP368FhERobVo0UJLSkrSzp49qzokrxk2bJjm5+entWjR4tKfHTt2TOvWrZsWGhqqxcTE\naCdOnLjldZTuyOU6/st8fX3x3nvvYdeuXcjIyMCHH35o268FAEyePBkRERFOLwawsj/96U+IjY3F\nnj17sGPHDts+Lefk5ODTTz/F1q1bsXPnTpSWlmLu3Lmqw/KaYcOGIS0t7ao/mzBhAmJiYrB3715E\nR0djwoQJt7yO0qTPdfyX1a9fH23atAEAVK9eHeHh4SgoKFAclRp5eXlITU3F008/bfuVXadOncL6\n9esxfPhwAFIyrVmzpuKo1KhRowZ8fX1RXFyMkpISFBcXIyAgQHVYXtOlSxfUrl37qj9LSUnB0KFD\nAQBDhw5FcnLyLa+jNOnn5+cj6Ip2iIGBgcjPz1cYkTHk5OQgKysLHTp0UB2KEqNGjcKkSZNQqRJb\nQx08eBD16tXDsGHD0K5dOzzzzDMoLi5WHZYSderUwejRo9GwYUPcfffdqFWrFrp166Y6LKUKCwvh\n7+8PAPD390dhYeEtP0fpdxUf3a9XVFSE/v37Y/LkyahevbrqcLzuq6++gp+fH9q2bWv7UT4AlJSU\nYOvWrXjhhRewdetWVKtWzalHeCvav38/3n//feTk5KCgoABFRUWYNWuW6rAMw+FwOJVTlSZ9ruO/\n2oULF5CYmIjBgwcjPj5edThKbNy4ESkpKbjnnnuQlJSENWvWYMiQIarDUiYwMBCBgYFo3749AKB/\n//43bXBoZZs3b0anTp1Qt25d+Pj4oF+/fti4caPqsJTy9/e/tIH2yJEj8PPzu+XnKE36XMd/maZp\neOqppxAREYFXXnlFdTjKjB8/Hrm5uTh48CDmzp2Lhx9+GDNnzlQdljL169dHUFAQ9u7dCwBYvXo1\nmjdvrjgqNcLCwpCRkYEzZ85A0zSsXr0aERERqsNSKi4uDjNmzAAAzJgxw7nBol7Li5yVmpqqNW3a\nVGvSpIk2fvx41eEos379es3hcGitW7fW2rRpo7Vp00ZbsWKF6rCUSk9P1/r06aM6DOW2bdumRUZG\naq1atdISEhK0kydPqg5JmYkTJ15asjlkyBDt/PnzqkPymkGDBmkNGjTQfH19tcDAQG369OnasWPH\ntOjo6Aot2TTEwehEROQdXB5BRGQjTPpERDbCpE9EZCNM+kRENsKkT0RkI0z6REQ28v8ujsxbbCsI\noAAAAABJRU5ErkJggg==\n",
       "text": [
        ""
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "You can do pretty much anything else a notebook does as well.  The IPython team did the hard part."
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Where to go from here?"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "There's clearly a cleaner way to do this.  If the IPython team would be open to the idea, I think their HTML stylesheets should be modified so that notebooks can be embedded within any CSS framework with as few conflicts as possible.  This means getting rid of all top-level formatting in the style-sheets, and removing potentially common class names like \"highlight\".  Once this is done, ``nbconvert.py`` could output this directly, obviating the need for my unforgivable hack shown above.\n",
      "\n",
      "Second, I'd love to build notebook support directly into octopress.  If ``nbconvert.py`` is available on the user's system, it could be called directly from the Ruby script that generates Octopress HTML.  I have about as much experience with Ruby as I do with Swahili (read: None) so this would take some work for me.  I'd be happy to pass the baton to any Octopress gurus out there...\n",
      "\n",
      "Either of those options will smooth out the notebook/blogging combo considerably, and give me the potential to prognosticate Python in perpetuum.\n",
      "By the way, the notebook used to generate this page can be downloaded [here](http://jakevdp.github.com/downloads/notebooks/nb_in_octopress.ipynb).  Happy coding!"
     ]
    }
   ],
   "metadata": {}
  }
 ]
}