Using Jupyter as a Music Notebook

I recently started playing guitar again after a long absence and wanted to start making some notes in a digital form. Unfortunately, I didn't find any good tools. There is TeX of course, which can do anything, but I was hoping for something a bit more WYSIWYGy. There are some very good tools available for musical scores (MuseScore, Frescobaldi), but I want something that is more like a traditional notebook with lots of notes interspersed with occasional musical notation (in both traditional and tablature forms).

So an obvious potential candidate is Jupyter (nee IPython), but it has no support for musical notation out of the box. But it is doable and in this post I'll walk through how I got it to work on my Mac. This is also my first attempt at using a Jupyter notebook as my blog post in Nikola so I'm kiling two birds with one stone.

Read more…

Building a Zite Replacement (Part 10)

I've spent the past few days refining the web server, largely for diagnostic purposes, so it can replace the old TkInter app. I can seen articles for categories or feeds, their rank, and detailed information on why they received particular categories and ranks. This has enabled me to improve the categorization and ranking algorithms. I'm at a point now where I feel I need a lot more sources than the ~4000 I have right now, as well as more categories. The latter is more complex and will take me back to some of my earlier explorations in clustering, etc. The former largely involves mining more of the web to find useful sites.

Read more…

Graham Wheeler on

Building a Zite Replacement (Part 9)

Well, I hope you've all brushed your teeth after all that Halloween candy.

Today I'm going to show how I build a simple web server to view my feed articles using node.js and Express, along with MongoDB. I have a simple category classifier which finds the best Jacard similarity (described earlier) to a set of category exemplars (i.e. 'pseudo-articles' for a category containing just key words that are typical for that category). It needs a lot of tuning and the earlier tkInter program was meant for that but tkInter proved to have problems. So time to use some more modern techologies!

Read more…

Graham Wheeler on

Building a Zite Replacement (Part 8)

Happy Halloween, all!

I'm sitting here handing out candy and glow necklaces to all comers so its a good time to write a new post.

It's been a while since much happened as I've been really busy with the beta release of Google Cloud Datalab, which is my day job. But now that is out and it's the weekend and lousy weather here in the Pacific Northwest it's been a good day t get back to things.

Today I did something I've been meaning to do for a while, which is to change the code to populate a MongoDB database rather than writing files to the file system. Interestingly it seems to be quite a bit slower than the file system but hopefully it will scale better and make up for things when I have ad-hoc queries to do.

Read more…

Graham Wheeler on

Node, npm and Express

Things have been slow on the blogging front but there has been progress on the Zite replacement. I'll write more about that soon but part of what I have been doing is looking into what server-side technology to use.

As far as a database goes, this seems like a no-brainer. I'm dealing with JSON documents that I can either spend some effort on normalizing to put into a SQL database, or simply keep them as is and put them in a database that supports that form, and the obvious choice then is MongoDB, which uses a binary form of JSON.

Read more…

Graham Wheeler on

Building a Zite Replacement (Part 7)

It's been a while since the last post but I haven't been idle. Here are some of the things I've been up to:

  • tweaking the code to parse content better
  • moving from IPython notebook to a library that I can use to do batch operations as well as interactive exploration modifying the code do do parallel fetches - or more precisely, to operate asynchronously; because of the Python GIL I still have just one thread for now. But I can kick off up to 40 HTTP requests at a time which speeds things up a lot, as I have about 4000 sites I'm working with now;
  • exploring the TextBlob library, a library that sits above the Python NLTK and can parse sentences and words (more on that below)
  • building a GUI application with Tkinter that lets me quickly view feeds, terms, categories and articles, delete feeds, tweak category examplars and see the results, and so on. This has been invaluable in building up and fine tuning my category examplars, although it is still a work in progress. It's been somewhat painful as I haven't used Tk in about two decades but I've mostly got it to do what I want.

    Read more…

Graham Wheeler on