XeDotNet community meeting: Programming DotNetNuke

by Andrea 18 May 2011 01:37

Venerdì 20/05/2011 si terrà presso il Novotel di Mestre un community meeting che parlerà totalmente di DotNetNuke. In compagnia di Davide Senatore, terremo 2 sessioni che non si limiteranno a introdurre questo CMS Open-Source, ma bensì faremo vedere le potenzialità che offre, ed i vantaggi che noi sviluppatori possiamo trarre dall'utilizzo di questa piattaforma.

La mia sessione: Sviluppare con DotNetNuke. Un framework sul framework

Sviluppare applicazioni, occupandosi delle sole funzionalità che vuole il cliente, senza doversi occupare anche del codice di infrastruttura può sembrare un'utopia, ma non è così. In questa sessione vedremo come DotNetNuke, che è un CMS (content management system) open source, permetta allo sviluppatore tutto ciò. DotNetNuke può essere visto come un framework sul framework, in grado di fornire allo sviluppatore funzionalità avanzate che permettono di aumentare la produttiva e al contempo di ridurne i tempi di sviluppo.

La sessione di Davide: Fast and Furious DotNetNuke: Web App Development at the speed of light.

DotNetNuke: semplicemente il CMS più diffuso al mondo con più di 6.000.000 di download totali e 600.000 siti in produzione. In questa sessione vedremo come si possa affrontare la sfida di creare web applications utilizzando DNN come piattaforma di sviluppo. Valuteremo come creare moduli, come integrarli all'interno del CMS e come sfuttare le caratteristiche native della piattaforma a nostro vantaggio. Analizzeremo le nuove caratteristiche, l'integrazione con JQuery e Google Analytics, la personalizzabilità estrema e la produttività straordinaria che questa piattaforma mette a disposizione.

Vi aspettiamo numerosi!

Per registrarsi: http://www.xedotnet.org/Home/Meeting/20110520

Tags: , ,

ASP .NET | XeDotNet

Creare un modulo per Orchard

by Andrea 21 April 2011 04:59

Chi già conosce le Aree di ASP.NET MVC non dovrà imparare nulla di nuovo. Creare un modulo per Orchard infatti è la medesima cosa di creare un'Area in un progetto ASP.NET MVC.
(Walkthrough: Organizing an ASP.NET MVC Application using Areas)

Iniziamo utilizzando il tool da command-line Orchard.exe che troviamo nella bin del progetto, avendo precedentemente abilitato il modulo 'Code Generation'.
Modules_projectAll'interno della console digitiamo 'codegen module Dottor.Articles'
in modo da far creare ad Orchard un progetto contenente tutta la struttura per un nuovo modulo, chiamato 'Dottor.Articles', e verrà creato all'interno della cartella Modules.

La struttura del progetto appena creato è molto simile a quella di un'area di ASP.NET MVC. Le cartelle presenti di default hanno dei nomi ben parlanti:

  • Controllers: per i controller che utilizzeremo all'interno del modulo
  • Model: per il model, e la parte di interazione con la base dati
  • Scripts: file javascript specifici del modulo da realizzare
  • Styles: fogli di stile
  • View: conterrà le View, cioè la parte di UI del modulo corrente

Pre prima cosa, personalizziamo il file Module.txt, modificandolo con le informazioni specifiche nel nuovo modulo.

Name: Dottor.Articles
AntiForgery: enabled
Author: Andrea Dottor
Website: http://www.dottor.net
Version: 1.0
OrchardVersion: 1.0
Description: Modulo per la visualizzazione di articoli
Features:
    Dottor.Articles:
        Description: Modulo per la visualizzazione di articoli

Avendo detto che il modulo è un'Area di ASP.NET MVC, lo andiamo subito a specializzare andando a specificare le eventuali regole di routing, creando un file Routes.cs nella root del nostro modulo.
Questo file conterrà una classe Routes che implementerà Orchard.Mvc.Routes.IRouteProvider. In questa classe andremo a specificare le regole di routing per indirizzare gli url verso le corrette action dei nostri controller.
Nel caso di questo modulo, avremmo solamente due url possibili:

  • /Articles -> che visualizzerà la lista di articoli
  • /Articles/{id}/{slug} -> che visualizzerà un preciso articolo

la classe sarà quindi la seguente:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Orchard.Mvc.Routes;
using System.Web.Routing;
using System.Web.Mvc;
 
namespace Dottor.Articles
{
    public class Routes : IRouteProvider
    {
        public void GetRoutes(ICollection<RouteDescriptor> routes)
        {
            foreach (var routeDescriptor in GetRoutes())
                routes.Add(routeDescriptor);
        }
 
        public IEnumerable<RouteDescriptor> GetRoutes()
        {
            return new[] {
                new RouteDescriptor {
                    Priority = 5,
                    Route = new Route(
                        "Articles",
                        new RouteValueDictionary {
                            {"area", "Dottor.Articles"},
                            {"controller", "Home"},
                            {"action", "List"}
                        },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                            {"area", "Dottor.Articles"}
                        },
                        new MvcRouteHandler())
                },
                new RouteDescriptor {
                    Priority = 5,
                    Route = new Route(
                        "Articles/{id}/{slug}",
                        new RouteValueDictionary {
                            {"area", "Dottor.Articles"},
                            {"controller", "Home"},
                            {"action", "Details"}
                        },
                        new RouteValueDictionary{
                            {"id", "\\d+"}
                        },
                        new RouteValueDictionary {
                            {"area", "Dottor.Articles"}
                        },
                        new MvcRouteHandler())
                }
            };
        }
    }
}

Da questo punto in poi, nulla è diverso dalla normale programmazione ASP.NET MVC

  • Creare un controller HomeController.cs
    • Creare una action List() che ritorna una lista di articoli
    • Creare una action Details(int id, string slug) che ritorna il specifico articolo
  • Crare all'interno della cartella View, una cartella Home
    • Creare all'interno di Home una view List.cshtml che si occupa di renderizzare la lista di articoli, che avranno il link alla pagina di dettaglio
    • Creare all'interno di Home una view Details.cshtml che si occupa di renderizzare il singolo articolo

Modules_enableFinito lo sviluppo del modulo, dalla sezione Modules della dashoboard di Orchard sarà possibile abilitarlo.

Per accedere a questa nuova sezione/modulo, dovremmo (ma non è obbligatorio) creare una nuova voce di menù che ci permetta di accedere con facilità.
Quindi, dalla sezione Navigation della dashboard, aggiungiamo una nuova voce di menù, che abbia come url lo stesso impostato nelle regole di routing (/Articles).

Modules_navigation

Creata la voce di menù, saremo pronti a navigare utilizzando le funzionalità che il nuovo modulo metterà a disposizione.

Alcune considerazioni personali.
Lo sviluppo di un nuovo modulo ha una curva di apprendimento quasi pari a zero per una persona che già conosce ASP.NET MVC, e quindi direi che la cosa è del tutto positiva. Mentre, uno sviluppatore che conosca solo ASP.NET Web Form dovrà faticare un pò per entrare nell'ottica del nuovo pattern, e i tempi inizialmente si potranno dilungare, e anche di molto.

In questo esempio, ho recuperato la lista degli articoli da un database differente da quello utilizzato da Orchard, e quindi nulla di diverso da quello che viene fatto abitualmente.
Uno dei prossimi argomenti che vedremo, sarà il come utilizzare il database di Orchard per salvare tutte le informazioni del modulo, e avere quindi la possibilità di renderlo pubblico (e quindi utilizzabile in qualsiasi intallazione di Orchard).

Per approfondire l'argomento: http://www.orchardproject.net/docs/

Tags: , ,

ASP .NET | .NET | Microsoft

Creare child-theme in Orchard

by Andrea 20 April 2011 03:37

Uno dei vantaggi che ho trovato in Orchard, stà nella possibilità di creare dei child-theme, cioè temi che ereditano da un tema esistente. Questo è un grosso vantaggio in quanto permette di lasciare intatto il tema base, e lavorare nel nuovo tema andando a modificare solamente i file che differiscono.

Il metodo che più mi è piaciuto per realizzare child-theme è quello basato sulla Code Generation di Orchard (Command-Line Code Generation), che è un modulo che si trova nella gallery, e che possiamo tranquillamente utilizzare durante lo sviluppo di nuove funzionalità per questo CMS.

Ma vediamo cosa dobbiamo fare:

  • Abilitare il modulo 'Code Generation' dalla dashboard
  • Avviare l'applicativo Orchard.exe contenuto nella cartella bin del progetto Orchard
  • Nella console che si aprirà inserire la seguente riga:
    codegen theme TestTheme /BasedOn:TheThemeMachine /CreateProject:true

Theme_projectIn questo modo verrà creata una nuova cartella all'interno della cartella Themes, con il nome voluto, in questo caso TestTheme.
Avendo specificato CreateProject:true verrà anche creato un progetto che ci permetterà di aprire ed editare i file del tema direttamente da Visual Studio (immagine qui a destra).
Con BasedOn:TheThemeMachine si specifica di utilizzare un specifico tema, come tema base, dandoci la possibilità di scrivere solamente le view o altri file (fogli di stile, immagini) che differiscono dal tema base (invece che tutti i file).

La soluzione più semplice 'inizialmente' sarà quella di copiare dal tema base i soli file che si vogliono modificare e compiere le customizzazioni volute, velocizzando di gran lunga il processo di creazione del nostro tema.

Dopo aver creato il nuovo tema, uno dei primi file che andremo a modificare sarà Theme.txt, che è il manifest del tema, e contiene tutte le informazioni relative al tema presente in quella precisa cartella, quali autore, descrizione e come visto, il tema base da utilizzare.
Rimuovendo la riga che inizia con BaseTheme, si forzerà l'uso del solo tema corrente, senza quindi  ereditare da un tema esistente.

Name: TestTheme
Author: Andrea Dottor
Website: http://blog.dottor.net
Description: Description for the theme
Version: 1.0
BaseTheme: TheThemeMachine
# todo: provide tags
# Tags: Classic, Serif

Una volta assegnati nuovi valori al file Theme.txt si potrà procedere con la modifica degli stili nel file Style/Site.css oppure del layout, lavorando nel file Views/Layout.cshtml, oppure in una specifica view.
Avendo il grosso vantaggio di ereditare da un tema base, le modifiche che dovremmo compiere, ad esempio per modificare gli stili, sono ridotte al minimo:

  • Copiare il file Site.css dal tema base alla cartella Style del nuovo tema
  • Modificare gli stili voluti direttamente da Visual Studio

Terminata la modifica/creazione del nostro tema, non dovremo fare altro che abilitarlo diretamente dalla dashboard di Orchard nella sezione Themes.
Consiglio anche di fare uno screenshot del website con il nuovo tema e sostituirla al file Theme.png per facilitarne il riconoscimento dalla dashboard.

Per approfondire l'argomento: http://www.orchardproject.net/docs/

Technorati Tags: ,,

Tags: , , , ,

.NET | ASP .NET | Microsoft

Orchard Project

by Andrea 20 April 2011 03:25

OrchardLogo

Cos'è Orchard?

Copio dal sito:
"Orchard is a free, open source, community-focused project aimed at delivering applications and reusable components on the ASP.NET platform."

Orchard è il nuovo CMS Open Source di casa Microsoft sviluppato in ASP.NET MVC. Il progetto ha un proprio sito http://www.orchardproject.net dove potete trovare informazioni sul progetto e la relatia documentazione, mentre il codice è presente su codeplex http://orchard.codeplex.com/.

Il progetto è arrivato ora alla versione 1.1, e per colpa della sua giovinezza si notano alcune mancanze, visibili a chi utilizza già altri CMS ben più maturi.
Per noi sviluppatori, direi che l'uso di ASP.NET MVC è una delle principali motivazioni per l'utilizzo di questo CMS, che sarò gradito anche dai grafici vista la possibilità di avere in output un html davvero pulito. Devo ammettere però che la curva di apprendimento non è proprio banale a differenza di altri CMS.
La dashoboard è molto semplice e intuitiva, e questo direi essere una gran cosa in quanto è ciò che interessa all'utente finale.

A prima vista sembrerebbe che per progetti medio-piccoli possa essere il CMS ideale, ma ora non mi resta che sporcarmi un pò le mani, e capire per benino quali siano i casi limite di utilizzo, ma sopratutto capirne le tempistiche per l'implementazione di nuovi temi e nuovi moduli, che è ciò che interessa maggiormente.

Technorati Tags: ,,,

Tags: , , , ,

ASP .NET | .NET | Microsoft

DotNetNuke e un caso reale - Gymmit.com

by Andrea 18 April 2011 02:51

Non faccio solitamente pubblicità nel mio blog, ma qualche eccezzione ogni tanto ci vuole.

Volevo segnalarvi il portale gymmit.com, sviluppato da Davide Senatore.

link: www.gymmit.com
gymmit è il motore di ricerca e social network per centri sportivi, palestre, piscine e SPA. Iscriviti a gymmit per conoscere il "Social Wellness".
Be social. Be fit. Be gymmit!

La cosa interessante per noi sviluppatori, stà nel fatto che il portale utilizza la versione Community Edition di DotNetNuke, e quindi è un esempio reale di utilizzo di questo CMS open source, a costo zero.
Registrandosi, e dando uno sguardo alle molte funzionalità/moduli presenti, ci si rende subito conto di quanto lavoro sia stato fatto, e di come la piattaforma non abbia posto limiti allo sviluppo e alla crescita di questa piattaforma, ma anzi, di come ne abbia aiutato/agevolato il tutto, permettendo a Davide di concentrarsi nelle sole funzionalità.

Veniamo ad alcune delle funzionalità che il portale offre agli iscritti:

  • per gli utenti:
    • completa integrazione con Facebook, dalla registrazione, autenticazione, e aggiornamento degli status
    • pubblicazione dei propri interessi come attività sportive
    • ricerca di utenti/amici in base alle attività in comune, in modo da poter praticare sport in compagnia
    • ricerca degli utenti in base alla disponibilità di tempo nel praticare un preciso sport
    • ricerca cetri sportivi nelle vicinanze, con possibilità di feedback per aiutare/facilitare la scelta agli altri utenti
  • per i centri sportivi
    • pubblicazione/gestione descrizione, orari, informazioni del centro
    • galleria fotografica
    • calendario corsi

Se siete curiosi, la registrazione tramite Facebook richiede un solo click, e sono certo che Davide sarà felice di ricevere qualsiasi feedback vorrete dargli.

Vi segnalo che il 20 maggio 2011, io e Davide Senatore parleremo per l'appunto di DotNetNuke, e potrete assistere ad un'interessante sessione che vi permetterà di capire come sia facile realizzare applicazioni con questo CMS open-source.
Per registrarsi al community meeting: Programming DotNetNuke 5.0

Technorati Tags: ,,

Tags: , ,

ASP .NET | .NET | Internet

Prossimi appuntamenti, SMAU e community meeting

by Andrea 18 April 2011 02:23

Volevo segnalarvi i prossimi meeting che mi vedranno partecipe:

5 maggio 2011 - Community Tour SMAU Edition
link: http://www.xedotnet.org/Home/Meeting/20110505

ASP.NET Web Form vs ASP.NET MVC
Due tecnologie che condividono le stesse basi, ma che si differenziano di molto. ASP.NET MVC è ormai diventata una tecnologia matura, ed ecco che iniziano a sorgere i dubbi quando ci si trova di fronte all'analisi di nuovi progetti: "Uso Web Form o MVC?" "Quali vantaggi ho dall'uso di uno o dall'altro?" "E se volessi usare un CMS Open-Source?" In questa sessione vedremo lo stato dell'arte di queste tecnologie, e cercheremo di chiarire il ruolo di ognuna di esse, andando in dettaglio dei pro e contro che le caratterizzano.

20 Maggio 2011 - XeDotNet community meeting - Programming DotNetNuke 5.0
link: http://www.xedotnet.org/Home/Meeting/20110520

Sviluppare con DotNetNuke. Un framework sul framework
Sviluppare applicazioni, occupandosi delle sole funzionalità che vuole il cliente, senza doversi occupare anche del codice di infrastruttura può sembrare un'utopia, ma non è così. In questa sessione vedremo come DotNetNuke, che è un CMS (content management system) open source, permetta allo sviluppatore tutto ciò. DotNetNuke può essere visto come un framework sul framework, in grado di fornire allo sviluppatore funzionalità avanzate che permettono di aumentare la produttiva e al contempo di ridurne i tempi di sviluppo.

Per quanto riguarda il Community Meeting del 20 maggio, non mancate, in quanto con Davide Senatore stiamo cercando di preparare una sessione a 4 mani, dove se ne vedranno veramente delle belle. Spremeremo DotNetNuke per benino, in modo da farvi conoscere le reali possibilità/potenzialità di questo framework/applicazione.

Tags: , , , ,

.NET | ASP .NET | XeDotNet | Microsoft

Workaround per StackOverflowException quando si usa SlSvcUtil.exe

by Andrea 18 February 2011 05:25

Usando la console per generare un proxy di un web service per silverllight, facendo uso del tool SlSvcUtil.exe (versione 4.0) può capitare di ottenere questo errore (che nella versione 3.0 non accadeva):

Process is terminated due to StackOverflowException.

Cercando in rete, ho trovato la soluzione in questo post firmato da Christopher Scrosati, del Team di Silverlight WCF: Workaround for StackOverflowException when using SlSvcUtil.exe

Il workaround applicato consiste nel creare un file di configurazione con nome SlSvcUtil.exe.config e contenente la seguente configurazione:

<configuration>
  <satelliteassemblies>
    <assembly name="SlSvcUtil, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </satelliteassemblies>
</configuration>

Una volta aggiunta questa configurazione, il tutto funziona alla perfezione.

Tags: , ,

ASP .NET | .NET

Codice e slide della sessione Potenzialità e benefici di ASP.NET MVC

by Andrea 19 November 2010 05:30

Come promesso, ecco le slide e il codice della mia sessione Potenzialità e benefici di ASP.NET MVC tenuta al Community Tour del 17 Novembre 2010.

Il codice fa uso di ASP.NET MVC 3 RC.

All'interno dello zip non ho inserito le applicazioni NerdDinner e MvcMusicStore, in quanto le potete trovare direttamente su codeplex ai seguenti link:

Abstract: ASP.NET MVC è un framework sviluppato da Microsoft che permette lo sviluppo di applicazioni web utilizzando il pattern Model-View-Controller. Questo pattern si propone di apportare alcuni benefici: maggiore controllo del markup della pagina, URL più leggibili, facilità di integrazione con librerie javascript, chiara separazione dei ruoli/responsabilità tra layer, testabilità e manutenzione del codice... In questa sessione cercheremo di capire quali siano gli effettivi vantaggi che ASP.NET MVC porta agli sviluppatori, e quindi capire, con un occhio pratico, quali reali benefici si abbiano nell'adottare questa tecnologia.

Tags: , , , ,

ASP .NET | XeDotNet | Microsoft

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