Siamo un gruppo di volontari che si dedica alla traduzione italiana, al supporto e alla promozione dei prodotti della Mozilla Foundation e derivati.
In questo sito è raccolto il nostro lavoro: software, traduzioni, articoli e guide.
Vi raccomandiamo di consultare i nostri forum, per chiedere informazioni o segnalare problemi su tutto ciò che pubblichiamo e, ovviamente, anche per offrire aiuto.
Collabora con noi
Entra a far parte della nostra comunità in modo attivo!
Al momento in Mozilla Firefox sono state disattivate per impostazione predefinita TUTTE le versioni del plugin Flash precedenti alla 18.0.0.204 in quanto considerate NON SICURE.
Questa misura di emergenza è stata presa unicamente al fine di garantire agli utenti un adeguato livello di protezione in quanto esse risultano affette da gravi problemi di sicurezza emersi nelle scorse ore: tali vulnerabilità risultano infatti già utilizzate da malintenzionati per la diffusione di virus e altri malware. Verrà dunque revocata non appena Adobe rilascerà un aggiornamento al plugin Flash.
Man mano che avremo notizie su questo argomento, avremo cura di pubblicare aggiornamenti a questo post.
Per ulteriori informazioni si rimandano gli utenti ai seguenti articoli:
12.20 – aggiornamento: alla pagina di download di Flash è disponibile la versione 18.0.0.209 che dovrebbe essere risolutiva (il bollettino di sicurezza riportato in precedenza non contiene informazioni in merito). Inoltre, non sembra al momento esistere un aggiornamento per la versione 11.2 destinata ai sistemi operativi Linux).
18.20 – aggiornamento: Adobe ha dato ulteriori notizie e sembra che le due vulnerabilità siano effettivamente risolte nella versione 18.0.0.209 per Windows/Mac. Al momento non sembra essere ancora stata rilasciata una versione patchata per Firefox su Linux.
16/07/2015 – aggiornamento: finalmente è stata rilasciata da Adobe anche una versione aggiornata del plugin per Linux.
È disponibile la versione 39.0 di Firefox. Da mercoledì 30 giugno è iniziata la distribuzione degli aggiornamenti automatici, se non lo avete ancora ricevuto potete fare riferimento a questo articolo della KB Mozilla.
La principale novità consiste nella possibilità di condividere il link per iniziare una video chat con Firefox Hello sui social network. Non avete mai utilizzato Firefox Hello? Beh allora questo è il momento giusto per iniziare una conversazione con gli amici! 🙂 Per ulteriori informazioni potete fare riferimento a questo articolo.
È stata inoltre implementata la specifica Unicode 8.0 che consente di utilizzare gli emoji “multi-etnici” (skin tone emoji), ulteriori caratteristiche dei nuovi standard HTML5 e CSS4.
Come avviene già da tempo sui sistemi Windows, da questa versione, per impostazione predefinita, anche su Mac e Linux i file scaricati verranno scansionati per assicurarsi che non contengano al loro interno dei malware che possano andare ad infettare la vostra macchina.
Sono stati sistemati alcuni bug di visualizzazione e migliorati altri aspetti del browser, inclusi alcuni che riguardano la sicurezza delle connessioni protette (https).
Per gli sviluppatori, la novità più interessante è che ora la console web ricorda la cronologia dei comandi inseriti anche dopo la chiusura della toolbox. Per un’analisi più approfondita delle novità per gli sviluppatori vi rimandiamo a questo articolo di hacks.mozilla.org ed a questo articolo su MDN.
Per un elenco completo delle novità e dei problemi risolti in questa versione è possibile consultare le note di versione (in inglese). Vi ricordiamo che per qualunque problema è possibile aprire una richiesta di supporto sul nostro forum.
Rust è un nuovo linguaggio di programmazione focalizzato sulle prestazioni, la parallelizzazione dei processi e la gestione sicura della memoria. Sviluppando un nuovo linguaggio da zero e includendo alcuni dei modelli utilizzati dai moderni linguaggi di programmazione, gli sviluppatori di Rust hanno evitato la necessità di includere un sacco di “zavorra” (codice per la retrocompatibilità) con cui i linguaggi di programmazione meno recenti devono fare i conti. Diversamente, Rust è in grado di fondere la sintassi espressiva e la flessibilità dei linguaggi ad alto livello con il controllo senza eguali e le prestazioni di un linguaggio di basso livello.
La scelta di un linguaggio di programmazione solitamente comporta dei compromessi. Sebbene molti dei moderni linguaggi di programmazione ad alto livello forniscano strumenti per gestire in modo sicuro la programmazione concorrente e la memoria, questo obiettivo viene raggiunto solo utilizzando risorse aggiuntive a runtime (overhead), ad esempio utilizzando un Garbage Collector (GC) e tendono a essere carenti dal punto di vista delle prestazioni e a non offrire il necessario controllo sul codice prodotto.
Per superare queste limitazioni è necessario utilizzare linguaggi di programmazione a basso livello. Però, senza la rete di sicurezza propria di molti linguaggi di programmazione ad alto livello, questo può generare codice fragile e soggetto a errori. Ci si troverà improvvisamente a dover gestire manualmente la memoria, l’allocazione delle risorse e a districarsi con i puntatori pendenti, ecc. Creare del software che sfrutti al massimo il crescente numero di core presenti negli attuali dispositivi è complesso, ancor più complicato è assicurarsi che il codice funzioni correttamente.
Quindi, in che modo Rust riesce a mettere assieme il meglio dei due mondi in un unico linguaggio di programmazione? In questo articolo cercheremo di dare una risposta a questa domanda.
Recentemente è stata rilasciata la versione 1.0 stabile di Rust. Il linguaggio ha già una comunità molto attiva, un crescente ecosistema di librerie (chiamate crate) disponibili tramite Cargo, il package manager, e molti sviluppatori che stanno già sfruttando le sue capacità in svariati progetti. Anche se non si è mai avuto a che fare con un linguaggio a basso livello, questo è il momento giusto per approfondire l’argomento.
Rust sembra un’ottima scelta per programmatori abituati a lavorare a stretto contatto con il sistema, ma cosa dire per chi non ha familiarità con i linguaggi di programmazione a basso livello, ad esempio tutti quei programmatori che ricordano solo vagamente le parole “C” e “allocazione dello stack/heap”, magari per averle ascoltate anni fa in un corso introduttivo sulla programmazione? Rust fornisce prestazioni tipicamente ottenibili con un linguaggio di basso livello. Nonostante questo, nella maggior parte delle occasioni la sensazione è quella di lavorare con un linguaggio ad alto livello. Ecco alcuni esempi che mostrano concretamente come utilizzare Rust nello sviluppo delle proprie applicazioni.
Hacking e sviluppo di applicazioni per l’Internet delle cose (IOT)
L’era dell’Internet delle cose (IOT) e l’espansione del movimento dei cosiddetti maker ha portato a uno sviluppo democrativo del mondo dell’hardware. Che si tratti del Raspberry Pi, di Arduino o di uno dei giovani colossi emergenti come BeagleBone o Tessel, è possibile scegliere tra molti linguaggi, inclusi Python e JavaScript, per lo sviluppo del proprio progetto hardware.
In alcuni casi però, le prestazioni ottenute con questi linguaggi di programmazione sono, molto semplicemente, non adeguate. Altre volte, l’hardware scelto non è adeguato all’esecuzione di questi linguaggi di programmazione: processori lenti, con memoria e consumi di corrente ridotti al minimo, richiedono ancora l’utilizzo di linguaggi più vicini a quello macchina. Tradizionalmente il linguaggio di riferimento è sempre stato il C, ma come probabilmente si sarà intuito, Rust è l’alternativa emergente in questo settore.
Rust supporta un’ampia gamma di piattaforme. Sebbene il supporto per alcune di queste piattaforme sia ancora in fase sperimentale, tra esse si possono annoverare l’hardware “generic ARM”, la dev board TIVA di Texas Instruments e anche il Raspberry Pi. Alcune delle schede elettroniche di nuova generazione realizzate per l’Internet delle cose, come la scheda Tessel 2, hanno il supporto per Rust integrato e ufficiale.
Operare con applicazioni di calcolo a elevate prestazioni scalabili su core multipli
Alcuni studi suggeriscono che Rust sia già un’ottima scelta per il calcolo a elevate prestazioni (HPC). Non è necessario riscrivere tutto il codice delle proprie applicazioni in Rust: l’interfaccia per la gestione delle funzioni esterne (Foreign Function Interface o FFI) offre un ottimo binding per il codice C e consente di esporre e richiamare codice in Rust senza overhead rilevanti. Questo consentirà di riscrivere il codice della propria applicazione modulo per modulo, migrando lentamente verso una migliore esperienza per gli sviluppatori, che si tradurrà in prestazioni uguali se non addirittura superiori a quelle del vecchio codice. Inoltre si otterrà una base di codice più gestibile con meno errori, in grado di scalare meglio su un elevato numero di core.
Realizzare applicazioni più veloci
Rust è una scelta ideale per riscrivere parti sensibili delle proprie applicazioni che necessitano di avere alte prestazioni. Grazie all’interfaccia FFI è in grado di integrarsi bene con altri linguaggi di programmazione e dispone di un leggero ambiente di runtime in grado di competere con quelli del C e del C++, anche quando le risorse a disposizione sono limitate.
Nonostante la natura del linguaggio in costante evoluzione, esistono già progetti di una certa rilevanza, applicazioni utilizzate in ambienti di produzione che hanno già fatto buon uso di Rust nel corso del tempo: la startup di Yehuda Katz, Skylight, sfrutta le elevate prestazioni del codice Rust integrato in un pacchetto gem Ruby per la manipolazione dei dati. La versione 1.0 rappresenta un’importante pietra miliare nello sviluppo del linguaggio in quanto non sono previsti cambiamenti rilevanti da qui in avanti. Proprio per questo motivo è possibile consigliare l’utilizzo di Rust anche per progetti importanti.
È possibile guardare il video di Yehuda Katz e Tom Dale in cui spiegano le basi della programmazione in Rust e come loro utilizzano Rust unitamente a Ruby per le loro applicazioni.
Primi passi con Rust
Esistono molte guide che introducono i concetti base di Rust e altre che trattano argomenti più specifici. Ad esempio, nel blog dedicato a Rust, il Rust blog, è possibile trovare molti articoli interessanti su vari aspetti del linguaggio. Esistono anche eccellenti presentazioni introduttivi come quella tenuto all’università di Stanford da Aaron Turon. In questo talk, Aaron spiega in modo brillante i concetti fondamentali e i principi alla base di Rust e può rappresentare il perfetto punto di partenza per un viaggio alla scoperta del linguaggio:
Presentazioni e guide non possono sostituire la scrittura di codice quando si tratta di apprendere un nuovo linguaggio di programmazione. Fortunatamente anche in questo settore esistono molte ottime risorse per imparare a utilizzare Rust. Il libro Rust Book è stato appositamente concepito per aiutare i programmatori a muovere i primi passi con Rust — partendo dall’installazione dell’ambiente di lavoro e dalla creazione del primo programma, rappresenta allo stesso tempo un’approfondita guida di riferimento per tutte le caratteristiche fondamentali del linguaggio.
Un’altra risorsa degna di nota è Rust by Example, in grado di guidare il lettore alla scoperta delle caratteristiche principali di Rust sino ai segreti poteri dei trait, delle macro e dell’interfaccia FFi. Rust By Example offre utilissimi esempi modificabili direttamente nel browser inclusi nei vari articoli. Non è nemmeno necessario scaricare e compilare il codice Rust, poiché è possibile provare, e modificare, il codice stesso direttamente dal browser stando comodamente seduti sul proprio divano di casa. Per lo stesso motivo esiste pure un Playpen online dedicato a Rust.
Non che scaricare e installare Rust sia molto complicato. È sufficiente visitare la pagina principale del sito di Rust e scaricare i file di installazione per il proprio sistema operativo. Il download comprende tutti gli strumenti base per iniziare, come rustc, il compilatore, o cargo, il package manager) e sono disponibili i pacchetti precompilati per tutti i sistemi operativi (Windows, Linux e OSX).
Ma allora, che cos’è che rende Rust così unico? Così diverso?
Lo stile Rust
Probabilmente è proprio il modello di proprietà (ownership) di Rust, non presente in altri linguaggi, che gli consente di essere davvero competitivo, riuscendo a eliminare tutta una serie di errori relativi al threading e alla gestione della memoria, e nello stesso tempo a semplificare lo sviluppo e il debug del codice.
Il modello di proprietà in Rust
Il principio base del modello di proprietà in Rust consiste essenzialmente nel fatto che ciascuna risorsa può appartenere a uno e un solo “proprietario”. Col termine risorsa si può indicare qualunque cosa, da una porzione di memoria a un socket aperto, fino a qualcosa di più astratto come un mutex lock. Il proprietario della risorsa è il responsabile del suo utilizzo, in alcuni casi pu prestarla ad altri utenti e deve, in ultima istanza, occuparsi della sua rimozione. Tutto ciò avviene automaticamente, grazie all’uso di scope e binding: un binding può possedere o prendere in prestito i valori, e dura fino al termine del proprio scope. Quando un binding esce dallo scope, deve restituire il valore preso in prestito oppure rimuoverlo se ne è il proprietario.
La cosa ancor più interessante è che i controlli per il corretto funzionamento del modello di proprietà sono effettuati e forzati dal compilatore Rust e dallo “strumento di controllo dei prestiti” in fase di compilazione e tutto questo produce una serie di vantaggi aggiuntivi.
Nessuna astrazione
Poiché il corretto funzionamento di un programma viene valutato in fase di compilazione, è possibile considerare il risultato ottenuto dopo la compilazione privo di errori tipici della gestione della memoria e della programmazione concorrente, come ad esempio l’utilizzo di puntatori che fanno riferimento a porzioni di memoria che sono state liberate o problemi di concorrenza (data races). Tutto questo è possibile perché Rust segnala in fase di compilazione eventuali violazioni dei principi sopra esposti, contribuendo in questo modo a mantenere il runtime minimale. Spostando questi controlli in fase di compilazione non è necessario effettuarli a runtime (il codice compilato è già sicuro), e si possono perciò evitare overhead in fase di runtime. Nel caso della gestione della memoria, questo si traduce nell’inutilità di avere un Garbage Collector a runtime. Tutto questo — avanzato costrutto del linguaggio con pochi o nessun overhead in fase di runtime — è alla base del concetto di “nessuna astrazione”.
Sebbene un’approfondita trattazione del modello di proprietà di Rust esuli dagli obiettivi di questo articolo introduttivo, esistono molte ottime risorse, come il Rust book e articoli che trattano approfonditamente questo argomento. I principi del modello di proprietà e dello strumento di controllo dei prestiti sono due passaggi essenziali per la comprensione di Rust e sono la chiave per comprendere altri aspetti importanti del linguaggio, come la gestione della concorrenza e il parallelismo.
Due piccioni con una fava
Oltre alla gestione sicura della memoria, il parallelismo e la concorrenza rappresentano il secondo paradigma della filosofia di Rust. Può sembrare sorprendente, ma il sistema di proprietà (assieme all’utilizzo di semplici trait) fornisce anche strumenti potenti per il threading, la sincronizzazione e l’accesso simultaneo ai dati.
Iniziando a utilizzare alcune delle primitive integrate per la gestione della concorrenza e approfondendo la conoscenza del linguaggio, potrebbe risultare sorprendente che tali primitive siano fornite dalla libreria standard piuttosto che direttamente dal core del linguaggio stesso. In definitiva, la creazione di nuove metodologie per la programmazione concorrente è lasciata nelle mani degli autori di librerie piuttosto che essere integrata nel core del linguaggio stesso e e suscettibile alle modifiche pianificate per le versioni future del linguaggio.
Prestazioni o leggibilità del codice? Scegli entrambe
Grazie al sistema di tipizzazione statica, caratteristiche scelte con cura, e l’assenza di un Garbage Collector, i binari ottenuti utilizzando il compilatore Rust sono molto veloci e assolutamente prevedibili, al pari di quelli ottenuti utilizzando linguaggi di basso livello tradizionali come C e C++.
Spostando i vari controlli dall’ambiente di runtime ed escludendo la necessità di un Garbage Collector, il codice risultante imita le caratteristiche prestazionali di altri linguaggi di basso livello, anche se il linguaggio continua a rimanere molto più comprensibile. Gli, apparenti, costrutti di alto livello (stringhe, collezioni, funzioni di ordine superiore, ecc.) eliminano quasi completamente i problemi a runtime che di solito si incontrano con gli stessi costrutti in altri linguaggi. Poiché l’output di un programma Rust dopo la compilazione è in una rappresentazione intermedia LVM, il codice macchina finale trarrà vantaggio di tutti i benefici offerti dal compilatore, multipiattaforma, LLVM e di tutte le ottimizzazioni, presenti e future, apportate al compilatore LLVM.
Si potrebbe continuare per ore sottolineando che con Rust non è necessario preoccuparsi di chiudere un socket o di liberare la memoria, spiegando come l’utilizzo dei trait e delle macro garantiscano una grande flessibilità per l’overload degli operatori, oppure descrivendo gli aspetti della programmazione funzionale in Rust (juggling iterator, closure, funzioni di ordine superiore). Ma inutile prolungare troppo questa trattazione. Prima o poi ci si imbatterà comunque in questi aspetti del linguaggio — e si sa che è più divertente scoprire da sé quanto profonda sia la tana del coniglio.
Piuttosto, iniziamo adesso a concentrarci su del vero codice.
Il primo programma in Rust
Senza ulteriori divagazioni, ecco il primo frammento di codice in Rust:
Tutto qui? Non è molto scenografico, ma c’è un limite al numero di modi possibili per scrivere un programma “Hello World” in Rust. Di seguito viene mostrato un altro esempio classico spesso utilizzato nei corsi di programmazione.
Giochiamo a Fizzbuzz con Rust
Prendiamo in esame un programma della “vecchia scuola”. Fizzbuzz è un gioco, utilizzato nei paesi anglosassoni per insegnare ai bimbi a contare e a fare le divisioni. Lo scopo del gioco (e dell’algoritmo che andremo a implementare) è quello di contare, teoricamente all’infinito, sostituendo con fizz i numeri che sono divisibili per 3, con buzz i numeri divisibili per 5 e con fizzbuzz i numeri divisibili sia per 3 che per 5 (cioè quelli divisibili per 15).
Per evidenziare meglio la semantica e gli aspetti peculiari di Rust, che sono lo scopo di questo articolo, includiamo i sorgenti dell’algoritmo anche in C e Python.
for num in xrange(1,101):
if num%3 == 0 and num%5 == 0:
print "fizzbuzz"
elif num%3 == 0:
print "fizz"
elif num%5 == 0:
print "buzz"
else:
print num
Versione in Rust di Fizzbuzz
fn main() {
for num in 1..101 { // Range notation!
match (num%3, num%5) { // Pattern Matching FTW!
(0, 0) => println!("fizzbuzz"),
(0, _) => println!("fizz"),
(_, 0) => println!("buzz"),
_ => println!("{}", num)
}
}
}
Anche da queste poche righe di codice si può già iniziare a intravedere i punti di forza di Rust. La differenza più evidente è la scelta di utilizzare il pattern matching, anziché ricorrere alla tradizionale istruzione if. Avremo anche potuto farlo, ma l’utilizzo del metodo match è un importante strumento nel bagaglio di un esperto Rustacean.
L’altra cosa da notare è la notazione mediante l’uso di intervalli del ciclo for, come avviene in Python. Non avremmo però potuto utilizzare, in quanto non previsto dalla filosofia di Rust, un ciclo for classico come nel linguaggio C. I tradizionali cicli for sono considerati fonte di errori e sono perciò stati sostituiti dal concetto più generale di iterazione.
Ora analizziamo più in dettaglio cosa accade nella fase di pattern matching del nostro esempio:
// per il pattern matching creiamo una tupla che contenga
// i resti della divisione intera per 3 e 5
match (num%3, num%5) {
// quando num è divisibile sia per 3 che 5
// (entrambi i resti sono 0)
// -> stampiamo "fizzbuzz"
(0, 0) => println!("fizzbuzz"),
// quando num è divisibile per 3 (il resto è 0)
// è divisibile per 5? A noi non interessa
// -> stampiamo "fizz"
(0, _) => println!("fizz"),
// quando num è divisibile per 5 (il resto è 0)
// è divisibile per 3? A noi non interessa
// -> stampiamo "buzz"
(_, 0) => println!("buzz"),
// In qualsiasi altro caso stampiamo il numero
// Nota, il matching deve essere esaustivo, vale a dire:
// bisogna considerare tutti i possibili valori, ma questo è forzato
// dal compiler Rust
_ => pintln!("{}", num)
}
Questo non è il luogo per trattare approfonditamente il funzionamento del pattern matching, della destrutturazione e per spiegare cosa sono le tuple. È possibile trovare ottimi articoli che trattano questi argomenti in modo approfondito nel libro Rust Book, nel Rust Blog o su Rust By Example, ma pensiamo che accennarli sia un modo per dimostrare le caratteristiche che rendono Rust così potente ed efficace.
Fizzbuzz utilizzando la programmazione funzionale
Per estendere l’ultimo esempio prodotto e per dimostrare la reale versatilità di Rust, nel nostro secondo esempio faremo fare un salto di qualità al codice del nostro Fizzbuzz. Rust definisce se stesso “pluriparadigma”. Possiamo mettere tutto ciò alla prova riscrivendo il programma Fizzbuzz utilizzando la programmazione funzionale. Per avere una migliore prospettiva, mostreremo anche il codice utilizzando le specifiche della versione 6 di JavaScript (EcmaScript 6).
Fizzbuzz, versione JavaScript utilizzando le tecniche della programmazione funzionale della versione 6
Non solo è possibile imitare lo stile di programmazione funzionale di JavaScript mediante l’utilizzo delle closure e le chiamate funzionali ai metodi, ma grazie al potente pattern matching di Rust, è altresì possibile migliorare l’espressività di JavaScript.
Nota: gli iteratori di Rust sono lazy e si rende perciò necessario, per il corretto funzionamento del codice, utilizzare una chiamata al metodo .collect() (che viene denominato un metodo consumer) — dimenticando questa accortezza il codice non funzionerà. Fare riferimento alla sezione consumers del libro Rust Book per ulteriori informazioni su questo argomento.
Scegliere un progetto
A questo punto si dovrebbe essere ansiosi di immergersi in Rust e di iniziare un progetto interessante. Ma che cosa creare? È possibile iniziare sviluppando una piccola applicazione o una piccola libreria e caricarla su crates.io. Molti programmatori hanno già realizzato degli interessanti progetti in Rust: dai piccoli progetti kernel di tipo *nix, a progetti basati su hardware embedded, dai giochi alle strutture lato server, dimostrando che l’unico limite è la propria immaginazione.
Se si vuole iniziare da qualcosa di piccolo, ma collaborando a qualcosa di utile mentre si imparano le parti più complesse della programmazione in Rust, è possibile considerare di collaborare a qualcuno dei progetti presenti su Github o al codice del compiler Rust (anch’esso scritto in Rust). Oppure, è possibile riscrivere piccole parti delle proprie applicazioni utilizzate nel proprio ambiente produttivo e sperimentare con Rust analizzando i risultati ottenuti. L’interfaccia di Rust per le funzioni esterne, Foreign Function Interface (FFI) è stata realizzata specificatamente per rimpiazzare il codice C. Con un piccolo sforzo è possibile sostituire porzioni di codice dei propri applicativi con del codice Rust. Ma l’interoperabilità non si ferma qui — questi binding per il linguaggio C funzionano anche in modo inverso. Ciò significa che è possibile utilizzare librerie C nel proprio codice Rust — oppure (poiché molti linguaggi di programmazione prevedono un’interfaccia per le librerie standard del linguaggio C) utilizzare chiamate, da e verso, fra Rust e Python, Ruby, o anche Go.
A questo proposito, si guardi il talk di Dan Callahan My Python’s a little Rust-y per imparare a connettere Rust con Python.
Praticamente non esistono linguaggi che non siano in grado di funzionare assieme a Rust. Si desidera compilare il codice Rust in un sorgente JavaScript o utilizzare codice assembly inline nel proprio codice Rust? Si può fare!
E adesso puoi smettere di leggere questo articolo e darti da fare per costruire qualcosa di importante.
E non dimenticare — Rust non è semplicemente un linguaggio di programmazione — è anche una comunità. In caso di problemi è possibile chiedere aiuto nei Forum o su IRC. È anche possibile condividere le proprie impressioni e i propri progetti sul canale Rust Reddit.
Rust è già straordinario — persone come te lo renderanno ancora più grandioso!
Dopo il recente aggiornamento a Firefox 38, alcuni utenti Windows possono aver riscontrato un rallentamento di Firefox quando si digita nella Barra di ricerca o nella Barra degli indirizzi oppure nel normale scorrimento dei menu e dei controlli, rispetto alle versioni precedenti.
Gli sviluppatori di Mozilla sono al lavoro per risolvere il problema in modo definitivo, ma è possibile aggirarlo disattivando l’accelerazione hardware mediante la scheda Generale del pannello Avanzate, oppure aggiornando i driver della scheda grafica.
La procedura dettagliata è descritta in questo articolo.
Firefox OS è il progetto Mozilla nato per portare il Web in tutte le tasche grazie al suo essere veloce, semplice e intuitivo. Durante lo scorso anno sono stati organizzati diversi eventi in Italia dedicati al nuovo sistema operativo, anche senza la nostra partecipazione diretta, dimostrandoci che c’è un reale interesse per un qualcosa che non sia il solito iOS o Android. Si tratta di una reale alternativa open source a questi sistemi basata su nuove tecnologie sempre fruibili come HTML5.
Uno dei progetti della nostra community dedicato a Firefox OS è finalmente a disposizione del grande pubblico: la traduzione della Guida veloce allo sviluppo per Firefox OS.
Scritto originariamente da Andre Alves Garzia in portoghese e inglese, è stato completamente tradotto da alcuni membri della nostra comunità. Alla localizzazione sono stati aggiunti nuovi materiali e le ultime novità che la guida originale -per ovvi motivi- non contiene. Il lavoro ha richiesto un anno di revisioni e di valutazioni ma ha portato a un risultato indubbiamente valido per qualsiasi sviluppatore HTML, CSS e JavaScript che voglia sperimentare Firefox OS. Durante questo processo abbiamo cercato di rendere il documento semplice e intuitivo come il sistema che intende descrivere e rendere accessibile a tutti.
Questo un estratto completo del nuovo materiale incluso:
Linee guida per il Marketplace dove è possibile pubblicare la propria app.
Informazioni sul manifest, vera e propria carta d’identità di ogni app.
Capitolo sul Boilerplate e su l10n.js per lavorare al meglio.
Elenco delle webActivity per capire immediatamente le potenzialità del sistema.
Web Component, Moz Polyfill, Firefox Developer Edition sono solo alcune delle tecnologie spiegate.
Come sfruttare al meglio le pagine su Github.
I nuovi strumenti per gli sviluppatori come il WebIDE.
Come usare un telefono Firefox OS per il debug con Firefox.
Tutto il materiale è revisionato e aggiornato all’anno corrente.
Per maggiori informazioni potrete fare riferimento alla pagina su Leanpub in cui scaricare gratuitamente questo ebook nei diversi formati disponibili.
Per lasciare commenti e opinioni potete trovarci e contattarci su GitHub, dove potrete inoltre contribuire attivamente al progetto. È anche possibile partecipare alla discussione nel nostro forum all’interno della discussione dedicata al progetto.
Vorrei personalmente ringraziare tutti i volontari che mi hanno permesso, dopo oltre un anno di lavoro, di arrivare alla pubblicazione di questa versione beta: GiammyJet, Michro, Sara_t, Miki64, Gialloporpora, Edoput e Nicokant. Senza di loro non sarei mai riuscito a portare avanti questo lavoro che spero permetterà di promuovere sempre più questo sistema.
Non dimenticate però che il Mozilla Developer Network è e rimane il riferimento per lo sviluppo di Firefox OS e che questa guida è pensata per coloro che decideranno di provare a sviluppare la propria idea senza perdersi nella moltitudine di pagine pubblicate, una sorta di primi passi verso una più ampia conoscenza del prodotto.
Prima di concludere vorrei invitare tutti a incontrare alcuni dei volontari durante il meetup al CodeMotion del prossimo 27 Marzo dove potrete porre le vostre domande e scoprire i nostri progetti come community, oltre ad accaparrarvi qualche gadget che cerchiamo di non far mancare mai! 🙂
Testo di Daniele Scasciafratte, revisione di Giovanni Francesco Solone
Sembra quasi una banalità ma da quando la nostra avventura è cominciata di acqua sotto ai ponti ne è passata molta, abbiamo “visto cose, conosciuto gente” e maturato esperienza, tutto ciò che fino ad oggi ha reso Mozilla Italia una delle comunità di riferimento per ciò che riguarda Firefox, ma anche tutto il resto del parco software Mozilla. Il merito però non è solo nostro, ci limitiamo a mantenere un impegno preso con voi tutti, utilizzatori di ieri e di oggi, cercando di offrire la migliore localizzazione possibile, il supporto e la documentazione che quotidianamente vi servono per affrontare ogni problema cercando di uscirne vincitori.
Grazie a tutti, e grazie anche a coloro che hanno scelto di aiutarci economicamente per sostenere in questi anni le spese per tenere in piedi il server che permette a Mozilla Italia di esistere e fornire a voi tutti il sito web e il forum di supporto. Mozilla ha scelto ormai da qualche tempo di riconoscerci e supportarci ufficialmente pagando ogni spesa ed è per questo motivo che viene meno la necessità di quote associative che sostengano quelle stesse spese. Abbiamo per questo motivo scelto di cambiare rotta e interrompere a partire da oggi l’accettazione di ogni nuova richiesta di associazione (soci sostenitori) mantenendo la sola struttura del consiglio direttivo e dei soci effettivi che collaborano attivamente alla (buona, ci auguriamo sempre) riuscita del progetto italiano.