Skip to main content

Développeur web Full-stack chez WebService'Est - Metz - Saint-Avold.
Je partage ici en brut mes découvertes issu de ma veille IT.
---
Pourquoi pas Facebook ou Twitter? Je suis pour l'open-Source !

nicolasnosal.fr

www.webservice-est.fr

nosalnicolas

 

Petit test de Swirl-AI (https://github.com/swirlai/swirl-search/tree/main) -- Un meta-moteur de recherche libre avec de l'IA pour condenser.

Sa mise en place n'est pas aussi "simple" que fait paraitre la doc ( page utile: https://docs.swirl.today/Admin-Guide.html#configuring-the-swirl-environment / https://github.com/swirlai/swirl-search/blob/main/docs/DOCKER_BUILD.md#create-super-user-account )...

Du coup petit memento, tout d'abord l'installation :
```
# Setup
mkdir -p swirlai && cd swirlai && \
curl https://raw.githubusercontent.com/swirlai/swirl-search/main/docker-compose.yaml -o docker-compose.yaml && curl https://raw.githubusercontent.com/swirlai/swirl-search/main/.env.docker -o .env && echo 'SECRET_KEY=django-insecure-4*@!3sf)-t=jvww$27w#_gv9!18+8cj9(+e$#w8*#umln$jjf$' >> .env && echo "CSRF_TRUSTED_ORIGINS='http://localhost:8000'" >> .env && echo "MSAL_CB_PORT=8000" >> .env && echo "MSAL_HOST=localhost" >> .env && echo "OPENAI_API_KEY='GPT_KEY_HERE'" >> .env && docker compose pull && sed -i '/^\s*app:/a \ env_file: [.env]' docker-compose.yaml

# Change IP if use VPS
sed -i "s/SQL_HOST=localhost/127.0.0.1/g" .env && sed -i "s/localhost/$(curl ifconfig.me)/g" .env && echo http://$(curl ifconfig.me):8000
# Set your GPT API KEY
sed -i 's/GPT_KEY_HERE/REPLACEME/g' .env
```

Puis on le lance:
```
# Run
docker compose -p swirlai up -d && docker compose logs -f app | grep -w --line-buffered -m 1 "Listening on TCP address 0.0.0.0:8000" && echo "OK, Swirl is Up ! on :8000"
```

Et là, c'est le drame, impossible de se connecter et moteur vide... voici comment faire
```
# Création du compte admin ( admin/password n'existe plus dans les dernière version par défaut )
docker compose exec -it app bash .... puis...
python manage.py createsuperuser --email admin@admin.com --username admin
# On rajoute les PSE de base
python swirl_load.py SearchProviders/google_pse.json -u admin -p admin
```

Et enfin, on peut se connecter http://MYIP:8000/galaxy/ , user/pass de test défini avant dans mon cas (admin/admin) puis on peut faire des recherches sur les PSE de base, par exemple Linkedin.

Puis rien d'autre que ça?
En fait, il suffit de voir dans le dossier https://github.com/swirlai/swirl-search/tree/main/SearchProviders, quelques autres PSE sont fournis… Pour l'exemple, on va ajouter InternetArchive :

```
python swirl_load.py SearchProviders/internet_archive.json -u admin -p admin
```

Puis, on va l'activer, pour cela, on va sur la liste des search_provider de la page d'admin: http://MYIP:8000/admin/swirl/searchprovider/ puis on clique sur InternetArchive puis "Activate". Il suffira alors de se rendre de nouveau sur le front pour le trouver dans la liste déroulante notre nouveau PSE.

Bon nombre d'autres PSE, sont à customiser dans la partie admin, comme celui de ChatGPT qui nécessite de re-saisir son API_KEY, et surtout on peut créer ses propres PSE.

En connecteur, il y a de quoi faire même s'il manque mySQL et postgreSQL !! Ce qui est un vrai no-go de mon côté, surtout que c'est quand même un peu trop difficile d'accès pour un profane niveau UX, dommage :
- ChatGPT Query String
- HTTP/GET returning JSON
- HTTP/POST returning JSON
- Elasticsearch Query String
- OpenSearch Query String
- Google BigQuery
- Sqlite3
- M365 Outlook Messages
- M365 One Drive
- M365 Outlook Calendar
- M365 SharePoint Sites
- Microsoft Teams
- MongoDB
- Oracle
- Snowflake
- PineconeDB
- SnowflakeAI

Voilà il ne reste plus qu'à clean… le test est fini.

```
# Clean
docker-compose -p swirlai down --volumes
```

 

J'ai récemment eu une erreur de migration en testant tianji/unami...

Petit memento dans mon docker-compose il suffit juste d'ajouter dans le service de l'app:
"command: npx prisma migrate resolve --rolled-back NOMDELAMIGRATIONBLOQUANTE"

Puis en séquence d'execution ça donnerais ça: down (la stack), edit_on (ajouter la ligne), up, down, edit_off, up.
Ca devrait être régler... en tout cas, ce fut mon cas.

 

Memento rapide : Comment gérer des QR depuis le terminal ?
- Création : echo "https://www.webservice-est.fr" | qrencode -t UTF8 # -o qrcode.png
- Lecture : ./qrscan --qr test.png

> Quelques exemples de qrencode: https://doc.ubuntu-fr.org/qrcode#exemples_d_utilisation_de_qrencode
> Repo de qrscan: https://github.com/sayanarijit/qrscan

 

Petit memento qu'il est possible d'automatiser et d'utiliser Gitlab en mode CLI : https://gitlab.com/gitlab-org/cli

> Pour la petite histoire, il s'agit du projet glab (https://github.com/profclems/glab) qui a été repris par Gitlab en personne 😎

 

Gros Memento qui va vous simplifier la vie pour installer docker sur Linux (apt) 😎 avec des one-liner prêt à copier/coller 😉 :

Edit 2023: Un one-liner en vraiment beaucoup plus court :P: `wget -nv -O - https://get.docker.com/ | sh`

Install docker one-line: `apt-get install apt-transport-https ca-certificates curl screen ncdu gnupg lsb-release; curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg; echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null; less /etc/apt/sources.list.d/docker.list; apt-get update; apt-get -y install docker-ce docker-ce-cli containerd.io; docker run --rm hello-world`

Install docker-compose v2 (v2.23.1 dans cet exemple) one-liner: `mkdir -p ~/.docker/cli-plugins; curl -sSL https://github.com/docker/compose/releases/download/v2.23.1/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose; chmod +x ~/.docker/cli-plugins/docker-compose; cp ~/.docker/cli-plugins/docker-compose /usr/local/bin/docker-compose; docker compose version`

> Cette méthode d'installation permet d'être compliant: `docker-compose` (directement le cli) ou bien `docker compose` ( via le module de docker). Cela permet aussi de controler exactement la version souhaitée.
> Il y a aussi maintenant un nouveau paquet disponible pour faire la même chose mais en latest_only et dépendant donc de votre gestionnaire de paquet : "docker-compose-plugin".

Bonus sur LXC (Memento) : Monter un dossier host dans un container lxc (nonprivileged) : `pct set 300 -mp0 /Volumes/tmp,mp=/docker/mnt/tmp`

 

O2S gère Nextcloud enfin... il est temps de rafraichir mes logiciels de connexion cloud, petit memento:
- Forklift 3 gère le webdav et via "Forklift Mini" dans le tray on peux "mount as disk" ( par contre c'est dommage j'ai mis à jour à la dernière version et ça ne marche plus... ): https://binarynights.com/
- Mountain Duck, le projet axé "mount" de Cyberduck: https://mountainduck.io/
- CloudMounter qui gère pas mal de protocole: https://cloudmounter.net/
- StrongSync le projet axé mount spéciale Mac APFS, https://www.expandrive.com/strongsync/ dérivé du vieux expandrive ( linux aussi?): https://www.expandrive.com/desktop/

Sinon il y a le soft de nextcloud qui fait une synchro de base ( filtre possible ).
Edit: Il y a toujours rclone, dommage qu'il n'y a pas de gui de qualité : https://www.linuxuprising.com/2019/07/rclonetray-easily-mount-rclone-remotes.html
Edit2: Pour forklift, il suffisait de réinstaller fuse for mac: https://osxfuse.github.io/ ( et de bien autoriser l'app ).

 

Dans les trucs assez cool de vim que j'apprécie, c'est de pouvoir executer des commandes on the fly.

Imaginons que l'on souhaite insérer à la ligne 1 la date, il suffit de taper ":0read !date". Note: Pour formater une date en plus, il faut rajouter "+\%Y-\%m-\%d", notez bien l'escape du caractère "%" qui est nécessaire.

Bon saisir des lignes c'est pas super pratique autant sélectionner la ligne actuel, pour cela il faut taper "V".
Puis on peut saisir notre commande par exemple ":read !curl --silent ifconfig.me" pour remplir avec notre IP public. Ce n'est pas cool ça?

On peut imaginer executer aussi un code python :read !python -c 'print("Hello World!")' qui va nous écrire dans notre fichier "Hello World" depuis Python.

Inversement, on peut aussi executer du code python depuis du texte, imaginons qu'on se place sur une ligne qui contient print("ABC"), on fait "V" pour la sélectionner puis ":write !python".

Voilà un petit memento sans prétention pour présenter ces petites fonctionnalités plutôt puissante.

 

Petit memento pour enregistrer le bash history d'un screen non persistant :
'''
screen -r screename
history -w ~/history_myscreen.txt
'''

 

Petit memento d'un scrip en bash (attention, non testé) pour découper un tgz :
'''
# Split TGZ
splitsize="10G"; fn="home.tar.gz"; pathtocompress="/home" # edit here
split -b ${splitsize} ${fn} "${fn}.part" # split an existing tgz file
tar -cvzf - ${pathtocompress} | split -b ${splitsize} - "${fn}.part" # or split while making tgz file..
cat "${fn}.part*" > "joined.${fn}" # join back the file
tar -xvzf "joined.${fn}" # decompress the file
'''

 

Mémento regex hyper sympa ( Pourquoi? il y a toute les syntaxes de compatibilités ! PCRE, BRE, ... ) : https://remram44.github.io/regex-cheatsheet/regex.html

 

Mon petit rapide pour VisiData :
"q" pour revenir en arrière/quitter ;
"e" pour éditer une cellule
"s" (select) + "gzY" + ↑ + "t" (deselect) pour copier la cellule ("z")
"]" / "[" pour filtrer la colonne ;
"_" / "v" pour expand une colonne trop grande ;
"shift+f" pour mesurer la fréquence (répétitions/doublons) ;
"-" du 6 pour masquer une colonne.
Spécial:
- Effet global: "g"+"command" ( exemple: "g_", va expand toutes les colonnes d'un coup.
- Forcer le typage: "#" = number ; "%" = float ; "$" = currency ; "@" = date ; "~" = default / all.
Edit: J'ai trouvé une cheatsheet sympa aussi pour approfondir: https://jsvine.github.io/visidata-cheat-sheet/en/