Queste due sovvenzioni hanno raggiunto circa $ 30'000, niente male.
martedì 29 settembre 2015
Raggiunti i fondi per SSL con PostgerSQL e Mac a 64bit
Due belle notizie dalla società livecode: sono stati raggiunti i traguardi per finanziare la versione a 64bit di livecode e l'aggiunta della cifratura SSL dentro al driver per PostgreSQL.
Queste due sovvenzioni hanno raggiunto circa $ 30'000, niente male.
Queste due sovvenzioni hanno raggiunto circa $ 30'000, niente male.
lunedì 28 settembre 2015
Datagrid helper
I datagrid sono uno degli oggetti più complicati in livecode. Hanno tantissime proprietà e funzioni, ma le uniche documentazioni a riguardo la trovate qui:
Con i datagrid potete fare sia fantastiche tabelle che elenchi molto complessi (form):
Esiste un plugin chiamato datagrid helper, creato dal programmatore Zyrip. Questo programmino vi permette di poter gestire molto facilmente i datagrid:
Ecco un video dimostrativo:
Con i datagrid potete fare sia fantastiche tabelle che elenchi molto complessi (form):
Datagrid in modalità tabella (table) |
Datagrid in modalità form |
Esiste un plugin chiamato datagrid helper, creato dal programmatore Zyrip. Questo programmino vi permette di poter gestire molto facilmente i datagrid:
Con questo programmino gestire form o tabelle, colori e oggetti dentro al datagrid è molto semplice.
Potete trovarlo qui: http://www.aslugontheroad.com/ourproducts/2-what-is-dgh
Attualmente il costo è di $45.
Ecco un video dimostrativo:
venerdì 25 settembre 2015
Livecode 64 bit per Mac
Come sapete si sono attivate varie campagne di raccolta fondi con lo scopo di aggiungere delle funzioni a livecode.
Un utente è così preso dal bisogno di fare una versione a 64 bit sul Mac che ha deciso di raddoppiare ogni donazione fatta per questo progetto. In poche parole lui metterà la stessa cifra che ogni altro verserà: se voi versate 10 €, lui verserà 10 €.
La pagina di questa funzionalità è qui: https://livecode.com/project/mac-64%C2%ADbit-support/
La persona che ha fatto questo annuncio è Todd Fabacher della società Digital Pomegranate.
Uno dei problemi che impediscono di passare a 64bit su Mac (su Linux è già disponibile) è il sistema multimediale, finora basato su quicktime che Apple non supporta a 64 bit. Per passare a 64bit su Mac bisogna riscrivere tutte le API multimediali.
Passando a 64 bit verranno riscritte tutte le API per Mac utilizzando le nuove disponibili.
Se siete degli utilizzatori Mac forse è il caso di donare qualche soldo a questa causa.
Un utente è così preso dal bisogno di fare una versione a 64 bit sul Mac che ha deciso di raddoppiare ogni donazione fatta per questo progetto. In poche parole lui metterà la stessa cifra che ogni altro verserà: se voi versate 10 €, lui verserà 10 €.
La pagina di questa funzionalità è qui: https://livecode.com/project/mac-64%C2%ADbit-support/
La persona che ha fatto questo annuncio è Todd Fabacher della società Digital Pomegranate.
Uno dei problemi che impediscono di passare a 64bit su Mac (su Linux è già disponibile) è il sistema multimediale, finora basato su quicktime che Apple non supporta a 64 bit. Per passare a 64bit su Mac bisogna riscrivere tutte le API multimediali.
Passando a 64 bit verranno riscritte tutte le API per Mac utilizzando le nuove disponibili.
Se siete degli utilizzatori Mac forse è il caso di donare qualche soldo a questa causa.
mercoledì 23 settembre 2015
The Scripter's Scrapbook
Oggi presento un software fatto con livecode, ma che può essere utile ad ogni programmatore per ogni tipo di linguaggio: The Scripter's Scrapbook.
Si tratta di una libreria personale del codice, dove possiamo mettere e catalogare il nostro codice per poterlo riutilizzare in altri programmi.
I vantaggi di questo programma è che possiamo mettere delle categorie, sottocategorie, icone per trovare e classificare il codice. In questo modo sappiamo se si tratta di Java, C++, oppure se per solo per windows, se è HTML per il web ecc.
E' uno strumento molto utile, soprattutto per i programmatori che utilizzano molti linguaggi alla volta. Con questo programmino possono ricordarsi in che linguaggio era presente quella unzione utile che avevano scritto e trovarla al volo.
Da questa pagina è presente una versione di prova gratuita per 30 giorni: http://www.flexiblelearning.com/ssbk.htm
Il costo del programma è € 68.
Si tratta di una libreria personale del codice, dove possiamo mettere e catalogare il nostro codice per poterlo riutilizzare in altri programmi.
I vantaggi di questo programma è che possiamo mettere delle categorie, sottocategorie, icone per trovare e classificare il codice. In questo modo sappiamo se si tratta di Java, C++, oppure se per solo per windows, se è HTML per il web ecc.
E' uno strumento molto utile, soprattutto per i programmatori che utilizzano molti linguaggi alla volta. Con questo programmino possono ricordarsi in che linguaggio era presente quella unzione utile che avevano scritto e trovarla al volo.
Da questa pagina è presente una versione di prova gratuita per 30 giorni: http://www.flexiblelearning.com/ssbk.htm
Il costo del programma è € 68.
martedì 22 settembre 2015
Nuove funzioni per Livecode
Livecode ha appena lanciato una campagna per finanziare nuove funzionalità e renderle disponibili a tutti.
Avete solo 6 giorni a disposizione, sbrigativi a decidere se e quali finanziare.
Da questa pagina trovate una descrizione: https://livecode.com/project/
Ecco la lista:
Quali ritenete più utili?
Avete solo 6 giorni a disposizione, sbrigativi a decidere se e quali finanziare.
Da questa pagina trovate una descrizione: https://livecode.com/project/
Ecco la lista:
Remote debugger: far funzionare il debbuger non solo per le applicazioni che girano dentro l'IDE, ma anche per le applicazioni che girano dentro i dispositivi mobili connessi all'IDE. | |
PostgreSQL SSL Support: aggiungere la funzionalità di comunicazione SSL dentro al driver per il database PostgreSQL | |
IPV6 Support: aggiungere la funzionalità IPV6 a livecode | |
Mac 64bit Support: Convertire a 64bit la versione di livecode per Mac, che per ora gira a 32bit. |
Quali ritenete più utili?
venerdì 18 settembre 2015
Generatore di particelle per Second Life
Second Life è un mondo virtuale dove possiamo addentrarci con un personaggio creato da noi, ecco qui un esempio:
Sapendo programmare possiamo creare degli stupendi effetti.
E' inoltre possibile vendere il nostro codice o altri programmi su second life, come ad esempio sul market: https://marketplace.secondlife.com
Ebbene uno degli strumenti più di successo venduti è il generatore di particelle, (disponibile sia su Windows, Linux e Mac) fatto in Livecode: Mote.
Questo programmino viene venduto alla ragguardevole cifra di L$ 1'790 (L$ è la valuta di second life). Vi permette di generare il codice per poi controllare dal vostro PC tutta una serie di effetti spettacolari, ecco un video di esempio:
Complimenti alla programmatrice Paladin per suo business di successo. Sul suo sito potete trovare altri prodotti: http://www.paladinpinion.com/
martedì 15 settembre 2015
Copiare i gradienti
I gradienti sono degli effetti grafici molto utili da applicare ai nostri elementi. I dati sono tutti contenuti nella proprietà fillGradient.
Se provate a copiare la proprietà fillGradient, non a ottenere lo stesso gradiente, perchè l'immagine del gradiente è creata da livecode quando la prorietà del gradiente cambia, e utilizza i punti assoluti dello schermo (per far prima).
Per questo motivo, teoricamente, non è possibile creare un modello per i gradienti. Per fortuna questo problema può essere aggirato.
Per copierà il gradiente basta che l'oggetto originale e quello a cui vogliamo applicare il gradiente abbiamo la stessa proprietà rect, cioè occupino lo stesso spazio sullo schermo.
In pratica si tratta di:
Se provate a copiare la proprietà fillGradient, non a ottenere lo stesso gradiente, perchè l'immagine del gradiente è creata da livecode quando la prorietà del gradiente cambia, e utilizza i punti assoluti dello schermo (per far prima).
Per questo motivo, teoricamente, non è possibile creare un modello per i gradienti. Per fortuna questo problema può essere aggirato.
Per copierà il gradiente basta che l'oggetto originale e quello a cui vogliamo applicare il gradiente abbiamo la stessa proprietà rect, cioè occupino lo stesso spazio sullo schermo.
Gradiente copiato correttamente |
- creare il modello
- spostare gli oggetti nella posizione del modello
- applicargli lo stesso gradiente
- rimettere a posto gli oggetti modificati
Che nel codice di livecode significa:
#graphic 1 è il modello
put the rect of graphic 2 into temp
set the rect of graphic 2 to the rect of graphic 1
set the fillGradient of graphic 2 to the fillgradient of graphic 1
set the rect of graphic 2 to temp
lunedì 14 settembre 2015
Zygodact
Se volete creare un software che necessiti di una chiave di attivazione o registrazione, esiste il plugin Zygodact.
Lo potete trovare qui: http://www.hyperactivesw.com/solutions_zygodact.html
Questo stack da aggiungere ai nostri programmi permette di:
Lo potete trovare qui: http://www.hyperactivesw.com/solutions_zygodact.html
Questo stack da aggiungere ai nostri programmi permette di:
- avere un sistema di registrazione
- poter aggiungere una data di scadenza al software quando la registrazione scade
- aggiungere un periodo di valutazione gratuita
- inoltre può creare dei programmi associati a delle chiavi
Quest'ultima funzione è da installare su un web server come CGI. Ogni scaricamento del programma sarà associato ad una chiave diversa. In modo che due programmi abbiano due chiavi diverse.
giovedì 10 settembre 2015
Lavorare con numeri molto grandi 2
In un post precedente avevo scritto delle funzioni per avere una precisione assoluta facendo le operazioni basilari con un numero grande quanto si vuole, superando così i limiti imposti dai bit del processore.
Mi è stato fatto notare che l'operazione di divisione diventava estremamente lunga quando la differenza di cifre tra i due numeri erano notevoli.
Per questo ho scritto una nuova funzione, bigDivide2() per dividere i numeri molto grandi, che spezza l'operazione in operazioni più piccole, come facciamo noi esseri umani quando facciamo la divisione, rendendo l'operazione complessiva velocissima. Si appoggia dalla funzione bigDivide(), che già conoscete.
Vi metto qui tutto il codice:
function bigAdd a1, a2
#let's check if it's negative...
#end check
put reverse2(a1) into b1
put reverse2(a2) into b2
put 0 into mem
if length(b1) < length(b2) then
put b1 into temp
put b2 into b1
put temp into b1
end if
repeat while b2 is not empty
put (char 1 of b1) + (char 1 of b2) + mem into ppp
if length(ppp) = 1 then
put 0 into mem
put ppp before rrr
else
put 1 into mem
put char 2 of ppp before rrr
end if
delete char 1 of b1
delete char 1 of b2
end repeat
repeat while (b1 is not empty)
put mem + (char 1 of b1) into ppp
if length(ppp) = 1 then
put 0 into mem
put ppp before rrr
else
put 1 into mem
put char 2 of ppp before rrr
end if
delete char 1 of b1
end repeat
if mem = 1 then
put 1 before rrr
else
put b1 before rrr
end if
return rrr
end bigAdd
function reverse2 temp
repeat for each char tChar in temp
put tChar before temp2
end repeat
return temp2
end reverse2
function bigMultiply a1,a2
put reverse2(a1) into a1
put 0 into temp
repeat for each char tChar in a1
repeat with i=1 to tChar
put bigAdd(temp,a2) into temp
end repeat
put 0 after a2
end repeat
return temp
end bigMultiply
function bigGreater a1,a2
#compare two bignumbers:
#return true if n1 > n2
#return false if n1 < n2
#return empty if n1 = n2
#let's check is a number is negative
if ((char 1 of a1 = "-") or (char 1 of a2 = "-")) then
if ((char 1 of a1 = "-") and (char 1 of a2 is not "-")) then
return false
end if
if ((char 1 of a1 is not "-") and ( char 1 of a2 = "-" )) then
return true
end if
#if we are here, both are negative
delete char 1 of a1
delete char 1 of a2
if a1 = a2 then
return empty
else
return (not bigGreater(a1,a2))
end if
end if
if length(a1) is not length(a2) then
return ( length(a1) > length(a2) ) #this is evalueted true or false
else
if a1 = a2 then
return empty
else
repeat while ((char 1 of a1) = (char 1 of a2) )
delete char 1 of a1
delete char 1 of a2
end repeat
return ((char 1 of a1) > (char 1 of a2)) #this is evalueted true or false
end if
end if
end bigGreater
function bigSub a1,a2
#substract the smallest big number from the largest one
if bigGreater(a2,a1) then
put a1 into temp
put a2 into a1
put temp into a2
end if
put reverse2(a1) into a1
put reverse2(a2) into a2
put 0 into mem
repeat while (a2 is not empty)
put (char 1 of a1) - mem + 10 - (char 1 of a2) into minus
if length(minus) = 1 then
put 1 into mem
put minus before rrr
else
put 0 into mem
put char 2 of minus before rrr
end if
delete char 1 of a1
delete char 1 of a2
end repeat
repeat while (a1 is not empty)
put char 1 of a1 + 10 - mem into minus
if length(minus) = 1 then
put 1 into mem
put minus before rrr
else
put 0 into mem
put char 2 of minus before rrr
end if
delete char 1 of a1
end repeat
#remove inital zeros
repeat while (char 1 of rrr is "0")
delete char 1 of rrr
end repeat
return rrr
end bigSub
function bigDivide a1,a2
#output is a block of two numbers "quotient , remainder"
if bigGreater(a2,a1) then
return ("0," & a1)
end if
if a1 = a2 then
return "1,0"
end if
put 0 into count
repeat while (bigGreater(a1,a2))
put bigSub(a1,a2) into a1
put bigAdd(1,count) into count
end repeat
if a1 = a2 then
put bigAdd(count,1) into count
put 0 into a1
end if
return (count & comma & a1)
end bigDivide
function bigDivide2 a1,a2
put length(a1) into ldividendo
put length(a2) into ldivisore
if ldividendo <= ldivisore then
return bigDivide(a1,a2)
end if
put char 1 to ldivisore of a1 into tDiv
put bigDivide(tDiv,a2) into rrr
put item 1 of rrr into quoziente
put item 2 of rrr into resto
put ldivisore + 1 into nn
repeat with i = nn to ldividendo
put char i of a1 after resto
put bigDivide(resto,a2) into temp
put item 1 of temp after quoziente
put item 2 of temp into resto
end repeat
put removezeros(quoziente) into quoziente
put removezeros(resto) into resto
return (quoziente & comma & resto)
end bigDivide2
function removezeros temp
repeat while char 1 of temp is "0"
delete char 1 of temp
end repeat
return temp
end removezeros
venerdì 4 settembre 2015
Corso livecode
Il post di oggi è autopromozione, poichè la società Neol srl, mi ha chiesto di tenere dei videocorsi su livecode.
Io seguirò tutta la parte per creare applicazioni Android con Livecode.
In questa pagina trovate tutte le informazioni: http://www.didacta.com/corsi_livecode.html
Ci sono due percorsi:
Per i corsisti ci sarà anche un forum privato dove possono discutere con i professori.
Si possono iscrivere tutti: sia dei docenti, che non pagano l'IVA sull'iscrizione, e sia chiunque sia interessato (che però deve pagare anche l'IVA).
Le iscrizioni sono aperte dal 2 al 30 settembre 2015.
I corsi saranno dal 1 ottobre al 8 dicembre 2015.
Io seguirò tutta la parte per creare applicazioni Android con Livecode.
In questa pagina trovate tutte le informazioni: http://www.didacta.com/corsi_livecode.html
Ci sono due percorsi:
- base: http://www.didacta.com/moduli/Descrizione_Programma_LiveCode_Base.pdf
- avanzato: http://www.didacta.com/moduli/Descrizione_Programma_LiveCode_Avanzato.pdf
Per i corsisti ci sarà anche un forum privato dove possono discutere con i professori.
Si possono iscrivere tutti: sia dei docenti, che non pagano l'IVA sull'iscrizione, e sia chiunque sia interessato (che però deve pagare anche l'IVA).
Le iscrizioni sono aperte dal 2 al 30 settembre 2015.
I corsi saranno dal 1 ottobre al 8 dicembre 2015.
giovedì 3 settembre 2015
Incorporare una app HTML5
Ieri abbiamo visto che è disponibile l'esportazione in HTML5, ma come possiamo incorporarla in una pagine web?
Semplice, basta inserire il seguente codice HTML:
Chiaramente il codice in verde è l'indirizzo di dove si trova il vostro file javascript e gli altri file generati da livecode.
Una volta incorporata, apparira anche un'icona per scaricare il sorgente, ad esempio (dategli qualche secondo per caricare tutto):
Semplice, basta inserire il seguente codice HTML:
<div><!--Don't change start !-->
<canvas style="border: 0px none;" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
<script type="text/javascript">
var Module = { canvas: document.getElementById('canvas') };
</script>
<script async type="text/javascript" src="standalone-community-8.0.0-dp-4.js"> </script>
</div><!--Don't change stop !-->
Chiaramente il codice in verde è l'indirizzo di dove si trova il vostro file javascript e gli altri file generati da livecode.
Una volta incorporata, apparira anche un'icona per scaricare il sorgente, ad esempio (dategli qualche secondo per caricare tutto):
mercoledì 2 settembre 2015
E' arrivata l'esportazione HTML 5
E' appena uscita una nuova versione di test di livecode 8, la DP4, che include l'esportazione del vostro programma come una pagina web.
Nella cartella dell'esportazione troverete:
Nella cartella dell'esportazione troverete:
- il file HTML
- il file javascript
- il file MEM
al momento dovete caricarli tutti su internet per far funzionare il programma.
Ecco degli esempi:
Chiaramente la versione 8 di livecode è molto sperimentale, continuate ad usare la 7 se non vi serve l'esportazione in HTML.
martedì 1 settembre 2015
Lavorare con numeri molto grandi
Se si deve lavorare con numeri molto grandi, composti da centinaia di cifre, non si possono utilizzare le normali funzioni matematiche dei software.
Quasi tutti i linguaggi di programmazione usano delle funzioni di basso livello per velocizzare i conti, ma questo implica portarsi dietro i limiti dei processori ad esempio in linea teorica un computer a 32bit può gestire solo numeri fino a 232, mentre computer a 64 bit possono gestire 264.
Ogni software opera un certo grado di approssimazione per numeri molto grandi, quindi bisogna scrivere delle funzioni particolari che possano elaborare numeri senza limiti od errori.
Qui di seguito trovate il codice per fare somma (bigSum), sottrazione (bigSub), moltiplicazione (bigMultiply) e divisione (bigDivide) e anche per capire se un numero è più grande di un altro (bigGreater).
Con queste funzioni potrete gestire tutti i numeri senza alcune errore e di qualunque dimensione.
Ad esempio per fare la sottrazione "123456789123456789123456789 - 1234567891023456789", basta usare :
mentre per molti altri software il risultato è 1.23456787888889E+26 che è sbagliato!
La spiegazione è che molti software approssimano quando non hanno più bit a disposizione, quindi usano solo le prime 15 cifre e poi aggiungo zeri. In questo modo danno come risultato
1.23456787888889E+26
che significa
123456787888889000000000000
mentre il risultato corretto è
123456787888888898100000000
L'errore è di 101'900'000'000, vi sembra un piccolo errore?
Quasi tutti i linguaggi di programmazione usano delle funzioni di basso livello per velocizzare i conti, ma questo implica portarsi dietro i limiti dei processori ad esempio in linea teorica un computer a 32bit può gestire solo numeri fino a 232, mentre computer a 64 bit possono gestire 264.
Ogni software opera un certo grado di approssimazione per numeri molto grandi, quindi bisogna scrivere delle funzioni particolari che possano elaborare numeri senza limiti od errori.
Qui di seguito trovate il codice per fare somma (bigSum), sottrazione (bigSub), moltiplicazione (bigMultiply) e divisione (bigDivide) e anche per capire se un numero è più grande di un altro (bigGreater).
Con queste funzioni potrete gestire tutti i numeri senza alcune errore e di qualunque dimensione.
function bigAdd a1, a2
put reverse2(a1) into b1
put reverse2(a2) into b2
put 0 into mem
if length(b1) < length(b2) then
put b1 into temp
put b2 into b1
put temp into b1
end if
repeat while b2 is not empty
put (char 1 of b1) + (char 1 of b2) + mem into ppp
if length(ppp) = 1 then
put 0 into mem
put ppp before rrr
else
put 1 into mem
put char 2 of ppp before rrr
end if
delete char 1 of b1
delete char 1 of b2
end repeat
repeat while (b1 is not empty)
put mem + (char 1 of b1) into ppp
if length(ppp) = 1 then
put 0 into mem
put ppp before rrr
else
put 1 into mem
put char 2 of ppp before rrr
end if
delete char 1 of b1
end repeat
if mem = 1 then
put 1 before rrr
else
put b1 before rrr
end if
return rrr
end bigAdd
function reverse2 temp
repeat for each char tChar in temp
put tChar before temp2
end repeat
return temp2
end reverse2
function bigMultiply a1,a2
put reverse2(a1) into a1
put 0 into temp
repeat for each char tChar in a1
repeat with i=1 to tChar
put bigAdd(temp,a2) into temp
end repeat
put 0 after a2
end repeat
return temp
end bigMultiply
function bigGreater a1,a2
#compare two bignumbers:
#return true if n1 > n2
#return false if n1 < n2
#return empty if n1 = n2
if length(a1) is not length(a2) then
return ( length(a1) > length(a2) ) #this is evalueted true or false
else
if a1 = a2 then
return empty
else
repeat while ((char 1 of a1) = (char 1 of a2) )
delete char 1 of a1
delete char 1 of a2
end repeat
return ((char 1 of a1) > (char 1 of a2)) #this is evalueted true or false
end if
end if
end bigGreater
function bigSub a1,a2
#substract the smallest big number from the largest one
if bigGreater(a2,a1) then
put a1 into temp
put a2 into a1
put temp into a2
end if
put reverse2(a1) into a1
put reverse2(a2) into a2
put 0 into mem
repeat while (a2 is not empty)
put (char 1 of a1) - mem + 10 - (char 1 of a2) into minus
if length(minus) = 1 then
put 1 into mem
put minus before rrr
else
put 0 into mem
put char 2 of minus before rrr
end if
delete char 1 of a1
delete char 1 of a2
end repeat
repeat while (a1 is not empty)
put char 1 of a1 + 10 - mem into minus
if length(minus) = 1 then
put 1 into mem
put minus before rrr
else
put 0 into mem
put char 2 of minus before rrr
end if
delete char 1 of a1
end repeat
#remove inital zeros
repeat while (char 1 of rrr is "0")
delete char 1 of rrr
end repeat
return rrr
end bigSub
function bigDivide a1,a2
#output is a block of two numbers "quotient , remainder"
if bigGreater(a2,a1) then
return ("0 , " & a1)
end if
if a1 = a2 then
return "1 , 0"
end if
put 0 into count
repeat while (bigGreater(a1,a2))
put bigSub(a1,a2) into a1
put bigAdd(1,count) into count
end repeat
if a1 = a2 then
put bigAdd(count,1) into count
put 0 into a1
end if
return (count & " , " & a1)
end bigDivide
Ad esempio per fare la sottrazione "123456789123456789123456789 - 1234567891023456789", basta usare :
bigSub(123456789123456789123456789, 1234567891023456789) = 123456787888888898100000000
mentre per molti altri software il risultato è 1.23456787888889E+26 che è sbagliato!
La spiegazione è che molti software approssimano quando non hanno più bit a disposizione, quindi usano solo le prime 15 cifre e poi aggiungo zeri. In questo modo danno come risultato
1.23456787888889E+26
che significa
123456787888889000000000000
mentre il risultato corretto è
123456787888888898100000000
L'errore è di 101'900'000'000, vi sembra un piccolo errore?
Iscriviti a:
Post (Atom)