Saturday, October 26, 2013

Recensione di RegexBuddy

Nella carriera di un ogni programmatore capita almeno una volta di doversi scontrare con un problema che richiede l’utilizzo delle regular expression.
Personalmente amo particolarmente le regex e trovo stimolante risolvere problemi che ne richiedono l’uso, al pari della risoluzione di un buon sudoku :)

Se avete cercato qualche volta un disperato aiuto su Google oppure se utilizzate le regex di frequente, vi sarà probabilmente capitato di visitare l’ottimo sito http://www.regular-expressions.info/ dove si possono trovare una marea di informazioni, guide ed esempi anche specifici per linguaggio di programmazione.


Proprio dall’autore di questo sito viene il programma oggetto di questa recensione: RegexBuddy.
Il programma è a pagamento e il costo per una singola licenza è di circa 30 € (sono disponibili sconti per l’acquisto di licenze multiple).

Aprendo per la prima volta il programma, l’interfaccia iniziale risulterà abbastanza complessa, ricca di funzionalità e non molto intuitiva, ma dopo qualche utilizzo comincerete a sentirvi a vostro agio.


Nell’area in alto a sinistra è possibile scrivere la propria regex con un piccolo editor dotato di syntax highlighting e inserimento guidato dei caratteri (premendo il tasto destro del mouse).
Per la creazione della regex è possibile scegliere tra più di 30 “flavor” diversi a seconda del linguaggio di programmazione che si sta utilizzando (es. C#, Java o Ruby) e selezionare le classiche impostazioni per le maiuscole e minuscole, il match multilinea ecc…
I tasti Copy e Paste sono molto avanzati e permettono di copiare e incollare stringhe diverse a seconda della codifica del linguaggio di programmazione; selezionando ad esempio da Visual Studio la stringa "\\w^[0-9]{3}$", è possibile incollarla già decodificata con Paste -> Paste Regex from a C# String e verrà quindi inserita come \w^[0-9]{3}$.
Oltre alla funzionalità di match è chiaramente diponibile anche il replace per effettuare sostituzioni e lo split per dividere la stringa di prova in chunk.

Durante la scrittura si aggiornerà in tempo reale l’area Create in basso, dove è possibile vedere la scomposizione in token di tutte le parti che compongono la regex. Il grafico è molto utile per chi è alle prime armi e sta cercando di capire cosa sta succedendo oppure in caso di espressioni particolarmente lunghe e complicate. Ogni token viene infatti spiegato dettagliatamente e si ha una visuale gerarchica che scompone la regex.


Nell’area Test è possibile inserire il testo di prova e vedere gli eventuali match o gruppi di cattura premendo il tasto List All. È anche possibile inserire il testo specificando l’indirizzo di un sito web oppure utilizzare quelli della sezione Library (esaminata più avanti).
Premendo il tasto Debug si aprirà la schermata di debug che permette di vedere tutti i passi che vengono eseguiti dall’interprete per effettuare il match di un’espressione regolare.




La tab Library è davvero uno dei fiori all’occhiello del programma e contiene decine e decine di regular expression di uso comune già pronte, tutte comprensive di spiegazione e testi di prova (indirizzi e-mail, carte di credito, tag HTML ecc…). È anche possibile arricchire questa libreria inserendo le proprie regex “preferite”.


Nella sezione Use è possibile creare parti di codice già pronte per oltre 30 linguaggi di programmazione diversi da usare per il match oppure il replace. Per convertire una regex da un linguaggio a un altro è invece possibile utilizzare la tab Convert.


Infine come bonus è incluso anche un potente strumento di ricerca simile al comando grep presente nelle shell Unix. Per usarlo basta selezionare la cartella in cui si vuole cercare, un’eventuale filtro sul nome e il programma cercherà (o eventualmente sostituirà) le occorrenze della nostra regex su file system.


Come avrete capito dalla recensione più che positiva mi sento proprio di consigliare questo software, anche considerato il suo costo più che ragionevole.
Corredate il tutto con un help offline completo che attinge e integra i contenuti del sito e l’acquisto diventa automaticamente molto interessante per chi lavora con le regex 5-10 volte l’anno, quasi obbligato se invece vi imbattete spesso in questo genere di problemi.

Pro
  • Tonnellate di funzionalità interessanti
  • Inserimento "guidato" di classi e caratteri
  • Libreria piena di regex già pronte
  • Help offline completo

Contro
  • Ottimo prezzo
  • Interfaccia un po' affollata e non molto intuitiva
  • Alcuni "freeze" (in particolare cambiando il layout delle finestre)

Tuesday, April 9, 2013

Returning an HTTP 403 Forbidden error with ASP.NET MVC

Sometimes it can be useful, in case of error, to return a custom error message to the user along with the HTTP 403 (Forbidden) status code.
This usually indicates that the access to the requested resource is denied for some reason and the server cannot proceed. Unlike the 401 Unauthorized status, which means an unauthorized access, correct credentials will not allow you to view the page.

To handle this scenario in ASP.NET MVC we can create a custom helper which must meet the following conditions:
  • It must be easy and straightforward to use
  • It must return a 403 status code along with the Forbidden status
  • It must not perform a redirect but the page URL should stay the same
  • It must display a custom view to the user
My HttpForbiddenResult class inherits from the HttpStatusCodeResult class which already exists in ASP.NET MVC. In this way, the framework will automatically set the status code and the description. The complete code of the class is the following:

public class HttpForbiddenResult : HttpStatusCodeResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        base.ExecuteResult(context);

        // creates the ViewResult adding ViewData and TempData parameters
        ViewResult result = new ViewResult
        {
            ViewName = "AccessDenied",
            ViewData = context.Controller.ViewData,
            TempData = context.Controller.TempData
        };

        result.ExecuteResult(context);
    }

    // calls the base constructor with 403 status code
    public HttpForbiddenResult()
        : base(HttpStatusCode.Forbidden, "Forbidden")
    {
    }
}

I have also created a view called AccessDenied within the Shared folder, which contains a custom message for the users who will view the page:

@{
    ViewBag.Title = "Access Denied";
}

<h2>Access Denied</h2>

<p>Sorry, the access to this page is denied.</p>

In order to use the helper you need just the following lines of code:

public class HomeController : Controller
{
    public ActionResult DoSomething(string taskName)
    {
        // access denied if taskName is empty
        if (string.IsNullOrEmpty(taskName))
        return new HttpForbiddenResult();

        return View();
    }
}

If you visit the URL for the previous controller without the taskName parameter, you will see the following result:


Of course, with little modifications you can create a custom helper for all the HTTP error codes!

Restituire un errore HTTP 403 Forbidden con ASP.NET MVC

Alle volte può essere utile, in caso di errore, restituire all'utente un messaggio personalizzato insieme al codice HTTP 403 (Forbidden).
Questo indica solitamente che l'accesso alla risorsa richiesta è vietato per qualche ragione e il server non può procedere altrimenti. Diversamente dallo stato 401 Unauthorized, che indica un accesso non autorizzato, le credenziali non servono e non permetterebbero comunque di visualizzare la pagina.

Per gestire questa situazione in ASP.NET MVC possiamo creare un helper personalizzato che deve soddisfare le seguenti condizioni:
  • Deve essere facile e immediato da utilizzare
  • Deve restituire al browser il codice di errore 403 insieme allo stato Forbidden
  • Non deve effettuare un redirect ma la pagina deve rimanere la stessa
  • Deve mostrare all'utente una view personalizzata
Ho creato la classe HttpForbiddenResult ereditando dalla classe HttpStatusCodeResult già esistente in ASP.NET MVC. In questo modo il framework si occuperà automaticamente di impostare il codice di errore e la descrizione. Il codice completo della classe è il seguente:

public class HttpForbiddenResult : HttpStatusCodeResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        base.ExecuteResult(context);

        // crea il ViewResult impostando anche i parametri ViewData e TempData
        ViewResult result = new ViewResult
        {
            ViewName = "AccessDenied",
            ViewData = context.Controller.ViewData,
            TempData = context.Controller.TempData
        };

        result.ExecuteResult(context);
    }

    // richiama il costruttore base con il codice 403
    public HttpForbiddenResult()
        : base(HttpStatusCode.Forbidden, "Forbidden")
    {
    }
}

Ho creato quindi una view chiamata AccessDenied all'interno della cartella Shared, contenente un messaggio per gli utenti che visualizzeranno la pagina di errore:

@{
    ViewBag.Title = "Access Denied";
}

<h2>Access Denied</h2>

<p>Sorry, the access to this page is denied.</p>

Per utilizzare l'helper appena creato saranno sufficienti le seguenti linee di codice:

public class HomeController : Controller
{
    public ActionResult DoSomething(string taskName)
    {
        // accesso negato quando il parametro taskName è vuoto
        if (string.IsNullOrEmpty(taskName))
        return new HttpForbiddenResult();

        return View();
    }
}

Andando quindi con il browser alla URL del controller precedente senza il parametro taskName il risultato sarà questo:


Chiaramente con le opportune modifiche è possibile realizzare un helper per tutti i codici di errore HTTP che ci interessano!

Tuesday, April 2, 2013

Debugging into ASP.NET MVC 4 source code

Introduction


As you may know, ASP.NET MVC 4 it's an open source project and the code is freely available on CodePlex.
You can download and explore it to see how they have implemented some of the classes we are interested in or just to understand a little more about the entire framework.
In my case, for example, it has been very useful to see how the HandleError attribute is automatically serving the Error view in case of exception.
Sometimes it could be more useful to directly enter into the source code at runtime and see which operations are performed, watch or change the values of the variables and jump from one part of the code to another.
Today I will show then how to debug a web application into the source code of ASP.NET MVC 4 without the need to download and compile the whole project from CodePlex.
In order to do this we will use the SymbolSource server, which publicly provides the PDB symbols required to perform remote debugging in Visual Studio.
The PDB files are automatically created when the source code is compiled in debug mode and they contain information used to debug the code at runtime. These files are not usually included when we download the DLL files for an external library.
To obtain the PDB files of an external library (ASP.NET MVC 4 in this case) there are two ways:

  • Download and compile the source code of the library (if available)
  • Use SymbolSource and remote debugging

If you want to learn more about the PDB files you can read this this post.

Visual Studio Configuration


First you need to configure Visual Studio so that it can connect to the SymbolSource server and download the PDB files.
To do that, follow these steps:

  • Go to Tools -> Options -> Debugger -> General
  • Uncheck the option Enable Just My Code (Managed Only)
  • Uncheck the option Enable. NET Framework source stepping (this is optional)
  • Check the option Enable source server support
  • Uncheck the option Require source files to exactly match the original version

The options screen should look like this:


Now you must set the servers from which to download the PDB files:

  • Go to Tools -> Options -> Debugger -> Symbols
  • You should see only one item: Microsoft Symbol Servers
  • Click the exlamation mark icon to the right and add the following addresses:
    • http://referencesource.microsoft.com/symbols
    • http://srv.symbolsource.org/pdb/Public
    • http://srv.symbolsource.org/pdb/MyGet
    • http://msdl.microsoft.com/download/symbols
  • If needed, select a folder for the cache: in my case it is set to C:\Users\Luca\AppData\Local\Temp\SymbolCache

The screen should look like this:



Finally you need to specify the DLL files you want to load, otherwise Visual Studio will load all the modules and debugging becomes very slow.
In this case we are only interested in ASP.NET MVC, so click on Only specified modules, then click on Specify modules and insert System.Web.Mvc.dll:


Press OK and exit from the options screens.
Now we're almost done and we just need to open or create a new ASP.NET MVC 4 application, place a breakpoint and start debugging with Debug -> Start Debugging.
If everything went well, in the Call Stack window you should see the ASP.NET MVC modules in black:


Now when you press Debug -> Step Into on an ASP.NET MVC statement you will enter directly into the source code of the framework, with a lot of comments too!


Help me! It doesn't work!


If the modules in the Call Stack window are still appearing in gray and you can't enter into the source code of the framework, you can try the following solutions:

Make sure you followed all the steps and you have checked all the required options. In particular, make sure that you have removed the check from Require source files to exactly match the original version and entered all the SymbolSource addresses in the right order.

Try uninstalling and reinstalling the ASP.NET MVC 4 NuGet package (you don't have to reinstall the program, just the package!).

If you still cannot run the debugger, there is a final solution that worked fine for me.

It appears that in some cases the DLL files in the GAC (Global Assembly Cache) prevent Visual Studio from loading the PDB files from the remote server.

Reinstalling ASP.NET MVC did not help in my case (I just lost a lot of time) but I solved this problem in the following way:

  • Go to C:\Windows\Microsoft.NET\assembly\GAC_MSIL
  • Find the folder called System.Web.Mvc
  • Rename it, for example _System.Web.Mvc

In this way, the DLL files for ASP.NET MVC will not be searched in the GAC allowing you to connect to the SymbolSource server and download the PDB files.


Welcome to my blog

Welcome to my blog dedicated to two of my favorite passions: programming and cooking.

It's a rather strange combination and it will not be easy to write quality content for both categories.

The recipes won't be complex but fairly quick and easy to make! The other posts will span from .NET programming to Ruby on Rails, from Windows to Xubuntu.

About me, I'm a web programmer with a big passion for computing. I am currently working in a company as a .NET developer but in my free time I like to explore new programming languages ​​and technologies.

Let's begin this little adventure!


Hello English World!

Poichè il mondo dell'informatica è prevalentemente orientato alla lingua inglese, ho deciso di tradurre i post inseriti fino a oggi, aggiungendo d'ora in avanti la traduzione per ogni articolo che inserirò.

Happy reading :)

Sunday, February 3, 2013

Modenautobus: l'applicazione che aiuta a spostarsi a Modena

È con piacere che annuncio l'uscita della prima versione di Modenautobus, un'applicazione web gratuita che permette di consultare in maniera facile e veloce gli orari degli autobus urbani di Modena.
L'applicazione è nata con l'esigenza di trovare e visualizzare comodamente le corse degli autobus anche quando si è fuori casa e si hanno a disposizione solo un tablet o un cellulare. La consultazione è semplificata rispetto alle più complesse tabelle presenti sul sito della SETA.
Per quanto riguarda i dettagli tecnici, l'applicazione è realizzata in ASP.NET MVC 4 con jQuery Mobile e Knockout JS come librerie per la parte client. Per ora l'applicazione è esclusivamente in versione web, ma prossimamente potrebbe essere inserita nei vari store con l'utilizzo di PhoneGap.
Chiaramente l'applicazione è in uno stadio iniziale e potrà essere ampliata e migliorata sulla base delle esigenze e dei feedback degli utenti che vorranno utilizzarla.
Per maggiori informazioni potete consultare il sito ufficiale www.modenautobus.it.

Thursday, January 31, 2013

Debug nel codice sorgente di ASP.NET MVC 4

Introduzione


Come molti di voi sapranno, ASP.NET MVC 4 è open source e il suo codice sorgente è liberamente disponibile su CodePlex.
Scaricarlo e analizzarlo e può risultare indubbiamente utile per guardare come sono state implementate alcune delle classi che ci interessano o anche solo per capire qualcosa di più sulla struttura del framework.
Nel mio caso, ad esempio, è risultato molto utile osservare direttamente il codice per vedere come l’attributo HandleError restituisse automaticamente la view Error in caso di errore.
Alle volte però potrebbe risultare ancora più utile entrare direttamente nel sorgente a runtime per vedere quali operazioni vengono eseguite, guardare o modificare i valori delle variabili e saltare da una parte all’altra del codice.
Oggi vi mostrerò quindi come effettuare il debug di un’applicazione web all’interno del codice sorgente di ASP.NET MVC 4 senza bisogno di scaricare e compilare tutto il progetto da CodePlex.
Per fare questo utilizzeremo i server di SymbolSource che mette a disposizione pubblicamente i simboli PDB per effettuare il debug remoto con Visual Studio.
I file PDB vengono creati automaticamente quando il codice viene compilato in modalità debug e contengono proprio le informazioni necessarie per effettuare il debug del codice a runtime. Solitamente questi file non vengono inclusi quando scarichiamo le DLL di una libreria esterna; quindi per avere i file PDB di una libreria esterna (in questo caso ASP.NET MVC 4) esistono due modi:

  • Scaricare e compilare il codice sorgente della libreria (se disponibile)
  • Utilizzare SymbolSource

Se volete saperne di più sui file PDB potete leggere questo post.

Configurazione di Visual Studio


Per cominciare è necessario configurare Visual Studio affinchè possa collegarsi al server da cui scaricare i file PDB.
Per farlo bisogna seguire i seguenti passi:

  • Andare in Tools -> Options -> Debugger -> General
  • Togliere la spunta da Enable Just My Code (Managed Only)
  • Togliere la spunta (se presente) da Enable .NET Framework source stepping
  • Mettere la spunta a Enable source server support
  • Togliere la spunta da Require source files to exactly match the original version

La schermata delle opzioni dovrebbe apparire così:


Adesso è necessario impostare i server da cui scaricare i file PDB:

  • Andare in Tools -> Options -> Debugger -> Symbols
  • Al momento dovrebbe essere presente solo la voce Microsoft Symbol Servers
  • Fare clic sull’icona con a destra del punto esclamativo per aggiungere i seguenti indirizzi:
    • http://referencesource.microsoft.com/symbols
    • http://srv.symbolsource.org/pdb/Public
    • http://srv.symbolsource.org/pdb/MyGet
    • http://msdl.microsoft.com/download/symbols
  • Se non presente, selezionare una cartella per la cache: nel mio caso è impostata su C:\Users\Luca\AppData\Local\Temp\SymbolCache

La schermata dovrebbe apparire più o meno così:


Per ultima cosa è necessario specificare le DLL che si vogliono caricare, altrimenti verranno caricati tutti i moduli e il debug diventerà lentissimo.
In questo caso siamo interessati soltanto al debug di ASP.NET MVC, perciò spuntiamo l’opzione Only specified modules, facciamo clic su Specify modules e inseriamo System.Web.Mvc.dll:


Premiamo OK e usciamo dalle opzioni.
A questo punto abbiamo quasi finito e non ci resta che aprire o creare un’applicazione ASP.NET MVC 4, posizionare un breakpoint e avviare il debug con Debug -> Start Debugging.
Se tutto quanto è andato per il meglio, nella finestra Call Stack dovreste vedere i moduli di ASP.NET MVC caricati (in nero e non in grigio chiaro):


Adesso andando in Debug -> Step Into su un’istruzione di ASP.NET MVC entreremo direttamente nel codice sorgente del framework, con tanto di commenti al codice!


Aiuto, non funziona!


Se per caso durante il debug i moduli appaiono ancora in grigio chiaro e non riuscite a entrare nel sorgente del framework, potete provare diverse soluzioni:

Controllate di aver eseguito tutti i passaggi e di aver spuntato tutte le suddette opzioni. In particolare controllate di aver tolto la spunta a Require source files to exactly match the original version e di aver inserito gli indirizzi di SymbolSource nell’ordine giusto.

Provate a disinstallare e reinstallare con NuGet il package di ASP.NET MVC 4 (mi raccomando, non dovete disinstallare il programma!).

Se ancora non riuscite a far funzionare il debugger, c’è un ultima soluzione che ha funzionato egregiamente su uno dei miei computer.
Sembra infatti che in alcuni casi le DLL presenti nella GAC (Global Assembly Cache) impediscano a Visual Studio di caricare i PDB dal server remoto di SymbolSource.
Reinstallare completamente ASP.NET MVC purtroppo non è servito nel mio caso (ho solo perso molto tempo) ma ho risolto nel seguente modo:

  • Andare in C:\Windows\Microsoft.NET\assembly\GAC_MSIL
  • Trovare la cartella System.Web.Mvc
  • Rinominarla con un altro nome, ad esempio _System.Web.Mvc

In questo modo la DLL non verrà cercata nella GAC permettendovi di collegarvi al server di SymbolSource per scaricare i file PDB.


Benvenuti nel mio blog

Benvenuti in questo blog dedicato a due delle mie passioni preferite: la programmazione e la cucina.

In effetti è un abbinamento alquanto strano e non sarà facile cercare di inserire contenuti di qualità per entrambi.

Diciamo che non pubblicherò ricette molto sofisticate ma saranno abbastanza facili e veloci da realizzare! I post di informatica invece spazieranno dalla programmazione .NET a Ruby on Rails, da Windows a Xubuntu.

Per quanto riguarda me, sono un programmatore web con una grande passione per l'informatica. Attualmente lavoro in un'azienda come sviluppatore .NET ma nel tempo libero mi piace esplorare sempre nuovi linguaggi e tecnologie.

Diamo inizio a questa piccola avventura!