mercoledì 12 maggio 2010

Casi di studio D.d.d

Vi siete mai posti la domanda, " ma perchè non raccogliere tutte le attività di un azienda in un unica soluzione ?"...

Io si ma effettivamente la risposta a questa domanda è frammentata in troppe porzioni, tuttavia c'e' una buona possibilità di poter comprendere quanto è necessario fare per poter dare una risposta significativa a questa ardua domanda.

Nel mio caso di studio (in sunto questo... ) ho raccolto alcune delle informazioni base per poter implementare una soluzione D.D.D.

La base comune è il domino ossia l'azienda XYZ, questa per vivere scambia materiale fra due paesi differenti, gestisce ordini e magazzino... e in tutto questo ci sono persone che vi lavorano.

E' possibile che persone del paese A debbano poter accedere a informazioni del paese B.

Appare chiaro che nei due paesi esistano due filiali differenti, con persone differenti...

In questo breve esempio si comprende quanti potenziali progetti potranno essere realizzati,
e quanti di questi potranno avere aspetti differenti.
Un ipotesi e che dal paese A, la risorsa 1 richieda di vedere il magazzino o la giacenza o un elemento specifico del paese B...

Da qui l'idea di realizzare due front-end diversi per il magazzino un Web, e uno desktop, in modo che possa essere condiviso, da cui non è difficile comprendere che la risorsa 1 acceda da web, ad un sito che espone i dati del magazzino del paese B.

Ora è quindi necessario che a livello di XYZ (l'azienda) esista una rappresentazione unica di tutte
le risorse, indipendentemente da dove queste siano dislocate.

Non dimentichiamoci che i paesi potrebbero essere di differente cultura, e che quindi gli utenti del paese A parlino una lingua diversa dal paese B.

Per Aggregazione sarà doveroso aggiungere all'immutable risorsa 1 anche la provenienza, o eventuali profili per cui accedere alla soluzione.

Il mio dubbio in tutto questo era la posizione fisica della fonte dati, ma partendo dall'univocità di un utente e da una corretta profilazione, si può supporre di accedere (facade) ai sotto sistemi
sfruttando solo le loro basi dati.

Filosofia forse... o frose no, solo un caso di studio.

martedì 23 marzo 2010

XML jquery 1.4 IE 8 vs FF 3.6

Un titolo che è tutto un programma... cercherò di fare luce nell'ombra che io stesso ho proiettato.

Problema: IE 8 usando jQuery traduce l'XML in un modo diverso da FireFox 3.6, eppure la cosa è strana....
e tanto...

Ho realizzato un Web Services che crea un semplice XML nulla di eccezionale, poi tramite una banalissima
chiamata in POST con jQuery eseguo una parserata del XML, per costruire una table.

Morale IE8 legge sulla 80 l'xml è FF 3.6 pure, per altro mi sono scaricato vari tool per leggere l'xml in
modo da comprendere qualche dettaglio in più rispetto a quanto prodotto dal WS. e per tutti la presentazione
è UGUALE...

Quindi è l'interprete di FF 3.6 che differisce da IE... ( o uno lo scarta o l'altro lo aggiunge )
Quindi mi trovo su FF un tag TextElement che contiene "\n"... e la relativa tabulazione...

Nasce naturale la domanda: chi crea questo tag ??? utilizzando un tool per leggere l'xml.. questo tag non c'e'
provando a fare una scansione dei nodi con c#... il tag non c'e' ...

Questo perchè (credo) IE C# il prodottino condividono la stessa base per leggere l'xml.... quindi rimane
il povero FF ...

E dato che non è semplice.. mettere in single line tutta una data table... mi sa tanto che mi converrà
aggiungere un controllino per quel che sto leggendo da jQuery.


Morale... quando qualcosa non va.. gli strumenti giusti (fire bug) servono a trovare gl'inghippi...

lunedì 22 marzo 2010

Pubblico il Web Services e non va ...

Create il vostro web services, lo pubblicate su un server remoto interrogate il vostro web services
Autorizzazione negata....
Cosa fare ..
Cambiate la dicitura nel web config...
customErrors mode="Off"
In questo modo riuscite a vedere l'errore vero ...


interrogate il vostro web services
Request format is unrecognized for URL unexpectedly ending in '/[webMethodName]'.

Se state lavorando con il fw 2.# è possibile che per pura rogna dobbiate esplicitare nel web.config q
ualcosa in più tipo:
[system.web]
[webServices]
[protocols]
[add name="HttpGet"/]
[add name="HttpPost"/]
[/protocols]
[/webServices]
[/system.web]

Va da se la considerazione del perchè un Web ( e ci tengo a precisare .. "WEB") services debba necessitare
l'esplicitazione dei verbi... GET E POST....

Tuttavia fatto questo il gli errori spariscono e tutto funziona...

giovedì 18 marzo 2010

Grammaticalmente parlando...

"avere troppe scelte coincide con il non avere scelte"....
Giuro non ricordo l'autore di questa frase ma gli do' merito a catinelle...

Credo che tutti noi abbiamo nel nostro piccolo una misera applicazione di test che contiene tutti i nostri esperimenti i nostri casi di studio.. i più bravi iniziano con dare anche dei nomi utili alle soluzioni di studio ( quelle da 5 min di prova ) il tempo passa si aggiungono form su form ... e poi ... MA QUESTA E' UN’ALTRA STORIA.

Che differenza c'e' ???
Double? myVar;
Double myVar = null;
Double myVar = Double.NaN;

Quasi nessuna .. forse se avessimo un allegro 386 vi consiglierei di usare la prima dicitura...

Ma perchè consentire 3 modalità differneti per scrivere la stessa cosa ??

Ingenuamente ce ne basta una "la seconda" in questo modo abbiamo la certezza che myVar sia Null...
Ingenuamente "la terza" ci da la certezza che myVar sia "il null per il double"...

Ma ancora una volta ritengo che l'eleganza e la leggibilità debba essere premiante rispetto al resto.

Ed è incredibile quanto un "null" possa cambiare le cose.. !!

martedì 16 marzo 2010

ConfigurationManager / ConfigurationSection

Il web.config è nostro amico ??
Molti credo troppi, non conoscono le vere potenzialità di questo elemento. La letteratura sull'argomento è però molto molto sostanziosa.

Ma per l'appunto il web.config è davvero un nostro amico ?? SI certo che si, basta saperlo sfruttare bene.

Parafrasando i tanti esempi che si possono trovare sul web si possono ottenere mille e milli utilizzi, mille scopi e mille interpretazioni. Nel mio caso come più volte è capitato lo scopo è di presentare una funzionalità e di lasciare al lettore
la possibilità di estendere quanto ha letto con la sua realtà.

Partiamo però da una necessità:
- per un web method di un web services ci serve una particolare configurazione.
- questa è riassumibile con gli attributi "ip,hostName";

va da se che è un perfetto esempio di livello 0.

Creiamo quindi una classe che abbia quest'aspetto...

public class MySpecialConfiguration: ConfigurationSection
{
[ConfigurationProperty("IP")]
public string IP
{
get { return (string)base["IP"]; }
}

[ConfigurationProperty("hostName")]
public string hostName
{
get { return (string)base["hostName"]; }
}
}

Questa classe Estende configurationSection e aggiunge due attributi (IP, hostName).. entrambi come string..

Ora nel web Method...

MySpecialConfiguration msc = ConfigurationManager.GetSection("MySpecialConfiguration") as MySpecialConfiguration;
this.IP = msc.IP;
this.hostName = msc.hostName

tramite il configurationManager.GetSection ([nome]) recuperiamo il nome della section che ci serve.

MySpecialConfiguration msc = (MySpecialConfiguration) ConfigurationManager.GetSection("MySpecialConfiguration");

E' la stessa cosa, scegliete voi come scriverla...

E ora ... la parte clue... il web.config... ( ricordatevi che [ /] che devono essere viste come maggiore e minore...)

[configuration]
[configSections]
[section name="MySqlParameters"
type=" thisSample.MySpecialConfiguration, thisSample" /]
[/configSections]

Che cosa diavolo è type ??? thisSample.MySpecialConfiguration è il nome della classe che abbiamo implementato prima
mentre thisSample è l'assembly

Questa è la dichiarazione della nostra section, ma ci serve anche

[MySqlParameters
IP="127.0.0.1"
hostName="nudrubufu"/]

al richiamo del web method verranno letti i parametri di configurazione...

A ben pensarci questo è proprio tutto quello che serve per aggiungere le proprie "specia conf" al web conf...

martedì 23 febbraio 2010

Web Services C# to Php Pages

Mi porto dietro quest'idea da parecchio tempo, e la teoria nasce dall'esigenza di realizzare una web application ad alta integrazione. Che sia "davvero dinamica" che possa davvero crescere, indipendentemente dalla logica, ovviando a
tutte le costrizioni che l'ambiente .Net rischia di creare.

Con costrizioni intendo "ricompilazione di tutto il sito", revisione dei puntamenti, implementazione di tanto codice per
l'ottimizzazione e tutto quello che ne è correlato.

In ambiente .Net realizzando una web application si ha come output un "sito" e pur pensando alla generallizzazione
delle primitive o dei web controls pur cercando di "disaccopiare" dati e logica, si otterà una soluzione dove per aggiungere
pagine si è costretti a ricompilare tutto.

Ho quindi pensato di Staccare il "sito" da chi fornisce i dati, e chi segue il mio blog, si sarà accorto che soprattutto negli
ultimi post ho fatto qualche breve analisi su quel che mi poteva servire...

Ho pensato ad una Business Logic realizzato da web services in c# e le web page realizzate in php.

Grazie a jQuery è possibile "con uno sforzo iniziale un po' più sostanzioso" ottenere dei risultati decisamente buoni.

Il concetto di base è semplice:
php web page in post chiamata ajax ottiene l'xml dal web services.

E' possibile che la pagina contenga oggetti php che sappiano tradurre l'xml in quanto serve realmente mostrare.

Va da se che oggi l'esecutore della chiamata è una pagina php, ma parlando per Astrazioni è possibile che l'inteprete
dell'xml possa essere qualsiasi altra "Entità".


Integrazione con il project management... In perfetto stile "Agile" sfruttando questa logica d'implementazione si
ha un altro grosso vantaggio. Ogni funzionalità è "FINALIZZATA" è può essere verificata / testa / accettata / chiusa
senza impatti sul resto della soluzione.

Volete saperne di più ? contattatemi via mail.

lunedì 22 febbraio 2010

Div posizioni assolute e relative.....

Comprendo (div)entar matti, ma esagerare non fa bene alla salute.

Questo mini tutorial vi spiega come funzionano i vari allineamenti sfruttando
css Position.

Partiamo da una cosa semplice

Per ottenere questa pagina vi basta realizzare 4 div
1) {width:100%;height:100%}
2) {margin:0 auto;width:960px;background-color:yellow;}
3) {width:100px;height:100px;background-color:red;}
4) {width:100px;height:100px;background-color:lime;}

1) contiene 2)
2) contiene 3) e 4)

così:



Spostiamo il blocco verde

1) {width:100%;height:100%}
2) {margin:0 auto;width:960px;background-color:yellow;}
3) {width:100px;height:100px;background-color:red;float:left}
4) {width:100px;height:100px;background-color:lime;}



Spostiamo il Rosso al posto del verde
1) {width:100%;height:100%}
2) {margin:0 auto;width:960px;background-color:yellow;}
3) {width:100px;height:100px;background-color:red;float:right}
4) {width:100px;height:100px;background-color:lime;}

Rosso e verde uno sull'altro ..
1) {width:100%;height:100%}
2) {margin:0 auto;width:960px;background-color:yellow;}
3) {position:absolute;left:50;width:100px;height:100px;background-color:red;}
4) {width:100px;height:100px;background-color:lime;}

Rosso e verde uno sull'altro, ma in un altro modo.
1) {width:100%;height:100%}
2) {position:relative;margin:0 auto;width:960px;background-color:yellow}
3) {position:absolute;width:100px;height:100px;background-color:red;}
4) {position:absolute;top:10;width:100px;height:100px;background-color:lime;}


Non c'e' troppa chiarezza, quanto meno non è sempre specificato dove Mettere il RELATIVE. Ho fatto parecchie prove prima
di questo mini tutorial per comprendere quanto le posizioni siano "evanescenti".

Specificando nel div contenitore 2) il relative implica che tutti i div ( conenuti e con stile absolute ) faranno riferimento
alla posizione 0,0 (angolo in alto a sinitra).

Tutto quello che contine d4 non subirà variazioni, ma seguira la posizione in cui questo si trova.