--- title: "Using tools with appropriate ability" date: 2022-01-31 lang: en categories: [ blog ] tags: [luna, django, decision, tools, "use cases"] translationKey: "luna-django" --- As you may have learnt from my previous posts (blog post and fedi posts), I'm writing a client for [lotide][lotide] named [Luna][luna]. And you might also have seen me saying it's using Django as framework and my remark on it being unfitting. I am going to elaborate more on this in this post. [lotide]: https://sr.ht/~vpzom/lotide/ [luna]: https://sr.ht/~huyngo/luna/ ## Django [Django is a batteries-included web backend framework][django]. It includes: - web server - router - database connector and ORM - database migration tool - authentication - admin tool - command line framework - templating engines - internationalization tools - form handlers - email There is a lot more that can be installed as plugins, and some of these tools can be unplugged from the `INSTALLED_APPS` in the settings. However, given that the *default* contains so much, it can be troublesome to get a minimal setup. [django]: https://en.wiktionary.org/wiki/batteries-included ## Luna On the other hand, Luna is just a frontend for lotide (a server-side-generated frontend, not to be confused with JavaScript front end), alternative to its official front-end hitide. I started writing this client (with Django) because: - This project (lotide) seems interesting and I'd like to work with it. - I don't like the default client. Not that the default one is bad. - Unfortunately, I don't program in Rust, and am not willing to, so contributing directly to hitide is unlikely. - This web framework (Django) seems popular, and some experience with if is required for some jobs so /shrug It doesn't need database handling, or administration, or emailing. I would definitely have no use for most, if not all of `djangoadmin` and `manage.py` commands. Django is an overkill for Luna. Using a big tool for small task feels very clumsy, with all the tools you won't use and tools that you *have to* use. ## Alternatives As I get quickly annoyed with the generated `manage.py` and the lengthy `settings.py` getting out of hand, I haven't worked on the client for quite a while, and am planning to drop development if no one else is taking over. I have also tried to rewrite it in Go, but it seems internationalization support for Go is quite lacking. So, I backed to a more familiar stack using Quart (with better support for asynchronous programming, though it might be another overkill) and Jinja (which has somewhat matured internationalization support) and renamed it to a less common name ([Yue][yue]) to avoid name conflict which led me to call Luna's package `lotide_luna`. I'm less motivated than before, and also have less time, so this will move much more slowly. [yue]: https://sr.ht/~huyngo/Yue/