Firefox, security e sul concetto di demenza

Leggiucchiando in giro son capitato sul sito dei FirefoxFlicks, video promozionali per pubblicizzare Firefox, e mi son imbattuto nel secondo posto classificato. Davidonzo, mia nemesi totale (usa Ubuntu e quindi Firefox), commentando il video definisce demenza l'essenza di IE.

Un paio di note: nel 2005 ho installato anche io, quando IE fu tempestato da una miriade di bachi di sicurezza, Firefox. Mi ripeto ma Firefox in passato, per il mancato supporto degli ActiveX causa di molti mali nel browser avverso, veniva svenduto come "intrinsecamente" piú sicuro. Peccato che questo intrisecarsi non sia stato di buon auspicio l'anno scorso: 17 bachi di sicurezza per IE, 22 bachi di sicurezza per Firefox (fonte secunia: per IE, per firefox). All'epoca non c'era neanche l'auto upgrade e toccava restare informati per scoprire se la versione di Firefox installata sul proprio PC fosse pericolosa (a differenza del servizio semi trasparente di Windows Update). Risultato disinstallazione immediata di firefox per aver tradito quelle che definisco le mie aspettative (e stendiamo un velo pietoso sul fatto che la cache di Firefox sia gran divoratrice di RAM: stando ai developers non é un baco, ma una feature!)

Poco piú avanti, leggo di explorer destroyer: un sito che distribuisce script fatti per mandare in tilt IE. Chiunque li puó inserire tra le pagine del proprio sito e costringere gli utenti - se vogliono davvero navigare le pagine di tali siti - a scaricare Firefox. Google fa di piú e dona addirittura un dollaro per ogni copia di Firefox scaricata alla causa (trovo funny che il loro motto sia "don't be evil" E-)). Oddio, ognuno é libero di fare e usare quello che vuole, ma cerco di immaginare chi potrebbe essere cosi idio... ehm intelligente da scaricare tali script e precludere il proprio sito all'89% (o giú di lí) dei navigatori. Beppe Grillo con vocina stridula direbbe: "leggermente in controtendenza"; in un mondo che si muove verso una distribuzione di contenuti da fruire nella maniera piú libera possibile (adoro gli RSS readers e per questo motivo ho tagliato fuori tutti quei feeds che richiedono di aprire un browser per continuare a leggere la news!) questa mi sembra una mossa davvero stonata (qualcuno direbbe demente!).

Una precisazione: credo sinceramente che la concorrenza nel "mercato" dei browser sia necessaria; é bello vedere features di Firefox implementate in IE7 e features di IE7 implementate come plugin di Firefox. Peró - vestendo i panni del webdesigner e considerando pure che i 2 browser non renderizzeranno mai le pagine in maniera identica al 100% - mi auguro sempre che uno dei due browser la faccia da padrone (purché per gli utenti rimanga free). Ció renderebbe la vita enormemente piú semplice a chi deve mettere mani all'HTML.

-quack

Pubblicato martedì 2 maggio 2006 alle 1:14 AM - 2 commenti so far
Archiviato in: Pippe Mentali, Codice, Software, Security

C# e IDisposable

Due dei costrutti piú interessanti ed eleganti del C# sono il lock e lo using, che funzionano in maniera pressocché simile. La feature piú comoda di tali istruzioni é la gestione automatica di quello che avviene implicitamente all'uscita del blocco di codice (e quindi anche in presenza di un eccezione). Nel caso del lock viene chiamato Monitor.Exit, nel caso di using viene chiamato IDisposable.Dispose. Giorni fa, proprio tale "automatismo" mi ha dato un'idea abbastanza simpatica e cioé quella di estendere il concetto di "rilasciare" contenuto nell'interfaccia IDisposable in senso lato. Si potrebbe ad esempio "rilasciare" un oggetto costoso in un pool. Ed é cosí che mi sono "inventato" (*) questo pattern. Siano:

MyClass un oggetto "costoso"
MyClassProxy un proxy all'oggetto "costoso" che implementa IDisposable
MyClassProxyPool un pool di MyClassProxy

Il pezzo di codice che "usa" MyClass e fa uso del pool diventa:

using(MyClassProxy proxy = MyClassProxyPool.GetAProxy())
{
MyClass realClass = proxy.RealObject;
realClass.DoSomething();
...

}

All'uscita del blocco (per un motivo o per un altro) verrá invocato proxy.Dispose(). A questo punto basta fare in modo che tale chiamata restituisca il proxy nel pool ed il gioco é fatto.

I  C#!!

-quack

(*) in realtá qualcuno direbbe che i pattern non si inventano ma si scoprono!

Pubblicato martedì 25 aprile 2006 alle 2:10 AM - 1 commento so far
Archiviato in: Codice, Software

Loops: Pop-quiz (2)

Nel buon vecchio BASIC 1.0 (quando i numeri di linea erano obbligatori!) l'unico modo per avere un loop era tramite FOR ... NEXT.

10 FOR I = 1 TO 10
20 ...
30 NEXT I

Per abbandonare prematuramente il loop bisognava fare qualcosa tipo:

20 I=15; GOTO 30

Oggi ho visto un pezzo di codice in C# che mi ha fatto venire un po' di nostalgia:

while(nRetries < allowedRetries)
{
....
if (condition)
{
nRetries = allowedRetries;
}
}

Lascio come quiz a voi la risposta corretta :-)

Pubblicato venerdì 14 aprile 2006 alle 7:31 AM - 2 commenti so far
Archiviato in: Codice, Cazzate

Design Patterns: il singleton

Tra i vantaggi offerti dalla mia azienda, ci sono corsi interni di aggiornamento: uno dei piú interessanti che ho seguito é stato quello sui design pattern diviso in 2 moduli. Ho scoperto che, per quanto ci si doti di buona volontá, i pattern non si possono "capire" semplicemente leggendo un libro. La veritá intrinseca dei pattern puó essere trasmessa efficacemente solo tramite uno scambio docente-alunno. Provate a cercare in giro ad esempio l'implementazione di un singleton in C#. Scoprirete che molte implementazioni non considerano uno degli aspetti fondamentali del pattern stesso, la thread-safety. Ed un singleton che non sia thread-safe ha la sua utilitá ridotta al 20%. In questa pagina, ho trovato la migliore implementazione del pattern (e pensare che é considerato il pattern piú semplice: da sbagliare Smile): versione numero 5 (in alcuni casi overkill, ma ce ne sono altre 4 da studiare).

Pubblicato lunedì 10 aprile 2006 alle 6:14 AM - 1 commento so far
Archiviato in: Pippe Mentali, Microsoft, Codice, Software

Pop quiz (1)

Cosa c'è di sbagliato nel codice qui sotto (in C#)?

try 
{ 
    .... 
} 
catch(XYZException e) 
{ 
    if(e.Message.StartsWith("The server is offline")) 
    { 
        // do something 
    } 
    else 
    { 
        // do something else 
    } 
}

 

Pubblicato domenica 12 marzo 2006 alle 5:39 AM - 3 commenti so far
Archiviato in: Codice