about summary refs log tree commit diff
path: root/content/posts/2022-01-31-luna-django.md
blob: fda85bdea3173768f8023427016f3a88ff180a6a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
---
title: "Using tools with appropriate ability"
date: 2022-01-31
lang: en
categories: [ blog, project ]
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 <abbr title="object-relational mapper">ORM</abbr>
- 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/