WordPress e l’errore sull’ottimizzazione DB


Quando gli aggiornamenti non sono backward compatibili.

 


Per chi ha un sito WordPress stand alone, la manutenzione dei database è una delle attività che gli competono. Proprio oggi mentre stavo svolgendo questa operazione, sono incappato in una backward compatibility trap.

Praticamente la manutenzione base del db di WordPresse prevede, tra l’altro, la rimozione di tutte le copie dei post creati con le bozze. Ad ogni modifica viene creato un post fantasma, ossia c’è nel db ma non è visibile sul sito. Non avete idea di quanto spazio possono occupare in breve tempo, specialmente se siete di quelli che scrivono i post direttamente in ambiente WordPress, senza creare il post con un tool e pubblicarlo solo quando il post è stato scritto, editato, verificato e confermato.

Nell’esempio parlerò di una installazione monoblog. Per la versione multi blog aggiungerò dei dettagli in coda.

Di norma per pulire le nostre vecchie, ed inutili versioni, le operazioni da fare sono le seguenti:

  1. collegarsi al database
  2. verificare se esistano di questi post
  3. cancellarli
  4. eseguire una ottimizzazione della tabella in questione.

che tradotto in operazioni reali diventano, considerando nel nostro caso che il database di chiami WordPress ed il suffisso alle tabelle sia wp_):

ssh utente@nostroserver
mysql -u utente-del-db-wordpress -p
Password:*******
mysql> use WordPress;

Tutti i record della tabella wp_post che hanno il campo post_type contenente la parola “revision” sono revisioni di un post già pubblicato.

mysql> select count(*) from wp_posts where post_type="revision";

Se la risposta è 

+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

Allora, fortunelli, non avete post fantasma in giro per la tabella, ma se il valore è maggiore di zero, come quasi sicuramente sarà, dovrete cancellarli con :

mysql> delete from wp_posts where post_type="revision";
Query OK, 999 rows affected (0.02 sec)

Chiaramente il 999 è solo un numero indicativo dei record cancellati.

A questo punto eseguiamo l’ottimizazione della tabella in questione

mysq> optimize table wp_post;
+----------------------+----------+----------+-----------------------------------------------------------------+
| Table                | Op       | Msg_type | Msg_text                                                        |
+----------------------+----------+----------+-----------------------------------------------------------------+
| WordPress.wp_posts | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| WordPress.wp_posts | optimize | error    | Invalid default value for 'post_date'                             |
| WordPress.wp_posts | optimize | status   | Operation failed                                                  |
+----------------------+----------+----------+-----------------------------------------------------------------+

Che diavolo è successo? Principalmente due cose: una che non ci crea problemi l’altra invece si!!

La prima riga ci segnala che la tabella wp_post non supporta l’ottimizzazione. Questo va bene: la tabella wp_post è stata creata quasi certamente in formato InnoDB ed optimize non funziona, se non sulle tabelle create in formato MyISAM.

Se invochiamo optimize table in MySQL su una tavola InnoDB riceveremo questa notifica, e MySQL da solo procederà ad una operazione, alternativa, per ottenere lo stesso risultato, ossia, creare una nuova tabella, caricarci i dati dalla vecchia wp_posts e cancellare la vecchia. In questo modo viene eseguita l’ottimizzazione sulle tabelle in formato InnoDB e MySQL lo fa per noi.

Ma c’è un secondo problema. Se avessimo invocato l’ottimizzazione avremmo ricevuto in risposta la stessa prima riga ed una seconda riga con lo status OK a segnalare che le operazioni sopra descritte, MySQL era riuscito a completarle senza problemi. Invece qui la seconda riga ci segnala un errore aggiuntivo:

optimize | error | Invalid default value for ‘post_date’

e qui si presenta il problema: la backward compatibility trap di cui parlavo prima.

WordPress crea la tabella wp_posts in questo modo:

mysql > CREATE TABLE `wp_posts` (
    ->   `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    ->   `post_author` bigint(20) unsigned NOT NULL DEFAULT '0',
    ->   `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
    ->   `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
    ->   `post_content` longtext NOT NULL,
    ->   `post_title` text NOT NULL,
    ->   `post_excerpt` text NOT NULL,
    ->   `post_status` varchar(20) NOT NULL DEFAULT 'publish',
    ->   `comment_status` varchar(20) NOT NULL DEFAULT 'open',
    ->   `ping_status` varchar(20) NOT NULL DEFAULT 'open',
    ->   `post_password` varchar(20) NOT NULL DEFAULT '',
    ->   `post_name` varchar(200) NOT NULL DEFAULT '',
    ->   `to_ping` text NOT NULL,
    ->   `pinged` text NOT NULL,
    ->   `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
    ->   `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
    ->   `post_content_filtered` longtext NOT NULL,
    ->   `post_parent` bigint(20) unsigned NOT NULL DEFAULT '0',
    ->   `guid` varchar(255) NOT NULL DEFAULT '',
    ->   `menu_order` int(11) NOT NULL DEFAULT '0',
    ->   `post_type` varchar(20) NOT NULL DEFAULT 'post',
    ->   `post_mime_type` varchar(100) NOT NULL DEFAULT '',
    ->   `comment_count` bigint(20) NOT NULL DEFAULT '0',
    ->   PRIMARY KEY (`ID`),
    ->   KEY `post_name` (`post_name`(191)),
    ->   KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
    ->   KEY `post_parent` (`post_parent`),
    ->   KEY `post_author` (`post_author`)
    -> ) ENGINE=innodb AUTO_INCREMENT=536 DEFAULT CHARSET=utf8;

E fino alla versione di MySQL 5.6 tutto andava bene. Ma dalla versione 5.7 in poi, MySQL ha inserito nei parametri di sql_mode anche NO_ZERO_IN_DATE, NO_ZERO_DATE che impedisce, o quanto meno, non accetta per validi campi di tipo datetime che abbiano un default value settato a ‘0000–00–00 00:00:00’. e guardate un po’ nelle definizioni di creazione della tabella wp_post cosa abbiamo????

`post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

e più giù

`post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

da qui l’errore nella seconda riga della notifica ottenuta dal comando optimize ossia: | optimize | error | Invalid default value for ‘post_date’.

Fortunatamente WordPress, di suo, non crea mai date con tale valore a 0, ma usa la data più vecchia rappresentabile per lui, ossia 1970–01–01 01:01:01, non chiedetemene il motivo: c’è ma esula da questo post. Se tentasse di usare una data a zero scatterebbe la trap di NO_ZERO_IN_DATE quindi non riuscirebbe ad usarla, almeno dalla versione 5.7 di MySQL in poi.

Come risolvere il probelma: ci son diversi modi:

  1. modificare il valore di default della tabella da 0000–00–00 00:00:00 a 1970–01–01 01:01:01 per tutti campi data.
  2. modificare, temporaneamente, il settaggio di sql_mode, e ripristinarlo a fine ottimizzazione — nel qual caso vi consiglio di scrivervi la procedura per non diventare matti alla prossima ottimizzazione della tabella in questione — 
  3. modificare il valore di sql_mode in modo permanente — cosa che personalmente sconsiglio, altrimenti vi troverete ad usare una versione non standard di MySQL e questo, in futuro, doveste avere problemi di debugging potrebbe crearvi grossi fastidi!!!

I ho optato per la seconda soluzione per vari motivi tra i quali: cosa succede se cambio il valore di defaul della tabella di WordPress? Che ricadute avrà sull’intero sistema WP? Intendo plugin in particolare, ma anche temi ed altro.

Indi la soluzione per la modifica, ribadisco, temporanea del settaggio del parametro sql_mode:

mysql> set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;

in questo modo disattiviamo, temporaneamente, i parametri NO_ZERO_IN_DATE, NO_ZERO_DATE della sql_mode; a questo punto eseguiamo la nostra ottimizzazione:

mysql> optimize table wp_posts;
+--------------------+----------+----------+-------------------------------------------------------------------+
| Table                | Op       | Msg_type | Msg_text                                                        |
+--------------------+----------+----------+-------------------------------------------------------------------+
| WordPress.wp_posts | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| WordPress.wp_posts | optimize | status   | OK                                                                |
+--------------------+----------+----------+-------------------------------------------------------------------+

Come potetre vedere, adesso abbiamo in riga uno la notifica che non si può usare il comando optimize su un database in formato InnoDB, ma in seconda riga abbiamo come status OK. Questo sta a significare che le operazioni eseguite da MySQL per ottimizzare una tabella InnoDB sono andate a buon fine.

Resta solo da ripristinare i valori corretti di sql_mode: lo potete fare in due modi:

  • eseguire quanto segue in console: 
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

      e proseguire le vostre attività in MySQL

  • o uscire dal client MySQL per ripristinare il valore originale di sql_mode così che contenga nuovamente anche i parametri NO_ZERO_IN_DATE, NO_ZERO_DATE.

 

Ed il gioco è fatto!!!

 

Per quanto riguarda i siti multi blog, sarà cura dell’amministratore pulire le tabelle dei singoli blog. La procedura è la medesima, ma la struttura del nome della tabella cambia da wp_posts a wp_X_posts, dove per X si intende un numero che non sarà necessariamente progressivo e che indica comunque uno specifico blog della vostra installazione. Quindi riepilogando, per ogni blog si dovrà:

  1. Verificare la presenza di post fantasma (wp_X_posts.post_type=’revision’)
  2. Se presenti provvedere alla cancellazione dalla specifica tabella wp_X_posts
  3. Disabilitare temporaneamente sql_mode
  4. Eseguire tanti optimize table wp_X_posts quanti sono i blog in carico all’amministratore
  5. Ripristinare sql_mode o con il comando o uscendo e rientrando dal client MySQL.

 

Vodafone Station: programmare il silenziamento della suoneria.

Per chi avesse installata la Vodafone Station, hanno da poco aggiunto lo «spegnimento della suoneria» programmabile giorno per giorno, il che aiuta non poco a liberarsi dagli scocciatori: io per esempio che ho un numero fisso solo per le chiamate mediche di emergenza, ho attivato la funzione dalle 18:30 alle 7:30 di tutti i giorni ed ho risolto, ma non tutti hanno questa possibilità per mille motivi diversi.

Per poter arrivare questa funzionalità nella Vodafone Station, raggiungete il pannello di controllo via web dando l’indirizzo http://vodafone.station e vi troverete in questa situazione:

 

selezionate ‘Modalità Utente Esperto’:

 

 

Poi andate nel menu Telefono e troverete due voci aggiuntive alla solita ‘Registro Chiamate’ ossia:

 

 

Cliccate su ‘Silenzia Suoneria’ e vi si aprirà una nuova pagina: la prima cosa da fare è usare il pulsante a slitta per attivare la funzionalità:

 

Vi comparirà a quel punto la richiesta di determinare se nella fascia oraria che selezionerete, subito sotto, se la suoneria deve essere abilitata o disabilitata, io ovviamente ho selezionati DISABILITATO:

 

A questo punto avrete la pagina in questa configurazione:

 

 

Cliccate sul segno (+) rosso per aggiungere una fascia oraria e ci si aprirà questo menu a comparsa:

 

 

Io l’ho configurata così:

 

 

Ossia su tutti i numeri in entrata (se ne possono avere sino a due e si possono mettere regole diverse per diverso numero): dalle 18:30 alle 07:30 del giorno successivo di tutti i giorni, la suoneria è disabilitata.

 

Mi raccomando: ricordatevi di cliccare sul pulsante ‘SALVA’ altrimenti dovrete rifare tutto la procedura. Una volta salvata la regola ecco come sarà la pagina:

 

 

Con il pulsante (+) rosso potete aggiungere altre regole se vi servissero. Anche qui ricordatevi di cliccare sul pulsante ‘Applica’ altrimenti dovrete ripetere la procedura.

Un esempio di caso in cui servano più regole può essere l’uso di una fascia oraria diversa per giorno, oppure una per i soli giorni lavorativi ed una diversa per i festivi, insomma potete sbizzarrirvi come preferite!!!

 

Rallentamenti di rete in Windows nel 2017

Stavo leggendo un post di Andrea, un amico su Quora, nel quale spiegava cosa gli aveva impedito di pubblicare, negli ultimi giorni, nuovi post proprio sul blog in questione.

La cosa mi ha piuttosto incuriosito e sono andato a vedere un po’ cosa se ne diceva in giro, sulla rete, dopo di che ho avviato la mia macchina virtuale con Windows 10 per verificare la situazione, e le cose si sono presentate molto, ma molto peggio di quello che sembrava essere inizialmente.

Non che Andrea avesse torto: uno dei motivi per questi improvvisi rallentamenti della velocità della rete rete riscontrati, appena dopo un aggiornamento, è dovuto in effetti al motivo da lui riportato, ossia: 

Alla fine, mezzo disperato (molto opportunamente, proprio quel giorno avevo un bel po’ di cose da controllare e da fare), faccio la prima cosa che mi viene in mente: digito “proxy” sulla barra di ricerca del PC – e arrivo alla seguente schermata:
 
 
 
Ed è proprio lì che noto qualcosa di strano: quella spunta su “Automatically detect settings“, ovvero “rileva automaticamente le impostazioni“, io mica me la ricordo.
Poi, ripensandoci, mi torna alla mente quell’aggiornamento fatto fare al sistema pochi giorni prima…
…che Windows 10 abbia pasticciato più del dovuto?
Finalmente, sperando di far saltare tutto per aria, disattivo l’opzione sospetta.
Quindi, torno in Rete…
tutto torna a funzionare perfettamente!
In effetti configurare, il sistema di rete, affinché cerchi delle impostazione automatiche di configurazione del proxy, quando il proxy voi, magari, nemmeno sapete cosa sia, per cui figuriamoci se l’avete configurato in qualche modo, porta a rallentamenti progressivi, ed in casi più gravi come quelli di Andrea, addirittura al blocco totale della rete.
 
Per cui punto primo: disabilitate quella configurazione nominata Automaticly detect setting e, se siete fortunati, il problema del rallentamento assoluto della rete verrà risolto.
 
Però… c’è sempre un però: un’altra situazione che ho riscontrato, sia sulla mia macchina virtuale, e leggendo in giro per la rete, è un problema ancora più antipatico, ossia rallentamenti, anche sino a quasi bloccare la rete, ma casuali, non in modo continuativo. 
 
Se fosse lo stesso problema di prima, il rallentamento sarebbe costante e progressivo; in questo secondo caso, invece, il rallentamento, mai totale, ma può arrivare ad essere davvero devastante, è aperiodico. 
 
Può succedere spesso, o raramente, quindi non è collegato al problema della ricerca dei parametri automatici di configurazione del proxy. Girovagando sulle varie pagine di configurazione di Windows 10 ho trovato questa pagina che mi ha fatto suonare un campanello di allarme.
 
Il testo della pagina cita:
 
Aggiornamento da più posizioni.
Scarica gli aggiornamenti di Windows e le app di altri PC oltre a Microsoft
 
già quel di altri e quell’oltre a Microsoft hanno fatto squillare le trombe d’allarme altro che i campanelli!!! Ma non finisce qui, più sotto riporta:
 
Quando questa opzione è attivata, il PC può anche inviare parti di aggiornamenti di Windows e app scaricati in precedenza ai PC nella rete locale o ai PC in internet, a seconda dell’opzione selezionata di seguito. (segue un bel pulsante a slitta)
 
seguono poi le opzioni selezionabili:
 
 
La cosa mi è puzzata non poco, cosi sono andato a cercare, nella documentazione ufficiale di Microsoft, cosa diavolo intendessero con “da altri PC” e con “ai PC nella rete locale o ai PC in internet” perché la cosa, a fiuto, si faceva piuttosto seria.
 
Non sto a dirvi cosa mi ci è voluto per trovare la documentazione in merito: come sempre quando si tratta di essere chiari e trasparenti, Microsoft fa di tutto per non smentire la sua vocazione ad essere completamente l’opposto!!!
 
Comunque alla fine ho trovato quello che cercavo. Da un certo punto in poi, hanno ben pensato di alleggerire il carico dei loro server in fase di rilascio degli aggiornamenti, creando una rete P2P con cui distribuire quest’ultimi, e perché no anche gli aggiornamenti delle varie app provenienti dallo store.
 
Risultato? Per default (e sai che novità) il sistema P2P non solo è attivo per default, ma lo e sull’intera internet!!! Ciò vuol dire che ogni tanto il vostro windows inizia ad usare la banda per cedere a terzi, sconosciuti e sparsi per tutto il globo, pezzi degli aggiornamenti che voi avete già scaricato, indipendentemente dal fatto che li abbiate installati o meno.
 
Ora: se attiviamo la configurazione in cui condividiamo gli aggiornamenti nella nostra stessa sottorete, ha un senso: perché far scaricare gli stessi aggiornamenti in tutti i PC che abbiamo in casa con windows installato? Meglio prelevarli da una macchina in rete locale che sarà sicuramente più rapido che non scaricare tutto dal server di mamma Microsoft. Però guarda caso l’installazione di default prevede che oltre a offrire ciò che avete scaricato ai PC di casa, o ufficio, vostra, voi li offrite a tutta la rete internet!!!
 
Questo sta a dire che ogni tanto, quanto spesso non sono in grado di quantificarlo, la vostra banda di rete sarà impegnata a fornire il servizio, che dovrebbe offrire Microsoft, per scaricare gli aggiornamenti del sistema e quelli delle app, a qualcuno che sta non so dove in giro per il mondo.
 
Praticamente, senza dire nulla a nessuno, Microsoft ha creato una rete P2P sua, per fare il suo lavoro (distribuire gli aggiornamenti) usando le macchine dei suoi clienti (ossia TE… si si proprio TE !!)
 
Quindi adesso capirete perché, ogni tanto, vi pare che la rete che normalmente usate con soddisfazione, improvvisamente sembra una vecchia ADSL delle più scarse.
 
Consiglio quindi di mettere mani a questa configurazione digitando nella casella di ricerca del vostro windows “Aggiornamenti da più posizioni” e vi comparirà questa scheda:
 
A questo punto, a seconda della vostra situazione, avrete tre possibilità:
  1. Disabilitate totalmente il servizio di condivisione degli aggiornamenti: pulsante a slitta ‘Attivato’ su spento.
  2. Avete più PC in casa e volete scaricare ,solo una volta, gli aggiornamenti: pulsante a slitta ‘Attivato’ su attivo e selezionate la voce ‘PC nella rete locale’.
  3. Avete banda da regalare, indipendentemente da quanti PC avete in casa (o ufficio): pulsante a slitta ‘Attivato’ su attivo e selezionate la voce ‘PC nella rete locale e su internet’

Nel primo caso non condividerete un bel nulla con nessuno; nel secondo solo con gli altri computer in casa o in ufficio, purché nella stessa sottorete; nel terzo caso condividerete (facendo un lavoro per cui Microsoft si fa pagare) aggiornamenti di sistema e di applicazioni con chiunque in giro per il mondo a spese (banda e spazio sul disco per salvare gli aggiornamenti in questione) vostre.

Va da se che ognuno è libero di scegliere come operare, ma il problema, con Microsoft, sta proprio nel verbo SCEGLIERE: facendo queste operazioni senza dire nulla a nessuno, toglie la possibilità di scegliere. Quanti di voi, me compreso finché non si è presentato il problema, si passa, a scandaglio, tutte le pagine delle impostazioni e va a cercare tutto quello che non è lapalissiano? Direi quasi il 99.9% e Microsoft ha sempre giocato, sporco oserei dire, su questa percentuale.

Beh adesso lo sapete: scegliete se volete essere magnanimi con il mondo, con la vostra sotto rete o con nessuno 🙂

Editare file remoti in locale senza spostarli o entrare in una shell.

Logo VIMTastiera dedicata VIM

Per chi abitualmente lavora in ambiente server, succederà molto spesso di dover editare file di testo puro, che sono normalmente file di configurazione di programmi vari, oppure sorgenti di script bash o script Python o sorgenti di programmi C, che sia ansi o C++. Insomma la necessità di dover editare file di testo puro sono innumerevoli. Ci sono diversi editor testuali che si usano in questi casi. Anche perché, di norma, un sistema server, non ha un ambiente grafico, per cui il tutto va fatto in ambiente testuale. Un editor con il quale, chi fa questo genere di lavoro, ha quasi sempre a che fare è vim che di norma è installato per default su tutti gli ambienti server. Esistono anche soluzioni grafiche per vi, come gvim in ambiente GNome oppure MacVim in ambiente oSX.

Quale che sia la versione che usiate, non tutti sanno che si può usare il vim, nella versione installata sul proprio sistema, per editare un file in remoto, senza dover per forza:

  • copiarli in locale, editarli, ricopiarli in remoto
  • entrare nella shell in remoto, editarli, uscire dalla shell remota.

Questo risulta possibile usando la combinazione vim + scp in un solo comando. Per esempio il file script.py sull’host 192.168.1.1 dall’utente andrea potrà essere editato direttamente dal nostro computer con questo comando:

vim scp://andrea@192.168.1.1:22/script.py (ATTENZIONE: path relativo all’utente andrea.)

vim scp://andrea@192.168.1.1:22//etc/hosts (ATTENZIONE: il doppio carattere slash (/) indica un percorso assoluto dalla radice del disco.)

Una volta aperta la schermata di vim vi verrà segnalato, quando il file è stato totalmente caricato, il percorso assoluto del file temporaneo nel nostro sistema ed una richiesta di invio:

“/var/folders/q4/6xwschyd5vg_96pcqsys600gn/T/vYN7lzg/0.list” 1519L, 36321C

Premi INVIO o un comando per proseguire

Dopo la pressione dell’invio avrete l’abituale ambiente di lavoro di vim, con cui potrete editare il vostro file. A lavoro ultimato, i soliti comandi di scrittura ed uscita avvieranno la trasmissione del file aggiornato verso l’host remoto.

Io la trovo una cosa piuttosto comoda, voi ?

I-Ching del giorno 10/07/2017 – Tsienn

Il Presente:

  Tsienn – Lo Sviluppo (il Progresso Casuale)

L’Immagine:

Sul monte è un albero: l’immagine dello sviluppo. Così il nobile dimora in dignitosa virtù per migliorare i costumi. Ogni cosa che cresce lentamente costruisce profonde radici. Un graduale sviluppo porta un progresso.

La Sentenza:

Lo sviluppo. La fanciulla viene data in sposa. Salute! Propizia è perseveranza.

I Mutamenti:

Nove al terzo posto significa: L’oca regale si avvicina gradatamente all’altipiano. Il marito esce di casa e non ritorna più. La moglie porta in grembo un bimbo ma non dà alla luce. Sciagura! Propizio è respingere predoni.

Il Futuro è:

 –  Tunn – La Ritirata

L’Immagine:

Sotto il cielo il monte: l’immagine della ritirata. Così il nobile tiene lontano l’ignobile, non irato, ma pacato.

La Sentenza:

In ritirata. Riuscita. In piccolo è propizia perseveranza.

I-Ching del giorno 7/7/2017 – Scï Ho

Il Presente:

  噬嗑 Scï Ho — Il Morso Che Spezza.

L’Immagine:

Tuono e fulmine: l’immagine del morso che spezza. Così i re di una volta consolidavano le leggi per mezzo di pene chiaramente determinate.

La Sentenza:

Il morso che spezza ha riuscita. Propizio è dar corso alla legge.

I Mutamenti:

Sei al quinto posto significa: Morde in carne di muscolo essiccata. Riceve oro giallo. Essere perseverantemente consci del pericolo. Nessuna macchia!!

Il Futuro è:

 – 無妄 U Uang / l’Innocenza (l’Inaspettato)

L’Immagine:

Sotto il cielo passa il tuono: tutte le cose acquistano lo stato naturale dell’innocenza. Così gli antichi re curavano ed alimentavano, ricchi di virtù ed in armonia col tempo, tutti gli essere.

La Sentenza:

L’innocenza. Sublime riuscita. Propizia è perseverare. Se qualcuno non regge, egli ha disgrazia, e non è propizio imprendere una cosa qualsiasi.

I-Ching del giorno 6/7/2017 – Li

 

 

 

Il Presente:

– 噬嗑 Scï Ho / il Morso Che Spezza

 

L’Immagine:

La chiarità sorge due volte: l’immagine del fuoco. Così il grand’uomo illumina continuando questa chiarità le regioni del mondo.

La Sentenza:

L’illuminazione. Propizio è il perseverare. Essa reca riuscita. Cura della proprie cose ci reca salute.

I mutamenti:

Sei al quinto posto significa:

Morde in carne di muscolo essiccata. Riceve oro giallo. Essere perseverantemente consci del pericolo. Nessuna macchia!

 

Il Futuro:

– 無妄 U Uang / l’Innocenza (l’Inaspettato)

L’immagine:

Sotto il cielo passa il tuono: tutte le cose acquistano lo stato naturale dell’innocenza. Così gli antichi re curavano ed alimentavano, ricchi di virtù ed in armonia col tempo, tutti gli esseri.

La sentenza:

L’innocenza. Sublime riuscita. Propizia è perseveranza. Se qualcuno non ha retto egli ha disgrazia, e non è propizio imprendere una cosa qualsiasi.

 

Gestione protetta dei nostri progetti editoriali.

Un piccolo script, in bash, per editare i nostri libri mantenendoli protetti quando non li usiamo.


Può capitare a chi scrive, specialmente per diletto, di avere il computer in condivisione con altri componenti della famiglia. Oppure avendo spesso l’impulso di scrivere nei momenti liberi, di usare un computer portatile che può restare aperto in zone dove bazzica altra gente.

Può anche essere che abbiamo copia aggiornata del nostro lavoro, in progresso, in un’area in cloud, dove notoriamente non è cosa sana tenere file importanti non protetti.

Questo script, l’ho creato proprio per questo scopo: uso MEGA, come area di sincronizzazione cloud dei miei dati importanti; e pur essendo nominalmente codificati da loro, preferisco aggiungere un livello di sicurezza personale ai miei file.

Essendo una cosa, per me legata, esclusivamente ai libri in scrittura, ho creato lo script per la specifica attività, ma modificarlo per integrarlo in un vostro script di backup, per esempio, non è cosa complicata per nulla.

Lo script fa queste 12 cose:

  1. Verifica l’ambiente di lavoro se oSX (Mac) o Posix (Linux) e di conseguenza cerca due particolari tool necessari per la cancellazione sicura dei file. Nel caso di oSX cerca bcwipe nel caso di Posix cerca wipe. I due tool fanno praticamente la stessa cosa: ossia ricoprire il file, byte per byte con caratteri casuali per un certo numero di volte. È una delle procedure standard più usate per la cancellazione sicura di un oggetto posto su un file system.
  2. Se il rispettivo tool, a seconda del sistema operativo, non risulta presente viene segnalata la necessità di installarlo e la procedura termina.
  3. Lo script si sposta nella cartella /tmp ove terrà tutti i file transitori, mentre lavorerete al vostro progetto.
  4. Viene decriptato il file salvato l’ultima volta, chiedendo la password usata nella fase di codificazione precedente.
  5. Viene usato il comando open per avviare il programma, assegnato dal sistema operativo, per l’apertura di un file con una certa estensione. Nel mio caso usando file con estensione .scriv viene aperto il programma Scrivener che a sua volta aprirà il file associato. La comodità di open sta nel fatto che cambiassi tipo di programma, non servirebbe mettere mano allo script per la parte avvio programma, perché capirebbe da solo che se è un .doc(x) deve aprire Office, se è un .odt deve aprire LibreOffice, se e un .pages deve avviare Pages e così via.
  6. A questo punto la procedura si mette in attesa della pressione del tasto INVIO, lasciandovi tutto il tempo che è necessario per passare a Scrivener (nel mio caso) per creare, editare o cancellare il documento. Una volta terminate le modifiche chiudo il programma totalmente e torno allo script premendo il tasto INVIO per farlo proseguire.
  7. Viene raggruppato in un file .tar tuto il materiale della cartella, sotto cartelle incluse.
  8. Viene eseguita la codifica usando openssl e chiedendovi password e verifica password.
  9. Il file generato avrà una estensione .encrypt: una mia scelta arbitraria; essa non è associata in automatico ad openssl.
  10. Viene verificato nuovamente in che sistema operativo siete, ed a seconda di quale viene riscontrato, viene eseguito il necessario per la cancellazione sicura dei dati temporanei nella cartella /tmp
  11. Viene presentata una notifica di corretta chiusura della procedura
  12. Venite riportati nella cartella originaria in cui saranno presenti solo il file script, in bash, ed il file criptato contenente tutto il vostro materiale.

Alcune note:

  • L’uso delle procedure di cancellazione sicura può essere piuttosto lunga nel caso di progetti complessi in cui, oltre al puro testo, siano memorizzati, nella stessa cartella, o in sottocartelle del progetto come di solito si fa, di molte altre cose come ricerche, schede personaggi, capitoli alternativi, immagini, video ecc. ecc. La regola di base è che più sono i file da cancellare, e più sono grossi, più tempo la cancellazione sicura necessiterà.
    Potete usare la cancellazione tradizionale, molto più rapida, ma ovviamente meno sicura: è una vostra scelta. Nel caso decidiate per la cancellazione rapida troverete un secondo listato modificato per questa esigenza.
  • Potete usare multiple versioni dello stesso script per progetti diversi: basterà tenere lo script, modificato per la parti nome file e cartella originaria, nelle rispettive cartelle dei rispettivi progetti.
    Io per esempio ho una cartella $HOME/…/Writer in cui ho le cartelle con i vari progetti ed uno script per ogni cartella, chiaramente adeguata al nome progetto.
  • Lo script una volta creato va reso eseguibile con il comando chmod u+x nomescript.
  • Per le estensioni, in Linux non hanno alcuna importanza: una volta reso eseguibile che sia .sh o meno non cambia nulla, sebbene per definizione uno script bash dovrebbe avere una estensione .sh; ma per convenzione: non per necessità.
    Per quanto riguarda oSX (Mac) la cosa è un po’ diversa: se lanciate lo script da Finder (il file manager grafico di Mac) con il doppio click tradizionale, allora il file DEVE avere l’estensione .command. Se non ha questa estensione, il file manager (Finder) si rifiuterà di eseguirlo, nonostante lo abbiate definito eseguibile.
    È una impostazione propria di questo sistema operativo, per cui dovete sottostare a questa regola. Se invece sempre da oSX (Mac) lo eseguite dal terminale allora valgono le stesse regole viste per Linux: ossia l’estensione non ha importanza al fine di eseguire lo script stesso purché sia attivo il bit per l’esecuzione.

A seguire il codice, vero e proprio, dello script bash con cancellazione sicura:

#!/bin/bash
#
# Versione per oSX: unica differenza rispetto a linux è:
# bcwipe: tool oSX per cancellazione sicura dei file e dir
# wipe: tool Linux per cancellazione sicura dei file e dir
#
if [ "$(uname)" == "Darwin" ]; then
   if ! [[ -x "/opt/local/bin/bcwipe" ]]
      then
          echo -e "\n\nDevi installare il pacchetto bcwipe per eseuire questo script!!\n\n"
          exit -1
      fi
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
     if ! [[ -x "/opt/local/bin/wipe" ]]
        then
        echo -e "\n\nDevi installare il pacchetto wipe per eseuire questo script!!\n\n"
        exit -1
     fi
fi
#
# Assegna a $Libro il percorso attuale del libro
#

cd -- "$(dirname "$0")"
Libro01=$HOME/MEGA/ownCloud/Documenti/Writer/Libro01    

#
# Spostarsi in /tmp e decriptare il file
# Estrarre il tar
#

cd /tmp
openssl des3 -d -salt -in $Libro01/Libro01.tar.encrypt -out Libro01.tar &&
tar pxf Libro01.tar &&

#
# Usiamo il comando open per avviare Scrivener
# open avvia l'applicazione associata all'estensione del file
#

open /tmp/Libro01/Libro01.scriv

#
# Metti in pausa sino a pressione del tasto INVIO
# e proseguiamo con la nostra creazione, edizione o cancellazione
# del nostro testo.
#
# A chiusura di Scrivener torniamo al termiale
#

read -p "Premi [Invio] per continuare..." 

#
# Crea tar della cartella Libro01 e relative sotto cartelle
# Usa openssl per crittografare il file ottenuto
#

tar cf Libro01.tar Libro01/ &&
openssl des3 -salt -in Libro01.tar -out $Libro01/Libro01.tar.encrypt &&

#
# Distruggi i file usando bcwipe o wipe a seconda dell'OS
#

echo -e "\n\nDistruggo tracce di tutti i file in chiaro...."
if [ "$(uname)" == "Darwin" ]; then
   bcwipe -md -fI Libro01.tar &&
   bcwipe -md -rfI Libro01/
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
   wipe -qsf Libro01.tar &&
   wipe -Rqsf Libro01/
fi

echo -e "\n\nFiles in chiaro distrutti !!\n"
cd $Libro01
exit 0
 

Chiaramente il percorso $HOME/MEGA/ownCloud/Documenti/Writer/Libro01 va sostituito con il percorso che punta al vostro scritto. In questo esempio era un Libro in una cartella denominata Libro01.

Segue la versione senza i comandi di cancellazione veloce: non serve più determinare in che sistema operativo siamo.

#!/bin/bash
#
# Assegna a $Libro il percorso attuale del libro
#

cd -- "$(dirname "$0")"
Libro01=$HOME/MEGA/ownCloud/Documenti/Writer/Libro01

#
# Spostarsi in /tmp e decriptare il file
# Estrarre il tar
#

cd /tmp
openssl des3 -d -salt -in $Libro01/Libro01.tar.encrypt -out Libro01.tar &&
tar pxf Libro01.tar &&

#
# Usiamo il comando open per avviare Scrivener
# openavvia l'applicazioneassociata all'estensione del file
#

open /tmp/Libro01/Libro01.scriv

#
# Metti in pausa sino a pressione del tasto INVIO
# e proseguiamo con la nostra creazione, edizione o cancellazione
# del nostro testo.
#
# A chiusura di Scrivener torniamo al termiale
#

read -p "Premi [Invio] per continuare..."

#
# Crea tar della cartella Libro01 e relative sotto cartelle
# Usa openssl per crittografare il file ottenuto
#

tar cf Libro01.tar Libro01/ &&
openssl des3 -salt -in Libro01.tar -out $Libro01/Libro01.tar.encrypt &&

#
# Distruggi i file usando usando i comandi standard
#

echo -e "\n\nDistruggo tracce di tutti i files in chiaro...."

del Libro01.tar &&
rm -r Libro01/ &&

echo -e "\n\nFiles in chiaro distrutti !!\n"

cd $Libro01
exit 0

Se avete qualche dubbio contattatemi pure.

Chiaramente, la prima volta dovrete creare il file crittato a mano con questi due semplici comandi:

tar cf VostraCartellaDati.tar VostraCartellaDati/ &&
openssl des3 -salt -in VostraCartellaDati.tar -out VostraCartellaDari.tar.encrypt
 
In questo modo otterrete il vostro file VostraCartellaDati.tar.encrypt che verrà gestito dallo script.
 
 
Immagino, visto la presenza della shell Bash in Windows che si possa usare anche negli ambienti Microsoft, ma non ho mai sperimentato la cosa per cui non garantisco.
 
 
 
Licenza Creative Commons 
Questa opera è stata rilasciata con licenza Creative Commons Attribuzione – Non Commerciale – Condividi allo stesso modo 4.0 Internazionale. Per leggere una copia della licenza visita il sito  web a questo indirizzo.

Spoofare indirizzo MAC

 


Uno dei tanti passi per incrementare la nostra sicurezza in rete.


Cominciamo con paio di domande: 

  1. cosa è un indirizzo MAC?
  2. cosa significa fare uno spoof di un indirizzo MAC?

dunque:

  1. Avete presente quante schede di rete possano esister al mondo? Miliardi chiaramente. L’industria elettronica aveva bisogno di un metodo per identificare ogni singola scheda per eventuali identificazioni e riparazioni (che poi qualcuno come NSA o tribunali ne facciano altro uso è un altro paio di maniche!!); ecco l’indirizzo MAC: è il modo in cui hanno risolto questo problema.
    Ogni scheda di rete ha un codice univoco identificativo e si chiama appunto indirizzo MAC. Per cui, avendo l’indirizzo MAC, possiamo sapere chi ha costruito la scheda o meglio l’azienda può sapere se è una propria scheda di rete o meno.
    Questo indirizzo contrariamente all’attuale indirizzo di rete ha un formato in numerazione esadecimale tipo 00:50:56:26:2f:e4 quindi sei valori esadecimali divisi da il carattere due punti. Va da se che l’indirizzo MAC può essere usato anche per identificare una precisa macchina e di conseguenza anche una specifica persona!! Per cui se in qualche modo possono leggere il vostro indirizzo MAC possono associarlo a voi in maniera diretta.
  2. Si intende fare lo spoof di un indirizzo, in generale, quando rendiamo visibile un indirizzo che non sia il nostro reale indirizzo. In questo caso, laddove venga letto il nostro MAC, non vedranno il nostro indirizzo MAC reale, ma un numero a casaccio inventato dallo script.

Spiegato questo dobbiamo installare il tool, che è stato scritto in Python e quindi lo possiamo installare con i seguenti comandi:

  • sudo pip install SpoofMAC oppure
  • sudo easy_install SpooMAC

Un metodo vale l’altro: dipende se avete installato pip o meno. Il comando installato è spoof-mac, se lo digitiamo senza parametri otterremo l’help relativo:

MacBookAir:~ jc$ spoof-mac

Usage:

    spoof-mac list [–wifi]
    spoof-mac randomize [–local] <devices>…
    spoof-mac set <mac> <devices>…
    spoof-mac reset <devices>…
    spoof-mac normalize <mac>
    spoof-mac -h | –help
    spoof-mac –version

di conseguenza ho creato questo script che esegue i vari comandi necessari per eseguire lo spoof della nostra scheda Wi-Fi. Chiaramente potete adattarla anche alla scheda con attacco cavo nel caso vogliate usarlo anche su un computer Desktop.

##

## Verifica se l’utente è root o il comando è stato prefisso con sudo: se NO esci !!

##

clear

if [ “$(id -u)” != “0” ]; then

   echo “Questo script DEVE essere usato come root o prefisso con sudo !!” 1>&2

   exit -1

fi

spoof-mac list –wifi

spoof-mac randomize en0

spoof-mac list –wifi

ifconfig en0 up

 

Lo script verifica inizialmente se lo avete lanciato da root o se avete prefisso il comando con sudo, se non è cosi lo script viene terminato ritornando -1

In caso l’esecuzione sia eseguita da root allora viene effettuata, a video, una lista in cui viene visualizzato:

  • il nome della scheda, nel mio caso en0 con il suo indirizzo MAC reale;
  • assegna alla scheda en0 un indirizzo MAC casuale, spegnendo la scheda wifi prima di effettuare l’assegnazione; 
  • viene eseguita nuovamente la lista in modo da far vedere l’indirizzo MAC reale e quello inventato dal programma;
  • la scheda en0 viene attivata di nuovo per poter essere utilizzata.

Chiaramente non lo fate in remoto sulla scheda da cui siete entrati o vi vedrete sbattere fuori per caduta della connessione !! 🙂

Lo script, così com’è, va bene per la stragrande maggioranza dei portatili. Unica nota verificate il nome della vostra scheda wifi: en0 per esempio è un nome tipicamente di macchine Apple. Se usate Windows o Linux il nome della scheda cambia totalmente. Per esempio in Linux della famiglia Debian, e derivate varie, la schede di rete si chiamerà wlan0.

Di conseguenza, dovete prima fare una verifica del nome della vostra scheda di rete usando il comando spoof-mac list –wifi ottenendo:

MacBookAir:~ jc$ spoof-mac list –wifi

– “Wi-Fi” on device “en0” with MAC address 10:93:E9:07:08:DA

dopo la parola device troverete il nome della scheda tra virgolette, nel mio caso appunto en0

Buon anonimizzazione !!

 

Licenza Creative Commons 

Questa opera è stata rilasciata con licenza Creative Commons Attribuzione – Non Commerciale – Condividi allo stesso modo 4.0 Internazionale. Per leggere una copia della licenza visita il sito  web a questo indirizzo. 

 

Sei un blogger ? Ti presento ScirbeFire. (parte seconda)

Ho già scritto un post su ScribeFire, ma in quello descrivevo solo le potenzialità del plugin. Oggi voglio farvi vedere alcune operazioni pratiche sul campo come associare un blog, scorrere i post esistenti caricati all’associazione, modificare un post vecchio e crearne uno nuovo.

Appena installato, ovviamente non sarà presente nessun blog su cui operare per cui iniziamo con il caricamento di uno dei nostri blog al plugin: tutti i comandi, esclusi quelli di edizione sono nel lato sinistro della schermata.

Sezione BLOG

La prima voce in effetti e BLOG con, dal lato opposto il comando Aggiungi un nuovo blog.

Sezione Blog per caricamente/modifica/cancellazione Blog associato al plugin.

Clicchiamo ora sulla voce Aggiungi un nuovo blog e si aprirà il seguente form:

Lo compiliamo nelle varie parti che ci verranno chieste in sequenza automatica, a seconda della piattaforma non tutte le voci dovranno essere compilate) iniziando con l’url del nostro blog:

Cliccando sul pulsante Successivo il plugin, se la piattaforma è tra quelle gestite, si compilerà automaticamente il campo Tipo Blog e vi chiederà le credenziali per l’accesso: 

Compilate le credenziali e cliccate sul pulsante Finito. Se tutto andrà nel modo corretto il form si chiuderà ed apparirà per qualche secondo la scritta Il blog è stato caricato con successo appena sopra il form intitolato BLOG in altro a sinistra. Inoltre nel menu a tendina, sempre della sezione blog, sarà già caricato il nome del vostro blog con il suo url, in questo esempio sarà Dico La Mia Su (dicolamiasu.jcsh.eh):

A questo punto avete caricato il vostro primo blog, dico primo perché potete configurarne quanti volete purché siano di una categoria di quelle gestite, elencate qui sotto:

Chiaramente la tipologia Atom vi permetterà di gestire anche altre piattaforme se sapere come funziona il protocollo Atom, ma questo esula dal contesto di questa estensione alla recensione.

Nella sezione BLOG poi vi sono i pulsanti Vedi utilizzato per aprire un nuovo tab ed invocare il sito blog; Modifica per poter modificare i parametri del blog che state agganciando, aveste sbagliato qualcosa; Rimuovi per rimuovere il blog puntato nel menu a tendina dal plugin: solo dal plugin!! Il sito del blog non viene chiaramente toccato in questo caso.

Sezione POST

La seconda sezione è POST con, dal lato opposto il comando Inizia un nuovo POST. Appena sotto un selettore a tendina con selezionata la voce (nuovo) e sotto un campo per inserire eventuali filtri nella selezione dei post. Se clicchiamo sulla doppia freccia del selettore a tendina vedremo tutti i post già scritti sul vostro blog e caricati dal plugin:

 
Nel mio caso ve ne sto facendo vedere solo una parte: chiaramente la lista sarà lunga sino al bordo inferiore della pagina e se non sufficiente compariranno sulla destra i soliti cursori per scorrere la pagina su e giù.
 
Se selezionate uno dei post e ci cliccate sopra il contenuto sarà caricato nell’editor e sarà pronto per essere modificato a piacimento:
 
 
Se invece volete iniziare un nuovo post semplicemente cliccate sulla voce Inizia un nuovo post. Facendolo verranno inizializzati tutti i valori necessari e sarete portati con il cursore nel campo del titolo del post vuoto:
 
 
A questo punto potrete iniziare a comporre il vostro articolo, sfruttando l’editor interno del plugin o un editor esterno facendo poi copia incolla.
 
Una nota sulle immagini: quando caricate un’immagine nel vostro articolo, se seguite bene quello che succede nel form di caricamento, vedrete che nel punto prima di avviare l’inserimento, l’immagine avrà un url che non punta al vostro disco anche se l’immagine viene da li. Questo perché una volta selezionata l’immagine essa viene caricata nell’apposita area dati server del vostro blog quindi sul sito di destinazione. Questo avviene perché in passato si è notato che pubblicare immagini semplicemente incollate nel vostro documento, al momento di pubblicarlo spesso si creavano problemi. Hanno deciso di conseguenza di trattare i file media, in generale, come se venissero editati direttamente dal vostro sito WordPress e indi caricando il file sul server su cui è installato. In questo modo si garantisce che le immagini siano al posto corretto con le dimensioni corrette al momento di visualizzare il post sul sito del blog.
 
Vediamo ora le varie possibilità durante la digitazione del testo del vostro articolo:
 
 
Andiamo nell’ordine dalla prima icona in alto a sinistra all’ultima a destra della seconda riga.
 
  • Selezione del colore del testo
  • Selezione dello sfondo del testo
  • Imposta/Disattiva Grassetto
  • Imposta/Disattiva Corsivo
  • Imposta/Disattiva Sottolinea
  • Imposta/Disattiva Barrato
  • Allinea a Sinistra
  • Allinea al Centro
  • Allinea a Destra
  • Allinea Giustificato
  • Elenchi Puntati
  • Elenchi Numerati
  • Riduci indentazione
  • Aumenta indentazione
  • Imposta/Disattiva Citazione
  • Taglia ciò che è selezionato
  • Copia ciò che è selezionato
  • Incolla ciò che è selezionato
  • Cancella formattazione a ciò che è selezionato
  • Attiva/Disattiva link a ciò che è selezionato
  • Inserisci link You Tube
  • Inserisci/Modifica Immagine 
  • Inserisci/Modifica Video
  • Inserisci Tabella
  • Seleziona tipo font
  • Seleziona dimensione font
  • Inserisci post splitter
  • Entra/Esci modalità Full Screen
  • Imposta/Disattiva Apice
  • Imposta/Disattiva Pendice

Come vedete le possibilità sono tante, molte di più di quelle generalmente offerte dei post editor pubblicati dagli stessi gestori della piattaforma del blog che usate. Per esempio l’editor di WordPress non permette di selezionare ne font ne dimensione font, non permette la gestione del colore dello sfondo, non permette la formattazione di tipo giustificato e così via.

Anche qui è possibile passare in formato HTML se proprio si volesse fare qualche modifica a livello di codice del post, ma in anni che lo uso non mi è mai capitato di averne la necessità. Doveste averne bisogno basta cliccare su Modifica il Codice (HTML e Markdown)  tra il titolo del post e l’area di editing:

 

Direte voi: “Che c’entra il MarkDown?” C’entra perché dalle impostazioni è possibile attivare il linguaggio MarkDown per la scrittura del post. Questa con, poche a dire il vero, altre opzioni che possono essere impostate nel plugin sono accessibili cliccando sul pulsante ScribeFire Options nell’ultima sezione intitolata SETTINGS AND DATA.

Le opzioni modificabili sono le seguenti:

Molto comoda la prima opzione, attivata di default, per via della quale, se avete più blog configurati, il medesimo post può essere pubblicato su altri vostri blog.

Area inferiore alla finestra di Editing

Se espandete le due aree sotto la finestra di edizione del post, EstrattoCampi Personalizzati, potete compilare, nel primo campo, un riassunto del vostro articolo, nel secondo potete assegnare valori a campi particolari, per esempio, di un vostro plugin su WordPress ed assegnargli un valore.

Area inferiore Pubblica

Impostazione del momento di pubblicazione. 


Non sempre si ha il tempo di scrivere il post nel momento in cui serve. Il form che trovate in basso nella sezione ci permette di scrivere il nostro post per tempo e pubblicarlo in un momento successivo senza dover essere davanti al tastiera: basterà programmare il mese, giorno ed anno ed anche l’ora ed i minuti, ed il post sarà pubblicato in quel preciso momento. Praticamente il post sarà già nel sito, ma non visibile sino allo scadere dell’ora impostata. A quel punto diventerà pubblico e di conseguenza visibile a tutti. Comodo no?


Gli ultimi due pulsanti, ossia Salva aggiornamenti Publish Post  sono piuttosto auto esplicativi, comunque, in sintesi: 

  • Salva Aggiornamenti: salva il contenuto ma non pubblicarlo (creazione o aggiornamento BOZZE)
  • Publish Post: salva il contenuto e pubblicalo (pubblicazione vera e propria del POST)

Direi che abbiamo visto praticamente tutto quello che serviva di questo molto efficiente post editor per piattaforme blog. Come dicevo già nel post precedente, Medium.com non viene visto come blog per cui non è, al momento almeno, possibile usarlo per pubblicare direttamente su quella piattaforma; e visto la scarsità degli aggiornamenti temo anche non succederà a breve.

Spero questa estensione, della precedente recensione di ScribeFire, sia stata utile a qualcuno; Eventuale share su vostre piattaforme social saranno ovviamente più che gradite!!