{"id":355,"date":"2015-04-17T14:03:27","date_gmt":"2015-04-17T14:03:27","guid":{"rendered":"http:\/\/drsfenner.org\/blog\/?p=355"},"modified":"2016-02-05T16:23:55","modified_gmt":"2016-02-05T16:23:55","slug":"pushing-ipython-notebooks-to-wordpress-3","status":"publish","type":"post","link":"https:\/\/drsfenner.org\/blog\/2015\/04\/pushing-ipython-notebooks-to-wordpress-3\/","title":{"rendered":"Pushing IPython Notebooks to WordPress"},"content":{"rendered":"<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>It turns out that I really, really like writing documents as iPython notebooks &#8211; at least shorter documents. I&#8217;m also (as you can tell, if you are reading this) into blogging about my technical (and recreational) endavors. Since blog posts are shorter documents &#8230; Captain Obvious? &#8230; it is a small step to wanting to do my blog posting, or much of it &#8230; or any of it with Python code, as an iPython notebook. However, WordPress is primarily a php and database mashup and it doesn&#8217;t really work well (natively) with Python or iPython.<\/p>\n<p>This has led several folks (like <a href=\"http:\/\/jakevdp.github.io\/\">Jake VdV<\/a>) to bail ship from WordPress to <a href=\"http:\/\/blog.getpelican.com\/\">Pelican<\/a>) and other folks (like <a href=\"http:\/\/matthewrocklin.com\/blog\/\">Matt R<\/a>) to not use notebooks directly in their posts. For myself, I decided to explore another option (b\/c I already had web hosting and I didn&#8217;t want to spin up additional servers, migrate my blog &#8212; again, etc.).<\/p>\n<p><!--more--><\/p>\n<p>I decided to make use of html as a common display format and use iPython&#8217;s conversion systems to feed the notebook. This process turned out to be more difficult than I wanted. I had originally hoped to add an element within my blog page that would be a &quot;direct&quot; link a notebook that was rendered by nbviewer. That didn&#8217;t work out so well: mainly b\/c displaying a webpage within another webpage is a pain-in-the-tail. It is understandable that it is difficult because arbitrarily linking to external content can be a severe security issue.<\/p>\n<p>There are ways around the cross linking issue (iframe is the &quot;builtin&quot; html construct &#8212; it sucks): ajax, requesting the remote resource on the server side and then displaying &quot;joined&quot; content to the client using php. I did this, it sort of worked, but it required me manually writing a &quot;wrapper&quot; post that included a php call to render the notebook on <a href=\"http:\/\/nbviewer.ipython.org\/\">nbviewer<\/a>). What was more difficult was getting all the elements of the nbviewer css integrated with the blog css theme. I don&#8217;t have patience for that sort of web development (not my cup of tea), so I kept looking for another option. In the end, I did have to do a bit of css work, but it amount to getting two pre-created css files onto my server. I can deal with that.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h3 id=\"My-Solution\">My Solution<a class=\"anchor-link\" href=\"#My-Solution\">&#182;<\/a><\/h3>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>What I settled on gave me the following capabilities.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In&nbsp;[1]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight\">\n<pre><span class=\"kn\">from<\/span> <span class=\"nn\">IPython.display<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Image<\/span>\r\n<span class=\"n\">Image<\/span><span class=\"p\">(<\/span><span class=\"s\">&#39;.\/resources\/chart.png&#39;<\/span><span class=\"p\">)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"output_wrapper\">\n<div class=\"output\">\n<div class=\"output_area\">\n<div class=\"prompt output_prompt\">Out[1]:<\/div>\n<div class=\"output_png output_subarea output_pyout\">\n<img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABFUAAADNCAYAAAB5GU\/2AAAABmJLR0QA\/wD\/AP+gvaeTAAAgAElE\nQVR4nO3dbZaiuhaA4e1Zdx6kRkIciTgSYSTiSCqORBwJ90d36IiAgHwk8D5r1TqnqhVCEpRsdsKh\nLMtSAAAAAAAAMMh\/axcAAAAAAAAgRARVAAAAAAAARiCoAgAAAAAAMAJBFQAAAAAAgBEIqgAA0OBw\nOKxdBCAInCsAgD3739oFAABgSlMN8MqynHRbgK+m6OffboNzBAAQKoIqAICgfBq8TTk4m2pbS5YZ\naNPWD33ofz6XDQCALoeSbysALQ6HAxe0WFXTQGuLfXIvx4nlbKVPbeU4AADbRVAF2JCp57VPOf3B\n3SbQhMHTK+oDQ9T7y5b7yp6OFQDgP4IqQEC2MIVgC8eAaTAwGo46g0Vf+Ie6AACsiaAK4KE9zy3f\n87FvHQOf6VGn+0J7f0YdAQCWRlAFWBEBhP6YChEmt91or\/lR39tk25U2HY66AwDMjaAKsCDuoE2L\nQIufGNj7gXYIG+03LeoTADAXgirAjAiiLI86Xw93hP1F24SDtpofdQwAmBJBFWBi3A3zC+0xPwYo\n4aCt\/EXbLI86BwBMgaAKMAGyI\/xHG02PAUm4aDt\/EPhdF\/UPAPgWQRVgJC7Ewkb7jceAfDtoy3VR\n\/\/6gLQAAYxFUAQZiML4ttGd\/DDq2i7Zd3uFwoL49RLsAAIYiqAL0xKBj+2jjdtTN9tHGy6Ce\/Ucb\nAQCG+N\/aBQB8x8XVftg2ps1fced2H9z+T3vPi\/r1W1mWb+twAQDQ5r+1CwD4zA4uuADeF9vmXFTP\nO8BOkkTyPP\/4ujRNJU3TWcowVJ7nq5VlqXqg789njvMpxPPoW0scC+cBAKAvpv8ADchUgLXXvrDE\ncR8OBzmdTh8HhFprKYpCiqKYrSx99S2LMUaMMZIkiSilFt33VPba9+cyV4AyxPPoW0seC5lbAIBP\nyFQBashOgWvPWSucA+MVRSFZlq1djK\/Q\/tNhYB6uvX7+AwD6I6gC\/HU4HDZ54Tt3mvQepkOI\/Luw\n3sPF9R6OEf3RHwAAANoRVAHErzR3Y4ykaToqrbnpvXYawlzyPO81n\/+b4+raZp99T6W+kO2WLXku\n5HkuWms5HA6ilOoVKHOn1hwOB9FaN\/YF+zp328aYavrAWEVRVGW2+7fbS5KkOoYkSSRJEhH5EwRM\nkqTaf\/14jTEvxzPneduXD5+Ja5oikLpUsD6k88g9L5qOwbKBc\/d8WwPZKgCALjz9B\/jLl8GDnTbQ\ndME55r2+LEz4zXH5xPeL628DhEtnaxlj5Ha7yel0qgIJWZZJURStAbOiKOR4PEoURVV\/yvNczuez\nKKWqQZkxpnrd5XIREZEsy8QYI\/f7\/atya61Fa10FSW6320vApCgKeT6forWu1lQxxkhRFNUA1QZf\nbJlEpBpA2nPFh\/UvbJ\/35TNyDfVz3re6CO08auvXRVG8bNOeF\/YYTqfTqP0BADAngirYva0PFty7\nfphGCINMdxDoczmfz6dcr9eXYJvWugpSNPVf+1qb2WH\/prWW4\/FYHW+SJBJF0cvr7Gu+LfPlcnnJ\nRnEHg7Z89\/v9baHa+vEqpeR4PMr9fn9rJztw5Rz2T9\/za6nPiRDPo77u93uvhXjnFsLnPgBgHUz\/\nwa6tkXGQpmmVaq2UerkIbps2IPKa2m3TtN0slLb3NqVZN6V8f3tHfC\/TIVw+Z6y4fF4Lxr1LbtnB\nU1uftIMsN1hR7zc2U6Qe1NBaSxzHX5e7XmY7aO1zHtUHviLvd+CnemIQ5mfPrzXPs1DPo758ybgE\nAKAJQRXs3pJ3nZIkkSzLRGst1+u1upNoB1buVAE7vUDkz8Xt+XyWoijkcrnI9XoVkT93su2Fc9t7\n64+dtKncNrByuVykKAr5+fn5KrBi93+9XuV0OlV36T8dly2HrRN7XDZolKapXC6Xl+35IMS7lZ8G\nfmsMCJuCB+50mTr7t6Y77\/Z9dorNp9eNFUXR6G1EUdT49xCCKPXgwR5+vqmnJYV4HvX1zfkGAMAS\nmP6D3VpjAGnnvNtAiA0S3G43KYqiddqAfX09TVspJXmev2R\/NE05cDWlcidJIj8\/P6Of5LPn6RCh\npoM3TV9YY72Ytn4aRdHgIJ87GOwahDFAGyfEfv6tMefDGvXEeQQAwHrIVMGurXHxW88cyfNcyrLs\nvEBN01Qej0fja4ZcMLelciul5HK5fHWRvMfpEG7\/WfuOemh31q2m\/uEu8lrnDvjq3LvqXa\/zYfFX\nbEtZltXPGrZyHvk2xRMAgD4IqgALstNYfn5+quktfS5M3YwVuw6JUkqez+eg\/dt9NQUo7HbH2Ot0\nCJc7qFrz55uyr+F+v7+dAzYzq21Kg820qrN\/U0q9ZXlZ7pQG4Bt9zrulsr9CPI9CC3iGmpUIAJgf\nQRVgQWmayu\/vr5xOp+qxqT8\/Px+DGcYY+fn5kfP5\/PLo1aELBXYFVbAfXYGYNaYA2UWI7eNfsyyT\nOI5bz4s0TaupZDbzK03TanqdHQzatX1s8NKu3zM0GPkNnweJfTGYfLVmELJLSOeRvSngLqa79LkJ\nAMBUWFMFu7bGYKG+iKy9iNVat178Ho\/Ht3VQRN7vHvbZt91vXdeChGjm6xN1mgzt50udG5fLpVo8\n2YrjuLNv20FglmVyu92qv9cfu2r\/P8syybKs2vblcpEsy2YNLtptH49HieM42OyYkPr4nL45F5Z4\nFG9o51GaptUC7Ofzudrm9XqtfvcJgUUAQBeCKtitpe\/I27t77jQb9ffxlXah2ibuY4ndi1e7EGzb\n9JkmNuXbLm7rbut4PMrpdCKoMpCvF9pTDALn5pbR3gF313GwmgIS9slQn4KBtq\/bRTe7gpd9tAVH\nbHksrbU8Ho+XQGjbe5vaqu1R6GvwtY8vIYRjD\/E8UkpVZXW3KfK6xlZbnw81SAkA2CaCKti9pe5A\n2YtcO\/CyF5D13y17oekOyOzf8jx\/uZNYf0pD11Mb7GOdbYDHZss0lWEOn54oEQpf7+BP2ZeXvDur\nlBo1SOvqs3agVr9bb4wZPHVujLHH5Atf+3iIlshWEQnvPAohiE+WCgDgE4Iq2LWls1Vslko9vfl6\nvVYXl03TBmxK9M\/PT\/Wey+UiWutqXRb3CUJdUw5sIOV2u72kfLuPNZ7DVqZDuLZ8oW2PLeQBhda6\n6uNa62qtCbuWgzGm9xQ6NyC6ByG3u6+WCqxMbc\/nUYjtBQBY3qHk2wJY\/MLJpj27Kc+f\/t192oKb\n2m0zWGxA5NO2m\/bhZsTMqW\/ZfLe3C+2QjzdN02oAKPJn3YY0TavB4ZCFZEPus0OE3N4hCLF+93ge\nhdhOAIB1EFQB5F+aO6cDPtlrX9nrce8JbbwM6tl\/tBEAYAiCKj1wt2IfuIj6Y8up3N\/aex\/Z+\/Fv\nGW27PK4t\/GTbxZ0aTDsBALpsOqgy1VoZU667seHq9k69zfrW\/d4vdLeayv2tvfcLFwPw7aAt10X9\n+6OrLcZeTwAA9iHooMqnQIePhxZimUM1JBBWr3cudGHRF9pRN+Gi7fxBRsS6xtR\/0\/UFbQcA+xVM\nUGUvX2B7Oc4lfJNdtIUnn+B7tH8\/DNDDQVv5i7ZZ3pR1zvUbAOyXl0EVvpheUR\/jjQmskLUC2nwc\n6s1ftE04aKv5LVXHXL8BwD54EVRhrupw1Fm3KYIpbdukrreLNp4G0xn8QDuEjfabli\/1SaAFALZn\nlaAKAYHp7blOuy5Q+gRXhtaVLxdmmAbtOS\/qd1nU9zYR8B0vhLoj0AIAYVssqMKF3rK2Wt9DLzy6\ngirf1stW63gvaL\/l7Tn4OxfqdF9o78+2UkcEWgAgHLMGVRi0+CHUdpjqgmKJC5OtXMRtGW3kH9pk\nOOoMFn3hn73UxV6OEwBCM0tQJYRUy73yoW36rncyVRmXDiqFGsTaKtojHNyZfUV9YIg9Dbj3dKxd\nqAcA8MOkQRUfBuzoZ08r36\/5WFwueJZHnW+LD58hS9jLcWI5W+lTWzmOJfD9BwDrmCSoQjAlXFO2\nHRc+n3HBMy363D59ynbzsQ+EWGZsT1s\/9KH\/+Vy2UHHNAQDL+CqoQjBlO4a2JYPZaXAR2R99Dn2N\neaR6k7IsJ90W4Kup+vk3OEfmx\/coAMxjVFCFYMp2uW0755Nz0G3PwZY9Hzv8subUQSAknCvhItCy\nTZyTwLIGB1UIqGwfbeyvLUwh2MIxAACwVQRaljd1ttiUmZbuNgE0GxRUIeq5L7R3ePhSBgAAUyPQ\n8p0t3FDawjEAc+kdVNnTADtN05f\/riVJEtFaS5Ikq5VhT+2Od7Q\/AABoQqDl3Z6nMO\/52IH\/fXrB\nHqeCGGPWLoKIiNxuNxGRVYMqbqbCnvoA\/qDNAQBAk6ZrhDkDLT7d6CGA8K7t2Am+YQ8+BlVE9tfx\n185Q8c0cU0AAAACwLXMHWta60cfjqcdbOvgGrKEzqLLXgbTWeu0ieMmnOwQAAADw3xyD6rmDKwRR\n5tWnT1DnCMl\/n16wVIdO01SSJBFjjGit5XA4iFKqyhoxxohSSg6Hg2itqyk6eZ6L1lqKonjb5tj1\nSJIkeXmf1lryPK\/2VS\/bkHLY4yyKQpIkkcPhUB1T03vdbTftdyl8sAEAAGAKZVm+\/dhrYvfHarvR\nO+UNYHe\/9bJhfl39AfBda1Bl6awEY4wYY6rFWa\/Xq4iIZFkmWmtJ01TSNJXL5SL3+70KUiil5H6\/\nS57nb9u73++ilBpclqIoXgIcdvvn81mUUnK5XEQpJVmWDS6HPU6bDXO9XuV0Or0cU\/39XftdEtOA\nAAAAMIeuQEuXbwbe9YE7QRR\/uG1BgAW+67WmylKez6dcr9eXQMXxeJT7\/f72AZdlWRWciKLobXFZ\nG9yYKvhwv99fyibyJwPldrtJmqaDyvF8PuVyuVQZJ\/bf7MK0rnqduPu1ASgAAABga9xB9Sd9pwS5\n2yKA4r96G9F+8NHH6T9LqwcPREROp9PLa+rZJ0mSyP1+f8kuMcZIHMejMlWaRFH0FqCxARMbSBlS\njvq27L\/XpwB17bdtuhAAAACwR20ZDWSkbENTBguwtsagylqdM4qixr9\/CozY4Isb5Hg+n5NOkWkq\ngzulZ0g5oijqHezps9+l8eEFAACAJXwztcf+t75OCsI3dJoYMKfG6T+hrZ1Rn3oz9dQfkfbAThRF\nVcbIHOXos9+l8WUEAAAA37jXqG4wBdtWnyZGm2Np3k3\/GcudenO73d6mDH2rKYBRFIU8n8+XwMfU\n5ejaL+upAAAAYE+aFrStZ6C4mSnYDzdzBVjSpoIqTf+dSn2tFJF\/mShucGPqcnTtd6r1YgAAAAAf\nDXm8MdkpEBGmBGFxrUGV0KJ8SimJokju97tEUTRLFofWWowxUhSF5HkuWZa9LSQ7Rzma9hvH8eKP\nVeZLCgAAAD4iOwUuslawpI+ZKiF1xLmyVET+PIHIPuL55+dHzudz4yOUpy7H5XJ5228cx1W2ylJC\n6gcAAADYh9CzU5IkWfy6XkQkTVNJ07T1960gawVLOJQfPoFC+pBK01SyLJPH4zHp1JjD4SCn00ny\nPK8yRpRSrVkoc5SjKAoxxojWepVpPyH1AwAAAGzfFhYmdccZS9JaS1EULw\/cEJn36aLGGDHGSJIk\ni49nttBX4K\/Gp\/\/UhTKgzvNc4jie9STtM51njnIopRaf7mO5j6RrEkLfAAAAwPZwHTqNJbJUiqKQ\nLMtWGdMwFQhz+hhUcR9R5euHVpqmkue5PJ\/PtyivMaZ35Fcp9dUHSlc5QtWn3ft+QPnafwAAABAW\nn8cmIdrDU0VtYIV+g6n1fvqPz9E9G8C4XC5vHwg2w6PPz7cfJl3lCFHfD52uR9u5P3Y+Y58fAAAA\noMmS14pNY4Q8z0Vr\/XYzNk3TalqNyJ\/MjDRNRSklh8NBtNatN17tNg+Hw9c3ekXkZZqN3Xf9iaIu\nOx5y9S1\/mqaSJIkURSFJklTX8+4+kySpjqlpX0tirIGp9Zr+Y7mBFZ8ifF0fEEqpr6fh9F0bpasc\nIZmrjYdsb8iHnU99EQAAAPNb6vpPKSW3261aU1HkT8Difr9XQQfLBhyUUlIURRWMsQGEPM\/lfD6\/\nvc8YI7fbTU6nU\/XUzyzLqid\/DmWMkePx+PKU0jzP5efnp3VcUx\/HDC2\/fb3WWq7Xa3VMSZJU60IW\nRSHP53O1NSJF\/E4UQMDKEUSkHPlWeC7EtrVl7vMDAACAcC19Tff7+1uKSHm9Xqu\/RVFURlFUikj5\neDzKsizLx+NRikh5uVzKsizL0+n08u9WHMcvf7fH427ffd3v7+\/gMtvyufuuly+O4zKKopf9xXFc\n\/d63\/O7f7Lbr27Cu12vjNpfGuABT6z39pxaI4fFUG+M+jq4MLPOjLPtNP3L7LNOQAAAAwrTktarW\nWqIoqjJGbLaFzdSwT8ux\/7XZHTbzpJ6RUX+fiLxklFju\/oaw5as\/YUcpJZfLpXeGyJDyW\/VjsO\/1\nLZs\/tLEO\/Ddo+k+d7ZA+TglCP3tru6HHyTQkYL9YzA7oh3MFW6e1ltvtJiKvwZMoiqq1S9y\/u2uq\ntK0d4gYamgId7lSjIeuP2O02bbPvOi1Dyy\/yJzC01pQeYG2jMlXqyFwJT8iZKUuaMgsGwDKGZqS1\n\/YzJbuP8h6+m6stznyucP\/CRzT4xxogxRuI4FqVUtf6J\/bfT6dRre\/UMkLZgRBRFozJVurY5haYM\nFmDPvspUqSNzxX+0zXw+1emnC0PaBOhnyXNpqm1x\/mMufYMOc\/exObfvyzHCH0tnR9WDKvZ3m8GS\n53m1AKvIv4CGUqrXQrNNgRN3Gs+YsjZtsz5Fqc3Q8oeGYC2mNkmmSl3TnXusp343iYuOdUy53guw\nF213xbt+fDTm\/AdcXVkifX5C9m3GKLZljf6slJI4jt+CJ\/a\/dlqNG6yI47hx3ZE0TeVwOLwEPeyT\nhFzuk4SGltVdA8YqikKOx2PvIMmQ8oco9M9F+GWWoIrV9kWH+bVdcMFfcy64y3mHEPQdMG4RgRaI\ndE\/R2WKwZGoEW\/Zl6TbUWsvz+az+X+RfAOP5fFZTgqwkSaoAjH3kcJ7nkmXZ22vtNpteNzRTxe77\nfr9LkiRSFMXLuiyfslTGln+INQMynPuYw6TTf7q4X\/z1zsxFwfeo030Z075jvkToR5gTn1vdmuqD\nOtsW2nMZbfXa9L1IG6zDbYs+bWCDZUvSWkuWZW8LsiZJIlmWvQUrbBDjfD7L8Xis\/m4zXlyXy0WM\nMR9f11eaplIUhdxut2qBXRGR6\/XaO0gzpPx92Xo7Ho+tmTBL4DzH1A6lB72Ki4rhqDMsYegFC\/0Q\nXfjcmh51Gg4G8GGgndbRdb3RVf9Lr60yls30UH8Xt21js0q01l9lgtS3p5SqfsboW\/6hZfp2W0OF\n0l8QHi+CKnV8ob2iPhCKIUEY+vA+DL37iO9Q336hPbaBdpzf2OsHHsCAvugrmJOXQZUmewks7OU4\nAZ6Gsl0MQPxAOyyPzKHto43nMXYqjzsNaKttYYzpPd1GKVUtmot\/tt5HsL5ggipNQhyUhVhmYA2c\nK+HhosVftM18CF7tG+0\/jSmmG291akdRFIMWdl16So3vttov4JeggyqfTLWA1ZSLYW24uoFFMdXI\nHwzYw0FbTYOBNJrQL5pNuaDsp3rlMw4WfQFL2nRQZSpEOIGwseDuPLhgCRdtNw71hr721lfGLjQ7\n9Tbcbe2l7vGO9sfSCKoAQM3WgjBTX9zvbbCwZbTlZ2Qf4Bsh9p8xmSVTHNvU6wry+bY\/tDnWQlAF\nAL7kexBmqoUVuVjZLtq2GfWCqfjWl6bMCpnKXAEo3+oe06ONsTaCKgCwsKXXg2nb35Btc8GyfbTx\nP9QF5jJH31ors2Rqc0\/ZCDFrCO1oT\/iEoAoAeGyKAMy3T1JibvK+7L299378WMaYfjZFgBwMxkPX\n1H4EwrG2\/9YuAACgXVmWvX8Oh0PjzyddrwttgJkkieR5\/vF1aZpKmqatv\/tmyfJN+cS7kNjzwKf+\n3rc\/9+F7H1\/TGnXT9Znd9tP22Y9hur434Z+u88CiPbE2MlUAYMPGpoWHetfncDjI6XT6OBDVWktR\nFFIURfW7iIgxZtbyjVUv7xJC7QNj+HqsfftzH7738TWtcX5Zvva9PSKDxS9TtMfUix8Dbf63dgEA\nAH7Z40U+d\/Df7SVjxbfslLnQx\/3kTl\/YQz\/0mVv\/Uy3wjv7mqPOmbRBowRwIqgAAKnsZSNfZu\/h4\nt+XB3p76On3cf1s+10JTbweCLNNaM7DRJ9BC+\/olhM9G1lQBgJ3qmpu\/1JeX1lryPJc8z0VrLYfD\nQZRSb3fVkySRJEne3m\/f1\/b3tu3VtW3fGCNJkohSSg6HQzVNYKi+5bdrOxRFUZV\/TT5fxHw7Z37N\njKw0TSVJEimKQpIkqY6lrX919ec0TVsDJkmSVP\/W1AeLopA0TV\/6d32qkbuNennq55Utiz2GPtuf\nos+Hen656gtuwi9TrWG2R33XB1rTp\/bFfPqsJzXkdWshUwUAdqLPRcvSdwPu93v139PpJFprMcZI\nlmVSFEU1AGsLZBRFUW3DMsbI7Xbr3F7TduqMMXI8HiWKomrAlue5\/Pz8yOPxEKVU7+PsW3673oUt\n5+l06r2PudgLzLUvett8M+9+rWMyxlQDe621XK\/Xqt8mSfKy7smn\/qyUkvv9LnmevwQWiqKo3md\/\nd9n9i8hL\/z6fz1UwREREKSW3202Koqj6vDFG7vf7y+vs++17+m5\/ij4f8vnl2mumYIiGPm3P18\/P\nKW3p2MlUmsfcGUqrTu0qAQD4a+mvBREpRaS8Xq8vf4\/juBSR8vF4VL\/Hcfz2\/svl8lLmT9v7\/f2t\nfo+i6OXf69uPoqiMoqgqQ1mW5ePxKEWkvFwug46zb\/ltOU+n09v73fIuzcfLBdvWXT+f3rsW2871\nfnQ6nUb1ZxF561+2b7l93n2N3Zfbv91t27\/\/\/v6+lcGeG+7r6udG3+239fkhQj+\/XGv3Tcxj7GeV\nT7ZwDFPZ63GPtVZ9Lblfpv8AAFblZoJY9k7ymCeVdG2v79Sdoijk+XxWU38spZRcLpdBWSpjsKjo\nNLrSgksP7jTW+6ntV24\/7dOfT6fTW8ZWnucSRVHr1CCbxVLvy\/UMEq21RFH0ss\/n8\/n2Ovf1Q7Zf\n\/\/sSfD6\/fOiXmF7Z8jhs+zP08dpTTZcY8vPpGPakq+3wR1vfWVJbO82B6T8AABFZby5\/U4DCnWbQ\ntFbC3Nuzg9Wmbc09IIuiaPagzRihXyz69lSrvu3cpz8nSSK3262aAmQDH9frtXGb7ponbeeDG9jR\nWsvtdqv2af8WRVFVBvfvQ7e\/ZJ\/39fzCvk39ueTzlM2tqdfzlqZBjeHbd63llmeOMpKpAgAQkfW+\nANsGOFEUjVoUdortdQVV9urTXcqlf8aWPzR9+rMb4BD5l8ky9ok\/9QwTux1jjBhjJI5jUUpVa7zY\nf+u7RklTBguA6YT4WbcVQ7KRtqSeleKzeptMgUwVAMCqmgId9k77p0Fh0\/Sgru31zXqx+21bwNZ9\nzTfGTG\/CMG0Xd6Hcye3bn202iX2aVlfgwv5dKdW6eLOrHlSxv7v7dM\/XodufS4jn19YGWgD+aPq+\n2coCuKF8n9bZMk9RfjJVAACrsk8RcTXdaW8bXA7ZXt+740qpl3Uk3P0dj8dRA8W+5cf3PmW0hHTx\n17c\/2wBLmqa9AohxHDcGHdI0lcPh8LJPpZTEcfwWPLH\/tVPi3PN1yPansKXzK6T+CWC8rmyWELjZ\nKSGbImuFoAoAoGK\/WJZmpxHYx8RmWfayQKdSSp7P58timUmSyPP57L29OI4Hrc+SJInc7\/dqjQp3\nPZahWSpDy++TUC6YxkwNCuXCtU9\/tlOA7LnzqY\/a\/te27XoAUmtd9Vc3IyWKInk+n2\/vGbr9b4R8\nfrlC6Y8A5jHnArhTf76EMtWnL7fex24AAICKLPjYO\/n7eFP7qFP70\/QoY\/sIV\/sTx3F5vV7fHkF7\nuVzethfH8cv2+jxSuSz\/PRbW\/ak\/3raPvuVve7TrWo98XbIvDDVF2dY6vrb2tI8Atn21b3+uv7\/p\nkd9Nfdz2vz7bto9Wrpe7a599tj9F3w71\/HL5fK4BWJ\/7+bbG++vb2bIxx3j4+0YAACpLZSccDgc5\nnU6S53l1N9sugNmkz2ssm12itf7qrrjdjlKq+hlrSPl9EEqWyjdCOcap+nOTufvlUv0+tPPLFUo\/\nBLC+MWuxNGVgDP3M8fXJPnMYeqwEVQAAb5b64nSDKvALF0\/A\/Oh7AL71KWDSNaWld9Bgh59VQ46Z\np\/8AAN7YLxDunjYzxvQOBCmlqoU8Q7G3di+d+et7Om4fbf3ccu1xkAJgek2fIX3XBhnyObS3zyp7\nbdAHQRUAQCv7hbK3L9JPlFKDFr0NyV7bm0CiH7Z8brnoZwDm1DdTpf6atgDNXj+v+l4HM\/0HAPDR\nXHdU7foHWB93zf+hLjAX+haApY15oo17o8H9fY\/61AFBFQBAL3yxbhdt24x6wVToSwDW8M2jlMlW\n\/udTPRBUAQAMwuBgO2jLz9wLUuoJQ9F\/AKxpSFCl\/hlFQOVVV32wpgoAYBBSQsNH2\/XXNC+desMn\n9BUAPuIzaR5kqgAAvsLgIRy01TTIPkAT+gWAreB64V1Xnfy3dGEAANtSluXLI2nhH\/dxwVwgfc\/W\no9vv6fv75La\/2y8AIHRTfpbleS5aaymK4u3ftNYvT30zxkiSJKKUksPhIFpryfP85T1JkjQ+Kc7u\nZw5d9UFQBQAwCQaZfmka7GF6bQEW+v821duYQAoAfKaUkvv9\/hYcMcbI\/X6vngRZFIUcj8cqsHK5\nXKQoCjmfz2KMqd5XFEVjgKYoCrnf7\/MdSAvWVAEATKppDYr63zEP6ntdTYv8tf0bwkE7AsB3tNYS\nRdFLYEREqiCLzTqx\/zXGVIGWJElEay3H49Hbz2AyVQAAs+Eu\/ry67ppTz+vr6v+0jZ+a2olsFAD4\nXpIkcr\/fXzJMjDESx3EVQLnf73I6narfRf5kuaRpWr3eRwRVAACLcAcmBCF6J8YAAA7xSURBVFnG\n6Rrs1Qd81LNf6m1F26zvUwCFQAqAPZrr+8iudWKzU4wx8nw+X7JT3Ne53OlBa2uqH6b\/AABW0TVV\nou01ezJVfTAlxV99zoG216K\/tnqlTgHgnQ36T60+Bag+9aeLT0EVnv4DAPBWnzv5W72bv+Qdc55c\n46+mNu86F2i3V2111FanAIBluVOAbrebnE6n6t+6AiddWSxNr1saQRUAgLeGDC59HmR+KvNaAz4C\nLOEYGmwJ4bzoq+8xEjwBAL\/VF6R1s1SUUo2L2Yr8C5a4a620Pf1nDQRVAABB6bqbP2SQ2WcQOtW2\nPpXZB6z1EaZPfWvq82Luc2XM+ePTeQQAaGcDJ\/f7XaIoess8SdNU7ve7JElSPTY5TdMqq8UGVZRS\n8nw+qylERVFIkiTyfD6XPaC\/DiXfQgAAvLGDObAOC7pxrgDAttjv\/Tk+29M0lSzL5HK5VE\/1afp3\n1+l0qgIoIn+CKFrrlyBKHMeSJImcz+dZyt1VJwRVAABAb\/XMFS4jAGB6a2YJ8rm+Hd98Z88VMLdB\nk8fj8TKdp67POirGGCmKQpRSH9db+VZXfRBUAQAAo5HFAgCfDQ2SrPl5OqSsfO777Zu2nCuoopQS\npdRqi8qO1VUfPFIZAACM5l5gkMUCYO\/aBrEhfR4OzWb4dhvwQ9N3+JSBlTRNJc\/zl7VQQvGpHshU\nAQAAsyCLBcBWEUzo1pUhQR0ta8xUMttGU66tYqf6JEnSuJaKr\/rUAUEVAAAwO7JYAISI4Mn0qNNl\nfTuda++Lkfc5foIqAABgcWSxAPARAeD1UPfTmnJtnL0GVvoeN2uqAACAxbEWC4C1NQ06+fxZT9NC\nqV3\/jldt9TXVVKy9BVaGBKXIVAEAAF5hoANgTlOuE4HlkOH4z9DvySm+V\/d03gw9VoIqAADAewRa\nAIxFxsP27KlNpwyIjHlv03b2UN+DsngIqgAAgBDt6aIawDBkNezLlgb7c3y3TT11Z6tTgcYeF0EV\nAACwCWSzANjS4BrDhRxMC63vhlbeLt8eC0EVAACwWTy6E9g2MtbQxve+4Xv5+go9a2WK8hNUAQAA\nu0NWCxC2Ld0lxzLW7DNb\/84J8XycsswEVQAAAISsFiAEIQ7e4Je5+9DWAyhdQjg\/5ygjQRUAAIAO\ne75ABnwRwmANYZmiT\/H90My3tW3mLg9BFQAAgIHIagGWQTAFcxvSx7ayDsqS1gqwLLlfgioAAAAT\naQu2iHDxDQwV+gKYCEtXfyO49725s3rWzBoiqAIAALAAAi5APwxgsZZ636Mvzqvre3GoNdvov9X2\nDAAAsCNlWbb+HA6H1h9gL2yft+fFHiRJInmeL77fNE0lTdPW3\/eq\/pm8p764hq7vRbfu+75uLQRV\nAAAAVkbABXu31wHs7XYTY8zi+zXGvARzjDGzl8MYI2maSlEUs+5nCu7nL9YVwmfC\/9YuAAAAANp1\nXVAypQhbwNop61siS6UoCsmyTJIkmX1fU7GBFfonuhBUAQAACNTYgEuf9wNzY70Kf2it1y6Ct9yM\nFfoqmjD9BwAAYIP6zEHvmlrENCPMKZTpPkmSvAUc8jwXrfVbdkeapqK1rqa3FEUhaZqKUkoOh4No\nrVvXT7HbPBwOopT6OnPEGCNJkrzsu2vaTZIkbxkkfcufpqkkSSJFUUiSJNXnhrvPJEmqY2ral++Y\nDoQuZKoAAADsVN8BLVkvmFJI0ymUUnK73aQoClFKicifgMX9fq+CDpYNOCilpCiKKhhjAwh5nsv5\nfH57nzFGbrebnE4n0VqLMUayLJOiKEYtYmuMkePxKFEUvez75+dHHo9HdRyuesBlaPnt67XWcr1e\nq2NKkkSMMVWA5fl8ita6sQwhYDoQGpUAAADAl0Sk9QewQusPv7+\/pYiU1+u1+lsURWUURaWIlI\/H\noyzLsnw8HqWIlJfLpSzLsjydTi\/\/bsVx\/PJ3e46423df9\/v7O7jMtnzuvuvli+O4jKLoZX9xHFe\/\n9y2\/+ze77fo2rOv12rjNEIXWjzEvpv8AAADga+UX04ywDyHe4ddaSxRFVcaIzbawmRr2iTn2vza7\nw2ae1DMy6u8TkZeMEsvd3xC2fHbqj6WUksvl0jtDZEj5rfox2PeG8LSfoUqmAsHB9B8AAADM6tNA\n+tPgJLSBON6FGFCxtNZyu91E5DV4EkVRtXaJ+3d3TZW2tUPcQENToMOdajRk\/RG73aZt9l2nZWj5\nRf4EhkKd0jNWyVQg\/EWmCgAAAFbVleXSJ9OFjBe\/hd42NvvEGCPGGInjWJRS1fon9t9Op1Ov7dUz\nQNqCEVEUjcpU6drmFJoyWPYs9P6N75GpAgAAAK\/1vRM8ZHDD3eVlbOFRtPWgiv3dZrDkeV4twCry\nL6ChlOq10GxT4MSdxjOmrE3brE9RajO0\/HvmBn1D7uP4DpkqAAAA2IRPGS9kvww3RT2EPthUSkkc\nx2\/BE\/tfO63GDVbEcdy47kiapnI4HF6CHvZJQi73SUJDy+quAWMVRSHH47F3kGRI+fcu9P6N7xFU\nAQAAwO5MHXzZekBmzDFtqQ601vJ8Pqv\/F\/kXwHg+n9WUICtJkioAYx85nOe5ZFn29lq7zabXDc1U\nsfu+3++SJIkURfGyLsunLJWx5R9iqwGZLfV3DMP0HwAAAKDFN3ehvxlk+Xr32z2mPmX09TiG0lpL\nlmVvC7ImSSJZlr0FK2wQ43w+y\/F4rP5uM15cl8tFjDEfX9dXmqZSFIXcbrdqgV0Rkev12jtIM6T8\nfdl6Ox6PrZkwoeJpQPt2KLfySQcAAABsRN8B2tyX8mPLsYW1VKZiMz3s4rZtbFaJ1nqShWDt9pRS\n1c8Yfcs\/tEzfbss39Pn9IqgCAAAABGrubJih27fbZOFO7BH9fp+Y\/gMAAAAEaq3pSUtuc8+MMb2n\n2yilqkVzASyHoAoAAACwQ3NnquB7SqlRi9UCWA7TfwAAAAA0+mZNFYYZ2Bv6\/T6RqQIAAABgsLbB\nI1kq2DMCK\/tDUAUAAABAL30fo0xgBXtFQGV\/\/lu7AAAAAAD8VpblpgaLRVFIkiTVwq5pmr4s8lr\/\nfSnGGEmSRIqiWHzfn1AnQDOCKgAAAAAabS2YIvInoPLz8yPGmGqgbowRY0z1miFP3Zm6bLfbzcsA\nAnUCNGP6DwAAAIDdsMGTPM9Fay0iwqOIAYxGUAUAAADA5EJasNMGV4CxWEdov5j+AwAAAGBSvgZT\n3HVBkiSRJEne\/r9NURSSpqkopeRwOIjW+qvpMHatkMPhIEqpzv3b17btO0mSt8CQzcSpZ+GkaSpa\n6+p47Holtix2+32m23wqV70s7vabsoOG1ImPfO33mBeZKgAAAABm4Vu2ilJKtNZyu91Ea10FIj4F\nEIqiqF5rB\/p5nsv5fK6CE0PY90ZRJJfLRYqieFvXxd338XiUKIre9m2PRylVrTuilBKRPwGK+\/3+\nVj4b9FBKVevK2Lq4Xq9ijJHb7SZJkjSWZ0i5bDncY1VKSZ7nkmXZS+BkSJ34hiyVnSsBAAAAYAY+\nDjeu12spIuXv72\/1tziOyziOX36Poqj6\/XQ6lSJSPh6Pl23Fcdz49y6Px6OMoqiMoujlfY\/HoxSR\nxrLV92G3Yev39\/e3FJHyer1Wr7H7cN9r93G5XF62bX+vH2\/9WN066VMud1v1OoqiqKrzoXXiGx\/7\nOZbD9B8AAAAAs9nCXfzb7San06nKArFsBsiQbIqiKOT5fFZTiSyllJxOp7fX3+\/3t30rpV72rbWW\nKIqqLBR3H2757H\/rU4Xq02zsvroyePqUS+RPHT0ej7e6c7c\/tE58soX+je8w\/QcAAADALMqyrNbR\nKD2aBjSEO\/BvW+NjyON+7WubFse1U5OstiCIyHvgw32v+74oiqq1Spq2F0VRY8Cjy5ByKaWkKArJ\n81yKoqim9TyfT4mi6O0Y6up14hMbUAm1b2MaZKoAAAAAmM3WB5xNGSxLaAqqiEi1Dkkcx9XaJm6m\nytyZH\/VyGWPk5+dHzufzS\/ZKHMezlmMpW+\/f+IxMFQAAAACzshkrIQ5AbZDALrA61fZs9oirPo2o\naxpOPVukHlRx\/3673STPc3k+n5M8PnpIuexitsaYl+CTW5dD6sQXofZnTI9MFQAAAACzs4GVEMVx\n3Di4T9NUDofDoOk\/NtjQFKBpCqrYgETba92gTxzHb8ET+1+71slUQZU+5bL1Yh+7bBVFIff7vfp9\nSJ34gIAKXARVAAAAACwi1MBKkiRVoMI+htg+FthOsxnidDrJ\/X6XJEmqdUbsPurSNH17bZqmjYvn\naq2rbdhAhQ2APJ\/PUWVt06dcbgaKDbDkef6SjWL\/PqRO1kRABXVM\/wEAAACwmBCnAtkgwPl8luPx\nWP3dZoYMZRdtvd1u1SKsURTJ7+\/vy\/btvouikCzLXhZsPZ1Ob\/vWWkuWZW+LzyZJIlmWTZKlMrRc\n1+tVzuez\/Pz8VH+7XC5VWX9+fqQsy0F1spbQ+i2WcSjpFQAAAAAWFuqTU2zWhV0E9hv2STh9t9X1\n1J01fSqXPU77mnoGSz1zZUidLCHUvoplEFQBAAAAsBru\/sNn9E98wvQfAAAAAKsJcTpQnTGm9zQg\npVS1aCz8Fnq\/xDIIqgAAAABYlbuAbYiDWKXU26OAEa6Q+yKWx\/QfAAAAAN5gQIu10PcwBpkqAAAA\nALxhB7RMvcCS6G8Yi6AKAAAAAO+EPiUIYaCP4VsEVQAAAAB4yc1acX8HvkWfwlQIqgAAAADwGsEV\nTIU+hKkRVAEAAAAQBIIrGIs+g7kQVAEAAAAQlHpwpf53gL6BpRBUAQAAABCk+kCZbIR9cwMp9AEs\nhaAKAAAAgE1oymBhcL19BNOwJoIqAAAAADbFHVwzDWR7aFP4hKAKAAAAgM1iitA2kH0EXxFUAQAA\nALAbbYvcuv+G9ZGNglAQVAEAAACwO02DdAby66HuESqCKgAAAAAg7VOFPr0O\/VGn2BqCKgAAAADQ\noG2gT2CgW1v9iFBH2B6CKgAAAAAwAMGWP\/Z2vEATgioAAAAAMIGhwZah21nCkLISPAEIqgAAAADA\nrIYGH4YGYaZEoAQYhqAKAAAAAHiEwAYQjv\/WLgAAAAAAAECICKoAAAAAAACMQFAFAAAAAABghP8D\n4+z\/lwebPkYAAAAASUVORK5CYII=\n\"\n>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>As you can see, I wanted to give my readers the maximum flexibility to view the notebook in the way that worked best for them. You can either view it:<\/p>\n<ul>\n<li>within my blog (and I&#8217;m assuming that&#8217;s how folks will find the notebook the first time),<\/li>\n<li>through nbviewer, or<\/li>\n<li>download the notebook and experiment.<\/li>\n<\/ul>\n<p>I love option three because it really gets at the heart of what is most enjoyable about programming, data analysis, and this whole technical experience (for me).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>All that said, here&#8217;s how I put together a simple system to accomplish this (on WordPress).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h3 id=\"A-Python-Script\">A Python Script<a class=\"anchor-link\" href=\"#A-Python-Script\">&#182;<\/a><\/h3>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h5 id=\"A-few-imports-and-globals\">A few imports and globals<a class=\"anchor-link\" href=\"#A-few-imports-and-globals\">&#182;<\/a><\/h5>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In&nbsp;[&nbsp;]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight\">\n<pre><span class=\"c\">#!\/usr\/bin\/ipython --                                                                      <\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">os<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">os.path<\/span> <span class=\"kn\">as<\/span> <span class=\"nn\">osp<\/span>\r\n\r\n<span class=\"c\"># host and blog constants                                                                  <\/span>\r\n<span class=\"n\">hostUser<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&quot;username&quot;<\/span>\r\n<span class=\"n\">remoteHost<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&quot;hostname&quot;<\/span>\r\n<span class=\"n\">remoteNotebookDir<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&quot;server\/directory\/for\/notebooks&quot;<\/span>\r\n<span class=\"n\">blogUser<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&quot;blogusername&quot;<\/span>\r\n<span class=\"n\">blog_xml_url<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&quot;http:\/\/<\/span><span class=\"si\">%s<\/span><span class=\"s\">\/path\/to\/blog\/xmlrpc.php&quot;<\/span> <span class=\"o\">%<\/span> <span class=\"n\">remoteHost<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>I&#8217;ve never actually needed to <code>import Ipython.&lt;xyz&gt;<\/code> before. Turns out, you need to be using an <code>ipython<\/code> environment to do that. So, my she-bang line calls out to ipython.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h5 id=\"pushNotebook\">pushNotebook<a class=\"anchor-link\" href=\"#pushNotebook\">&#182;<\/a><\/h5>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In&nbsp;[&nbsp;]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight\">\n<pre><span class=\"k\">def<\/span> <span class=\"nf\">pushNotebook<\/span><span class=\"p\">(<\/span><span class=\"n\">nbFilepath<\/span><span class=\"p\">):<\/span>\r\n    <span class=\"n\">nbFilename<\/span> <span class=\"o\">=<\/span> <span class=\"n\">osp<\/span><span class=\"o\">.<\/span><span class=\"n\">basename<\/span><span class=\"p\">(<\/span><span class=\"n\">nbFilepath<\/span><span class=\"p\">)<\/span>\r\n\r\n    <span class=\"n\">scpTgt<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&quot;<\/span><span class=\"si\">%s<\/span><span class=\"s\">@<\/span><span class=\"si\">%s<\/span><span class=\"s\">:<\/span><span class=\"si\">%s<\/span><span class=\"s\">&quot;<\/span> <span class=\"o\">%<\/span> <span class=\"p\">(<\/span><span class=\"n\">hostUser<\/span><span class=\"p\">,<\/span> <span class=\"n\">remoteHost<\/span><span class=\"p\">,<\/span> <span class=\"n\">osp<\/span><span class=\"o\">.<\/span><span class=\"n\">join<\/span><span class=\"p\">(<\/span><span class=\"n\">remoteNotebookDir<\/span><span class=\"p\">,<\/span>\r\n                                                          <span class=\"n\">nbFilename<\/span><span class=\"p\">))<\/span>\r\n    <span class=\"k\">print<\/span> <span class=\"s\">&quot;Copying to <\/span><span class=\"si\">%s<\/span><span class=\"s\">&quot;<\/span> <span class=\"o\">%<\/span> <span class=\"n\">scpTgt<\/span>\r\n    <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">system<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;scp <\/span><span class=\"si\">%s<\/span><span class=\"s\"> <\/span><span class=\"si\">%s<\/span><span class=\"s\">&quot;<\/span> <span class=\"o\">%<\/span> <span class=\"p\">(<\/span><span class=\"n\">nbFilepath<\/span><span class=\"p\">,<\/span> <span class=\"n\">scpTgt<\/span><span class=\"p\">))<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Pushing the raw notebook file is pretty trivial. There are some higher level <code>scp<\/code> interfaces for Python, but they were all much more work than this one-liner. I do have to enter a password to access my private ssh key file when I run the program (which I could alleviate with an <code>ssh-agent<\/code>).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h5 id=\"createBasicHTML\">createBasicHTML<a class=\"anchor-link\" href=\"#createBasicHTML\">&#182;<\/a><\/h5>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>[Update as of 2015-03: Using iPython 2.x broke the process because it is, in general, smarter (it uses <code>node.js<\/code> to convert markdown, instead of <code>pandoc<\/code>). However, I need the <em>old<\/em> behavior (using <code>pandoc<\/code> because it resolves all of the MathJax to <code>&lt;class&gt;<\/code> entries.]<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In&nbsp;[&nbsp;]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight\">\n<pre><span class=\"k\">def<\/span> <span class=\"nf\">createBasicHTML<\/span><span class=\"p\">(<\/span><span class=\"n\">nbFilepath<\/span><span class=\"p\">):<\/span>\r\n    <span class=\"kn\">from<\/span> <span class=\"nn\">IPython.nbconvert<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">HTMLExporter<\/span>\r\n    <span class=\"kn\">from<\/span> <span class=\"nn\">IPython.config<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Config<\/span>\r\n    <span class=\"kn\">from<\/span> <span class=\"nn\">IPython.nbconvert.filters.markdown<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">markdown2html_pandoc<\/span>\r\n\r\n    <span class=\"c\"># force pandoc so blog content has no $, $$ left<\/span>\r\n    <span class=\"c\"># (mimics ipython 1.x behavior<\/span>\r\n    <span class=\"n\">myConfig<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Config<\/span><span class=\"p\">({<\/span><span class=\"s\">&quot;HTMLExporter&quot;<\/span><span class=\"p\">:<\/span>\r\n                       <span class=\"p\">{<\/span><span class=\"s\">&#39;filters&#39;<\/span><span class=\"p\">:<\/span>\r\n                        <span class=\"p\">{<\/span><span class=\"s\">&quot;markdown2html&quot;<\/span><span class=\"p\">:<\/span><span class=\"n\">markdown2html_pandoc<\/span><span class=\"p\">}}})<\/span>\r\n\r\n    <span class=\"n\">exporter<\/span> <span class=\"o\">=<\/span> <span class=\"n\">HTMLExporter<\/span><span class=\"p\">(<\/span><span class=\"n\">myConfig<\/span><span class=\"p\">,<\/span> <span class=\"n\">template_file<\/span><span class=\"o\">=<\/span><span class=\"s\">&quot;basic&quot;<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"n\">res<\/span> <span class=\"o\">=<\/span> <span class=\"n\">exporter<\/span><span class=\"o\">.<\/span><span class=\"n\">from_filename<\/span><span class=\"p\">(<\/span><span class=\"n\">nbFilepath<\/span><span class=\"p\">)<\/span>\r\n\r\n    <span class=\"c\"># for debugging                                                                        <\/span>\r\n    <span class=\"c\"># open(&quot;tmp.html&quot;, &quot;w&quot;).write(res[0])                                                  <\/span>\r\n\r\n    <span class=\"k\">return<\/span> <span class=\"n\">res<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Here I&#8217;m leveraging iPython&#8217;s built-in HTML conversion machinery. Not very difficult. Win!<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h5 id=\"uploadPost\">uploadPost<a class=\"anchor-link\" href=\"#uploadPost\">&#182;<\/a><\/h5>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In&nbsp;[2]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight\">\n<pre><span class=\"k\">def<\/span> <span class=\"nf\">uploadPost<\/span><span class=\"p\">(<\/span><span class=\"n\">content<\/span><span class=\"p\">,<\/span> <span class=\"n\">title<\/span><span class=\"p\">,<\/span> <span class=\"n\">cats<\/span><span class=\"p\">):<\/span>\r\n    <span class=\"c\"># http:\/\/python-wordpress-xmlrpc.readthedocs.org\/en\/latest\/index.html                  <\/span>\r\n    <span class=\"kn\">from<\/span> <span class=\"nn\">wordpress_xmlrpc<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">WordPressPost<\/span>\r\n    <span class=\"kn\">from<\/span> <span class=\"nn\">wordpress_xmlrpc<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Client<\/span>\r\n    <span class=\"kn\">from<\/span> <span class=\"nn\">wordpress_xmlrpc.methods<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">posts<\/span><span class=\"p\">,<\/span> <span class=\"n\">taxonomies<\/span>\r\n\r\n    <span class=\"kn\">import<\/span> <span class=\"nn\">getpass<\/span>\r\n\r\n    <span class=\"c\"># create post                                                                          <\/span>\r\n    <span class=\"n\">post<\/span> <span class=\"o\">=<\/span> <span class=\"n\">WordPressPost<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"n\">title<\/span> <span class=\"o\">=<\/span> <span class=\"n\">title<\/span>\r\n    <span class=\"c\"># now using &lt;!--raw--&gt; so it doesn&#39;t show up in title page summaries<\/span>\r\n    <span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"n\">content<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&quot;<\/span><span class=\"se\">\\n<\/span><span class=\"s\">&lt;!--raw--&gt;<\/span><span class=\"se\">\\n<\/span><span class=\"si\">%s<\/span><span class=\"se\">\\n<\/span><span class=\"s\">&lt;!--\/raw--&gt;&quot;<\/span> <span class=\"o\">%<\/span> <span class=\"n\">content<\/span>\r\n\r\n    <span class=\"c\"># create client connection                                                             <\/span>\r\n    <span class=\"n\">blogPasswd<\/span> <span class=\"o\">=<\/span> <span class=\"n\">getpass<\/span><span class=\"o\">.<\/span><span class=\"n\">getpass<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;Enter blog password: &quot;<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"n\">client<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Client<\/span><span class=\"p\">(<\/span><span class=\"n\">blog_xml_url<\/span><span class=\"p\">,<\/span> <span class=\"n\">blogUser<\/span><span class=\"p\">,<\/span> <span class=\"n\">blogPasswd<\/span><span class=\"p\">)<\/span>\r\n\r\n    <span class=\"k\">if<\/span> <span class=\"n\">cats<\/span><span class=\"p\">:<\/span>\r\n        <span class=\"c\"># make sure cats are valid                                                         <\/span>\r\n        <span class=\"n\">serverCats<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">taxonomies<\/span><span class=\"o\">.<\/span><span class=\"n\">GetTerms<\/span><span class=\"p\">(<\/span><span class=\"s\">&#39;category&#39;<\/span><span class=\"p\">))<\/span>\r\n        <span class=\"n\">serverCats<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">set<\/span><span class=\"p\">(<\/span><span class=\"nb\">getattr<\/span><span class=\"p\">(<\/span><span class=\"n\">s<\/span><span class=\"p\">,<\/span> <span class=\"s\">&quot;name&quot;<\/span><span class=\"p\">)<\/span> <span class=\"k\">for<\/span> <span class=\"n\">s<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">serverCats<\/span><span class=\"p\">)<\/span>\r\n        <span class=\"k\">assert<\/span> <span class=\"nb\">set<\/span><span class=\"p\">(<\/span><span class=\"n\">cats<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">issubset<\/span><span class=\"p\">(<\/span><span class=\"n\">serverCats<\/span><span class=\"p\">),<\/span> <span class=\"s\">&quot;Invalid Cats&quot;<\/span>\r\n        <span class=\"c\"># apply cats to post                                                               <\/span>\r\n        <span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"n\">terms_names<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span><span class=\"s\">&#39;category&#39;<\/span><span class=\"p\">:<\/span><span class=\"n\">cats<\/span><span class=\"p\">}<\/span>\r\n\r\n    <span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"n\">id<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">posts<\/span><span class=\"o\">.<\/span><span class=\"n\">NewPost<\/span><span class=\"p\">(<\/span><span class=\"n\">post<\/span><span class=\"p\">))<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>This was the most difficult piece to get working. The code isn&#8217;t complicated, and it even includes some error checking. But, it also hints at the fact that there are some things that have to happen on the blog server to get this to work. Among other steps, I have to have a <code>mathjax<\/code> plugin installed.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h5 id=\"__main__\">__main__<a class=\"anchor-link\" href=\"#__main__\">&#182;<\/a><\/h5>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing code_cell rendered\">\n<div class=\"input\">\n<div class=\"prompt input_prompt\">In&nbsp;[&nbsp;]:<\/div>\n<div class=\"inner_cell\">\n<div class=\"input_area\">\n<div class=\"highlight\">\n<pre><span class=\"k\">if<\/span> <span class=\"n\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s\">&quot;__main__&quot;<\/span><span class=\"p\">:<\/span>\r\n    <span class=\"kn\">from<\/span> <span class=\"nn\">optparse<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">OptionParser<\/span>\r\n\r\n    <span class=\"n\">usage<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&quot;usage: % nb_pusher.py [options] ipynb_file&quot;<\/span>\r\n    <span class=\"n\">optParser<\/span> <span class=\"o\">=<\/span> <span class=\"n\">OptionParser<\/span><span class=\"p\">(<\/span><span class=\"n\">usage<\/span><span class=\"o\">=<\/span><span class=\"n\">usage<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"n\">optParser<\/span><span class=\"o\">.<\/span><span class=\"n\">add_option<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;--cats&quot;<\/span><span class=\"p\">,<\/span> <span class=\"n\">dest<\/span><span class=\"o\">=<\/span><span class=\"s\">&quot;cats&quot;<\/span><span class=\"p\">,<\/span> <span class=\"n\">default<\/span><span class=\"o\">=<\/span><span class=\"s\">&quot;&quot;<\/span><span class=\"p\">,<\/span>\r\n                         <span class=\"n\">help<\/span><span class=\"o\">=<\/span><span class=\"s\">&quot;Cats for post (comma-separated string)&quot;<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"n\">optParser<\/span><span class=\"o\">.<\/span><span class=\"n\">add_option<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;--title&quot;<\/span><span class=\"p\">,<\/span> <span class=\"n\">dest<\/span><span class=\"o\">=<\/span><span class=\"s\">&quot;title&quot;<\/span><span class=\"p\">,<\/span> <span class=\"n\">default<\/span><span class=\"o\">=<\/span><span class=\"s\">&quot;&quot;<\/span><span class=\"p\">,<\/span>\r\n                         <span class=\"n\">help<\/span><span class=\"o\">=<\/span><span class=\"s\">&quot;Title for post (string)&quot;<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">(<\/span><span class=\"n\">options<\/span><span class=\"p\">,<\/span> <span class=\"n\">args<\/span><span class=\"p\">)<\/span> <span class=\"o\">=<\/span> <span class=\"n\">optParser<\/span><span class=\"o\">.<\/span><span class=\"n\">parse_args<\/span><span class=\"p\">()<\/span>\r\n\r\n    <span class=\"n\">nbFilepath<\/span> <span class=\"o\">=<\/span> <span class=\"n\">args<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\r\n    <span class=\"k\">print<\/span> <span class=\"s\">&quot;Processing <\/span><span class=\"si\">%s<\/span><span class=\"s\">&quot;<\/span> <span class=\"o\">%<\/span> <span class=\"n\">nbFilepath<\/span>\r\n\r\n    <span class=\"n\">html<\/span> <span class=\"o\">=<\/span> <span class=\"n\">createBasicHTML<\/span><span class=\"p\">(<\/span><span class=\"n\">nbFilepath<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"n\">uploadPost<\/span><span class=\"p\">(<\/span><span class=\"n\">html<\/span><span class=\"p\">,<\/span>\r\n               <span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"n\">options<\/span><span class=\"o\">.<\/span><span class=\"n\">title<\/span><span class=\"p\">,<\/span>\r\n               <span class=\"n\">cats<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"n\">t<\/span><span class=\"o\">.<\/span><span class=\"n\">strip<\/span><span class=\"p\">()<\/span> <span class=\"k\">for<\/span> <span class=\"n\">t<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">options<\/span><span class=\"o\">.<\/span><span class=\"n\">cats<\/span><span class=\"o\">.<\/span><span class=\"n\">split<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;,&quot;<\/span><span class=\"p\">)])<\/span>\r\n\r\n    <span class=\"n\">pushNotebook<\/span><span class=\"p\">(<\/span><span class=\"n\">nbFilepath<\/span><span class=\"p\">)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>I make a nice use of <code>OptionParser<\/code> to deal with the command-line interface. Also, I only call <code>pushNotebook<\/code> <em>after<\/em> I&#8217;ve done the (more error prone?) step of uploading the post.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h3 id=\"Blog-Configuration\">Blog Configuration<a class=\"anchor-link\" href=\"#Blog-Configuration\">&#182;<\/a><\/h3>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>I had to make a few modifications on the WordPress server side to get posts to play nicely. The simplest was to install and enable the <code>Mathjax-LaTeX<\/code> plugin (I&#8217;m currently using version 1.3.3) and the <code>Raw HTML<\/code> plugin (looks like my current version is 1.4.14). It&#8217;s not obvious, but for the raw plugin, you can use either <code>[raw]<\/code> or <code>&lt;!--raw--&gt;<\/code> style tags. The later is nice because if the HTML code shows up in a different context, the square bracket form might leak through.<\/p>\n<p>The second set of mods was a bit more involved. In my WordPress theme&#8217;s <code>functions.php<\/code> file, I added the following:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h5 id=\"Additions-to-functions.php\">Additions to <code>functions.php<\/code><a class=\"anchor-link\" href=\"#Additions-to-functions.php\">&#182;<\/a><\/h5>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<pre class=\"sourceCode php\"><code class=\"sourceCode php\"><span class=\"kw\">function<\/span> enable_ipynb_css<span class=\"ot\">()<\/span>{\r\n    wp_register_style<span class=\"ot\">(<\/span><span class=\"st\">&#39;ipynb_notebook_colors&#39;<\/span><span class=\"ot\">,<\/span>\r\n                      get_template_directory_uri<span class=\"ot\">()<\/span> . <span class=\"st\">&#39;\/css\/minimal.ipynb.colors.css&#39;<\/span><span class=\"ot\">);<\/span>          \r\n    wp_register_style<span class=\"ot\">(<\/span><span class=\"st\">&#39;ipynb_notebook_flair&#39;<\/span><span class=\"ot\">,<\/span>\r\n                      get_template_directory_uri<span class=\"ot\">()<\/span> . <span class=\"st\">&#39;\/css\/flair.ipynb.css&#39;<\/span><span class=\"ot\">);<\/span>\r\n\r\n    wp_enqueue_style<span class=\"ot\">(<\/span><span class=\"st\">&#39;ipynb_notebook_colors&#39;<\/span><span class=\"ot\">);<\/span>\r\n    wp_enqueue_style<span class=\"ot\">(<\/span><span class=\"st\">&#39;ipynb_notebook_flair&#39;<\/span><span class=\"ot\">);<\/span>\r\n}\r\nadd_action<span class=\"ot\">(<\/span><span class=\"st\">&#39;wp_enqueue_scripts&#39;<\/span><span class=\"ot\">,<\/span> <span class=\"st\">&#39;enable_ipynb_css&#39;<\/span><span class=\"ot\">);<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Since I don&#8217;t do web dev, I had to hack together the two css files. I can&#8217;t actually remember how I put them together now (at least, I don&#8217;t remember where I scraped the colors from for <code>minimal.ipynb.colors.css<\/code>). It was either in one of <code>iPython<\/code>&#8216;s distributed css files (<code>IPython\/static\/style\/*.css<\/code>) or from the css files that nbviewer uses. I&#8217;m leaning towards nbviewer.<\/p>\n<p>For the second file, I took some hints from <a href=\"http:\/\/www.frankcleary.com\/exporting-static-ipython-notebooks-with-style\/\">Frank Cleary<\/a> who built a very nice, clean style for his standalone exported notebooks. I had to edit it a bit to get it to work when embedded in blog post (I had to add some space to the left margin, I think).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h5 id=\"flair.ipynb.css\">flair.ipynb.css<a class=\"anchor-link\" href=\"#flair.ipynb.css\">&#182;<\/a><\/h5>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<pre class=\"sourceCode css\"><code class=\"sourceCode css\">div<span class=\"fl\">#notebook<\/span><span class=\"kw\">{<\/span>\r\n<span class=\"kw\">margin-top:<\/span><span class=\"dt\">50px<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">margin-bottom:<\/span><span class=\"dt\">100px<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">}<\/span>\r\ndiv<span class=\"fl\">.cell<\/span><span class=\"kw\">{<\/span>\r\n<span class=\"kw\">max-width:<\/span><span class=\"dt\">60em<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">margin-left:<\/span><span class=\"dt\">auto<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">margin-right:<\/span><span class=\"dt\">auto<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">}<\/span>\r\ndiv<span class=\"fl\">.input_prompt<\/span>, div<span class=\"fl\">.output_prompt<\/span><span class=\"kw\">{<\/span>\r\n <span class=\"kw\">display:<\/span><span class=\"dt\">none<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">}<\/span>\r\ndiv<span class=\"fl\">.input<\/span>, div<span class=\"fl\">.output_wrapper<\/span><span class=\"kw\">{<\/span>\r\n<span class=\"kw\">margin-top:<\/span><span class=\"dt\">1em<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">margin-bottom:<\/span><span class=\"dt\">1em<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">}<\/span>\r\ndiv<span class=\"fl\">.text_cell_render<\/span><span class=\"kw\">{<\/span>\r\n<span class=\"kw\">margin-top:<\/span><span class=\"dt\">-2px<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">margin-bottom:<\/span><span class=\"dt\">-2px<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">padding-top:<\/span><span class=\"dt\">2px<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">padding-bottom:<\/span><span class=\"dt\">2px<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">padding-left:<\/span><span class=\"dt\">6px<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">border-left:<\/span><span class=\"dt\">2px<\/span> <span class=\"dt\">solid<\/span> <span class=\"dt\">#505050<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">border-collapse:<\/span><span class=\"dt\">collapse<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">border-top:<\/span><span class=\"dt\">none<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">border-bottom:<\/span><span class=\"dt\">none<\/span><span class=\"kw\">;<\/span>\r\n<span class=\"kw\">}<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h5 id=\"minimal.ipynb.colors.css\">minimal.ipynb.colors.css<a class=\"anchor-link\" href=\"#minimal.ipynb.colors.css\">&#182;<\/a><\/h5>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<pre class=\"sourceCode css\"><code class=\"sourceCode css\"><span class=\"fl\">.highlight<\/span> <span class=\"fl\">.hll<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">background-color:<\/span> <span class=\"dt\">#ffffcc<\/span> <span class=\"kw\">}<\/span>\r\n<span class=\"fl\">.highlight<\/span>  <span class=\"kw\">{<\/span> <span class=\"kw\">background:<\/span> <span class=\"dt\">#f8f8f8<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">}<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.c<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#408080<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-style:<\/span> <span class=\"dt\">italic<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Comment *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.err<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">border:<\/span> <span class=\"dt\">1px<\/span> <span class=\"dt\">solid<\/span> <span class=\"dt\">#FF0000<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Error *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.k<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#008000<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Keyword *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.o<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#666666<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Operator *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.cm<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#408080<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-style:<\/span> <span class=\"dt\">italic<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Comment.Multiline *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.cp<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BC7A00<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Comment.Preproc *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.c1<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#408080<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-style:<\/span> <span class=\"dt\">italic<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Comment.Single *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.cs<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#408080<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-style:<\/span> <span class=\"dt\">italic<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Comment.Special *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.gd<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#A00000<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Generic.Deleted *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.ge<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">font-style:<\/span> <span class=\"dt\">italic<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Generic.Emph *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.gr<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#FF0000<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Generic.Error *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.gh<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#000080<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Generic.Heading *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.gi<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#00A000<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Generic.Inserted *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.go<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#888888<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Generic.Output *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.gp<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#000080<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Generic.Prompt *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.gs<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Generic.Strong *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.gu<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#800080<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Generic.Subheading *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.gt<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#0044DD<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Generic.Traceback *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.kc<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#008000<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Keyword.Constant *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.kd<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#008000<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Keyword.Declaration *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.kn<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#008000<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Keyword.Namespace *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.kp<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#008000<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Keyword.Pseudo *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.kr<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#008000<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Keyword.Reserved *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.kt<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#B00040<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Keyword.Type *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.m<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#666666<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.Number *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.s<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BA2121<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.na<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#7D9029<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Attribute *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.nb<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#008000<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Builtin *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.nc<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#0000FF<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Class *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.no<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#880000<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Constant *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.nd<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#AA22FF<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Decorator *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.ni<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#999999<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Entity *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.ne<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#D2413A<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Exception *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.nf<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#0000FF<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Function *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.nl<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#A0A000<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Label *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.nn<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#0000FF<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Namespace *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.nt<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#008000<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Tag *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.nv<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#19177C<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Variable *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.ow<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#AA22FF<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Operator.Word *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.w<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#bbbbbb<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Text.Whitespace *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.mf<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#666666<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.Number.Float *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.mh<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#666666<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.Number.Hex *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.mi<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#666666<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.Number.Integer *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.mo<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#666666<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.Number.Oct *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.sb<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BA2121<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Backtick *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.sc<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BA2121<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Char *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.sd<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BA2121<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-style:<\/span> <span class=\"dt\">italic<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Doc *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.s2<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BA2121<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Double *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.se<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BB6622<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Escape *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.sh<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BA2121<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Heredoc *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.si<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BB6688<\/span><span class=\"kw\">;<\/span> <span class=\"kw\">font-weight:<\/span> <span class=\"dt\">bold<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Interpol *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.sx<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#008000<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Other *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.sr<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BB6688<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Regex *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.s1<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#BA2121<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Single *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.ss<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#19177C<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.String.Symbol *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.bp<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#008000<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Builtin.Pseudo *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.vc<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#19177C<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Variable.Class *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.vg<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#19177C<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Variable.Global *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.vi<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#19177C<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Name.Variable.Instance *\/<\/span>\r\n<span class=\"fl\">.highlight<\/span> <span class=\"fl\">.il<\/span> <span class=\"kw\">{<\/span> <span class=\"kw\">color:<\/span> <span class=\"dt\">#666666<\/span> <span class=\"kw\">}<\/span> <span class=\"co\">\/* Literal.Number.Integer.Long *\/<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h3 id=\"Last-Thoughts-and-Future-Work\">Last Thoughts and Future Work<a class=\"anchor-link\" href=\"#Last-Thoughts-and-Future-Work\">&#182;<\/a><\/h3>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>Some of you may have noticed that for my little information flow graphic above, I used ipython&#8217;s display system to render the graphic. I did that because my notebook pusher, currently, does not handle additional resources (such as linked local graphics). I&#8217;ll consider that future work and, for now, simply display additional resources inline. If I want to use examples with sample data files, I&#8217;ll (probably) just manually push the data to a common, global url so it can be used from anywhere with an absolute path.<\/p>\n<p>Also, I wanted the license of all the blog content (and notebooks) to be clear. So, I&#8217;m (manually) attaching the following cell to all of the notebooks. Eventually, I&#8217;ll just have the notebook_pusher do it. The notebook itself is simple json, so appending an entry at the end of the notebook should be pretty simple. I just haven&#8217;t done it yet.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"prompt input_prompt\">\n<\/div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h3>\nAdditional Resources<br \/>\n<\/h3>\n<p>You can grab a <a href=\"http:\/\/drsfenner.org\/public\/notebooks\/PushingIPYNBToWordPress.ipynb\">copy of this notebook<\/a>.<\/p>\n<p>Even better, you can <a href=\"http:\/\/nbviewer.ipython.org\/url\/drsfenner.org\/public\/notebooks\/PushingIPYNBToWordPress.ipynb\">view it using nbviewer<\/a>.<\/p>\n<h3>\nLicense<br \/>\n<\/h3>\n<p>Unless otherwise noted, the contents of this notebook are under the following license. The code in the notebook should be considered part of the text (i.e., licensed and treated as as follows).<\/p>\n<p><a rel=\"license\" href=\"http:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/\"><img decoding=\"async\" alt=\"Creative Commons License\" style=\"border-width:0\" src=\"https:\/\/i.creativecommons.org\/l\/by-nc-sa\/4.0\/88x31.png\" \/><\/a><br \/><span xmlns:dct=\"http:\/\/purl.org\/dc\/terms\/\" property=\"dct:title\">DrsFenner.org Blog And Notebooks<\/span> by <a xmlns:cc=\"http:\/\/creativecommons.org\/ns#\" href=\"drsfenner.org\" property=\"cc:attributionName\" rel=\"cc:attributionURL\">Mark and Barbara Fenner<\/a> is licensed under a <a rel=\"license\" href=\"http:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/\">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License<\/a>.<br \/>Permissions beyond the scope of this license may be available at <a xmlns:cc=\"http:\/\/creativecommons.org\/ns#\" href=\"drsfenner.org\/blog\/about-and-contacts\" rel=\"cc:morePermissions\">drsfenner.org\/blog\/about-and-contacts<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>It turns out that I really, really like writing documents as iPython notebooks &#8211; at least shorter documents. I&#8217;m also (as you can tell, if you are reading this) into blogging about my technical (and recreational) endavors. Since blog posts are shorter documents &#8230; Captain Obvious? &#8230; it is a small step to wanting to [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,13],"tags":[],"class_list":["post-355","post","type-post","status-publish","format-standard","hentry","category-mrdr","category-python"],"_links":{"self":[{"href":"https:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/posts\/355","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/comments?post=355"}],"version-history":[{"count":2,"href":"https:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/posts\/355\/revisions"}],"predecessor-version":[{"id":421,"href":"https:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/posts\/355\/revisions\/421"}],"wp:attachment":[{"href":"https:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/media?parent=355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/categories?post=355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/drsfenner.org\/blog\/wp-json\/wp\/v2\/tags?post=355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}