https://wiki.golem.linux.it/api.php?action=feedcontributions&user=Gbiotti&feedformat=atomGolemWiki - Contributi utente [it]2024-03-29T15:22:37ZContributi utenteMediaWiki 1.35.5https://wiki.golem.linux.it/index.php?title=Git&diff=9292Git2023-05-31T15:06:04Z<p>Gbiotti: </p>
<hr />
<div>{{Note<br />
|type=info<br />
|text=Questa pagina è in continua evoluzione<br />
}}<br />
<br />
Git è un [https://it.wikipedia.org/wiki/Controllo_versione_distribuito sistema di controllo versione] nato nel 2005 ad opera di Linus Torvalds con l'obiettivo principale di versionare il Kernel Linux.<br />
Questa non vuole essere una guida esaustiva, ma un prontuario per i comandi di uso più comune, con l'aggiunta di qualche consiglio.<br />
Per una trattazione completa, si rimanda alla [https://git-scm.com/book/en/v2 guida ufficiale], disponibile anche in [https://git-scm.com/book/it/v2 italiano].<br />
<br />
= Installazione e configurazione =<br />
Su sistemi Debian-derivati:<br />
# apt-get install git<br />
Su ArchLinux:<br />
# pacman -S git<br />
Si consiglia l'uso di ZSH per i suggerimenti nel completamento dei comandi.<br />
<br />
==Configurazione==<br />
I file di configurazione si trovano nei seguenti percorsi:<br />
<repository_git_attuale>/.git/config ''# configurazione per singola cartella''<br />
~/.gitconfig ''# configurazione base per l'utente corrente''<br />
/etc/gitconfig ''# configurazione di sistema (non necessariamente presente)''<br />
<br />
Alcune configurazioni importanti:<br />
$ git config user.name Tizio Caio<br />
$ git config user.email tiziocaio@example.com<br />
$ git config user.signingkey <FOOTPRINT GPG><br />
$ git config core.editor nano<br />
$ git config alias.co checkout<br />
Aggiungendo l'opzione <code>--global</code>, tali impostazioni diventeranno globali per l'utente corrente e non limitate al repository dal quale viene lanciato il comando.<br />
<br />
===Identità multiple===<br />
Nel caso in cui si volesse impostare una configurazione per tutti i repository all'interno di una determinata cartella, ad esempio per gestire separatamente un'identità personale ed una di lavoro, si può procedere come segue.<br />
<br />
Nel <code>~/.gitconfig</code> si imposta, opzionalmente, una identità di fallback. I .gitconfig supplementari vengono richiamati soltanto se il repository è all'interno delle cartelle specificate da includeIf.<br />
[user]<br />
name = Tizio<br />
email = tiziocaio@example.com<br />
<br />
[includeIf "gitdir:~/workspace/"]<br />
path = ~/workspace/.gitconfig<br />
[includeIf "gitdir:~/personal/"]<br />
path = ~/personal/.gitconfig<br />
<br />
Poi, nei file <code>~/workspace/.gitconfig</code> e <code>~/personal/.gitconfig</code> si esplicitano le identità da usare nel contesto di quelle sottodirectory:<br />
[user]<br />
name = Tizio Caio<br />
email = tiziocaio@professional.example.com<br />
<br />
{{Note<br />
|type=warning<br />
|text=Nell'opzione <code>gitdir</code>, è necessario specificare un path con un trailing slash, altrimenti prende solo la cartella specificata, e non anche le sottocartelle.<br />
}}<br />
<br />
= Comandi di base =<br />
== init ==<br />
Inizializzare un repository vuoto:<br />
$ git init <sottocartella><br />
Se non viene specificata una sottocartella sarà inizializzato in quella attuale.<br />
Aggiungendo l'opzione <code>--bare</code> sarà creato un repository di tipo ''bare'', ovvero privo della ''working directory'', adatto per essere usato come repository remoto e non come cartella di lavoro.<br />
<br />
== Stato dei file ==<br />
Con il comando<br />
$ git status<br />
si ottengono informazioni sui file attualmente presenti nella cartella di lavoro: se ce ne sono di nuovi (''U''), modificati (''M''), eliminati (''D''), etc... Darà inoltre informazioni sulla sincronizzazione tra la commit attuale e quella remota.<br />
<br />
== Aggiungere/Rimuovere files ==<br />
Aggiungere un file '''nuovo''' (''untracked'') o '''modificato''' (rispetto all'ultima commit eseguita) nella ''Staging Area'', ovvero pronto per la prossima commit:<br />
$ git add <nome_file><br />
Rimuovere un file dall'indice dei file tracciati (risulterà quindi ''untracked''):<br />
$ git rm --cached <nome_file><br />
Omettendo <code>--cached</code> il file sarà anche eliminato dalla cartella (quindi definitivamente).<br />
<br />
Rimuovere tutti i file dalla staging area:<br />
git reset HEAD -- .<br />
<br />
Rinominare un file: sebbene si possa utilizzare semplicemente il comando <code>mv</code> della shell, questo fa sì che git debba poi intuire automagicamente se il file è stato spostato, oppure se è stato eliminato e poi creato di nuovo.<br />
A volte lo spostamento del file non viene riconosciuto, e viene interpretato come eliminazione e successiva ri-aggiunta, generando lunghi e fastidiosi ''diff''.<br />
Onde evitare questo problema, è opportuno segnalare l'operazione di spostamento/rinomina esplicitamente a git, tramite il comando apposito.<br />
<br />
git mv source dest<br />
<br />
== Commit ==<br />
Una volta aggiunti i file desiderati alla ''Staging Area'', la prossima commit è pronta per essere "consolidata", cioè registrata nella cronologia del repository:<br />
$ git commit<br />
Sarà aperto l'editor di testo scelto (vedi sezione configurazione) per scrivere un breve messaggio rappresentativo della commit. Se il messaggio non è eccessivamente lungo (come spesso accade) è sufficiente accodare al comando di commit l'opzione <code>-m "Messaggio per la commit"</code>.<br />
Un'altra scorciatoia utile può essere l'opzione <code>-a</code>, che aggiunge automaticamente tutti i file '''modificati''' (rispetto all'ultima commit eseguita) alla Staging Area senza dover eseguire <code>add</code> ogni volta. Questa opzione agisce '''solo''' su quelli modificati e non su quelli '''nuovi''', per i quali la <code>add</code> è d'obbligo almeno la prima volta. <br />
<br />
Il comando tipico di commit sarà quindi:<br />
$ git commit -a -m "Riparato bug. Aggiunti commenti al codice."<br />
L'esecuzione del comando commit senza l'aggiunta di file alla Staging Area (e quindi senza nemmeno l'opzione <code>-a</code>) non avrà alcun effetto.<br />
<br />
Se si commette un piccolo errore in una commit e si vuole modificare un file o il messaggio di commit stesso, senza però dover creare una nuova commit, si può di nuovo fare <code>add</code> del file, e può essere aggiunta l'opzione:<br />
$ git commit --amend<br />
<br />
{{Note<br />
|type=attention<br />
|text=<code>git commit --amend</code> modifica la storia del repository, perciò prestare particolare attenzione se si è già pushato su un server remoto}}<br />
<br />
== Log ==<br />
$ git log<br />
elenca tutta la cronologia delle commit corredata di somma [https://it.wikipedia.org/wiki/Secure_Hash_Algorithm SHA-1], autore, data e ora di commit e messaggio.<br />
<br />
È uno dei comandi col maggior numero di opzioni, dalla formattazione dell'output (più informazioni sull'autore, sulle commit firmate) al filtraggio (per autore, per data, per messaggio, etc...). Alcune delle più importanti sono:<br />
* <code>--all</code>: elenca anche le commit relative ad altri ''branches'' (vedi sezione relativa)<br />
* <code>--oneline</code>: elenco sintetico con solamente ID SHA-1 e messaggio di commit<br />
* <code>--graph</code>: insieme a ''--all'' realizza una rappresentazione ASCII art della ramificazione del repository<br />
Combinando insieme le 3 opzioni sarà visualizzata in modo sintetico (oneline) ed efficace (graph) tutta la cronologia del repo. Può essere utile definire un alias per questo comando (vedi sezione configurazione), ad esempio:<br />
$ git config alias.megalog "log --all --oneline --graph"<br />
<br />
= Git online =<br />
Utilizzare un server git (repository remoto) può servire per:<br />
* avere un backup del proprio progetto<br />
* condividere il proprio progetto con altri<br />
* lavorare in team sul progetto<br />
* fare un fork di un progetto già esistente<br />
<br />
== Configurare un repository remoto ==<br />
=== Server privato ===<br />
Se si ha a disposizione un server personale o aziendale (per esempio un VPS), questo può essere configurato come repository git remoto.<br />
<br />
Per una configurazione base, è sufficiente avere a disposizione un server SSH (quasi sicuramente già presente) e installare git (vedi sezione installazione). Eseguire quindi<br />
cd /home/utente/<cartella_git><br />
git init --bare<br />
Si noti in questo caso l'utilità dell'opzione <code>bare</code>, che non crea una ''working directory'' su cui poter lavorare direttamente (spesso non necessaria su un server) ma solo il database dei file, risparmiando spazio di archiviazione.<br />
<br />
Se si desidera avere un'interfaccia web più user-friendly, si può installare [https://gitea.io/ Gitea] (al GOLEM abbiamo la [https://git.golem.linux.it/ nostra istanza]), oppure [https://about.gitlab.com/ GitLab], solo per citare due delle più famose piattaforme.<br />
<br />
=== Servizio online ===<br />
In alternativa ci si può affidare ad un servizio online, come [https://github.com GitHub] (il più popolare), [https://about.gitlab.com/ GitLab] (che può essere anche usato on-premise) o [https://bitbucket.org BitBucket]. Dopo il login (email o nome utente e password) si può procedere alla creazione di un nuovo repository con l'apposito pulsante. Saranno forniti quindi due URL per accedere:<br />
<br />
<nowiki>https://github.com/NOME_UTENTE/NOME_REPOSITORY</nowiki> <br />
git@github.com:NOME_UTENTE/NOME_REPOSITORY.git <br />
<br />
Generalmente, l'URL https viene utilizzato per sola lettura, per clonare e scaricare repository pubblici, e per prove temporanee, mentre l'URL ssh può essere utilizzato, in maniera più flessibile e automatica, grazie all'autenticazione tramite chiave, anche per la scrittura (ammesso di avere l'autorizzazione da parte del proprietario).<br />
<br />
== Collegare il repo locale a quello remoto ==<br />
=== Nuovo ===<br />
In entrambi i casi, dopo aver creato un repo remoto si deve comunicare a git di collegare quell'URL al repo locale.<br />
git remote add origin git@github.com:NOME_UTENTE/NOME_REPOSITORY.git ''# Aggiungere l'URL''<br />
git push ''# Inviare il lavoro locale sul server''<br />
'''Nota:''' il nome ''origin'' (così come ''master'' per il ramo principale) è solamente una convenzione e può essere scelto a piacere.<br />
<br />
=== Esistente ===<br />
Se il repo a cui collegarsi esiste già, usiamo il comando<br />
git clone git@github.com:NOME_UTENTE/NOME_REPOSITORY.git<br />
<br />
Nel log, tutti i rami figureranno come <code>origin/ramo-1</code>. Per potersi ''agganciare'' con un ramo locale:<br />
git checkout origin/ramo-1 ''# Spostarsi sulla commit puntata da ramo-1 remoto''<br />
git checkout -b ramo-1 ''# Creare un nuovo ramo locale su questa commit''<br />
git branch --set-upstream-to=origin/ramo-1 ''# Agganciare ramo-1 a origin/ramo-1''<br />
'''Nota:''' non è obbligatorio che il ramo locale abbia lo stesso nome del ramo remoto a cui è agganciato (ecco perché questi passaggi non sono automatici), ma fare il contrario sarebbe follia!<br />
<br />
== Push e Pull ==<br />
A questo punto si può leggere e scrivere sui rami remoti del server origin/master, origin/ramo-1, etc. servendosi dei rami locali master, ramo-1, etc. coi quali eseguiamo l'ordinaria amministrazione del progetto.<br />
Usiamo per leggere e scrivere (rispettivamente) i comandi<br />
git pull<br />
git push<br />
<br />
Per ottenere tutti gli oggetti remoti (rami, tags, ...) creati da collaboratori, è necessario aggiungere<br />
git pull --all<br />
<br />
e quindi per visualizzare i branch remoti<br />
git branch --remotes<br />
<br />
= Lavorare con git =<br />
== Evitare tracciamento file ==<br />
=== Artefatti e configurazioni del repository ===<br />
Talvolta è necessario evitare di tracciare alcuni file, ad esempio gli artifatti della compilazione (file oggetto e binari), file di configurazione, file che contengono dati sensibili, e così via.<br />
Per farlo, è sufficiente aggiungere il nome del file nel file nascosto <code>.gitignore</code> nella root del repository, e committarlo.<br />
Si possono aggiungere anche nomi di directory o pattern con wildcard.<br />
<br />
=== File globali ===<br />
Talvolta succede di "sporcare" il repository con file specifici di qualche applicazione che il singolo sviluppatore utilizza su tutti i repository, per esempio file di configurazione dell'editor di testo o di backup (<code>*.swp</code>, <code>*.~</code>).<br />
Si può dunque usare un file <code>.gitignore</code> globale per l'utente, che può essere messo nella <code>~</code> e specificato con:<br />
git config --global core.excludesfile ~/.gitignore<br />
<br />
=== Smettere di tracciare file ignorati ===<br />
Può capitare di aggiungere un artefatto al repository, per sbaglio, e volerlo poi successivamente mettere tra i file ignorati.<br />
Però ''git'' ormai sta tenendo traccia di quel file, dunque come fare?<br />
<br />
* Aggiungere il file al <code>.gitignore</code><br />
* Vedere il/i file che sono tracciati, ma che dovrebbero essere ignorati:<br />
git ls-files -ci --exclude-standard<br />
* Rimuovere forzatamente i file indesiderati:<br />
git rm --cached <file><br />
* git commit<br />
<br />
== Lavorare in team ==<br />
=== Windows ===<br />
Quando capita di condividere il codice con altre persone che utilizzano Windows, onde evitare problemi subdoli causati dalla presenza di diversi terminatori di riga nel codice sorgente (CRLF su Windows e LF su Linux), la cosa corretta da fare è configurare l'opzione <code>autocrlf</code> a <code>true</code>. In questo modo, i file sul repository conterranno sempre <code>LF</code> come terminatore, e saranno opportunamente convertiti in <code>CRLF</code> (e viceversa) quando si fa il checkout (e il commit) su Windows.<br />
<br />
git config core.autocrlf true<br />
<br />
Per MAC OS X, questo problema non si pone.<br />
<br />
=== Merge ===<br />
[[File:Git-bad-merging.png|thumb|Una piazzola]]<br />
Quando si lavora in gruppo c'è sempre il rischio di "incrociarsi" nel pushare nuove commit, con conseguenti intrecci nella storia del progetto (amichevolmente detti "piazzole di sosta").<br />
Per evitare ciò conviene seguire una procedura standard: non so se è la migliore però finora non ha mai dato problemi.<br />
<br />
#Effettuare le proprie modifiche, al termine verificare se altri utenti hanno effettuato aggiornamenti nel mentre utilizzando<br />
#:<code>git fetch</code><br />
#:Se non viene stampato alcunché si può saltare al punto 6 effettuando la commit e pushando regolarmente.<br />
#Altrimenti, aggiungere i files modificati alla ''staging area'' ed "accantonarli" in una '''stash'''. È utile specificare un messaggio di stash (come fosse una commit) per individuarla più facilmente nel caso ci fossero altre stash.<br />
#: <code>git stash push -m "merging in progress"</code><br />
#A questo punto la cartella è stata riportata all'ultima commit scaricata. Effettuare il pull per scaricare le novità<br />
#: <code>git pull</code><br />
#Recuperare le modifiche dallo stash. Questa operazione è analoga ad un merge, ma al termine non rimarrà traccia nella storia, che proseguirà linearmente<br />
#: <code>git stash pop</code><br />
#Se il ''merge'' dallo stash va a buon fine si può passare al punto successivo, la stash viene eliminata automaticamente. Se invece le modifiche fatte confliggono con le novità appena scaricato (ciò viene notificato da git) è necessario integrare manualmente i punti (individuabili anche con <code>git diff</code>), ed eliminare la stash manualmente (<code>git stash list</code> per individuarla, <code>git stash drop stash@{xxx}</code> per eliminarla).<br />
#Il patema è finito, si può fare la commit e pushare, sperando che nella lettura di questa lista nessuno abbia fatto altro. Altrimenti ripartire dal punto 1.<br />
#: <code>git commit -m "commit interessante"<br/>git push</code><br />
<br />
=== Blame ===<br />
Per scoprire chi è stato l'ultimo che ha cambiato un pezzo di codice:<br />
<br />
git blame path/file.c<br />
<br />
A volte può capitare può capitare che tutte le ultime modifiche siano assegnate alla stessa persona.<br />
Questo, per esempio, avviene quando si fanno commit "batch" di riorganizzazione di tutto il repository, es. formattazione automatica di tutto il codice.<br />
Si può istruire git per ignorare questo tipo di commit quando si va a fare il blame.<br />
<br />
Creare un file ''.git-blame-ignore-revs'' e popolarlo con l'elenco degli hash dei commit da ignorare, esempio:<br />
930b609250f7bf0361ede392432f95b9b2a78fb2<br />
7819dbca705d92d1551e58a82dd2ae9881c90e52<br />
<br />
Dopodiché, istruire git per utilizzarlo:<br />
git config blame.ignoreRevsFile .git-blame-ignore-revs<br />
<br />
== Fondere più commit in uno solo ==<br />
La storia attuale. In <span style="color: blue;">blu</span> i commit che si vogliono ''squashare'' in uno solo.<br />
<span style="color: blue;">59e5834 moved files<br />
37af4b7 added README.md and LICENSE file<br />
cd37805 repository structured as an arduino library</span><br />
<strong>ac95564</strong> added comments for UDP part<br />
<br />
Si sceglie l'ultimo commit appena prima:<br />
git rebase --interactive <strong>ac95564</strong><br />
<br />
Si apre automaticamente l'editor, e si vedono i commit (in ordine ''inverso'').<br />
Sostituire <code>pick</code> (p) con <code>squash</code> (s) per fondere i commit assieme, eccetto su quello più in alto.<br />
<br />
Quando si chiude l'editor, si apre una nuova finestra dove è possibile editare il nuovo messaggio di commit.<br />
<br />
Per annullare il rebase in corso, cancellare tutto il contenuto dell'editor e salvare.<br />
<br />
== Dividere un commit in più parti ==<br />
La funzionalità di <code>rebase</code> può essere utilizzata anche per riscrivere dei commit già esistenti, e aggiungerne di nuovi.<br />
<br />
Scegliere il commit che si vuole suddividere, poniamo che sia <code>ac95564</code>.<br />
<br />
git rebase --interactive ac95564<br />
<br />
Nell'editor, sostituire <code>pick</code> con <code>edit</code> in corrispondenza del commit che si desidera modificare, dopodiché avviare il rebase chiudendo l'editor.<br />
Ad un certo punto, il rebase si interrompe, in corrispondenza del commit scelto, che può quindi essere modificato.<br />
<br />
Prima togliere le modifiche dalla staging area con:<br />
<br />
git reset HEAD~<br />
<br />
Dopo riaggiungere ciò che si desidera aggiungere al primo commit, e committare, poi procedere col secondo, e così via.<br />
Esempio:<br />
<br />
git add <file1><br />
git commit<br />
git add <file2> --patch<br />
git commit<br />
git add <file2><br />
git commit<br />
<br />
Una volta soddisfatti:<br />
<br />
git rebase --continue<br />
<br />
== Ignorare spazi bianchi ==<br />
A volte capita di trovare codice scritto con editor non degni di questo nome, che non eliminano gli spazi vuoti in fondo alle righe.<br />
Per evitare di suscitare le ire degli scellerati manutentori, ed evitare di riempire il commit con centinaia di modifiche di spazi vuoti, usare:<br />
<br />
git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero -<br />
<br />
== Eliminare branch ==<br />
* Locale<br />
git branch -d ''branchname''<br />
<br />
* Remoto<br />
git push ''origin'' --delete ''branchname''<br />
<br />
== Copie locali multiple ==<br />
Quando si deve operare contemporaneamente su più di un branch dello stesso progetto è comodo clonare più volte il repository in cartelle separate, così da fare checkout come meglio si crede.<br />
Ma così facendo si creano due working copy indipendenti, con cartelle <code>.git</code> duplicate e branch locali a rigori differenti.<br />
<br />
<code>git worktree</code> permette di effettuare, appunto, dei checkout in cartelle diverse dal progetto principale ma afferenti ad una stessa <code>.git</code>. <br />
Oltre a ridurre l'occupazione di disco, le due copie locali condivideranno l'albero dei commit rendendo più agevoli le operazioni di merge/log.<br />
<br />
Per creare una nuova copia locale (''linked working tree'') associata ad un certo branch<br />
<br />
$ git worktree add path [branch]<br />
<br />
Se non si specifica il branch ne viene creato uno nuovo, a partire dal commit corrente, prendendo il nome dalla directory di destinazione specificata nel path.<br />
<br />
Per approfondire, consultare la [https://git-scm.com/docs/git-worktree guida ufficiale].<br />
<br />
== Trovare il commit che introduce un bug ==<br />
A volte si sa che il software al commit taggato X funziona perfettamente, mentre a un successivo tag Y, presenta un bug.<br />
Il numero di commit tra X e Y può anche essere grande, ma tramite una ricerca binaria, in pochi passaggi è possibile identificare il commit che introduce il problema, avendo git che propone dei commit da testare, e fornendogli noi informazioni sulla loro bontà di funzionamento.<br />
Per farlo, si utilizza il comando <code>git bisect</code>.<br />
<br />
Per avviare una sessione di <code>git bisect</code>:<br />
git bisect start<br />
git bisect good X<br />
git bisect bad Y<br />
<br />
A questo punto git sceglierà automaticamente il commit che cade nel mezzo (chiamiamolo commit ''M''), e chiederà di provarlo.<br />
Una volta provato il software al commit ''M'', saremo in grado di stabilire se ha il bug o meno, e lo si indicherà a git dando di nuovo un comando:<br />
git bisect good HEAD<br />
oppure<br />
git bisect bad HEAD<br />
a seconda che il commit M a cui ci troviamo sia buono, oppure presenti il bug.<br />
<br />
Una volta dato il nuovo comando di <code>git bisect</code>, git sceglierà un nuovo commit ''N'', di nuovo a metà tra i due commit estremi "buono" e "cattivo", dimezzando nuovamente lo spazio di ricerca: il commit andrà provato, e si continuerà a comunicare a git la sua bontà o meno, dando nuovi comandi <code>git bisect good/bad</code>.<br />
<br />
Questi passaggi di bisect e test vanno ripetuti "un po' di volte", finché git non avrà sezionato tutti i commit tra X e Y, e a quel punto comunicherà quale è il primo commit che introduce il problema.<br />
<br />
Il bug è adesso ben circoscritto e può essere studiato.<br />
<br />
Quando si è trovato il commit incriminato, terminare la sessione di <code>git bisect</code> con:<br />
git bisect reset<br />
<br />
La ricerca avrà richiesto, al massimo, di controllare <math>log_{2}(C)</math> commit diversi, dove ''C'' è il numero di commit che separa X da Y.<br />
<br />
== Gestire files di grandi dimensioni (git lfs) ==<br />
Git nasce con l'obiettivo di gestire dei files di codice sorgente, quindi plain-text; per questo non è molto efficace nella gestione di files contenenti dati in formato diverso quali possono essere, ad esempio, [https://it.wikipedia.org/wiki/JPEG jpeg], [https://it.wikipedia.org/wiki/Portable_Network_Graphics png], [https://it.wikipedia.org/wiki/Portable_Document_Format pdf] ecc.<br />
<br />
Per ovviare a questa carenza sono stati sviluppati vari strumenti da installare come add-on; uno di questi è [https://git-lfs.com/ git-lfs]<br />
<br />
=== Installazione ===<br />
Su sistemi Debian-derivati:<br />
# apt-get install git-lfs<br />
Su ArchLinux:<br />
# pacman -S git-lfs<br />
Su Windows: è già presente nell'installazione standard di git<br />
<br />
=== Attivazione ===<br />
Per poter usare git-lfs occorre che questo sia "attivato".<br />
<br />
==== Attivazione globale a livello utente ====<br />
Attiva git-lfs globalmente, questo significa che potrà essere usato in ogni repository:<br />
git lfs install<br />
L'attivazione locale è necessaria solo la prima volta.<br />
==== Attivazione per un singolo repository ====<br />
È possibile attivare git-lfs anche a livello di singolo repository:<br />
git lfs install --local<br />
==== Disattivazione globale a livello utente ====<br />
È possibile disattivare globalmente git-lfs:<br />
git lfs uninstall<br />
in questo caso se si volesse tornare ad usarlo occorrerà attivarlo nuovamente.<br />
==== Disattivazione per singolo repository ====<br />
Se attivato per singolo repository è possibile disattivarlo<br />
git lfs uninstall --local<br />
<br />
=== Gestire i files da tracciare ===<br />
Occorre impostare quali file (o tipi di file) tracciare. Se, ad esmpio, si volessero tracciare tutti i files di tipo pdf:<br />
git lfs track "*.pdf"<br />
Questo comando aggiunge le informazioni al file <code>.gitattributes</code>; occorre quindi ricordarsi di fare il commit di questo file (<code>git add .gitattributes</code>).<br />
<br />
A questo punto è possibile lavorare normalmente, i commit e push riguardanti files che abbiamo definito tracciati da git-lfs saranno gestiti in modo trasparente.<br />
<br />
=== Comandi aggiunti da git-lfs ===<br />
Elenco dei comanti aggiunti da git-lfs:<br />
git lfs --help<br />
<br />
<br />
[[Category: Howto]]</div>Gbiottihttps://wiki.golem.linux.it/index.php?title=Prontuario_per_l%27installazione&diff=8773Prontuario per l'installazione2021-09-28T13:08:56Z<p>Gbiotti: /* Cosa bisogna fare prima di installare Linux */</p>
<hr />
<div>{{Guide<br />
|immagine=oldpc.png<br />
|guida=Trashware<br />
|precedente=Pillole hardware<br />
|indice=Trashware<br />
|successiva=Trashware styles<br />
}}<br />
Se hai Windows e vuoi venire da noi per farti aiutare a installare Linux, '''prima''' ti consigliamo di '''leggere attentamente''' questa pagina, e di seguire le istruzioni indicate, così l'installazione sarà veloce e indolore.<br />
Se non le segui, non succede niente di male, ma l'installazione potrebbe richiedere un paio di serate (mentre in genere è una questione di mezz'ora).<br />
<br />
Se qualcosa non ti è chiaro, puoi comunque venire in Officina o contattarci tramite [https://golem.linux.it/wp/contatti mailing list].<br />
<br />
== Domande frequenti (FAQ) ==<br />
<br />
=== Se tolgo Windows e metto Linux, i miei precedenti dati personali andranno persi? ===<br />
<br />
No, ma per precauzione è bene effettuare un backup (una copia di sicurezza).<br />
Si possono copiare i propri documenti su un supporto esterno (hard disk, chiavetta USB, DVD).<br />
Per farlo, basta fare copia e incolla dei file.<br />
<br />
=== Installare Linux rimuoverà Windows? ===<br />
<br />
Non necessariamente. Se vuoi puoi mantenere entrambi i sistemi e decidere, ogni volta che accendi il computer, quale dei due utilizzare (si fa un cosiddetto ''dual boot'').<br />
<br />
I dati che avevi rimarranno intatti sul disco, e (in teoria) non c'è bisogno di copiarli, ma è comunque consigliabile effettuare una copia di sicurezza (non è mai successo, ma qualcosa può sempre andare storto, ad esempio: salta la corrente durante il partizionamento).<br />
<br />
È buona norma anche assicurarsi di avere sufficiente spazio a disposizione: il sistema in sé occupa poco meno di 10GB, a cui vanno ovviamente aggiunti i propri dati personali.<br />
<br />
=== Su Linux troverò tutti i programmi che avevo su Windows? ===<br />
<br />
Non è detto.<br />
<br />
I programmi per Windows funzionano solo su Windows, tuttavia, molti programmi per Windows hanno anche le versioni per Linux (e per Mac), ma non tutti.<br />
<br />
Si suggerisce di verificare sul web se i programmi desiderati hanno anche una versione per Linux.<br />
Se non esiste una versione per Linux, si può considerare l'uso di un'alternativa.<br />
Su questi siti si trovano elenchi copiosi e aggiornati di tantissime alternative:<br />
<br />
* https://wiki.ubuntu-it.org/Programmi<br />
* https://alternativeto.net/<br />
<br />
Con un dual boot puoi comunque continuare ad utilizzare i programmi su Windows di cui non trovi alternative soddisfacenti.<br />
<br />
Una cosa da osservare nel passaggio da Windows a Linux, è che spesso siamo abituati al [https://it.wikipedia.org/wiki/Vendor_lock-in vendor lock-in], cioè a utilizzare da sempre i programmi di un solo produttore, senza aver mai usato niente di diverso: col passaggio, inizialmente ci si potrà trovare in difficoltà, ma in breve si noteranno i vantaggi del cambiamento: tanti programmi open source, infatti, sono anche universali, cioè funzionano su qualunque sistema Windows, Linux e Mac, così basterà imparare a usare quelli per poterli usare ovunque, e anche ritornando su Windows, o passando addirittura al Mac, si avrà poi maggiore facilità.<br />
<br />
Alcuni esempi: invece di Internet Explorer (Edge) si può usare [https://www.mozilla.org Mozilla Firefox]; invece di Microsoft Office, si può usare [https://libreoffice.org LibreOffice]; invece di Windows Media Player, si può usare [https://videolan.org VLC]; tutti questi programmi funzionano sia su Linux che su Mac che su Windows.<br />
<br />
== Cosa bisogna fare prima di installare Linux ==<br />
<br />
{{Note<br />
|type=attention<br />
|text=Effettuare una '''copia dei propri dati personali'''<br />
}}<br />
<br />
<u>Per precauzione, è sempre bene effettuare un backup (una copia di sicurezza) di tutti i documenti, foto e file personali</u>.<br />
<br />
Si possono copiare:<br />
* su un supporto esterno, per esempio un hard disk, una chiavetta USB, o un DVD: per farlo, basta fare copia e incolla dei file;<br />
* oppure su un servizio cloud, abilitando la sincronizzazione;<br />
<br />
Prima di effettuare la copia è opportuno verificare che si disponga di supporti fisici o di spazio di archiviazione in cloud sufficientemente capienti da poter contenere i dati che si intende salvare; da notare inoltre che a seconda della quantità di questi l'operazione potrebbe richiedere anche diverse ore.<br />
<br />
=== Devo fare la deframmentazione? ===<br />
* se vuoi togliere Windows: no, tanto cancelliamo tutto e bastano 2 secondi.<br />
* se vuoi mantenere Windows:<br />
** in genere no: le più recenti versioni di Windows effettuano la deframmentazione in automatico;<br />
** se proprio vogliamo guadagnare qualche minuto: sì, per esempio usando un programma come [https://www.ccleaner.com/defraggler/download/standard Defraggler]. Una volta installato sarà sufficiente cliccare su ''Analizza'', poi su ''Defrag'' e attendere il completamento.<br />
<br />
== Installazione ==<br />
A questo punto il computer sarà pronto per l'installazione di Linux. Se si dispone di un CD/DVD della distribuzione Linux desiderata sarà sufficiente inserirlo e riavviare. Altrimenti è possibile scaricare dalla rete un'immagine '''ISO''' della distribuzione Linux desiderata, ovvero un file che contiene virtualmente un intero CD/DVD. Questo file può essere quindi masterizzato su CD/DVD oppure, metodo consigliato, trasferito su un supporto USB come una semplice pen drive.<br />
<br />
=== Scaricare il file ISO ===<br />
Le distribuzioni Linux che consigliamo sono [https://www.linuxmint.com/download.php Linux Mint] o [https://www.ubuntu-it.org/download Ubuntu], ma la procedura sarà la medesima anche con l'ISO di un'altra distribuzione.<br />
<br />
=== Trasferire l'ISO sul supporto DVD ===<br />
Per trasferire il file ISO appena scaricato su un supporto DVD, nelle più recenti versioni di Windows, è sufficiente inserire un DVD vergine nel masterizzatore, fare click col tasto destro sull'immagine, e scegliere ''Masterizza immagine disco''.<br />
<br />
[[File:Masterizza-immagine-disco.png]]<br />
<br />
=== Trasferire l'ISO sul supporto USB ===<br />
Per trasferire il file ISO appena scaricato su un supporto USB è necessaria un'applicazione come ad esempio Win32DiskImager (per '''Windows''') scaricabile da [https://sourceforge.net/projects/win32diskimager questa pagina] premendo sul pulsante ''Download''. Installare l'applicazione (occuperà pochissimo spazio) e una volta aperta si presenterà una finestra come quella in figura a lato.<br />
A questo punto:<br />
* Scegliere il ''File immagine'' ISO da trasferire cliccando sull'icona della cartellina. Selezionare <code>*.*</code> nella tendina in basso a destra per mostrare tutti i file e navigare le cartelle selezionando l'ISO desiderata.<br />
* Inserire il device USB e selezionarlo nel menù a tendina in alto a destra ''Dispositivo''.<br />
* Premere su ''Scrivi'' in basso per iniziare il trasferimento.<br />
<br />
'''NB''': Windows potrebbe presentare una finestra di avviso per le applicazioni che non provengono dallo Store. In tal caso premere su ''Modifica le mie impostazioni'' e quindi scegliere ''Ovunque'' nel primo menù a tendina.<br />
<br />
[[File:Win32DiskManager screen.png|Finestra principale di Win32DiskManager]]<br />
<br />
== Pagine correlate ==<br />
{{Guide<br />
|immagine=oldpc.png<br />
|guida=Trashware<br />
|precedente=<br />
|indice=Trashware<br />
|successiva=<br />
}}<br />
<br />
<br />
[[Category:Officina]]</div>Gbiottihttps://wiki.golem.linux.it/index.php?title=Prontuario_per_l%27installazione&diff=8772Prontuario per l'installazione2021-09-28T13:07:59Z<p>Gbiotti: /* Cosa bisogna fare prima di installare Linux */</p>
<hr />
<div>{{Guide<br />
|immagine=oldpc.png<br />
|guida=Trashware<br />
|precedente=Pillole hardware<br />
|indice=Trashware<br />
|successiva=Trashware styles<br />
}}<br />
Se hai Windows e vuoi venire da noi per farti aiutare a installare Linux, '''prima''' ti consigliamo di '''leggere attentamente''' questa pagina, e di seguire le istruzioni indicate, così l'installazione sarà veloce e indolore.<br />
Se non le segui, non succede niente di male, ma l'installazione potrebbe richiedere un paio di serate (mentre in genere è una questione di mezz'ora).<br />
<br />
Se qualcosa non ti è chiaro, puoi comunque venire in Officina o contattarci tramite [https://golem.linux.it/wp/contatti mailing list].<br />
<br />
== Domande frequenti (FAQ) ==<br />
<br />
=== Se tolgo Windows e metto Linux, i miei precedenti dati personali andranno persi? ===<br />
<br />
No, ma per precauzione è bene effettuare un backup (una copia di sicurezza).<br />
Si possono copiare i propri documenti su un supporto esterno (hard disk, chiavetta USB, DVD).<br />
Per farlo, basta fare copia e incolla dei file.<br />
<br />
=== Installare Linux rimuoverà Windows? ===<br />
<br />
Non necessariamente. Se vuoi puoi mantenere entrambi i sistemi e decidere, ogni volta che accendi il computer, quale dei due utilizzare (si fa un cosiddetto ''dual boot'').<br />
<br />
I dati che avevi rimarranno intatti sul disco, e (in teoria) non c'è bisogno di copiarli, ma è comunque consigliabile effettuare una copia di sicurezza (non è mai successo, ma qualcosa può sempre andare storto, ad esempio: salta la corrente durante il partizionamento).<br />
<br />
È buona norma anche assicurarsi di avere sufficiente spazio a disposizione: il sistema in sé occupa poco meno di 10GB, a cui vanno ovviamente aggiunti i propri dati personali.<br />
<br />
=== Su Linux troverò tutti i programmi che avevo su Windows? ===<br />
<br />
Non è detto.<br />
<br />
I programmi per Windows funzionano solo su Windows, tuttavia, molti programmi per Windows hanno anche le versioni per Linux (e per Mac), ma non tutti.<br />
<br />
Si suggerisce di verificare sul web se i programmi desiderati hanno anche una versione per Linux.<br />
Se non esiste una versione per Linux, si può considerare l'uso di un'alternativa.<br />
Su questi siti si trovano elenchi copiosi e aggiornati di tantissime alternative:<br />
<br />
* https://wiki.ubuntu-it.org/Programmi<br />
* https://alternativeto.net/<br />
<br />
Con un dual boot puoi comunque continuare ad utilizzare i programmi su Windows di cui non trovi alternative soddisfacenti.<br />
<br />
Una cosa da osservare nel passaggio da Windows a Linux, è che spesso siamo abituati al [https://it.wikipedia.org/wiki/Vendor_lock-in vendor lock-in], cioè a utilizzare da sempre i programmi di un solo produttore, senza aver mai usato niente di diverso: col passaggio, inizialmente ci si potrà trovare in difficoltà, ma in breve si noteranno i vantaggi del cambiamento: tanti programmi open source, infatti, sono anche universali, cioè funzionano su qualunque sistema Windows, Linux e Mac, così basterà imparare a usare quelli per poterli usare ovunque, e anche ritornando su Windows, o passando addirittura al Mac, si avrà poi maggiore facilità.<br />
<br />
Alcuni esempi: invece di Internet Explorer (Edge) si può usare [https://www.mozilla.org Mozilla Firefox]; invece di Microsoft Office, si può usare [https://libreoffice.org LibreOffice]; invece di Windows Media Player, si può usare [https://videolan.org VLC]; tutti questi programmi funzionano sia su Linux che su Mac che su Windows.<br />
<br />
== Cosa bisogna fare prima di installare Linux ==<br />
<br />
{{Note<br />
|type=attention<br />
|text=Effettuare una '''copia dei propri dati personali'''<br />
}}<br />
<br />
<u>Per precauzione, è sempre bene effettuare un backup (una copia di sicurezza) di tutti i documenti, foto e file personali</u>.<br />
<br />
Si possono copiare:<br />
* su un supporto esterno, per esempio un hard disk, una chiavetta USB, o un DVD: per farlo, basta fare copia e incolla dei file;<br />
* oppure su un servizio cloud, abilitando la sincronizzazione;<br />
<br />
Prima di effettuare la copia è opportuno verificare che si disponga di supporti fisici o di spazio di archiviazione in cloud sufficientemente capienti da poter contenere i dati che si intende salvare; da notare inoltre che a seconda della quantità di questi l'operazione può richiedere anche ore.<br />
<br />
=== Devo fare la deframmentazione? ===<br />
* se vuoi togliere Windows: no, tanto cancelliamo tutto e bastano 2 secondi.<br />
* se vuoi mantenere Windows:<br />
** in genere no: le più recenti versioni di Windows effettuano la deframmentazione in automatico;<br />
** se proprio vogliamo guadagnare qualche minuto: sì, per esempio usando un programma come [https://www.ccleaner.com/defraggler/download/standard Defraggler]. Una volta installato sarà sufficiente cliccare su ''Analizza'', poi su ''Defrag'' e attendere il completamento.<br />
<br />
== Installazione ==<br />
A questo punto il computer sarà pronto per l'installazione di Linux. Se si dispone di un CD/DVD della distribuzione Linux desiderata sarà sufficiente inserirlo e riavviare. Altrimenti è possibile scaricare dalla rete un'immagine '''ISO''' della distribuzione Linux desiderata, ovvero un file che contiene virtualmente un intero CD/DVD. Questo file può essere quindi masterizzato su CD/DVD oppure, metodo consigliato, trasferito su un supporto USB come una semplice pen drive.<br />
<br />
=== Scaricare il file ISO ===<br />
Le distribuzioni Linux che consigliamo sono [https://www.linuxmint.com/download.php Linux Mint] o [https://www.ubuntu-it.org/download Ubuntu], ma la procedura sarà la medesima anche con l'ISO di un'altra distribuzione.<br />
<br />
=== Trasferire l'ISO sul supporto DVD ===<br />
Per trasferire il file ISO appena scaricato su un supporto DVD, nelle più recenti versioni di Windows, è sufficiente inserire un DVD vergine nel masterizzatore, fare click col tasto destro sull'immagine, e scegliere ''Masterizza immagine disco''.<br />
<br />
[[File:Masterizza-immagine-disco.png]]<br />
<br />
=== Trasferire l'ISO sul supporto USB ===<br />
Per trasferire il file ISO appena scaricato su un supporto USB è necessaria un'applicazione come ad esempio Win32DiskImager (per '''Windows''') scaricabile da [https://sourceforge.net/projects/win32diskimager questa pagina] premendo sul pulsante ''Download''. Installare l'applicazione (occuperà pochissimo spazio) e una volta aperta si presenterà una finestra come quella in figura a lato.<br />
A questo punto:<br />
* Scegliere il ''File immagine'' ISO da trasferire cliccando sull'icona della cartellina. Selezionare <code>*.*</code> nella tendina in basso a destra per mostrare tutti i file e navigare le cartelle selezionando l'ISO desiderata.<br />
* Inserire il device USB e selezionarlo nel menù a tendina in alto a destra ''Dispositivo''.<br />
* Premere su ''Scrivi'' in basso per iniziare il trasferimento.<br />
<br />
'''NB''': Windows potrebbe presentare una finestra di avviso per le applicazioni che non provengono dallo Store. In tal caso premere su ''Modifica le mie impostazioni'' e quindi scegliere ''Ovunque'' nel primo menù a tendina.<br />
<br />
[[File:Win32DiskManager screen.png|Finestra principale di Win32DiskManager]]<br />
<br />
== Pagine correlate ==<br />
{{Guide<br />
|immagine=oldpc.png<br />
|guida=Trashware<br />
|precedente=<br />
|indice=Trashware<br />
|successiva=<br />
}}<br />
<br />
<br />
[[Category:Officina]]</div>Gbiottihttps://wiki.golem.linux.it/index.php?title=Docker&diff=8766Docker2021-08-31T09:16:19Z<p>Gbiotti: </p>
<hr />
<div>{{Note<br />
|type=attention<br />
|text=Se stai usando Docker per realizzare un servizio al GOLEM, allora dovresti considerare di scambiare quattro chiacchiere col sistemista e di entrare a far parte del gruppo del sistema automatico ''argilla'' su git.<br />
}}<br />
<br />
== Flusso di lavoro ==<br />
Ho un programma e voglio farne un container docker per usarlo nell'infrastruttura GOLEM. Che fare?<br />
<br />
Sono il programmatore:<br />
# Scrivere il Dockerfile per il proprio programma<br />
# Creare l'immagine per il proprio programma<br />
<br />
Sono il sistemista:<br />
# Scrivere il docker-compose.yml per il servizio<br />
# Avviare il servizio<br />
<br />
Segue un esempio di flusso di lavoro per [https://acme.com/software/thttpd/ thttpd].<br />
<br />
== Dockerfile ==<br />
''Dockerfile''<br />
FROM alpine:latest<br />
RUN apk add thttpd<br />
ENTRYPOINT ["thttpd", "-D", "-d", "/html"]<br />
<br />
== Creare l'immagine e taggarla ==<br />
docker build --tag hub.docker.golem.linux.it/thttpd:latest .<br />
<br />
== Creare il servizio ==<br />
Il servizio si chiamerà ''webserver''.<br />
''docker-compose.yml''<br />
version: "3.3"<br />
services:<br />
webserver:<br />
image: hub.docker.golem.linux.it/thttpd:latest<br />
restart: unless-stopped<br />
ports:<br />
- "8000:80"<br />
volumes:<br />
- /srv/webserver:/html<br />
<br />
dove:<br />
* ''webserver'' è il nome del servizio, usato da docker-compose per nominare i container automaticamente<br />
* ''image'' immagine docker, con tanto di dominio del repository<br />
* ''ports'' sono espresse nella forma ''host:container''<br />
* ''volumes'': usare sempre una cartella nella forma ''/srv/$nome_servizio'', per coerenza <br />
<br />
== Avvio ==<br />
docker-compose up<br />
(eventualmente usare anche ''-d'' per mandarlo in background)<br />
<br />
== Pushare immagine ==<br />
Sul repository privato:<br />
docker push hub.docker.golem.linux.it/thttpd:latest<br />
<br />
Ma se non l'hai mai fatto, la prima volta il repository richiede l'autenticazione:<br />
docker login hub.docker.golem.linux.it<br />
<br />
== Dove mette i volumi Docker? ==<br />
Se non si impostano i volumi del conatiner Docker li crea automaticamente in un "suo" percorso.<br />
Per sapere dove il container mette i nostri dati si possono utilizzare questi comandi:<br />
<br />
Mostrare l'elenco dei container in esecuzione. Da questo elenco si prende l'ID del container che ci interessa.<br />
docker ps<br />
<br />
Mostrare l'elenco dei volumi del container. Il risultato sarà in formato JSON. Il parametro ''ID'' è quello che abbiamo preso dal <code>docker ps</code><br />
docker inspect -f '{{ .Mounts }}' <ID><br />
<br />
E' possibile usare il comando<br />
docker inspect <ID><br />
per ottenere l'elenco completo (sempre in formato JSON) delle informazioni di configurazione del container. Tra queste, la lista dei volumi e dei relativi mount point identificate da <code>"Mounts":</code><br />
<br />
Al posto del parametro ''ID'' e' sepre possibile utilizzare il nome assegnato al container, nome che è anch'esso reperibile dall'elenco ottenuto con <code>docker ps</code>.<br />
<br />
<br />
[[Category:Howto]]</div>Gbiottihttps://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&diff=8764Ore del GOLEM2021-07-06T21:33:18Z<p>Gbiotti: Aggiunta serata sui dotfiles</p>
<hr />
<div>{{Note<br />
|type=info<br />
|text=Questa pagina raccoglie gli interventi passati. Se stai cercando gli eventi futuri, consulta il '''calendario''' delle serate nella home page, o dai un'occhiata a [[Progetti]].<br />
}}<br />
<br />
L'Ora del GOLEM è una serata a tema in cui si discute, più o meno formalmente, su qualunque cosa riguardi l'open source, dagli argomenti strettamente tecnici e pratici, alla "consapevolizzazione" e alla valutazione dell'uso dei vari strumenti. A volte i soci più smanettoni preparano delle piccole presentazioni su qualche nuova tecnologia, o qualche tema interessante; altre volte ci si arricchisce facendo brainstorming tutti insieme e si impara a utilizzarla. Spesso, le discussioni di queste serate, vengono tradotte in dei veri e propri [[Howto | how-to]].<br />
<br />
Qui puoi trovare tutte le serate passate (in ordine cronologico inverso), con riferimenti a materiale e/o guide prodotte.<br />
<br />
== 2021 ==<br />
{{OraDelGolem<br />
|nome=29 giugno: dotfiles - Gestione ragionata dei files di configurazione<br />
|autore=[[Utente:Gbiotti]]<br />
|immagine=<br />
|dimensione_img=<br />
|descrizione=Serata sulla gestione con versioning dei dotfiles di Linux<br />
|presentazione=<br />
|documenti=<br />
|video=<br />
|altro=[https://git.golem.linux.it/gbiotti/sdf_appunti Appunti della serata] <br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=16 marzo: Blockchain - Il Free Software incontra la finanza<br />
|autore=[[Utente:Linux-Lover]]<br />
|immagine=<br />
|dimensione_img=<br />
|descrizione=Serata introduttiva e divulgativa sulle blockchain: cosa sono e perché sono importanti per la comunità del software libero.<br />
|presentazione=<br />
|documenti=<br />
|video=<br />
|altro=in caricamento<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=9 marzo: Due chiacchiere su buffer overflow<br />
|autore=luigix25<br />
|immagine=Stack-example.png<br />
|dimensione_img=<br />
|descrizione=Due chiacchiere informali sui buffer overflow e sulle tecniche di mitigrazione.<br />
|presentazione=https://cloud.golem.linux.it/s/WkWf7XiNPPn7mqn<br />
|documenti=<br />
|video=https://archivio.golem.linux.it/OreDelGolem/20210309-luigix25-Buffer-Overflow.mp4<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=27 gennaio: Programmare Arduino like a pro<br />
|autore=[[Utente:Giulio]]<br />
|immagine=Arduino-board.jpg<br />
|dimensione_img=<br />
|descrizione=L'ecosistema Arduino consente di sviluppare semplici applicazioni in modo rapido e con conoscenze di programmazione non necessariamente approfondite. Ormai, volenti o nolenti tutti abbiamo una scheda Arduino in casa. Questo sarà il punto di partenza della serata, dove andremo a sviscerare come, partendo da uno sketch, si arrivi al codice macchina eseguito dal microcontrollore. Faremo la conoscenza dei varii strumenti della toolchain GCC: makefile, compilatori ed assemblatori, per comprendere meglio cosa avviene sotto il cofano dell'Arduino IDE e come sfruttarli per scrivere del codice "fuori dagli schemi".<br />
|presentazione=https://golem.linux.it/cloud/index.php/s/5M2SisqZmJ7PQXM<br />
|documenti=<br />
|video=https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte1.mp4<br />
|altro=[https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte2.mp4 Video sessione di approfondimento sul multitasking] [https://video.linux.it/videos/watch/f654157f-a4b6-4ebb-aaee-932b04bda1af Mirror1] [https://video.linux.it/videos/watch/e63d744f-2444-41c5-b852-fa79cedefde1 Mirror2]<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=20 gennaio: Lineage OS: come installarla e... perché<br />
|autore=Filippo Micheletti, [[Utente:Giomba]], Marco Castrovilli ([http://www.restartersfirenze.it/ Restarters Firenze])<br />
|immagine=<br />
|dimensione_img=<br />
|descrizione=Tutti hanno uno smartphone, ma pochi sono coscienti del livello di pervasività che questo dispositivo ha nelle nostre vite, e sulla mancanza di controllo che abbiamo sui dati personali che lo attraversano. Conoscere come funziona è indispensabile per fare scelte consapevoli sull’uso che ne facciamo, e scoprire sistemi operativi e applicazioni alternative è uno dei primi passi per riprendere il controllo sui questi dati. Durante la serata, ci domanderemo perché usare LineageOS, quali programmi e applicazioni libere e rispettose possiamo usare, in alternativa ai soliti noti, come si installa questo sistema su uno smartphone, quali sono difficoltà, problemi e possibili rinunce che possiamo incontrare.<br />
|presentazione=https://golem.linux.it/cloud/index.php/s/39dTAZxdpWfzHSp<br />
|documenti=https://golem.linux.it/cloud/index.php/s/E9ZCm9fjFnq7egG<br />
|video=https://archivio.golem.linux.it/OreDelGolem/20210120-lugtoscana-lineageos.mp4<br />
|altro=<br />
}}<br />
<br />
== 2020 ==<br />
<br />
{{OraDelGolem<br />
|nome=7 ottobre: Linux per radioamatori<br />
|autore=[[Utente:Giulio]] [[Utente:Lucam]]<br />
|immagine=Tux-radio.png<br />
|dimensione_img=<br />
|descrizione=Introduzione a Linux e alle sue applicazioni in ambito radioamatoriale. Quali sono i programmi per fare radio su Linux? Come posso attivare un nodo webSDR?<br />
|presentazione=https://golem.linux.it/cloud/index.php/s/8fLXfdwMwEpxxCq<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20201007-iu5mo-linuxradio.mp4<br />
|altro=<br />
}}<br />
<br />
<br />
{{OraDelGolem<br />
|nome=7 luglio: Flatcam<br />
|autore=[[Utente:Glomant]]<br />
|immagine=Flatcam.png<br />
|dimensione_img=<br />
|descrizione=Flatcam è un software che, a partire da file gerber o gcode, permette di passare all’incisione e all’intaglio vero e proprio del circuito tramite una macchina a controllo numerico. Al termine della serata, il prodotto potrà essere inciso tramite una CNC, come quella che abbiamo in officina, come vedremo nella serata successiva.<br />
|presentazione=<br />
|documenti=https://golem.linux.it/cloud/index.php/s/RZZEfzF8f7C7CMA<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20200708-glomant-flatcam.mp4<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=30 giugno: KiCAD 2/2<br />
|autore=[[Utente:Giulio]]<br />
|immagine=Kicad.png<br />
|dimensione_img=<br />
|descrizione=Seconda serata sull'uso del software di disegno circuiti stampati: disegnato lo schema sarà necessario realizzare il layout, la controparte digitale del circuito stampato. Al termine della serata, il prodotto potrà essere mandato in stampa presso aziende specializzate tramite processi industriali, oppure potrà essere utilizzato la serata seguente. Saranno approfondite alcune funzioni supplementari di KiCAD, come la gestione della lista componenti e delle librerie.<br />
|presentazione=<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20200630-giuliof-kicad.mp4<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=23 giugno: Scrivere un emulatore per il Commodore 64<br />
|autore=luigix25<br />
|immagine=c64-startup-screen.jpg<br />
|dimensione_img=<br />
|descrizione=<br />
|presentazione=<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20200623-luigi-emulatore-c64.mp4<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=16 giugno: KiCAD 1/2<br />
|autore=[[Utente:Giulio]]<br />
|immagine=Kicad.png<br />
|dimensione_img=<br />
|descrizione=Prima serata sull'uso del software di disegno circuiti stampati: Si tratta di un software opensource di Electronic Design Automation, ossia di progettazione assistita al computer per circuiti elettronici. KiCAD permette di progettare ogni fase della realizzazione del circuito, dalla sua prima bozza, alla scelta e al posizionamento dei componenti, allo sbroglio delle piste, alla produzione dei file per lo stampaggio vero e proprio. In questo primo incontro si vedrà perché e come disegnare uno schema elettronico al computer, come importare i componenti, come associare i simboli grafici agli oggetti fisici.<br />
|presentazione=<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20200616-giuliof-kicad.mp4<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=26 maggio: Indipendenza Digitale?<br />
|autore=[[Utente:Giomba]]<br />
|immagine=<br />
|dimensione_img=<br />
|descrizione=Guida pratica per riappropriarsi della propria indipendenza e identità digitale. Quali compromessi possiamo fare nell'uso del software sul nostro computer e sul nostro smartphone?<br />
|presentazione=<br />
|documenti=https://golem.linux.it/cloud/index.php/s/WMDixxEjNtEadAj<br />
|video=<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=12 maggio: Due parole su LaTeX<br />
|autore=[[Utente:Giulio]]<br />
|immagine=<br />
|dimensione_img=<br />
|descrizione=Introduzione al software di impaginazione LaTeX<br />
|presentazione=<br />
|documenti=<br />
|video=<br />
|altro=''Presentazione in caricamento''<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=14 aprile: Riconoscimento oggetti con OpenCV<br />
|autore=[[Utente:Linux-Lover]]<br />
|immagine=<br />
|dimensione_img=<br />
|descrizione=<br />
|presentazione=https://golem.linux.it/cloud/index.php/s/E9FxLxM5AEopZyJ<br />
|documenti=<br />
|video=<br />
|altro=<br />
}}<br />
<br />
== 2019 ==<br />
<br />
{{OraDelGolem<br />
|nome=19 febbraio: 128 bit di IPv6<br />
|autore=[[Utente:giomba]]<br />
|immagine=<br />
|dimensione_img=<br />
|descrizione=Cos’è un indirizzo di rete? IPv4 vs IPv6. Perché IPv6? Come si legge un IPv6? Come posso realizzare una rete IPv6? Cosa sono NDP e SLAAC? Come ottenere IPv6? [[IPv6 @ GOLEM]]<br />
|presentazione=https://golem.linux.it/cloud/index.php/s/pZcSHge3bBiQ37m<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20190219-giomba-ipv6.mp4<br />
|altro=<br />
}}<br />
<br />
<!-- TODO: aggiungere video e presentazione --><br />
{{OraDelGolem<br />
|nome=8 gennaio: Deepen Meltdown<br />
|autore=[[Utente:Raistlin]]<br />
|immagine=Meltdown-spectre-logo.png<br />
|dimensione_img=<br />
|descrizione=Aggiornamenti sui bug che hanno recentemente afflitto le CPU<br />
|presentazione=<br />
|documenti=<br />
|video=<br />
|altro=<br />
}}<br />
<br />
== 2018 ==<br />
<br />
{{OraDelGolem<br />
|nome=16 Ottobre: NextCloud<br />
|autore=Mattia & Carmelo<br />
|immagine=Nextcloud-logo.png<br />
|dimensione_img=150px<br />
|descrizione=Cos'è un sistema di clouding. Cloud commerciale vs. Nextcloud. Come configurare un cloud casalingo su PC o Raspberry.<br />
|presentazione=<br />
|documenti=<br />
|video=<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=2 Ottobre: Python & grafici<br />
|autore=giuliof<br />
|immagine=Python-logo.png<br />
|dimensione_img=150px<br />
|descrizione=Approfondimento sulle librerie <code>MatPlotLib</code> e <code>NumPy</code>: creare e abbellire grafici, tracciare funzioni, importare e visualizzare dati da CSV, grafici professionali in LaTeX. ''To be continued...''<br />
|presentazione=https://golem.linux.it/cloud/index.php/s/wteTWdnflCwWOXa/download<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20181002-giuliof-python-grafici.mp4<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=12 Settembre: PC4Beginners<br />
|autore=jacopo<br />
|immagine=<br />
|dimensione_img=<br />
|descrizione=Serata introduttiva all'informatica: cenni storici sul computer, cos'è l'hardware, cos'è il software, quali sono i componenti di un PC.<br />
|presentazione=https://golem.linux.it/cloud/index.php/s/HoTfB2ilOWHl1Aq/download<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20180918-jacopo-PC4Beginners.mp4<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=3 Luglio: Python 303<br />
|autore=giuliof<br />
|immagine=Python-logo.png<br />
|dimensione_img=150px<br />
|descrizione=Avanziamo di livello e parliamo di: liste, dizionari, lettura/scrittura su file, accenno alle librerie e confronto Python2 vs Python3. ''To be continued...''<br />
|presentazione=https://golem.linux.it/cloud/index.php/s/2gbp1UpORawCUkF/download<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20180703-giuliof-python303.mp4<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=19 Giugno: Python 101 x2<br />
|autore=giuliof<br />
|immagine=Python-logo.png<br />
|dimensione_img=150px<br />
|descrizione=Basi sul linguaggio di programmazione Python: esercizi con ''if...else'', funzioni, cicli ''while'' e ''for'', stringhe e operazioni su stringhe. ''To be continued...''<br />
|presentazione=https://golem.linux.it/cloud/index.php/s/Qq99P5gwkno7H1q/download<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20180619-giuliof-python101x2.mp4<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=12 Giugno: Technical deep dive: Meltdown + Spectre<br />
|autore=Dario<br />
|immagine=Meltdown-spectre-logo.png<br />
|dimensione_img=250px<br />
|descrizione=Da una panoramica sull'architettura e sul funzionamento dei processori moderni (architettura superscalare, memorie cache, TLB, memoria virtuale) arriviamo a capire come queste vulnerabilità scoperte di recente denominate ''Meltdown'' e ''Spectre'' (maggiori [https://meltdownattack.com info]) potrebbero mettere a rischio la sicurezza dell'utente.<br />
|presentazione=<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20180612-Meltdown-Spectre-Dario.mp4<br />
|altro= concetti introduttivi ([https://en.wikipedia.org/wiki/Virtual_address_space Virtual Memory],<br />
[https://wiki.osdev.org/Memory_management gestione della memoria],<br />
esecuzione speculativa [https://en.wikipedia.org/wiki/Speculative_execution] [https://en.wikipedia.org/wiki/Branch_predictor],<br />
[https://en.wikipedia.org/wiki/Instruction_pipelining pipeline],<br />
[https://en.wikipedia.org/wiki/Tomasulo_algorithm algoritmo di Tomasulo],<br />
memoria cache [https://en.wikipedia.org/wiki/CPU_cache] [https://www.extremetech.com/extreme/188776-how-l1-and-l2-cpu-caches-work-and-why-theyre-an-essential-part-of-modern-chips],<br />
[https://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB],<br />
[https://en.wikipedia.org/wiki/Side-channel_attack side channel attack])<br />
<br/><br />
esempi di codice che sfrutta le vulnerabilità ([https://www.raspberrypi.org/blog/why-raspberry-pi-isnt-vulnerable-to-spectre-or-meltdown/], [https://medium.com/@mattklein123/meltdown-spectre-explained-6bc8634cc0c2])<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=5 Giugno: Buildroot: distrubuzione personalizzata<br />
|autore=$pookyh<br />
|immagine=Logog-b.png<br />
|dimensione_img=80px<br />
|descrizione=[https://buildroot.org Buildroot] è un tool che permette di generare una distribuzione Linux essenziale cucita su misura per le proprie esigenze.<br />
|presentazione=<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20180605-spooky-buildroot.mp4<br />
|altro=<br />
}}<br />
<br />
{{OraDelGolem<br />
|nome=22 Maggio: Python - introduzione e basi<br />
|autore=giuliof<br />
|immagine=Python-logo.png<br />
|dimensione_img=150px<br />
|descrizione=Basi sul linguaggio di programmazione Python: esempi applicativi, installazione, variabili, istruzioni di stampa a schermo, blocchi condizionali. (Il video è parziale'''!''')<br />
|presentazione=https://golem.linux.it/cloud/index.php/s/IroTEn8ZJhXTaGg/download<br />
|documenti=<br />
|video=https://golem.linux.it/pubblici/OreDelGolem/20180519-GiulioF-Python101x1.mp4<br />
|altro=<br />
}}<br />
<br />
=== 17 Aprile: R: software di analisi statistica ===<br />
Basi sul linguaggio di programmazione R, applicazioni alla statistica ed esempi.<br />
<br />
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/mY2GIXC1dIZPKpu Scarica] files (script utilizzati, lista comandi...) e presentazioni della serata.<br />
<br />
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180417-R-Frascati-Giorgetti.mp4 Guarda] o scarica il video della serata!<br />
<br />
=== 10 Aprile: Bash e scripting ===<br />
Panoramica sui comandi utili e basi di scripting per automatizzare le attività.<br />
<br />
Consulta il prontuario sulla [[Linea_di_comando | linea di comando]].<br />
<br />
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180410-Bash-Giomba.mp4 Guarda] o scarica il video della serata!<br />
<br />
''by Giomba''<br />
<br />
=== 23 Gennaio: Sviluppo di un'app per Android ===<br />
Uno sguardo d'insieme sulla realizzazione di applicazioni per il proprio smartphone con [https://developer.android.com/studio/index.html AndroidStudio], iniziando con alcuni esempi.<br />
<br />
[[File:Icona_presentazione.png|40px|slides]] [https://golem.linux.it/cloud/index.php/s/pGoCGHZKpo7C04f/download Presentazione] della serata.<br />
<br />
''by Omid''<br />
<br />
=== 16 Gennaio: Impariamo KiCad ===<br />
Come utilizzare il software [http://kicad-pcb.org KiCad] per il disegno di schemi e la realizzazione di circuiti stampati.<br />
<br />
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/HLl9ZxreCLQUCH8 Scarica] i file prodotti durante la serata.<br />
<br />
''by Stefano''<br />
<br />
== 2017 ==<br />
=== 12 Dicembre: Arduino avr-gcc ===<br />
Programmazione a "basso livello" in C della scheda Arduino, bypassando l'IDE, per sfruttare a pieno le risorse del microcontrollore.<br />
<br />
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20171212-AVRgcc-Giulio.mp4 Guarda] o scarica il video della serata!<br />
<br />
''by [[Utente:Giulio | Giulio]]''<br />
<br />
=== 21 Novembre: Git ===<br />
Un sistema di versionamento alla portata di tutti: come gestire i propri progetti al computer, tenere traccia dello sviluppo e apportare modifiche senza rischiare di danneggiare il lavoro precedente. Consulta il nostro [[Git | prontuario]] di riferimento.<br />
<br />
[[File:Icona_presentazione.png|40px|slides]] [https://golem.linux.it/cloud/index.php/s/VL27wucLMsbCEDP Presentazione] della serata<br />
<br />
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20171121-Git-Lucam.mp4 Video] della serata<br />
<br />
''by [[Utente:Lucam | Lucam]]''<br />
<br />
=== 7 Novembre: Arduino e Wireless ===<br />
Domotica: come integrare il proprio progetto di elettronica con Arduino con la rete WiFi di casa.<br />
<br />
[[File:Icona_presentazione.png|40px|slides]] [https://golem.linux.it/cloud/index.php/s/fp7PgxzcdLRmKlx Presentazioni] della serata.<br />
<br />
''by [[Utente:Giulio | Giulio]]''<br />
<br />
=== 17 ottobre: Introduzione a Wordpress ===<br />
Procedure base e consigli per costruire un semplice sito dinamico con Wordpress.<br />
<br />
''by Pinpas''<br />
<br />
=== 3 Ottobre: Sviluppo HTML+CSS ===<br />
I rudimenti per scrivere un sito statico. <br />
<br />
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/uIz3QwcymtgTeNN Scarica] i file della serata!<br />
<br />
''by Francesco''<br />
<br />
=== 19 Settembre: Installazione Wordpress ===<br />
Serata pratica di gruppo sull'installazione del CMS [[Wordpress]] e in generale di un applicativo web su piattaforma LAMP.<br />
<br />
''by [[Utente:giomba | giomba]]''<br />
<br />
=== 5 Settembre: Il Terminale Unix/Linux ===<br />
Introduzione ai concetti e ai comandi più utilizzati per gestire il sistema da terminale. Consulta il nostro How-To sul [[Linea_di_comando | terminale]].<br />
<br />
''by [[Utente:giomba | giomba]]''<br />
<br />
<br />
[[Category:Officina]]</div>Gbiotti