domenica, 19 Gennaio 2025

[moodle] Cambiare icona (favicon) del sito

A volte le operazioni più banali risultano le più ostiche. Per cambiare la favicon di un sito fatto con Moodle è inutile arrovellarsi sul panello di controllo. Bisogna intervenire direttamente sul FTP.

Per farlo troviamo dove è posizionato il nostro tema e cerchiamo la cartella pix, per esempio:

/httpdocs/theme/nome_tema/pix

Una volta dentro sostituiamo il file favicon.ico con la nostra nuova icona.

Adesso torniamo nel panello di controllo di Moodle e andiamo su:

Dashboard > Amministrazione del sito > Aspetto > Temi > Impostazioni tema

Qui selezioniamo, qualora non sia già selezionata, la modalità Modalità Theme designer (themedesignermode) e salviamo. Aggiorniamo il sito e verifichiamo che sia comparsa la nuova icona. Eventualmente per aggiornare il sito premiamo SHIFT+F5 (se stiamo usando Chrome)

Fatto ciò dovremmo vedere la nuova icona, disattiviamo la Modalità Theme designer e salviamo di nuovo.

L’icona è stata modificata.

[risolto] Google Chrome con tutti i caratteri in corsivo

Problema: I caratteri predefiniti in Google Chrome appaiono tutti in corsivo, sia nelle impostazioni che in tutti i servizi di Google come Google Calendar, Google Drive, Google Keep ecc.

Soluzione: Installare tutti i caratteri predefiniti che utilizza Chrome, nel mio caso il carattere Roboto

Dopo l’ultimo aggiornamento improvvisamente Chrome ha iniziato a mostrare ovunque dei fastidiosissimi caratteri in corsivo come in questa pagina:

Per risolvere il problema è sufficiente cliccare col destro sopra una qualunque delle parti di testo e scegliere ispeziona.

A questo punto si aprirà di fianco (oppure in basso) una finestra simile a questa:

Individuato un pezzo di testo [1] cerca nella finestra sottostante il punto dove è definito il carattere utilizzato, tipicamente per il tag html [2]. Nel mio caso il primo font utilizzato è Roboto.

In Windows andando su Pannello di controllo > Aspetto e personalizzazione > Caratteri trovare il font utilizzato. Probabilmente potrai notare che manca la versione normale, chiamata spesso anche Regular o Normal. Nel caso di Roboto a me mancava la versione Roboto-Regular.

Per risolvere il problema è stato sufficiente scaricarla da qui: https://github.com/google/roboto

Una volta scaricato il file ti basterà scompattarlo e raggiungere la cartella con tutti i file *.ttf [1] del carattere, selezionarli, cliccarci sopra col destro e scegliere installa [2].

Se hai fatto tutto correttamente puoi riavviare Chrome e dovresti vedere tornato tutto normale.

[virtualbox] Errore E_FAIL (0x80004005)

Problema: Risulta impossibile avviare qualunque macchina virtuale e viene mostrato un errore del tipo Errore E_FAIL (0x80004005)

Soluzione: Disinstallare VirtualBox e reinstallarlo da capo

A qualcuno potrà far sorridere che la soluzione sia così drammatica, ma non sembra esserci altro modo. Anche cercando online pare che nessuno abbia trovato un’altra soluzione soddisfacente. Ho anche provato a “riparare” VirtualBox, utilizzando il suo stesso installer, ma la situazione è addirittura peggiorata, dal momento che sono spariti tutti i collegamenti dal menu Start.

A quel punto ho deciso di reinstallare da zero il programma. Per farlo è sufficiente avviare una nuova installazione e scegliere l’opzione Rimuovi.

Dopodiché la rilanciamo per l’installazione pulita. Niente timore per le configurazioni fino a quel momento.

Se disinstalliamo VirtualBox in questo modo, senza fare ulteriori pulizie, e lo reinstalliamo nella medesima posizione, tutte le configurazioni personalizzate dovrebbero essersi salvate.

L’errore si era presentato a seguito di un’interruzione improvvisa di VirtualBox, causata da un fantastico aggiornamento forzato di Windows 10!

[apps script] Aggiungere un nuovo foglio a Spreadsheet controllando quelli esistenti

Vediamo come costruire una funzione che ci permetta di creare da apps script un nuovo foglio su spreadsheet ed aggiungerlo a quelli esistenti.

Notiamo che per prendere il riferimento alla cartella esistente utilizziamo:

Il nome del foglio lo vogliamo gestire nel modo seguente: se il nome che stiamo cercando di aggiungere esiste già, allora posponiamo al nome un contatore numerico scritto come (1), (2)… (n). In pratica se esiste già un foglio chiamato Primo Foglio, allora il foglio aggiunto sarà Primo Foglio (1), se esistono entrambi sarà Primo Foglio (2) ecc.

Infine restituiamo il riferimento al foglio appena creato con:

 

[apps script] Creiamo una funzione personalizzata che esegua la somma sull’intervallo di uno Spreadsheet

Oggi vediamo come creare una funzione per Spreadsheet con Google Apps Script che permetta di sommare tutti gli elementi di un intervallo passato per argomento, al pari della funzione SUM().

Faccio notare che abbiamo usato parseFloat() su tutti i valori, in modo che se venissero passati valori non numeri la funzione restituirebbe #NUM!.

Una volta inserita la funzione nello script possiamo testarla nel modo seguente:

[apps script] Inviare tramite Gmail un’email ad un elenco di contatti in Spreadsheet

Immaginiamo di avere in Spreadsheet un elenco di indirizzi email a cui vogliamo inviare un messaggio personalizzato.

A tale scopo creiamo un nuovo file con un foglio contenente degli indirizzi nel modo seguente:

Adesso creiamo un bottone al quale collegare lo script che andremo a comporre successivamente. Per aggiungere un pulsante nel foglio di calcolo dobbiamo usare un’immagine, a differenza di quanto accadeva in Excel dove si possono inserire pulsanti da interfaccia. All’immagine assoceremo poi uno script.

Per aggiungere un’immagine andiamo su Inserisci > Immagine…

Prendiamo un’immagine dal nostro computer oppure cerchiamola su Google. Dovremmo arrivare ad una situazione come questa:

A questo punto andiamo su Strumenti > Editor di script e aggiungiamo il nostro script.

Con GmailApp.sendEmail() invieremo l’email utilizzando la nostra casella di posta, mentre con Browser.msgBox() lanceremo un messaggio di conferma delle email inviate.

Fatto questo torniamo nello spreadsheet e clicchiamo col destro sull’immagine. Vedremo comparire in alto a destra dei puntini, clicchiamoci sopra per aprire il menù contestuale.

Scegliamo Assegna script… e nella finestra inseriamo il nome della nostra funzione, ovvero InviaEmailAllaLista

Fatto questo possiamo cliccare sul nostro pulsante e testare il nostro nuovo script.

Se abbiamo fatto tutto bene riceveremo un messaggio di conferma.

[javascript] Scrivere righe, colonne e formule su Google Spreadsheet utilizzando Google Apps Script (per esordienti totali)

Oggi voglio proporre un esercizio facile facile su Google Spreadsheet, l’equivalente (si fa per dire!) G Suite a Microsoft Excel.

In Excel è possibile aggiungere macro (o script) ai fogli di calcolo utilizzando VBA, mentre Google ha implementato per il medesimo risultato gli script tramite JavaScript.

Prima di cominciare vediamo il risultato che intendiamo ottenere: creare uno script che generi tre colonne di dati, contenenti rispettivamente una sequenza di ID, un elenco di prodotti pescati casualmente da un vettore, delle quantità casuali; in fondo alla tabella vogliamo scrivere il TOTALE utilizzando una funzione di somma.

Quello di sopra è ciò che vogliamo arrivare a vedere alla fine.

Cominciamo allora subito creando un nuovo foglio, che io ho chiamato test script, poi aggiungiamo uno script andando su Strumenti > Editor di script.

A questo punto si aprirà la schermata degli script dove verrà proposta una funzione base. Cancelliamola e creiamo la nostra funzione in questo modo:

Anzitutto creiamo un oggetto collegato al foglio corrente:

Con getActiveSpreadsheet() prendiamo il riferimento alla cartella di lavoro aperta in questo momento (l’equivalente di Workbook in Excel), mentre con getSheets() prendiamo il vettore di tutti i fogli nella cartella di lavoro.

Puliamo anzitutto il foglio da precedenti contenuti con:

Adesso cambiamo il nome del foglio con:

A questo punto possiamo costruire la nostra funzione per popolare il foglio con i dati come da esempio iniziale. Integrando il tutto dovremmo ottenere qualcosa di simile a questo:

Faccio notare che la somma totale dei prodotti la facciamo con =SUM(C2:C100) che impostiamo nella cella alla riga 101 e colonna 3.

Quando abbiamo fatto tutto premiamo il tasto ESEGUI (play). Se è la prima volta che eseguiamo lo script ci verrà chiesto di autorizzarlo per accedere al foglio di lavoro dal quale siamo partiti. Concediamogli l’autorizzazione.

ATTENZIONE! Comparirà una schermata di avviso come se la connessione non fosse sicura, che ci allerterà che stiamo per eseguire uno script non sicuro, dal momento che è uno script personalizzato da noi e non verificato da Google. Clicchiamo su Avanzate e procediamo.

Se tutto è andato bene avremo eseguito il nostro primo script delle Google Apps Script. 🙂

[wordpress] Fatal error: Class ‘WP_Customize_Section’ not found

Problema: WordPress risulta inaccessibile con un Fatal error: Class 'WP_Customize_Section' not found´ tipicamente localizzato su qualche file del tema

Soluzione: Il problema deriva quasi sicuramente da qualche plugin che cerca di innestarsi nel tema aggiungendo caratteristiche personalizzate. Per risolvere il problema si possono rimuovere tutti i plugin dalla cartella wp-content/plugins, tenendone una copia di backup. Se ricaricando il sito tutto torna normale si possono ricaricare, uno ad uno, i plugin rimossi fino ad individuare quello che provoca l’errore. Una volta individuato rimuoverlo. 

Nel mio caso specifico l’errore è capitato con il plugin Easy Google Fonts. Il plugin, non a caso, tenta di aggiungere funzionalità CSS al tema del sito e questo provoca delle incompatibilità.

Per risolvere il problema è stato sufficiente rimuovere il plugin dalla cartella wp-content/plugins/easy-google-fonts/

Ricordiamoci anche di rimuovere un’eventuale cache e tutti i file annessi, oltre che disabilitarla dal file wp-config.php, affinché non interferisca con la rimozione del plugin e dei codici collegati.

Fatto ciò il sito dovrebbe tornare normalmente operativo.

[mysql] #1093 – Table is specified twice, both as a target for ‘UPDATE’ and as a separate source for data

Questo errore si presenta quando si tenta di aggiornare una tabella prelevando i dati dalla medesima. Per comprendere il problema immaginiamo di avere una tabella come la seguente:

id indirizzo
1 http://indirizzosito.com/?opzione=
2 bianco
3 nero

Adesso supponiamo di volerla modificare in modo tale che il campo indirizzo all’id = 1 venga concatenato come prefisso su tutti gli altri campi indirizzo con id > 1. Quello che vogliamo ottenere è una tabella simile a questa:

id indirizzo
1 http://indirizzosito.com/?opzione=
2 http://indirizzosito.com/?opzione=bianco
3 http://indirizzosito.com/?opzione=nero

Prima di cominciare possiamo generare la tabella di prova con:

Ed inseriamo dentro i dati con:

A questo punto verrebbe spontaneo pensare che si possa utilizzare la seguente query (ATTENZIONE! Questa non funziona!):

Questa query produce però il seguente messaggio di errore:

#1093 – Table ‘t1’ is specified twice, both as a target for ‘UPDATE’ and as a separate source for data

L’errore dipende dal fatto che il database non ci consente di modificare una tabella dalla quale preleviamo contemporaneamente i dati. Possiamo aggirare il problema “ingannando” il database con la seguente modifica:

Faccio notare che a:

Abbiamo sostituito:

In questo modo la tabella viene per prima cosa prelevata e poi utilizzata per i dati dell’UPDATE.