Commenti recenti

lunedì, 15 settembre 2008

Programmatori...

Ognuno ha il suo stile. Si, esistono linee guida che cercano di uniformare lo stile di scrittura del codice per renderlo facilmente leggibile a chiunque, ma poi lo stile personale, prima o poi, esce fuori.
C'è chi fa largo uso di commenti, magari anche quando non sono necessari e chi non ne usa, neanche quando fa magari una modifica temporanea al codice inserendo una condizione if del tipo "false == false". Ecco, un commento per dire "questa condizione sostituisce la condizione x fin quando il progetto non è sul server di produzione" mi avrebbe risparmiato qualche insulto allo scrittore originario del codice.
Oppure c'è chi fa galleggiare il codice scritto su una quantità di spazi bianchi impressionante e chi tra una riga e l'altra di codice non vuol vedere assolutamente nulla.
Stili diversi che a volte sono totalmente inconciliabili. Ma lavorando accanto ad ognuno è sempre interessante vedere come programma, capire il suo stile, non solo per interpretare correttamente il codice prodotto, ma anche per carpire le caratteristiche migliori e comprendere al meglio quelle criticabili.
E voi? Qual'è il vostro stile di programmazione?
postato da: giafai alle ore 11:09 | link | commenti
categorie: lavoro, programmazione
giovedì, 07 agosto 2008

Union e Union All

Per realizzare la versione 2 di un applicativo web, ho avuto la necessità di accedere al database in versione 1 e 2. I due db condividevano quasi totalmente la struttura delle tabelle, ma con alcune differenze nel numero di campi.
L'idea è stata quella di spostare sul db la logica di selezione dei dati, lasciando vedere all'applicativo web delle viste sui dati effettivi.

Primo passaggio, attribuire ad un utente (o meglio, ad uno schema) i permessi di accesso su tutte le tabelle interessate.

Secondo passaggio, creare le query di tipo Union.
A questo punto, il mio collaboratore mi ha chiesto se fare delle Union semplici oppure delle Union All.
E' necessario individuare la differenza tra le due tipologie.

select <campi> from <table>
union [all]
select <campi> from <table>


Con la Union semplice otteniamo tutti i record che non siano ripetuti in entrambe le tabelle, con la All otteniamo tutti i record, senza alcun controllo.
In questo caso, abbiamo utilizzato delle Union semplici proprio per evitare di selezionare record importati dalla versione 1 alla versione 2.

Terzo passaggio, creare le viste con le query del punto 2.

create or replace view <nome_vista> as
    select <campi> from <table>
    union [all]
    select <campi> from <table>



Tornando alle query Union, è necessario notare che il numero di campi delle due select di cui è composta dev'essere uguale. Ma alcune tabelle dalla versione 1 alla versione 2 si sono arricchite di ulteriori campi. Per questi casi, abbiamo usato

null as <nome_campo_tabella_v2>

Ma avremmo potuto anche impostare, analogamente, un valore di default per il nuovo campo.
postato da: giafai alle ore 13:33 | link | commenti
categorie: lavoro, programmazione, database
martedì, 22 luglio 2008

Da qualche tempo, per lavoro...

Da qualche tempo, per lavoro, mi sono avvicinato a ColdFusion. Un linguaggio di programmazione a scripting che assomiglia molto all'html. Come ogni linguaggio di programmazione, ha ovviamente variabili e costrutti tipici, ma la sua scrittura è davvero immediata. Tanto per fare un esempio, questa è una delle funzioni che usiamo in questo progetto:
 1. <cffunction name="countryDropDown" output="true">
2.    <cfargument name="name" required="true">
3.    <cfargument name="id" required="true">
4.    <cfargument name="value" required="true">
5.    <cfargument name="html" required="false">
6.   
7.    <cfset countryList = q("select * from country order by des_country")>
8.  
9.    <cfif NOT IsDefined('html')>
10.        <cfset html = ''>
11.    </cfif>
12.  
13.    <cfoutput>
14.        <select name="#name#" id="#id#" #html#>
15.            <option value="">-- select a country --</option>
16.        <cfloop query="countryList">
17.            <option value="#countryList.country#"
18. <cfif value EQ #countryList.country#>SELECTED</cfif>
19. >#countryList.des_country#</option>
20.        </cfloop>
21.        </select>
22.    </cfoutput>
23.   
24. </cffunction>

Alla riga 1. viene definita la funzione, il suo nome e se richiede un output. Righe 2-5 vengono definiti i parametri della funzione, alcuni sono obbligatori (name, id, value) altri no (html). Nel proseguo del codice c'è lo svolgimento della funzione, che restituirà un elemento select con la lista dei paesi presi dal database.

Riferimenti:
Guida a ColdFusion di Html.it
CFMentor
ColdFusion 8 Developer Center
postato da: giafai alle ore 10:29 | link | commenti
categorie: lavoro, programmazione, coldfusion
venerdì, 18 luglio 2008

Primo aggiornamento per il sito internet di Renzo Campanini

Nei giorni appena trascorsi ho provveduto al primo più importante aggiornamento del sito www.renzocampanini.it.

Tutta la sezione "Argomenti" è stata riprogettata per far funzionare il tasto back. Precedentemente il tasto back riconduceva alla prima pagina della sezione, cosa non gradevole nel caso di visita prolungata su più pagine e più categorie. Adesso, il tasto back riconduce correttamente alla pagina visualizzata in precedenza.

E' stato aggiunto, inoltre, alle nuove opere un bollino che ne indica la recente pubblicazione, ed è stata riordinata la vetrina così da visualizzare per prime le opere più recenti.
postato da: giafai alle ore 10:50 | link | commenti
categorie: lavoro, renzocampanini-it
martedì, 15 luglio 2008

Uhhh l'incompetenza

La programmazione è un mondo molto variopinto, ci trovi di tutto. Dei geni incompresi e dei deficienti riconosciuti. Il problema è quando nel progetto a cui stai lavorando collaborano i secondi, l'incompetenza è molto pericolosa, soprattutto se poi il lavoro svolto da altri deve passare sotto i miei occhi per essere ricontrollato.
Quando si programma, l'uso del copia-incolla (o cut&paste, per dirla con gli anglosassoni o con quelli che vogliono fare i fighi) è decisamente importante, a chi non capita di prendere una funzionalità e ricopiarla per andare a modificare solo alcune righe di codice? Ma il copia-incolla, come quando si copiava a scuola (le maestre ce lo dicevano sempre!), va fatto col cervello. E' necessario prestare attenzione a ciò che si seleziona, per evitare di copiare troppo o tralasciare da un carattere fino a qualche riga. E' necessario essere certi di dove andare ad incollare quel codice, se può funzionare o no, perché magari il codice restante non permette l'uso di quella funzionalità. Ecco, questo è il caso dell'ultima pagina che sto analizzando, realizzata da un mio collega. Ha semplicemente copia-incollato un pezzo di codice, senza considerare che mancava tutto il resto...
Va beh, vado a riscrivere quella pagina!
postato da: giafai alle ore 11:48 | link | commenti
categorie: lavoro, programmazione

.Paytowork.net.