+-----------------------------------------+
| Project: Burrow                         |
+-----------------------------------------+--------+
|                                                  |
| Date: 20181116-17:50                             |
| Author: Sloum                                    |
| Soundtrack: N/A                                  |
|                                                  |
+--------------------------------------------------+----------------------+

When I found out about gopher as a protocol it sounded interesting. I
like content more than I like style (even though style is a part
of what I am paid to do with computers). I like accessing things through
a terminal and started out using Lynx. It worked and was pretty enjoyable.

Something else I liked about gopher immediately upon hearing about it was
its simplicity. I was able to read and udnerstand the RFC(s) for it pretty
easily. The project I was working on was winding down (a message board
platform for the terminal over HTTP), as it was not really going the way I
wanted, but I didn't feel like the idea was solid enough to really redo
and work into something great. Maybe I'll return to it at some point.
Anyway, back to gopher: I decided making a gopher browser would be fun. So
I set to it. I chose Python 3.x to write it in,a s I am comfortable with
Python and have fun writing Python code. For the windowing/gui management
I went with Tkinter (Tk/Tcl). I started out looking into GTK and QT, but
since I had worked with Tkinter before and it was pretty solidly cross-
platform it seemed like a good fit.

I am far enough into my little project that I have been using my browser
almost exclusively to browse gopherholes. It is working really well. I
need to add some more robust error handling. It catches most, but not all
errors at present. I have named the project "Burrow". I am moving toward
what I will call a 1.0 release pretty quickly. The available functionality
at present is as follows:

- Browse to an address from an address bar
- Gopher menus have clickable links that take you to their target
- Persistent homepage that stores favorites (that can be added or removed)
- Back, Forward, and Home buttons
- Easy on the eyes dark color theme based on the theme 'Obsidian'
- Rendering of gopher menus, text, and images
- Images are rendered in the browser window, with a download link above them
- Right click context menus allow for lots of different options
- Mouse hover udnerlines links and displays destination in status bar
- Saving text, menus, and images is available in the right click menu

All of those work really well. My GUI object is a mess that should really get
refactored and split up... but, ya know, it happens. I'll get to it sooner or
later. The features I have on deck are as follows:

- Download initiated by clicking on a binary, sound, video, zip, etc item
- Configurable color scheme
- Configurable load behavior (home page or last visited)
- Tabbed browsing (this will likely be last, as it is the biggest udnertaking)

After those, I think I should be pretty set for a tool I will like to use for
browsing gopher. I love homemade tools. Sometimes they are flawed, but they
general have character and I love them for their flaws and character.

I will likely post source code soon for any of you out there that would like
to give Burrow a try. It is a fully open source GPL project, so feel free to
take and and make it your own, or contribute to the github[1].

Things to note: Right now it is configured for Python 3.x, but I will be
updating the code to provide backward compatibility to Python 2.6+. At
present it works nicely on Debian based linux, and has some issues that I am
working through for OSX (the OSX version of Tkinter does not support PNG images
out of the box, so I just need to do a few minor tweaks). On Ubuntu, a few
packages will be needed from APT as tkinter does not seem to come with the
basic Python installs, or is missing vital packages. The only other dependency,
regardless of system, is Pillow/PIL (which is available through PIP).

[1] https://github.com/sloumdrone/burrow