lunedì 30 novembre 2015

Baby name eliminator

Oggi presentiamo un'app per iOS, fatta con livecode, che aiuta a scegliere il nome per i propri figli: baby name eliminator.
Questa app permette i scegliere una lista di nomi per categoria, dare un voto ai nomi preferiti e pian piano arrivare al nome che più ci piace.
Il programma lo potete scaricare da qui: https://itunes.apple.com/us/app/baby-name-eliminator/id459025614?mt=8
Qui sotto potete vedere alcune schermate:

giovedì 26 novembre 2015

Raccolta fondi per nuovo comando replace

Il comando replace in livecode serve per sostituire una parola con un altra in una stringa, ad esempio:

replace "Mario" with "Lucia" in "Mario si alza presto la mattina"


Ora è possibile applicarlo anche direttamente ai campi di testo così:

replace "Mario" with "Lucia" in field "miotesto"


solo che così perdiamo tutta la formattazione del testo.
Per questo motivo la società livecode ha lanciato una nuova raccolta fondi per permette al replace di lasciare intatta la formattazione.
Potete trovare tutte le informazioni qui: https://livecode.com/project/find-replace/

Che ne pensate?

giovedì 19 novembre 2015

Programmatore livecode cercasi

Pubblico qui un'annuncio della società Trevix design :

Salve a tutti.
Sto sviluppando una applicazione per commercialisti, avvocati e professionisti in genere che promette di essere molto interessante.
Prevista per Desktop e tablet, l'idea ha passato il primo turno del Pitch your App in Create it with Livecode.
Il premio eventuale finale sarà un viaggio a Los Angeles per presentare la App a possibili investitori.
La necessità di renderla disponibile per mobile e la complessità delle funzioni che ormai vengono richieste a qualsiasi App (acquisti in App, DataGrid, Sharing files, notifiche, protezione, strategie di vendita, ecc) mi fanno rendere conto che per una persona sola il lavoro è immane.
Cerco quindi un collaboratore/socio che, a fronte di futuri possibili utili (niente soldi subito), voglia aiutarmi a svilupparla.
Idealmente il collaboratore ha una preparazione simile alla mia (lavoro con Livecode da 10 anni e ho già alcune applicazioni attive - http://www.trevix.it/software.html) o complementare. Conoscenza della lingua inglese è necessaria.
Contattatemi per maggiori informazioni: info@trevix.it
Roberto
trevix


martedì 17 novembre 2015

BJJ Scoreboard

Certe volte capita che il programma che ci servirebbe tantissimo non esiste. In questi frangenti o rinunciamo, o ce lo creiamo da noi.
Ricardo Varjão ha deciso di farsi da solo il programma per segnare i punti nei tornei di ju-jitsu utilizzando livecode.
Il risultato è stato talmente eccellente tanto che il suo programma è tra i più utilizzati per segnare i punti nei tornei mondiali.
Ecco una schermata del suo programma:


Il programma è un'app per iOS e lo potete trovare qui: https://itunes.apple.com/us/app/bjj-scoreboard/id513066325?mt=8
Il programma può essere utilizzato oltre che nei tornei, anche per allenamento.

lunedì 16 novembre 2015

Mandare email dal server livecode

Livecode, oltre ad essere un ottimo linguaggio di programmazione, è disponibile anche come server web.
Se abbiamo installato il livecode server su un sistema operativo Linux (o Mac), possiamo appoggiarci a un programma di posta già presente, in modo da poterlo sfruttare anche con altre applicazioni.
Uno dei programmi sempre presenti su linux è sendmail.
Qui di seguito vediamo il codice del messaggio che potremmo usare per inviare le email:

on mail pTo, pSub, pMsg, pFrom, pCc, pBcc, pHtml, pAtts
   #Questo messaggio serve per mandare le email
   #ogni indirizzo può essere del tipo "nome <indirizzo_email>"
   # gli indirizzi possono essere separati da virgola
   # la lista degli indirizzi, in alternativa, può essere un array, con un array degli allegati per ognugno
   #Variabili:
   -- pTo       - La lista degli indirizzi a cui spedire
   -- pSub       - L'oggetto del messaggio
   -- pMsg       - Il corpo del messaggio
   -- pFrom    - L'indirizzo email del mittente
   -- pCc       - La lista degli indirizzi in copia (CC)
   -- pBcc       - La lista degli insirizzi in copia nascosta (BCC)
   -- pHtml       - Questa variabile può essere true o false, e indica se il messaggio deve essere in HTML o meno
   -- pAtts       - L'array degli allegati da spedire, nella forma:
   --                   * name: il nome dell'allegato
   --                   * path: il percorso assoluto di dove si trova l'allegato sul server
   --                   * type: il tipo MIME dell'allegato
   
   #Qui costruiamo l'header del messaggio anche con gli indirizzi A: e CC:   
   put "From:" && pFrom & return & "To:" && pTo & return & "Subject:" && pSub & return into tMsg   
   if pCc is not empty then
      put "Cc:" && pCc & return after tMsg
   end if
   
   #qui mettiamo il separatore per gli allegati (multipart)   
   if pAtts is an array then
      local tBoundary
      put "boundary" & the seconds into tBoundary
      put "MIME-Version: 1.0" & return & "Content-Type: multipart/mixed; boundary=" & wrapQ(tBoundary) & return & "--" & tBoundary & return after tMsg
   end if
   
   #qui mettiamo il corpo del messaggio (HTML o TEXT)   
   if pHtml is true then
      put "Content-Type: text/html;" & return & return after tMsg
   else
      put "Content-Type: text/plain;" & return & return after tMsg
   end if
   put pMsg & return after tMsg
   
   #qui mettiamo gli allegati
   if pAtts is an array then
      put "--" & tBoundary & return after tMsg
      repeat for each element tAtt in pAtts
         if there is a file tAtt["path"] then
            if tAtt["type"] is empty then
               get "application/octet-stream"
            else
               get tAtt["type"]
            end if
            put "Content-Type:" && it & "; name=" & wrapQ(tAtt["name"]) & ";" & return & "Content-Transfer-Encoding: base64;" & return & return & base64Encode(URL ("binfile:" & tAtt["path"])) & return & "--" & tBoundary & return after tMsg
         end if
      end repeat
   end if
   
   #spediamo l'email con sendmail. Lo chiamiamo da shell e poi mandiamo la stessa email agli indirizzi in BCC.
   get shell("echo" && wrapQ(shellEscape(tMsg)) && "| /usr/sbin/sendmail" && wrapQ(shellEscape(pTo)) && "-f" && wrapQ(shellEscape(pFrom)))
   if pBcc is not empty then
      get shell("echo" && wrapQ(shellEscape(tMsg)) && "| /usr/sbin/sendmail" && wrapQ(shellEscape(pBcc)) && "-f" && wrapQ(shellEscape(pFrom)))
   end if
   #FINE   
end mail

function shellEscape pText
    repeat for each char tChar in "\`!$" & quote
       replace tChar with "\" & tChar in pText
    end repeat
    return pText
end shellEscape

-- wrap quotes around text
function wrapQ pText
    return quote & pText & quote
end wrapQ


Come vedete è quasi più grande il commento per spiegare come funziona che il codice del messaggio.
In fondo ci sono due funzioni piccolissime: una per mettere il carattere di escape per i caratteri riservati della shell (shellEscape()), l'altra funzione (wrapQ()) serve solo a mettere il virgolette all'inizio e alla fine di una stringa.
Interessante è la stringa utilizzata per separare gli allegati è creata unendo il la parola "boudary" con il numero che esce fuori con la funzione seconds(). Per chi non lo sapesse la funzione seconds indica il numero di secondi tra l'istante corrente è il 1/1/1970. In questo modo non ci dovrebbero essere problemi a separare gli allegati tra loro.
Dove vedete due e commerciali ("&&"), non è un errore, bensì è un sistema più veloce equivalente a scrivere "& space &".
Il resto del codice è tutto commentato, ma se avete domande, fatele pure nei commenti e proverò a rispondervi.


venerdì 13 novembre 2015

Creare un app da zero in 3 ore e 16 minuti

Il video seguente di appena 3 minuti vi mostra tutto il procedimento per creare un app videogioco per iPhone, dalla grafica, fino all'installazione utilizzando livecode.
E' stato chiesto ad un programmatore che non conosce l'ojective-c e che non ha mai sviluppato per cellulari di fare tutto con livecode.
Partendo dall'idea, ai disegni e allo sviluppo, le righe di codice, non ci sono volete che poche ore.
Ecco come ha distribuito il tempo:
  • l'idea: 8 minuti
  • creare la grafica da zero: 39 minuti
  • scrivere il codice e testare il programma sul simulatore: 2 ore e 29
Ecco il simpatico video:


mercoledì 11 novembre 2015

Widget Browser

Come sapete la versione 8 di livecode non è per gli utenti normali, è solo di prova e la stanno implementando lentamente. Se volete programmare, utilizzate la versione 7.
Nonostante ciò, un'altra novità della versione 8, inserita dalla versione 8 dp8, è il controllo browser.
Ora è possibile direttamente trascinare un browser web dentro ai nostri programmi, semplicemente utilizzando l'icona col mondo presente nella finestra degli strumenti.
Browser in modalità edit

Anche nelle versioni precedenti di livecode era possibile inserire un browser, ma era tutto da codice. Ora, grazie alla nuova architettura a widget, inserire nuovi controlli come questo in livecode è molto più semplice.
Widget in modalità utilizzo (browse tool)
Le sue due proprietà fondamentali sono:

  • URL
  • htmltext
Impostando la proprietà URL, carica la pagina web indicata e imposta la proprietà htmlText mettendoci dentro quello che riceve dalla pagina.
Viceversa, impostando la proprietà htmlText, comparirà nel browser ciò che scrivete in HTML e la proprietà URL diviene un indirizzo fittizio (http://libbrowser_dummy_url/).
Qui sotto un esempio mettendo come htmlText la stringa "<b>Ciao livecode!</b>".
htmlText="<b>Ciao livecode!</b>"

martedì 10 novembre 2015

any

Ho appena scoperto una parola comodissima da usare in livecode e voglio condividere questa nozione con voi lettori del blog.
La parola è any, e serve ad estrarre un valore casuale da un qualsiasi tipo di lista o oggetto.
Ad esempio:


   put "1,3,6,5,12,58,87" into temp
   put any item of temp


ma la anche questo è valido:

put any key of mioArray



oppure questo:
put any line of miaLista


Non solo potete estrarre elementi a caso senza impazzirvi con la funzione random(), ma potete utilizzarla anche in altri modi nei vostri programmi:
go to any card

select any button

lunedì 9 novembre 2015

Livecode 7 compatibile raspberryPi 2

Livecode 7 è compatibile con raspberry Pi 2.
Raspberry Pi 2

Se avete questo nuovo modello, potete programmarci con livecode senza problemi.

venerdì 6 novembre 2015

Licenze e sconti

In questi giorni c'è uno sconto del 30% sul prezzo delle licenze commerciali di livecode.
Livecode è gratuito e open source, ma per fare applicazioni chiuse (closed source) bisogna usare la versione a pagamento. Sul sito di livecode c'è il seguente semplice specchietto per capire cosa si può fare e cosa no con la versione open source. Sono le stesse restrizione di qualunque software open source:

Si può usare la versione gratuita Open SourceSi deve usare la versione Commerciale
Il dipendente Mario vuole fare un software da usare dentro la sua azienda per gestire le fatture.

Il dipendente Mario vuole fare un software per gestire le fatture ad altri senza mostrare il codice.
La società Rossi vuole distribuire un programma e il codice sorgente.

La società Rossi vuole distribuire una App su iOS, su iTune o su Mac app Store.
L'insegnante Luigi vuole insegnare a programmare ai suoi studenti

Luigi vuole vendere il suo programma senza distribuire il codice sorgente.
Lo studente Marco vuole creare una app Android open source

La società Sara crea una app chiusa per un cliente. Senza fornirgli i sorgenti
La società Franchi vuole fare una app open source e guadagnare con servizi e supportoLa società Franchi vuole incorporare nel suo programma chiuso qualcosa fatto con livecode. (servirebbe la licenza tipo enterprise)

Stefano vuole creare una app open source e ricevere soldi come donazioniLa società Luca ha bisogno di supporto tecnico a una correzione urgente di alcuni bug. (servirebbe la licenza tipo enterprise)

Roberto vuole creare un'applicazione server per la sua società che comunica con i cellulari dei dipendenti

Roberto vuole creare un'applicazione server  che comunica con i cellulari dei dipendenti e venderla
Carlo vuole creare un programma da condividere con gli altri programmatori di livecodeCarlo vuole fare un programma con un canone.
La licenza commerciale serve anche  anche se è incorporato in un programma con un canone.

Questo specchietto è molto utile anche per chi lavora nell'open source.

giovedì 5 novembre 2015

json

Le Json sono un metodo per inviare più informazioni, tipo XML, trovate una spiegazione dettaglita qui: http://www.json.org/json-it.html

Sono molto usate in Java e ad esempio è il seguente testo:



{"impiegati":[
    {"Nome":"John", "cognome":"Doe"},
    {"Nome":"Anna", "cognome":"Smith"},
    {"Nome":"Peter", "cognome":"Jones"}
]}

Se dovete ricevere o inviare dati nel formato Json, esiste una libreria che trasforma un array livecode in Json e vicevera. Si può scaricare da qui: https://github.com/bhall2001/fastjson  basta scaricare solo il file fastjson.lc.
Incorporandolo nei vostri programmi (start using stack "fastJson") avrete accesso alle seguenti funzioni:

  • arrayToJson(), per trasformare un array livecode in un testo Json
  • jsonToArray(), per trasformate un file Json in un array livecode
  • isJson(), per verificare che sia un testo Json
Personalmente non trovo nulla di speciale in Json, per mandare un array potete usare CSV, XML e le funzioni arryencode / arraydecode, comunque è utile conoscerlo.

mercoledì 4 novembre 2015

Esempio HTML5

Una delle novità di livecode 8 è l'esportazione in HTML5, cioè il vostro programma può essere eseguito anche dentro un browser. Ad esempio il seguente programma di disegno:

lo potete provare a questo link: http://hyperhh.org/html5/krikelKrakel-8.0.0-dp-7X.html

Sempre dello stesso autore potete provare altri esperimenti a questa pagina: http://hyperhh.org/html5/