first_page

jupyter central

The Algorithm Design Manual

I am sure there are many reasons why Span<T> (and Memory<T>) was introduced to the .NET Framework. To me, these C# language features are a response to the dangerous (and tedious) supremacy of handling data in unmanaged memory in general and the ease of handling gigantic chunks of in-memory data in Python in particular.

My interest in Python goes back to my attraction to Blender 3D but the active use of Python really got going for me with my discovery of jupyter notebooks. In the same flippant manner that I regard Span<T> (and Memory<T>) as response to what has been in enjoyed in Python (inter-operating with unmanaged libraries) for years, jupyter notebooks are an open-source response to commercial Mathematica notebooks.

jupyter notebooks online

The complications around sharing Mathematica notebooks online are now laughable to me as I use Azure notebooks and binder which I can point at my jupyter central repo.

Mathematica will reign supreme in many, many applications from its three decades of development but Mathematica by design has oneterm-rewriting language for its kernel while jupyter notebooks can support several kernels in addition to the traditional/historical python. There is even a kernel for the Wolfram language! Moreover, jupyter notebooks can be supported by Docker containers via JupyterHub, spinning up custom environments for, say, anaconda.

Coursera algorithms jupyter notebooks

Algorithms (4th Edition)

I decided to take on the Princeton course, Algorithms, Part I, based on my ignorant assumption that I could participate through the use of jupyter notebooks. I discovered quickly that the course requires the use of Java. I then responded with more ignorance, thinking that I can use a jupyter Java kernel.

As of this writing, Microsoft’s Azure notebooks offers only an F# kernel as an alternative to Python. This means that I might find a repo with a YAML file showing me how to setup a Java-kernel jupyter environment for binder. But the binder experience is still in beta and quite temporal.

To not use jupyter notebooks for this study means I would have to work exclusively on Ubuntu virtual machines where I can tolerate Java installations. I cannot bring myself to dump upwards of 600MB of Java environment on a Windows machine just to “play” with it. Pathetically, I dropped out of the Princeton course.

The Princeton course is a wonderful product of the Robert Sedgewick ‘camp’ which is responsibly Java based, coming with all the formal time constraints of actively participating in a college course. I have found the algorist camp, the online world setup by Steven S. Skiena (algorist.com), more freeform, language-agnostic and casual.

And it must be said that there is a Udemy course in Python by Holczer Balazs, his Algorithms and Data Structures in Python. There is also a Pluralsight course, Working with Graph Algorithms in Python, by Googler Janani Ravi. But these Python-friendly courses are not free of charge.

learning data visualization and algorithms with jupyter notebooks

When I quit the Sedgewick course, I was very interested in visualizing percolation in a jupyter notebook. There are a couple of repos on GitHub that look promising. Stumbling into examples of additional visualizations, I have this jumble so far:

going forward

When I quit the Sedgewick course, I left a jupyter notebook of my notes and sense of accomplishment. So far, I am regarding my study of the backtracking algorithm in C# via LINQpad as my only accomplishment in this area.

It feels like I am planning to continue my read of The Algorithm Design Manual (which was interrupted by following a disinterested third-party into the Sedgewick camp). Staying focused on the Skiena camp as an introduction and watching his lecture videos without time constraints might be the way to go. I can do the other stuff later which, sadly, might be years later.

The Skiena read is punctuated by exercises that will lead me back to jupyter notebooks. It should help to regard this Blog entry as my survey of the lay of the land, allowing me to withdraw and focus on my comfort zone of self-study. There is no pleasing of others.

https://github.com/BryanWilhite/