Piero V.

Mirror su OneDrive

Il problema

Una persona, già da diverso tempo, mi ha chiesto di aiutarla a mantenere un mirror delle cartelle importanti di un suo file server Linux sull’account OneDrive, siccome, con Office, lì ha 1TB di spazio.

Stiamo parlando di meno di 500000 file per una dimensione di circa 250GB, quindi non qualcosa di assurdamente grande, ma neanche qualcosa di proprio semplice da gestire.

Finora ho provato sia con rclone, un tool per eseguire operazioni su diversi provider cloud, in particolare di copia e sincronizzazione, sia con quello che è uno dei più diffusi client OneDrive nativi Linux, ma nessuno dei due è riuscito a gestire la cosa.

rclone deve essere uno strumento molto utile per molte situazioni, ma non per questa, perché penso che faccia costantemente richieste per verificare la struttura dei dati in OneDrive, anziché tenersi delle informazioni in locale, ma per questo motivo Microsoft lo rallenta costantemente. Invece il client OneDrive ha un database locale, ma magari a volte ci sono delle inconsistenze e si ferma, con delle eccezioni; in particolare mi sembra non gestisca bene l’essere case insensitive di OneDrive. … [Leggi il resto]

Python custom exceptions in C(++) extensions

Python is a nice scripting language, but it has the fame of being difficult to embed and interact with existing projects.

Until now, I have been able to embed it in the software I work on with pybind11 and Binder (half of my MS degree thesis is about that), I had some problems, but I was able to solve most of them. But recently I have experienced a problem that is quite uncommon on the Internet: declaring a new exception in a native (C++/C module) with some custom methods/properties.

The existing proposal

I quickly looked on the Internet for the problem. The Python C API makes creating an exception type possible with PyObject *PyErr_NewException(const char *name, PyObject *bases, PyObject *dict): the first parameter is the name of the exception, in the modulename.ExceptionName format, the second parameter is the base or bases of the new exception (can be a PyType, or a tuple of PyTypes), and a dictionary of custom members and methods for the new type.

However both the second and third parameter can be left to NULL: in this case the new type will inherit from PyExc_Exception and will not have customizations. This is the majority of the cases, and by a search on the CPython code I could not find any reference that could use as an example on how to use the dict parameter. … [Leggi il resto]

Alcuni appunti su Bullet e raylib

In passato mi è già capitato di parlare di Bullet, lo avevo usato qualche volta tanto tempo fa, tanto che ne avevo fatto anche due-tre articoli nel 2012!

Da allora molte cose sono cambiate, tranne le API di Bullet, che almeno superficialmente sono più o meno sempre quelle, e l’interesse che sporadicamente rinasce in me per quella libreria.

Una cosa che è cambiata è che ho cominciato a lavorare su un software di modellazione 3D, e in particolare mi occupo della parte dei plugin, di fare esempi a scopo di documentazione e cose del genere. Così avevo avuto l’idea di provare a scriverne uno di integrazione con Bullet.

L’idea alla fine non è partita, ma a me era rimasta la voglia di sperimentare un po’ con questo motore, e in particolare anche vedere come si comporta con la parte di softbody.

Così nelle ultime due settimane ho un po’ lavorato a questi esempi e avevo l’idea di farne anche alcuni carini, ma mi sa che metterò un po’ in pausa l’idea, quindi intanto volevo condividere qui alcune delle cose che ho imparato. … [Leggi il resto]

WiFi lento su Oneplus One

Negli ultimi tempi avevo accumulato un po’ di app che non mi sarebbero più servite, quali applicazioni per i treni di 3 paesi diversi, app per alberghi e aerei, quindi, sfruttando anche il periodo di calma con le ferie, ho deciso di fare pulizia a modo mio: cambiando ROM e aggiornando il mio vetusto Oneplus One ad Android 10/Q.

La cosa non è stata proprio indolore: la prima ROM che ho provato aveva problemi con le gestures di Q, la batteria durava pochissimo, dovevo caricarlo anche due volte al giorno, e il solito problema del WiFi limitato a pochi megabit/s.

Quello della batteria si è rivelato essere un problema collegato alle Gapps: il Google Play Services era la principale causa del consumo di batteria e, fortunatamente, cambiando di nuovo ROM (con MSM Xtended) l’ho risolto. Ma prima di risolverlo, ero quasi arrivato al punto di cambiare telefono, la mia unica speranza era quella di vedere come sarebbero stati i consumi una volta tornato al lavoro.

Quello del WiFi invece mi dava proprio fastidio, anche perché appena installata la ROM non si era verificato e mi ero intestardito a tal punto che ero disposto ad accettare solo un grosso bug: o il WiFi, o la batteria. … [Leggi il resto]

Disconnessioni con Atheros AR9485

Da alcuni mesi ho un bug decisamente antipatico con il WiFi nel mio portatile ASUS N550, dotato di una Qualcomm Atheros AR9485.

La scheda ha sempre funzionato abbastanza bene, viene gestita dal leggendario driver ath9k, uno dei migliori driver prima dell’arrivo di 802.11AC, anche se comunque il mio modello di scheda non è mai stato considerato uno dei migliori.

Ad un certo punto, però, ho cominciato a riscontrare continue disconnessioni, o in alcuni test con wget e altri computer della LAN, riscontravo un brusco calo della velocità di download fino al fermarsi dello stesso.

In particolare, su dmesg riscontravo questo errore:

[   65.582958] ath: phy0: DMA failed to stop in 10 ms AR_CR=0x00000024 AR_DIAG_SW=0x02000020 DMADBG_7=0x00006100
[   66.744578] wlp4s0: authenticate with e8:de:27:xx:xx:xx
[   66.764530] wlp4s0: send auth to e8:de:27:xx:xx:xx (try 1/3)
[   66.769890] wlp4s0: authenticated
[   66.771192] wlp4s0: associate with e8:de:27:xx:xx:xx (try 1/3)
[   66.775556] wlp4s0: RX AssocResp from e8:de:27:xx:xx:xx (capab=0x431 status=0 aid=6)
[   66.775668] wlp4s0: associated

Come potete vedere, è capitato a solo un minuto dal boot. … [Leggi il resto]