Weekly Issues
Il problema del giorno, cronaca di che cosa posso trovarmi a risolvere in una comune giornata lavorativa... può essere una stupidata, oppure un gran problema... può essere tecnico o di interazione col team, Agile, o meno... insomma, può essere di tutto!
Qualche post fa avevo evidenziato i principali effetti deleteri dell’avere in produzione un applicativo con il debug abilitato.
Ultimamente (ieri), mi è capitato ancora una volta di trovare un applicativo in produzione da parecchio tempo che, per motivi ancora da chiarire, si è ritrovato con il debug abilitato. Gli effetti sono stati che l’architettura bilanciata su due nodi continuava a cadere, provocando disservizio. Un frontend che fino al giorno prima reggeva tranquillamente un milione e mezzo di pagine viste al giorno, si è ritrovato a non sopportarne più di 400 mila, con gravi danni per l’advertising. Una volta riconfigurato il...
Chi di voi ha utilizzato almeno qualche volta Umbraco, conosce sicuramente il meccanismo potente delle macro. Come probabilmente sapete, le macro hanno la possibilità di essere “cachate” (utilizzano la cache nativa di ASP.NET) per evitare che vengano interpretate ogni volta. Questa funzionalità è, però, tanto utile quanto pericolosa. Il rischio, infatti, è di “abusare” in maniera eccessiva di questa facilitazione, soprattutto quando si parla di macro XSLT. Un esempio: chiunque lavori in XSLT da più di qualche ora sa che ci sono dei selettori che in generale è meglio evitare. Qualcosa come $currentPage/ancestor-or-self::node//node...
Una delle maggiori richieste quando si implementa qualcosa in Umbraco che ha del pregresso è, ovviamente, l’importazione. Personalmente, mi sono trovato bene con CmsImport (prima noto come UmbImport), un package commerciale che per 99 dollari permette di fare l’importazione “semplice” e, tramite custom action, maneggiare il documento importato in modo da fare virtualmente qualsiasi cosa. A meno che l’autore non abbia aggiornato la documentazione o il blog mentre leggete questo post, vi consiglio di scrivergli per chiedergli esempi: è possibile fare veramente tante cose e lui è molto disponibile ad aiutarvi, ma gli esempi e la...
Il disegno di un database è un punto centrale per tutte le applicazioni. Nel mondo web, anche visto il funzionamento disconnesso di ADO.NET, è forse ancora più imperativo definire bene le cose prima di incorrere in errori. Una delle grandi diatribe relative alle tabelle è l’utilizzo delle chiavi primarie. Identity, GUID, chiavi composte… spesso non si sa cosa scegliere! Io, personalmente, cerco sempre di scegliere i GUID, quando il progetto lo consente. Ma non è, come sempre, “LA” soluzione. Bisogna ponderare di volta in volta per l’effettivo utilizzo. Nel caso, però, si scelgano di utilizzare...
Spesso (troppo) vedo un gran numero di progetti web che finiscono in produzione senza le dovute precauzioni. La cosa peggiore che si può fare è, quasi certamente, dimenticarsi di cambiare l’attributo “debug” nel web.config quando si pubblica. Vedere <compilation debug=”true”> .. </compilation> nei web.config dei server di produzione dei miei clienti ormai mi da istinti omicidi :) Molti non lo fanno per pigrizia o perchè “così se c’è un errore, ho informazioni più dettagliate”. Questo approccio è _assolutamente sbagliato_: una forte politica di logging mette al sicuro...
Lavorando spesso con siti frontend, il SEO diventa una priorità non trascurabile. L’ottimizzazione per i motori di ricerca è una delle richieste più pressanti da parte del cliente, e questo porta spesso a dover generare titolo, keyword e abstract direttamente da backend (o, utilizzando un CMS, prendendolo dalle proprietà del documento corrente). Un problema che ho rilevato è che, interagendo direttamente con l’header runat=”server” e inserendo un tag <title> direttamente a runtime, il ASP.NET si “incasina” e, non sapendo che voi avete aggiunto effettivamente un tag <title> magari nel page_load, lo aggiunge lui. Questo porta...
Lavorando così tanto con Umbraco, XSLT ormai è diventato un mio secondo linguaggio. Scendere a patti con la paginazione in XSLT, spesso, può essere un problema. Il problema principale è la mancanza di divisione con resto: idiv è stata introdotta con XSLT 2.0, che purtroppo non è supportato dal Framework ne, quindi, da Umbraco. L’alternativa è: - Introdurre un parser XSLT di terze parti e mettersi a modificare il core (come quello di Altova, che è disponibile gratuitamente). Particolarmente complesso :) - Utilizzare la funzione floor(), che restituisce il numero intero indipendentemente da...
Ci sono molte parti di Umbraco che hanno bisogno di essere… “aiutate” per funzionare correttamente! Molto si trova con la pratica, molto leggendo blog come il mio :) Quindi, visto che non sono geloso, vi giro un altro blog da cui ricavo un sacco di informazioni utili, che spesso utilizzo: http://www.nibble.be/ A discapito dell’estensione, il sito è in comprensibilissimo inglese, e punta molto sull’argomento “startup” di Umbraco, che io spesso posso tralasciare per motivi pratici… Technorati Tags: Umbraco,Tips & Tricks
Utilizzando l’oggetto Image, può capitare di ricevere un errore, abbastanza criptico, che spesso è impossibile da interpretare: Generic Error in GDI+ Chiaramente, i componenti COM non hanno la buona educazione di avvisarci riguardo a _quale_ sia effettivamente l’errore…. Per fortuna, in ASP.NET le cause per questo errore sono principalmente due: 1: Permessi. Ossia, stiamo cercando di salvare un immagine in un percorso in cui l’utente interattivo non ha i permessi di scrittura. Come al solito, ma non solo in questo caso, è buona norma assicurarsi che i permessi siano corretti soprattutto quando...
Mi è capitato un problema bizzarro, ultimamente, uno dei tanti in cui mi sto scontrando lavorando con siti con alto traffico di utenti. Il problema in questione era che il DataReader, improvvisamente, è “impazzito”, restituendo una System.IndexOutOfRangeException nel metodo GetOrdinal. In pratica, mi diceva che nel set di dati restituito mancava la colonna che cercava di leggere. Peccato che, nel metodo in questione, la colonna ci fosse, la stored fosse corretta… insomma, funzionasse tutto “normalmente”. Come nel classico dei bachi, il problema si presentava in maniera assolutamente randomica. Quindi, per esempio, andava perfettamente in 10 casi,...
In uno dei tanti progetti che sto seguendo, mi è capitato un errore di quelli che nessuno vorrebbe mai avere: l’applicativo schizza come una lippa ma, improvvisamente, la CPU schizza al 100% (su un server con 16 core e 16 giga di ram…) e rimane li, inchiodata, per quasi un minuto. Poi va giù, senza generare errori rappresentativi, e ritorna a funzionare… per non si sa quanto! Abbiamo passato differenti giornate a cercare di capire il problema. Alla fine, siamo abbastanza sicuri di aver isolato la causa: l’utilizzo di una cache esterna basata su Dictionary, “falliva”...
Probabilmente molti di voi, usando Umbraco, si appoggiano a dei template XSLT per gestire le proprie macro. Se già non lo fate, iniziate a farlo… la gestione dei template è importante, e permette di mantenere gli XSLT relativamente semplici da gestire. Una comodissima funzionalità dei template XSLT è la possibilità di richiamare un dato template, passando dei parametri. Questi parametri possono essere passati, o avere un valore di default che verrà utilizzato all’interno del template stesso. Per dichiarare il template con i parametri, la sintassi è <xsl:template match="node" mode="list"> ...
Umbraco ha alcune grandi pecche. Una delle più grandi è la crescita, a volte incontrollata, della base dati. Questo succede perchè per ogni salvataggio, Umbraco si tiene una versione di tutte le proprietà specificate per un DocumentType, nella tabella cmsPropertyData. Questo è comodissimo dal punto di vista redattoriale, ma per siti con grande ricambio di dati (come le testate giornalistiche che sto seguendo in questo periodo) si traduce in una crescita veramente esponenziale. Inoltre, anche la tabella umbracoLog cresce a dismisura, poichè non è possibile filtrare il livello di verbosity: o si spegne tutto, o ci si...
Una delle funzionalità più richieste è operare con il testo nell’ambito dell’XSLT. Uppercase e lowercase sono sicuramente i metodi più popolari. Umbraco, nelle sue extension, non fornisce supporto per queste funzionalità. Ma non è una mancanza: le funzionalità di questo genere sono esposte dalle Xslt string utilities. In particolare, per l’Uppercase, si dovrà scrivere: <xsl:value-of select="Exslt.ExsltStrings:uppercase($month)"/> Per il lowercase… beh, indovinate :) Purtroppo, nella reference queste due funzioni non sono specificate… quindi è altamente probabile che possano sfuggire! Technorati Tags: Umbraco,Uppercase,Lowercase,Xslt string utilities,Exslt
Ho scritto ieri riguardo il FamFamFam Icon Pack, ed alla sua importanza nel caso di alberi realmente complessi, per dare un feedback visivo all’utente/editore su quello che sta facendo. Mi hanno scritto alcune persone dicendo che è “inutile”, poichè nella selezione del DocumentType, le icone non vengono visualizzate, quindi ci si trova con una combo lunghissima, senza poter sapere che cosa si sta selezionando. Purtroppo, è un “baco noto” di umbraco quello di non visualizzare le icone con nessun browser, tranne Firefox. Quindi, se volete giocare con i DocumentType e le nuove...
Sono sicuro che anche a voi le icone standard fornite da Umbraco scontentano proprio. Quando si ha a che fare con molti DocumentType, avere a disposizione una gamma più ampia di icone è quasi una necessità, per consentire alla redazione di lavorare meglio ed accorgersi, anche visivamente, nel caso stiano facendo qualche errore.
Il miglior icon pack che ho trovato per Umbraco è il Fam fam fam icon pack, del già “famoso” Mark James. Installatelo ed avrete a disposizione una marea di icone per i vostri DocumentType… avrete solo l’imbarazzo di dover svegliere quella giusta!
… e se...
Teamcity è un ottimo prodotto gratuito (con limitazioni, ma molto ampie) che risolve brillantemente il problema della Continuous Integration, senza spostarsi su prodotti più articolati come TFS, che per molti clienti è fuori portata. Lo uso abitualmente in congiunzione con SVN: formano un’accoppiata molto stabile, e non mi danno praticamente nessun problema. Ogni tanto, però, la build si rompe per misteriosi motivi, soprattutto usando Umbraco. Come premessa, in tutte le solution che hanno umbraco come website ho disabilitato la compilazione del website, perchè ci mette un sacco. Quindi, l’unico modo per assicurarsi che tutto funzioni...
In molti casi, è necessario estendere Umbraco per aggiungergli diversi tipi di funzionalità. Nell’ultimo progetto, che andrà online tra qualche settimana, abbiamo dovuto creare un sito parallelo che girasse dentro umbraco (quasi come abbiamo fatto con www.style.it). In questo sito, che comunque gira sotto umbraco, abbiamo dovuto utilizzare la sessione per diversi motivi. Ovviamente, pubblicato sull’ambiente di stage, non funzionava piu nulla. Gli “object reference not set” del log non davano molte informazioni, ma con un pò di magia abbiamo scoperto l’arcano: le sessioni erano tutte misteriosamente a null. Ma non nel senso...
Chiunque possegga un mac e lo utilizzi (violenti?) per farci girare windows, si scontra probabilmente ogni giorno con il grande problema della tastiera, soprattutto se si ha un macbook o macbook pro. Una delle grandi conquiste che ho avuto negli ultimi tempi è trovare la combinazione per il tasto “INS”, comodissimo in certi casi, inutile in molti altri: fn+Invio. Me ne sono accorto a mie spese, quando l’ho attivato inavvertitamente (cercando di fare un canc, fn+Backspace) e ho sudato per levarlo… :) Invece, non ho ancora trovato alternativa alla tilde… se non utilizzare la tastiera...
Forse non tutti sanno che, negli ultimi mesi, sono stato presissimo perchè la mia azienda si è occupata totalmente del rilascio del nuovo sito di style.it. Posso affermare senza ombra di dubbio che è il progetto piu complesso che abbia mai affrontato con Umbraco. Con qualche ombra di dubbio, posso affermare che è uno dei progetti più complessi che conosca in generale, sviluppato con Umbraco. Se qualcuno sta pensando al novello ASP.NET, la grande differenza tra i due è che ASP.NET è utilizzato e editato da gente che, più o meno, capisce quello che sta facendo. Style...
Full Weekly Issues Archive