aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: f5faf7de747c2f10aaf438fb163a75fac483c69c (plain)
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
78
# Iterative dictionary

The goal is to provide a frictionless dictionary searching experience: you type
and the words show up on your prompt. Not need to wait a http request to go
through.

As of right now, dict just provides a thin layer on top of sqlite's fts5[^1]
virtual table with support of spellfix[^2] for word suggestion. 

The whole database is loaded in memory for faster search and import process,
which means that this application will consume substantial amounts of memory.
On DE-EN dictionary, for example, it uses ~300MB, more then dict.cc tab on
firefox (but less the most electron application out there)

# Compiling

You will need go, gcc and sqlite-dev, then you can just run

```sh
make
```

For development you can run:

```sh
make run     # run the ui with default values
make import  # run the importer with default values
make version # run the version command
```

# Installing

To install locally you may run:

```sh
PREFIX=$(HOME)/.local make install
```

Or for a system wide istall:

```sh
sudo make install
```

# Usage

To run the importer you will need to download dict.cc dictionary.
First go to its request page[^3] and select your dictionary of choice.
Once you download and unzip run the following command:

```sh
dict import --input dict.txt --output main.dict
```

Once the import process is complete[4] you can run the ui.

```sh
dict ui --database main.dict
```

# TODO

- On disk operation: to reduce memory footprint we can read from the disk. We
  would need to remove the instance response, since that is not possible
  reading from the disk.
- Better coloring on the list.
- Better default path for sqlite database making use of XDG variables.
- [optional] Multi dictionary support. Support more than one dict at once.
- Async response. Even though in memory is fast enough most often it can have
  some hiccups with 2 letter queries. 
- Finish server
- Alpine package


[^1]: https://sqlite.org/fts5.html
[^2]: https://www.sqlite.org/spellfix1.html
[^3]: https://www1.dict.cc/translation_file_request.php
[4]: It may take some time depending the size of the dictionary you selected