C# Visual Studio vs Python e la pace dei sensi

Dopo aver fatto un po’ di esperienza con python mi sono buttato su c#. Dopo aver provato vari framework grafici con python i vari gtk, tk, ecc, ho concluso che lo sviluppo di applicazioni grafiche è un casino. C# è perfetto per le applicazioni grafiche (e non solo),  ci sono strumenti a creare soluzioni complesse e graficamente accattivanti (vedi WPF). Se python permette di cazzeggiare alla grande a causa del incapsulamento quasi inesistente e dell’erditarietà multipla, con c# ci sono concetti da assimilare un po’ più complessi. Di base i concetti sono sempre i magnifici tre: incapsulamento, ereditarietà e poliformismo e se sapete di cosa sto parlando i problemi saranno pochi.

La differenza veramente importante tra c# e python  credo che risieda nell’ ereditarietà. In C# niente ereditarietà multipla per le classi che è invece concessa per le interfaccie. L’erditariètà multipla non mi è mai dispiaciuta e in python l’ho usata di buon grado. Il fatto di non avere più a disposizione questo strumento deve per forza di cose farci cambiare il modo di fare progettazione e inizialmente ci può lasciare spiazzati.

Altre differenze riguardano l’incapsulamento quindi l’accesso ai tipi. Non si fa troppa fatica a districarsi tra i vari public private protected ecc. Modi per fare poliformismo ce ne sono a bizzeffe.

Visual Studio è un IDE straordinario, utilissimo l’ object viewer che permette di scoprire praticamente tutto di qualsiasi assembly lo uso praticamente sempre. E’ possibile realizzare il diagramma delle classi da quelle esistenti, figata.

Per concludere per me è stato più complicato sopperire a quello che non c’è ovvero l’ereditarietà multipla delle classi. Per il resto ci sono davvero gli strumenti per fare di tutto.

Consiglio per gli acquisti: C# 6 Guida completa di Antonio Pelleriti. E’ il libro con cui mi sto formando e tutte le funzionalità sono spiegate egragiamente. Forse avrei preferito un approfondimento maggiore su come intrecciare in modo corretto tutta la marea di roba che mette a disposizione questo linguaggio, compito che ho sopperito con il learning by doing e cercando caso per caso sul web.

Pubblicato in C# | Lascia un commento

Debian 8 Jessie RAID 1 software: boot di un sistema con RAID 1 compromesso.

Il riavvio di un sistema Debian 8 con raid software compromesso non funziona. La causa è in uno script che viene eseguito al boot da initramfs che in caso di errori nel raid non provvede a risolvere il problema ma si limita ad un “failed to assemble all arrays”. Si risolve tutto con questa patch:

cd /etc/initramfs-tools/scripts/local-top
cp /usr/share/initramfs-tools/scripts/local-top/mdadm .
patch --verbose --ignore-whitespace <<'EndOfPatch'
--- mdadm
+++ mdadm
@@ -76,7 +76,15 @@
   if $MDADM --assemble --scan --run --auto=yes${extra_args:+ $extra_args}; then
     verbose && log_success_msg "assembled all arrays."
   else
-    log_failure_msg "failed to assemble all arrays."
+    log_warning_msg "failed to assemble all arrays...attempting individual starts"
+    for dev in $(cat /proc/mdstat | grep md | cut -d ' ' -f 1); do
+      log_begin_msg "attempting mdadm --run $dev"
+      if $MDADM --run $dev; then
+        verbose && log_success_msg "started $dev"
+      else
+        log_failure_msg "failed to start $dev"
+      fi
+    done
   fi
   verbose && log_end_msg

EndOfPatch
update-initramfs -u

La fonte della soluzione è questa.

Pubblicato in Senza categoria | Lascia un commento

Debian 8 Jessie: disabilitare l’ avvio automatico dei gnome.

Per disabilitare l’ avvio automatico di gnome, o di qualsiasi desktop, bisogna disabilitare il login grafico gdm3. Grazie a (per colpa di) Systemd il comando da lanciare sarà:

# systemctl set-default multi-user.target

Per il momento ignoro il significato di tale comando, so solo che funziona. Prima o poi riuscirò a capirci qualcosa di questo Systemd perchè vuoi o non vuoi questo sarà lo standard.

Pubblicato in Senza categoria | Lascia un commento

Raspbian su Banana PI: impostare la tastiera italiana.

Aprire il file /home/bananapi/.profile e aggiungere la riga:

setxkbmap it

Pubblicato in Senza categoria | Lascia un commento

ESP8266 IoT again #2: firmware alternativo NodeMCU ovvero interprete LUA.

Come già detto il modulo wifi ESP8266 è molto di più di un modulo wifi in quanto è un chip che contiene al suo interno un microcontrollore e un modulo wifi, tutto in uno. Il microcontrollore insieme al suo firmware, è il ponte tra il modulo e il resto della circuiteria. Di default, l’ ESP8266 viene venduto con un firmware che permette la gestione del wifi e dei socket mediante un set di comandi AT inviati al modulo via seriale. A queste condizioni, serve un altro microcontrollore per gestire il modulo con un firmware che gestisca i comandi AT. Questo approccio, seppur funzionante, pone appunto il limite di dover utilizzare un altro microcontrollore. Fortunatamente la programmazione del microcontrollore interno all’ESP8266 è diventata semplice grazie al firmware alternativo open source NodeMCU. Grazie a questo firmware, il modulo ESP8266 diventa una sorta di Arduino. Quelli che in arduino chiamiamo sketch, in NodeMCU sono degli script in linguaggio LUA. Chi è già pratico di programmazione non avrà problemi ad apprendere questo linguaggio. Da notare che con il firmware NodeMCU, si dispone immediatamente di un interprete LUA semplicemente collegando il modulo via seriale: un prompt del linguaggio LUA proprio alla stregua di Python, PHP, ecc. I punti necessari per poter iniziare a sviluppare progetti con questo approccio sono: inserire il nuovo firmware nel modulo ESP, utilizzare l’IDE ESPlorer. La procedura per flashiare l’ ESP8266 con windows è spiegata qui mentre per linux occore utilizzare esptool, tutto chiarito qui. Credo che NodeMCU sia la soluzione se non definitiva ma al momento migliore per usare al massimo i moduli ESP8266.

Pubblicato in Senza categoria | Lascia un commento

ESP8266 IoT again #1: modifica del firmware originale.

L’economico e microscopico modulo wifi ESP8266 dispone, di fatto, di un microcontroller e di un modulo wifi. Il firmware contenuto nel micro è il software che permette di interfacciarsi al modulo wifi via seriale, è quindi una sorta di ponte. Di default, il firmware mette a disposizione un set di comandi AT con la quale è possibile stabilire una connessione ad un router, aprire connessioni TCP o UDP sia client che server, ecc. Il firmware di default è molto criticato, semplificando esiste di meglio. Fortunatamente la comunita è molto attiva e diversi firmware alternativi stanno venendo fuori. Per aggiornare il firmware ci servirà un interfaccia hardware molto semplice, spiegata abbondantemente qui. Per quanto riguarda il firmware modificato, consiglio di dare un occhiata a questo.

Pubblicato in Senza categoria | Lascia un commento

Considerazioni estemporanee sull’ Internet of Things.

Internet delle cose, si ma cosa? Nel senso, cosa creare? Parrebbe che il limite sia solo la fantasia, credo che il limite sia l’ effettiva utilità. Girovagando nel web si trova qualche implementazione che però per la vita di tutti i giorni non hanno un effettiva utilità. L’invenzione effettivamente utile è quella che genera una comodità in più. Ho trovato ad esempio un sensore che ti ricorda di aver lasciato su la tavoletta del wc, nella vita di tutti i giorni ci sono già troppe rotture, anche la tavoletta del cesso, e no! Ok funziona ma è inapplicabile. I vari sensori e sensorini, attuatori ecc, hanno bisogno di energia per funzionare: mi sono appena ricordato che devo cambiare la batteria del sensore della tavoletta del wc. Quindi il problema energia. Due giorni fa giunge la notizia che i finlandesi abbiano inventato una nuova tecnologia per stampare pannelli solari su un supporto di 0,2mm quindi già si pensa a una parta da parati che genera energia, sarà questo il futuro?

Pubblicato in Senza categoria | Lascia un commento