Categoria: Programmazione

  • Monicelli: una supercazzola di codice

    La-scena-della-supercazzola-con-un-magistrale-Ugo-TognazziStefano Sanfilippo ha pubblicato Monicelli su github.

    Si tratta di un compilatore che genera a sua volta un sorgente C++ con una sintassi ispirata ai dialoghi di Amici Miei. (altro…)

  • Open Microsoft

    Microsoft, si sa, non è una azienda che abbia mai brillato per apertura o adesione agli standard. E’ una impresa che ha dominato il mercato per diversi anni prima con IBM e poi con con il cosiddetto “duopolio” Wintel; negli ultimi anni se la sta passando meno bene di una volta, complice l’arrivo sul mercato di piattaforme che ne hanno minato la posizione dominante (Linux, ma soprattutto applicativi chiave come LibreOffice), vecchi nomi che si stanno affermando con crescite a doppia cifra (Apple con Mac), una strategia internet perdente nei confronti di Google e la crescita di prodotti mobili a cui praticamente non ha opposto resistenza (Android, iOS, iPhone e iPad).

    Negli ultimi anni, tuttavia, Microsoft ha dimostrato di saper lavorare silenziosamente nella direzione giusta e chi la dava per spacciato si è sbagliato: l’azienda sta uscendo da un periodo buio e non è detto che la sua nuova incarnazione non sia più matura e tutto sommato migliore della precedente.
    Da pochi giorni Microsoft ha lanciato i suoi prodotti di wearable technology (tipo Apple Watch o Android Wear ): Microsoft Band ha dalla sua parte il vantaggio di essere multipiattaforma e, diversamente dalla concorrenza, non si pone come obiettivo solo dispositivi Windows Phone, come forse si sarebbe portati a credere, ma è compatibile con Android e iOS alla stessa maniera.

    Dal punto di vista tablet, pur essendo arrivata sicuramente tardissimo nell’arena dei gladiatori, dobbiamo ammettere che la terza generazione di Microsoft Surface sia un prodotto maturo dal punto di vista hardware che ha il grosso vantaggio di poter far girare una versione completa di Windows 8: con questo si realizza il sogno di potersi portare il proprio personal computer nel borsello e usarlo ovunque.
    Molto utenti ancora non si sono resi conto di questa rivoluzione copernicana: i tablet con Windows sono probabilmente meno veloci e meno sexy di un iPad o di un Galaxy Tab, ma sono 100 volte più versatili. Posso portare con me PhotoShop, o AutoCAD, o CorelDraw o Matlab o qualsiasi versione di un sistema di office automation io voglia, senza necessità di usare versioni ridotte o app con propaggini nel cloud: uso le applicazioni complete come sono abituato a fare dagli anni ’80.

    L’interfaccia delle varie incarnazioni di Windows, basata sulle Active Tiles è senza dubbio una rivoluzione rispetto ad altri OS ancora basati su icone statiche: almeno per quanto riguarda telefoni e tablet è probabilmente un punto di forza rispetto alla concorrenza che dispone di una interfaccia magari più “tradizionale”, ma meno versatile.

    Detto questo, l’argomento del post è in effetti l’ultima rivoluzione in casa Microsoft, annunciata questa settimana durante l’evento Connect(); riguarda VisualStudio e il .NET Framework.

    (altro…)

  • Programmare con la rete

    Fino a pochi giorni fa non mi ero reso conto di quanto internet potesse essere utile anche come supporto alla programmazione.
    Tutti noi sappiamo che una ricerca su internet spesso è in grado di risolvere in maniera semplice e veloce un problema che affligge il nostro codice, magari da ore: senza reinventare la ruota tutte le volte — o per evitare di spaccarsi la testa su un problema (anche banale) già incontrato mille volte — è sufficiente quasi sempre fare una ricerca su internet e leggere un post su siti come l’ottimo Stack Overflow .
    Quello che io personalmente non avevo ancora realizzato è quanto utile possano essere i siti che permettono il sandboxing del codice e il test immediato: voglio parlarvi di due di questi siti che ho iniziato a usare recentemente, nella speranza che siano utili anche a voi.

    Non programmo sul web in maniera professionale, si tratta di poco di più di un hobby: quando ho iniziato mi sono rivolto verso ASP.net in maniera abbastanza naturale per poter riciclare le mie competenze in Visual Basic e C♯. Solo dopo un po’ di pratica mi sono reso conto che non avrei potuto prescindere dall’uso di JavaScript per applicazioni client-side versatili e molto pratiche da usare in un sito web.
    JS può essere scritto direttamente all’interno di una delle edizioni di Visual Studio, oppure con l’apposito modulo nel IDE open source Eclipse, ma entrambi i prodotti mi danno l’idea di un cannone con cui sparare alla proverbiale zanzara; almeno per quanto concerne il mio caso di applicazioni modeste in lunghezza e complessità.

    Uno strumento estremamente più utile e immediato l’ho invece trovato online: si tratta di JSFiddle un tool in cui si può direttamente editare il markup HTML, il codice Javascript e gli stili CSS e vedere immediatamente il risultato nella finestra del browser. Si tratta di un progetto un po’ più recente e meno famoso di JSBin, ma che io trovo più user-firendly.
    Con questo strumento si possono salvare i frammenti di codice e condividerli. I vantaggi sono evidenti: è possible pubblicare un semplice permalink non solo al codice, ma a un esempio immediatamente eseguibile e funzionate, tutto questo su Twitter, Faceboook su blog, forum e via dicendo.
    E’ uno strumento non solo utile al programmatore per farsi aiutare più semplicemente o per mettersi un po’ in mostra, ma anche alla comunità in generale in quanto consente di condividere codice e conoscenza in maniera veloce e completa. (altro…)

  • 3, 2, 1… #CommonMark

    Chiunque operi per lavoro o hobby nel campo dell’informatica, probabilmente condivide lo stesso rapporto di odio e amore verso i file in plain text : hanno innegabili vantaggi come la portabilità, la facile interoperabilità e la semplicità di creazione.
    D’altra parte, risultano spesso difficilmente leggibili e poco versatile, non disponendo di opzioni di formattazione, nè quelle basilari come grassetti e sottolineature, nè più sofisticati come ad esempio il supporto di hyperlink.
    Questi ultimi rimangono esclusività di editor di testi e di markup più sofisticati.

    Negli anni sono stati fatti vari tentativi prendere il meglio di entrambi i mondi e unire la semplicità di file di testo alla versatilità del testo formattato: uno dei più popolari è Markdown, inventato da John Gruber e documentato principalmente in questa pagina.
    Dalla sua nascita, Markdown è stato utilizzato in maniera molto ampia: come semplice metodo per pubblicare commenti, per scrivere file ReadMe e per documentare il codice con commenti inline .

    Tuttavia questo strumento è oggetto di molte critiche, prima di tutto per alcune sue carenze.
    Una parte della sintassi risulta ambigua nella pagina di definizione e l’implementazione originale di un interprete Markdown/HTML scritta in Perl — sempre da John Gruber — è risultato contenere numerosi bug.
    Un secondo problema di questo progetto è il modo autoritario e decisamente poco aperto con cui Gruber pretende di gestirlo, con il risultato di avere poco o nessun coinvolgimento della comunità e relativa mancanza di progressi nel migliorare lo standard o il codice della sua implementazione.
    (altro…)

  • WAMP su Windows 7

    Questo articolo spiega come configurare una struttura WAMP su un Windows 7 installando i singoli programmi separatamente.

    Esistono anche dei kit preconfezionati come, a puro titolo di esempio, EasyPHP, ma è più istruttivo costruire da soli la propria configurazione in quanto si imparano meglio il funzionamento e l’interazione dei vari componenti, si possono aggiornare i singoli programmi senza dipendere da terzi ed è molto più semplice di quello che si possa credere. Le istruzioni di seguito partono da alcuni presupposti e hanno alcune limitazioni, tra cui:

    • l’installazione non ha una sicurezza adatta ad un server pubblico, ma è pensata per un server di sviluppo protetto da altri metodi;
    • la piattaforma su cui viene installato il tutto è un Windows 7 a 64 bit e, dove possibile, vengono installate le versioni a 64 bit dei programmi;
    • vengono installate le ultime versioni disponibili dei software cercando il più possibile di mantenere i default;
    • tutti i download suggeriti riguardano solamente programmi gratuiti, anche se per alcune utility esistono alternative a pagamento;
    • ripeto: non usate questa procedura per configurare un server pubblicato su Internet.

    Queste istruzioni sono valide per le ultime versioni di Apache (2.4), PHP (5.5) e MariaDB (10.0), con versioni precedenti potrebbero essere necessarie ulteriori modifiche o accorgimenti per far funzionare il tutto. (altro…)

  • 50 anni di BASIC

    HELLO

    DARTMOUTH TIMESHARING ON AT 4:07AM ON MAY 1, 1964

    2 USERS

    OLD BASIC50***

    READY

    RUN

    Sembra che sia questo l’output quando, 50 anni fa, è stato lanciato il primo programma scritto in BASIC. (altro…)

  • Piccoli geek crescono (introduzione alla programmazione)

    Scratch

    Rimango continuamente stupito dalla facilità  dei nostri figli di apprendere l’utilizzo di nuove tecnologie.

    La loro generazione ha sviluppato un modello di apprendimento a ad hoc per riuscire a galleggiare nella tempesta di novità che la tecnologia mette in campo ogni giorno.

    E’ una generazione di “smanettoni”: per risolvere un problema o imparare ad utilizzare qualcosa non legge il manuale (che ormai non esiste quasi più), semplicemente prova una soluzione, se è sbagliata fa un passo indietro e ne tenta un’altra. Il risultato di tutto ciò è che la soluzione arriva rapida ed il bagaglio individuale si arricchisce anche di esperienze negative che saranno utili la prossima volta.

    Per molti aspetti questa è anche una forma di difesa verso una scuola pubblica che, incapace di rimanere al passo con i tempi, non è in grado di supportarli nell’apprendimento di cose nuove.

    (altro…)

  • Algoritmi di ogni sort

    SortingSpesso gli algoritmi di ordinamento sono tra i primi argomenti quando si insegna programmazione.

    La scelta cade sulla soluzione del problema di mettere in ordine una lista di valori perché è di semplice comprensione, il risultato è facilmente verificabile e permette di illustrare come la soluzione di un problema apparentemente semplice può avere vari gradi di complessità.

    Su questa classe di algoritmi, banali solo ad un’analisi superficiale, sono stati fatti moltissimi studi e sono state scritte molte pubblicazioni. Moltissime visualizzazioni avvengono dopo aver ordinato i dati da mostrare: un algoritmo poco efficiente potrebbe costare molto tempo macchina sulla lunga distanza.

    Questo sito permette di visualizzare e confrontare gli algoritmi di sort con delle animazioni che illustrano passo passo l’avanzamento dell’algoritmo. Per chi vuole approfondire, ciascun algoritmo ha un link verso Wikipedia.

    Anche per il programmatore navigato, oltre che per il geek, la visualizzazione di questi algoritmi può rappresentare un passatempo interessante.

  • L’insostenibile difficoltà di mandare una mail

    round-hole-square-pegSe pensate che impostare un client di email per inviare tramite SMTP autenticato sia facile e lineare, non avete mai cercato di fare parlare assieme Apple Mail e Plesk.

    Apple Mail e` il client di email installato di default sui Mac. Plesk e` un sistema (composto di varie parti, alcune delle quali open source) che serve a fornire servizio di hosting (web, email, dns, ecc) in maniera semplice e soprattutto in modo da renderlo facilmente gestibile dal cliente.

    (altro…)

  • Il bug che non ti aspetti

    Per chi lavora in ambito IT è una esperienza comune sentire un utente lamentarsi per un programma che ha un errore e non funziona correttamente.
    Per quanto il mondo informativo sia spesso oggetto di scherno, sappiamo che in generale gli applicativi vengono sottoposti a un debug abbastanza attento prima del rilascio e normalmente non contengono errori di grande entità, soprattutto in relazione alla loro complessità. Normalmente si tratta semplicemente di un utente che non ha mai letto il manuale e sta cercando di far fare al software qualche operazione in maniera scorreta.
    Tuttavia i bug esistono e se ne trovano anche in software blasonati.

    Settimana scorsa stavo scrivendo un frammento di codice che interpreta un feed RSS e crea tanti oggetti quanti sono i posts in modo da poterli manipolare all’interno della mia applicazione. Le proprietà dell’oggetto post nel mio applicativo sono fortemente tipizzate, quindi la classe post contiene una proprietà PubDate che rappresenta un oggetto di tipo DateTime. Dato che la data nel feed è semplicemente una stringa di testo, questa va sottoposta a una operazione di Parsing per essere identificata come una data.

    Questo è molto semplice da fare nel .NET Framework: la data nel feed è formattata in quello che è volgarmente definito RFC1123 (che in effetti si basa sullo standard ISO8601) e il framework mette a disposizione la funzione DateTime.Parse che fa tutto il lavoro di conversione dandole semplicemente come input la stringa di testo.

    Provo la funzione, tutto bene.
    Tutto bene fino a quando il software non arriva a processare la data Sun, 15 Mar 2009 22:02:44 +0000. (altro…)

  • Testo nelle immagini

    Naked Security illustra i dettagli di un tipo di attacco molto subdolo.

    Si tratta di nascondere un codice JavaScript nei pixel di un’immagine a toni di grigio; una versione modificata ad arte di jQuery è in grado di decodificare i dati contenuti nel file ed eseguirli come JavaScript.

    Questo metodo potrebbe evadere molti, se non tutti, tipi di scansione perché il codice JavaScript non è riconoscibile come pattern.

    Incuriosito da questa tecnica, ho provato a ricreare il metodo per codificare e decodificare un testo in un’immagine PNG. (altro…)

  • Mal di testa vettoriale

    xmlMi sto dedicando in questi giorni a una revisione del mio sito web e sono incappato in un interessante problema la cui soluzione penso possa interessare gli altri geek.
    Dovevo inserire alcune icone social da utilizzare sia nella classica dimensione 32×32 pixel, sia in altre grandezze in pagine diverse. La soluzione iniziale a cui avevo pensato era salvare le immagini nella dimensione più grande necessaria e poi utilizzarle ridimensionadole dove servivano più piccole.
    Idea apparentemente buona, ma all’atto pratico non molto gradevole esteticamente: il layout engine del browser si occupa anche di scalare le immagini e applicare lo anti-aliasing dove necessario, ma i risultati visivi variano di molto. Mentre Firefox e Chrome fanno un lavoro abbastanza buono, Internet Explorer – guarda un po’ – fa una riduzione pessima; in nessuno dei tre casi, però, il risultato è ottimale.
    Tutte le immagini erano in formato PNG, quello che possiamo definire a grandi linee il GIF dell’informatica moderna: supporta, tra le altre cose, lo alpha compositing e la tavolozza RGB a 24bit. Non è adatto per la grafica professionale – dove dominano JPEG, TIFF e i vari formati proprietari – ma è perfettamente equipaggiato per fornire le grafiche decorative su internet.

    Per risolvere il problema della riduzione in maniera definitiva, avrei dovuto preparare immagini di diverse dimensioni a monte: un software di fotoritocco può rimpicciolire una immagine in maniera decisamente migliore rispetto a motore di rendering di un browser. In questo caso però avrei dovuto creare tante copie della immagine quante le dimnsioni di cui avevo bisogno.
    Ho quindi iniziato a ragionare su una soluzione diversa più pratica e, possibilmente, più geek. (altro…)