venerdì 28 novembre 2014

Vincere Hackaton/YAN 2014 con Livecode

Ecco una bella notizia, il 9 Novembre 2014 si è tenuta in Armenia la gara Hackaton [YAN] Gyumri, i vincitori hanno utilizzato Livecode per la loro app.
Due membri del gruppo vincitore
Ecco la traduzione di un'intervista a Gayane Ghandilyan il capo del gruppo vincitore:

Gayane Ghandilyan
Perché hai deciso di imparare a programmare?

Domanda divertente. Mi ero appena laureata presso l'Università di Cross-Cultural Communications ed è era appena uscita l'offerta per la posizione di direttore operativo per Digital Pomegranate, una società start-up. E 'stata un'opportunità completamente nuova e interessante, perché non avevo mai avuto alcuna esperienza tecnica. Ho subito capito che per dirigere le operazioni di una società nel settore tecnologico, era necessario sapere programmare, quindi ho iniziato a frequentare i corsi che facevamo. Sono stata stupita e sorpresa con la facilità con cui le persone che non hanno mai programmato prima imparavano LiveCode - me compresa.

Da quanto tempo usi LiveCode?

Digital Pomegranate ha iniziato ad utilizzare LiveCode nel marzo del 2014. In un primo momento, abbiamo fatto un progetto di per un gioco semplice, con due giovani membri del nostro team. Non avevano mai programmato prima e sono stati in grado di creare applicazioni imparando da soli. Eravamo tutti così colpiti che abbiamo deciso di studiare LiveCode come strumento di sviluppo per applicazioni commerciali. Abbiamo scoperto che con Livecode potremmo essere molto produttivi per lo sviluppo mobile. Questo è vero specialmente per quelle persone che non hanno mai programmato prima. Ora, Livecode è la lingua principale di sviluppo presso Digital Pomegranate.

Quindi, voi e la vostra squadra non eravate programmatori esperti?

Eravamo un gruppo di cinque persone, tra cui sviluppatori e manager. Tre di noi ha iniziato imparando Livecode da giugno 2014, e due ragazzi si sono uniti a noi da agosto. Abbiamo imparato Livecode per cinque mesi prima di entrare in concorrenza. Il nostro capo programmatore ha fatto esperienza in sviluppo mobile con LiveCode per cinque mesi, così lei è stata in grado di organizzare la squadra e fare la gestione delle attività in maniera efficace considerando le capacità e la quantità di esperienza degli altri membri del team. Io sono il manager e la persona di comunicazione nel gruppo, e io stessa ho imparato Livecode da giugno e ad essere un manager produttivo per il gruppo.

Hai avuto una precedente esperienza di codifica o è LiveCode il primo linguaggio di programmazione che hai provato?


Non ho avuto alcuna esperienza, ma alcuni membri del team hanno studiato HTML, Javascript, C, Java e PHP all'università. I fondatori della Digital Pomegranate stavano cercando un modo per sviluppare rapidamente le applicazioni multipiattaforma nella città di Gyumri (in  Armenia) così hanno introdotto LiveCode. C'erano solo un paio di programmatori qualificati in città, quindi sapevamo che avrebbero dovuto imparare tutto da zero, per questo LiveCode è stata la scelta perfetta.

Dove avete sentito parlare di LiveCode?

E 'stato suggerito da uno dei nostri fondatori, Todd Fabacher, che ha molti anni di esperienza nel settore. Ma abbiamo guardato diverse opzioni diverse piattaforme croce all'inizio. Abbiamo valutato PhoneGap, REALbasic e Appcelerator. Nessuno aveva la facilità d'uso e produttività LiveCode. I fattori decisivi sono stati (i) la capacità di formare nuovi programmatori in appena 12 settimane, (ii) la funzionalità multi-piattaforma e più importante, (iii) aveva anche una soluzione di scripting web. Nessun'altra piattaforma ha avuto la gamma di funzionalità come LiveCode.

Parlami del hackathon - quante squadre iscritte e dove erano loro da?

Hackathon YAN è un concorso di programmazione e di idee innovative sponsorizzato principalmente dal Microsoft Innovation Center. Quest'anno, Hackathon [YAN] si è svolto a Gyumri, la seconda città più grande dell'Armenia, al centro di una nuova tecnologia sponsorizzata della Banca Mondiale. C'erano 60 squadre provenienti da diverse regioni d'Armenia. Hanno portato una vasta gamma di progetti tra cui B2B, soluzioni B2C, giochi, piattaforme educativi e di intrattenimento, etc.
In 24 ore, le squadre partecipanti (compresi i programmatori e non programmatori) hanno sviluppato prototipi / versioni demo dei loro applicazioni Web o applicazioni mobili. Alla fine, ogni squadra fa una breve presentazione di quello che è stato fatto che viene valutata dal gruppo di esperti, che poi seleziona i 3 vincitori.

Che tipo di app hai creato?

Il nostro ufficio si trova presso il Gyumri Tech Center, quindi dal momento che è la nostra "casa" e non abbiamo dovuto viaggiare, abbiamo partecipato con due squadre di sei persone ciascuno. Abbiamo voluto concentrarsi su applicazioni che potrebbero essere sia redditizie sia con benefici sociali. La prima applicazione è stata il Walking Tour App. Si tratta di una applicazione mobile (sia per iOS e Android) volto a dare alle piccole città e ai quartieri delle grandi città la capacità di attrarre turisti con destinazioni tradizionalmente turistiche, consentendo la facile creazione di percorsi interattivi a piedi. Il nostro obiettivo è stato quello di creare un sistema di inserimento dati utilizzato da non-programmatori, in modo di inserire solo i dati necessari per il loro cammino giro nell'app quali: testi, immagini, video e audio in multi-lingue. I dati vengono memorizzati in un database SQLite e inviato a noi in cui ci attacchiamo un grafica e schede grazie a Livecode e poi bingo -  il Walking Tour App è atato creato. Con l'aiuto della nostra applicazione, le città o i quartieri avranno uno strumento per attrarre più turisti e potranno sperimentare la loro cultura unica e allo stesso tempo stimolare l'attività economica per la regione.
Walking Tour App


Una delle soluzioni uniche nostra App offre è una soluzione di hosting con una piccola tassa annuale. Gli utenti o il nostro team possono aggiornare il database o aggiungere eventi ad essa, e il sistema aggiorna il webserver. Poi ogni volta che l'applicazione richiede aggiornamenti al server web che aggiorna il database locale sul dispositivo mobile. In questo modo non solo i costi sono solo una frazione del costo dei nostri concorrenti, ma abbiamo anche una rendita ricorrente. Ne hanno benefici inoltre le nostre città, villaggi e quartieri in quanto possono vendere annunci "presenti" e aggiornare in modo dinamico.

La seconda area che abbiamo scelto di presentare alla hackathon era una soluzione per i medici itineranti rurali chiamato Schedule.Clinic. Si tratta di un sistema di prenotazione e gestione medica degli appuntamento per cliniche mediche mobili come dentisti, psicologi, terapisti, ginecologi, ecc,  abbiamo aggiunto la possibilità per la clinica di impostare la posizione dei medici in posizione specifica in date specifiche. Schedule.Clinic dispone inoltre di un sistema di posta elettronica completamente automatico per avvisare i pazienti nelle zone dell'arrivo dei medici e un sistema di prenotazione online che permette a questi pazienti di prendere un appuntamento al momento più conveniente per loro, senza far spendere ore di lavoro agli assistenti di lavoro per incasellare bene gli appuntamenti..

La giuria di esperti ha scelto  Walking Tour App come uno dei 3 vincitori.

Quali lingue sono state le altre squadre che utilizzano?

C'era tutta una varietà di linguaggi di programmazione e piattaforme di codifica, per lo più di PHP per il web, ma c'era una concentrazione più forte sullo sviluppo mobile utilizzando Java e Objective C. Siamo stati una delle poche squadre che utilizzano uno strumento cross-platform.

Quante persone sono nel vostro team? Come hai fatto a dividere il lavoro per programmare l'applicazione?

Abbiamo avuto due gruppi di sei persone ciascuno. Abbiamo replicato la struttura che usiamo nel nostro ufficio. Ogni squadra ha avuto: un project/business manager , uno specialista di interfaccia utente, un web designer, un programamtore back-end e un programmatore front-end. I giudici apprezzato molto il fatto che non solo abbiamo creato il codice dell'App, ma abbiamo fatto anche ricerche di mercato, analisi della concorrenza, i requisiti funzionalità e quindi la prototipazione UI (Interfaccia Utente). Perché abbiamo avuto solo 24 ore, facendo la corretta progettazione iniziale ci ha permesso di essere più produttivi e concentrarsi su di codifica.

Il team vincitore al completo

Perché pensi abbiate vinto?

Il fattore più importante è stata la forza della nostra idea. Abbiamo preso un problema che tutti hanno capito: lo scarso sviluppo economico della nostra città. Abbiamo anche dimostrato che molte città di tutto il mondo hanno un problema simile e abbiamo creato una semplice soluzione conveniente per contribuire a rafforzare l'attività economica attraverso il turismo. Abbiamo dimostrato che il turismo è in aumento in Armenia e in tutto il mondo, ma si concentra su poche località. Uno dei motivi è la mancanza di informazioni sulle piccole città e ciò che hanno da offrire. Offrendo la nostra soluzione di città, villaggi, quartieri, comunità e distretti diventiamo un altro canale di marketing per i nostri futuri clienti come applicazione vi aiuterà attirare i turisti nelle loro strade della città, negozi, gallerie e caffè, che avrà lo impatto sull'economia locale .


Cosa avete vinto?

Abbiamo vinto un iPad Air, più accelerazione, consulenza e opportunità partecipando  al concorso di Microsoft Innovation Center Armenia. Gli organizzatori hanno indicato l'importanza di esposizione e formazione al centro piuttosto che i soldi vinti per una startup.

Che cosa avete intenzione di fare dopo?

Il nostro obiettivo è di avere un lancio di una beta a gennaio 2015. Ora abbiamo bisogno di completare il software, per entrambe le piattaforme: iOS e Android. Abbiamo anche bisogno di completare il nostro sito web di marketing e il piano per una campagna di marketing di contenuti. Abbiamo imparato che è altrettanto importante lavorare sul marketing e materiale promozionale in quanto è al codice. Quindi per le prossime sei settimane finiremo il codice e il business questioni connesse.

Vincendo questa competizione, quali porte pensi potrebbero aprirsi per voi?

Vincere a grande gara Hackathon dell'Armenia porta più esposizione e copertura mediatica. Il concorso è organizzato da Microsoft Innovation Center Armenia che apre molte porte alle start-up, tra cui l'accelerazione, la possibilità di mostrarsi agli investitori e la partecipazione a diversi tipi di esibizioni e concorsi.
Hackathon [YAN] Gyumri 2014
Hackathon [YAN] Gyumri 2014

giovedì 27 novembre 2014

Trevix Design

Qualche giorno fa ho presentato un programma della Trevix Design, visto il successo del post ho contattato la società stessa per farmi inviare un piccola presentazione della loro attività.
Il Sig. Trevisan è stato molto gentile nel rispondermi ed inviarmela; ecco una breve descrizione della Trevix, di cosa si occupa e di come contattarla per sviluppare dei progetti con loro:



Trevix Design realizza software gestionali basati su LiveCode e FileMaker.

L’utilizzo di LiveCode, ha permesso di creare applicazioni multi-piattaforma, estendendo l’interfaccia a database commerciali, quali Filemaker, Microsoft Access e MySQL.

Un esempio di questo utilizzo è CC_SaniMont, una Cartella Clinica Elettronica gratuita per il primo soccorso traumatologico, che gira su FileMaker 12/13 o Server e che può dialogare direttamente con un programma di contabilità esterno. CC_SaniMont consente di eseguire con estrema rapidità la redazione della cartella clinica, registrando i dati anagrafici dei pazienti, i dati della cartella clinica e stampando i documenti relativi. Collegata a MidaPlus (programma di contabilità della MIDA4 S.r.l) CC_SaniMont può prelevare, registrare e modificare da questo programma i dati anagrafici, importare le liste di prestazioni (già prezzate in contabilità) e registrare le stesse per la fatturazione.

Tcal invece è un software interamente realizzato in LiveCode, che però utilizza i database degli utenti per salvare i dati.
Si tratta di un "Time Tracking calendar”, un calendario gestionale per tenere traccia delle ore lavorate sulle diverse commesse.
Un calendario condiviso client/server, multi-piattaforma, con una completa interfaccia grafica. Usando TcalServer e TCP/IP in una intranet o su internet, registra eventi, scadenze e ore di lavoro sui database gestionali dei clienti, realizzati in FileMaker Pro, Microsoft Access o MySQL, permettendo di effettuare il Time Tracking dei dipendenti. Tcal è un software disponibile in Italiano e in Inglese.

Un altra realizzazione di Trevix Design, anche questa gratuita, è Piccolo Installer.
Piccolo Installer è un semplice generatore di Installer basato su Livecode.
Questo stack, che può essere utilizzato anche come plug-in all'interno di LiveCode (5.5.5 o superiore), permette di creare installers del vostro software per i sistemi operativi OSX e Windows (XP/7).

Maggiori informazioni a questa pagina web:http://www.trevix.it/software.html

mercoledì 26 novembre 2014

Richiesta di lavoro

Ecco il link per una richiesta di un esperto di Livecode: https://www.odesk.com/o/jobs/job/_~019c43023d3b63810f/
Descrizione:
 
Job Description: help me to create the structure of an Interactive ebook that runs offline on ipad, android tablets, pc and mac, radio button and drag and drop quizzes simple editor where users can type text and others

Dal suo account su odesk il cliente sembra serio.

martedì 25 novembre 2014

Piccolo installer

Oggi presentiamo un prodotto italiano: Piccolo installer.
Questo programma per Livecode permette di creare un sistema di installazione automatico per i nostri programmi sia per Windows, sia per Mac.
Premetto subito che lo sviluppatore italiano, la Trevix Design, lo ha rilasciato sia in forma gratuita per applicazioni open-source, sia a pagamento per programmi non open-source.
Il programma è pulito, ben fatto e pieno di opzioni. Analizziamolo brevemente.
Nella prima schermata si imposta il nome e il tipo di installatore:

Poi c'è la schermata per scegliere i file e le cartelle da includere:
Schermata per inserire loghi, icone e immagini:
Schermata per selezionare le lingue da includere, è obbligatoria sceglierne almeno una. Potete anche impostare la licenza e il README in lingua, l'estensione associata al programma, le scorciatoie e la presenza nel menù di avvio rapido di windows, e altro ancora...
Qui potete inserire script da eseguire prima o dopo l'installazione o prima o prima della disinstallazione:

Il programma supporta anche il drag and drop per trascinare dentro direttamente le icone dei file che volete inserire.
Vi segnalo di stare molto attenti al tasto RESET, perchè cancella le impostazioni da tutte le schede, non solo da quella corrente.

lunedì 24 novembre 2014

Lettore RSS

Abbiamo già visto in questo post che è possibile maneggiare i file XML, quindi fare un lettore RSS con livecode è un gioco da ragazzi, vediamo come fare.
Per chi non sapesse cosa è un RSS, diciamo che è un riassunto del sito in formato XML; utile per vedere aggiornamenti o le ultime notizie pubblicate.
Per esempio il feed RSS di questo blog è scaricabile dal link: http://livecodeitalia.blogspot.com/feeds/posts/default
e il suo contenuto, in formato Atom, in questo momento è:

<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4445525023951541943</id><updated>2014-11-20T17:00:07.053+01:00</updated><category term="programmazione"/><category term="casi di successo"/><category term="eventi"/><category term="grafica"/><category term="animazione"/><category term="immagini"/><category term="mobile"/><category term="videogiochi"/><category term="internet"/><category term="testi"/><category term="Android"/><category term="iOS"/><category term="database"/><category term="debug"/><category term="stampa"/><category term="browser"/><category term="filesystem"/><category term="mac"/><category term="pdf"/><category term="raspberry pi"/><category term="XML"/><category term="audio"/><category term="licenze"/><category term="linux"/><category term="windows"/><category term="3D"/><category term="arduino"/><category term="cloud"/><category term="compressione"/><category term="estensioni"/><category term="matematica"/><category term="versione"/><category term="video"/><title type='text'>Livecode Italia</title><subtitle type='html'>Livecode: un linguaggio di programmazione gratuito, semplice e completo per: Windows, Mac, Linux, Android, iOS e Raspberry Pi.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://livecodeitalia.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4445525023951541943/posts/default'/><link rel='alternate' type='text/html' href='http://livecodeitalia.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4445525023951541943/posts/default?start-index=26&amp;max-results=25'/><author><name>Max V</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-0gSDErJzGaU/AAAAAAAAAAI/AAAAAAAABkg/vz8NYNQrMhw/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>110</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4445525023951541943.post-5132512118640945924</id><published>2014-11-18T11:58:00.000+01:00</published><updated>2014-11-18T11:58:18.143+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="casi di successo"/><title type='text'>WhiteFly</title><content type='html'>Ho contattato il Sig. Paolo Borzini della società italiana &lt;a href=&quot;http://www.borzini.it/&quot;&gt;WhiteFly&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.borzini.it/rw_common/images/LogoTheWhiteFly.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.borzini.it/rw_common/images/LogoTheWhiteFly.png&quot; height=&quot;64&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Questa società in poco più di due anni ha sviluppato più di 50 app! Potete trovare i loro programmi anche sotto il nome di Borzini software.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.borzini.it/rw_common/themes/mirage/images/editable_images/image6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.borzini.it/rw_common/themes/mirage/images/editable_images/image6.jpg&quot; height=&quot;64&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;La società fornisce anche un valido supporto a chi voglia sviluppare una app e non abbia tempo o conoscenze adeguate per produrla; partendo dalla progettazione fino alla pubblicazione sullo &lt;i&gt;store&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;In questo momento il Sig. Borzini è impegnato su vari progetti, ma nonostante ciò mi ha gentilmente inviato una breve presentazione della società che pubblico con piacere:&lt;br /&gt;&lt;br /&gt;&lt;cite&gt;The WhiteFly è stata fondata due anni fa con due scopi, il primo è     gestire un service     on-line per serigrafi e l&#39;altro sviluppare software per smartphone.     &lt;br /&gt;    Il tool di sviluppo che uso è LiveCode, tra i linguaggi di     programmazione che  conosco c&#39;è HyperTalk usato attraverso Hypercard a cavallo tra gli     anni 80 e 90 per     sviluppare gestionali su piattaforme Apple. La scelta di LiveCode,     evoluzione naturale     di HyperTalk/HyperCard non è data solo dall&#39;estrema portabilità del     sorgente e dalla    riusabilità del codice ma dalla potenza del linguaggio. Con poche     manciate di codice    è possibile fare procedure che con altri linguaggi richiederebbero     centinaia di righe.&lt;br /&gt;    Per un&#39;azienda come la mia, il poter recuperare parti di codice già     scritto e preparare    la stessa applicazione per più piattaforme con minime modifiche è la     carta vincente.&lt;br /&gt;    Fino ad ora ho sviluppato oltre cinquanta applicazioni per     iOS/Android sia conto terzi che     per clienti finali, oltre ad una decina di app ,che una volta     avremmo chiamato inutility     ovvero applicazioni troppo specifiche e particolari da trovare un     mercato ampio, ma ora     grazie alla diffusione degli store e dei sistemi su cui possono     girare, queste app hanno     un loro mercato. Grazie alla versatilità di LiveCode ho sviluppato     app diametralmente     opposte tra loro; ci sono semplici applicazioni commerciali per     centri estetici, per     alberghi e club per andare poi ad applicazioni come il dizionario     italiano/cinese che     gestisce pinyin o più complessi come gestionali con carico e scarico     magazzino tramite     smartphone o app che si interfacciano a macchinari come misuratori     di pelle nel settore     conciario o che gestiscono sistemi domotici a distanza oppure ad     analizzatori di documenti.&lt;br /&gt;    Grazie a LiveCode ho sviluppato questi software in una piccola parte     del tempo che avrei      dovuto impiegare se avessi usato altri sistemi di sviluppo.&lt;/cite&gt;&lt;br /&gt;&lt;br /&gt;Se volete entrare in contatto con il Sig. Borzini, basta andare sul suo sito: &lt;a href=&quot;http://www.borzini.it/&quot;&gt;http://www.borzini.it/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://livecodeitalia.blogspot.com/feeds/5132512118640945924/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://livecodeitalia.blogspot.com/2014/11/whitefly.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4445525023951541943/posts/default/5132512118640945924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4445525023951541943/posts/default/5132512118640945924'/><link rel='alternate' type='text/html' href='http://livecodeitalia.blogspot.com/2014/11/whitefly.html' title='WhiteFly'/><author><name>Max V</name><uri>https://plus.google.com/117875773076259835208</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-0gSDErJzGaU/AAAAAAAAAAI/AAAAAAAABkg/vz8NYNQrMhw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4445525023951541943.post-7278118855352324491</id><published>2014-11-17T11:21:00.000+01:00</published><updated>2014-11-17T11:21:18.072+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="programmazione"/><category scheme="http://www.blogger.com/atom/ns#" term="testi"/><title type='text'>Prefissi e suffissi</title><content type='html'>Il post di oggi mostra come controllare se un testo comincia o finisce in un determinato modo. Ad esempio vogliamo controllare che l&#39;estensione di un file sia JPG, basterà utilizzare il comando &lt;b&gt;ends with&lt;/b&gt;,&lt;b&gt; &lt;/b&gt;esempio:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style=&quot;background-color: #d8d8d8; border: 1px solid grey; max-height: 400px; overflow-x: scroll; overflow-y: scroll; white-space: nowrap; width: 100%;&quot;&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; myfile &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;ends&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;jpg&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;b&gt;then&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;answer&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;E&#39; un&#39;immagine!&quot;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;Potete utilizzare anche più di tre lettere per il controllo. I controlli di solito fa distinzione fra maiuscole o minuscole, però se vi serve una distinzione dovete impostare la proprietà globale &lt;b&gt;caseSensitive&lt;/b&gt; su &lt;i&gt;true&lt;/i&gt;.&lt;br /&gt;Vi ricordo che, per controllare se le estensione di un file è tra quelle ammesse, un altro sistema molto comodo è metterle tutte in una stringa separate da virgola e usare il seguente codice:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style=&quot;background-color: #d8d8d8; border: 1px solid grey; max-height: 400px; overflow-x: scroll; overflow-y: scroll; white-space: nowrap; width: 100%;&quot;&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; -3 &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; -1 &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; myfile &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;among&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;jpg,gif,bmp,tif&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;b&gt;then&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;answer&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;E&#39; un&#39;immagine!&quot;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Per controllare invece se un testo comincia con un certo prefisso, basta usare &lt;b&gt;begins with&lt;/b&gt;; esempio:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style=&quot;background-color: #d8d8d8; border: 1px solid grey; max-height: 400px; overflow-x: scroll; overflow-y: scroll; white-space: nowrap; width: 100%;&quot;&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; myfile &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;begins&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;C&#39;era una volta&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;b&gt;then&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;answer&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;E&#39; una favola!&quot;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Se avete altri sistemi per fare controlli sulle stringhe, metteteli nei commenti di questo posto.</content><link rel='replies' type='application/atom+xml' href='http://livecodeitalia.blogspot.com/feeds/7278118855352324491/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://livecodeitalia.blogspot.com/2014/11/prefissi-e-suffissi.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4445525023951541943/posts/default/7278118855352324491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4445525023951541943/posts/default/7278118855352324491'/><link rel='alternate' type='text/html' href='http://livecodeitalia.blogspot.com/2014/11/prefissi-e-suffissi.html' title='Prefissi e suffissi'/><author><name>Max V</name><uri>https://plus.google.com/117875773076259835208</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-0gSDErJzGaU/AAAAAAAAAAI/AAAAAAAABkg/vz8NYNQrMhw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4445525023951541943.post-5883290158683735212</id><published>2014-11-14T16:58:00.001+01:00</published><updated>2014-11-14T17:00:13.577+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="programmazione"/><category scheme="http://www.blogger.com/atom/ns#" term="XML"/><title type='text'>I metadati di un testo</title><content type='html'>Livecode supporta l&#39;inserimento di meta data all&#39;interno di un testo, cioè l&#39;inserimento di dati che non sono visibili all&#39;utente che legge il testo.&lt;br /&gt;Per inserire dei metatag ci sono vari modi: potete passare attraverso la proprietà &lt;b&gt;htmlText&lt;/b&gt;:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style=&quot;background-color: #d8d8d8; border: 1px solid grey; max-height: 400px; overflow-x: scroll; overflow-y: scroll; white-space: nowrap; width: 100%;&quot;&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;set&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #007f7f;&quot;&gt;htmlText&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;field&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;Testo normale. &amp;lt;span metadata=&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &amp;amp; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;quote&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &amp;amp; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;dato nascosto&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &amp;amp; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;quote&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &amp;amp; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;&amp;gt;Testo con metadata&amp;lt;/span&amp;gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;come vedete è solo un tag &lt;i&gt;span&lt;/i&gt;.&lt;br /&gt;Oppure utilizzare la proprietà metadata:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style=&quot;background-color: #d8d8d8; border: 1px solid grey; max-height: 400px; overflow-x: scroll; overflow-y: scroll; white-space: nowrap; width: 100%;&quot;&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;set&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #007f7f;&quot;&gt;metaData&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;word&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;field&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;dato nascosto&quot;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Cosa si può fare con i metadati? Esistono già le proprietà personalizzabili (&lt;i&gt;cutom properties&lt;/i&gt;) che possono contenere dati non visibili all&#39;utente, ma i metadati possono creare effetti legati al testo o trasferire informazioni che non debbono essere visualizzate dall&#39;utente.&lt;br /&gt;Come esempio pratico facciamo in modo che appaia il valore del metadato di una parola passandoci sopra il mouse:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style=&quot;background-color: #d8d8d8; border: 1px solid grey; max-height: 400px; overflow-x: scroll; overflow-y: scroll; white-space: nowrap; width: 100%;&quot;&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;on&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; mouseMove&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;if&lt;/b&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;mouseChunk&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;empty&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;b&gt;then&lt;/b&gt; &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;exit&lt;/b&gt; mouseMove&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;end&lt;/b&gt; &lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;set&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #007f7f;&quot;&gt;toolTip&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;me&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #007f7f;&quot;&gt;metaData&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;mouseChunk&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; mouseMove &lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-ivLLj-K2xNQ/VGYkikrntyI/AAAAAAAACz8/5moY30-KA-4/s1600/metadato.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-ivLLj-K2xNQ/VGYkikrntyI/AAAAAAAACz8/5moY30-KA-4/s1600/metadato.jpg&quot; height=&quot;182&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Un altro modo per avere la lista dei metadati è passare attraverso l&#39;array della proprietà &lt;b&gt;StyledText&lt;/b&gt;; non che mi piaccia, ma può essere utile saperlo:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style=&quot;background-color: #d8d8d8; border: 1px solid grey; max-height: 400px; overflow-x: scroll; overflow-y: scroll; white-space: nowrap; width: 100%;&quot;&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;repeat&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;each&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;element&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; tParagraph &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;the&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #007f7f;&quot;&gt;styledText&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;field&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;Content&quot;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;add&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; theParagraphCount&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;repeat&lt;/b&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;each&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;element&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; tRun &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; tParagraph[&lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;runs&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;if&lt;/b&gt; tRun[&lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;empty&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;b&gt;then&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;put&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; theParagraphCount &amp;amp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &amp;amp; tRun[&lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;] &amp;amp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &amp;amp; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;after&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; theOutput&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;end&lt;/b&gt; &lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;end&lt;/b&gt; &lt;b&gt;repeat&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;b&gt;repeat&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;color: #7f7f00;&quot;&gt;put&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt; theOutput&lt;/span&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://livecodeitalia.blogspot.com/feeds/5883290158683735212/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://livecodeitalia.blogspot.com/2014/11/i-meta-data-di-un-testo.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4445525023951541943/posts/default/5883290158683735212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4445525023951541943/posts/default/5883290158683735212'/><link rel='alternate' type='text/html' href='http://livecodeitalia.blogspot.com/2014/11/i-meta-data-di-un-testo.html' title='I metadati di un testo'/><author><name>Max V</name><uri>https://plus.google.com/117875773076259835208</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-0gSDErJzGaU/AAAAAAAAAAI/AAAAAAAABkg/vz8NYNQrMhw/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-ivLLj-K2xNQ/VGYkikrntyI/AAAAAAAACz8/5moY30-KA-4/s72-c/metadato.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999

Ok, fa spavento, ma in realtà è molto semplice. Se lo leggiamo con calma, mandando a capo ogni tag, ci accorgiamo che lo schema ha dei tag iniziali che spiegano il blog e di cosa parla, e poi dei tag per ogni post del blog in questa forma:

<entry>
   <id>tag:blogger.com,1999:blog-4445525023951541943.post-5132512118640945924</id>
    <published>2014-11-18T11:58:00.000+01:00</published>
    <updated>2014-11-18T11:58:18.143+01:00</updated>
    <category scheme="http://www.blogger.com/atom/ns#" term="casi di successo"/>
    <title type='text'>WhiteFly</title>
    <content type='html'>Ho contattato il Sig. Paolo Borzini della ...</content>   
    <link rel='replies' type='application/atom+xml' href='http://livecodeitalia.blogspot.com/feeds/5132512118640945924/comments/default' title='Commenti sul post'/>
     <link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4445525023951541943/posts/default/5132512118640945924'/>
     <link rel='alternate' type='text/html' href='http://livecodeitalia.blogspot.com/2014/11/whitefly.html' title='WhiteFly'/>    <author><name>Max V</name> ... </author>
     <thr:total>0</thr:total>
</entry>

I tag entry di questo feed sono solo 25, ognuno in ordine contiene i dati degli ultimi 25 post. Per avere la lista dei titoli, anche senza sapere di quanti entry sia composto, basta il seguente codice (connID contiene il numero di connessione al XML, mentre curn è il nodo corrente):

on mouseUp
   put the conID of this card into connID  
   put "/feed/entry" into curn
   repeat while (curn begins with "/feed")
      put revXMLNodeContents(connID, curn & "/title") & return after lista
      put revXMLNextSibling(connID, curn ) into curn     

   end repeat
   put lista
end mouseUp

Analizziamo il codice: leggiamo il contenuto del tag title del primo tag entry utilizzando il comando revXMLNodeContents. Poi andiamo grazie al ciclo repeat andiamo al prossimo tag entry, se non c'è apparirà xmlerr e quindi usciremo dal ciclo.
Se vogliamo creare un testo con i titoli, i link e i contenuti di ogni post il codice è:

on mouseUp
   put the conID of this card into connID
   put "/feed/entry" into curn
   repeat while (curn begins with "/feed")
      put "<h2>" & revXMLNodeContents(connID, curn & "/title") & "</h2><br>" after lista
      #cerchiamo il link
      put curn & "/link" into curN2      
      repeat while (curn2 begins with curN)               
         if (revXMLAttribute(connID, curn2 ,"type") is "text/html" ) AND (revXMLAttribute(connID, curn2 ,"rel") is "alternate" ) then            
            put revXMLAttribute(connID, curn2   , "href") into thelink
            put "<a href=" & thelink & " >" & thelink & "</a><br>" after lista
         end if
         put revXMLNextSibling(connID, curn2 ) into curn2         
      end repeat   
      put revXMLNodeContents(connID, curn & "/content") & "<br>" after lista
      put revXMLNextSibling(connID, curn ) into curn
   end repeat
   set the htmltext of field "myRSS" to textDecode(lista ,"UTF-8")
   answer "Feed caricato"
end mouseUp


Qui usiamo lo stesso sistema di prima, solo che il link è una prorpietà di href del tag link e quindi ci serve la funzione revXMLAttribute(). Siccome ci sono diversi tag link per ogni post ho inserito una condizione (if) di controllo per verificare che sia il tag link corretto.
Notate infine che questo sito usa la codifica UTF-8 dei caratteri, per non avere problemi sui caratteri accentati ho imposto la decodifica corretta usando textdecode().
Ecco un esempio del risultato:
Vi ricordo di attivare il locktext e di aggiungere il seguente codice al campo dove appaiono i link per renderli cliccabili:

on linkClicked pLink
   launch URL pLink
end linkClicked

Ora sapete gestire i feed RSS in formato ATOM, che è il più complicato, quindi potete gestirli tutti. :-)

venerdì 21 novembre 2014

Creare bottoni o grafica vettoriali

Quando sviluppiamo un programma, anche l'occhio vuole la sua parte. Se invece dei pulsanti normali volessimo utilizzare una grafica accattivante, potremmo utilizzare delle immagini. Il problema delle immagini e che non possono essere ingrandite o rimpicciolite senza problemi di definizione.
Ad esempio:
L'immagine ingrandita appare sempre "pixellosa"
Se invece usiamo le immagini vettoriali, non abbiamo problemi di ingrandimenti. Una grafica vettoriale non è composta da una serie predefinita di puntini colorati (pixels), ma da equazioni delle curve che compongono le immagini e per questo sono sempre definite, qualunque ingrandimento vogliamo applicare.
Questo sistema è utilissimo sopratutto per chi sviluppa su dispositivi mobili, come tablet o cellulari, permettendo di adattare la grafica ad ogni esigenza senza dover pensare alla risoluzione del dispositivo.
I controlli per disegnare forme creano oggetti vettoriali:

possiamo sfruttarli per creare controlli con grafica vettoriale.
Come esempio creeremo un pulsante bellissimo.
Cominciamo col creare un rounded rectangle (il secondo pulsante da sinistra):

Poi utilizzando il property inspector gli assegniamo un colore per il backgroundcolor (cliccate su opaque o non vedrete nulla):
Impostiamo la linesize a 0 (line thickness sul menu) in modo da far scomparire il bordo
Adesso esageriamo, andiamo su Graphic effect e selezioniamo inner glow. Giochiamo con i valori per ottenere questo:




Con questo effetto sembra in 3D. Se cambiate il colore dell'effetto inner glow in bianco, questo è il risultato:
Abbiamo appena cominciato col creare un bottone alla moda: sempre rimanendo sulle proprietà dell'inner glow, cambiamo il blend mode impostandolo a color dodge.
Ora aggiungendo gli effetti  inner shadow (bianca e poco opaca) e una drop shadow (size 1, distance 2, poso opaca) potete arrivare a questo:
Il pulsante è bellissimo, può essere ridimensionato come più ci piace e se ci aggiungete il seguente codice, vi sorprenderà ancora di più:

on mouseEnter
   set the backgroundcolor of me to "118,0,255"
end mouseEnter

on mouseLeave
   set the backgroundcolor of me to "0,118,255"
end mouseLeave

on mouseDown
   set the backgroundcolor of me to "180,0,120"
   move me relative 0,1
end mouseDown

on mouseUp
   set the backgroundcolor of me to "118,0,255"
   move me relative 0,-1
end mouseUp

martedì 18 novembre 2014

WhiteFly

Ho contattato il Sig. Paolo Borzini della società italiana WhiteFly.

Questa società in poco più di due anni ha sviluppato più di 50 app! Potete trovare i loro programmi anche sotto il nome di Borzini software.
La società fornisce anche un valido supporto a chi voglia sviluppare una app e non abbia tempo o conoscenze adeguate per produrla; partendo dalla progettazione fino alla pubblicazione sullo store.

In questo momento il Sig. Borzini è impegnato su vari progetti, ma nonostante ciò mi ha gentilmente inviato una breve presentazione della società che pubblico con piacere:

The WhiteFly è stata fondata due anni fa con due scopi, il primo è gestire un service on-line per serigrafi e l'altro sviluppare software per smartphone.
Il tool di sviluppo che uso è LiveCode, tra i linguaggi di programmazione che conosco c'è HyperTalk usato attraverso Hypercard a cavallo tra gli anni 80 e 90 per sviluppare gestionali su piattaforme Apple. La scelta di LiveCode, evoluzione naturale di HyperTalk/HyperCard non è data solo dall'estrema portabilità del sorgente e dalla riusabilità del codice ma dalla potenza del linguaggio. Con poche manciate di codice è possibile fare procedure che con altri linguaggi richiederebbero centinaia di righe.
Per un'azienda come la mia, il poter recuperare parti di codice già scritto e preparare la stessa applicazione per più piattaforme con minime modifiche è la carta vincente.
Fino ad ora ho sviluppato oltre cinquanta applicazioni per iOS/Android sia conto terzi che per clienti finali, oltre ad una decina di app ,che una volta avremmo chiamato inutility ovvero applicazioni troppo specifiche e particolari da trovare un mercato ampio, ma ora grazie alla diffusione degli store e dei sistemi su cui possono girare, queste app hanno un loro mercato. Grazie alla versatilità di LiveCode ho sviluppato app diametralmente opposte tra loro; ci sono semplici applicazioni commerciali per centri estetici, per alberghi e club per andare poi ad applicazioni come il dizionario italiano/cinese che gestisce pinyin o più complessi come gestionali con carico e scarico magazzino tramite smartphone o app che si interfacciano a macchinari come misuratori di pelle nel settore conciario o che gestiscono sistemi domotici a distanza oppure ad analizzatori di documenti.
Grazie a LiveCode ho sviluppato questi software in una piccola parte del tempo che avrei dovuto impiegare se avessi usato altri sistemi di sviluppo.


Se volete entrare in contatto con il Sig. Borzini, basta andare sul suo sito: http://www.borzini.it/

lunedì 17 novembre 2014

Prefissi e suffissi

Il post di oggi mostra come controllare se un testo comincia o finisce in un determinato modo. Ad esempio vogliamo controllare che l'estensione di un file sia JPG, basterà utilizzare il comando ends with, esempio:

if myfile ends with "jpg" then
   answer "E' un'immagine!"
end if

Potete utilizzare anche più di tre lettere per il controllo. I controlli di solito fa distinzione fra maiuscole o minuscole, però se vi serve una distinzione dovete impostare la proprietà globale caseSensitive su true.
Vi ricordo che, per controllare se le estensione di un file è tra quelle ammesse, un altro sistema molto comodo è metterle tutte in una stringa separate da virgola e usare il seguente codice:

if char -3 to -1 of myfile is among the items of "jpg,gif,bmp,tif" then
   answer "E' un'immagine!"
end if


Per controllare invece se un testo comincia con un certo prefisso, basta usare begins with; esempio:

if myfile begins with "C'era una volta" then
   answer "E' una favola!"
end if


Se avete altri sistemi per fare controlli sulle stringhe, metteteli nei commenti di questo posto.

venerdì 14 novembre 2014

I metadati di un testo

Livecode supporta l'inserimento di meta data all'interno di un testo, cioè l'inserimento di dati che non sono visibili all'utente che legge il testo.
Per inserire dei metatag ci sono vari modi: potete passare attraverso la proprietà htmlText:

set the htmlText of field 1 to "Testo normale. <span metadata=" & quote & "dato nascosto" & quote & ">Testo con metadata</span>"

come vedete è solo un tag span.
Oppure utilizzare la proprietà metadata:

set the metaData of word 3 to 5 of field 1 to "dato nascosto"


Cosa si può fare con i metadati? Esistono già le proprietà personalizzabili (cutom properties) che possono contenere dati non visibili all'utente, ma i metadati possono creare effetti legati al testo o trasferire informazioni che non debbono essere visualizzate dall'utente.
Come esempio pratico facciamo in modo che appaia il valore del metadato di una parola passandoci sopra il mouse:

on mouseMove
   if the mouseChunk is empty then
      exit mouseMove
   end if
   set the toolTip of me to the metaData of the mouseChunk
end mouseMove

Un altro modo per avere la lista dei metadati è passare attraverso l'array della proprietà StyledText; non che mi piaccia, ma può essere utile saperlo:

repeat for each element tParagraph in the styledText of field "Content"
   add 1 to theParagraphCount
   repeat for each element tRun in tParagraph["runs"]
      if tRun["metadata"] is not empty then
         put theParagraphCount & return & tRun["metadata"] & return & return after theOutput
      end if
   end repeat
end repeat
put theOutput