20 Commits
Author SHA1 Message Date
BachoSeven 0053e5ee1d Merge pull request 'Add scritti_ro.sh and reformat readme.' (#4) from alberto/dm-scripts:main into main
Reviewed-on: phc/dm-scripts#4
2026-09-30 09:39:57 +00:00
alberto f24b3d7f8a Merge branch 'main' into main 2026-06-20 11:58:21 +00:00
alberto 66b1485213 Add scritti_ro.sh and reformat readme. 2026-06-20 13:57:19 +02:00
BachoSeven 4fa77291b6 Merge pull request 'Add parseunimap script.' (#3) from alberto/dm-scripts:main into main
Reviewed-on: phc/dm-scripts#3
2025-08-15 18:37:10 +00:00
BachoSeven 6fefa2d561 Merge branch 'main' of git.phc.dm.unipi.it:phc/dm-scripts 2025-03-09 16:02:16 +01:00
alberto 27b8e7cdf1 Add parseunimap script. 2025-03-09 09:22:18 +01:00
BachoSeven 58e2abfdca Update 'steam-install' 2024-02-24 17:24:56 +00:00
Luca Lombardo 11e3ce8dcd aggiunto nuovo script tex_to_md 2024-02-22 18:54:37 +01:00
Luca Lombardo 9c7faa0006 reso eseguibile pptx_to_pdf 2024-02-22 18:49:57 +01:00
BachoSeven 2a06044973 steam: Fix App name indefinitely 2024-02-11 20:07:55 +01:00
Luca Lombardo 5310ac5f2f fixed merge in readme 2024-01-22 16:06:58 +01:00
Luca Lombardo 2731ce32d3 pptx_to_pdf script 2024-01-22 16:02:15 +01:00
aziis98 3797119bb5 Merge pull request 'removeproofs script' (#2) from removeproofs into main
Reviewed-on: phc/dm-scripts#2
2024-01-13 15:03:40 +00:00
Luca Lombardo d8f480b83d removeproofs script 2024-01-13 16:02:08 +01:00
BachoSeven cf473ff4a4 Update steam-install 2024-01-11 21:28:59 +01:00
BachoSeven 118a6903c9 Update steam version 2024-01-10 02:47:36 +01:00
BachoSeven b4d68ded01 steam-install: robustify 2024-01-09 18:51:24 +01:00
BachoSeven a88174ff4f chore: Update steam-install, make scripts executable 2024-01-09 18:46:27 +01:00
aziis98 3215c277f3 updated readme for install-llm-web-interface 2023-12-12 19:20:09 +01:00
aziis98 0c3fbf1665 added install-llm-web-interface 2023-12-12 19:18:04 +01:00
10 changed files with 392 additions and 43 deletions
+169 -27
View File
@@ -2,47 +2,189 @@
Questa repository contiene i seguenti script:
- `steam-install` — [@BachoSeven](https://git.phc.dm.unipi.it/BachoSeven)
- `steam-install` — [@BachoSeven](https://git.phc.dm.unipi.it/BachoSeven)
Serve ad installare `steam` (o con poche modifiche qualsiasi AppImage) in aula 3/4, pur non avendo FUSE installato.
Per utilizzarlo, basta eseguire il seguente comando da terminale:
Serve ad installare `steam` (o con poche modifiche qualsiasi AppImage) in aula
3/4, pur non avendo FUSE installato. Per utilizzarlo, basta eseguire il
seguente comando da terminale:
```bash
curl -L "https://git.phc.dm.unipi.it/phc/dm-scripts/raw/branch/main/steam-install" | bash
```
```bash
curl -L "https://git.phc.dm.unipi.it/phc/dm-scripts/raw/branch/main/steam-install" | bash
```
- `printa4` — [@BachoSeven](https://git.phc.dm.unipi.it/BachoSeven)
- `install-llm-web-interface` —
[@aziis98](https://git.phc.dm.unipi.it/aziis98)
Serve a stampare in aula4 (o qualsiasi altra stampante del dip) dal proprio computer, aprendo Okular graficamente da remoto.
Serve a scaricare una
[web-ui per usare LLM](https://github.com/oobabooga/text-generation-webui/) in
locale in Aula 3/4. Per utilizzarlo, basta eseguire il seguente comando da
terminale
- `impagina` — [@BachoSeven](https://git.phc.dm.unipi.it/BachoSeven)
```bash shell
$ curl -LO "https://git.phc.dm.unipi.it/phc/dm-scripts/raw/branch/main/install-llm-web-interface"
$ chmod +x install-llm-web-interface
Impagina un pdf in modo da poi poterlo stampare "a libretto", usando l'opzione fronte-retro (lato corto), per poi tagliare e sovrapporre una metà sull'altra.
# La prima volta che lo si esegue, bisogna installare i pacchetti necessari
$ ./install-llm-web-interface
Dipendenze: `pdftk`, `pdfjam` (parte di TeXlive), `groff` (non solo `groff-base`)
# Le volte successive, si può eseguire questo per impostare una porta specifica
$ ./install-llm-web-interface --listen-port 8080
```
- `bookletify` — [@Fran314](https://git.phc.dm.unipi.it/Fran314)
Nel frattempo, è possibile usare LLM in locale aprendo il browser
all'indirizzo `http://localhost:8080` oppure se si sta usando ssh aprendo un
tunnel con
Simile a `impagina`, ma in python. Formatta un pdf in modo da poi poterlo stampare "a libretto" tagliando chiudendolo come un libro.
```bash shell
$ ssh -L 8080:localhost:8080 <username>@a3-dott8.cs.dm.unipi.it
```
Supporta:
- trim
- diversi tipi di paper size (A4 di default, per poter mandare in stampa senza dover mettere "fit-to-page")
- aggiunta di un bordo interno (a sinistra per le pagine dispari, a destra per le pagine pari) per la rilegatura
- pipe da stdin / a stdout
Dipendenze: `PyPDF2`
e poi aprendo il browser all'indirizzo `http://localhost:8080`.
- `pokepixel` &mdash; [@Fran314](https://git.phc.dm.unipi.it/Fran314)
Una volta nell'interfaccia web si può scaricare un modello di LLM (ad esempio
<https://huggingface.co/TheBloke/Orca-2-7B-GGUF>) andando nella tab "Models"
ed inserendo l'ID da huggingface (e.g. `TheBloke/Orca-2-7B-GGUF` ed il nome
del singolo file `orca-2-7b.Q5_K_M.gguf`), poi premere "Refresh" e poi "Load"
nella lista dei modelli per selezionarlo (conviene tenere sotto'occhio il
terminare per vedere quando ha finito di scaricare il modello). Una volta
caricato il modello, si può andare in "Chat" per usarlo.
Permette di "disegnare" a terminale degli sprite di pokemon presi da [questa repo](https://github.com/msikma/pokesprite/)
- `printa4` &mdash; [@BachoSeven](https://git.phc.dm.unipi.it/BachoSeven)
Ad esempio `pokepixel latias.png` cerca un file di nome `latias.png` nella cartella corrente. Se lo trova renderizza quello, altrimenti lo cerca nella repo linkata. Per ora funziona solo con i pokemon fino alla 7a gen non shiny
Serve a stampare in aula4 (o qualsiasi altra stampante del dip) dal proprio
computer, aprendo Okular graficamente da remoto.
- `gobbino` &mdash; [@BachoSeven](https://git.phc.dm.unipi.it/BachoSeven) + [@Dilillo](http://poisson.phc.dm.unipi.it/~dilillo/Vario/index.html)
- `impagina` &mdash; [@BachoSeven](https://git.phc.dm.unipi.it/BachoSeven)
Permette di scaricare video e/o pdf di qualsiasi corso presente sul sito del professor Gobbino
Impagina un pdf in modo da poi poterlo stampare "a libretto", usando l'opzione
fronte-retro (lato corto), per poi tagliare e sovrapporre una metà sull'altra.
- `pdfcompress` &mdash; [@aziis98](https://git.phc.dm.unipi.it/aziis98) (script preso in prestito [da questa repo](https://git.phc.dm.unipi.it/aziis98/chatgpt-scripts/src/branch/main/bin/pdfcompress2))
Dipendenze: `pdftk`, `pdfjam` (parte di TeXlive), `groff` (non solo
`groff-base`)
Comprime un PDF vettorizzato (ad esempio note scritte su un iPad) utilizzando poppler (file di ~100MB diventa tranquillamente di ~10MB)
- `bookletify` &mdash; [@Fran314](https://git.phc.dm.unipi.it/Fran314)
Simile a `impagina`, ma in python. Formatta un pdf in modo da poi poterlo
stampare "a libretto" tagliando chiudendolo come un libro.
Supporta:
- trim
- diversi tipi di paper size (A4 di default, per poter mandare in stampa senza
dover mettere "fit-to-page")
- aggiunta di un bordo interno (a sinistra per le pagine dispari, a destra per
le pagine pari) per la rilegatura
- pipe da stdin / a stdout
Dipendenze: `PyPDF2`
- `pokepixel` &mdash; [@Fran314](https://git.phc.dm.unipi.it/Fran314)
Permette di "disegnare" a terminale degli sprite di pokemon presi da
[questa repo](https://github.com/msikma/pokesprite/)
Ad esempio `pokepixel latias.png` cerca un file di nome `latias.png` nella
cartella corrente. Se lo trova renderizza quello, altrimenti lo cerca nella
repo linkata. Per ora funziona solo con i pokemon fino alla 7a gen non shiny
- `gobbino` &mdash; [@BachoSeven](https://git.phc.dm.unipi.it/BachoSeven) +
[@Dilillo](http://poisson.phc.dm.unipi.it/~dilillo/Vario/index.html)
Permette di scaricare video e/o pdf di qualsiasi corso presente sul sito del
professor Gobbino
- `pdfcompress` &mdash; [@aziis98](https://git.phc.dm.unipi.it/aziis98) (script
preso in prestito
[da questa repo](https://git.phc.dm.unipi.it/aziis98/chatgpt-scripts/src/branch/main/bin/pdfcompress2))
Comprime un PDF vettorizzato (ad esempio note scritte su un iPad) utilizzando
poppler (file di ~100MB diventa tranquillamente di ~10MB)
- `pptx_to_pdf` &mdash; [@lukefleed](https://git.phc.dm.unipi.it/lukefleed)
Permette di convertire tutti i file .pptx dentro una cartella in file .pdf.
Per utilizzarlo, basta eseguire lo script da terminale nella cartella dove
sono presenti i file `.pptx`
I nuovi file `.pdf`verranno salvati nella cartella `pdf` (che verrà creata
automaticamente se non esiste già). Per poter eseguire lo script, è necessario
avere installati i seguenti pacchetti (ubuntu):
```bash
sudo apt install libreoffice default-jre libreoffice-java-common
```
- `removeproofs` &mdash; [@lukefleed](https://git.phc.dm.unipi.it/lukefleed)
Rimuove le dimostrazioni da un file `.tex`, utile per creare piccoli cheat
sheet da portare agli esami dove è consentito portare materiale di studio.
Utilizzo:
```bash
removeproofs <file.tex>
```
Questo script è stato utilizzato per creare dei riassunti di Geometria 2 da
delle dispense più complete:
[G2-cheat-sheet](https://github.com/lukefleed/G2-cheat-sheet)
- `tex_to_md` &mdash; [@lukefleed](https://git.phc.dm.unipi.it/lukefleed)
Script che prende in input un file `.tex` da in output un file `.md`
contenente un elenco puntato di tutte le definizioni, teoremi e proposizioni
presenti nel file `.tex`. Utile per creare un riassunto degli argomenti di un
corso da utilizzare per preparare l'orale.
Utilizzo:
```bash
tex_to_md <input.tex> <output.md>
```
Qui un esempio di utilizzo:
[Argomenti di G2](https://git.phc.dm.unipi.it/lukefleed/domande-orali/src/branch/master/geoemtria-2)
- `parseunimap` &mdash; [@aziis98](https://git.phc.dm.unipi.it/aziis98) +
[@alberto](https://git.phc.dm.unipi.it/alberto)
Script che converte il registro delle lezioni dell'Unipi in markdown
Installare:
```bash
bun init
bun install jsdom
bun install node-fetch
```
Per eseguire:
```bash
bun run script.js <registro_link>
```
Una volta ottenuto in output il file markdown, è possibile convertirlo in pdf
utilizzando ad esempio Pandoc tramite il comando
```bash
pandoc fileregistro.md -o fileregistro.pdf
```
- `scritti_ro.sh` [@alberto](https://git.phc.dm.unipi.it/alberto)
Scarica tutti i PDF di **Testi** (o **Svolgimenti**) dalla
[pagina DidaWiki del corso](https://didawiki.cli.di.unipi.it/doku.php/matematica/ro/start)
e li unisce in un unico PDF.
Utilizzo:
```bash
# unisce tutti i PDF dei Testi
./scritti_ro.sh
# unisce tutti i PDF degli Svolgimenti
./scritti_ro.sh --with-solutions
```
Output: `testi_unificati.pdf` o `soluzioni_unificati.pdf`.
Dipendenze:
- `curl`, `grep`, `gs` (ghostscript)
+20
View File
@@ -0,0 +1,20 @@
#!/bin/bash
export HOME="/tmp/$USER"
export PATH="$HOME/.local/bin:$PATH"
mkdir -p "$HOME"
echo "Home moved to /tmp/$USER because of space constraints, this will last only for this session."
cd "$HOME" || exit 1
# Install text-generation-webui
if [ ! -d "$HOME/text-generation-webui" ]; then
git clone https://github.com/oobabooga/text-generation-webui
else
git -C "$HOME/text-generation-webui" pull
fi
# Install requirements and start webui
export GPU_CHOICE="A"
export USE_CUDA118="Y"
bash "$HOME/text-generation-webui/start_linux.sh" "$@"
+58
View File
@@ -0,0 +1,58 @@
import {createWriteStream} from 'fs';
import {JSDOM} from "jsdom";
import fetch from "node-fetch";
(async () => {
try {
const url = process.argv[2];
if (!url) {
console.error("Usage: node script.js <registro_link>");
process.exit(1);
}
const response =
await fetch(url, {headers : {"User-Agent" : "Mozilla/5.0"}});
const buffer = await response.arrayBuffer();
const isoHtml = Buffer.from(buffer, "binary").toString("latin1");
const dom = new JSDOM(isoHtml);
const document = dom.window.document;
let ol = document.querySelector("ol");
if (!ol) {
console.error("No <ol> found on the page");
return;
}
ol.querySelectorAll("a, i").forEach(el => el.remove());
const results = [...ol.children ]
.map(li => li.textContent.match(/\w+:(.+)/sm))
.filter(match => match)
.map(match => match[1].trim())
.map((x, index) => (index + 1) + ". " + x + " \n");
const writeStream = createWriteStream("registro.md")
const pathName = writeStream.path;
writeStream.on('error', function(err) { /* error handling */ });
const head = "# Registro delle lezioni \n\n";
writeStream.write(head)
results.forEach(value => writeStream.write(`${value}`));
// the finish event is emitted when all data has been flushed from the
// stream
writeStream.on(
'finish',
() => { console.log(`Registro salvato nel file ${pathName}`); });
// handle the errors on the write process
writeStream.on(
'error',
(err) => {console.error(
`There is an error writing the file ${pathName} => ${err}`)});
// close the stream
writeStream.end();
} catch (error) {
console.error("Error fetching or processing page:", error);
}
})();
Regular → Executable
View File
Executable
+20
View File
@@ -0,0 +1,20 @@
#!/bin/bash
# Create the pdf folder if it doesn't exist
mkdir -p pdf
# Iterate through all .pptx files in the current folder
for file in *.pptx; do
if [ -f "$file" ]; then
# Extract the base name (without extension) of the file
base_name=$(basename "$file" .pptx)
# Convert the .pptx file to .pdf and save it in the pdf folder
libreoffice --headless --convert-to pdf --outdir pdf "$file"
echo "Converted $file to pdf/$base_name.pdf"
fi
done
echo "Conversion complete!"
+3 -3
View File
@@ -40,11 +40,11 @@ Opzioni disponibili:
Ad esempio:
$(basename "$0") ~/GAAL.pdf
$(basename "$0") -u n.cognome ~/GAAL.pdf
$(basename "$0") alg2.pdf commRingTheory.pdf
$(basename "$0") -u n.cognome alg2.pdf commRingTheory.pdf
$(basename "$0") --cli '-o sides=two-sided-short-edge' MR-impaginato.pdf
$(basename "$0") -u n.cognome --cli '-o sides=two-sided-short-edge' MR-impaginato.pdf
N.B.: L'opzione --cli usa le opzioni necessarie per poter stampare un file
creato con lo script "impagina", per rilegare le dispense a libretto in A5.
Executable
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $0 <input_tex_file>"
exit 1
fi
input_file=$1
output_file="${input_file%.tex}_without_proofs.tex"
awk '/\\begin{proof}/, /\\end{proof}/ {next} 1' "$input_file" > "$output_file"
echo "Lines between \\begin{proof} and \\end{proof} have been removed. Output saved to: $output_file"
Executable
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
set -euo pipefail
URL="https://didawiki.cli.di.unipi.it/doku.php/matematica/ro/start"
BASE="https://didawiki.cli.di.unipi.it"
TMPDIR=$(mktemp -d)
cleanup() { rm -rf "$TMPDIR"; }
trap cleanup EXIT
if [[ "${1:-}" == "--with-solutions" ]]; then
PREFIX="sc"
OUTFILE="soluzioni_ro_merge.pdf"
echo "Fetching Svolgimenti PDFs..."
else
PREFIX="c"
OUTFILE="testi_ro_merge.pdf"
echo "Fetching Testi PDFs..."
fi
curl -s "$URL" \
| grep -oP "/lib/exe/fetch\.php/matematica/ro/${PREFIX}\d{6}\.pdf" \
| sort -u \
| while read -r path; do
filename=$(basename "$path")
echo " Downloading $filename"
curl -s -o "$TMPDIR/$filename" "${BASE}${path}"
done
echo ""
echo "Merging PDFs into $OUTFILE..."
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$OUTFILE" "$TMPDIR"/*.pdf
echo "Done → $OUTFILE ($(wc -c < "$OUTFILE") bytes)"
Regular → Executable
+27 -13
View File
@@ -1,24 +1,38 @@
#!/bin/sh
#!/bin/bash
# Installs the AppImage for steam
set -xeo pipefail
# Variables
APP=Steam-x86_64.AppImage
NAME=steam
URL="https://github.com/ivan-hc/Steam-appimage/releases/download/continuous/Steam-x86_64.AppImage"
URL="https://github.com/ivan-hc/Steam-appimage/releases/download/continuous/Steam-202402170551-x86_64.AppImage"
LOCAL_BIN_DIR=$HOME/.local/bin
DESKTOP_DIR=$HOME/.local/share/applications
mkdir -p $HOME/.local/bin
echo "export PATH=$PATH:$HOME/.local/bin" >> .bashrc
echo "export PATH=$PATH:$HOME/.local/bin" >> .bash_profile
# Ensure local bin directory is in PATH
if [[ ! ":$PATH:" == *":$LOCAL_BIN_DIR:"* ]]; then
echo "export PATH=\$PATH:$LOCAL_BIN_DIR" >> $HOME/.bashrc
echo "export PATH=\$PATH:$LOCAL_BIN_DIR" >> $HOME/.bash_profile
fi
# Install Steam AppImage
cd /tmp
curl -LO $URL
curl -L $URL -o $APP
chmod +x $APP
./$APP --appimage-extract
mv squashfs-root $HOME/$NAME
cd $HOME/$NAME
ln -sf $(realpath AppRun) $HOME/.local/bin/$NAME
desktop-file-install --dir="$HOME/.local/share/applications" $NAME.desktop
sed -i "s|Exec=$NAME|Exec=$HOME/.local/bin/$NAME|g" $HOME/.local/share/applications/$NAME.desktop
gio set "$HOME/.local/share/applications/$NAME.desktop" "metadata::trusted" true
rm -rf /tmp/$APP
# Create symbolic link to AppRun
ln -sf "$(realpath $HOME/$NAME/AppRun)" $LOCAL_BIN_DIR/$NAME
# Install desktop entry
desktop-file-install --dir="$DESKTOP_DIR" $HOME/$NAME/$NAME.desktop
# Update desktop entry
sed -i "s|Exec=$NAME|Exec=$LOCAL_BIN_DIR/$NAME|g" $DESKTOP_DIR/$NAME.desktop
# Mark desktop entry as trusted
gio set "$DESKTOP_DIR/$NAME.desktop" "metadata::trusted" true
# Clean up
rm -rf /tmp/$APP
Executable
+47
View File
@@ -0,0 +1,47 @@
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: $0 input.tex output.md"
exit 1
fi
input_file="$1"
output_file="$2"
# Funzione per convertire le sezioni
convert_section() {
local level=$1
local name=$2
echo -e "$(printf '#%.0s' $(seq 1 $level)) $name\n" >> "$output_file"
}
# Funzione per convertire definizioni, teoremi e proposizioni
convert_definition_or_theorem_or_proposition() {
local type=$1
local name=$2
if [[ $type == "teorema" || $type == "proposizione" ]]; then
echo "* [ ] [**$type**] $name" >> "$output_file"
else
echo "* [ ] [$type] $name" >> "$output_file"
fi
}
# Inizializza il file di output
> "$output_file"
# Leggi il file .tex e converti le sezioni, definizioni, teoremi e proposizioni
while IFS= read -r line; do
if [[ $line =~ \\section\{(.+)} ]]; then
convert_section 1 "${BASH_REMATCH[1]}"
elif [[ $line =~ \\subsection\{(.+)} ]]; then
convert_section 2 "${BASH_REMATCH[1]}"
elif [[ $line =~ \\subsubsection\{(.+)} ]]; then
convert_section 3 "${BASH_REMATCH[1]}"
elif [[ $line =~ \\begin\{definition\}\[(.+)\] ]]; then
convert_definition_or_theorem_or_proposition "definizione" "${BASH_REMATCH[1]}"
elif [[ $line =~ \\begin\{theorem\}\[(.+)\](\{.+})? ]]; then
convert_definition_or_theorem_or_proposition "teorema" "${BASH_REMATCH[1]}"
elif [[ $line =~ \\begin\{proposition\}\[(.+)\] ]]; then
convert_definition_or_theorem_or_proposition "proposizione" "${BASH_REMATCH[1]}"
fi
done < "$input_file"