Codice e slide della sessione ASP.NET e lo sviluppo Client Side

by Andrea Dottor 20 March 2012 14:30

Ecco pronti al download il codice e le slide della mia sessione "Il mondo è sempre più client. ASP.NET e lo sviluppo Client Side" che ho tenuto il 9 marzo 2012.

IScriptControl, Knockout e le ASP.NET Web API sono stati i principali protagonisti :-)

Abstract: Le applicazioni che sviluppiamo, e che il mercato richiede sempre più, stanno modificando il modo in cui le applicazione vengono scritte. La logica di interazione con l'utente stà diventando sempre più client side, questo grazie anche all'espansione di dispositivi mobile che fruiscono le nostre applicazioni. JQuery ed il javascript in generale hanno un ruolo sempre maggiore, e permetteno in molti casidi poter far fare la differenza a ciò che sviluppiamo.

Come per il codice dello scorso meeting, per quanto riguarda il database utilizzato nella demo è necessario scaricare il database AdventureWorks che trovate al seguente link http://msftdbprodsamples.codeplex.com/e modificare la connectionstring del progetto web.

Tags: , , ,

ASP .NET | ASP.NET AJAX | XeDotNet | Microsoft

Codice e slide della sessione ASP.NET e lo sviluppo mobile

by Andrea Dottor 16 February 2012 09:42

Ecco pronte al download le slide ed il codice della sessione ASP.NET e lo sviluppo mobile che ho tenuto al XeDotNet Community Meeting HTML5 e lo sviluppo mobile del 10 febbraio 2012.

Abstract: I dispositivi mobile che permettono di navigare in rete sono sempre più diffusi, e gli smartphone ed i tablet ne sono l'esempio più lampante. In questa sessione vedremo come realizzare un sito ASP.NET che sia ottimizzato per questo genere di dispositivi sia dal punto di vista delle prestazioni ma anche delle problematiche riguardanti i dispositivi touch.

Come database per il codice della demo è necessario scaricare il db AdventureWorks dal seguente link http://msftdbprodsamples.codeplex.com/e modificare la connectionstring del progetto web.

Devo ringraziare tutti i partecipanti all'evento...vedervi così numerosi, e vedere facce nuove, ci da una carica in più e riuscite a farci quasi dimenticare le notti spese a preparare sessioni di questo tipo. Grazie

Tags: , ,

ASP .NET | .NET | XeDotNet

Inizia un nuovo anno per XeDotNet

by Andrea 11 January 2012 00:10

E' stato pubblicato il calendario degli eventi XeDotNet per il primo semestre del 2012.

10/02/2012 - HTML5 e lo sviluppo mobile

  • Andrea Dottor - ASP.NET e lo sviluppo mobile
  • Davide Senatore - Packaging HTML5 application with PhoneGap

09/03/2012 - Sviluppo client side

  • Andrea Boschin - What's new in Silverlight 5.0
  • Andrea Dottor - Il mondo è sempre più client. ASP.NET e lo sviluppo Client Side

06/04/2012 - Real world experience

  • Cristiano Simionato - Ma quanto costa Windows Azure?
  • Mirco Vanini - REST & .NET Micro FW - A Real Case

04/05/2012 - Uno sguardo a futuro

  • Davide Vernole - Visual Studio vNext - Application Lifecycle Management
  • Andrea Boschin - Sviluppare applicazioni Metro con Windows 8 e WinRT.

01/06/2012 - Playing with gadgets

  • Mirco Vanini - Are you a Gadgeteer?
  • Davide Vernole - Playing with Team Foundation Server
Per quanto mi riguarda, avrò il piacere di tenere due sessioni, basate su alcune esperienze lavorative che ho affrontato in quest'ultimo periodo.
Le sessioni si completano a vicenda, la prima basata sullo sviluppo verso il mondo mobile grazie all'utilizzo di HTML5, jquery mobile, ASP.NET MVC e WCF...mentre la seconda si propone di presentare alcune interessanti librerie javascript e la loro integrazione con ASP.NET, e alcuni suggerimenti di come sviluppare al meglio client-side.

Quindi non vi rimane che registrarvi ;-)

Tags: , , , ,

.NET | ASP .NET | ASP.NET AJAX | XeDotNet

Codice e slide della sessione ASP.NET MVC in a real world

by Andrea 28 September 2011 13:04

Sono disponibili al download le slide ed il codice della sessione ASP.NET MVC in a real world che ho tenuto al XeDotNet Community Meeting Web & Natural Interfaces del 13 settembre 2011.

Abstract: ASP.NET MVC stà prendendo sempre più piede, e le ultime release hanno portato importanti nuove funzionalità. Sempre più applicazioni vengono realizzate utilizzando questa tecnologia, e lo sviluppatore si trova ad affrontare nuove problematiche, che spesso differiscono da quelle di ASP.NET WebForm. Questa sessione non sarà una carellata sulle nuove funzionalità, ma bensì affronteremo problematiche reali in cui spesso lo sviluppatore incappa durante lo sviluppo di un'applicazione web, dimostrando quanto questa tecnologia sia flessibile e al tempo stesso potente e performante.

Un ringraziamento particolare ad Andrea Agnoletto per aver contribuito con la sua presentazione.

Tags: , , ,

ASP .NET | XeDotNet

Libero professionista a tempo pieno

by Andrea 10 September 2011 04:05

logoEbbene si, da quasi un mese, sono libero professionista a tempo pieno. Una nuova sfida da affrontare.

Sono più di 3 anni che ho la partita iva, ma fino al mese scorso ho sempre lavorato come dipendete. Questo mi ha permesso di aver le spalle sempre coperte e riuscire al tempo stesso a confrontarmi con sempre nuove prove.
L’essere dipendete ha sicurametne molti vantaggi, ma al tempo stesso può essere (a volte) limitante. (per poter tenere un corso (come speaker) dovevo prendermi ferie…per clienti che mi richiedevano la presenza da loro, avevo principalmente solo il sabato…)

Ho scelto di fare un passo importante, di lanciarmi in una nuova sfida, e mettermi totalmente in gioco decidendo di intraprendere questa nuova strada.
Alcune persone mi hanno spinto in questa decisione, altre mi hanno fatto riflettere, specialmente a riguardo del periodo non proprio positivo, e ho tirato le somme.
Per me (e per mia moglie) questo era il momento giusto, ed ora non mi rimane altro che impegnarmi a pieno in questo nuovo obbiettivo e continuare a crederci fino in fondo.

Il tutto sembra esser iniziato proprio nel migliore dei modi Open-mouthed smile

Tags:

+1 | ASP .NET | Pensieri | Generale

Codice e slide della sessione Sviluppare con DotNetNuke. Un framework sul framework

by Andrea 01 June 2011 05:56
Ecco pronti al download le slide ed il codice della sessione Sviluppare con DotNetNuke. Un framework sul framework che ho tenuto al XeDotNet community meeting del 20 Maggio 2011.

Abstract: 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.

PS: Nello zip contenente il codice non è presente DotNetNuke. Per il suo donwload rimando al sito di riferimento www.dotnetnuke.com.

PPS: E aggiungo che Speaker Timer ha funzionato alla perfezione! Testato sia con la mia sessione, che con quella di Davide… Android rulez!

Tags: , , ,

ASP .NET | .NET | XeDotNet

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

Prima esperienza di sviluppo per Android - Speaker Timer

by Andrea 16 May 2011 03:57

Speaker TimerEbbene si, avete letto bene. La scorsa settimana ho sviluppato una piccola applicazione per Android dal nome Speaker Timer. Altro non è che un timer da poter utilizzare durante le mie sessioni, in grado, grazie alla vibrazione ed al cambio di colore dello schermo, di segnalare l'avvicinarsi del termine della sessione, e la conclusione del tempo a disposizione.
SpeakerTimer homeSpeakerTimer settingsNel market sono presenti applicazioni simili, ma la mia si differenzia per non avere "fronzoli", ma bensì visualizzare le sole informazioni utili (sopratutto per ridurre il consumo di batteria, visto che rimarrebbe acceso per più di un'ora): il display visualizza solo ore e minuti, ed un puntino lampeggia segnalando i secondi che passano, mentre lo schermo è mantenuto di colore nero, che per un display OLED (come quello del mio galaxy S) vuol dire un notevole risparmio di batteria. La vibrazione poi, permette di tenere il cellulare in tasca, e di ricevere comunque le notifiche impostate.
Diciamo che mi serviva un'applicazione che mi fosse utile anche per studiare il nuovo ambiente, e quindi ho preferito realizzare qualcosa che potesse servirmi, e che fosse esattamente come la volevo. L'averla pubblicata nel market è stata solo una pura curiosità per capire la diffusione che una 'pur semplice applicazione' può avere.

Ed ecco le mie prime impressioni:

La programmazione

La programmazione non è stata molto complessa sebbene mi sia dovuto scontrare con un mondo per me nuovo, quello di Java. Le somiglianze a c# sono molte, e tutto sommato, ho riutilizzato totalmente le mie conoscenze, e sono state poche le cose che mi hanno rallentato.
La grave mancanza che si sente è quella di un IDE per creare le interfacce grafiche di Android, che attualmente si devono fare a mano scrivendo XML, e spero prima o poi qualcuni pensi seriamente di realizzarlo. Un blend per Android sarebbe veramente un sogno.
Visual Studio e il .NET Framework ci hanno abituati davvero bene, e questo sicuramente non è dire poco. La produttività di Visual Studio è imbattibile, anche se IntelliJ IDEA della JetBrain è davvero in un'ottima direzione, e i suoi tools di refactoring sono davvero ottimi (e chi conosce ReSharper, questo lo sa bene).

Da dove cominciare

Un ottimo punto di partenza è stato il libro "Android. Guida per lo sviluppatore" di Massimo Carli, che spiega davvero bene le funzionalità che Android mette a disposizione, e con esempi chiari ed esplicativi permette un rapido utilizzo del codice presentato. Una manna dal cielo per chi come me muove i primi passi in questo mondo. Amazon: Android. Guida per lo sviluppatore

Il market

Pubblicare l'applicazione nel market di Android, è stato facile, ma "macchinoso" per il numero di immagini/loghi che vengono richiesti, addirittura un logo ad alta risoluzione da 512x512px...ma tutto sommato la procedura è stata veloce, ed una volta cliccato il tasto publish, l'applicazione era subito presente nel market, pronta per essere installata.
Per quanto concerne la "velocità" di pubblicazione, questo può essere un aspetto non del tutto positivo, in quanto non esiste un controllo sulla qualità di ciò che viene pubblicato. Ma pazienza, vorrà dire che saranno gli utenti a far capire/notare la differenza tra un'applicazione di qualità ed una scadente.
Una nota davvero positiva stà nei 25$ che si pagano per poter pubblicare, che sono ben inferiori ad altri store, e che mi hanno permesso di pubblicare la mia applicazione sapendo di aver buttato via solo ~18€.

Gli utenti

L'elevato numero di persone che utilizzano Android, ha poi fatto la differenza: dopo 24 ore dalla pubblicazione, mi sono ritrovato con 62 installazioni attive (di cui 6 in Italia)...numeri ben superiori alle mie aspettative, e che mi hanno dato molta soddisfazione. E pensare che me l'ero sviluppata solo per me, e non pensavo inizialmente di inserirla nel market.

Ora non mi resta che migliorare l'applicazione realizzata dando al possibilità di scelta del colore delle notifiche, e poco altro. Visto che ha riscosso un minimo di interesse, trovo corretto portarla avanti, permettendo ad ogni utente di customizzarla a piacimento.
Il prossimo passo invece, sarà il trovare l'idea giusta per sperimentare un'applicazione a pagamento, e stare a vedere quale sarà il riscontro finale.
Rientrare di quei 25$ potrebbe essere la prossima sfida. La platea che Android raggiunge è davvero ampia, e una buona idea può davvero tramutarsi in profitti.

Tags: ,

+1 | Android

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