Last modified: 2021-08-22 21:57


Before I started with gc I was working on a (graphical) gopher+ client (mostly for my own use) in java. Since my capabilities were not sufficient I took a turn into something like a dead end. It was clear that my best option is to restart, building on some already existing parts. I have scheduled this for "later". In the meantime I was in need of a gopher+ client for my own use but I also wanted to have a prototype before entering the next round with java.

I looked what is available but I didn't find something that fitted to my expectations. vf-1 looked promising but it does only gopher (no gopher+, http or gemini) and python is not the language of my choice. I decided then to make a client in gawk, knowing that this is not the best choice: gawk is for text processing but gopher works with binary data. So far, the issues I expected did not appear and everyting is working fine.

Design goals

Originally I started with the first two objectives. The others came later.

  1. gc should be a gopher+ (http and gemini) client for my everyday usage.

  2. I wanted to prototype functions in gc before implmenting them elsewhere.

  3. gc should be easy "installable" so that it can be used as a demonstrator to share and show suggestions to gopher/+ to others.

  4. The source code should be understandable and changeable by others.

Things that are not working

gc is not a polished and "round" application. There are things which are not working like these here.

  1. HTTP and gemini redirection is not implemented.

  2. socat reports SSL issues on gemini server. I have to figure how I get better error messages from socat.

  3. Using socat make retrieving files slow. Perhaps it is an idea to use a proxy server.

  4. The HTTP/S protocol implementation seems to be not complete. It works for almost all servers but e.g. https requests to fail with an error messsage.

  5. Parts of the source code should be rewritten to make them easier to understand.

  6. Temporary files are not removed if gc terminates due to a program error or signal, e.g. CTRL+C.

I plan to add these things "later".