“Pedrone” Part #4 – drive it using web browser and WiFi

This is the last step. “Pedrone” is now complete. Please, remember that this is just a toy, you can’t use it to discover any sort of life on Mars ! I wrote a small Android application that acts like a mini web-server receiving commands from a standard web browser. I realized a demo video, capturing the screen while driving Pedrone with my web browser (SeaMonkey). Here it is:

pedrone3 di robotop

The Android application is relatively simple. It receives commands as “get” requests and, depending on the parameters, outputs the sound sequence to communicate with the microcontroller. Acting this way, the Pedrone executes the requested movement. After moving, the application takes a picture of the new situation (position) and gives the answer to the browser, that is still waiting. The process is a little bit slow, ‘cause the full path for the command is: 1) you click a “button” on the navigation map on the browser 2) an internet request is sent to the mini webserver 3) the webserver executes the command and send a sound sequence to the microcontroller 4) the microcontroller decodes the command and runs the motors for half second (short move) or one second (long move) 5) the application takes a picture 6) the application sends back an answer to web browser, changing the name of the image to force the browser to reload (no-cache) 7) the browser sends a new “get” to download the updated image. A screenshot of the Android application is here:

Screenshot of the Android App Pedrone-Rx3 (click to enlarge)

Screenshot of the Android App Pedrone-Rx3 (click to enlarge)

If you want, you can freely download and install this App from the Google Play Store.

For the mechanical part, I used the Lego Technic (my “children” have given me when they left university) with addition of some small screws and strong glue to create the adapters from Servo-motors to wheels and from structure to Servo-motors. In the following picture you can see how it was realized.

Three different views of "Pedrone" (click to enlarge)

Three different views of “Pedrone” (click to enlarge)…

The microcontroller circuit is not changed, look at Part #2 for complete schematics. The firmware has some changes. You can download the C source and the compiled HEX packaged in a zip file from the link : pedrone3x.zip ; the password to unzip is : eficara. Remember to set the correct fuses configuration when burning the micro. You can read such configuration in the first lines of the C source file. Here is the full C source list.

Finally, note that you can drive the “Pedrone” on your local net using a PC / Tablet / Smartphone connected on the same WiFi subnet, but you can also control it from everywhere in the world if you set your modem / router with the following rules:
1) force the router to assign a fixed IP to the MAC address of the WiFi interface of the smartphone you use as “receiver”, es: assign local IP to MAC address 11:22:33:AA:BB:CC; this way the “Pedrone” smartphone will have every time the same IP on your local network.
2) modify the router’s firewall rules to accept incoming connections to port 8080, redirecting the requests to the IP assigned to the “receiver” ( in the example)
3) get a free account on some Dynamic Dns service, as no-ip or dyndns or others and set the relative username and password in the router’s Dynamic Dns settings.
After this, you can reach “Pedrone” from everywhere in the world (if there is an internet connection !) with a standard web browser, writing the address http://my-assigned-dynamic-ip.com:8080 in the navigation bar.

Historical notes:
The idea for this project was born in August 2009, when I was in France for a sabbatic time and my smartphone was equipped with WM6. I realized a circuit and a couple of applications to test the motor driving using DTMF tones. After that, I published a video on YouTube describing the general concept. After some months I removed the video ‘cause Google acquired YouTube. I think that too much power in the hands of a single subject is very dangerous, but now that all the world is fulfilled by Android devices, it’s impossible to stop the “Masters of Universe”… Anyway, the original video is now stored on “DailyMotion”. If you want, take a look here:

dtmf_remote di robotop

“Pedrone” Part #3 – 16 commands using sound protocol

This is the third step. The previous version of the firmware was able to recognize three tones and the demo used a single tone for a unique operation. Now, I used a “protocol” to send multiple tones and create 16 possible commands. I used Audacity, a fantastic sound editor, to create the sound sequences. Here is an example:

The sound file for command 1011

The sound file for command 1011

A “command” is composed by a “start” tone (1200Hz) and four bits starting from the most significative. The “ones” are 1600Hz, while the “zeroes” are 800Hz. In the picture is represented the code 1011. A full “transmission” is always 500mS. Every sound has 50mS duration, followed by 50mS pause. For sound file output, I used the format “ogg” because is compatible with Android and iOS smartphones.

To test the firmware, I wrote a small application on Android smartphone. This is a screenshot of the application running:

Screenshot of Pedrone-Rx2 application

Screenshot of Pedrone-Rx2 application

The three buttons in the middle are just for compatibility with the old version of the firmware, while the cursors at the right and at the left are the controls for the motors. There are five positions for each motor : Fast Forward, Slow Forward, Stop, Slow Backward, Fast Backward. So, at this moment, I used only 10 of the 16 commands available. The App was not published on Play Store because is just for testing purposes, but if you want, you can download it and install from this link: Pedrone-rx2.apk .

The schematic of electronic circuit has not been modified, while the firmware has been improved. If you want to load the C source and the HEX file to burn the micro, both of them are packaged in a zip file that can be downloaded from this link : Pedrone3.zip (use password eficara to unzip) . Here is the full list of the C source file ; the hex comes from compilation with IAR V5.50.0. To burn the micro, use the fuses configuration that is described in the first lines of the C source.

“Pedrone” Part #2 – connecting to smartphone

After the Part #1, with the Servo Motors control program, now I connected a smartphone to the circuit. The software on the phone (in the next future) will do all the Internet job, receiving commands and sending pictures. Anyway, a connection is needed to control the hardware (motors) for moving “Pedrone” via web commands. A very simple solution is to use the headphone jack and send some tones to activate the motors. As first option, I decided for one DTMF tone decoder, but after some considerations, like the absence of noise on direct connection, I decided to use single tones. The hardware is very simple (stereo version is shown, but you just need one channel) :

Particular of the schematic (click to enlarge)

Particular of the schematic (click to enlarge)

This circuit is a mixer of Left and Right audio channels coming from the headphones jack of the smartphone, followed by protection resistor and diodes to safely connect to the ICP1 pin of the micro ATmega48. The ICP1 is the input capture pin of Timer 1 (TMR1). I used such peripheral to measure the period of incoming frequency. There are three frequencies: the first is considered as “start” signal and the other two as “0” and “1”. The protocol isn’t still implemented (will follow soon). At this moment, the test program just recognizes the frequencies and does a programmed action for anyone of them. The frequencies are 800Hz, 1200Hz end 1600Hz. All the tones have 50 mS duration. The complete schematic (including the servo motors outputs) is in the following picture

The complete schematic (a PDF version is in the downloadable project's zip file) - click to enlarge

The complete schematic (a PDF version is in the downloadable project’s zip file) – click to enlarge

If you are interested in the C source list and in the hex file to burn into the micro, you can download both of them (plus the schematic PDF), from this link: Pedrone2.zip
(password for zipped file: eficara)

There is a small video to show the program running. The application for Android smartphone has not been published on Play Store, because it’s just for testing purposes, but if you want you can download the apk directly from this link: Pedrone-rx.apk.

Pedrone part 2 – connecting to smartphone di robotop

Here is the C source list for the test program (compiled with IAR V5.50.0).

“Pedrone” Part #1 – Trimming stop point on modified servo

I am going to build my new “Pedrone” (Pedestrian Drone), a device that can be remotely controlled by smartphone, running at home. I did the same in 1998, now it’s time to make one better. In the picture below, you can see the old model. The internet server was set on the home PC and the data exchange with the rover was done by means of 866 MHz transceivers using half-duplex packets communication. The “camera” was a GameBoy gadget modified for the purpose, giving a fantastic 128*128 pixels gray scale image at every command received from the Internet.

My first Rover, built in 1998, controllable via a standard browser on the Internet.

My first Rover, built in 1998, controllable via a standard browser on the Internet  (click to enlarge)

For the new model, I decided to use a couple of cheap Servo-Motors, purchased on ebay at VERY low price. The servo motors have a good torque and so are very efficient. The second advantage of servo motors is that they just require a single microcontroller output to be driven in both directions. Obviously, a servo motor has to be modified, because its purpose is to move in the arc of 180° (someone more, some other less). I want a continue rotation to drive a wheel in both directions, plus a stop condition. I have written a small test program on Atmel ATmega48 microcontroller to generate a waveform to control the motor, then I have modified the servo substituting the feedback potentiometer with a couple of smd fixed resistors, both of the same value. Connecting the servo to the microcontroller, I had a problem: no one of the values that can be set in pulse width gave a real STOP condition. One value gave slow rotation clockwise, one other slow rotation counterclockwise. This problem can happen if the center tap of the two resistor is not exactly the median point, or because the pulse width is not exactly 1.5 mS or for the combination of the two things. Actually, my solution for controlling 2 motors with a single 8 bit timer (TMR0) using two output compare registers (OCR0A and OCR0B) gives me a step factor of 64 uS on a full range of 256 * 64 uS (the total repetition time is 16.384 mS, that’s inside the specs for servo-motors). The classical 1.5 mS center point can’t be set, cause 1500uS / 64uS is not an integer value (23.4375) and then we have to decide if the center point is 23 (*64uS = 1.472mS) or 24 (*64uS = 1.536mS). In any case the stop position depends upon the feedback supplied to the motor controller by the potentiometer (in our modified servo, the couple of SMD resistors with the same value).  To solve the problem, I decided to use an external multiturn trimmer (in place of the smd resistors) to trim the correct stop point. In the picture below you can see that I connected three wires on the pads where the potentiometer was originally soldered.

Servo circuit. Internal potentiometer has been disconnected

Servo circuit. Internal potentiometer has been disconnected (click to enlarge)

I modified the slot in the plastic cover to have enough space to go out with the 3 additional gray wires, then I soldered a multiturn trimmer to set the stop point. Note that the internal potentiometer was 5KOhm, but I used a 10KOhm trimmer without problems. Anyway, the best solution is to measure the resistance of the original potentiomenter and then buy a 10 turns linear trimmer of such value.

The 10 turn trimmer soldered on gray wires

The 10 turns trimmer soldered on grey wires (click to enlarge)

Finally, I used a biadhesive tape to fix the trimmer on the case of the servo-motor.

Trimmer fixed on the Servo-motor case

Trimmer fixed on the servo-motor case (click to enlarge)

Alternative version: using 2KOhm trimmer, a couple of resistors and a filtering capacitor makes easier setting the stop point.

Modified circuit (1KOhm resistors used, but 1.5K is better) - click to enlarge

Modified circuit (1KOhm resistors used, but 1.5K is better) – click to enlarge

Well, after connecting the servo to the microcontroller prototype board (using a default pulse width for stop position), I rotated the trimmer near its middle position, finding the exact point for motor stop. Actually, with my microcontroller’s test program, the stop point is at value 22, while the full speed in one direction is 15 or 30 in the other.

Driving two modified servos di robotop

My prototype board (the one visible in the video) has this schematic:

Schematic diagram of the prototype (click to enlarge)

Schematic diagram of the prototype (click to enlarge)

The C source file, the HEX object to burn the micro and the schematic in PDF format can be downloaded in the zip file EF190Pedrone.zip (when you unzip it, give password: eficara). Here is the C source listing compiled with IAR V5.50.0.

SeaMonkey: my way to backup

In my previous post, I suggested to create a backup of your SeaMonkey’s options before to try a change. Ok… but how can I save my data ? I don’t know if there is a simpler way or if my way is a “well known” one, but this blog was born just to collect a series of small notes that can be forgotten (by me) if not stored anywhere. So, please remember: this note is just for my personal use… if you want to try it on your computer, you’re free to do it, but you assume the duty of everything can go wrong.

I love SeaMonkey… it’s a browser, a mail client, and also an IRC client, if you like to chat. It’s free, it’s fast, it’s “light” and (in my opinion) it’s very easy to backup. Look at this screenshot taken on Win7 OS (click on miniature to enlarge):

0125_pic02The backup process is very simple. Search for the folder of your user account (on my computer, the folder is under /Users/EF) ; when found, simply right click on folder -SeaMonkey- and select “send to compressed folder”. The result will be the file SeaMonkey.zip. This file is a complete backup of all your Browser / Email and (I suppose, ‘cause I don’t use it) IRC accounts. I tried to transfer all my accounts (email, browser’s preferences, passwords, buffers) to another computer running the “good old” Win XP OS. The only difference is the name of the folder (obviously, you would have a running copy of SeaMonkey on that XP computer). Look at this picture. The file path bar shows “Administrator” in place of “EF” and “Application Data” in place of “AppData”… but it’s always me 🙂

0125_pic01You can simply copy your SeaMonkey.zip file, saved under Win7, onto this directory. After that, rename the existent SeaMonkey folder with something like: “SeaMonkey-xp” and then unzip the compressed file ; this will produce a new -SeaMonkey- folder that’s is exactly the copy of the one you have on Win7 PC. Now, opening the SeaMonkey application, will give you a full copy on XP of all your (browser and email) data copied from Win7. Obviously, you can do the same on Win7 ; the zipped file is a real back-up. I use this way to save my data… may be there is one better or similar, it doesn’t matter for me ; this is “just the way I did it”.

About Win7, may be you cannot find the directory where the SeaMonkey data is saved, due to the “hidden” flag of such directory. I suggest to make all the folders visible, using the setting shown here:

0125_pic00The picture is taken on my PC, that runs Italian as default language. Run Control Panel, then search for “show hidden files and folders” and click the check box. The AppData folder will be visible, after that.

Scrivere e testare App per iPhone e iPad su Windows

Aggiornamento – 11 Maggio 2016
Con mio grande dispiacere, devo aggiungere una nota importante a questo post. La mia App per iPhone scritta con lo strumento DragonFire SDK descritto nell’articolo e pubblicata su Apple Store tramite Zimusoft, è sparita qualche giorno fa, insieme a tutte le altre applicazioni free pubblicate da diversi utenti che hanno comprato il software di sviluppo. Ho scritto due email alle persone della Zimusoft con cui ero stato in contatto e altre due al supporto on-line, senza ottenere alcuna risposta. L’ultimo aggiornamento del loro sito web sembra risalire al 2014. A questo punto, dovrò rifare tutto di nuovo, ripartendo da zero e usando, ovviamente, un altro tool di sviluppo. Lo strumento acquistato solo due anni fa è diventato del tutto inutile. Peccato, tecnicamente era eccellente, ma le applicazioni “free” pubblicate tramite Zimusoft, scompaiono insieme alla Zimusoft. Lascio l’articolo on-line come descrizione di un buon modello di sviluppo, ma al momento attuale non posso consigliarlo a nessuno.

Scrivere e testare applicazioni per iPhone usando un computer Windows ? Si può fare. La via naturale per sviluppare applicazioni (App) per iPhone o iPad è nota: bisogna avere un computer Apple, installare il software di sviluppo Xcode, studiare il linguaggio Objective-C e spendere 99 dollari l’anno per “fregiarsi” del titolo di sviluppatore Apple. Una via costosa, inutilmente limitativa, un modello di sviluppo non al passo con i tempi. Un’alternativa possibile è quella di scrivere applicazioni che non sono altro che pagine web, con un massiccio uso di Javascript (cosa possibile su ogni piattaforma, come ho evidenziato in alcuni vecchi articoli del mio blog). Naturalmente, quest’ultima soluzione ha i propri limiti e non sempre permette di raggiungere gli obiettivi prefissati. Di recente, un amico mi ha chiesto se potevo scrivergli un’applicazione su smartphone per controllare via internet dei dispositivi elettronici situati nella sua azienda; gli ho risposto: “non c’è problema” e in pochi giorni ho scritto un bel programmino per Android ; ho salvato l’Apk su un mio sito ed ho dato al mio amico il link per scaricarlo con il suo smartphone Samsung, per poi eseguire l’installazione “da fonti sconosciute”. Il mio amico ha seguito le istruzioni e poi mi ha chiamato e mi ha detto: “Che bellezza, proprio quello che volevo”, ringraziandomi moltissimo. Poi, dopo qualche giorno, mi ha richiamato dicendo: “C’è un piccolo problema… ho fatto vedere il tuo programma a diversi miei clienti e sono tutti entusiasti, però alcuni hanno lo smartphone Apple. Non puoi scrivermi lo stesso programma anche per iPhone ?”.
Ho risposto al mio amico che non uso nessun dispositivo Apple dai tempi in cui programmavo (con successo) in assembler sul validissimo processore 6502 del mitico personal computer Apple ][ . “Però”, gli ho detto, “mi informo e poi ti faccio sapere”.
Ho iniziato, quindi, una ricerca in internet sull’argomento dello sviluppo di applicazioni per iPhone ed ho immediatamente percepito che la cosa non era affatto semplice. Ci sono diversi tool di sviluppo, ma alla fine, per compilare ed eseguire qualcosa su uno smartphone, ci vuole una macchina Apple. Un po’ scoraggiato, ho provato ad installare le versioni di prova di alcuni software, ma una volta installati, questi mostravano i propri limiti. Dopo aver provato diversi IDE e tool di sviluppo, ho infine trovato un sito dove c’era uno strumento che prometteva di darmi tutto ciò che serviva a sviluppare la mia applicazione sotto Windows, usando l’IDE di Visual C++ (quest’ultimo anche edizione “express”, gratuita da Microsoft) e di testare l’applicazione immediatamente su un simulatore di iPhone. Questo strumento si chiama DragonFireSDK. Ho cercato una versione “demo” per fare qualche prova, ma non c’è 🙁 bisogna comprarlo e costa (per la versione iPhone) 99,95$ (circa 80 Euro). Tutto sommato, considerando quanto costerebbe comprare un computer Apple e pagare la licenza di sviluppatore (più il tempo necessario per impratichirsi dell’Objective-C e dell’IDE Xcode) mi è sembrato un prezzo ragionevole, anche se non proprio “cheap”. Ho allora chiamato il mio amico e gli ho detto: “Ho trovato uno strumento che mi permetterà di sviluppare rapidamente l’applicazione anche per gli smartphone Apple; devi comprare questo software” e gli ho indicato il link per l’acquisto on-line. Lui ha inviato il pagamento e gli è arrivata una email con un collegamento per il download. A prima vista, pareva una fregatura… poco più di 7.7Mbytes di roba (quasi 13$ a MB !) e nessun eseguibile tipo IDE… Sudori freddi 🙁 poi una seconda lettura di tutte le FAQ e dei suggerimenti proposti nel sito, mi ha tranquillizzato.  Per usare questo tool, si deve avere un Visual C++ installato sul proprio computer; è un prerequisito assolutamente obbligatorio. Ho chiesto al mio amico se aveva un portatile con installato un Visual C++ qualsiasi e lui mi ha risposto di sì, c’era un vecchio portatile con WinXp e VisualStudio 2005. Ottimo, allora installiamo il DFSDK (DragonFire SDK) su quella macchina, così me la posso portare a casa per lavorarci con tranquillità. Nel giro di due settimane ho “convertito” l’applicazione scritta per Android in una “App” per iPhone ed ho potuto installarla su un dispositivo (un iPhone 3GS, non jailbroken) e testarla con piena soddisfazione. Vediamo ora quali sono i passi necessari per scrivere / compilare / installare una App su un dispositivo iPhone, usando solo ed esclusivamente un computer con sistema operativo Windows e DragonFireSDK.

Allora, eseguiamo il file SetupDragonFireSDKV2_2.exe che abbiamo scaricato dal link dopo l’acquisto e poi andiamo ad esplorare la cartella nella quale è stata effettuata l’installazione. Troveremo una struttura fatta così:


Figura 1:  la cartella d’installazione di DragonFireSDK

Ora apriamo la cartella Samples e troveremo una utilissima serie di esempi:


Figura 2:  la cartella Samples

La via migliore per fare pratica, è aprire uno degli esempi, compilarlo ed eseguirlo sul simulatore di iPhone locale. Questo simulatore, secondo me, vale da solo il prezzo del pacchetto software. Avrete la possibilità di testare il programma completamente sul vostro PC, prima di effettuare una compilazione on-line per poi avere finalmente l’ App installata sul vostro autentico iPhone (nota bene, un iPhone originale, senza dover effettuare nessuna operazione di jailbreak).

Bene, procediamo e creiamo una directory di lavoro sul disco, per esempio: C:\iProgetti ; all’interno di questa directory copieremo la cartella MyFirstApp che si trova su C:\DragonFireSDK. Facciamo un’operazione di “copia” e non “sposta” per tenerci un originale che sarà utile per iniziare nuovi progetti. A questo punto apriamo la cartella C:\iProgetti\MyFirstApp e ci troveremo davanti questa situazione:


Figura 3:  la cartella con la nostra prima applicazione

In base ai prerequisiti necessari al funzionamento di DFSDK, dobbiamo avere Visual C++ di Microsoft installato, quindi cliccando sul file MyFirstApp.sln si aprirà il progetto completo. Nell’immagine sottostante trovate uno “screenshot” del programma (cliccare l’immagine per una visione ingrandita).


Figura 4:  l’ambiente Visual C++ con il file App.cpp aperto

Ora, se clicchiamo la freccetta verde del “run”, vedremo apparire il simulatore di iPhone, a sinistra dello schermo. L’applicazione MyFirstApp è “vuota” e quindi non ci sarà niente di speciale da osservare, ma a questo punto è compito vostro “riempirla” con il vostro primo progetto. Qui sotto trovate lo screenshot dell’IDE di Visual C++ con il simulatore iPhone in funzione (al solito, cliccare l’immagine per ingrandirla).


Figura 5:  l’ambiente di sviluppo in fase di esecuzione del programma. Appare il simulatore di iPhone.

DFSDK è stato pensato principalmente come strumento di sviluppo per giochi. La ragione di questo orientamento credo sia abbastanza evidente: un gioco divertente ha molte probabilità di diventare una buona fonte di guadagno per uno sviluppatore, molto più di una qualsiasi altra applicazione. Però DFSDK non è solo uno strumento per creare giochi, anzi, la mia prima applicazione non ha nulla a che vedere col settore ludico. E’ una tastiera con display che interagisce via internet con dispositivi di home automation. L’impostazione “gioco”, però è da tenere ben presente anche mentre si sviluppa qualcosa di diverso. Come ogni sviluppatore di giochi sa, ogni parte della grafica deve essere creata dall’autore, non esistono “cibi precotti”, ogni dettaglio deve essere pensato e prodotto in funzione del progetto grafico dell’intera applicazione. Quindi, ogni “form”, ogni “bottone”, ogni dettaglio saranno unici, personalizzati, non i soliti bottoni pre-stampati di un editor GUI standard. Al momento non esiste uno strumento integrato in DFSDK per realizzare rapidamente una interfaccia GUI. Se però date un’occhiata al forum, c’è qualcuno che ha creato un “tool” esterno per generare queste maschere; c’è una versione demo gratuita oppure una più completa a pagamento. Io non ho un’esperienza diretta di questo tool, ma se volete informazioni più dettagliate, questo è il link. Personalmente, per disegnare pulsanti, form, logo eccetera, mi avvalgo di uno straordinario strumento (free) on-line che ha una notevole potenza e un’eccezionale facilità di utilizzo. Si tratta di Cooltext. Uso questo strumento da lungo tempo e trovo sia pratico, facile, disponibile su ogni PC (essendo on-line). Si possono creare molti elementi grafici e il file di output è sempre un PNG, quindi con le trasparenze necessarie per organizzare forms e pulsanti (suggerimento: iniziate con lo stile “Plain”). Una delle caratteristiche dei pulsanti che si possono creare, è il comportamento che devono avere in caso di “mouse over”. In pratica, per ogni pulsante disegnato si possono avere due immagini, una con l’effetto “non premuto” e l’altra con “premuto”. Queste due immagini sono essenziali per lo sviluppo di applicazioni tramite DFSDK, perché quando si definiscono i pulsanti (“buttons”), si devono creare due immagini: una, appunto, per il pulsante rilasciato e l’altra per quando l’utente “tocca” il touch screen e deve vedere il cambiamento (effetto pressione) sul tasto interessato. Per i files audio, vi consiglio il sito freesfx che ne contiene migliaia. I files audio utilizzati in ambiente DFSDK (e su Apple), possono avere solo i formati Snd e Mp3, ma non c’è problema nell’utilizzare anche files Wav  (che sono più facili da reperire su internet) ; infatti, se tornate alla figura 1 (la cartella d’installazione di DFSDK), troverete il programma Wav2Snd.exe che permette la conversione da Wav a Snd in modo semplice e rapido.

Supponiamo, ora, di aver scritto e provato sul simulatore la nostra prima applicazione per iPhone (poi torneremo indietro ad una descrizione della programmazione in Visual C++). Ci si pone il problema di trasferire il programma sul nostro iPhone; anzi, io non avevo un iPhone e così ne ho cercato uno (usato) per poter fare delle prove “reali”. Cercando in famosi negozi on-line, è facile trovare un 3GS con 16GB di memoria a prezzi variabili dai 70 ai 120 euro, a seconda dello “stato di conservazione” del telefono. Per collegare un qualsiasi dispositivo con “la mela” a Windows bisogna per forza usare il software iTunes, fornito come freeware da Apple. Dopo aver installato questo software siamo praticamente a posto; abbiamo scritto un’applicazione, abbiamo un iPhone e abbiamo il software per trasferire il programma dal PC al dispositivo. Però non basta… La politica di installazione delle applicazioni di Apple è molto rigida, lontanissima dalla semplicità di Android e secondo me profondamente sbagliata, perché è stata creata per mantenere una certa “protezione” dell’utente, ma in effetti crea più svantaggi che vantaggi. La sicurezza è un mito e vari “hackers” hanno sfruttato i “bachi” presenti nel sistema (in qualsiasi sistema) per creare procedure di “jailbreak” e quindi superare in un solo balzo tutti i vincoli e le protezioni del sistema. Quindi, ribadisco, tutta la complicazione introdotta da Apple per l’installazione di programmi, anche di propri programmi, è assurda, informaticamente diseducativa e castratoria, lontanissima dai tempi d’oro di Apple ][, quando ogni cosa era documentata, dagli schemi elettrici fino al codice assembler 6502 per far funzionare le schede di espansione. Quella era la Apple che diffondeva la cultura informatica; ora invece è in mano a tiranni commerciali che manderanno, prima o poi, tutto in malora. I concorrenti di Apple (Android in testa) sono agguerriti e conquistano ogni giorno nuove fette di mercato. Se Apple non cambierà questa assurda politica di limitazione nella creazione di nuovo software, si estinguerà. Chiusa la questione “opinioni personali”, vediamo cosa è necessario fare per trasferire il programma sul telefono. Il primo passo è collegare il telefono al PC e lanciare iTunes. Nelle informazioni del telefono collegato dovremo cercare l’UDID (il codice identificativo unico del dispositivo) e prenderne nota. Quando ci registriamo a DragonFireSDK, diventiamo a tutti gli effetti parte del loro team di sviluppatori ed abbiamo diritto a ricevere un codice detto “mobile provision” che ci permetterà di installare l’applicazione su di un telefono di prova, anche quando siamo in fase di debug e il programma non è stato pubblicato su “Apple Store”. Quindi, prendiamo il nostro UDID e mandiamolo via email al supporto di DFSDK, chiedendo di aggiungere il nostro dispositivo a quelli autorizzati. Nel giro di 24 ore riceveremo una email di conferma e a questo punto potremo cominciare a preparare il necessario per eseguire la compilazione del nostro programma scritto in Visual C++. Come ho annunciato nell’introduzione, un programma per iPhone deve essere compilato su una macchina Apple, ma allora, come si fa ? Si usa uno strumento on-line… DragonFire SDK permette, appunto, di eseguire on-line la compilazione del nostro sorgente su una macchina Apple e ci restituisce un file zip che contiene la App vera e propria e il file mp.mobileprovision, che è l’autorizzazione necessaria all’installazione della App sul dispositivo. La procedura di compilazione on-line è veloce, ci vuole giusto qualche minuto. Una volta andati sulla pagina di build, inserite il vostro username (l’indirizzo email con il quale vi siete registrati) e il numero di serie del vostro DFSDK. Cliccate login e vi troverete su una nuova pagina web (cliccare l’immagine per ingrandirla).

Figura 6: il compilatore on-line. Sulla destra il QR relativo all'ultima compilazione on-line eseguita

Figura 6:  il compilatore on-line. Sulla destra il QR relativo all’ultima compilazione on-line eseguita

Sulla sinistra, nella casella di testo “App Name“, inseriremo il nome della nostra applicazione, per esempio “MyFirstApp” e di sotto, nella casella di dialogo files “Build zip“, andremo a ricercare tra i file della nostra applicazione Build.zip (la descrizione di ciò che è contenuto in questo file può essere visualizzata su questa pagina del sito DFSDK in inglese). Infine, premeremo il pulsante “Build” e inizierà il trasferimento dei dati verso il compilatore on-line. Una volta completato il trasferimento (il tempo dipende soprattutto dalla quantità delle immagini e dei suoni che fanno parte della nostra applicazione), lo schermo cambierà così:

Figura 7: il compilatore on-line sta elaborando il nostro file sorgente

Figura 7:  il compilatore on-line sta elaborando il nostro file sorgente

L’operazione durerà qualche minuto, in funzione della complessità dell’elaborazione. Ogni tanto premiamo il pulsante “Check Status” per vedere se l’operazione è conclusa. Quando la compilazione sarà stata completata, torneremo a vedere una schermata come in figura 6. Sulla destra avremo un codice a barre QR e un pulsante per eseguire il download del file MyFistApp.zip . Il codice a barre QR serve per fare l’installazione OTA (Over The Air), cioè senza collegare il telefono ad iTunes. Sul mio telefono non c’è un programma di lettura QR e così ho provato ad installarne uno gratuito (i-nigma, se non sbaglio), ma dopo aver posizionato il telefono vicino allo schermo ed aver letto il codice, l’installazione OTA è fallita. Non so se il problema risiede nel lettore QR o in qualche limite del mio telefono o della connessione a internet, comunque, se l’installazione OTA non funziona, clicchiamo il pulsante “Download” e scarichiamo il file per una normale installazione OTW (Over The Wire)  🙂 collegando il telefono al PC dove è installato iTunes. Nel file MyFirstApp.zip scaricato troviamo una cartella chiamata MyFirstApp.App e un file di nome mp.mobileprovision. Trasciniamo entrambi i files nella libreria Apps di iTunes (guarda questa pagina di help di DFSDK, in inglese) e infine eseguiamo la sincronizzazione con il telefono… finalmente questa prima App sarà installata sul nostro iPhone. Se effettuiamo modifiche al codice e ri-eseguiamo le operazioni di compilazione e installazione, consiglio caldamente di rimuovere la vecchia applicazione sia dal telefono che da iTunes, prima di installare la nuova.

Quando la nostra App sarà finalmente completata, quando l’avremo provata sul nostro PC Windows e poi sull’iPhone, potremo finalmente iniziare il percorso per pubblicarla sull’Apple Store. Anche in questo caso, DFSDK ci darà una mano, anzi una grossa mano, aiutandoci a scavalcare la faraonica burocrazia di Apple. Anzi, se intendiamo pubblicare la nostra App “for free”, cioè gratuita, non dovremo far altro che compilare un apposito form on-line e dare il nostro consenso a Zimusoft (la ditta che produce DFSDK) per eseguire tutto quanto è necessario alla pubblicazione. In questo caso, il produttore del software che apparirà sull’Apple Store sarà Zimusoft, ma il copyright sull’applicazione sarà comunque il nostro. Questo significa che con DFSDK si può “pubblicare” una App senza dover effettuare l’iscrizione ad Apple come “developer” e quindi senza pagare l’esoso “tributo” annuale di 99 USD. Se invece la nostra applicazione è a pagamento, dovremo fare l’iscrizione ad Apple come “developer” e pagare i 99 USD l’anno. Se poi vogliamo iscriverci come azienda e non come privati, dovremo anche ottenere un numero identificativo della nostra azienda. Questo numero, chiamato DUNS, viene fornito gratuitamente in molte parti del mondo. In Italia, al solito, non è gratis; ottenerlo costa 50 Euro una tantum. Una ricerca in rete vi permetterà di avere maggiori informazioni su questo numero e sul suo utilizzo in ambito internazionale. Torniamo all’iscrizione come developer… quando l’avremo effettuata, potremo comunque rivolgerci al supporto DFSDK per tutte le fasi successive, sino alla pubblicazione sull’Apple Store. Attraverso questa procedura, quindi avendo effettuato l’iscrizione come Apple Developer, saremo noi i produttori del software (non Zimusoft) ed i detentori, ovviamente, del copyright e potremo attribuire un costo alla nostra applicazione. E’ da tenere presente che del costo attribuito, facciamo che sia 10 Euro, a noi ne verranno, in caso di vendita, solo 7 perché 3 se li prenderà Apple per averci “fatto il favore” di tenere la nostra App in vetrina. I nostri 7 Euro dovranno comprendere l’IVA, che sarà calcolata a seconda del Paese in cui viene effettuato l’acquisto. Noi diventeremo sostituti d’imposta e quindi dovremo in qualche modo restituire l’IVA allo Stato, oltre a dichiarare i nostri guadagni e pagare le tasse su di essi. Se la vostra App piace e viene venduta in tutto il mondo, vi consiglio vivamente di rivolgervi ad un bravo commercialista… Ah, un momento, mi stavo dimenticando una cosa importante. La vostra App, sia che la pubblichiate con Zimusoft, sia che abbiate il vostro account di sviluppatore, dovrà passare l’esame di Apple per poter essere accettata. Leggetevi, sul sito Apple, le numerose regole da rispettare per non vedere “rejected”, rigettata, la vostra App. Alcune di queste (numerosissime) regole sono di buon senso, altre meno… comunque, queste sono opinioni personali e quindi non mi spingo oltre nella critica. Anche in questo caso, se la vostra App dovesse essere rifiutata per qualche “mancanza”, potrete rivolgervi (in lingua inglese) al supporto DFSDK per ottenere consigli su come rimediare. Tenete presente che ognuna di queste modifiche, con conseguente ri-approvazione da Apple, richiede un paio di settimane di tempo. Inoltre, Zimusoft esegue gratuitamente la prima pubblicazione, ma per le successive ci sarà un costo (non elevato) specificato nelle pagine del sito.

Ora, torniamo alla scrittura del programma in C. Per prima cosa, diamo un’occhiata alle API messe a disposizione da DFSDK ; a questo link possiamo trovare un elenco completo. La struttura base di un programma in ambiente DFSDK è costituita da tre funzioni principali: la AppMain, la AppExit e la OnTimer. Il nostro programma si chiamerà sempre App.cpp e se vogliamo aggiungere altri files sorgente potremo farlo considerandoli come degli header e quindi includendoli come files .h mantenendo così inalterata la struttura standard. La funzione AppMain è quella di avvio ; al suo interno costruiremo tutta l’interfaccia grafica e quanto necessario al funzionamento del programma. La funzione AppExit è quella che viene eseguita quando l’utente chiude completamente il programma, quindi inseriremo al suo interno quanto necessario per liberare eventuali risorse impegnate. La funzione OnTimer viene chiamata automaticamente 30 volte al secondo e sarà al suo interno che gestiremo le operazioni a tempo (animazioni o vari eventi temporizzati). Chiaramente, dovremo stare attenti a non scrivere al suo interno pezzi di codice che durino più di 33 mS, altrimenti qualche evento di OnTimer verrà “saltato” (30 chiamate al secondo, danno una durata massima di 1000 mS / 30 eventi, quindi circa 33.3 mS). Aggiungerei immediatamente una quarta funzione, che non è automatica, ma deve essere programmata da noi nella AppMain. Questa è la SuspendInit, che ci permetterà di definire una funzione di callback che sarà chiamata quando l’utente manda “in sospensione” la nostra applicazione, avendone aperta un’altra. Ok, a questo punto una struttura di base potrebbe essere questa:

#include "DragonFireSDK.h"

// funzione chiamata quando la nostra applicazione viene sospesa
void OnSuspend()
   printf("debug: l'applicazione viene sospesa\n");

// applicazione principale
void AppMain()
   // definiamo la funzione di callback OnSuspend

// termine dell'applicazione
void AppExit()

// evento temporizzato; step 1/30 sec
void OnTimer()

La programmazione è un’arte, anche se un tipo d’arte non fruibile dal grande pubblico. Difficilmente vedrete qualcuno colpito dalla “Sindrome di Stendhal” davanti a un listato di programma sorgente in Assembly Language, sebbene io possa affermare di essermi commosso davanti ad alcune righe di Stephen Wozniak nel listato sorgente in assember 6502 del mitico Apple II. Ogni programmatore professionista ha il proprio stile e chi è “nel settore” sa distinguere l’opera di uno da quella dell’altro. Questo preambolo è per rendere chiaro a chi mi sta leggendo che ognuno ha un diverso approccio alla programmazione e ognuno ha il proprio stile. Considerando la programmazione un’arte, sono anche del parere che non sia “per tutti”, ma solo per chi ha un talento naturale per questo specifico settore. Semplificando al massimo quali sono le caratteristiche di un programmatore di talento, direi che è indispensabile che egli / ella abbia smontato, da bambino/a , tutti i giocattoli che riceveva in regalo (e pure quelli degli amici) per vedere “cosa c’era dentro”.

Uno dei metodi più efficaci per imparare qualcosa di nuovo è di avere sotto mano un esempio pratico, funzionante, ed osservare da un lato l’oggetto (l’applicazione) in funzione e dall’altro il progetto (il listato del programma sorgente) per capire come ogni azione è stata organizzata, studiata, programmata per dare un certo risultato. Quindi, la mia proposta per concludere questo lungo articolo è una piccola applicazione che potrete far “girare” sul vostro PC Windows e di cui avrete a disposizione il file sorgente completo e le risorse (immagini e suoni), così da provare praticamente il “come funziona” e approfondire la conoscenza del DFSDK. Il file di esempio sarà uno zip che conterrà il programma eseguibile per Windows (vedrete il simulatore iPhone in funzione), più una cartella con le varie risorse. Oltre a questo, nello zip sarà incluso il file sorgente in C++ per poter osservare, come dicevo, le varie funzioni che rendono attivo il programma. Purtroppo non sarà possibile effettuare delle modifiche, perché per far ciò occorre acquistare il software completo da Zimusoft, ma può essere un buon punto di partenza. Se deciderete di cominciare a sviluppare i vostri programmi per iPhone / iPad, allora potrete acquistare la licenza e così avrete accesso alle risorse fondamentali per lo sviluppo (build on-line con file mobileprovision) e la pubblicazione delle vostre App.

Ed eccoci pronti. Ho impegnato questo pomeriggio domenicale per scrivere l’applicazione. Questo è lo screenshot del gioco in funzione :

Screenshot del simulatore iPhone

Screenshot del simulatore iPhone, eseguito su Win7

Avrete sicuramente riconosciuto il gioco… con un sofisticato esercizio di fantasia, l’ho chiamato “colors”. Potete scaricare la cartella compressa dal link che appare sotto la clausola di non assunzione di responsabilità. Il file sorgente in C++ è disponibile all’interno della cartella stessa. Non fate caso ad alcune ineleganze stilistiche, perché mi sono fermato alla prima stesura “di getto”, non essendo il programma destinato a un pubblico “pagante”… 🙂 Per eseguire l’applicazione, dopo aver scaricato il file zip, espandetelo in una qualsiasi cartella (esempio: C:\unzipped\), quindi lanciate l’eseguibile colors.exe e buon divertimento…

Nota bene: il software fornito è da considerarsi un “demo” gratuito e pertanto non sarà fornito alcun supporto, né si assume alcuna responsabilità su ogni eventuale problema dovesse presentarsi a chi effettuerà il download ed eseguirà il programma.
Cliccando questo link per effettuare il download del file colors.zip (V.140816) implicitamente dichiaro di aver letto e capito la clausola di non assunzione di responsabilità dell’autore.

Activate relays with your smartphone (no BT or WiFi, just sounds)

Old smartphones (Pocket PC, Windows Mobile 5 and 6) can be purchased at very low price, and even if old, are really powerful. In addition, you can write and distribute your own applications / games for free, being not in the slavery of “App Markets” of any sort.

In 2009 summer (August and September), I was in France for a “sabbatic” time. I was in city of Albi, relatively far from the sea and the “usual” way to spend summer time (swimming or walking or looking for funny alternatives). France is fantastic for restaurants, aperitives and wine, so that period was very creative for me. The best “fuel” for brain are good food and wines ; if you add that I was are completely alone and without any job duty, you can understand that such condition was very near to the perfection.
Obviously, a minimal “worklab” was part of my baggage: just few things… a solder iron, soldering wire, some indispensable electronic components, a small netbook PC and my smartphone (Samsung SGH-i600). Note that the smartphones like Android and iPhone wasn’t available in that period and the Windows Mobile (5 or 6) was the “modern” OS (surely less intrusive in your privacy than the ones you’re running today). Some time before this journey, I purchased a software tool called PPL (as alternative to Embedded Visual C) and downloaded a free IDE called FBA Creator (you can find a reference to this software gem under my favourite links). I started to realize applications for WM5 / WM6 in the quiet afternoons time, a little step every day. One of the interesting things produced in this learning time, was a program to turn ON/OFF relays using simply DTMF tones played by the phone (under keyboard control). The main idea was to put the phone on a simple “rover” and then write a small webserver to receive commands by any browser, and produce DTMF tones (related to HTTP GET commands) to activate relays, so left and right motors could move the rover and photos taken after every move could be sent via the Internet to my netbook PC. I realized a video that was posted, initially, on youtube. After monster G (Google) acquired youtube, I decided to remove all my videos, ‘cause I was negatively impressed by the growing power of that company, with all the new terms of use of their services ; shorting it, I removed my pages on google space and the videos from youtube. Recently I reloaded some videos on DailyMotion (hoping that this will not be eaten by monster G). If you want take a look at this video, click the player below here and sorry for my horrible english pronuntiation and also for my tragic english writing (NO google translator help, here).

dtmf_remote di robotop

Now, here is the electric diagram of this device. There are 3 relays, the microcontroller (ATMEL ATtiny2313) , one serial interface for  PC connection and analog circuitry to get sounds (thru microphone) and convert them to digital data, by means of specialized decoder IC.

click to enlarge ; PDF copy is included in the downloadable zip

click to enlarge ; PDF copy is included in the downloadable zip

Using this circuit, you can activate / deactivate 3 relays with the DTMF tones emitted by your smartphone / PocketPC. In the downloadable file ef161.zip you can find:
– schematic.pdf , the electric diagram
– dtmf.hex , the Intel-Hex formatted file to burn the micro
– fuses.txt , the fuses configuration used for microcontroller in this application

If you want to take a look at the C source file, click this link
Someone asked me how to indepently control two motors (running CW and CCW) with 3 relays, so here is a state table:

ABC | motor status (0=relay off,as shown in figure; 1=relay ON)
--- | ---------------------------------------------------------
000 | M1 & M2 stop
001 | M1 stop, M2 run clockwise
010 | M1 run clockwise, M2 stop
011 | M1 & M2 run clockwise
100 | M1 & M2 run counterclockwise
101 | M1 run counterclockwise, M2 stop
110 | M1 stop, M2 run counterclockwise
111 | M1 & M2 stop

and a MAD (manually assisted design) schematic…

twomotorsYou can generate DTMF tones directly with your phone keyboard (setting DTMF as default sound for keys) or can use my own program dtmfremote_cab.zip. This one is supplied as CAB compressed in ZIP with a password. Such strange arrangment comes from limitations of the hoster to uploading of executable files. When you download the file, you have to unzip it (the password is: eficara) and then you have the dtmfremote.cab that can be directly installed on your WM5 or WM6 device. Note that my Samsung WM6 phone has a full qwerty keyboard, but not a touch screen, so all the commands are activated using the cursor keys and the OK button. You can also activate a sequence of pre-recorded commands ; such sequence has to be stored in a file called sequence.txt , that must reside on the same working directory of the executable. You can create / edit such file with the default Notepad. On every text row there are two numbers, comma separated (no spaces, please). First number is the bitmap of the 3 relays, so can be a number from 0 to 7 ; a number greater than 7 indicates the end of the sequence (it will loop again from the first row). The second number is the time to wait after setting the relays, prior to jump to next sequence step. This number is expressed in mS (milliSeconds) and can range from 100 to 9999. Lower numbers can’t work, ‘cause the DTMF tone needs for a minimal time to be correctly decoded by hardware.
I also wrote another program to play DTMF, using the free tool FBA Creator ; this application is called fba_dtmf_cab.zip (as usual, is a zipped CAB with password ; you must unzip it using password eficara and have your fba_dtmf.cab ready to be installed on WM5 or WM6 device). The only difference with the previous program (written in PPL) is that the sequence player isn’t included, but the whole working directory, with sources (LUA language) can be downloaded and modified with the FBA tool. IMPORTANT NOTE: if you download and install “FBA the Creator” on Win7 or newer, please create a shortcut to the executable and set this shortcut to be executed by default as administrator. If you don’t do that and launch the executable without administrator rights, you can experience a recursive pop-up error window, that’s very hard to stop. This is just a little problem in a big, genial software, written by an italian author some years ago (in the times of WinXP). Note that all the IDE sources for FBA are also downloadable from the main site. If you look in the forum, you can find some old post by user robotop ; it’s me…

Here is a short presentation video for the FBA IDE I made some time ago for my friends. It’s in Italian, but may be useful just to take a look at the working environment and how it’s easy and powerful (and free…)

FBA-Video_2011-11-23 di robotop

Finally, here is the full working folder (sources and resources) of the DTMF program written under the FBA environment. After downloading the file FBA_folder_dtmf-remote.zip, you must expand it in a directory ; I suggest a new folder under documents, named FBA with subfolders for this and (may be) your future apps. At this point, if you have the FBA environment installed on your PC, just click the file dtmfrem.fbp to start the IDE and… happy mobile phone programming 🙂

View a short video of this application running in the IDE default emulator…

dtmfrem di robotop

FreeBasic + FireFly = ambiente di sviluppo visuale Windows gratuito

Ho ricevuto un messaggio tramite il relativo form su una pagina del vecchio sito. Rispondo pubblicamente in quanto la richiesta è interessante… Chi mi scrive ha usato con successo il FreeBasic per convertire vecchi programmi da GW-Basic e altri “dialetti” Basic. Tutti questi programmi, per ora, girano nella solita “finestra DOS” e così mi si chiede se io possa suggerire un modo semplice per scrivere qualcosa che funzioni come una qualsiasi applicazione Windows. Personalmente, utilizzo a questo scopo l’ambiente IDE gratuito chiamato FireFly. Ho aggiunto un link sulla colonna a destra (links utili) per poterne fare il download. L’ambiente di sviluppo si integra perfettamente con FreeBasic e il risultato è ottimo. Le applicazioni scritte sono assolutamente “eleganti” e ricordo che si tratta di eseguibili completi, non serve alcuna “runtime”. Io utilizzo la FIREFLY_FB_350 che è liberamente scaricabile dal sito dell’azienda produttrice. Questa versione per FreeBasic è gratuita, ma ne esistono altre a pagamento (per esempio quella relativa a RealBasic). Il link che ho indicato è (guarda caso) quello della versione libera per FreeBasic. Nel file di download sono presenti anche alcuni esempi, che aiutano a prendere pratica del programma. Comunque, se si ha una certa esperienza di ambienti di sviluppo “visuali”, il tempo di apprendimento è piuttosto basso. Consiglio caldamente questo “partner” di FreeBasic ; l’abbinamento dà luogo ad un formidabile sistema di sviluppo per programmare sotto Windows e …cosa meravigliosa in questi momenti bui… è tutto gratis. Purtroppo il grande pregio di FreeBasic, quello di esistere anche in ambiente Linux, non viene rafforzato da FireFly_FB, dato che quest’ultimo esiste solo su piattaforma Windows, ma penso che ci si possa accontentare 🙂 Esiste un IDE per FreeBasic anche sotto Linux (Glade?), ma al momento non l’ho ancora utilizzato e quindi non sono la persona giusta per dare consigli ! Spero che la mia risposta sia stata utile…

una schermata relativa ad uno dei programmi di esempio

una schermata relativa ad uno dei programmi di esempio (cliccare l’immagine per ingrandire)

Simple trick to add zip file to jpg image

Sometimes I have a PCB (printed circuit board) to realize. Usually, I send my design to local (italian) producers, but recently I’ve seen on a famous internet shop (four letters, starting with ‘e’ ending with ‘y’) some advertise from chinese producers, giving the PCB service at VERY low price. My PCB design files are always in GERBER format, with all sections shrinked in a single zip file.

If you decide to send your design to such chinese producers, generally you must mail your zipped gerber to the factory using your private email, ‘cause the “famous internet shop” only accepts jpg files as attachments in messages from buyer to seller (or viceversa).

This limit gaves me an idea : to create a jpg file that has a image part (my logo, for example) and hidden embedded gerber file. This way, I can send the data using the mail messaging offered by “the famous internet shop” without the need to use my private email account.

The procedure to create such embedded jpg is VERY simple:

a) put the gerber.zip (or ANY OTHER zip file) and the “container” image.jpg on a temp folder…

b) open a “dos command” window, navigate to the temp folder, then type: copy /b image.jpg + gerber.zip miximage.jpg (I usually create a batch file with this command in that folder,)

This command creates a copy (binary copy, thanks to the /b option) of the jpg PLUS the zip file. Now, if you open the resultant miximage.jpg with an image viewer, you will see the “container” image, but if you right click on the same jpg file, choosing “open with”, and selecting the application 7zFM.exe (from folder 7-Zip, under program files), you will discover that all your zip file contents are also present. The link to 7Z, my favourite zip/unzip application, is on the right side of this page, under useful links.

With this “mixed” file, you can use the mail message system of the “famous internet shop” to send your data to the chinese factory, attaching to your message the embedded jpg file. This is good for avoiding to use your private email and for have a seller-buyer transaction covered by the payment protections of the shop.

Hope this will be useful for someone…

Html più Php = labirinto interattivo

Ho realizzato, qualche tempo fa per scopi didattici, usando unicamente html e php, un piccolo “labirinto” interattivo che può essere facilmente installato su qualsiasi host (io uso, ovviamente, Altervista) che permetta di far “girare” programmi PHP. Per disegnare le “stanze” con le varie combinazioni di porte e oggetti, ho usato un software 3D dell’Ikea:si chiamava Kitchen Planner, era una versione “free” del 2005, se non sbaglio. Una volta disegnate le varie stanze, ne ho fatto dei files jpg che vengono richiamati a seconda della “mappa” del labirinto, inserita in un file di testo, e della “porta” scelta dall’utente durante l’esplorazione dello “strano edificio”. In qualche stanza ci sono “oggetti” cliccabili, ma non voglio dirvi tutto… Se volete dargli un’occhiata cliccate su questo link e vi troverete sulla pagina di partenza, che vedete qui sotto…