/*
 * https ; gemini ;
 * tout ; log ; twtxt ;
 * à propos ; ;
 */

Moteur de recherche pour capsule gemini (C)

EN

Need a search engine for you capsule?

I just wrote one in C.

See it in action
Source code

Edit config.h to suit your needs (yes, path are hardcoded to enjoy OpenBSD's unveil safety).

Run "make".

Copy to your capsule.

CGI support is required.

FR

J'en parlais juste avant, j'avais fait un moteur de recherche pour ma capsule gemini en utilisant grep :

/log/2021-05-01-recherche-gemini.gmi

J'évoquais l'envie de l'écrire en C. C'est chose faîte.

C'est fou ce qu'on code vite quand tout le monde dort à la maison.

Sieste <3.

Bref.

C'est nettement plus rapide qu'avec grep dans un script shell, comme vous vous en doutez.

Mais plus important, il profite du support de "pledge" et "unveil", ce qui me rassure en ce qui concerne un CGI.

Pour faire vite

Essayez le moteur de recherche
Code source

Des détails

La mise en oeuvre est la suivante :

Et si on a une recherche qui correspond à plusieurs lignes?

Impossible avec gemini : un paragraphe = 1 ligne de texte. Encore une raison d'apprécier ce protocole, c'est vraiment simple de développer pour ce dernier.

Imaginer en html tout ce qu'on auraît du faire : virer les tags "<p>", dé-échapper les entités html "&amp;", et j'en passe.

On pourrait imaginer appeler une fonction différente de "strcasestr" pour notre recherche.

Par exemple "fnmatch" pour profiter du globbing.

Ou encore "regexec" pour implémenter une recherche en regexp.

Je n'en ai pas besoin, mais si ça vous intéresse, vous pourrez facilement modifier le code ;)

Et maintenant ?

J'imagine qu'il serait pas mal d'implémenter un cache.

Créer dans un dossier "cache" des fichiers portant le même nom que la requête et contenant le résultat.

Avant de lancer une recherche, on regarde si ce fichier existe et si oui, on en retourne le contenu.

Ça suppose de vider le cache régulièrement. Dans un cron :

find /path/to/capsule/cgi-bin/cache/ -type f -mtime +2 -delete

Par ailleurs, ça veut dire ECRIRE dans un fichier sur le serveur, donc modifier les permissions pour "unveil" et "pledge", autrement dit réduire les conditions de sécurité. Pas envie ^^

Une réaction?

Envoyez votre commentaire par mail.
Mode d'emploi de la liste de diffusion pour recevoir les réponses.