Alessio Pambianchi

ASP.NET AJAX ricerche-condivisione
posts - 13, comments - 1, trackbacks - 1

My Links

News


View Alessio Pambianchi's profile on LinkedIn

Add to Technorati Favorites

Tag Cloud

Archives

Post Categories

Friends Link

My Fevorite

venerdì 11 luglio 2008

Troppo banale, eppure ...

Ciao, in questi giorni mi è capitato di rimettere le mani in un'applicazione Web che avevo sviluppato tempo fa. L'ho dovuto faore a causa di un errore nella gestione dei caratteri speciali "è é ù ò à ù ì" (maledetti bastardi ;) ).

In pratica cosa succedeva, e cosa succede (potrebbe essere utile). La mia applicazione Web "hosta" un gridview che contiene varie colonne una custom con un bottone le altre standard con valori di tipo stringa.

Al click sul bottone vengono recuperati i valori di tipo stringa che sono associati alla riga dalla quale l'evento click  è stato sollevato (astruso ma è così), con i valori di tipo stringa viene costruita ed eseguita una SELECT nel db etc etc..

Bene per questa parte tecnica nessun problema, tutto funziona alla perfezione, per cui senza fare nessun test approfondito e vista la banalità delle azioni pubblico il tutto evvai pizza e birra!!!!

A distanza di qualche mese un nuova entry si aggira nella sorgente dati, al suo interno la parola "Proprietà". Ora ogni volta che l'utente clicca sul bottone  la  SELECT non produce nessun risultato ma neanche nessuna eccezione (da paura!!).

Ebbene dopo una piccola sessione di debug ho scoperto che la propietà Text della classe GridViewRow del .NET Framework ritorna il valore testuale come viene interpretato dal browser ovvero con i caratteri speciali codificati (Proprietà). Ora dopo avere scoperto il problema la soluzione è semplice ...

    Dim gridRow As GridViewRow = Nothing
Dim
valore As String = String.Empty

Try
'Recupera l'entry selezionata della gridview
gridRow = CType(sender, System.Web.UI.WebControls.ImageButton).Parent.Parent
If gridRow IsNot Nothing Then
'Recupera il testo valore - decodifica i caratteri speciali presenti
valore = Server.HtmlDecode(gridRow.Cells(1).Text)
End If
Catch
ex As Exception
'manage exception
Finally
'free all resources
End Try

Questo è tutto. Ero sicuro che il codice generato la prima volta fosse abbastanza scritto bene e senza errori invece ecco come ci si può perdere in un bicchier d'acqua (parlo esclusivamente di me). Questo piccolo errore viene percepito dal cliente come un malfunzionamento dell'applicazione per cui okkio ai particolari ...

Tags:

posted @ venerdì 11 luglio 2008 9.58 | Feedback (0) | Filed Under [ ASP.NET AJAX ]

giovedì 3 luglio 2008

[OT] Firefox Record !!!

image

posted @ giovedì 3 luglio 2008 8.59 | Feedback (0) | Filed Under [ Off Topic ]

martedì 1 luglio 2008

UML 2.1 Tutorial

Ciao ho trovato On-Line questo tutorial su UML 2.1, subito lo condivido con voi, a me sembra interessante cosa ne pensate?

Tags:

posted @ martedì 1 luglio 2008 9.37 | Feedback (0) | Filed Under [ Off Topic ]

venerdì 20 giugno 2008

Processo "NT Kernel & System" uso cpu 80% soluzione.

Era un po di tempo che la mia macchina per lo sviluppo aveva dei rallentamenti clamorosi, ed in particolare un porcesso con descrizione "NT Kernel & System" occupava le risorse della CPU fino all' 80%. Ecco, ho pensato, ho beccato qualche spyware maledetto, qualche virus ... Invece no dopo una serie di googlate ho trovato il colpevole: "Microsoft Network Monitor", questo programma (che ho addirittura considerato splendido in un precedente post) provoca il comportamento anomalo da parte del processo NT Kernel & System, per ora in attesa di toppe da parte di Microsoft ho disinstallato tutto e tutto è tornato alla normalità. Per ulteriori info e per chi avesse voglia di approfondire ecco il link al post più interessante che ho trovato su questo problema.

Tags:

posted @ venerdì 20 giugno 2008 14.50 | Feedback (0) | Filed Under [ MS - System ]

lunedì 16 giugno 2008

Sharepoint gestione tipi di dato Currency e Number

Ho sviluppato un'applicazione che si integra con SPS 2003, per la gestione di tipi di dato Currency. In fase di Testing BlackBox del' applicazione ho inserito, in corrispondenza dei Currency,  grandi cifre decimali (EX: 1234567890123456).

Questo specifico test ha evidenziato delle anomalie replicabili creando una semplice lista in Sahrepoint composta da una colonna di tipo Currency ed una colonna di tipo Number:

Sahrepoint List

L'immagine mostra la lista inizializzata con valori significativi, da questa lista prendiamo in esame la quarta riga a partire dall'alto. Sebbene le colonne "currency" e "number" vengano visualizzate come cifre numeriche senza apparenti problemi, in fase di inserimento il numero inserito era differente rispetto a quello visualizzato. Infatti a fronte dell'inserimento della cifra "1234567890123456" mi ritrovo visualizzata la cifra "1234567890123460" trattandosi di Currency ovvero "Moneta" trovo un'arrotondamento per eccesso di 4 euro ;). La stessa cosa capita anche al tipo di dato Number.

Visto il problema, analizzo le possibili cause, focalizzando l'attenzione sui tipi di dato Currency (quello che mi interessa). Il valore di questo tipo di dato viene gestito con metodi della classe "Number", che a sua volta corrisponde ad un System.Double del .NET Framework. Per fissare meglio le affermazioni rimando alle pagina di MSDN relativa l'Enum SPFieldType e relativa la Classe SPFieldCurrency del Namespace "Microsoft.Sharepoint".

Avendo scoperto il tipo di dato base System.Double, ho iniziato ad implementare alcuni piccoli e semplici test su questo tipo realizzando una stupida applicazione che:

Dim f As Double = 999999999999999
Dim g As Double = 1234567890123456

Console.WriteLine("f: " & f.ToString)
Console.WriteLine("g: " & g.ToString)

 

Console Application

Mandando in esecuzione questa piccola applicazione si nota che il primo dato viene mostrato nella notazione decimale  mentre il secondo viene mostrato nella notazione in virgola mobile, altra cosa fondamentale il secondo dato è 1,234567890123456E+15 che nella notazione decimale corrisponde a  1234567890123460 propio il valore decimale arrotondato della lista di SahrePoint visto prima. Abbiamo spostato il problema dal tipo di dato Currency al System.Double di .NET.

Da una semplicissima ricerca su google ho scoperto che System.Double (.NET framework) è conforme allo standard IEEE per il calcolo in virgola mobile (IEEE 754), la gestione secondo lo standard di questi numeri per la precisione doppia é:

Double precision

L'imagine mostra la distribuzione dei 64 bit che compongono la gestione dei double a doppia precisione fonte wikipedia essa infatti è stata estrapolata dal sito, per cui non garantisco che ci sia corrispondenza 1 a 1 con la rappresentazione dei double del Framework .NET, MSDN comunque dice: 

"The Double value type represents a double-precision 64-bit number with values ranging from negative 1.79769313486232e308 to positive 1.79769313486232e308, as well as positive or negative zero, PositiveInfinity, NegativeInfinity, and Not-a-Number (NaN).

Double complies with the IEC 60559:1989 (IEEE 754) standard for binary floating-point arithmetic."  (fonte MSDN)

Le informazioni date fin d'ora, sopratutto quelle recuperate da wikipedia, sono si dettagliate ma non sufficienti a capire a fondo il problema, ho eseguito per cui altre ricerche, ho trovato questa voce tratta da wikipedia (inglese questa volta) dei numeri in virgola mobile a doppia precisione, da queta voce estrapolo una parte significativa:

"... With the 52 bits of the fraction mantissa appearing in the memory format the total precision is therefore 53 bits (approximately 16 decimal digits, log10(253)). ... "  (fonte wikipedia)

Il testo dice chiaramente che: la precisione totale raggiungibile sono "approssimativamente", gli interi composti da 16 cifre decimali. Aggiungo che i numeri eccednti tale limite vengono arrotondati al minimo numero rappresentabile maggiore della cifra data. Se ora riprendiamo il codice della piccola "Console Application" notiamo che esso cerca di rappresentare un numero composto appunto da 16 cifre decimali (1234567890123456), il che comporta l'arrotondamento. Sempre estratto dalla voce wikipedia faccio notare l'uguaglianza del range di numeri rappresentabili riportato anche da MSDN:

"0x7fef ffff ffff ffff   ~ 1.7976931348623157 x 10308 (Max Double)" (fonte wikipedia)

Questo è quanto, vi consiglio per cui attenzione nell'uso di cifre composte da un numero di interi superiore a 15 sopratutto se dovete poi effettuare delle operazioni su di esse, sia quando state utilizzando Sharepoint ma anche quando svilupate utilizzando il .NET framework.

posted @ lunedì 16 giugno 2008 10.46 | Feedback (0) | Filed Under [ ASP.NET AJAX ]

martedì 10 giugno 2008

[OT] - Sicurezza nella Rete: Bidplaza & HTTP GET!!!

Per capire ancora meglio il funzionamento del protocollo HTTP, mi sono messo a giocare con le varie chiamate GET, POST che vengono generate tra il Client (Browser) ed il Server. Prima di tutto mi sono installato questo splendido strumento Microsoft Network Monitor :

Microsoft Network Minitor 3.1

Be che dire questo strumento permette di intercettare il traffico che viene smistato dai nostri apparati di rete attivi, schede Wireless comprese (Solo per Vista), anche se devo dire che l'analisi di questo tipo di supporto comporta una maggiore attenzione per via del numero di pacchetti che vengono generati dal protocollo 802.11/... . Comunque sia il suo funzionamento è immediato bastano due o tre click per iniziare a catturare il traffico. Da notare che deve essere sempre lanciato come amministratore, per poter funzionare correttamente.

Comunque dopo che avete scelto la fonte da monitorare, potete avviare un nuovo "Capture Tab" da questo premete  il tasto "Paly", tutto il traffico inizia ad essere catturato, In questa condizione tutti i pacchetti vengono catturati, ma è possibile intercettarne di specifici, costruendo un filtro ed applicarlo poi al traffico che stiamo monitorando.

Visto lo strumento veniamo ora al divertente, dopo aver preso confidenza con lo strumento ho iniziato a monitorare il traffico che veniva generato e ricevuto dalla mia macchina effettuando alcune richieste HTTP verso siti più o meno noti. Conoscevo questo sito per le aste al ribasso Bidpaza :

Bidplaza LogIn

Notate nell'immagine a finaco il form per l'accesso alla sezione privata di un utente, mi sono chiesto quale tipo di traffico venisse generato se avessi inserito delle credenziali e avessi premuto sul tasto "Accedi"

Ebbene avendo un account con Bidplaza non mi rimaneva che inserire le mie credenziali e vedere cosa sarebbe successo.

Ho avviato l'intercettazione del traffico generato, ho cliccato su accedi quando la richiesta è teminata ho stoppato l'intercettazione del traffico, ecco il risultato:

 

Le credenziali in chiaro, nella "querystring" (come la chiameremmo noi di ASP.NET) come parametri username e password

Miocrosoft Network Monitor Request Details

P.S. quelle inserite sono di test non sono le mie vere credenziali!!

Tags:

posted @ martedì 10 giugno 2008 12.49 | Feedback (0) | Filed Under [ Off Topic ]

mercoledì 16 aprile 2008

Work Around - "Access Denied" con ASP.NET Ajax 1.0 e frame cross-domain

Esclusivamente riferito a questo scenario:

  • WebApllication ASP.NET Ajax dentro un frame o iframe.
  • Il frame si trova in un dominio differente rispetto la finestra top-level.

Se si cerca di accedere alla Web-Aplication, tramite Internet Explorer (IE), viene sollevato l'errore lato client "access denied" ogni volta che un evento DOM viene sollevato.

Prima di proseguire due parole sullo scenario, anche se a prima vista potrebbe sembrare strano che si possa verificare, provate ad immaginare una situazione del genere: WebpartPage su Moss che ospita la vostra Web-Application.

In sostanza e per essere più chiari, quello che si verifica è l'impossibilità di utilizzare qualsiasi controllo Ajax inserito nella Web-Application.

Per poter permettere il corretto funzionamento di Ajax anche in uno scenario del genere esiste un work around di Bertrand Le Roy, che spiega dettagliatamente le cause, la risoluzione e alcune considerazioni e update, di conseguenza se volete andare a fondo vi consiglio di dare una letta al suo post, altrimenti eccovi la soluzione che io ho adottato, prendendo sempre spunto dal suo post.

Il concetto che sta alla base del work-around è la localizzazione degli script che compongono la Microsoft Ajax Library di solito per chi ha installato Ajax questi si trovano nella directory di installazione di quest'ultimo es: "C:\[PathToAjaxFolder]\ASP.NET 2.0 AJAX Extensions\v1.0.61025\MicrosoftAjaxLibrary\" (PathToAjaxFolder è il path alla tua directory di installazione) all'interno della directory System.Web.Extension.

Visual Studio 2005 - Solution Explorer Bene, trovata System.Web.Extension l'ho copiata ed inserita all'interno della directory che contiene il file soluzione di VS2005 della mia Web-Application, notate che il "dove" copiare la directory dipende sopratutrto da come sono stati concettualmente suddivisi i vari file e directory che compongono la vostra soluzione. Fatto questo da Visual Studio ho reso visibile la directory all'interno della soluzione (ora è visibile dal Solution Explorer di Visual Studio).

Altra considerazione se avete certezza che la vostra aplicazione faccia comunque uso di una sola lingua ad esempio italiano potete eliminare tutti i file che si trovano all'interno della directory "System.Web.Extensions\1.0.61025.0\Globalization" escluso il file "it-IT.js", questo vi permette di mantenere il supporto alla globalizzazione per la lingua Italiana in Ajax, e di risparmiare spazio su disco.

Ancora non ci siamo, ci sono altri step che dobbiamo fare:

1) Modifica dei file "*.aspx" che contengono lo Script Manager. Certo lo script manager deve essere modificato e nel particolare si deve aggiungere questa referenza in questo modo:


<asp:ScriptManager ID="MyScriptManager" runat="server" EnableScriptGlobalization="true" EnablePageMethods="true" >
<
Scripts>
<
asp:ScriptReference Name="MicrosoftAjax.js" ScriptMode="Auto" Path="System.Web.Extensions/1.0.61025.0/MicrosoftAjax.js"/>
</
Scripts>
</
asp:ScriptManager>

Due considerazioni sull'attributo Path del tag asp:ScriptReference, questo si riferisce propio al path della directory Suystem.Web.Extension rispetto alla path del file .aspx alla quale lo script manager, che stiamo modificando, appartiene. Nello specifico l'esempio mostra lo ScirptManager del file Default.aspx (vedi immagine). Se il file .aspx si trovasse di un livello inferiore rispetto alla gerarchia delle directory allora l'attributo path deve essere modificato come segue:

Path="~/System.Web.Extensions/1.0.61025.0/MicrosoftAjax.js"

2) Patchare i file MicrosoftAjax.debug.js e MicrosoftAjax.js, ok non vi dico dove trovate questi file se avete seguito con interesse lo sapete, per cui apriamo il file MicrosoftAjax.debug.js cerchiamo questo testo all'interno del file:

switch(Sys.Browser.agent) {
case Sys.Browser.InternetExplorer:

Ora rimpiazziamo qualsiasi cosa si trova tra il codice sopra e questo codice:

case Sys.Browser.Safari:

Con questo codice (NB: le righe di codice sopra non devono essere rimpiazzate deve essere rimpiazzato solo il codice che si trova tra le due righe sopra):

    Sys.UI.DomElement.getLocation = function(element) {
if (element.self || element.nodeType === 9) return new Sys.UI.Point(0,0);
var clientRect = element.getBoundingClientRect();
if (!clientRect) {
return new Sys.UI.Point(0,0);
}
var ownerDocument = element.document.documentElement;
var offsetX = clientRect.left - 2 + ownerDocument.scrollLeft,
offsetY = clientRect.top - 2 + ownerDocument.scrollTop;

try {
var f = element.ownerDocument.parentWindow.frameElement || null;
if (f) {
var offset = 2 - (f.frameBorder || 1) * 2;
offsetX += offset;
offsetY += offset;
}
}
catch(ex) {
}

return new Sys.UI.Point(offsetX, offsetY);
}
break;

Bene un consiglio invece di rimpiazzare brutalmente al vecchio codice dategli una commentata. Ora dobbiamo modificare il file MicrosoftAjax.js attenzione non dovete modificare la formattazzione del testo, ma semplicemnte rimpiazzare il codice, vi dico questo perche questo file non è formattato allo stesso modo di quello precedente. Per cui aprite il file MicrosoftAjax.js trovate il codice:

switch(Sys.Browser.agent){case Sys.Browser.InternetExplorer:

rimpiazzate tutto quello che si trova tra la riga sopra e questa riga:

case Sys.Browser.Safari:

con questo codice (NB: Ancora una volta assicuratevi che il codice sotto non contenga interruzioni di linea prima di effettuare la sostituzione, copiatelo in notepad eliminate le interruzioni di linea sostituitelo):

Sys.UI.DomElement.getLocation=function(a){if(a.self||a.nodeType===9)return new Sys.UI.Point(0,0);
var b=a.getBoundingClientRect();if(!b)return new Sys.UI.Point(0,0);
var c=a.document.documentElement,d=b.left-2+c.scrollLeft,e=b.top-2+c.scrollTop;
try{var g=a.ownerDocument.parentWindow.frameElement||null;
if(g){var f=2-(g.frameBorder||1)*2;d+=f;e+=f}}catch(h){}return new Sys.UI.Point(d,e)};break;

Fine ora la Web-Application non deve più mostrare gli errori.

posted @ mercoledì 16 aprile 2008 16.29 | Feedback (0) | Filed Under [ ASP.NET AJAX ]

venerdì 28 marzo 2008

[OT] - Ma non tanto: Vista gestione directory ProgramData.

La directory "C:\ProgramData" che come mamma Microsoft dice http://msdn2.microsoft.com/en-us/library/aa367992(VS.85).aspx è la cartella deputata per: "containing application data for all users" (fonte Microsoft) è soggetta a trattamenti particolari:

Contenuto directory ProgramData

Iniziamo a "giocare", utilizzando sempre le dovute prcauzioni, con il contenuto di questa directory. Accedo ad esempio alla directory "C:\ProgramData\Adobe\Updater5" al suo interno c'è un file xml (non è importante il file in se ma quello che succede),  apro quest'ultimo con notepad ed inserisco la parola "test" all'inizio del file:

Notepad

salvo le modifiche ma non riesco perchè il file è stato creato dall'utente amministratore. Ora utilizzo un'altro programma di editing "Notepad2" per modificare lo stesso file, inserisco la parola "test" salvo le modifiche, questa volta tutto va a buon fine, nessun messaggio di avvertimento. Apro contemporaneamente il file sia con notepad che con notepad2:

Stesso file a confronto.

Se non consideriamo il colore e l'indentazione del testo notiamo che si tratta in effetti di due file differenti anche se abbiamo aperto lo stesso file! E' successo qualche cosa ma cosa?

la risposta:

http://technet2.microsoft.com/WindowsVista/en/library/00d04415-2b2f-422c-b70e-b18ff918c2811033.mspx?mfr=true

Virtualization

Because the enterprise environment has long been a place where system administrators have been attempting to lock down systems, many line-of-business (LOB) applications are designed to not require a full administrator access token. As a result, IT administrators will not need to replace the majority of pre-Windows Vista applications when running Windows Vista with UAC enabled.

Windows Vista includes file and registry virtualization technology for applications that are not UAC compliant and that have historically required an administrator's access token to run correctly. Virtualization ensures that even applications that are not UAC compliant will be compatible with Windows Vista. When a non-UAC-compliant administrative application attempts to write to a protected directory, such as Program Files, UAC gives the application its own virtualized view of the resource it is attempting to change, using a copy-on-write strategy. The virtualized copy is maintained under the user's profile. As a result, a separate copy of the virtualized file is created for each user that runs the non-compliant application.” (fonte Microsoft)

Questo spiega tutto le applicazioni non UAC compliant come notepad2 vedono una "vista virtuale" della directory UAC protetta ProgramData, di conseguenza lavorano in tutto e per tutto con una copia dei file e delle directory che vengono modificati\e. Le applicazioni UAC compliant come notepad quando viene modificato e salvato un file di una directory UAC protetta impediscono il salvataggio se il programma non gira come amministratore.

Ultima considerazione, i file duplicati dalla virtualizzazione vengono inseriti all'interno della directory "C:\User\CurrentUser\AppData\Local\VirtualStore\ProgrammData\Path al file modificato" :

Virtualization

Se soppesiamo tutte le implicazioni che questo meccanismo comporta,..., lascio voi le conclusioni.

posted @ venerdì 28 marzo 2008 22.48 | Feedback (0) | Filed Under [ MS - System ]

martedì 18 dicembre 2007

[VOT] - Belkin può capitare!!!!

Navigando alla ricerca di un regalo mi sono inbattuto nel sito della Belkin, che dire il sito non è male ci sono i prodotti,  le descrizioni e le immagini di questi ultimi, tra l'altro è possibile anche stampare le specifiche di ogni prodotto in formato PDF ......... sarà vero?


se volete verificare error link.


Rettifica:

Nel frattempo l'errore è stato corretto, ora l'applicazione non genera più l'ecccezione.

Technorati Tags: ,

posted @ martedì 18 dicembre 2007 12.25 | Feedback (0) | Filed Under [ Off Topic ]

giovedì 29 novembre 2007

[OT] - Rimuovere Internet Explorer 7 e ritornare a Internet Explorer 6

Se per caso qualcuno avesse la necessità di disinstallare Internet Explorer (IE)  7 per tornare al vecchio IE6, ecco gli step necessari per arrivare alla meta.

NB le operazioni sono valide per i seguenti sistemi operativi:

windows 2000, xp homexp pro.

1) CLick su Start

2) CLick su Control Panel (Pannello di Controllo)

3) Click su Add/remove progranms (Installazione Applicazioni)

in alto al centro sulla finestra che si è aperta trovate la checkBox show updates (Mostra aggiornamenti) "checkatela"  se non lo fosse (di solito se avete installato tanti aggiornamenti si deve attendere per qualche secondo prima di vedere il check).

Ora navigate l'elenco dei programmi installati, selezionate IE 7,  cliccate sul pulsante Remove (Rimuovi) (si trova a destra della selezione), seguite passo passo la disinstallazione, quando avete finito riavviate la macchina.

posted @ giovedì 29 novembre 2007 12.29 | Feedback (0) | Filed Under [ MS - System ]

Powered by: