DanBlog

Il blog di Daniele Armanasco
posts - 43, comments - 115, trackbacks - 1

giovedì 10 dicembre 2009

Linq to xml: generare nodi vuoti con tag di chiusura esplicito

Generando un nodo vuoto nel modo seguente

XElement xml = new XElement("PROVA") si ottiene <PROVA />

se invece si specifica la stringa vuota come contenuto:

XElement xml = new XElement("PROVA", String.Empty) si ottiene <PROVA></PROVA>

posted @ giovedì 10 dicembre 2009 18.18 | Feedback (1) |

lunedì 23 novembre 2009

Mocking e unit testing: lavorare bene seppure a mezz’aria!

Quando parlo di test unitari e mocking ai clienti che non ne hanno mai fatto uso (nemmeno personale ;-)) mi risulta difficile farne cogliere tutti i pregi; la prossima volta mi ricorderò del progetto di cui mi sto occupando questi giorni (o li dirigerò a questo post).

Si tratta di un programma che deve monitorare il flusso di alcune pratiche richieste agli istituti bancari dall’agenzia delle entrate. La richiesta viene ricevuta tramite PEC ed un sistema (esistente) ne interpreta le informazioni e gestisce tutto l’iter (abbastanza complesso). Il mio programma non deve “far altro” che verificare la coerenza di tutte le informazioni sparse tra database relazionali (quello principale e quello “di confronto” per controlli di quadratura) e file relativi alla richiesta presenti su file system locale o server remoti.

Io non dispongo ancora del sistema o di una sua simulazione (alcune parti sono ancora in fase di realizzazione); di fatto non ho né la terra sotto i piedi (db, cartelle, ecc.) né il cielo sopra la testa (l’interfaccia, che non ci sarà mai perché il mio programma sarà lanciato da riga di comando).

Nonostante questo, grazie ai test unitari e al mocking con cui sostituisco alle mie dipendenze esterne (db, file) degli oggetti “finti”, POSSO lavorare alla mia parte verificandone la logica che implemento e raffinando man mano il mio modello del dominio.

Mi sento un pò come se stessi creando un organo artificiale che poi andrò a impiantare nel paziente curandomi solo delle “cuciture”, perché il funzionamento interno l’avrò già provato senza paziente; molto meglio che dover provare l’organo per la prima volta sul paziente!

posted @ lunedì 23 novembre 2009 15.40 | Feedback (5) |

mercoledì 21 ottobre 2009

Le mie prossime conf

Ecco le prossime conference a cui intendo partecipare. Se qualcuno della mia zona (BS) si vuole aggregare per il viaggio si faccia sentire; per gli altri: ci vediamò là!

22 ottobre (giovedì) - Milano: Windows 7 e Windows Server 2008 R2: The “NEW” Efficiency – Smau

18 novembre (mercoledì) – Dalmine (BG): Community Tour: ALT.NET-web

20 novembre (venerdì) - Bologna: Italian Agile Day

4 dicembre (venerdì) – Firenze: Real Code Day 4.0: costruire applicazioni reali

23 gennaio (sabato) – Milano: V UgiALT.net Conference

posted @ mercoledì 21 ottobre 2009 14.47 | Feedback (5) |

giovedì 15 ottobre 2009

[Sfogo] Javascript: oggetto Date

In Javascript basta istanziare un nuovo oggetto Date per ottenere la data corrente:

var myDate = new Date();

A questo punto basta fare:

myDate.getDate(); per avere il giorno (1-31): ma perché non chiamarlo getDay?

myDate.getDay(); per avere il giorno della settimana (0 = domenica, visto che non si lavora, 1 = lunedì, ecc.): ma perchè non chiamarlo getDayOfWeek?

myDate.getMonth(); per avere il numero del mese con, OVVIAMENTE, 0 = gennaio, 1 = febbraio, ecc.

A parte il fatto che usare lo zero per numeri di mese e giorno, che già hanno una loro numerazione, mi sembra “da programmatori mai usciti di casa che non hanno mai visto un calendario”; ma se per il giorno sono partiti da 1, perché per il mese sono partiti da 0? Almeno un pò di coerenza …

Scusate lo sfogo; spero qualcuno mi aiuti a capire (hanno progettato ste cose il giorno di Carnevale?), perché a me sembra proprio “poco pensato” (sono un gentiluomo ;-)).

posted @ giovedì 15 ottobre 2009 11.56 | Feedback (5) |

lunedì 12 ottobre 2009

Microsoft WebsiteSpark

 

wss

Ci sono anch’io!

posted @ lunedì 12 ottobre 2009 15.21 | Feedback (3) |

venerdì 9 ottobre 2009

WebsiteSpark: avvertenza

Ho richiesto anch’io di aderire all’iniziativa e, essendo cliente Aruba da alcuni anni, ho scelto quest’ultimo come contatto.

Il giorno dopo mi ha telefonato un responsabile Aruba dicendomi che per aderire all’iniziativa tramite loro è necessario effettuare almeno l’ordine di un server dedicato (49 euro/mese); da allora la mia richiesta è ancora pendente per dettagli che non sto a raccontarvi.

Ieri ho segnalato tutta la vicenda al team di websiteSpark e mi hanno risposto: “We are sorry for the inconvenience. I have forward your case to the team in Italy. It seems that the Microsoft partner is not fully aware of the program. There is no fee associate, besides the graduation fee when you leave the program after 6 months.”

Quindi, se anche voi state pensando di usufruire di Aruba come contatto e non siete interessati a vincolarvi ad un server dedicato magari vi conviene aspettare che la questione sia definita tra loro e Microsoft ...

posted @ venerdì 9 ottobre 2009 23.38 | Feedback (5) |

mercoledì 10 giugno 2009

Workshop: fantastico!

Non posso che confermare quanto già detto di positivo relativamente al workshop di ieri: le sessioni sono state molto interessanti e stimolanti!

Questo però me lo aspettavo, vista la qualità degli speaker che ben conoscevo (so che è brutto “dare per scontato” una qualità del genere che costa tanta preparazione, ma purtroppo la nostra “mente adattabile” si adatta anche al bello :-). Quello che invece proprio non mi aspettavo è stata la location: pienamente all’altezza dell’evento, semplicemente fantastica! Spero di vedere presto le foto di Nicolò perché le parole non rendono abbastanza …

Mi è spiaciuto non vedere tante facce note che speravo di trovare nel pubblico; spero non siano stati frenati dalla differenza di distanza rispetto a Milano perché la location la ripagava egregiamente.

Non mi resta che ringraziare Andrea & C. e ricordarmi di offrire il mio modesto contributo.

posted @ mercoledì 10 giugno 2009 0.00 | Feedback (3) |

lunedì 11 maggio 2009

Le mie prossime conf

Se qualcuno della mia zona (Brescia) vuole aggregarsi ecco l'elenco delle prossime conferenze gratuite a cui parteciperò. Per quelle di Bologna e Predappio può darsi io non ci sia per il viaggio perchè già sul posto per altri motivi; comunque se avete intenzione di partecipare fatemi sapere!

posted @ lunedì 11 maggio 2009 12.44 | Feedback (1) |

venerdì 10 aprile 2009

Prova LiveWriter

Immagine mappa

Prova generazione post da LiveWriter

posted @ venerdì 10 aprile 2009 13.21 | Feedback (1) |

sabato 7 marzo 2009

ASP.NET MVC - RedirectToAction

Nel mio primo progettino con ASP.NET MVC mi si è presentata l’esigenza di dover presentare la stessa view in due modalità diverse (diverso titolo, una con link di modifica e l’altra no, ecc.).

Ingenuamente, siccome la prima modalità (link tipo Controller/List) esisteva già, ho pensato di usare una Action di questo tipo:

        public ActionResult ViewList()

        {

            TempData["mode"] = "readonly";

            return RedirectToAction("List");

        }

delegando così tutto il lavoro di preparazione dei dati alla Action già in opera; nella pagina ho poi usato un paio di if (e si, mi capita ancora di usarli ;-)) per generare o meno i link per l’editing e per impostare il titolo.

Problema (di cui non mi sono accorto subito perché l’applicazione gira in un normale frame html che rende l’indirizzo visualizzato nella barra di IE sempre identico!): una volta eseguito RedirectToAction è come se avessi digitato quell’indirizzo (Controller/List nel mio caso) per cui se l’utente preme il pulsante Aggiorna del browser finisce nella prima modalità!

Soluzione “veloce”: ho spostato il codice presente nella prima action (Controller/List) in una funzione che richiamo da entrambe le action; la action ViewList è diventata:

        public ActionResult ViewList()

        {

            TempData["mode"] = "readonly";

            OnList_AddDataToViewData();

            return View("List");

        }

posted @ sabato 7 marzo 2009 22.25 | Feedback (1) |

Powered by: