-----------------------------------

Acquista i software ArcGIS tramite Studio A&T srl, rivenditore autorizzato dei prodotti Esri.

I migliori software GIS, il miglior supporto tecnico!

I migliori software GIS, il miglior supporto tecnico!
Azienda operante nel settore GIS dal 2001, specializzata nell’utilizzo della tecnologia ArcGIS e aderente ai programmi Esri Italia Business Network ed Esri Partner Network

-----------------------------------



mercoledì 11 febbraio 2009

ArcGIS API for Microsoft Silverlight

I 'guru' Art Haddad, Morten Nielsen, Rex Hansen presentano
Patterns and Best Practices for Building Applications with the ArcGIS API for Microsoft Silverlight: interessantissimo!!!



Preview:





Verrà rilasciata alla ESRI Developer Summit:
http://www.esri.com/news/releases/09_1qtr/silverlight.html

Vedi link per dettagli:
http://events.esri.com/bpc/2009/dev_agenda/index.cfm?fa=Session_Detail_Form&SessionId=136&ScheduleId=256


Silverlight API ArcGIS:
http://resources.esri.com/help/9.3/arcgisserver/apis/silverlight/help/index.html

sabato 7 febbraio 2009

Regular Expression

Le regular expression permettono di ricercare, tramite 'pattern' più o meno complessi, porzioni stringhe in un testo.
In c# la classe che si occupa di questo è System.Text.RegularExpressions.Regex.
Creiamo una semplice form con una textbox ed un button per testare la regular expression.


Creo la regular expression con questa utility http://www.regexbuddy.com/. Ce ne sono anche di gratuite (ad esempio http://www.ultrapico.com/Expresso.htm).


Ad esempio vogliamo estrarre tutte le parole racchiuse tra parentesi quadre.



Invece di creare codice utilizzando ad esempio i classici substring, indexof ecc. abbiamo lo stesso risultato con poche righe di codice.



In un testo ad esempio vogliamo che non ci siano due parole uguali ripetute:


try
            {


                Regex regexObj = new Regex(@"\b(\w+)\s+\1\b");
                Match matchResults = regexObj.Match(subjectString);


                while (matchResults.Success)
                {
                    // matched text: matchResults.Value
                    // match start: matchResults.Index
                    // match length: matchResults.Length
                    matchResults = matchResults.NextMatch();
                }
            }

            catch(ArgumentException ex)
            {
                // Syntax error in the regular expression
            }


Testo: 'This word is a repeated repeated word. A pluto pluto'
troveremo: repeated repeatedpluto pluto

Se è un intero ancorato:

try {

                    Regex regexObj = new Regex(@"^\d+$");

                    Match matchResults = regexObj.Match(subjectString);

                    while (matchResults.Success) {

                        // matched text: match Results.Value
                        // match start: matchResults.Index
                        // match length: matchResults.Length
                        matchResults = matchResults.NextMatch();

                    }

                } catch (ArgumentException ex)
                {
                    // Syntax error in the regular expression
                }

Testo:
12,345
1234,45
1234.45
1234567890
+12,34
-12,34
+1234
-1234
Attention: 1 2 3 test
The number 12345678901234567890 is quite long
1+1=2
troveremo:1234567890

giovedì 5 febbraio 2009

Currying in javascript

Una delle caratteristiche delle funzioni javascript è quello di poter essere nitificate.
In sostanza possiamo dichiarare una funzione dentro un'altra funzione.
Ad esempio:

function main(arg)
{

var test ="Esempio di closures";

function child () {

alert (arg + test);

}

child();

}

La funzione child è stata nidificata nella funzione main.
La funzione child può accedere oltre alle sue variabili interne anche alle variabile test ed arg che sono definite fuori da essa.
Se invochiamo la main, ad esempio main ('Test:'), il risultato sarà un alert: 'Test: Esempio di clousures'.

In pratica la funzione child può accedere alle variabili della funzione padre ed alle sue.

La cosa interessante è che se la funzione restituisce la funzione child le variabili della main 'vivono' ancora nella funzione child:


function main(arg)
{

var test ="Esempio di closures";

function child ()

{

alert (arg + test);

}
return child; //<---- return la funzione child()

}

Invece di invocare la funzione child all'interno della main la restituiamo e possiamo testare che le variabili continuano a 'vivere':

var child = main ('Test:');
child();


il risultato sarà un alert: 'Test: Esempio di clousures'.

La funzione child può accedere alle variabili della funzione padre se sono state dichiarate locali. Abbiamo creato la cosiddetta closure.
Dall'esempio abbiamo anche visto che la funzione main definisce due variabili (arg e test) ma noi possiamo chiamare la funzione child senza passare parametri. Abbiamo trasformato una funzione con più parametri in una con meno (in questo caso con zero parametri). Questa tecnica è conosciuta come currying (in computer science).

Un altro esempio per far capire.
Potremmo semplicemente implementare nel prototipo:

Function.prototype.curry = function() {

var fn = this, args = Array.prototype.slice.call(arguments);

return function()
{

return fn.apply(this, args.concat(Array.prototype.slice.call(arguments)));

};

};



Caricheremmo i primi argomenti e restituiremmo una funzione con, quindi caricati, questi argomenti. La funzione poi potrà essere utilizzata:
Esempio

function sum(x,y,z) {
return x+y+z;
}


function test() {
var a = sum.curry(2,5); // restituisce la funzione con x e y già precaricati

var b = a(3);
alert(b.toString());

}