venerdì 21 ottobre 2011
undefined è una variabile globale inizializzata al valore undefined; il problema è che tale variabile è accessibile in read/write.
E' quindi sufficiente sbagliare un confronto con un assegnamento (ed in Università vedo che è uno degli errori più frequenti degli studenti) per ridefinire undefined e influenzare tutto il resto del codice:
var x = 1;
if (undefined = x) ; //do something
x == undefined --> true
1 == undefined --> true
Questo comportamento molto pericoloso è stato finalmente risolto da ECMAScript 5.
mercoledì 5 ottobre 2011
Di questa caratteristica avevo già parlato in un post di qualche anno fa, ma proprio non la digerisco: getMonth è base 0, mentre getDate è base 1.
I miei amici sanno che "rompo" un pò sulla storia della base 0, di cui capisco benissimo l'origine legata agli indirizzi di memoria (visto che sono Ing. Elettronico qualcosa mi dice); però ritengo che un linguaggio di alto livello debba mascherare questo aspetto. Mi sta bene che un ciclo, concetto prettamente informatico, vada su base 0; ma che una funzione di una classe DateTime mi restituisca 1 per dire che siamo a Febbraio fatico a digerirlo. Quando poi penso che la funzione getDate è a base 1 e non c'è coerenza la fatica aumenta.
Questa caratteristica è banale e abbastanza innocua, ma secondo me tradisce l'origine del linguaggio: in Javascript (come in certe versioni del C mi sembra) si può omettere il ; di fine istruzione tra due istruzioni che stanno su due righe diverse oppure nelle istruzioni a fine programma o comunque seguite da una }
I problemi sono due: certe istruzioni vengono interpretate in modo "poco intuitivo" e inotre si crea una dipendenza tra le diverse istruzioni, nel senso che se aggiungo un'istruzione sotto a quella senza ; devo ricordarmi di correggere anche quella sopra. Ecco un esempio di interpretazione che potrebbe confondere:
var y = x + f
(a+b).toString()
viene interpretata come
var y = x + f(a+b).toString();
A questo punto mi chiedo: non sarebbe meglio rendere obbligatorio il ; a fine istruzione ed avere tanti ragionamenti in meno sia per me che per il parser? Con tutto il codice che scrivo non saranno mica proprio i ; finali a farmi venire l'artrite alle mani ... Mi sembra più una caratteristica messa lì da un programmatore che voleva dimostrare quanto è bravo a fare un parser ...
Vero è che basta non ricordarsi di questa cosa e usare sempre il ; per evitare problemi.
Premessa: ritengo che Javascript sia uno dei linguaggi che si DEVONO conoscere al giorno d'oggi se si vuole fare web (e magari anche mobile); il problema è che pur usandolo io mi ci sono sempre trovato a disagio. Parte di ciò è sicuramente dovuto al fatto che non ho mai approfondito per bene il linguaggio, per cui questi giorni ho iniziato la lettura di "Javascript: the Definitive Guide", che mi sembra ben scritto e approfondito. Un'altra parte del disagio è dovuto a caratteristiche del linguaggio che poco si sposano con la mia filosofia (ben poco geek lo so, ma penso che nell'informatica ci sia bisogno sia di geek che di non geek come me ...). Ho deciso di "esplicitare" queste caratteristiche a me antipatiche nella speranza di riuscire a "digerirle emotivamente" e così da ricordarmene e non incappare in errori banali.
Partiamo con la prima: in javascript i numeri non interi sono solo in notazione floating point; anche in ECMAScript 5 non esiste ancora nulla che assomigli ai numeri decimali. Questa secondo me è una grave mancanza, perchè ritengo che anche Javascript sia usato molto più spesso per fare calcoli con importi monetari piuttosto che con valori usati in ambito matematico/scientifico.
Mi sembra assurdo che un linguaggio di alto livello, nell'anno 2011, mi dica che 0.3 - 0.2 != 0.2 - 0.1 (provare per credere in qualsiasi browser!). Questa mi ci vorrà un pò a digerirla ...
giovedì 10 dicembre 2009
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>
lunedì 23 novembre 2009
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!
mercoledì 21 ottobre 2009
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
giovedì 15 ottobre 2009
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 ;-)).
lunedì 12 ottobre 2009
Ci sono anch’io!
venerdì 9 ottobre 2009
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 ...