Tools of the Trade

In this post, I’d like to establish the baseline of the computing tools I’m using. This is one of the rare occasions where I actually do want to just list out a bunch of technical things for the sake of those people for whom it might be helpful. Please skip it if it’s not relevant to you.

Under the hood

Nearly all of my programming is done in Python. I started using it in 2015 and didn’t look back. The language itself is very well-structured, lots of people use it to do scientific computing of all sorts, and the package ecosystem is vibrant, easy to work with, and often open source. There are a ton of Python resources out there for even first-time programmers. I encourage you to start using it if you haven’t already!

When I need one, Bash is my second scripting language of choice.

I program on a Mac. For managing ancillary software that is not in the Python ecosystem, I generally use Homebrew when possible.

For managing my Python work, I use PyEnv to manage different versions of the language, the built-in venv module to create virtual environments, and pip (and pip-tools) to manage packages, both others’ and my own.

For experimental and demonstrative code work, I frequently make use of iPython (a better interactive Python shell) and Jupyter Notebooks, both of which can be installed with pip. For debugging, the built-in pdb package is super useful.

Outside of Terminal (for command line and iPython) and Chrome (for notebooks and web apps), I write most of my project code using the PyCharm IDE, but I also use BBEdit and Sublime for particular editing needs.

Python 3 has excellent support for Unicode, so working with a language like Sanskrit is relatively straightforward. Whether working with Roman transliteration and diacritics or with one of the Indic scripts, you can basically just do what you need. For a base representation, I generally use IAST, with SLP1 as a hub for transliteration. I type IAST fluently using my Mac’s built-in ABC+ input source.

For my NLP work, I stick to Python packages when I can (e.g. gensim, scipy, nltk), but if there’s a better tool in a different language, I won’t avoid it on principle. For example, I’ve used topic modeling software programmed in R for the Vātāyana project. On the one hand, it is really nice to be able to state as many of your dependencies as possible in one requirements.txt or setup.py file that pip can understand and process automatically. But there’s no escaping that at least some supplementary software needs to be installed with Homebrew, etc., so absolutism isn’t really even an option.

For front-end design, I’m no expert, so I’ve stuck to Flask, Bootstrap CSS, and minimal vanilla JavaScript for bare-bones but effective web apps.

For code versioning and hosting, I use git and GitHub. I’ve actually now worked more with GitLab thanks to my day job, but I think both options are great. (Exception: “Merge Request” makes way more sense to me than “Pull Request”, I have to say.) My personal projects are on GitHub at https://github.com/tylergneill?tab=repositories.

For getting my code up on the internet in a working form that others can interact with, I use PythonAnywhere and, to a lesser extent, Heroku. PythonAnywhere has been great for abstracting away infrastructure details so that I could focus on the parts of coding that are interesting to me. After a few years working with Docker and AWS at my job, I’m now feeling ready to move more of my projects over to Heroku, to give me more control. I think AWS would be overkill at this point. (EDIT Oct 2024: I’ve now largely migrated over to Digital Ocean, using Docker images hosted on Docker Hub.)

For domain management, I’ve used NameCheap for a few years, but I’m thinking of moving over to PorkBun for cost reasons. I pay extra for .info domains because, well, it feels right.

I only have one project with database support so far, and for that, I went with MongoDB Atlas, meaning that my project hosted on PythonAnywhere talks to a managed external database server over the internet. There is some lag and other limitations involved with this, so I may try to move to managing my own databases more locally on Heroku dynos. (EDIT Oct 2024: It turned out to be not so bad to just host my own MongoDB instance on the Digital Ocean Droplet.)

These days (early 2024), the cost for all these things together (including this Squarespace website) is a little under $500/yr, which I think is well worth it.

If you have further questions about the tech stack underneath the projects discussed here, feel free to ask!

Previous
Previous

Skrutable

Next
Next

First post!