PowerShell: l’oggetto PSCredential

L’oggetto PSCredential di PowerShell è un modo comodo per registrare le credenziali e utilizzarle in diverse parti di uno script.

Questo è un modo relativamente sicuro per registrare login e password. Molta enfasi su relativamente. Leggi tutto “PowerShell: l’oggetto PSCredential”

Aggirare la censura di Facebook

Facebook ha delle regole in merito al tipo di contenuti che possono essere caricati sul sito. Indipendentemente da quello che ciascuno può pensare, Facebook decide legittimamente cosa fare in casa propria e chi va a casa di Facebook deve rispettare quelle regole.

Quanto segue ha il solo scopo di fornire una proof of concept, non è un’istigazione a violare leggi o ad abusare in alcun modo di terzi. Leggi tutto “Aggirare la censura di Facebook”

Se non password, allora #PassaFrase

PassaFraseIconSu questo blog si è discusso a profusione di password, del loro utilizzo e della sicurezza. In questo post, vi presento un progetto opensource che ho recentemente lanciato con lo scopo di aiutare gli utenti finali nella scelta della password.
Prima di partire con le premesse, premetto 🙂 che non sono un esperto di sicurezza, ma mi interesso al campo così come ogni buon professionista nel campo IT dovrebbe fare e sto usando questo progetto non solo per offrire un servizio all’utente, ma anche per imparare qualcosa, possibilmente per trasmettere le lessons learned e per approfondire il dibattito sulla sicurezza, a tutti i livelli.

La necessità di password lunghe e complesse, come sapete già bene, è parecchio antica in termini informatici: fino a qualche anno fa andavano di moda password formate da sequenze casuale di lettere maiuscole e minuscole, numeri e qualche volta segni di interpunzione o similari. Queste password erano difficili da memorizzare tanto che alcuni le appuntavano: nella migliore delle ipotesi sulla agendina personale o nel portafoglio, nella peggiore in un post-it incollato sotto la tastiera. La loro presunta robustezza, tuttavia, ci convinceva che il gioco valesse la candela. Leggi tutto “Se non password, allora #PassaFrase”

Intervista a Brian Kernighan

Intervista al Prof. Brian Kernighan, coautore, assieme a Dennis Ritchie, del K&R, ovvero The C Programming Language.

In questa intervista Kernighan spiega come UNIX abbia rotto le catene che lo legavano ad un PDP-11 grazie alle caratteristiche del linguaggio C.

Autodeploy con GitHub

Questo articolo spiega come fare un deploy automatico su un server di produzione del codice PHP scritto su un server di sviluppo locale utilizzando un repository privato (a pagamento) di GitHub e le chiavi ssh per l’autenticazione.

git è un bellissimo strumento, ma è anche molto complesso, per questa ragione questo articolo è tutto fuorché esaustivo in materia. Leggi tutto “Autodeploy con GitHub”

PHP: come non confrontare gli hash

Provate ad eseguire questo codice:

<?php var_dump(md5('240610708') == md5('QNKCDZO'));
var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
var_dump('0010e2' == '1e3');
var_dump('0x1234Ab' == '1193131');
var_dump('0xABCdef' == ' 0xABCdef');
Leggi tutto “PHP: come non confrontare gli hash”

NCSI

No, non si tratta di una nuova serie TV della CBS.

L’acrostico è Network Connectivity Status Icon: per chi non lo sapesse, si tratta dell’etichetta con cui si identifica l’insieme delle procedure tramite le quali Windows – da Vista in poi – stabilisce se la macchina su cui gira sia collegata a internet o meno.

Quando il nostro computer non dispone di una connessione cablata o WiFi, Windows semplicemente comunica che non siamo connessi ad alcuna rete.
La faccenda si fa più complicata se in effetti abbiamo una connessione a una rete locale e di conseguenza il sistema operativo deve stbilire se questa rete sia collegata a sua volta a internet e ne consenta la navigazione. Leggi tutto “NCSI”

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. Leggi tutto “Monicelli: una supercazzola di codice”

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.

Leggi tutto “Open Microsoft”

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. Leggi tutto “Programmare con la rete”

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.
Leggi tutto “3, 2, 1… #CommonMark”

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. Leggi tutto “WAMP su Windows 7”

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.

Leggi tutto “Piccoli geek crescono (introduzione alla programmazione)”

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.

Leggi tutto “L’insostenibile difficoltà di mandare una mail”

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. Leggi tutto “Il bug che non ti aspetti”

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. Leggi tutto “Testo nelle immagini”

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. Leggi tutto “Mal di testa vettoriale”