Binder + Nikola + Jupyter + Github = Blogging resourceless

  |   Source   |   Minimap

You are in vacation time but you want to blog something nice to share with your friends.

And your blog is powered by Nikola.

And you are a Jupyter Notebook user.

But you don't have your laptop with you, because you are on vacation time, remember? ;-)

But you still have your phone and some connectivity.

What do you think if I say that you have a complete workflow to write your blogpost, build the site and deploy it just using your phone? But without using computational resources from it (that would be also interesting, btw).

Don't you believe me? Just read this post and I will show you how you can make this possible... and fun!

NOTE: This post is long but I promise will be interesting! Also, there are multiple cells generating a lot of output, remember that you can hide the output clicking on "Click me to hide the output" button at the bottom/right conner of each cell.

Ingredients

First, as with any other recipe, we need some ingredients.

  1. Jupyter Notebook, as our UI to write and manage the computational resources
  2. Nikola, to build the static site
  3. Binder, to provide the computational resources, and secondarily, the UI mentioned in the first item
  4. Github, to persist the whole site

Method

Let's summarize the whole idea:

We launch a binder instance from a Github repo containing my Nikola-powered blog site and write some content into a new blog post (using the Jupyter Notebook), then I rebuild the site using Nikola (already installed in my binder instance) and finally push the updated site to Github's gh-pages to finally publish the new content (from my binder instance as well).

Sounds good, isn't it?

Create a binder for my blog site

Do you know Binder, right? In simple words it Turn a GitHub repo into a collection of interactive notebooks. You can find more info about Binder at https://mybinder.readthedocs.io/en/latest/. For the purpose of this post (and the next ones), I just created a new binder filling my blog site Github repo url into the URL field at mybinder.org (and the path to a specific notebook file) and I got a new url to access my binder instance at https://mybinder.org/v2/gh/damianavila/damian_blog/master?filepath=Start.ipynb

In fact, I am writing this blog post in a binder instance (I love to do meta stuff ;-)

That url pointed me to a Start.ipynb notebook file where I have some cells to create a new post with some Nikola tags. I run those cells and I have a new ipynb file under the posts directory, in this case: binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb where I can write my new content.

Write the new content

OK, this is one is easy, it is this very same post ;-) as you probably expected.

BTW, one interesting note, since your binder is using git for internal stuff, you have git installed and ready to do your stuff as well. For instance, if my connection is flaky and given that my binder in transient. I can commit the work done so far. Just save the notebook file and run:

In [1]:
!git status
  Click me to hide the output
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   ../.ipynb_checkpoints/Start-checkpoint.ipynb
	modified:   ../Start.ipynb
	modified:   ../__pycache__/conf.cpython-35.pyc
	modified:   ../plugins/upgrade_metadata/__pycache__/upgrade_metadata.cpython-35.pyc

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	../.bash_logout
	../.bashrc
	../.ipython/
	../.local/
	../.profile
	.ipynb_checkpoints/binder-+-nikola-+-jupyter-+-github-blogging-resourceless-checkpoint.ipynb
	binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb

no changes added to commit (use "git add" and/or "git commit -a")
In [2]:
!git add "binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb"
  Click me to hide the output
In [3]:
!git commit -m "Add (incomplete) new post"
  Click me to hide the output
[master 7c7f9890] Add (incomplete) new post
 1 file changed, 146 insertions(+)
 create mode 100644 posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb

OK, now you need to push this content and if you try to git push it, it will fail unless you have permissions to push to your own repo. To achieve that from a binder instance you need to create a personal access token from Github: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/. And now you will be able to push your stuff.

Note this personal access token will be useful for further pushes down the road, so keep it close.

Also, we need a terminal to be able to provide the username and the token. And the Jupyter interface give us that terminal pretty easily, you just go to the /tree (dashboard) and start a terminal from the dropdown menu (I can probably write a little extension to perform this step from the notebook itself... but going to the terminal is pretty easy and quick).

Now your repository is updated, so next time you launch a binder from it, it will contain your new post, meaning you can write your stuff iteratevely even in a transient platform, sweet!

Rebuild your site with Nikola

When your post is ready, you need to rebuild the site using Nikola, but how Nikola end up in my binder instance? Easy as well, you just need to provide a requirements.txt file with the dependencies you need and those ones will be included in your binder instance: https://mybinder.readthedocs.io/en/latest/using.html#simple-python-dependencies

In my case, the requirement.txt file is pretty easy: https://github.com/damianavila/damian_blog/blob/master/requirements.txt. Because all the other pieces I need are already included by default: Jupyter stuff and git.

OK, now to rebuild your site you just need to run:

In [4]:
!nikola build
  Click me to hide the output
[2017-12-17T22:28:50Z] WARNING: Nikola: The RSS_LINKS_APPEND_QUERY option is deprecated, use FEED_LINKS_APPEND_QUERY instead.
[2017-12-17T22:28:50Z] WARNING: Nikola: The RSS_READ_MORE_LINK option is deprecated, use FEED_READ_MORE_LINK instead.
[2017-12-17T22:28:50Z] WARNING: Nikola: Could not guess locale for language es, using locale en_US.UTF-8
[2017-12-17T22:28:50Z] WARNING: Nikola: Please fix your OS locale configuration or use the LOCALES option in conf.py to specify your preferred locale.
[2017-12-17T22:28:50Z] WARNING: Nikola: Make sure to use an UTF-8 locale to ensure Unicode support.
Scanning posts......done!
.  render_sources:output/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb
.  render_sources:output/es/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb
.  render_galleries:output/es/galleries
.  render_galleries:output/es/galleries/spellchecker
.  render_galleries:output/es/galleries/trades
.  render_galleries:output/es/galleries/Facu_RN
.  render_galleries:output/es/galleries/Inundacion
.  render_galleries:output/es/galleries/bokehmagic
.  render_galleries:output/es/galleries/rise
.  render_galleries:output/es/galleries/twitter
.  render_galleries:output/es/galleries/loadwrite
.  render_galleries:output/es/galleries/deploy
.  render_galleries:output/es/galleries/zenmode
.  render_galleries:output/galleries/index.html
.  render_galleries:output/galleries/rss.xml
.  render_galleries:output/es/galleries/index.html
.  render_galleries:output/es/galleries/rss.xml
.  render_galleries:output/galleries/spellchecker/index.html
.  render_galleries:output/galleries/spellchecker/rss.xml
.  render_galleries:output/es/galleries/spellchecker/index.html
.  render_galleries:output/es/galleries/spellchecker/rss.xml
.  render_galleries:output/galleries/trades/index.html
.  render_galleries:output/galleries/trades/rss.xml
.  render_galleries:output/es/galleries/trades/index.html
.  render_galleries:output/es/galleries/trades/rss.xml
.  render_galleries:output/galleries/Facu_RN/index.html
.  render_galleries:output/galleries/Facu_RN/rss.xml
.  render_galleries:output/es/galleries/Facu_RN/index.html
.  render_galleries:output/es/galleries/Facu_RN/rss.xml
.  render_galleries:output/galleries/Inundacion/index.html
.  render_galleries:output/galleries/Inundacion/rss.xml
.  render_galleries:output/es/galleries/Inundacion/index.html
.  render_galleries:output/es/galleries/Inundacion/rss.xml
.  render_galleries:output/galleries/bokehmagic/index.html
.  render_galleries:output/galleries/bokehmagic/rss.xml
.  render_galleries:output/es/galleries/bokehmagic/index.html
.  render_galleries:output/es/galleries/bokehmagic/rss.xml
.  render_galleries:output/galleries/rise/index.html
.  render_galleries:output/galleries/rise/rss.xml
.  render_galleries:output/es/galleries/rise/index.html
.  render_galleries:output/es/galleries/rise/rss.xml
.  render_galleries:output/galleries/twitter/index.html
.  render_galleries:output/galleries/twitter/rss.xml
.  render_galleries:output/es/galleries/twitter/index.html
.  render_galleries:output/es/galleries/twitter/rss.xml
.  render_galleries:output/galleries/loadwrite/index.html
.  render_galleries:output/galleries/loadwrite/rss.xml
.  render_galleries:output/es/galleries/loadwrite/index.html
.  render_galleries:output/es/galleries/loadwrite/rss.xml
.  render_galleries:output/galleries/deploy/index.html
.  render_galleries:output/galleries/deploy/rss.xml
.  render_galleries:output/es/galleries/deploy/index.html
.  render_galleries:output/es/galleries/deploy/rss.xml
.  render_galleries:output/galleries/zenmode/index.html
.  render_galleries:output/galleries/zenmode/rss.xml
.  render_galleries:output/es/galleries/zenmode/index.html
.  render_galleries:output/es/galleries/zenmode/rss.xml
.  render_posts:timeline_changes
.  render_posts:cache/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
.  render_posts:cache/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html.es
.  copy_assets:output/assets/js/toggle.js
.  copy_assets:output/assets/js/miniPageNav.js
.  copy_assets:output/assets/images/blue-mocha-grunge-reversed.jpg
.  copy_assets:output/assets/css/ipython.min.css
.  copy_assets:output/assets/css/nikola_ipython.css
.  copy_assets:output/assets/fonts/fontawesome-webfont.svg
.  copy_assets:output/assets/fonts/SHIcXhdd5RknatSgOzyEkA.woff
.  copy_assets:output/assets/fonts/fontawesome-webfont.woff
.  copy_assets:output/assets/fonts/FontAwesome.otf
.  copy_assets:output/assets/fonts/fontawesome-webfont.ttf
.  copy_assets:output/assets/fonts/evC1haE-MsorTl_A7_uSGT8E0i7KZn-EPnyo3HZu7kw.woff
.  copy_assets:output/assets/fonts/eMS0tViDqryBl0EG1pqFZfesZW2xOQ-xsNqO47m55DA.woff
.  copy_assets:output/assets/fonts/fontawesome-webfont.eot
.  copy_assets:output/assets/js/jquery-1.10.2.min.js
.  copy_assets:output/assets/js/jquery.timeago.js
.  copy_assets:output/assets/images/blue-mocha-grunge.jpg
.  copy_assets:output/assets/images/cream-dust.png
.  copy_assets:output/assets/images/glyphicons-halflings.png
.  copy_assets:output/assets/images/glyphicons-halflings-white.png
.  copy_assets:output/assets/css/main.css
.  copy_assets:output/assets/css/bitter.css
.  copy_assets:output/assets/js/moment-with-locales.min.js
.  copy_assets:output/assets/js/baguetteBox.js
.  copy_assets:output/assets/js/html5shiv-printshiv.min.js
.  copy_assets:output/assets/js/baguetteBox.min.js
.  copy_assets:output/assets/js/fancydates.js
.  copy_assets:output/assets/js/flowr.js
.  copy_assets:output/assets/js/html5.js
.  copy_assets:output/assets/css/baguetteBox.min.css
.  copy_assets:output/assets/css/baguetteBox.css
.  copy_assets:output/assets/css/rst.css
.  copy_assets:output/assets/css/theme.css
.  copy_assets:output/assets/css/nikola_rst.css
.  copy_assets:output/assets/css/html4css1.css
.  copy_assets:output/assets/xml/atom.xsl
.  copy_assets:output/assets/xml/rss.xsl
.  copy_assets:output/assets/css/code.css
.  render_taxonomies:output/categories/blog.html
.  render_taxonomies:output/categories/jupyter.html
.  render_taxonomies:output/categories/typescript.html
.  render_taxonomies:output/categories/threads.html
.  render_taxonomies:output/categories/local.html
.  render_taxonomies:output/categories/flood.html
.  render_taxonomies:output/categories/opensource.html
.  render_taxonomies:output/categories/ipyscript.html
.  render_taxonomies:output/categories/less.html
.  render_taxonomies:output/categories/viper.html
.  render_taxonomies:output/categories/toggle.html
.  render_taxonomies:output/categories/twitter.html
.  render_taxonomies:output/categories/daniela.html
.  render_taxonomies:output/categories/jinja.html
.  render_taxonomies:output/categories/css.html
.  render_taxonomies:output/categories/family.html
.  render_taxonomies:output/categories/nikola.html
.  render_taxonomies:output/categories/win.html
.  render_taxonomies:output/categories/first_post.html
.  render_taxonomies:output/categories/scipycon.html
.  render_taxonomies:output/categories/git.html
.  render_taxonomies:output/categories/facundo.html
.  render_taxonomies:output/categories/config.html
.  render_taxonomies:output/categories/tutorials.html
.  render_taxonomies:output/categories/python.html
.  render_taxonomies:output/categories/talks.html
.  render_taxonomies:output/categories/themes.html
.  render_taxonomies:output/categories/extension.html
.  render_taxonomies:output/categories/pdf.html
.  render_taxonomies:output/categories/rise.html
.  render_taxonomies:output/categories/pip.html
.  render_taxonomies:output/categories/connectivity.html
.  render_taxonomies:output/categories/workflow.html
.  render_taxonomies:output/categories/politics.html
.  render_taxonomies:output/categories/pyconar.html
.  render_taxonomies:output/categories/reveal.html
.  render_taxonomies:output/categories/linux.html
.  render_taxonomies:output/categories/spellcheck.html
.  render_taxonomies:output/categories/base16.html
.  render_taxonomies:output/categories/life.html
.  render_taxonomies:output/categories/facu.html
.  render_taxonomies:output/categories/ipython.html
.  render_taxonomies:output/categories/slideshow.html
.  render_taxonomies:output/categories/conda.html
.  render_taxonomies:output/categories/nbviewer.html
.  render_taxonomies:output/categories/format.html
.  render_taxonomies:output/categories/javascript.html
.  render_taxonomies:output/categories/mipyex.html
.  render_taxonomies:output/categories/videos.html
.  render_taxonomies:output/categories/trading.html
.  render_taxonomies:output/categories/minimap.html
.  render_taxonomies:output/categories/aikido.html
.  render_taxonomies:output/categories/magic.html
.  render_taxonomies:output/categories/ipytmpl.html
.  render_taxonomies:output/categories/zen.html
.  render_taxonomies:output/categories/pinned.html
.  render_taxonomies:output/categories/osx.html
.  render_taxonomies:output/categories/jupyterlab.html
.  render_taxonomies:output/categories/nbconvert.html
.  render_taxonomies:output/categories/zenmode.html
.  render_taxonomies:output/categories/theme.html
.  render_taxonomies:output/categories/gh-pages.html
.  render_taxonomies:output/categories/github.html
.  render_taxonomies:output/categories/binder.html
.  render_taxonomies:output/categories/performance.html
.  render_taxonomies:output/index.html
.  render_taxonomies:output/index-1.html
.  render_taxonomies:output/index-2.html
.  render_taxonomies:output/index-3.html
.  render_taxonomies:output/index-4.html
.  render_taxonomies:output/index-5.html
.  render_taxonomies:output/archive.html
.  render_taxonomies:output/2017/12/index.html
.  render_taxonomies:output/2016/08/index.html
.  render_taxonomies:output/2016/05/index.html
.  render_taxonomies:output/2012/11/index.html
.  render_taxonomies:output/2012/10/index.html
.  render_taxonomies:output/2014/04/index.html
.  render_taxonomies:output/2017/11/index.html
.  render_taxonomies:output/2013/01/index.html
.  render_taxonomies:output/2016/06/index.html
.  render_taxonomies:output/2013/12/index.html
.  render_taxonomies:output/2014/05/index.html
.  render_taxonomies:output/2014/index.html
.  render_taxonomies:output/2012/12/index.html
.  render_taxonomies:output/2013/10/index.html
.  render_taxonomies:output/2017/06/index.html
.  render_taxonomies:output/2017/index.html
.  render_taxonomies:output/2012/09/index.html
.  render_taxonomies:output/2013/02/index.html
.  render_taxonomies:output/2013/11/index.html
.  render_taxonomies:output/2012/06/index.html
.  render_taxonomies:output/2013/08/index.html
.  render_taxonomies:output/2012/index.html
.  render_taxonomies:output/2013/09/index.html
.  render_taxonomies:output/2017/07/index.html
.  render_taxonomies:output/2013/04/index.html
.  render_taxonomies:output/2014/03/index.html
.  render_taxonomies:output/2013/05/index.html
.  render_taxonomies:output/2016/index.html
.  render_taxonomies:output/2013/index.html
.  render_taxonomies:output/categories/index.html
.  render_taxonomies:output/es/categories/blog.html
.  render_taxonomies:output/es/categories/jupyter.html
.  render_taxonomies:output/es/categories/typescript.html
.  render_taxonomies:output/es/categories/threads.html
.  render_taxonomies:output/es/categories/local.html
.  render_taxonomies:output/es/categories/flood.html
.  render_taxonomies:output/es/categories/opensource.html
.  render_taxonomies:output/es/categories/ipyscript.html
.  render_taxonomies:output/es/categories/less.html
.  render_taxonomies:output/es/categories/viper.html
.  render_taxonomies:output/es/categories/toggle.html
.  render_taxonomies:output/es/categories/twitter.html
.  render_taxonomies:output/es/categories/daniela.html
.  render_taxonomies:output/es/categories/jinja.html
.  render_taxonomies:output/es/categories/css.html
.  render_taxonomies:output/es/categories/family.html
.  render_taxonomies:output/es/categories/nikola.html
.  render_taxonomies:output/es/categories/win.html
.  render_taxonomies:output/es/categories/first_post.html
.  render_taxonomies:output/es/categories/scipycon.html
.  render_taxonomies:output/es/categories/git.html
.  render_taxonomies:output/es/categories/facundo.html
.  render_taxonomies:output/es/categories/config.html
.  render_taxonomies:output/es/categories/tutorials.html
.  render_taxonomies:output/es/categories/python.html
.  render_taxonomies:output/es/categories/talks.html
.  render_taxonomies:output/es/categories/themes.html
.  render_taxonomies:output/es/categories/extension.html
.  render_taxonomies:output/es/categories/pdf.html
.  render_taxonomies:output/es/categories/rise.html
.  render_taxonomies:output/es/categories/pip.html
.  render_taxonomies:output/es/categories/connectivity.html
.  render_taxonomies:output/es/categories/workflow.html
.  render_taxonomies:output/es/categories/politics.html
.  render_taxonomies:output/es/categories/pyconar.html
.  render_taxonomies:output/es/categories/reveal.html
.  render_taxonomies:output/es/categories/linux.html
.  render_taxonomies:output/es/categories/spellcheck.html
.  render_taxonomies:output/es/categories/base16.html
.  render_taxonomies:output/es/categories/life.html
.  render_taxonomies:output/es/categories/facu.html
.  render_taxonomies:output/es/categories/ipython.html
.  render_taxonomies:output/es/categories/slideshow.html
.  render_taxonomies:output/es/categories/conda.html
.  render_taxonomies:output/es/categories/nbviewer.html
.  render_taxonomies:output/es/categories/format.html
.  render_taxonomies:output/es/categories/javascript.html
.  render_taxonomies:output/es/categories/mipyex.html
.  render_taxonomies:output/es/categories/videos.html
.  render_taxonomies:output/es/categories/trading.html
.  render_taxonomies:output/es/categories/minimap.html
.  render_taxonomies:output/es/categories/aikido.html
.  render_taxonomies:output/es/categories/magic.html
.  render_taxonomies:output/es/categories/ipytmpl.html
.  render_taxonomies:output/es/categories/zen.html
.  render_taxonomies:output/es/categories/pinned.html
.  render_taxonomies:output/es/categories/osx.html
.  render_taxonomies:output/es/categories/jupyterlab.html
.  render_taxonomies:output/es/categories/nbconvert.html
.  render_taxonomies:output/es/categories/zenmode.html
.  render_taxonomies:output/es/categories/theme.html
.  render_taxonomies:output/es/categories/gh-pages.html
.  render_taxonomies:output/es/categories/github.html
.  render_taxonomies:output/es/categories/binder.html
.  render_taxonomies:output/es/categories/performance.html
.  render_taxonomies:output/es/index.html
.  render_taxonomies:output/es/index-1.html
.  render_taxonomies:output/es/index-2.html
.  render_taxonomies:output/es/index-3.html
.  render_taxonomies:output/es/index-4.html
.  render_taxonomies:output/es/index-5.html
.  render_taxonomies:output/es/archive.html
.  render_taxonomies:output/es/2017/12/index.html
.  render_taxonomies:output/es/2016/08/index.html
.  render_taxonomies:output/es/2016/05/index.html
.  render_taxonomies:output/es/2012/11/index.html
.  render_taxonomies:output/es/2012/10/index.html
.  render_taxonomies:output/es/2014/04/index.html
.  render_taxonomies:output/es/2017/11/index.html
.  render_taxonomies:output/es/2013/01/index.html
.  render_taxonomies:output/es/2016/06/index.html
.  render_taxonomies:output/es/2013/12/index.html
.  render_taxonomies:output/es/2014/05/index.html
.  render_taxonomies:output/es/2014/index.html
.  render_taxonomies:output/es/2012/12/index.html
.  render_taxonomies:output/es/2013/10/index.html
.  render_taxonomies:output/es/2017/06/index.html
.  render_taxonomies:output/es/2017/index.html
.  render_taxonomies:output/es/2012/09/index.html
.  render_taxonomies:output/es/2013/02/index.html
.  render_taxonomies:output/es/2013/11/index.html
.  render_taxonomies:output/es/2012/06/index.html
.  render_taxonomies:output/es/2013/08/index.html
.  render_taxonomies:output/es/2012/index.html
.  render_taxonomies:output/es/2013/09/index.html
.  render_taxonomies:output/es/2017/07/index.html
.  render_taxonomies:output/es/2013/04/index.html
.  render_taxonomies:output/es/2014/03/index.html
.  render_taxonomies:output/es/2013/05/index.html
.  render_taxonomies:output/es/2016/index.html
.  render_taxonomies:output/es/2013/index.html
.  render_taxonomies:output/es/categories/index.html
.  render_taxonomies:output/categories/jinja.xml
.  render_taxonomies:output/categories/trading.xml
.  render_taxonomies:output/categories/css.xml
.  render_taxonomies:output/categories/minimap.xml
.  render_taxonomies:output/categories/family.xml
.  render_taxonomies:output/categories/aikido.xml
.  render_taxonomies:output/categories/nikola.xml
.  render_taxonomies:output/categories/magic.xml
.  render_taxonomies:output/categories/win.xml
.  render_taxonomies:output/categories/ipytmpl.xml
.  render_taxonomies:output/categories/first_post.xml
.  render_taxonomies:output/categories/zen.xml
.  render_taxonomies:output/categories/scipycon.xml
.  render_taxonomies:output/categories/pinned.xml
.  render_taxonomies:output/categories/git.xml
.  render_taxonomies:output/categories/osx.xml
.  render_taxonomies:output/categories/facundo.xml
.  render_taxonomies:output/categories/jupyterlab.xml
.  render_taxonomies:output/categories/config.xml
.  render_taxonomies:output/categories/nbconvert.xml
.  render_taxonomies:output/categories/tutorials.xml
.  render_taxonomies:output/categories/zenmode.xml
.  render_taxonomies:output/categories/python.xml
.  render_taxonomies:output/categories/theme.xml
.  render_taxonomies:output/categories/talks.xml
.  render_taxonomies:output/categories/gh-pages.xml
.  render_taxonomies:output/categories/themes.xml
.  render_taxonomies:output/categories/github.xml
.  render_taxonomies:output/categories/extension.xml
.  render_taxonomies:output/categories/binder.xml
.  render_taxonomies:output/categories/pdf.xml
.  render_taxonomies:output/categories/performance.xml
.  render_taxonomies:output/categories/rise.xml
.  render_taxonomies:output/rss.xml
.  render_taxonomies:output/categories/pip.xml
.  render_taxonomies:output/es/categories/linux.xml
.  render_taxonomies:output/categories/connectivity.xml
.  render_taxonomies:output/categories/workflow.xml
.  render_taxonomies:output/categories/politics.xml
.  render_taxonomies:output/categories/pyconar.xml
.  render_taxonomies:output/categories/reveal.xml
.  render_taxonomies:output/categories/linux.xml
.  render_taxonomies:output/categories/spellcheck.xml
.  render_taxonomies:output/categories/base16.xml
.  render_taxonomies:output/categories/life.xml
.  render_taxonomies:output/categories/facu.xml
.  render_taxonomies:output/categories/ipython.xml
.  render_taxonomies:output/categories/slideshow.xml
.  render_taxonomies:output/categories/conda.xml
.  render_taxonomies:output/categories/nbviewer.xml
.  render_taxonomies:output/categories/format.xml
.  render_taxonomies:output/categories/javascript.xml
.  render_taxonomies:output/categories/mipyex.xml
.  render_pages:output/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
.  render_pages:output/posts/rise-510-is-out.html
.  render_taxonomies:output/categories/videos.xml
.  render_taxonomies:output/es/categories/blog.xml
.  render_pages:output/posts/we-are-above-1000-stars.html
.  render_pages:output/posts/trading-logbook-update-3.html
.  render_pages:output/es/posts/hide-the-input-cells-from-your-ipython-slides.html
.  render_taxonomies:output/es/categories/jupyter.xml
.  render_taxonomies:output/es/categories/spellcheck.xml
.  render_pages:output/posts/rise-meets-jupyterlab.html
.  render_pages:output/es/posts/a-simple-minimap-for-your-nbconverted-ipynb.html
.  render_pages:output/posts/rise-500-is-out.html
.  render_pages:output/es/posts/mimic-the-ipython-notebook-cell-execution.html
.  render_taxonomies:output/es/categories/typescript.xml
.  render_taxonomies:output/es/categories/base16.xml
.  render_pages:output/posts/rise-400b1-is-available-please-test-it.html
.  render_pages:output/es/posts/nikolas-zen-theme-finally-released.html
.  render_pages:output/posts/how-to-pin-conda.html
.  render_pages:output/es/posts/viper-is-now-using-ipythonnbconvert.html
.  render_taxonomies:output/es/categories/threads.xml
.  render_taxonomies:output/es/categories/life.xml
.  render_pages:output/posts/coming-back.html
.  render_pages:output/es/posts/change-the-ipython-slides-defaults-with-an-ipython-config-file.html
.  render_pages:output/posts/zen-themes-updated.html
.  render_pages:output/es/posts/using-a-local-revealjs-library-with-your-ipython-slides.html
.  render_taxonomies:output/es/categories/local.xml
.  render_taxonomies:output/es/categories/facu.xml
.  render_pages:output/posts/48-themes-for-your-ipython-notebook.html
.  render_pages:output/es/posts/different-ways-to-lead-an-open-source-project.html
.  render_pages:output/posts/loader-and-writer-ipython-nbextensions-to-easily-edit-your-text.html
.  render_pages:output/es/posts/a-new-nikolas-theme-for-my-site-zen.html
.  render_taxonomies:output/es/categories/flood.xml
.  render_taxonomies:output/es/categories/ipython.xml
.  render_pages:output/posts/slideviewer-a-simple-way-to-share-your-ipython-slides.html
.  render_pages:output/es/posts/customizing-your-ipython-slides.html
.  render_pages:output/posts/my-ipython-powered-semi-automatic-git-workflow.html
.  render_pages:output/es/posts/a-little-hack-to-get-a-pdf-from-your-ipython-slides.html
.  render_taxonomies:output/es/categories/opensource.xml
.  render_taxonomies:output/es/categories/slideshow.xml
.  render_pages:output/posts/deploy-your-nikola-powered-blog-content-from-the-ipython-notebook.html
.  render_pages:output/es/posts/zen-mode-extension-for-the-ipython-notebook.html
.  render_pages:output/posts/a-poor-man-spell-checker-for-the-ipython-notebook.html
.  render_pages:output/es/posts/make-your-slides-with-ipython.html
.  render_taxonomies:output/es/categories/ipyscript.xml
.  render_taxonomies:output/es/categories/conda.xml
.  render_pages:output/posts/tweet-me-said-an-ipython-notebook-cell-and-i-did-it.html
.  render_pages:output/es/posts/one-line-deployment-of-your-site-to-gh-pages.html
.  render_pages:output/posts/dont-write-scripts-just-write-ipyscripts.html
.  render_pages:output/es/posts/ipython-plugin-for-nikola-updated.html
.  render_taxonomies:output/es/categories/less.xml
.  render_taxonomies:output/es/categories/nbviewer.xml
.  render_pages:output/posts/pyconar-2013.html
.  render_pages:output/es/posts/teasers-with-the-ipython-notebook-plugin.html
.  render_pages:output/posts/trading-logbook-update-22-nov-2013.html
.  render_pages:output/es/posts/scipycon-argentina-2013.html
.  render_taxonomies:output/categories/daniela.xml
.  render_taxonomies:output/es/categories/viper.xml
.  render_pages:output/posts/live-trading-logbook.html
.  render_pages:output/es/posts/under-the-sea-en-la-plata.html
.  render_taxonomies:output/es/categories/format.xml
.  render_pages:output/posts/bidirectional-ipython-nikola-workflow-to-write-your-blog-post.html
.  render_pages:output/es/posts/reveal-converter-mini-tutorial.html
.  render_taxonomies:output/es/categories/toggle.xml
.  render_taxonomies:output/es/categories/javascript.xml
.  render_pages:output/posts/hide-the-input-cells-from-your-ipython-slides.html
.  render_pages:output/es/posts/blogging-with-nikola-and-ipython.html
.  render_pages:output/posts/a-simple-minimap-for-your-nbconverted-ipynb.html
.  render_pages:output/es/posts/slider-for-nbconvert.html
.  render_taxonomies:output/es/categories/twitter.xml
.  render_taxonomies:output/es/categories/mipyex.xml
.  render_pages:output/posts/mimic-the-ipython-notebook-cell-execution.html
.  render_pages:output/es/posts/facundo.html
.  render_pages:output/posts/nikolas-zen-theme-finally-released.html
.  render_pages:output/es/posts/improving-viper-slideshows-styling.html
.  render_taxonomies:output/es/categories/daniela.xml
.  render_taxonomies:output/es/categories/videos.xml
.  render_pages:output/posts/viper-is-now-using-ipythonnbconvert.html
.  render_pages:output/es/posts/nikola-nbconvert.html
.  render_pages:output/posts/change-the-ipython-slides-defaults-with-an-ipython-config-file.html
.  render_pages:output/es/posts/a-simple-overview-of-viper.html
.  render_taxonomies:output/es/categories/jinja.xml
.  render_taxonomies:output/es/categories/trading.xml
.  render_pages:output/posts/using-a-local-revealjs-library-with-your-ipython-slides.html
.  render_pages:output/es/posts/viper.html
.  render_pages:output/posts/different-ways-to-lead-an-open-source-project.html
.  render_pages:output/es/posts/paraguay.html
.  render_taxonomies:output/es/categories/css.xml
.  render_taxonomies:output/es/categories/minimap.xml
.  render_pages:output/posts/a-new-nikolas-theme-for-my-site-zen.html
.  render_pages:output/es/posts/powered-by-nikola.html
.  render_pages:output/posts/customizing-your-ipython-slides.html
.  render_pages:output/es/posts/beginning.html
.  render_taxonomies:output/es/categories/family.xml
.  render_taxonomies:output/es/categories/aikido.xml
.  render_pages:output/posts/a-little-hack-to-get-a-pdf-from-your-ipython-slides.html
.  render_pages:output/es/stories/about-me.html
.  render_pages:output/posts/zen-mode-extension-for-the-ipython-notebook.html
.  render_pages:output/es/posts/hello-world-again.html
.  render_taxonomies:output/es/categories/nikola.xml
.  render_taxonomies:output/es/categories/magic.xml
.  render_pages:output/posts/make-your-slides-with-ipython.html
.  render_pages:output/posts/one-line-deployment-of-your-site-to-gh-pages.html
.  render_taxonomies:output/es/categories/win.xml
.  render_taxonomies:output/es/categories/ipytmpl.xml
.  render_pages:output/posts/ipython-plugin-for-nikola-updated.html
.  render_pages:output/posts/teasers-with-the-ipython-notebook-plugin.html
.  render_taxonomies:output/es/categories/first_post.xml
.  render_taxonomies:output/es/categories/zen.xml
.  render_pages:output/posts/scipycon-argentina-2013.html
.  render_pages:output/posts/under-the-sea-en-la-plata.html
.  render_taxonomies:output/es/categories/scipycon.xml
.  render_taxonomies:output/es/categories/pinned.xml
.  render_pages:output/posts/reveal-converter-mini-tutorial.html
.  render_pages:output/posts/blogging-with-nikola-and-ipython.html
.  render_taxonomies:output/es/categories/git.xml
.  render_taxonomies:output/es/categories/osx.xml
.  render_pages:output/posts/slider-for-nbconvert.html
.  render_pages:output/posts/facundo.html
.  render_taxonomies:output/es/categories/facundo.xml
.  render_taxonomies:output/es/categories/jupyterlab.xml
.  render_pages:output/posts/improving-viper-slideshows-styling.html
.  render_pages:output/posts/nikola-nbconvert.html
.  render_taxonomies:output/es/categories/config.xml
.  render_taxonomies:output/es/categories/nbconvert.xml
.  render_pages:output/posts/a-simple-overview-of-viper.html
.  render_pages:output/posts/viper.html
.  render_taxonomies:output/es/categories/tutorials.xml
.  render_taxonomies:output/es/categories/zenmode.xml
.  render_pages:output/posts/paraguay.html
.  render_pages:output/posts/powered-by-nikola.html
.  render_taxonomies:output/categories/blog.xml
.  render_taxonomies:output/es/categories/python.xml
.  render_taxonomies:output/es/categories/theme.xml
.  render_pages:output/posts/beginning.html
.  render_pages:output/stories/about-me.html
.  render_taxonomies:output/categories/jupyter.xml
.  render_taxonomies:output/es/categories/talks.xml
.  render_taxonomies:output/es/categories/gh-pages.xml
.  render_pages:output/posts/hello-world-again.html
.  render_pages:output/es/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
.  render_taxonomies:output/categories/typescript.xml
.  render_taxonomies:output/es/categories/themes.xml
.  render_taxonomies:output/es/categories/github.xml
.  render_pages:output/es/posts/rise-510-is-out.html
.  render_pages:output/es/posts/we-are-above-1000-stars.html
.  render_taxonomies:output/categories/threads.xml
.  render_taxonomies:output/es/categories/extension.xml
.  render_taxonomies:output/es/categories/binder.xml
.  render_pages:output/es/posts/trading-logbook-update-3.html
.  render_pages:output/es/posts/rise-meets-jupyterlab.html
.  render_taxonomies:output/categories/local.xml
.  render_taxonomies:output/es/categories/pdf.xml
.  render_taxonomies:output/es/categories/performance.xml
.  render_pages:output/es/posts/rise-500-is-out.html
.  render_pages:output/es/posts/rise-400b1-is-available-please-test-it.html
.  render_taxonomies:output/categories/flood.xml
.  render_taxonomies:output/es/categories/rise.xml
.  render_taxonomies:output/es/rss.xml
.  render_pages:output/es/posts/how-to-pin-conda.html
.  render_pages:output/es/posts/coming-back.html
.  render_taxonomies:output/categories/opensource.xml
.  render_taxonomies:output/es/categories/pip.xml
.  render_pages:output/es/posts/zen-themes-updated.html
.  render_pages:output/es/posts/48-themes-for-your-ipython-notebook.html
.  render_taxonomies:output/categories/ipyscript.xml
.  render_taxonomies:output/es/categories/connectivity.xml
.  render_pages:output/es/posts/loader-and-writer-ipython-nbextensions-to-easily-edit-your-text.html
.  render_pages:output/es/posts/slideviewer-a-simple-way-to-share-your-ipython-slides.html
.  render_taxonomies:output/categories/less.xml
.  render_taxonomies:output/es/categories/workflow.xml
.  render_pages:output/es/posts/my-ipython-powered-semi-automatic-git-workflow.html
.  render_pages:output/es/posts/deploy-your-nikola-powered-blog-content-from-the-ipython-notebook.html
.  render_taxonomies:output/categories/viper.xml
.  render_taxonomies:output/es/categories/politics.xml
.  render_pages:output/es/posts/a-poor-man-spell-checker-for-the-ipython-notebook.html
.  render_pages:output/es/posts/tweet-me-said-an-ipython-notebook-cell-and-i-did-it.html
.  render_taxonomies:output/categories/toggle.xml
.  render_taxonomies:output/es/categories/pyconar.xml
.  render_pages:output/es/posts/dont-write-scripts-just-write-ipyscripts.html
.  render_pages:output/es/posts/pyconar-2013.html
.  render_taxonomies:output/categories/twitter.xml
.  render_taxonomies:output/es/categories/reveal.xml
.  render_pages:output/es/posts/trading-logbook-update-22-nov-2013.html
.  render_pages:output/es/posts/live-trading-logbook.html
.  render_pages:output/es/posts/bidirectional-ipython-nikola-workflow-to-write-your-blog-post.html
.  create_bundles:output/assets/js/all-nocdn.js
.  create_bundles:output/assets/css/all-nocdn.css
.  create_bundles:output/assets/css/all.css
.  sitemap:output/sitemap.xml
.  sitemap:output/sitemapindex.xml

Now you have your site rebuilt, let's commit the changes so we don't loss the new content.

In [5]:
!git add -u
  Click me to hide the output
In [6]:
!git status
  Click me to hide the output
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   ../.doit.db.bak
	modified:   ../.doit.db.dat
	modified:   ../.doit.db.dir
	modified:   ../.ipynb_checkpoints/Start-checkpoint.ipynb
	modified:   ../Start.ipynb
	modified:   ../__pycache__/conf.cpython-35.pyc
	modified:   ../cache/jinja/__jinja2_1424a9c95f5ec8e60d413c42a25bc77a4b63ee8b.cache
	modified:   ../cache/jinja/__jinja2_42065261e76b7ac61d15945dd99b46d11ef2d31d.cache
	modified:   ../cache/jinja/__jinja2_5e46cfeeff2a14274a55bed284465c9788e60bfe.cache
	modified:   ../cache/jinja/__jinja2_bf78ea284af06dd653f1623611857af052bad3c2.cache
	modified:   ../cache/jinja/__jinja2_d18a7e23288807856bde0b72920980e5c037e91e.cache
	modified:   ../output/2017/index.html
	modified:   ../output/archive.html
	modified:   ../output/categories/aikido.xml
	modified:   ../output/categories/base16.xml
	modified:   ../output/categories/blog.xml
	modified:   ../output/categories/conda.xml
	modified:   ../output/categories/config.xml
	modified:   ../output/categories/connectivity.xml
	modified:   ../output/categories/css.xml
	modified:   ../output/categories/daniela.xml
	modified:   ../output/categories/extension.xml
	modified:   ../output/categories/facu.xml
	modified:   ../output/categories/facundo.xml
	modified:   ../output/categories/family.xml
	modified:   ../output/categories/first_post.xml
	modified:   ../output/categories/flood.xml
	modified:   ../output/categories/format.xml
	modified:   ../output/categories/gh-pages.html
	modified:   ../output/categories/gh-pages.xml
	modified:   ../output/categories/git.html
	modified:   ../output/categories/git.xml
	modified:   ../output/categories/index.html
	modified:   ../output/categories/ipyscript.xml
	modified:   ../output/categories/ipython.xml
	modified:   ../output/categories/ipytmpl.xml
	modified:   ../output/categories/javascript.xml
	modified:   ../output/categories/jinja.xml
	modified:   ../output/categories/jupyter.html
	modified:   ../output/categories/jupyter.xml
	modified:   ../output/categories/jupyterlab.xml
	modified:   ../output/categories/less.xml
	modified:   ../output/categories/life.xml
	modified:   ../output/categories/linux.xml
	modified:   ../output/categories/local.xml
	modified:   ../output/categories/magic.xml
	modified:   ../output/categories/minimap.xml
	modified:   ../output/categories/mipyex.xml
	modified:   ../output/categories/nbconvert.xml
	modified:   ../output/categories/nbviewer.xml
	modified:   ../output/categories/nikola.html
	modified:   ../output/categories/nikola.xml
	modified:   ../output/categories/opensource.xml
	modified:   ../output/categories/osx.xml
	modified:   ../output/categories/pdf.xml
	modified:   ../output/categories/performance.xml
	modified:   ../output/categories/pinned.xml
	modified:   ../output/categories/pip.xml
	modified:   ../output/categories/politics.xml
	modified:   ../output/categories/pyconar.xml
	modified:   ../output/categories/python.xml
	modified:   ../output/categories/reveal.xml
	modified:   ../output/categories/rise.xml
	modified:   ../output/categories/scipycon.xml
	modified:   ../output/categories/slideshow.xml
	modified:   ../output/categories/spellcheck.xml
	modified:   ../output/categories/talks.xml
	modified:   ../output/categories/theme.xml
	modified:   ../output/categories/themes.xml
	modified:   ../output/categories/threads.xml
	modified:   ../output/categories/toggle.xml
	modified:   ../output/categories/trading.xml
	modified:   ../output/categories/tutorials.xml
	modified:   ../output/categories/twitter.xml
	modified:   ../output/categories/typescript.xml
	modified:   ../output/categories/videos.xml
	modified:   ../output/categories/viper.xml
	modified:   ../output/categories/win.xml
	modified:   ../output/categories/workflow.html
	modified:   ../output/categories/workflow.xml
	modified:   ../output/categories/zen.xml
	modified:   ../output/categories/zenmode.xml
	modified:   ../output/es/2012/06/index.html
	modified:   ../output/es/2012/09/index.html
	modified:   ../output/es/2012/10/index.html
	modified:   ../output/es/2012/11/index.html
	modified:   ../output/es/2012/12/index.html
	modified:   ../output/es/2012/index.html
	modified:   ../output/es/2013/01/index.html
	modified:   ../output/es/2013/02/index.html
	modified:   ../output/es/2013/04/index.html
	modified:   ../output/es/2013/05/index.html
	modified:   ../output/es/2013/08/index.html
	modified:   ../output/es/2013/09/index.html
	modified:   ../output/es/2013/10/index.html
	modified:   ../output/es/2013/11/index.html
	modified:   ../output/es/2013/12/index.html
	modified:   ../output/es/2013/index.html
	modified:   ../output/es/2014/03/index.html
	modified:   ../output/es/2014/04/index.html
	modified:   ../output/es/2014/05/index.html
	modified:   ../output/es/2014/index.html
	modified:   ../output/es/2016/05/index.html
	modified:   ../output/es/2016/06/index.html
	modified:   ../output/es/2016/08/index.html
	modified:   ../output/es/2016/index.html
	modified:   ../output/es/2017/06/index.html
	modified:   ../output/es/2017/07/index.html
	modified:   ../output/es/2017/11/index.html
	modified:   ../output/es/2017/index.html
	modified:   ../output/es/archive.html
	modified:   ../output/es/categories/aikido.xml
	modified:   ../output/es/categories/base16.xml
	modified:   ../output/es/categories/blog.xml
	modified:   ../output/es/categories/conda.xml
	modified:   ../output/es/categories/config.xml
	modified:   ../output/es/categories/connectivity.xml
	modified:   ../output/es/categories/css.xml
	modified:   ../output/es/categories/daniela.xml
	modified:   ../output/es/categories/extension.xml
	modified:   ../output/es/categories/facu.xml
	modified:   ../output/es/categories/facundo.xml
	modified:   ../output/es/categories/family.xml
	modified:   ../output/es/categories/first_post.xml
	modified:   ../output/es/categories/flood.xml
	modified:   ../output/es/categories/format.xml
	modified:   ../output/es/categories/gh-pages.html
	modified:   ../output/es/categories/gh-pages.xml
	modified:   ../output/es/categories/git.html
	modified:   ../output/es/categories/git.xml
	modified:   ../output/es/categories/index.html
	modified:   ../output/es/categories/ipyscript.xml
	modified:   ../output/es/categories/ipython.xml
	modified:   ../output/es/categories/ipytmpl.xml
	modified:   ../output/es/categories/javascript.xml
	modified:   ../output/es/categories/jinja.xml
	modified:   ../output/es/categories/jupyter.html
	modified:   ../output/es/categories/jupyter.xml
	modified:   ../output/es/categories/jupyterlab.xml
	modified:   ../output/es/categories/less.xml
	modified:   ../output/es/categories/life.xml
	modified:   ../output/es/categories/linux.xml
	modified:   ../output/es/categories/local.xml
	modified:   ../output/es/categories/magic.xml
	modified:   ../output/es/categories/minimap.xml
	modified:   ../output/es/categories/mipyex.xml
	modified:   ../output/es/categories/nbconvert.xml
	modified:   ../output/es/categories/nbviewer.xml
	modified:   ../output/es/categories/nikola.html
	modified:   ../output/es/categories/nikola.xml
	modified:   ../output/es/categories/opensource.xml
	modified:   ../output/es/categories/osx.xml
	modified:   ../output/es/categories/pdf.xml
	modified:   ../output/es/categories/performance.xml
	modified:   ../output/es/categories/pinned.xml
	modified:   ../output/es/categories/pip.xml
	modified:   ../output/es/categories/politics.xml
	modified:   ../output/es/categories/pyconar.xml
	modified:   ../output/es/categories/python.xml
	modified:   ../output/es/categories/reveal.xml
	modified:   ../output/es/categories/rise.xml
	modified:   ../output/es/categories/scipycon.xml
	modified:   ../output/es/categories/slideshow.xml
	modified:   ../output/es/categories/spellcheck.xml
	modified:   ../output/es/categories/talks.xml
	modified:   ../output/es/categories/theme.xml
	modified:   ../output/es/categories/themes.xml
	modified:   ../output/es/categories/threads.xml
	modified:   ../output/es/categories/toggle.xml
	modified:   ../output/es/categories/trading.xml
	modified:   ../output/es/categories/tutorials.xml
	modified:   ../output/es/categories/twitter.xml
	modified:   ../output/es/categories/typescript.xml
	modified:   ../output/es/categories/videos.xml
	modified:   ../output/es/categories/viper.xml
	modified:   ../output/es/categories/win.xml
	modified:   ../output/es/categories/workflow.html
	modified:   ../output/es/categories/workflow.xml
	modified:   ../output/es/categories/zen.xml
	modified:   ../output/es/categories/zenmode.xml
	modified:   ../output/es/galleries/Facu_RN/index.html
	modified:   ../output/es/galleries/Facu_RN/rss.xml
	modified:   ../output/es/galleries/Inundacion/rss.xml
	modified:   ../output/es/galleries/bokehmagic/index.html
	modified:   ../output/es/galleries/bokehmagic/rss.xml
	modified:   ../output/es/galleries/deploy/rss.xml
	modified:   ../output/es/galleries/loadwrite/index.html
	modified:   ../output/es/galleries/loadwrite/rss.xml
	modified:   ../output/es/galleries/rise/rss.xml
	modified:   ../output/es/galleries/rss.xml
	modified:   ../output/es/galleries/spellchecker/index.html
	modified:   ../output/es/galleries/spellchecker/rss.xml
	modified:   ../output/es/galleries/trades/rss.xml
	modified:   ../output/es/galleries/twitter/rss.xml
	modified:   ../output/es/galleries/zenmode/index.html
	modified:   ../output/es/galleries/zenmode/rss.xml
	modified:   ../output/es/index-5.html
	modified:   ../output/es/index.html
	modified:   ../output/es/posts/rise-510-is-out.html
	modified:   ../output/es/rss.xml
	modified:   ../output/galleries/Facu_RN/index.html
	modified:   ../output/galleries/Facu_RN/rss.xml
	modified:   ../output/galleries/Inundacion/rss.xml
	modified:   ../output/galleries/bokehmagic/index.html
	modified:   ../output/galleries/bokehmagic/rss.xml
	modified:   ../output/galleries/deploy/rss.xml
	modified:   ../output/galleries/loadwrite/index.html
	modified:   ../output/galleries/loadwrite/rss.xml
	modified:   ../output/galleries/rise/rss.xml
	modified:   ../output/galleries/rss.xml
	modified:   ../output/galleries/spellchecker/index.html
	modified:   ../output/galleries/spellchecker/rss.xml
	modified:   ../output/galleries/trades/rss.xml
	modified:   ../output/galleries/twitter/rss.xml
	modified:   ../output/galleries/zenmode/index.html
	modified:   ../output/galleries/zenmode/rss.xml
	modified:   ../output/index-5.html
	modified:   ../output/index.html
	modified:   ../output/posts/rise-510-is-out.html
	modified:   ../output/rss.xml
	modified:   ../output/sitemap.xml
	modified:   ../output/sitemapindex.xml
	modified:   ../plugins/upgrade_metadata/__pycache__/upgrade_metadata.cpython-35.pyc
	modified:   binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	../.bash_logout
	../.bashrc
	../.ipython/
	../.local/
	../.profile
	../cache/jinja/__jinja2_1f7b67a24ba82817190ca9329b4e70f5b83d2aa8.cache
	../cache/jinja/__jinja2_29f4b4300680b610c26f01cd4b344c99659e2ae7.cache
	../cache/jinja/__jinja2_45ac9368227a101d2f06edaefd1c3a89262c46de.cache
	../cache/jinja/__jinja2_57b64e8d8c69c8a0309a317dada665de6a09131f.cache
	../cache/jinja/__jinja2_5e39743f43676d71d1fbf5a3f5e6c7bcd0553d17.cache
	../cache/jinja/__jinja2_697232dc3c14dcf966cb673a46734538fbdcfaff.cache
	../cache/jinja/__jinja2_7569c06e91d40657d212e7347a7c0ba9682aecbe.cache
	../cache/jinja/__jinja2_85b3b28c2af8137138202b66ddb1de1e27daa0cb.cache
	../cache/jinja/__jinja2_8a9ea377d370579847f6f32b831d680ddc1ceac5.cache
	../cache/jinja/__jinja2_91ca140498c6809d832a9440553bc6cb8df50df9.cache
	../cache/jinja/__jinja2_a77ac1ecf914de6946a75d0d3591cbafb1effc32.cache
	../cache/jinja/__jinja2_abbd706e988d6c55c3dd152bf5ed1d756595f719.cache
	../cache/jinja/__jinja2_b04036e3f5288f19927f5dc3b3651ec8b42f8e2c.cache
	../cache/jinja/__jinja2_b807b7a7fd71f025befffb377825b9c7576fe519.cache
	../cache/jinja/__jinja2_b94abb01e952cf6371a6460a7adcea55c54b074e.cache
	../cache/jinja/__jinja2_c28a0a887f59ee48243095e6aad33a6c2aa828d2.cache
	../cache/jinja/__jinja2_dcbc01075586f1698433d8ae5d61d6fc19df7f17.cache
	../cache/jinja/__jinja2_e609ceaaa3f2e31193a281ee74d8fd5b52956a69.cache
	../cache/jinja/__jinja2_e8c5fd6f2818e239fd5346c73f9f426dc69e894f.cache
	../cache/jinja/__jinja2_f10aeb879f232e45fd0c98d26fe4402689ed79bb.cache
	../cache/jinja/__jinja2_f9f7109b3bc5081e641cd485aefaf7bc634b5ee1.cache
	../cache/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
	../cache/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html.dep
	../cache/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html.es
	../cache/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html.es.dep
	../output/2017/12/
	../output/categories/binder.html
	../output/categories/binder.xml
	../output/categories/github.html
	../output/categories/github.xml
	../output/es/2017/12/
	../output/es/categories/binder.html
	../output/es/categories/binder.xml
	../output/es/categories/github.html
	../output/es/categories/github.xml
	../output/es/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
	../output/es/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb
	../output/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
	../output/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb
	.ipynb_checkpoints/binder-+-nikola-+-jupyter-+-github-blogging-resourceless-checkpoint.ipynb

In [7]:
!git add ../cache/*
  Click me to hide the output
In [8]:
!git add ../output/*
  Click me to hide the output
In [9]:
!git add binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb
  Click me to hide the output
In [10]:
!git commit -m "Build the site in my binder instance"
  Click me to hide the output
[master 658c5e23] Build the site in my binder instance
 263 files changed, 5378 insertions(+), 2102 deletions(-)
 rewrite cache/jinja/__jinja2_1424a9c95f5ec8e60d413c42a25bc77a4b63ee8b.cache (79%)
 create mode 100644 cache/jinja/__jinja2_1f7b67a24ba82817190ca9329b4e70f5b83d2aa8.cache
 create mode 100644 cache/jinja/__jinja2_29f4b4300680b610c26f01cd4b344c99659e2ae7.cache
 rewrite cache/jinja/__jinja2_42065261e76b7ac61d15945dd99b46d11ef2d31d.cache (77%)
 create mode 100644 cache/jinja/__jinja2_45ac9368227a101d2f06edaefd1c3a89262c46de.cache
 create mode 100644 cache/jinja/__jinja2_57b64e8d8c69c8a0309a317dada665de6a09131f.cache
 create mode 100644 cache/jinja/__jinja2_5e39743f43676d71d1fbf5a3f5e6c7bcd0553d17.cache
 rewrite cache/jinja/__jinja2_5e46cfeeff2a14274a55bed284465c9788e60bfe.cache (85%)
 create mode 100644 cache/jinja/__jinja2_697232dc3c14dcf966cb673a46734538fbdcfaff.cache
 create mode 100644 cache/jinja/__jinja2_7569c06e91d40657d212e7347a7c0ba9682aecbe.cache
 create mode 100644 cache/jinja/__jinja2_85b3b28c2af8137138202b66ddb1de1e27daa0cb.cache
 create mode 100644 cache/jinja/__jinja2_8a9ea377d370579847f6f32b831d680ddc1ceac5.cache
 create mode 100644 cache/jinja/__jinja2_91ca140498c6809d832a9440553bc6cb8df50df9.cache
 create mode 100644 cache/jinja/__jinja2_a77ac1ecf914de6946a75d0d3591cbafb1effc32.cache
 create mode 100644 cache/jinja/__jinja2_abbd706e988d6c55c3dd152bf5ed1d756595f719.cache
 create mode 100644 cache/jinja/__jinja2_b04036e3f5288f19927f5dc3b3651ec8b42f8e2c.cache
 create mode 100644 cache/jinja/__jinja2_b807b7a7fd71f025befffb377825b9c7576fe519.cache
 create mode 100644 cache/jinja/__jinja2_b94abb01e952cf6371a6460a7adcea55c54b074e.cache
 rewrite cache/jinja/__jinja2_bf78ea284af06dd653f1623611857af052bad3c2.cache (81%)
 create mode 100644 cache/jinja/__jinja2_c28a0a887f59ee48243095e6aad33a6c2aa828d2.cache
 rewrite cache/jinja/__jinja2_d18a7e23288807856bde0b72920980e5c037e91e.cache (75%)
 create mode 100644 cache/jinja/__jinja2_dcbc01075586f1698433d8ae5d61d6fc19df7f17.cache
 create mode 100644 cache/jinja/__jinja2_e609ceaaa3f2e31193a281ee74d8fd5b52956a69.cache
 create mode 100644 cache/jinja/__jinja2_e8c5fd6f2818e239fd5346c73f9f426dc69e894f.cache
 create mode 100644 cache/jinja/__jinja2_f10aeb879f232e45fd0c98d26fe4402689ed79bb.cache
 create mode 100644 cache/jinja/__jinja2_f9f7109b3bc5081e641cd485aefaf7bc634b5ee1.cache
 create mode 100644 cache/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
 create mode 100644 cache/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html.dep
 create mode 100644 cache/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html.es
 create mode 100644 cache/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html.es.dep
 create mode 100644 output/2017/12/index.html
 create mode 100644 output/categories/binder.html
 create mode 100644 output/categories/binder.xml
 create mode 100644 output/categories/github.html
 create mode 100644 output/categories/github.xml
 create mode 100644 output/es/2017/12/index.html
 create mode 100644 output/es/categories/binder.html
 create mode 100644 output/es/categories/binder.xml
 create mode 100644 output/es/categories/github.html
 create mode 100644 output/es/categories/github.xml
 rewrite output/es/galleries/bokehmagic/rss.xml (76%)
 rewrite output/es/galleries/loadwrite/rss.xml (67%)
 rewrite output/es/galleries/spellchecker/rss.xml (62%)
 rewrite output/es/galleries/zenmode/rss.xml (73%)
 create mode 100644 output/es/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
 create mode 100644 output/es/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb
 rewrite output/galleries/bokehmagic/rss.xml (76%)
 rewrite output/galleries/loadwrite/rss.xml (67%)
 rewrite output/galleries/spellchecker/rss.xml (62%)
 rewrite output/galleries/zenmode/rss.xml (73%)
 create mode 100644 output/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
 create mode 100644 output/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb

And I can push the content (git push origin master) using the terminal as we did in a previous step.

Visualize your site

This could be an issue because Nikola offers a nikola serve command to preview your site, but using it inside Binder is probably not trivial. And you can do a little trick to be able to explore the new content. You just need to deploy the output folder contaning the updated site under the same gh-pages branch from where you usually serve your site.

And you can do that quite easily with:

Note: git stash is only needed here because I am executing git commands from this very same future blog post

In [11]:
!git stash
  Click me to hide the output
Saved working directory and index state WIP on master: 658c5e23 Build the site in my binder instance
HEAD is now at 658c5e23 Build the site in my binder instance
In [12]:
!git checkout gh-pages
  Click me to hide the output
Switched to branch 'gh-pages'
Your branch is up-to-date with 'origin/gh-pages'.
In [14]:
!git checkout master -- ../output
  Click me to hide the output
In [15]:
!git commit -m "Add output dir to gh-pages to pre-visualize the changes"
  Click me to hide the output
[gh-pages 4fb3a46f] Add output dir to gh-pages to pre-visualize the changes
 490 files changed, 3060 insertions(+), 1162 deletions(-)
 create mode 100644 output/2017/12/index.html
 create mode 100644 output/categories/binder.html
 create mode 100644 output/categories/binder.xml
 create mode 100644 output/categories/github.html
 create mode 100644 output/categories/github.xml
 create mode 100644 output/es/2017/12/index.html
 create mode 100644 output/es/categories/binder.html
 create mode 100644 output/es/categories/binder.xml
 create mode 100644 output/es/categories/github.html
 create mode 100644 output/es/categories/github.xml
 rewrite output/es/galleries/bokehmagic/rss.xml (97%)
 rewrite output/es/galleries/spellchecker/rss.xml (73%)
 rewrite output/es/galleries/trades/rss.xml (66%)
 rewrite output/es/galleries/zenmode/rss.xml (79%)
 create mode 100644 output/es/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
 create mode 100644 output/es/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb
 rewrite output/galleries/bokehmagic/rss.xml (97%)
 rewrite output/galleries/spellchecker/rss.xml (73%)
 rewrite output/galleries/trades/rss.xml (66%)
 rewrite output/galleries/zenmode/rss.xml (79%)
 create mode 100644 output/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.html
 create mode 100644 output/posts/binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb

And now, you just push the content into the gh-pages branch with git push origin gh-pages (use the terminal as I indicarted before) and you can visit your draft site appeding output to the base url, in my case: http://www.damian.oquanta.info/output/.

If you are not happy with it, if it does not looks like right, just iterate with more changes! Otherwise you can go to the deploy step!

Deploy your site

OK, given the previous steps, I guess you will figure out how to perform the next steps:

NOTE: rm is only needed here because I am executing git commands from this very same future blog post

In [17]:
!rm binder-+-nikola-+-jupyter-+-github-blogging-resourceless.ipynb 
  Click me to hide the output
In [18]:
!git checkout master
  Click me to hide the output
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
In [19]:
!git add -u
  Click me to hide the output
In [20]:
!git commit -m "Add new stuff to the blog post (mostly deploy section)"
  Click me to hide the output
[master 7927ad63] Add new stuff to the blog post (mostly deploy section)
 1 file changed, 291 insertions(+), 25 deletions(-)

In the terminal: git push origin master to persist the latest content... again. And use a subtree approach to split the output directory and put it as a new gh-pages branch.

Note: First delete the existing gh-pages branch to avoid conflicts and cd .. because you need to subtree from the top directory.

In [21]:
!git branch -d gh-pages
  Click me to hide the output
warning: deleting branch 'gh-pages' that has been merged to
         'refs/remotes/origin/gh-pages', but not yet merged to HEAD.
Deleted branch gh-pages (was 4fb3a46f).
In [22]:
cd ..
  Click me to hide the output
/home/jovyan
In [23]:
!git subtree split --prefix output -b gh-pages
  Click me to hide the output
Created branch 'gh-pages'
7092c69ccde3f7cd2a5d31c2a86b74739d665ac0

Finally, in the terminal: git push -f origin gh-pages:gh-pages to deploy your site and remove the local gh-pages with git branch -D gh-pages.

And you are done!!!

Note: As you probably realized, you can run all the commands I described from the terminal and use the notebook just to write the blog posts. That would be, probably, the most common pattern. But this post in nicer and more explanatory if I run most of the commands here ;-)

Conclusion

You have your new post live, in a resourceless sort of workflow, thanks to the Jupyter ecosystem, Nikola and Github.

OK, long enough post. Sorry about that, but I need to give you the complete workflow if you want/need to use it.

Happy coding!

And blogging!

Don't forget this blog post is an ipynb file itself! So, you can download it from the "Source" link at the top of the post if you want to play with it ;-)

Comments powered by Disqus