About

Cambusa

Visione

  • Input: La struttura di directory ed i file sono fatti per essere editati a mano, in modo da non dover costruire l'interfaccia di inserimento e modifica.
  • Output: I file stampabili di menu, secco, fresco e "altro" devono poter essere estratti da linea di comando -> browser -> print
  • Il tutto puo' essere messo su Hugo, ma deve essere fruibile immediatamente anche da CLI, senza Hugo
    • Questo puo' cambiare se decido che Hugo stesso sia il motore primo che mantiene i dati. In quel caso userei, ad esempio, gli header di Hugo. Se lo facessi, poi dovrei anche pensare alla privacy della crociera, che andrebbe gestita con il campo draft di hugo (mentre ora non viene gestita proprio, ma potrei decidere di non esportare alcune crociere.
    • Si puo' pensare di generare una versione standalone della cartellina. In questo modo il tutto sarebbe una applicazione standalone e poi si condividerebbe con gli altri via git solo quando si vuole.

Repository multipli

  • A oggi i dati vengono messi in un repository git, che puo' anche essere lo stesso del codice
  • In futuro le ricette saranno su un loro git repository, perche' non hanno bisogno di coerenza. Le ricette fluiranno con github o altri git. Invece le crociere saranno su un git repository personale (o di piccolo team) insieme ad "altro". Il programma sara' da un'altra parte ancora. Per farlo funzionare, si scarica il programma, si scarica il submodulo di ricette che si vuole e il submodulo di crociere che si vuole. A quel punto si usa il programma per verificare la coerenza del db crociere e ricette e per stampare la spesa.
    • In questo schema Hugo sembra non entrarci proprio, perche' la cosa e' abbastanza privata. Forse Hugo puo' essere usato per fare un sito offline da portare a bordo.

Come si modifica il db (ricette, crociere, altro)

  • Standard da usare:
    • I nomi dei file possono essere maiuscoli, minuscoli, con _ o -, con ext o meno, e tutto dovrebbe funzionare comunque.
    • Pero' e' utile avere uno standard per le cose che devono apparire come riferimenti all'interno di altri file.
    • Quindi per le ricette uso la regola di tutto minuscolo e _ per dividere le parole. Il titolo della ricetta e' sulla prima riga ed e' uguale, ma con spazi al posto degli underscore e maiuscole o minuscole come mi pare. Il riferimento usato dentro i menu e' come i titoli: stessa cosa del nome del file, ma con spazi invece di underscore e maiuscole o minuscole come voglio. Il mio programma non guarda il nome del file delle ricette, ma solo il titolo sulla prima riga.
    • Per gli ingredienti uso parole minuscole separate da spazi
    • Per le unita' di misura, un'unica parola minuscola
    • Le crociere non vengono riferite da nessuna parte, quindi vanno bene come mi pare
  • Dopo ogni modifica bisogna verificare la coerenza del db con check_db.pl.
  • Si puo' aggiungere (rif.) per dire che quel giorno c'e' un rifornimento. Il numero di rifornimenti viene preso da questo campo. Il sistema calcola le pietanze come se il rifornimento fosse fatto prima di colazione. Quindi, ad esempio, se il rifornimento lo si fa nel pomeriggio, puo' essere utile modificare il menu in modo da comprare alcune cose il giorno prima.

Come si lavora da CLI

Vedere il menu di una crociera

pandoc --from markdown+hard_line_breaks-smart crociera/Immacolata_At_Eleuthera >/tmp/crociera.html && google-chrome /tmp/crociera.html

Con pandoc si puo' anche aggiungere un css, come spiegato qui: https://blog.scottlowe.org/2018/09/27/a-markdown-to-pdf-workflow-on-linux/ ma direi che non serve a molto perche' per personalizzare in modi strani si usa Hugo o, in futuro, Latex.

Vedere una ricetta

pandoc --from markdown+hard_line_breaks-smart ricetta/cous_cous_vegetale >/tmp/ricetta.html && google-chrome /tmp/ricetta.html

Fare un check del db di ingredienti e crociere

./check_db.pl --debug

Stampare

In un primo tempo usavo markdown e poi browser su linea di comando. Questo era comodo per stampare la cartellina al volo anche se si sono fatti cambiamenti minimi. Successivamente mi sono occupato di Hugo e, per avere il tasto con la versione stampabile, ho generato le versioni statiche in ogni caso. Quindi le versioni stampabili sono gia' presenti in html nella struttura di directory e non serve piu' markdown. Un vantaggio e' che cosi' puo' stampare la cartellina anche una persona che non sa usare la linea di comando e sta fisicamente da una parte diversa da chi genera il sito con Hugo.

Stampare il menu di una crociera

Potrei anche passare per un pdf, ma forse la cosa piu' semplice per il momento e' di stampare da browser come visto qui sopra.

Stampare la lista della spesa del fresco e del secco

export CROCIERA=crociera/Immacolata_At_Eleuthera
./check_db.pl --crociera=${CROCIERA} --fresco | pandoc --from markdown+hard_line_breaks-smart >/tmp/fresco.html && google-chrome /tmp/fresco.html
./check_db.pl --crociera=${CROCIERA} --fresco --rif=2 | pandoc --from markdown+hard_line_breaks-smart >/tmp/fresco.html && google-chrome /tmp/fresco_secondo_rifornimento.html
./check_db.pl --crociera=${CROCIERA} --fresco --rif=3 | pandoc --from markdown+hard_line_breaks-smart >/tmp/fresco.html && google-chrome /tmp/fresco_terzo_rifornimento.html
./check_db.pl --crociera=${CROCIERA} --secco | pandoc --from markdown+hard_line_breaks-smart >/tmp/secco.html && google-chrome /tmp/secco.html

Preparare la cartellina

export CROCIERA=crociera/Immacolata_At_Eleuthera
export DIR=/tmp/cartellina
mkdir ${DIR}
pandoc --from markdown+hard_line_breaks-smart ${CROCIERA} >${DIR}/crociera.html
for i in altro/*md; do pandoc --from markdown+hard_line_breaks-smart $i > ${DIR}/`basename $i`.html; done
./check_db.pl --crociera=${CROCIERA} --fresco | pandoc --from markdown+hard_line_breaks-smart >${DIR}/fresco.html
./check_db.pl --crociera=${CROCIERA} --fresco --rif=2 | pandoc --from markdown+hard_line_breaks-smart >${DIR}/fresco2.html
./check_db.pl --crociera=${CROCIERA} --fresco --rif=3 | pandoc --from markdown+hard_line_breaks-smart >${DIR}/fresco3.html
./check_db.pl --crociera=${CROCIERA} --secco | pandoc --from markdown+hard_line_breaks-smart >${DIR}/secco.html

Usare Hugo

make clean
make populate
make site
make deploy

#Oppure, al posto delle ultime due
make test
make stoptest

ISSUES

Le versioni stampabili delle ricette non stampano bene gli ingredienti, perche' gli ingredienti sono su righe successive senza asterisco

cli solved

  • Ho risolto per Hugo, quindi bisogna usare la soluzione anche per CLI
  • Permettere l'elenco degli ingredienti con asterisco iniziale ha senso?

Fare uscire un latex -> pdf come spese secco e fresco. Questo permette il logo e la gestione corretta della pagina successiva (con il logo ed il numero di pagina)

cli

NON farei la stessa cosa per la singola stampa della crociera, perche' si perderebbe il discorso che la crociera in se' e' un documento leggibile, ma forse posso fare comunque una stampa da html automatizzata, o qualcosa di simile

cli

Hugo

sito

  • Fare o modificare un theme di hugo in modo da avere un buon sito
  • I link a secco e fresco non funzionano. trasformarli in assoluti
  • Ho messo un sacco di campi nell'intestazione dei file, ma non si puo' fare: vanno spostati in data che e' fatto apposta e poi usati all'interno del template
  • Si possono usare gli archetipi per generare i files md a partire da altri file che ho, che e' quello che faccio io a "mano" da dentro il mio script

Hugo versioni stampabili con img

sito Questa non e' una cosa che riguarda Hugo propriamente, perche' le versioni stampabili vengono messe nello static direttamente da Makefile e Hugo non le modifica. Comunque il problema e' che c'e' l'immagine rotta per le ricette che hanno immagini. Non dovrebbe proprio esserci <img>, in modo da avere una versione stampabile che non stampi le immagini.

Tema di Hugo

sito

  • Pagina di singola crociera
    • sotto la gallery di tutte le immagini della crociera, sotto forma di thumbnail e cliccabili. Tipo foto di Airbnb.
    • sopra un'immagine grossa a fare da copertina
    • click ad una versione printer friendly senza immagini
  • Pagina elenco crociere
    • Prende l'immagine di copertina di ogni singola crociera, il titolo, le date. Ed e' clickabile per arrivare alla pagina di singola crociera
  • Pagina di singola ricetta
    • Le immagini sono organizzate per numeri progressivi e rappresentano gli step della ricetta
    • Anche la pagina puo' essere organizzata per step
    • La copertina anche qui
  • Pagina di singolo ingrediente
    • Gli ingredienti non dovrebbero avere una pagina, ma solo un'immagine se voglio. Quindi la pagina viene data di default dal template se ho un'immagine per quell'ingrediente.
  • Probabilmente la pagina di singolo ingrediente deve essere usata solo per dare informazioni al resto delle pagine, tipo una headless bundle, come descritto qui: https://forestry.io/blog/data-relationships-in-hugo/

Tassonomie

sito

  • Gli ingredienti di una ricetta sono una tassonomia di Hugo. Possono comparire come se fossero tag, anche se non hanno una loro pagina. Oppure in futuro posso farne una, ma sa li estrapolo dalla ricetta e li metto in un header, come una tassonomia, non faccio un soldo di danno. Inoltre posso mettere un widget a destra con gli ingredienti clickabili e una pagina per ogni ingrediente con le ricette che contengono quell'ingrediente.

Plurali nella presentazione di lista

sito

  • Perche' prende i plurali in http://localhost:1313/crociera/ e http://localhost:1313/altro/, ma non in http://localhost:1313/ricetta/ ??

La home page che fa vedere la lista sotto al testo iniziale

sito

Mettere l'icona della folder accanto al meta che ho aggiunto io

sito

sito

Rimettere in piedi il widget con la spesa o farlo funzionare e levarlo in modo voluto

sito

Inportare da microformato hrecipe, come in therecipedepository.

database

Vedere anche https://open-recipe-format.readthedocs.io/en/latest/index.html e https://cooklang.org/docs/spec/

Secco stampabile fa apparire delle cose in cima alla pagina

sito

"Versione stampabile" da dentro secco non funziona

sito