Come unire o dividere documenti PDF in Windows 10

A volte capita di dover modificare la struttura dei documenti PDF. Spesso mi capita di dover eliminare della pagine da un documento oppure di unirne diversi un uno solo per comodità.

Esistono molti programmi per svolgere queste funzioni, sia online che offline, io mi trovo molto bene con PDF Arranger. Si tratta di una interfaccia grafica scritta in Python di pikepdf che è una libreria piuttosto potente per la manipolazione dei documenti PDF ed è scritta in Python e C++.

Di PDF Arranger esiste anche la versione già compilata per Windows 10 e -quello che mi piace di più- ne esiste anche una versione portabile che non richiede installazione.

Possiamo scompattare il file .ZIP in una cartella a nostro piacimento (io ad esempio sotto la cartella “Programmi” ho creato la cartella “portables” e lì la cartella “pdfarranger-1.7.1”) e lanciare pdfarranger.exe.

Per comodità ho creato anche un link nel Menù Start all’eseguibile così è più semplice l’esecuzione.

Quando vorremo eliminare tutto basterà cancellare la cartella “pdfarranger-1.7.1” (che io ho creato in “Programmi/portables”) ed sarà come se non avessimo mai installato nulla. 🙂

Aggiungere una finestra di conferma quando si usano le select multiple nella SQLFORM.grid di Web2py

La SQLFORM.grid di Web2py è una funzionalità davvero potente, permette di avere una pagina di gestione dei record di una tabella già pronta e funzionante.

Permette anche di aggiungere un check field ad ogni riga per poter eseguire, in una sola operazione, una operazione su tutti i record selezionati. Un caso tipico è la cancellazione.

Dato che la cancellazione non è una operazione reversibile però è bene chiedere una conferma aggiuntiva prima di eseguirla per essere sicuri delle intenzioni dell’utilizzatore.

Questa funzionalità purtroppo non è prevista.

Pubblico qui come ho realizzato io questa funzione visto che non ho trovato in rete soluzioni già realizzate.

Continua a leggere Aggiungere una finestra di conferma quando si usano le select multiple nella SQLFORM.grid di Web2py

Come automatizzare le operazioni di un programma Windows 10

Quando usavo Linux ho sempre tenuto diversi widget attivi per monitorare le attività del computer.

Anche in Windows 10 esiste qualcosa di simile, si chiama Gestione Attività, ma se lo lanciamo all’avvio non lo si riesce a far scomparire dalla barra delle applicazioni attive. Per farlo scomparire bisogna aprirlo e poi ridurlo ad icona (dopo aver impostato questo comportamento nelle configurazioni).

Inutile dire che la cosa è abbastanza fastidiosa.

Per il risolvere il problema ho usato AutoHotKey (che uso anche per impostare le scorciatoie per le lettere accentate maiuscole e i caratteri speciali).

Mi è bastato aggiungere le righe seguenti allo script di configurazione eseguito all’avvio:

WinWait, Gestione attività
Sleep, 300
WinRestore, Gestione attività
Sleep, 300
WinMinimize, Gestione attività

Se ti serve qualche indicazione su come eseguire lo script di configurazione all’avvio la puoi trovare nel post sulle lettere accentate e i caratteri speciali.

Disabilitare il plugin All In One SEO di WordPress in una singola pagina

Per aggiungere la sezione link a questo sito ho usato due plugin che mi hanno permesso di lavorare sempre dalla dashboard senza bisogno di scrivere nuovi plugin (trovi i dettagli in questo post).

Con il passaggio alla versione 4 del plugin All In One SEO, però, è stata eliminata la possibilità di poterne disabilitare le funzioni in una singola pagina (che io usavo per modificare titolo e proprietà dell’OpenGraph di Facebook) e, in più, è stata anche modificata la riscrittura dei titoli delle pagine.

Queste modifiche hanno reso non più completamente funzionante la mia sezione link ed ecco dunque le modifiche che ho dovuto fare.

Continua a leggere Disabilitare il plugin All In One SEO di WordPress in una singola pagina

Incorporare un sito Odoo 12 in un iframe di un sito esterno

In un gestionale che ho scritto in Web2py incorporo alcune pagine di un’installazione di Odoo 12 che risiede su un server diverso.

Le recenti politiche di sicurezza dei browser hanno reso impossibile questo comportamento a meno di una autorizzazione esplicita del sito incorporato.

Il problema è che né Odoo 12 né la versione installata del server Nginx che uso come reverse proxy gestiscono questa possibilità.

Come fare?

Continua a leggere Incorporare un sito Odoo 12 in un iframe di un sito esterno

Come programmare una scheda ESP8266 NodeMCU con l’IDE di Arduino

Per prima cosa bisogna configurare l’IDE di Arduino.
Andiamo in

File > Impostazioni

e nel campo

“URL aggiuntive per il Gestore schede”

aggiungiamo:

http://arduino.esp8266.com/stable/package_esp8266com_index.json.

Se sono già presenti altri URL usiamo la virgola come separatore.

Poi andiamo in

Strumenti > Scheda > Gestore schede

e installiamo il modulo esp8266 di ESP8266 Community (se ce ne sono molte il campo di ricerca permette di filtrare i risultati).

Ora possiamo tornare in

Strumenti > Scheda

e poter scegliere “NodeMCU 1.0 (ESP-12E Module)“.

Colleghiamo la scheda al computer e impostiamo la corretta porta seriale da

Strumenti > Porta (l’elenco dipenderà dal vostro computer).

Se a questo punto non vedi nessuna porta seriale e stai usando Windows 10 potresti avere bisogno di installare il driver del convertitore dei segnali TTL/USB che è installato sulla scheda.

Ora siamo pronti per caricare il primo programma!

Nel physical computing la classica stampa della stringa “Hello World” è sostituita dal lampeggio del LED che di solito si trova a bordo della scheda.

Andiamo dunque in “File > Esempi > ESP8266 > Blink”. Il programma caricato sarà simile a questo:

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
  // but actually the LED is on; this is because
  // it is active low on the ESP-01)
  delay(1000);                      // Wait for a second
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
  delay(2000);                      // Wait for two seconds (to demonstrate the active low LED)
}

Successivamente possiamo eseguire il comando “Carica”. Ci sarà la fase di compilazione e poi quella vera e propria di caricamento, segnalata da brevi lampeggi del led vicino all’antenna della scheda.

Terminato il caricamento inizierà l’esecuzione del programma con un lampeggio più lento del LED.
Possiamo anche provare a variare i valori indicati nelle due istruzioni delay() per modificare il tipo di lampeggio.

Ora siamo pronti per passare a programmi più complessi! 🙂

Rendere accessibile da Internet un server connesso tramite protocollo NAT o firewall con IP dinamico

Può essere necessario dover accedere ad un server che sia collegato ad Internet ma che non disponga di un indirizzo IP pubblico e statico. Potrebbe avere un indirizzo IP dinamico oppure potrebbe capitare di dover utilizzare un router per telefonia mobile che spesso usa il protocollo NAT, condividendo quindi lo stesso indirizzo IP con altri router.

Se abbiamo a disposizione un secondo server con indirizzo IP pubblico e statico lo possiamo usare come ponte per collegarci al primo server.

Continua a leggere Rendere accessibile da Internet un server connesso tramite protocollo NAT o firewall con IP dinamico

Scrivere un plugin WordPress direttamente dalla Dashboard andando subito al nòcciolo e saltando tutte le parti noiose

Aggiornamento del 29/01/2021: i dettagli sono prima della conclusione.

Volevo aggiungere una sezione link a questo sito per archiviare le notizie interessanti che incontro in giro per la Rete e per avere un unico indirizzo da condividere su Facebook e Linkedin.

Potevo installare un plugin già pronto, ma avrei dovuto cercarne e trovarne uno adatto, oppure potevo scriverne uno io, ma avrei dovuto preparare la struttura di cartelle e file necessari per il codice che spesso contiene ripetizioni di blocchi simili {chi lo ha già fatto sa di cosa sto parlando ;-)}.
Entrambe le soluzioni hanno dunque qualche punto debole.

Ho deciso quindi di provare ad usare i plugin Pods e Code Snippets per prendere il meglio da ciascuna delle due opzioni precedenti: ottenere un plugin che faccia esattamente quello che mi serve concentrandomi solo sul codice che implementa il comportamento del modulo.

Continua a leggere Scrivere un plugin WordPress direttamente dalla Dashboard andando subito al nòcciolo e saltando tutte le parti noiose