Avatar of Daniel Quinn

Daniel Quinn

Senior Developer at Founders4Schools

Decision at The Paperless Project about Docker

Avatar of danielquinn
Senior Developer at Founders4Schools

We use Docker because Paperless is a stand-alone application with some complicated dependencies. Rather than expecting our users to figure out how to install & setup Tesseract to run on their local systems (if said systems even have support for it), we can just tell them to run docker-compose up and everything else is just magic!

14 upvotes1.1K views

Decision about GitLab

Avatar of danielquinn
Senior Developer at Founders4Schools

I strongly recommend GitLab because it's got all the tools you need: no fiddling with 3rd party components that want sweeping permissions on all of your GitHub repositories just to do a single CI job. GitLab's got everything from review tools, to integrated CI, scheduled builds, hosted containers, test coverage badges, sprint planning boards, issue tracker, wiki, and an API if you want to poke at this all programmatically. All of this, for Free (as in beer and freedom) hosted by GitLab or even by you on-site.

11 upvotes1.9K views

Decision about Linux, Python, Docker

Avatar of danielquinn
Senior Developer at Founders4Schools

Docker is amazeballs for things like testing your application in multiple environments and software versions. You can write one Python library and then automate the execution of that same test suite in 10 different Linuxes, and 4 different Python versions -- all as part of your CI.

It's also handy in this age of "spin up a thing to take care of X" -- though I tend to try to avoid having too many moving parts in an application. Still, being able to stand up a caching server, queue server, and data server -- all in about 30 seconds is really handy for development.

7 upvotes2 comments2.3K views

Decision at The Paperless Project about Django, Tesseract OCR, Python

Avatar of danielquinn
Senior Developer at Founders4Schools

I use Python because it's a beautiful (both visually and in terms of function) and multi-purpose language. In Paperless, Python is the primary connecting tissue holding all of the parts together: it's the basis of the consumption engine (communicating with Tesseract OCR via pyOCR) and the user-interface (based on Django).

6 upvotes993 views

Decision at The Paperless Project about Django

Avatar of danielquinn
Senior Developer at Founders4Schools

Django is an amazing web framework that comes with everything you need, and makes it easy to turn off the stuff you don't.

In the case of Paperless, I needed a simple way to build a site that had a pre-built "CRUD" interface, and that's the Django admin. Django also supports things like management commands and signals, which we use throughout the project along with its built-in testing framework.

5 upvotes414 views

Decision at The Paperless Project about Tesseract OCR

Avatar of danielquinn
Senior Developer at Founders4Schools

I needed a tool that could convert a rasterised image into text. There are a few out there, but I don't think there's any that match Tesseract OCR for cross-language capability, community support and freedom (it's Free as in freedom and beer).

The setup isn't super-obvious, but once you've got it figured out, all of that can be automated. On top of that, there's lots of programming language-specific libraries out there that'll help plug your stuff into it.

5 upvotes254 views

Decision at The Paperless Project about Travis CI

Avatar of danielquinn
Senior Developer at Founders4Schools

I decided on Travis CI because its required permissions were reasonable. Where most Github apps require insane stuff like write access to all repos, public & private, Travis only needed a webhook setup.

On top of that, the interface is slick and easy to follow and their support for Free projects is free :-)

5 upvotes147 views

Decision about Asana

Avatar of danielquinn
Senior Developer at Founders4Schools

I'm routinely frustrated by Asana because it's clearly a tool created by designers, imposed on developers.

  • No integration with code repositories.
    • No task numbers
    • You can't reference a ticket in a commit and expect any feedback in Asana
    • You certainly can't close a ticket with a commit.
    • There's no link between CI progress and a ticket.
  • No Markdown support (you can't even put links on text!)
  • Boards and task lists aren't linked.
  • It suppresses middle-click so you can't open more than one ticket at once.
  • It logs every last change to things like assignments, but then folds up the conversation to suppress past comments.

Here's what it does have:

  • Pretty backgrounds
  • Cute little creatures that appear at random

This is not a tool for engineering. Please don't force your nerds to use it.

4 upvotes177 views

Decision at The Paperless Project about GitLab, GitHub

Avatar of danielquinn
Senior Developer at Founders4Schools

We use GitHub because it's the default go-to place for the Free software community. Currently, Github is enjoying the network effect: you write code there because everyone writes there code there, so this choice was less of a choice than "what we all end up doing".

Personally, I prefer GitLab for its bundled-in tools like CI, boards, packaging, and Docker repo, but so long as the vast majority of talented nerds out there are on Github, that's where Paperless will be.

3 upvotes5.4K views

Decision at The Paperless Project about PostgreSQL, SQLite

Avatar of danielquinn
Senior Developer at Founders4Schools

SQLite is a tricky beast. It's great if you're working single-threaded, but a Terrible Idea if you've got more than one concurrent connection. You use it because it's easy to setup, light, and portable (it's just a file).

In Paperless, we've built a self-hosted web application, so it makes sense to standardise on something small & light, and as we don't have to worry about multiple connections (it's just you using the app), it's a perfect fit.

For users wanting to scale Paperless up to a multi-user environment though, we do provide the hooks to switch to PostgreSQL .

2 upvotes589 views