[risolto] UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe9 in position 0: ordinal not in range(128)

Questo genere di errore avviene in Python quando si cercano di convertire le stringhe da Unicode (UTF-8) in ASCII. Questo avviene più spesso di quanto non si creda, dal momento che le stringhe di testo sono tutte gestite come ASCII e il meccanismo che si occupa della conversione, paradossalmente, può gestire unicamente caratteri ASCII.

Per un approfondimento tecnico consiglio la lettura di questo articolo: Overcoming frustration: Correctly using unicode in python2

In questo caso voglio trattare l’esempio di errore che si ha utilizzando il seguente codice:

L’errore restituito è il seguente:

Traceback (most recent call last):
File "C:\Users\utente\Desktop\esempio\errore.py", line 4, in <module>
print ";".join(prova)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)

In particolare il problema si presenta quando si tenta di fare la join sulla lista con un separatore di testo.

Online si trovano numerose soluzioni come per esempio questa (che però non funziona!), ma nessuna che mi abbia davvero soddisfatto:

Il problema di fondo è che le stringhe incriminate, che nel mio esempio ho scritto io, sono lette dal programma da sorgenti esterne sulle quali non ho controllo e fare il debugging di tutti i possibili caratteri (milioni di caratteri come minimo!) è chiaramente alquanto improbabile.

Per aggirare il sistema e poter effettuare comunque la join ho usato quindi una funzione costruita ad hoc nel modo seguente:

A questo punto possiamo testarla nel modo seguente:

Il risultato stampato è il seguente:

é;a;è;;;èòà+;pippo  prova;;ancora

Faccio notare come in questo modo vengano ignorati i caratteri incriminati. Non è una soluzione molto elegante, ma comunque si raggiunge lo scopo di poter “pulire” il testo di origine.

Questo errore potrebbe anche presentarsi in altre forme come:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xc2' in position 0: ordinal not in range(128)

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 20: ordinal not in range(128)

E altri.

Vedi articolo

[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!

Vedi articolo

[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.

Vedi articolo

Quanta energia consuma un PC in un anno?

Vi siete mai chiesti quanta energia consuma in media un computer all’anno? Chiaramente il consumo dipende sia dall’utilizzo che dalla potenza dell’alimentatore; per essere precisi un classico alimentatore da 450/500W non consuma energia sempre alla massima potenza, ma in base al carico computazionale sulla macchina. Per esempio se si gioca ad un videogioco si consuma più energia che se il computer rimane in stand-by.

Nel mio caso specifico lascio il computer di casa acceso anche quando non lo uso, spesso per compilare programmi o essere semplicemente disponibile da remoto.

In pratica questi sono i dati di un computer che è stato acceso per 365 giorni 24 ore al giorno. Per il calcolo del costo è stato utilizzato un parametro di 0,14 €/kWh.

Chiaramente questo risultato non sarà identico per tutti, ma possiamo dire che in media un computer lasciato acceso tutto il giorno ed utilizzato in modo mediamente intensivo consumi circa 500kWh all’anno, oppure circa 40kWh al mese.

Per confronto di seguito riporto invece i dati di un server Dell PowerEdge T110II (Intel® Xeon® Processor E31270v2, 4C/8T, 3.50GHz, 8M Cache, 69W, Turbo; 16GB Memory (2x8GB) 1600Mhz Dual; 2TB, SATA, 3.5in, 7.2K RPM) che gestisce un dominio con 15 utenti con funzionalità principale di server dati.

Anche in questo caso il server è rimasto acceso per 365 giorni 24 ore al giorno. Il consumo totale è stato di 270,15 kWh.

In pratica giocare ai videogiochi costa più che gestire una piccola rete aziendale! 

Vedi articolo

Civilization VI: Rise and Fall, creare mappa personalizzata

Abbiamo già visto nel precedente articolo come creare una mappa personalizzata in Civilization VI.

Chiunque ci abbia provato avrà notato che la mappa non funziona quando si utilizza l’espansione Rise and Fall

Perché una mappa personalizzata possa funzionare anche nel’espansione è necessario aggiungerla tra le mappe dedicate all’espansione stessa.

Per farlo spostiamoci su: %ProgramFiles%\Steam\steamapps\common\Sid Meier’s Civilization VI\DLC\Expansion1\Config

Ricordo che %ProgramFiles% è la cartella dove installiamo i programmi, se abbiamo spostato Steam su una cartella o partizione diversa dobbiamo sostituire %ProgramFiles% con tale percorso. Sul mio computer, per fare un esempio, il percorso assoluto è: D:\Programmi\Steam\steamapps\common\Sid Meier’s Civilization VI\DLC\Expansion1\Config

Questo perché ho spostato la cartella di Steam su una partizione diversa da quella di avvio C:

A questo punto andiamo a modificare il file Expansion1_StandardMaps.xml 

Nota: A differenza della versione standard, che legge tutti i file XML presenti nella cartella Config, l’espansione non sembrerebbe farlo, quindi dobbiamo modificare uno dei file esistenti e non possiamo aggiungerne uno nuovo nostro.

A questo punto modifichiamo il file nel modo che segue:

Faccio notare che, al file standard, ho aggiunto solamente la riga evidenziata.

Il percorso dove mettiamo il file Mappa Personalizzata.Civ6Map è solo relativamente importante, purché sia leggibile dall’eseguibile del gioco. Suggerisco di metterlo, come ho fatto io, in %ProgramFiles%\Steam\steamapps\common\Sid Meier’s Civilization VI\Base\Assets\Maps\Extra

Fatto tutto possiamo giocare alle nostre mappe anche con la nuova espansione!

Questo è molto realistico in effetti
Vedi articolo

Intervento su app e privacy a Risorse, su RTV38

Lo scorso martedì 22 maggio sono stato invitato a partecipare alla puntata di Risorse, su RTV38, dedicata ad app ed internet. Argomento trattato in modo leggero, con l’intervento di numerosi esperti. Per chiunque fosse curioso rimando all’episodio integrale su YouTube.

Vedi articolo

Google non va sulle reti Telecom… per alcuni minuti

Stasera molti utenti delle reti Telecom, in particolare Alice ADSL si sono accorti che Google non andava! A quanto pare il problema stava nell’instradamento delle connessioni sulla rete Telecom, che anziché seguire il percorso di tutti gli altri, finivano in Brasile, come riportato da alcuni utenti su Twitter. Su tutte le altre reti si navigava normalmente.

 

 

Il normale percorso che avrebbe dovuto seguire sarebbe stato simile a questo (io esco da Fastweb, ma dopo il percorso dovrebbe essere uguale):

 

Vedi articolo

Recensione disonesta su Noctis in Tekken 7

Me n’ero quasi dimenticato che ci sarebbe stato, quando finalmente, lo scorso 20 marzo, al cast di Tekken 7 si è aggiunto anche Noctis da Final Fantasy XV. Questa naturalmente non potrà che essere una recensione disonesta, dal momento che si fondono insieme due delle mie saghe preferite.

Noctis fa letteralmente il botto. E’ una specie di sintesi perfetta tra Jun, Hwoarang e Kazumi (miei combattenti preferiti). Similmente a Jun, ha alcune perfette aperture dall’alto (uf+3, u+2), mentre con Kazumi condivide quelle dal basso che rompono veramente un sacco le scatole (df+2) e la possibilità di raggiungere l’avversario a distanza (f,f+2). Comunque niente di assurdo tipo il raggio di Devil Kazuya o Devil Jin. Con Hworang non condivide tanto i calci, quanto alcune semplicissime pressioni di tasti che si trasformano in velocissime combo (Blitz Rush con 2,2,2,2,2) e alcuni sgambetti (d+4, combinabile in d+4,1,1+2), oltre che la velocità. A parte questi piccoli apprezzamenti squisitamente personali (Jun è stata in assoluto il mio personaggio preferito dell’intera saga), l’intero set di mosse è molto coreografico e bello da vedere, per quanto di per se solo alcuni colpi siano veramente devastanti (diciamo che vige la regola dei tanti piccoli colpi ben assestati).

Molti si sono lamentati che non c’entri molto con Tekken, anche se sinceramente non sono d’accordo (sebbene ammetto di essere molto di parte); in questo ultimo capitolo si schiera nella risma dei personaggi dotati di armi alla Alisa e Yoshimitsu, e coniuga alla perfezione molto caratteristiche dei personaggi maschili (tipicamente colpi forti e lenti) con quelli dei personaggi femminili (colpi deboli, ma veloci). Personalmente lo trovo un mix perfetto.

Inoltre, a differenza degli ultimissimi DLC, non ci sono mosse poco tekkenose, tipo combinazioni b,f o semicerchi in stile Akuma, per quanto mi renda conto che quelle sono necessariamente derivative dai giochi originali. A tal proposito potrei citare il caso di Kazumi, personaggio comunque originale, della quale uno dei linker migliori si esegue premendo b,f (per esempio il Tiger Demon’s Gate, b,f,2,1,4), che trovo abbastanza scomodo (sarà anche per via del tipo di joystick, ma tant’è).

L’unica pecca vera è la scarsità di costumi, che mi ha lasciato un poco deluso, mentre per Geese, Eliza ed Akuma (che ok, non è un DLC, ma è comunque un personaggio esterno) le possibilità di personalizzazione equivalgono a quelle dei personaggi regolari.

Insomma se siete appassionati come il sottoscritto di entrambe le saghe questo non ve lo potete proprio perdere.

Infine segnalo un ottimo video di combo che ho trovato su youtube e sul quale mi sto ancora esercitando, per tutti quelli che volessero approfondire.

Vedi articolo

Save Editor FF8

Di recente ho riscoperto la mia passione per Final Fantasy 8 grazie alla versione remastered di Steam. In realtà volevo rigiocare alla mia vecchia copia da PC, ma poi ho scoperto che non era più possibile installarla su computer a 64-bit (qualcuno suggeriva un’installazione in modalità provvisoria, per poi dover però correggere ben altri problemi!). Così mi sono messo alla ricerca di una soluzione ed ho scoperto che su Steam c’era una versione aggiornata e funzionante anche su Windows 10!

Vecchia copia da PC! Notare l’offerta per “internet gratis” con i vecchi modem 56k.

Adesso non starò ad approfondire i dettagli su questo gioco che amo profondamente (sì ok, quando ci giocai avevo anche una cotta per quel turbodisfattista di Squall), ma quando un gioco gira su PC inevitabilmente viene da chiedersi se ci sarà anche qualche modo meschino per crackarlo o modificarlo a proprio piacimento.

Ed ho scoperto che c’è! Ebbene sì, esiste già un programma perfettamente funzionante per modificare i file di salvataggio del gioco.

Il programma si chiama Hyne (1.9.2), ed è possibile scaricarlo in diverse versioni da Github.

Da quello che ho potuto testare funziona anche sulla versione Steam, e non appena finisco il gioco non mancherò di divertirmi con un po’ di OP.

Il programma è molto intuitivo ed offre una configurazione dettagliata tramite interfacce grafiche dedicate.

Una volta aperto il salvataggio (i salvataggi di Steam si trovano di predefinito nella cartella Documenti %USERPROFILE%\Documents\Square Enix\FINAL FANTASY VIII Steam\user_XXXXXX) ci si presenterà una schermata simile alla precedente, dove potremo selezionare il salvataggio che ci interessa.

Seguiranno una serie di schermate dalle quali sarà possibile modificare nei più piccoli dettagli le caratteristiche del gioco (io devo ancora giungere al garden di Galbadia)

Una volta fatto è sufficiente salvare il file. Consiglio naturalmente di tenere una copia di backup del file originale, per ogni evenienza.

Fonte: Hyne

Vedi articolo

Labirinto disegnato in PHP

Per gli appassionati di Pathfinder come me capita di fare il master e voler proporre qualche simpatico labirinto ai propri avventurieri. Online si trovano già moltissimi generatori di dungeon, però ho deciso di svagarmi un po’ questo sabato pomeriggio creando uno tutto mio in PHP.

Questo è il risultato (si rigenera ad ogni refresh della pagina):

Vediamo il codice sufficiente per ottenerlo:

Le impostazioni nell’esempio sono le medesime per ottenere l’immagine di sopra.

Vedi articolo