Libreria per parsing codice HTML

by Andrea 10 November 2010 03:18

Può capitare di dover eseguire il parsing di documenti/pagine HTML per svariati motivi, che vanno dalla semplice verifica della presenza o meno di un determinato tag (Web scanners), fino ad arrivare a recuperare una porzione di un documento/pagina HTML (Web scrapers).

Un pò di tempo fa, navigando in rete,  sono venuto a conoscenza del progetto Html Agility Pack che trovate a questo link: http://htmlagilitypack.codeplex.com/

This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT (you actually don't HAVE to understand XPATH nor XSLT to use it, don't worry...). It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. The object model is very similar to what proposes System.Xml, but for HTML documents (or streams).

Per la gioia di molti (e mia), questa libreria supporta Linq To Object, il che permette di interagire con il documento HTML con estrema facilità e velocità, e senza dover necessariamente conoscere le query XPath.
La libreria lavora anche con codice HTML malformed, segnalando gli errori presenti all'interno del documento/pagina e permettendoci con facilità di intervenire per correggerli.
Altra nota positiva si nota dalla pagina del codice sorgente del progetto su codeplex, che dimostra che il progetto è ancora vivo, e in continuo aggiornamento.

Buon parsing a tutti Winking smile

Tags: ,

ASP .NET

Codice e slide della sessione Ottimizzazione di un'applicazione ASP.NET

by Andrea 10 November 2010 01:02

Ecco disponibili al download, il codice e le slide del XeDotNet community meeting che ho tenuto il 04 Novembre 2010 dal titolo Ottimizzazione di un'applicazione ASP.NET.

  • Codice: http://blog.dottor.net/files/xedotnet/XeDotNet.Dottor.AspNetOptimization_code.zip
  • Slide: http://blog.dottor.net/files/xedotnet/XeDotNet.Dottor.AspNetOptimization_slide.zip

    Nelle applicazioni di tutti i giorni, spesso ci scontriamo con problemi di performance, oppure siamo alla ricerca di un miglioramento che possano rendere più reattiva la nostra applicazione. In questa sessione vedremo come grazie all'utilizzo della cache, session, ed altri strumenti, possiamo ottimizzare il nostro sito fornendo un feedback migliore all'utente. Con esempi pratici, vedremo il beneficio di come semplici accortezze possano migliorare notevolmente un'applicazione. Cache, session, IIS 7, routing...saranno i principali argomenti trattati.

  • Tags: , , ,

    ASP .NET | .NET | XeDotNet

    Due giorni pieni di emozioni

    by Andrea 01 October 2010 08:25

    Ebbene si…sono e saranno due giorni pieni di emozioni…

    MVP_logoOggi, 1 Ottobre 2010 ho ricevuto la mail che mi notifica di aver ricevuto il premio Microsoft MVP Award per l’anno 2010 per la categoria ASP.NET!! E’ il terzo anno che ricevo questo premio, ed ogni volta le emozioni sono sempre uniche, come la prima volta…
    Un grazie va a tutti voi, che siete presenti nei vari meeting che tengo, a voi che leggete i miei post, e a tutti quelli che chiedendomi qualche consiglio/aiuto…sappiate che è anche grazie a voi che coltivo questa passione verso il mondo .NET, verso le community e specialmente verso la condivisione di quelle (poche cose) che so.
    Un grazie va anche a Alead, che riesce a portare/guidare il programma MVP come pochi saprebbero fare.
    Infine, un grazie va ai compagni di merende e di gioco, Davide Vernole, Andrea Boschin e Davide Senatore…che da diversi anni mi stanno aiutando a crescere e a migliorare sempre più. GRAZIE DAVVERO!!

     

    WeddingRingDomani, 2 Ottobre 2010 alle ore 11.00, sarò di fronte all’altare a fare un passo importante…mi sposerò con Maria Elena, e da domani inizierò una nuova ed importante fase della mia vita.

    Se non mi vedete bazziccare nei forum, o scrivere nuovi post in questo blog, o non sarò presente al prossimo community meeting di XeDotNet... sappiate che starò godendomi il viaggio di nozze in qualche isoletta sperduta dell’indonesia... al caldo... sotto il sole...
    se volete venirmi a cercare... Bali, Gili.

    E con questo post, vi saluto e ringrazio tutti...è giunta l’ora di mettere via il pc...
    torneremo a risentirci dopo il 20 di ottobre!

    Technorati Tags: ,,

    Tags:

    ASP .NET | .NET | Generale | Microsoft | Pensieri

    Fix per ASP.NET Security Vulnerability

    by Andrea 28 September 2010 00:15

    In un post precendente (Importante: ASP.NET Security Vulnerability) vi avevo segnalato di una grave vulnerabilità presente nelle applicazioni ASP.NET.

    Oggi Scott Guthrie ha pubblicato il post ASP.NET Security Update Shipping Tuesday, segnalando che a partire da oggi (Tuesday, September 28, 2010 at 1:00 PM PDT) sarà disponibile un update ufficiale per risolvere la vulnerabilità riscontrata. Tale fix arriverà anche tramite Windows Update.

    [UPDATE 29.09.2010]
    Trovate i link a tutti ai download per le varie versioni del .NET Framework in questo post:
    ASP.NET Security Update Now Available

    Tags: ,

    ASP .NET | .NET | Microsoft

    Importante: ASP.NET Security Vulnerability

    by Andrea 20 September 2010 01:58

    E' stata riscontrata una vulnerabilità in ASP.NET che, se utilizzata, riuscirebbe a far scaricare qualsiasi file presente nell'applicazione, compreso il Web.config, e quindi permetterebbe ad un malintenzionato di venire in possesso di informazioni sensibili.

    La vulnerabilità è stata riscontrata anche da Microsoft il 17 settembre 2010, che è già al lavoro per una possibile patch. Microsoft Security Advisory (2416728)

    Al momento, è possibile applicare un workaround per tamponare il problema, in attesa della patch.
    Le modifiche da eseguire, e maggiori informazioni a riguardo, le potete trovate nel post
    "Important: ASP.NET Security Vulnerability", presente nel blog di Scott Guthrie.

    Il workaround consiste nell'abilitare la sezione customErrors nel web.config e far puntare ogni errore che avvenga ad una specifica pagina (di errore) all'interno dell'applicazione.
    E' importante che gli errori puntino alla stessa pagina di errore, e che quindi venga ritornato sempre lo stesso contenuto e lo stesso codice di errore per ogni errore che avvenga.

    E' importante che vengano applicate le modifiche.

    Tags: ,

    ASP .NET | .NET | Microsoft

    Lazy load delle immagini

    by Andrea 16 September 2010 05:01

    Per velocizzare il caricamente delle pagine del mio blog, ho modificato il template aggiungendo la funzionalità di Lazy Load delle immagini presenti nei post.

    Mi è venuto in aiuto il Lazy Load plugin per jQuery.

    Questo plugin permette di far caricare le immagini solamente quando rientrano nella parte renderizzata del browser, evitando quindi di eseguire il download di tutte le immagini al caricamento della pagina. Evitando di scaricare le immagini nn presenti nell'area visibile della pagina, si velocizza (e di molto) il caricamento, in quanto vengono notevolmente ridotti i byte trasmessi.

    Le modifiche che ho dovuto fare alla Master-Page del mio tema sono le seguenti:

    • Aggiunta della libreria jQuery dalla CDN di google, e dello script del Lazy Load plugin, e il tutto in versione ridotta:
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
    <script src="/scripts/jQuery/jquery.lazyload.mini.js" type="text/javascript"></script>
     
    • Aggiunta della funzione per attivare il Lazy Load delle sole immagini incluse nei post, agendo sul selettore jQuery, in modo da applicare questo comportamento alle immagini contenute nel div .text:
    <script type="text/javascript">
      $(function() {
        $(".text img").lazyload({ 
          placeholder : "images/blank.gif",
          threshold : 200 });
      });
    </script> 

    Nel mio blog, come placeholder ho fatto uso di una gif trasparente dalle dimensioni di 1px per 1px, in modo da evitare la fastidiosa X rossa durante l'attesa del caricamento dell'immagine.

    Tutte le informazioni del plugin le trovate a questo link: Lazy Load Plugin for jQuery

    Tags: , ,

    ASP .NET | Internet | Sito

    Codice e slide della sessione Sfruttare al meglio ASP.NET WebForm ed ASP.NET MVC

    by Andrea 15 September 2010 03:30

    Ecco disponibili al download, il codice e le slide del XeDotNet community meeting che ho tenuto il 10 settembre 2010 dal titolo "Sfruttare al meglio ASP.NET WebForm ed ASP.NET MVC".

  • Codice: http://blog.dottor.net/files/xedotnet/XeDotNet.Dottor.MVC-WebForm_code.zip
  • Slide: http://blog.dottor.net/files/xedotnet/XeDotNet.Dottor.MVC-WebForm_slide.zip

    Dopo l'introduzione di ASP.NET MVC all'interno del .NET framework, è utile fare un pò di chiarezza, in modo da capire quando sia più efficace l'uso di ASP.NET MVC rispetto ad ASP.NET WebForm, e viceversa.
    In questa sessione andremo in dettaglio sulle potenzialità di entrambe le tecnologie per comprendere a pieno i casi d'utilizzo, ed i vantaggi che si possono ottenere da una corretta scelta.

  • Tags: , , ,

    ASP .NET | .NET | XeDotNet

    XeDotNet Community Meeting - Optimization Track

    by Andrea 10 September 2010 00:29

    Questa sera (10 settembre 2010) si terrà il community meeting Optimization Track. Come speaker ci seremo io e Davide Vernole e tratteremo rispettivamente:

    Sfruttare al meglio ASP.NET WebForm ed ASP.NET MVC
    Andrea Dottor - MVP Visual Developer ASP.NET

    Dopo l'introduzione di ASP.NET MVC all'interno del .NET framework, è utile fare un pò di chiarezza, in modo da capire quando sia più efficace l'uso di ASP.NET MVC rispetto ad ASP.NET WebForm, e viceversa.
    In questa sessione andremo in dettaglio sulle potenzialità di entrambe le tecnologie per comprendere a pieno i casi d'utilizzo, ed i vantaggi che si possono ottenere da una corretta scelta.

    WCF: Make it easy
    Davide Vernole - MVP Visual Studio ALM

    Le nostre architetture basano molte delle loro funzionalità su servizi WCF. La curva di apprendimento di questo tipo di servizi, la loro configurazione e la loro proliferazione sono spesso motivo di preoccupazioni per chi deve gestire progetti di questo tipo. Le domande che spesso ci poniamo sono: è possibile ridurre la curva di apprendimento? Si può semplificare o eliminare la parte di configurazione? Come è possibile usare architetture basate su servizi tenendo sotto controllo il numero dei servizi stessi? Con questa sessione risponderemo a tutte queste domande con una soluzione che introduce modularità ed elevata riutilizzabilità a un servizio WCF. Dimostreremo come sia semplice realizzare un servizio modulare, altamente riutilizzabile in grado di ridurre il numero dei servizi necessari alla nostra architettura  in grado di ridurre la complessità di implementazione di architetture SOA. Se volete toccare con mano una soluzione che funziona già in produzione, non mancate di partecipare a questa sessione.

    Per l'iscrizione: http://www.xedotnet.org/nextmeetings.aspx

    L'obiettivo della mia sessione sarà di chiarire un pò il ruolo di ASP.NET MVC e ASP.NET WebForm, cercando di far capire quando sia più corretto l'utilizzo dell'uno o dell'altro. Ultimamente mi sento spesso chiedere "devo iniziare un nuovo progetto, lo faccio con ASP.NET MVC?", e questa sera proveremo a capire quale sia la risposta corretta a questa domanda.

    Tags: , , , ,

    ASP .NET | XeDotNet

    ASP.NET 4.0 e cambiamenti nella Code Access Security

    by Andrea 08 June 2010 06:17

    In ASP.NET 4.0 sono stati apportati dei cambiamenti a livello di Code Access Security (CAS ).
    Questi cambiamenti sono necessari ad apportare maggiore sicurezza e controllo nell'esecuzione delle applicazioni. Di default, la configurazione della CAS di ASP.NET 4.0 è più restrittiva rispetto alle versioni precedenti, e questo può essere causa di eccezzioni nel caso applicazioni esistenti (che utilizzano versioni precedenti del framework) vengano pubblicate su hosting con la versione 4.0 del framework.

    Nel mio caso mi sono ritrovato con la seguente eccezzione:

    System.TypeInitializationException:
    The type initializer for 'PingFM.PingFMApi' threw an exception.
    ---> System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
    at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
    at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark) at System.Security.CodeAccessPermission.Demand()
    at System.Reflection.RuntimeAssembly.VerifyCodeBaseDiscovery(String codeBase)
    at System.Reflection.RuntimeAssembly.GetName(Boolean copiedName)
    at System.Reflection.Assembly.GetName()
    at PingFM.PingFMApi..cctor()
    --- End of inner exception stack trace ---
    at BlogEngineToPingFm.Ping(Post item, Uri itemUrl, ExtensionSettings settings)

    Una possibile soluzione è modificare la configurazione dell'applicazione, in modo che la CAS abbia lo stesso comportemento delle precedenti versioni di ASP.NET.
    Per fare ciò, nel file web.config sarà necessario valorizzare l'attributo legacyCasModel a True, presente nell'elemento trust. (Prestate attenzione al livello di trust che andate ad utilizzare)

    <system.web>
        <trust level="Medium" legacyCasModel="true" />
    </system.web>

    Per maggiori informazioni sull'argomento, cosiglio la lettura dei seguenti link:
    Code Access Security in ASP.NET 4 Applications 
    What is New in ASP.NET 4.0 Code Access Security
    Changes to the ASP.NET Code Access Security (CAS) Implementation

    Tags:

    .NET | ASP .NET

    Community Tour 2010 - codice e slide sessione ASP.NET 4.0

    by Andrea 20 April 2010 02:16

    Ecco disponibili al download codice e slide della sessione What's new in ASP.NET 4.0 che ho tenuto al Visual Studio 2010 Community Launch che si è tenuto il 15 Aprile 2010 a Marghera Venezia.

  • Codice: http://files.dottor.net/xedotnet/CommunityTour2010.Dottor.ASPNET40_code.zip
  • Slide: http://files.dottor.net/xedotnet/CommunityTour2010.Dottor.ASPNET40_slide.zip
  • Il Microsoft .NET Framework è in continua evoluzione ed ha raggiunto la versione 4.0 accompagnato da moltissime novità. In questa sessione andremo in dettaglio per ciò che riguarda l'ultima versione di ASP.NET 4.0, ponendo il focus sulle nuove funzionalità e sui cambiamenti più importanti. Con esempi pratici vedremo come questa nuova versione agevolerà lo sviluppatore nel realizzare le proprie applicazioni. Maggiore controllo del codice prodotto, SEO, nuovi template project, Script Loader, Client Data Access e migliorie ai controlli esistenti, sono solo alcuni degli argomenti che verranno trattati.

    Tags: , ,

    .NET | ASP .NET | Microsoft | XeDotNet