settembre 2007 Entries
[OT] Stanchezza....

Periodaccio dal punto di vista organizzativo....

Troppi lavori (paradossale, eh' :) ), troppe responsabilità, troppe cose da seguire. Purtroppo, troppe cose in cui si è o ci si sente indispensabili (la differenza c'è, ma a conti fatti non la si nota....)

Fortuna che questo week me ne vado a pistoria a rilassarmi un pò :)

Mi spiace per gli issues, riprenderò appena possibile, ma davvero non riesco ad organizzarmi neanche di leggere le email (ah.. mi spiace anche per chiunque mi abbia scritto ed ancora non gli sto rispondendo :P)

Add Comment Filed Under [ Off Topic ]
[Daily Issue] Un milione di scimmie NON fanno un developer serio....

Daily? Ma che daily... monthly... Yearly... insomma, è sempre lo stesso issue che si ripropone....
Partiamo dalla citazione che ha dato inizio al tutto:

 "Supponiamo di aver addestrato un milione di scimmie a battere a caso sui tasti di una macchina da scrivere e che lavorino con ardore dieci ore al giorno con un milione di macchine da scrivere di tipi diversi. Che i sorveglianti illetterati raccolgano i fogli anneriti e li rileghino in volumi. Nel giro di un anno questi volumi conterranno la copia esatta dei libri di ogni genere e di ogni lingua conservati nelle biblioteche piu' ricche del mondo."
Emile Borel Meccanica statistica e irreversibilità. 1913

Partendo da questo presupposto, molti signori deducono (si augurano?) che mettere 10 scimmie su un qualsiasi progetto può portare a fare a meno di un developer senior, nonchè di un architetto, e già che ci siamo anche di un analista ....

Balle, becere menzogne che la gente si propina, mentendo a se stesso sapendo di mentire.

Mettere 10 scimmie su un progetto per evitare di metterci un senior soltanto provoca rallentamenti, bug, problemi di performance, problemi di manutenibilità, ecatombe, disastrie, obesita, diabete di tipo 2 e perdita di capelli.

Mettere delle scimmie e sperare che con una piccola spinta possano camminare da soli porta i senior a girare per i clienti alle 10 di sera aspettando la build e tenendo le dita incrociate, perchè come al solito quando c'è un problema le scimmie non sono in grado di metterlo a posto, e non si è in grado in poche ore di capire il grado di casino che una scimmia media è stata in grado di generare in due giornate di lavoro autonomo... figuriamoci un team intero di scimmie!!!!

Un appello accorato: basta mettere scimmie sui progetti e levare i senior... delle scimmie seguite da un senior, ok... ma anche così, quando il senior non c'è, controllatele ... la scimmia ha la brutta abitudine di andare in giro a far danni quando il gatto non c'è....

Nessuna scimmia è stata maltrattata nella scrittura di questo post :P

P.S.: Prima che mi volino accuse, "scimmia" deriva da "Code Monkeys"... nessuna accezione negativa.. o quasi :P
P.S.: Se sembro alterato.. è perchè lo sono!! Mi sono fregato il weekend, sabato e domenica, e mo pure il lunedi... non è la prima volta che succede e non sarà l'ultima, ma magari i clienti che mi leggono perdono le scaglie dagli occhi, anche se questo blog non porta a Damasco....

[Semi - OT] Una settimana da leoni...

Si lo so, era un week end... ma tant'è...

Ho avuto una settimana distruttiva dal punto di vista lavorativo, e anche per questo non ho postato Daily Issue... ho avuto troppo da fare su lati "burocratici" e la maggior parte degli argomenti che ho trattato erano un pò OT per questo blog... è uscito qualche spunto interessante, ma troppo incentrato sulle realtà in cui lavoro.. non mi piace che escano fuori cose troppo personali, i miei clienti leggono il mio blog :)

Comunque, le buone notizie è che sto ricominciando a scrivere e dovrei ricominciare ad avere i miei soliti problemi :)

L'altra buona notizia è che sto completando la casa, anche se non ne parlo da parecchio.. .appena riesco ad avere un qualcsoa di presentabile aggiorno la galleria fotografica in modo da fare invidia a mrkino :P

 

Add Comment Filed Under [ ASP.NET House ]
[Daily Issue] Spiegare il Method In-Lining

Ok magari è un "mezzo" Daily Issue... però in relazione al mio post di ieri ed alla relativa osservazione di Massimo, ho ricevuto un pò di domande del tipo "ma che vuol dire inlining del JIT??"...

Effettivamente posso capire che non sia un concetto con cui si ha a che fare tutti i giorni, a meno di non chiamarsi Adrian :P..... quindi, piuttosto che spiegarlo io che potrei fare un bel po di confusione, vi rimando a questo post di Gunnerson che spiega in breve cos'è, a cosa serve e come funziona (piu o meno :))

[Daily Issue] Trovare il chiamante di un metodo tramite Reflection con System.Diagnostics.StackTrace

Uno Issue un pò frettoloso, che oggi forse riesco ad uscire prima delle 9 di sera :)

Mi è capitato di configurare Log4Net in un ambiente che aveva già un logger (che però non funzionava :)) e per evitare di modificare tutte le pagine, ho tenuto la struttura e la severity del Logger esistente levando tutta la logica e chiamando log4Net.
Ho avuto il problema che tutti gli errori mi venivano ovviamente segnalati come partiti dal logger... .(

Un paio di ricerche sull'utilizzo di StackTrace ed ho trovato il metodo perfetto:

Type type = new StackTrace().GetFrame(1).GetMethod().DeclaringType;

Quindi passerò al GetLogger di log4net questo tipo!

Attenzione: andando in debug, possono venire aggiunti dei frame tra la chiamata del metodo e l'effettivo log, perchè se io interrogo per esempio il type con il debugger di visual studio, questo tramite reflection ne invoca proprietà e metodi e crea un frame in mezzo che ovviamente sballa la gerarchia!

Update:

Come giustamente fa notare Massimo: e se il metodo viene sottoposto ad inlining?

A parte il post di Raf citato da Massimo, un pò fuori dal mondo :P... le soluzioni possibili che vedo sono due:

1: Decorare il metodo con l'attributo [MethodImpl(MethodImplOptions.NonInlining)]
2: Fare il metodo Virtual. Se non erro, il Jit non può fare inlinint di un metodo Virtual (l'avevo letto da qualche parte :))

Non so quanto queste siano percorribili cmq :)

Bloccare a monte i siti "scomodi" mentre si naviga....

Non so se capita anche a voi, ma a me succede spesso di essere annoiato da ads, popup, contenenti informazioni dal contenuto piu o meno pornografico, ads, malware, e chi piu ne ha piu ne metta.

Non mi preoccupa dal punto di vista della security, ma da quello dell'usabilità questo è molto snervante, oltre che uno spreco di banda...

quindi ho installato sulla mia macchina Privoxy, un proxy lato client bello e veloce, che si mette in ascolto sulla 8118 e permette di definire delle splendide regole via regular expression per bloccare sul nascere qualsiasi maschera che mi rompa le scatole .....

Se vi serve qualcosa di simile, provate a dargli un'occhiata... a me è servito parecchio. Di default incorpora già il block per la maggior parte dei cookie/ads/whatever, la potenza è nell'aggiungerne altri di qualsiasi genere, con una grande eterogeneità grazie alle regular expression :)

 

 

Add Comment Filed Under [ UGIdotNET ]
[Daily Issue] SubText Tuning: occhio agli update panel!

Sto mettendo le mani nel codice di SubText per fare una modifica per un cliente. Praticamente la richiesta, tra le tante, pretendeva di aggiungere l'upload di una foto in fase di invio di un commento (please, non chiedete il perchè... :))

Questo ha creato non pochi problemi, ultimo dei quali il non funzionamento del controllo FileUpload nella parte dei commenti. Questo perchè, paciugando nell'architettura di SubText, ho notato che tutta la parte dei commenti è compresa in un UpdatePanel chiamato apnlCommentsWrapper cui vengono aggiunti i controlli.

Questo panel viene istanziato e caricato quando si caricano i controllo Comments.ascx e PostComment.ascx, che guarda caso erano quelli che mi interessavano. Da quello che ho capito ha una qualche utilità in ambito di gestione degli errori (Simone confermi? :) ).

Come tutti noi sappiamo, però, UpdatePanel e controlli FileUpload non convivono molto pacificamente. In attesa di ulteriori scoperte, ho levato il controllo UpdatePanel ed ho aggiunto una gestione degli errori che mi permettesse di recuperare i problemi derivanti dalla sua scomparsa.

One Comment Filed Under [ Weekly Issues ]
[Daily Issue] Usare DataTableReader..... serve?

Oggi sempre grazie a Claudio ho scoperto un oggetto che proprio non conoscevo. Il DataTableReader.

Questo oggetto, leggendo nella documentazione, permette di avere differenti tabelle (a-la DataSet) e di ciclarle in maniera ReadOnly e ForwardOnly.

Questa cosa mi ha fatto subito pensare:

1: Mio dio, sto mischiando pere con mele senza avere facolta di sapere cosa c'è in una e cosa c'è nell'altra (cosa che già odio nei dataset, figuriamoci qui....
2: Però, dovrebbe essere velocissimo...

Quindi visto che sono bizzarro, ho fatto due prove ed è venuta fuori una cosa singolare:
Il DataTableReader, con una sola istanza di tabella, paragonato al ciclo su righe e colonne di una DataTable.. èsi piu veloce, ma solo con pochi record. Se i record vanno oltre un certo numero (dai miei test sui 7/8000), improvvisamente il DataTableReader è penalizzato nei confronti del DataTable.

Ho fatto quindi la controprova, DataSet vs DataTableReader valorizzati con tabelle multiple.
Purtroppo, la situazione peggiora: con due tabelle e poco piu di 1000 record a tabella, il DataSet e già piu veloce del DataTableReader per fare un ciclo completo su righe e colonne...

Di seguito un immagine esplicativa di quello che accade. Ora, partendo dal presupposto che dal debugger le prove mi sembrano corrette.... come mai un oggetto che è stato fatto apposta per andare a leggere in ciclo tutte le righe di tutte le tabelle che ha dentro, si dimostra piu lento del DataSet??

One Comment Filed Under [ Weekly Issues ]
[Daily Issue] Condividere l'autenticazione tra diverse applicazioni ASP.NET

Può succedere di dover condividere l'autenticazione tra differenti applicazioni sotto lo stesso virtual host, sia omogenee (tutte 2.0) che eterogenee (2.0 e 1.0).

Il problema è facilmente sorpassabile utilizzando l'elemento MachineKey del file di configurazione: specificando un machinekey identico, si possono condividere i cookie tra applicazioni diverse.

Per esempio, se io ho

 <machineKey   validationKey="99AF6556D754949EF4171355D5D538930DCCF674453E4F3882B240B011A7381CD86A79C1D317B7ADD94E7781F816C319D67E5555DFD0EC969719DC1EB166A9ED"
decryptionKey="DA2056148C0642A11D9CDBB79F67BCB631D8A1A20BC75935" />

(Se si cerca di far condividere l'autenticazione tra 1.1 e 2.0, nel machinekey dell'applicazione 2.0 bisogna aggiungere "validation="3DES" " in quanto l'algoritmo di default di 2.0 è MD5 e quindi non funzionerebbe la decriptazione dei token 1.1)

subito dopo System.web nei web.config delle due applicazioni, avrò accesso ai cookie dell'una e dell'altra, ovviamente a patto che siano applicazioni differenti ma sotto lo stesso dominio.

In questo modo, impostando il cookiename uguale (parametro "name" della sezione "forms" sotto "authentication"), avrò l'autenticazione condivisa tra le due applicazioni, altrimenti posso settare name differenti, e leggere l'autenticazione dell'una o dell'altra utilizzando la semplice Request.Cookie.

Attenzione che il cookie di autenticazione è criptato. Devo prendere un ticket passando dalla classe FormsAuthenticationTicket in questo modo:

HttpCookie cookie = Request.Cookie(".FormsAuthCookieName"); FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);

A questo punto ho a disposizione i dati dell'utente per farci quello che desidero :)


Add Comment Filed Under [ Weekly Issues ]
Silverlight 1.0 Released... e 1.1?

Si legge da questo post di Antonio (e da quello di Scott ovviamente) che è stata rilasciata la versione finale di Silverlight 1.0..

Splendido stupendo, a parte un pò di amarezza per non aver concluso in tempo i progetti silverlight 1.0 che avevo tra le mani per mancanza di tempo (magari sarei potuto apparire nella pagina :P)...

Ma tutti sanno che a me interessa principalmente 1.1, e ora che la 1.0 è rilasciata mi aspetto un grande boost!

E infatti, Scott non mi delude:

Now that Silverlight 1.0 is out the door, my team is cranking hard on our Silverlight 1.1 release. 

Silverlight 1.1 will include a cross-platform version of the .NET Framework, and will enable a rich .NET development experience in the browser.  It will support a WPF programming model for UI - including support for an extensible control model, layout management, data-binding, control skinning, and a rich set of built-in controls.  It will also include a subset of the full .NET Framework base class library you use today, including support for collections, generics, IO, threading, globalization, networking (including sockets, web-services and REST support), HTML DOM, XML, local storage, and LINQ.
 

Io amo quest'uomo :)

 

2 Comments Filed Under [ Silverlight ]
[Daily Issue] Smaltire la coda

Ogni rientro dalle ferie, di qualsiasi genere siano, è quasi sempre un delirio.

Piu clienti si hanno, piu questi considerano il tuo tempo come prioritario "visto che sei stato via" e quindi ti vogliono tutto per loro.

Questo porta a parecchi salti mortali e, come molti di voi hanno notato, astinenza dal blog per un pò :)

Come fate voi per gestire le priorità? E' difficile capire cosa effettivamente vuol dire "urgente" quando si parla al telefono con un cliente, molto spesso è facile fare la scelta sbagliata e dare priorità a qualcosa che invece prioritario non lo è per niente ....

Io personalmente ho solo un piccolo trucco che ogni tanto aiuta: farmi scrivere due righe. Se il cliente no le manda piu o meno 12 secondi dopo la telefonata, vuol dire che evidentemente non è abbastanza disperato... ho avuto anche richieste "urgentissime" e quando ho chiesto di metterlo per email non sono mai arrivate....

Si lo so è un metodo un pò farlocco, ma mi aiuta a dare una scrematura quando si riparte a lavorare dopo qualche settimana di pausa... se voi ne avete altri piu efficenti, scriveteli! (hem.. avere dall'altra parte un CTO che capisca effettivamente quello che sta dicendo NON è un consiglio accettato in quanto poco praticabile :P)

Add Comment Filed Under [ Weekly Issues ]