ExtJs Extender Control


Per chi come me programma molto sul web la libreria javascript extjs è veramente fantastica. Permette di avvicinare davvero una applicazione web ad una applicazione windows, soprattutto per quanto riguarda la gestione delle tabelle dati (alcuni esempi, ma soprattutto il web desktop).

Rodrigo Diniz sta cercando (come già segnalato da Alberto) di fare un "porting" della libreria javascript in .NET in modo tale che sia possibile utilizzarla lato server.

In questi giorni ho lavorato alla correzione di un bug secondo me molto grave. Nonostante infatti la grid funzionasse correttamente in asp.net, smetteva di funzionare nel caso fosse presente una master page, per via del fatto che le master pages (e relativi placeholder) rinominano il client id di tutti i controlli. Ovviamente la libreria Javascript non riusciva più a trovare la griglia e quindi non funzionava. Per mia fortuna, nonostante non sia certo un esperto di Javascript, sono riuscito a sistemare il problema ed ora la griglia funziona correttamente (ma devo ancora finire di testare per bene) anche in presenza di Master Page.

Grazie al mio piccolo contributo inoltre Rodrigo Diniz è stato così gentile da inserirmi nel team di sviluppo. Spero proprio di poter dare una mano, nonostante il tempo sia sempre limitatissimo (chiunque voglia aggregarsi sarà il ben accetto).

Se qualcuno di voi volesse dare una occhiata alla libreria, oggi è stata rilasciata l'ultima versione, se invece volete solo dare una occhiata alla sue potenzialità provate a seguire questo link.

author: Alessandro Benedetti | posted @ Monday, October 22, 2007 11:40 PM | Feedback (0)

Nuova release di AJAX Control Toolkit


Probabilmente lo sapevate già tutti ma io me ne sono accorto solo ora: è uscita una nuova release dell'Ajax Control Toolkit (del 20/09/2007).

http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4941

Oltre a risolvere alcuni bug della precedente versione, è stato migliorato il supporto a Visual Studio 2008 ed al Framework 3.5 Beta.

Qui potete trovare le note di rilascio e gli esempi.

author: Alessandro Benedetti | posted @ Wednesday, September 26, 2007 12:50 PM | Feedback (0)

VSTO 2005 SE - Nuova versione


Volevo solo segnalare che è uscita una nuova versione di Microsoft Visual Studio 2005 Tools per Office Second Edition Runtime (VSTO 2005 SE) come segnalato qui: http://blogs.msdn.com/vsto2/archive/2007/08/22/updated-vsto-2005-se-runtime-is-available.aspx. Questa nuova versione dovrebbe risolvere numerosi bug tra i quali quello che mi ha fatto impazzire in questi ultimi mesi ma di questo ne parlerò in un altro post, dopo essermi accertato che Microsoft abbia messo la tanta desiderata "pezza".

author: Alessandro Benedetti | posted @ Monday, September 24, 2007 8:15 PM | Feedback (0)

ModalPopupExtender e Web User Controls


Sto lavorando molto con Ajax Control Toolkit e mi sono imbattuto in un problema un pò particolare. Volevo aprire in una pagina web una finestra "modale" che doveva contenere uno web user control. Utilizzando ModalPopupExtender sembra tutto semplice ma purtroppo questo fantastico controllo non permette di accedere ai controlli all'interno di uno web user control. La soluzione è arrivata tramite questo blog in (penso) cinese. Ma andiamo con ordine. Supponiamo di avere uno user control fatto in questo modo

<asp:Panel ID="ModalDialogPanel" runat="server"
Width="300" style="padding: 10px; border:solid 1px black;">
ASP.NET AJAX is a free framework for building a new...
<br />
<br />
<asp:Button ID="OkButton" runat="server" Text="OK" />
<asp:Button ID="CancelButton" runat="server" Text="Cancel" />
</asp:Panel>

Per utilizzare una finestra modale è sufficiente nella pagina web aggiungere il ModalPopupExtender e il Web User Control:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:LinkButton ID="LinkButton1" runat="server">
Click Here to Popup a Modal Dialog
</asp:LinkButton>
<ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender" runat="server"
TargetControlID="LinkButton1"
PopupControlID="ModalDialog, ModalDialogPanel"
OkControlID="ModalDialog, OkButton"
CancelControlID="ModalDialog, CancelButton"
OnResolveControlID="ModalPopupExtender_ResolveControlID" />
<uc1:ModalDialog ID="ModalDialog" runat="server" />

Si può notare che a differenza del normale utilizzo del ModalPopupExtender le proprietà PopupControlID, OkControlID, CancelControlID, ... contengono sia il riferimento allo UserControl che alla proprietà da utilizzare. Per riuscire quindi a far trovare il controllo è infine sufficiente scrivere un metodo che lo vada a trovare (ModalPopupExtender_ResolveControlID):

protected void ModalPopupExtender_ResolveControlID(
object sender, ResolveControlEventArgs e)
{
if (e.ControlID == null) return;
string[] controlIds = e.ControlID.Split(',');
Control result = this;
foreach (string id in controlIds)
{
result = result.FindControl(id.Trim());
}
e.Control = result;
}

Questo codice consente al ModalPopupExtander di trovare i controlli e funzionare correttamente.

author: Alessandro Benedetti | posted @ Thursday, July 19, 2007 12:07 PM | Feedback (2)

Uscita l'SDK per OpenXML


Riporto la notizia dal sito programmazione.it:

Arriva l'SDK per Office OpenXML

Pochi mesi dopo il riconoscimento di OpenXML, il formato aperto di default di Office 2007, come standard ECMA, arriva puntuale il Software Development Kit (SDK) che fornisce un insieme di classi di alto livello, fortemente tipizzate, per l'accesso alle API, già esistenti, del namespace System.IO.Packaging. [Continua...]

author: Alessandro Benedetti | posted @ Wednesday, June 13, 2007 11:16 AM | Feedback (0)

Vista e l'assistente vocale


Anche io come molti di voi sono definitivamente passato a Windows Vista. Beh ammetto che la partizione con Windows XP è lì sempre pronta,  ma inutilizzata da diverse settimane. Lavorando molto sul web, ho voluto provare l'assistente vocale di Windows Vista, componente assente in Windows XP. L'ho attivato durante la schermata di logon ed ho testato i miei siti, direi che è spettacolare, nonostante sia "gratuito", nel senso che è già all'interno di Vista,  ha un'ottima qualità, è compatibile con le voci SAPI 5 e sembra decisamente molto usabile.

Ho trovato un solo, grosso, inconveniente.

Ho finito di testare i miei siti, ho provato a disabilitarlo e che ci crediate o no non riesco più a levarlo di mezzo!!! Nella schermata di logon dico di non attivarlo, ma al successivo riavvio me lo ritrovo lì attivo che mi parla con quella voce robotica che sembra prendermi in giro. Una volta avviato il sistema operativo rivedo la schermata con le opzioni... le ho disabilitate tutte! Niente al successivo reboot è sempre lì ad aspettarmi. Ora proverò a mettere un bavaglio alle casse per non sentirlo più ;-)

author: Alessandro Benedetti | posted @ Friday, April 6, 2007 2:53 PM | Feedback (24)

Windows Ultimate Extras - DreamScene


Nella versione inglese di Windows Vista Ultimate è disponibile tra gli aggiornamenti di Windows Ultimate Extras anche Dreamscene, una nuova funzionalità che permette di utilizzare video MPG o WMV come sfondo del Desktop. Purtroppo chi possiede Windows Vista Ultimate in italiano non può ancora utilizzare questa funzionalità in beta. E' sufficiente però installare da Windows Update il Language Pack in inglese perchè questo aggiornamento compaia in lista.

author: Alessandro Benedetti | posted @ Tuesday, March 20, 2007 2:36 PM | Feedback (0)

Anche le aziende più grosse ci cascano


Skype ha organizzato un concorso, stile slot machine, dove si possono vincere simpatici premi come telefoni voip o router fon. Peccato che chi ha sviluppato l'applicazione non ha minimamente tenuto in considerazione la sicurezza. Ecco cosa appare in questi minuti, un bel errore di timeout con queste informazioni:

Errore server nell'applicazione '/'.

Timeout. Il tempo disponibile è scaduto prima che venisse stabilita una connessione dal pool. Il problema potrebbe essersi verificato perché tutte le connessioni in pool erano in uso ed è stata raggiunta la dimensione massima del pool.

Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.

Dettagli eccezione: System.InvalidOperationException: Timeout. Il tempo disponibile è scaduto prima che venisse stabilita una connessione dal pool. Il problema potrebbe essersi verificato perché tutte le connessioni in pool erano in uso ed è stata raggiunta la dimensione massima del pool.

Errore nel codice sorgente:

Riga 21: 	string _ConnString = "server=sql2005;database=vinciconskype;uid=*********;pwd=*********;";
Riga 22: 	SqlConnection conn = new SqlConnection (_ConnString);
Riga 23: 	conn.Open();
Riga 24: 	string _sql = "SELECT COUNT(*) [Chk] FROM [IP] WHERE [IP_Start]  <= '"+ numericIP.ToString() +"' AND [IP_End] >= '"+ numericIP.ToString() +"'";
Riga 25: 	SqlCommand _SqlCommand = new SqlCommand(_sql,conn);

File sorgente: d:\www\MW_qPIXaGcIG\vinciconskype.com\default.aspx    Riga: 23
Vi assicuro che username e password sono in chiaro, ma per ovvi motivi preferisco non postarle.

author: Alessandro Benedetti | posted @ Tuesday, March 20, 2007 2:31 PM | Feedback (0)

Table or Tableless?


Vorrei riprendere qui un discorso cominciato da TheDuzBlog! ;-p nel suo ultimo post.

Ho notato che TheDuz, esattamente come era successo a me, è rimasto un pò deluso dall'approccio tableless dopo aver perso probabilmente una miriade di tempo nel tentativo di costruire pagine tableless completamente compatibili tra internet explorer, firefox, safari e compagnia bella. Purtroppo è vero, l'incompatibilità tra i diversi browser (e qui grossa colpa va ahimè a mamma Microsoft) è veramente esasperante, però le cose stanno cambiando (internet explorer 7, firefox e safari si stanno avvicinando alla completa aderenza agli standard) e questo dovrebbe portare i "div-scettici" a cambiare idea. 

Riprendendo il discorso di TheDuz io credo che oltre al virtuosismo teorico o alle prese di posizione religiose riguardo table o tableless ci sono un paio di cose FONDAMENTALI da tenere ben presente.

L'uso dei DIV e quindi dei CSS riduce il codice della pagina in maniera incredibile, a volte si possono avere diminuzioni dell'80% dei Kb. Certo, si può controbattere che si ingradiscono i CSS... verissimo... ma i CSS vanno in cache, scaricati solo la prima volta.
Oltre a questo indipendentemente dalla semplicità del sito basti alla semplicità dello sviluppo. Il tempo che si perde cercando il TD giusto si guadagna poi trovando facilmente il DIV che è nella giusta posizione e cioè quella che concettualmente è corretta e non quella che è graficamente corretta.
Inoltre una interfaccia web realizzata con le tabelle NON è accessibile e mai lo sarà, ed i disabili sono tanti nel mondo e Google è uno di questi. Non è uno scherzo, nè una battuta di cattivo gusto, mi spiego meglio. Quando si realizza un sito acessibile ai non vedenti (ma in generali ai disabili) si ottimizza il codice: si eliminano le tabelle dove non necessarie per rappresentare i dati, si ordinano i testi in base alla lettura e non alla visualizzazione e poi si aggiungono i titoli ai link ed alle immagini, si creano delle form più corrette (anche per i normodotati), si riduce al minimo l'uso di javascript, si crea codice validabile, ecc... Google (ma in generale qualsiasi motori di ricerca) effettua una lettura del sito ripulito di tutta la grafica e quindi prediligerà una versione con i DIV che mantiene al centro dell'attenzione i contenuti e non l'impaginazione. Per fare un esempio, quale tra queste due righe di codice Google considerà un titolo?
a) <h1 class="titolo">pippo</h1>
b) ...<td><font size="1" face="Verdana">pippo</font></td>

Beh credo che la risposta sia ovvia ;-)
Allo stesso modo un non vedente potrà beneficiare della prima sintassi perchè il sintetizzatore vocale alzerà il tono per far capire che sta leggendo un titolo.
 
Io credo che tutti noi dovremmo fare lo sforzo di realizzare siti web più corretti, cominciando dal tableless e non solo per sfizio ma per quesit motivi:

  • si risparmia banda e quindi sono più veloci da navigare
  • sono più facili da sviluppare (dopo averci preso la mano)
  • sono più facilmente accessibili ai disabili
  • sono meglio indicizzati dai motori di ricerca
  • è possibile cambiare grafica modificando quasi esclusivamente i CSS (vedere per credere csszengarden)

author: Alessandro Benedetti | posted @ Thursday, November 3, 2005 12:35 AM | Feedback (3)

iTextSharp è rinato


Poco tempo fa ho postato la prima parte di un articolo riguardante la creazione di documenti PDF da .NET. In quell'articolo ho elogiato la libreria iText.NET rispetto alla non più aggiornata iTextSharp (entrambi porting dell'ottima libreria Java iText).

Scopro però oggi (la notizia è del 15 giugno) che Paulo Soares, che è lo sviluppatore più attivo del progetto java iText, ha ripreso la riscrittura del porting in C# (iTextSharp) della libreria. Per chi non avesse letto l'articolo riassumo che l'unica differenza tra i 2 porting è che iText.NET è scritta in J# e quindi implica che il J# framework debba essere installato, invece iTextSharp in C#.

Non ho ancora testato questa nuova versione, che promette di scalzare iText.NET dall'elenco delle mie librerie opensource preferite, ma lo farò in giornata e successivamente vi farò sapere.

author: Alessandro Benedetti | posted @ Monday, June 27, 2005 2:21 PM | Feedback (18)