La lavagna elettronica Open Source: Nintendo Wii e LIM

http://wiildos.wikispaces.com/Pagina+iniziale

è la fine veramente. Questo progetto è per poter utilizzare il telecomando (attuatore) della Nintendo WII a mo di telecamera. In pratica per rilevare un punto luminoso in bassa frequenza (infrarossi) restituire il segnala via bluetooth al sistema (Linux), come se si trattasse del puntatore del mouse, o meglio di una tavoletta grafica, quindi scrivere nella lavagna. Il punto è illuminato da un diodo a bassa frequenza: una penna a infrarossi.

Il concetto è: usa un qualsiasi piano per proiettare la schermata del computer, e, sullo stesso piano, usa una luce a bassa frequenza per avere la posizione di un pennarello che scrive.

allego questa che trovate in http://wiildos.wikispaces.com/Lavagna+col+wiimote

imageWiildOS

Praticamente quello che nella Wii è tenuto in mano è ben fisso da qualche parte ed inquadra lo schermo. Viene fatta una calibrazione iniziale, quindi puntando con una penna led il segnale luminoso si suppone rimbalzi verso la telecamerina del WiiMote che lo invia al bluetooth.

Si suppone. Infatti. Ecco cosa si è fatto al Gruppo Linux Macerata il 27 Febbraio 2013 la sera, si è provato far funzionare il marchingegno prima su di uno schermo al plasma (scalda molto quindi i segnali infrarossi sono distorti), poi su di una parete.

Il responso è piuttosto negativo per l’esperimento, dopo diversi tentativi non si è riuscito a stabilire quale fosse il punto dove mettere la telecamerina per avere la migliore resa.

Il docente-relatore-o-chiunque-sia-alla-lavagna-elettronica (abbreviato: drocsale … ok, lascio docente) deve essere tra il ricevitore (WiiMote) e la parete (non può andare dietro), e il fascio luminoso deve essere “visibile” (visibile a chi vede gli infrarossi, quindi i gatti e il WiiMote). Le problematiche sono 2: posizione del ricevitore, implementazione della penna (effettività del segnale luminoso). Per la posizione abbiamo stabilito che deve essere piuttosto angolata, ma non troppo. Per la penna siamo rimasti ad un vago led rivolto al contrario sulla punta della penna laser di modo da essere visto sicuramente, MA questo costringe ad una posizione della mano fissa, anche se naturale in effetti. Il led della penna aveva un’ampiezza di 30°, se ne trovano di ampiezza 25° e forse anche meno, questo potrebbe essere un punto a favore di un funzionamento più effettivo: diminuendo l’ampiezza del fascio e mantenendo la potenza totale il punto dovrebbe essere più visibile. Certo? Non troppo. In realtà il fascio luminoso va a scontrarsi con la parete dopo pochi millimetri o anche meno, quindi una differenza di ampiezza avrebbe un cambiamento pressoché nullo. Altro discorso se si gira il led verso la il WiiMote.

Dalle prove fatte il sistema ha una buona sensibilità se il led è rivolto al WiiMote (rovesciando la penna), ma perde comunque di accuratezza con l’aumentare della distanza. Inoltre sembra che il driver carichi molto la CPU, problema questo se si pensa che tutto il sistema è concepito per risparmiare soldi: non si vuol certo spenderli per comprare un pc superpotente. Il problema potrebbe riguardare l’efficienza del software python, oppure essere intrinseco nella decodifica del segnale fornito da WiiMote.

Il relatore della serata e autore degli esperimenti è stato Andrea Bianchini.

(a docente non l’ho più usato?!? proprio vero che spesso i problemi li invento…)

(WiildOS è una distribuzione leggera basata su lubuntu che include di default il software per la lavagna. Live USB)

 

Achievo come CRM PHP. Pencil come wireframe editor.

Arriva una richiesta di aiuto su di un software, Achievo, che mi viene presentato come CRM. Effettivamente è un software per il project management open source e molto interessante. Non funziona e devo debuggare, purtroppo lo devo fare online perché non ho ancora predisposto un ambiente IDE … non ho predisposto Eclipse per farlo. Ma quello è il meno. Capita che fallisca all’interno di un ciclo sopra un array di oggetti polimorfici (o meglio su di un array di oggetti, per quel che conta in PHP). All’interno di questo ciclo viene chiamato il metodo che causa internal server error (tralascio il discorso sul perché sia sempre così maledettamente complicato avere i log di sistema), comunque ho usato un contatore per interrompere il ciclo al punto giusto ed individuare la classe dell’oggetto che falliva. Il tempo maggiore è stato aggirarsi per le classi senza conoscerne la struttura. È molto produttiva l’organizzazione ad oggetti, ma quando cerchi di seguira come un esecutore c’è rischio di perdersi, forse è il caso guardare la documentazione piuttosto che buttarsi subito a debuggare senza conoscere il software e la sua architettura.

Di altro faccio il wireframe di una pagina web usando Pencil di Evolus. Fin’ora avevo usato gliffy, ma, a dispetto di quanto pubblicizzato è ancora in flash, è a pagamento quando si vuole condividire un grafico, non è realmente migliore di Pencil, almeno non per le mie esigenze: condivido esportando in png, e forse non è tanto senzato permettere la modifica online, perché piuttosto non copiare il file e fare una propria versione?

Il PHP è pessimo sotto tutti gli aspetti

Arrivo a questa conclusione oggi, dopo tanto lavoro su Drupal, consulenze su framework come INDEXU, WordPress, CodeIgniter, usato Doctrine, avere sostenuto l’esame di Zend (ZCE PHP 5.3), ed in particolare lo studio approfondito del linguaggio e delle sue caratterstiche Object Oriented.

È pessimo dal punto di vista della sintassi. La sintassi non è qualcosa che determina l’efficienza di un linguaggio di programmazione, ma la produttività sì. La influenza nel senso che è decisamente brutto vedere tutti quei dollari, quando effettivamente non ha senso e non aggiunge informazioni. Il simbolo $ in PHP indica che il nome che segue è quello di una variabile, mentre i nome non preceduti da dollaro sono considerati delle costanti. Questo fa sì che se una costante non è definita, allora una sequenza di caratteri che non è una keyword rappresenta la stringa con i caratteri stessi. Ma questo genera un warning. Anche usare (leggere) una variabile non precedentemente definita genera un warning.

Ancora sulla sintassi. È decisamente brutto e fuorviante non sapere cosa è case-sensitive, cosa no. Le funzioni sono case-insensitive, mentre le variabili sì. Le keyword non lo sono, mentre le constants sì.

Programmazione ad oggetti. Qui ogni linguaggio ha il suo modo di vedere questa questione. Si dice più propriamente linguaggio orientato agli oggetti, perché si può sempre ricadere nella programmazione sequenziale o funzionale per questi tipi di linguaggi. Sotto questo aspetto PHP 5.3 non è pessimo, semplicemente ha una sua intepretazione. Che cambia col PHP 5.4, e cambia ancora con 5.5. Ma questo è piuttosto naturale. Ma di qui si vede che viene meno il fatto di avere a disposizione uno standard, visto che non è standard neanche con se stesso. E in più non tutti i fornitori di host supportano il php 5.3 perché, dicono, crea problemi con le versioni precedenti.

Template. Dentro un template si può usare la sintassi PHP per stampare delle variabili. Ma la sintassi è pessima, e spesso si definiscono dei sistemi per template, anche per garantire la separazione tra codice e presentazione, per via della audince dei programmatori che si accingono ad usare il php.

È nato per essere una soluzione semplice alla dinamicità dell’html.

Ha avuto successo perché tutti potevano scrivere del codice.

Ed è pessimo perché tutti possono continuare a scrivere del codice in php, anche se non ne abbiano la capacità.

In JavaScript tutti possono scrivire del codice? del codice pessimo sicuramente, ma c’è un limite. In PHP il limite all’orrore non ha fine.

Si hanno veramente vantaggi dalla diffusione e disponibilità? NO. ASSOLUTAMENTE NO.

Non sai mai se la tua applicazione PHP è supportata dal’hosting che devi andarti a cercare sbattendoti, solo perché stai usando una funzionalità messa lì 4 anni fa. 4 anni sono una eternità. Sei costretto a rimanere indietro tecnologicamente e culturalmente e vuoi sviluppare applicazioni innovative? Oppure vuoi sviluppare applicazione retrograde forse? Vuoi metter giù del codice vintage per far vedere quanto è “elegante”? È uno sport che ho praticato in passato, come ad esempio la mia idea di usare le ma le macro del preprocessore ANSI C e le funzioni longjump e setjump per simulare il try catch del C++ … figo no? e perché? Poi vai dal cliente (o dal datore di lavoro) e dici “beh, ci ho messo 2 anni in più …. ma vuoi mettere l’eleganza!

E tra l’altro una pezza è tutto fuorché elegante.

Pubblica amministrazione e Pdf firmati

Si passa così tanto tempo a lamentarsi e leggere dei lamenti altrui che non si nota mai se ci buone novità.

Scopro l’esistenza di questo sito, http://www.digitpa.gov.it/ , solo stamattina, e quindi di questo documento:

http://www.digitpa.gov.it/firma-digitale-formato-pdf

Mi interessa avere il supporto in Linux, e spero che sia sufficientemente semplice da usare. Trovo:

http://wiki.cacert.org/PdfSigning

con molti riferimenti a programmi che girano su Linux. La cosa più semplice da usare sembra

http://portablesigner.sourceforge.net

qui https://issues.apache.org/ooo/show_bug.cgi?id=47895 tra i commenti si dice che non è accettato in Germania.

Socket js

// INTERNET EXPLORER
var socket = new ActiveXObject(“Socket.TCP”);
socket.Host = “whois.internic.net:43”;
socket.Open();
// Send the query….
socket.SendLine(‘ajaxjs.com’);
// Wait for disconnect and output the buffer
socket.WaitForDisconnect();
Response.Write(“<blockquote><pre>” + socket.Buffer + “</pre></blockquote>”);
socket.Close();

Java Sun Plugin Ubuntu AMD64

sudo apt-get install sun-java6-bin
sudo ln -sf /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libjavaplugin_jni.so /etc/alternatives/mozilla-javaplugin.so
sudo ln -sf /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libjavaplugin_jni.so /etc/alternatives/firefox-javaplugin.so
sudo ln -sf /etc/alternatives/mozilla-javaplugin.so /usr/lib/mozilla/libjavaplugin.so
sudo ln -sf /usr/lib/jvm/java-6-sun-1.6.0.12/jre/bin/javaws /etc/alternatives/
sudo ln -sf /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libnpjp2.so /usr/lib/mozilla/plugins/

suggerito da  http://federicomoretti.name/2009/01/01/come-installare-java-a-64-bit-su-ubuntujaunty/