Aggiungere il pulsante Like di Facebook ai post di BlogEngine

by Andrea 07 July 2010 06:58

Nel mio blog ho preferito sostituire il ranking dei post con il pulsante "Like" di Facebook.
Ho notato che non sono molti i post che hanno ricevuto una votazione, forse perchè il sistema di BlogEngine da 1 a 5 non era molto istintivo/immediato (veniva infatti richiesto all'utente di pensare quale fosse il corretto peso da dare, e forse non tutti ne avevano la voglia o il tempo), e quindi ho deciso di adottare una soluzione ben più istintiva e comoda.
Sembra una cosa da poco, ma a quanto pare non banale. Ora il metodo è davvero semplice, e consiste nel solo premere il pulsante Like nel caso il contenuto sia piaciuto.

Per fare questo è necessario modificare il file PostView.ascx contenuto nella cartella del proprio tema, ed iserire il seguente codice dopo il testo del post:

   1: <iframe 
   2:     src="http://www.facebook.com/plugins/like.php?href=<%=Post.PermaLink %>&layout=standard&show_faces=false&width=450px&action=like&font=verdana&colorscheme=light&height=25px" 
   3:     scrolling="no" 
   4:     frameborder="0" 
   5:     allowTransparency="true" 
   6:     style="border:none; overflow:hidden; width:450px; height:25px"></iframe>

Per chi (come me) volesse non far comparire il ranking di BlogEngine, è sufficiente andare nella pagina dei Settings e togliere il flag dalla voce "Enable post ratings".

Il risultato finale è quello che vedete ora nel mio blog, e se vi piace, non vi rimane che fare un semplice Like.
Open-mouthed smile

Technorati Tags: ,,

Tags: ,

Internet | Sito

Metodologie…queste sconosciute

by Andrea 14 June 2010 07:45

Leggo i post di LuKa e rimango sempre affascinato, o forse sconvolto.

Vedere che esistono aziende dove si riesce a migliorare il modo con qui vengono applicate metodologie, vuol dire al tempo stesso che esistono aziende che le applicano. (estremizzo)
Lo so bene che ci sono, e non sono poche, ma forse c'è poca pubblicità a riguardo del vantaggio che queste azienda traggono nell'applicarle.

Lavoro nel mondo dell'IT da diversi anni, e in nessuna azienda (da dipendente) ho mai trovato applicata una metodologia (ne agile, ne con altro nome). In alcune aziende si vive con il bello e cattivo tempo del titolare, in altre sono i commerciali a gestire tutto, in altre invece comandano i clienti.

C'è sempre stata la voglia di cambiare queste cose, di far capire l'importanza di una metodologia (indipendetemente da quale essa sia), ma si finisce solo con l'avere buone intenzioni e nessun (o scarso) risultato.
Trovo che l'unica cosa possibile in questi casi, sia l'applicare il più possibile alcune regole di queste metodologie tra i/alcuni membri del team...ma sappiamo bene che questo porta a ben poco.
E allora che fare? Come comportarsi? (Spero davvero di riuscire a darmi una risposta)

Gli stessi pensieri gli ho avuti anche venerdì, durante il meeting di XeDotNet tenuto da Davide a riguardo di Scrum, dove  mi sono ritrovato più volte con il pensiero di quanto fosse difficile/impossible portare questa metodologia all'interno dell'azienda nella quale lavoro... educare alcuni clienti, ma sopratutto i capi, non è  proprio così semplice come si crede.

Fortunatamente vivo una parte della mia vita da libero professionista, il che mi permette di vedere realtà ben differenti, con il grosso vantaggio di poter applicare queste tecniche con i miei clienti, e vederne/capirne i benefici direttamente in prima persona.

Tags:

Sfoghi | Pensieri

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

Ciao ciao WebHost4Life…

by Andrea 08 June 2010 03:39

E' giunto il momento anche per me di abbandonare WebHost4Life dopo parecchi anni passati con un servizio davvero impeccabile...il 02 giugno 2010 mi è toccata la migrazione definitiva verso la nuova piattaforma di wh4l, e purtroppo non è stata indolore (wh4l #fail):

  • DataBase del blog che risaliva a 20 giorni prima (fortunatamente ho sempre eseguito i backup, viste le problematiche).
  • Impossibilità di eseguire il restore manuale del DataBase.
  • Il sito sviluppato con ASP.NET MVC non funzionante (non hanno riportato alcuni setting di IIS 6, il vecchio team di wh4l aveva apportato le modifiche in 3 ore dall'apertura del ticket).
  • SubDomains gestiti in modo differente dal passato, con possibili problematiche per quanto riguarda il posizionamento nei motori di ricerca.

Ho provveduto ad aprire le segnalazioni il giorno stesso, e ad oggi nulla di tutto ciò è stato sistemato...e sono trascorsi ben 5 giorni.
Per quanto riguarda i SubDomains, mi hanno comunicato che ora funzionano in questo modo, e non spetta a loro "risolvere", ma ho tamponato il problema gestendo modificando i loro redirect, in redirect 301, in modo da non compromettere gli url indicizzati...e il tutto tramite ISAPI_rewrite.

Ed eccomi ora nel nuovo hosting su WinHost sperando vivamente sia la soluzione definitiva.
Il rapporto qualità prezzo mi pare buono, e il primo impatto è senz'altro positivo...speriamo quindi continui così.
Una possibile alternativa era quella di prendermi un server virtuale, ma per il momento (e per l'uso che ne faccio) sarebbe stata una scelta troppo costosa.
Per il momento quindi, sono parcheggiato in questo nuovo hosting, con il vantaggio di pagare mese per mese, con il vantaggio (visto anche il passato con wh4l) di non doverci rimettere economicamente nel caso dovessero capitare problemi. ;-)

Tags:

Internet | Sito

Community Tour 2010 - alcune foto

by Andrea 21 April 2010 02:35

Ecco alcune foto dell'evento di lancio di Visual Studio 2010 tenuto a Mestre il 15 Aprile 2010.

Community Tour 2010Voglio ringraziare tutti i partecipanti, perchè è (anche) grazie all'interesse che ci dimostrate, che eventi di questo genere si possono organizzare (e riescono in modo splendido). Vedere un pubblico così numeroso dalle 9.30 del mattino arrivare al completo fino alle 18.30, è stata davvero una grossa soddisfazione.
Inoltre, e forse la più importante... i contatti, lo scambio di idee/opinioni/impressioni che questi eventi creano, hanno un valore immenso... e il poter parlare faccia a faccia con persone di cui si è solo letto (mail, blog, facebook) non ha prezzo. :-D

SpeakerUn ulteriore grazie va a tutti gli speaker, e a chi ha collaborato per la realizzazione/organizzazione dell'intera giornata, perchè posso confermare (che dal mio punto di vista) è stato un vero successo!

Da speaker come voi, ho davvero molto da imparare!

Grazie ancora, e complimenti a tutti!!

 

Visual Studio 2010Lorenzo Barbieri Community Tour 2010
Vittorio Bertocci  Vittorio Bertocci Lorenzo Barbieri    
Andrea BoschinAndrea Boschin Community Tour 2010
Andrea Dottor Davide Senatore  Community Tour 2010 
Davide Senatore Davide Senatore Davide Senatore

 

Tags: , ,

Generale | Microsoft | XeDotNet

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

    Codice e slide della sessione ASP.NET MVC 2.0

    by Andrea 12 April 2010 02:27

    Ecco disponibili al download, il codice e le slide dell'evento che ho tenuto il 9 Aprile 2010 su Microsoft ASP.NET MVC 2.0.

    Per chi non avesse partecipato al community meeting, nel codice è presente una semplice ma completa applicazione, (ovviamente) realizzata in ASP.NET MVC 2.0, che permette la gestione e visualizzazione di news:

    • Pannello di controllo (utenti autenticati),
    • Inserimento, Modifica, Cancellazione News (utenti autenticati)
    • Visualizzazione lista news
    • Visualizzazione dettaglio news
    • Inserimento commenti nel dettaglio news

     

    Tags: , , ,

    .NET | ASP .NET | Microsoft | XeDotNet

    Community Meeting - Web Track

    by Andrea 07 April 2010 05:00

    asp-net-mvc Venerdì 9 Aprile 2010 si terrà il consueto XeDotNet Community Meeting con la Web Track, che sarà tenuto da me e da Andrea Colaci (che terrà una sessione su ASP.NET 4.0).

    Io invece, sarà a parlarvi di ASP.NET MVC 2.0:

    ASP.NET MVC è un framework sviluppato da Microsoft che permette di sviluppare applicazioni web utilizzando il pattern Model-View-Controller. Questo pattern, e (in questa sessione) la sua implementazione realizzata da Microsoft, si propone di apportare alcuni benefici: Maggiore controllo del markup della pagina, URL più leggibili Facilità di integrazione con librerie AJAX, chiara separazione dei ruoli/responsabilità tra layer, facilitando i test e la manutenzione dell'applicazione, supporto per test-driven development.
    Nella sessione andremo in dettaglio nella versione 2 di ASP.NET MVC, e con esempi pratici daremo risposta alle domande più frequenti, e a molte altre.
    Quando si utilizza ASP.NET MVC?
    Come si utilizza ASP.NET MVC?
    Semplifica davvero la manutenzione dell'applicazione?
    E' realmente testabile?
    Cosa guadagno ad usare ASP.NET MVC?

    Con molto stupore, mi sono reso conto di aver completato slide e codice nello scorso weekend, con ben 4 giorni di anticipo…cosa che credo non mi sia mai accaduto prima. :-D

    Per registrarvi: http://www.xedotnet.org/nextmeetings.aspx

    Tags: , , ,

    XeDotNet | ASP .NET

    Community Tour - Visual Studio 2010

    by Andrea 07 April 2010 03:33

    Giovedì 15 Aprile 2010 si terrà l'evento Community Tour - Visual Studio 2010, per il lancio della nuova versione di Visual Studio.
    Il luogo dell'evento sarà:

    Hotel Holiday Inn Venice
    Rotonda Romea 1/2 
    30175 Marghera (VE)

    e ci terremo compagnia per un'intera giornata, piena zeppa di interessanti sessioni, che ci vedranno impegnati dalle 9.30 alle 18.15 con la seguente agenda:

    • 09:00 - Registrazione
    • 09:30 - Apertura Lavori e Keynote con Vittorio Bertocci
    • 10:20 - Vittorio Bertocci - Claims-based identity e Windows Identity Foundation
    • 11:25 - Sospensione
    • 11:40 - Davide Vernole - Microsoft Test Manager, mai più senza!
    • 12:45 - Lorenzo Barbieri - Introduzione allo sviluppo con Windows Phone 7 Series
    • 13:45 - Pausa Pranzo (a carico dei convenuti)
    • 14:45 - Andrea Boschin - Silverlight 4.0 Overview
    • 15:50 - Andrea Dottor - What's new in ASP.NET 4.0
    • 17:10 - Davide Senatore - WPF 4.0 – The Golden Age of Windows Client
    • 18:15 - Chiusura lavori

    Agenda completa e abstract: Community Tour Visual Studio 2010
    Registrazione: clicca qui

    Vi aspettiamo numerosi!!

    Tags: , , ,

    XeDotNet | Microsoft | .NET | ASP .NET

    Avviare un package di SSIS da un'applicazione ASP.NET

    by Andrea 29 March 2010 07:22

    SSIS Non so come mai, ma utlimamente mi scontro con problematiche non molto documentate. Una di queste è la possibilità di lanciare l'esecuzione di Package di SQL Server Integration Services da un'applicazione ASP.NET.

    Cercando in rete, ho trovato solamente due possibili soluzioni, entrambe elencate in questo post. Una soluzione richiede la chiamata ad un job di SQL Server Agent, mentre l'altra soluzione fa uso di un Web Service da pubblicare nella macchina di SQL Server.

    La prima soluzione l'ho scartata in quanto non sono riuscito a trovare il metodo per poter passare dei parametri utili a valorizzare le variabili del package (mia ignoranza). Mentre la seconda richiede di installare un'ulteriore applicazione (da dover poi mantenere e ripubblicare), nella macchina di SQL Server, e quindi anche questa scartata.
    Può sembrare banale, ma avere un'applicazione in più da mantenere non è sempre semplice, specialmente nel caso l'applicazione sia distribuita in diversi server, e sia presente in casa di diversi clienti.

    Guardando le diverse soluzioni, mi è venuta l'idea di provare a adattare la soluzione del Web Service, ma eseguita direttamente da un server remoto. Devo ammettere che ci sono state svariate problematiche, ma alla fine, sono arrivato ad una soluzione perfettamente funzionante.

    Ecco come eseguire un package di SSIS da remoto:

    Per l'esecuzione del package sarà necessario creare un utente nel database (oppure utilizzarne uno di esistente) ed assegnargli il ruolo db_dtsoperator nel database msdb. Questo ruolo attribuisce all'utente i permessi di:

    • Enumerate all packages.
    • View all packages.
    • Execute all packages.
    • Export all packages.
    • Execute all packages in SQL Server Agent.

    Per quanto rigurda la connessione verso il database, nel web.config ho creato una ConnectionString che contiene solamente "Data Source", "User ID" e "Password", questo perchè poi tramite l'uso della classe DbConnectionStringBuilder, verrà poi parsata per recuperarne i singoli valori. Così ho un unico punto dove saranno contenute le credenziali di accesso.

       1: <add 
       2:   name="olapServerAuth"
       3:   connectionString="Data Source=192.168.0.100;User ID=usr;Password=p4$$w0rd;" 
       4:   providerName="System.Data.EntityClient" />

    Nell'applicazione sarà necessario referenziare la dll Microsoft.SQLServer.ManagedDTS, e aggiungere alla classe uno using a Microsoft.SqlServer.Dts.Runtime.

    Il codice per eseguire il package da remoto sarà il seguente:

       1: // recupero delle informazioni per l'autenticazione al server
       2: DbConnectionStringBuilder cs = new DbConnectionStringBuilder();
       3: cs.ConnectionString = ConfigurationManager.ConnectionStrings["olapServerAuth"].ConnectionString;
       4:  
       5: Application integrationServices = new Application();
       6: // recupero del package che deve essere presente in SQL Server
       7: Package package = integrationServices.LoadFromSqlServer(
       8:                         @"\Data Collector\Test\TestETL",
       9:                         cs["Data Source"] as string,
      10:                         cs["User ID"] as string,
      11:                         cs["Password"] as string,
      12:                         null);
      13:  
      14: // set delle variabili
      15: Variables variables = package.Variables;
      16: variables["VariabileDaSettare"].Value = valoreDaSettare;
      17:  
      18: // set delle connessioni
      19: Connections connections = package.Connections;
      20: connections["AdoNetAnalysisDatabase"].ConnectionString = ConfigurationManager.ConnectionStrings["AdoNetAnalysisDatabase"].ConnectionString;
      21:  
      22: // esecuzione del package
      23: DTSExecResult result = package.Execute(connections, variables, null, null, null);
      24: if (result != DTSExecResult.Success)
      25:     ... // errore nell'esecuzione
      26: else
      27:     ... // avvio corretto del package

    Da notare che:

    • DbConnectionStringBuilder: permette di recuperare ogni singolo elemento che compone una ConnectionString. Utile in questo caso per salvare i dati del server di SQL Server, il nome dell'utente di accesso, e la relativa password in un unico container, e poterli poi recuperare singolarmente.
    • Application.LoadFromSqlServer: permette di recuperare un package presente in SQL Server. Se i campi username e password non vengono valorizzati, viene fatto uso della windows authentication.
    • package.Variables: recupero delle variabili utilizzate nel package. Utile nel caso sia necessario modificarne il valore di default prima dell'esecuzione.
    • package.Connections: recupero delle connessioni utilizzate nel package. Da notare che oltre alle stringhe di connessione, compaiono in questa lista anche le connessioni per i Flat File.
      In questi elementi devono essere presenti tutti i valori richiesti, come ad esempio nel caso di una connessione OLEDB dovranno essere presenti: Provider, Application Name e Auto Translate. (per facilità controllate come sono composte nel vostro package).
    • package.Execute: avvia l'esecuzione del package con le nuove variabili e connessioni impostate. 
    • In caso di non successo nell'esecuzione del package, in package.Errors saranno presenti gli errori.

    Devo ammettere che ricostruire questo codice non è stato per niente facile, in quanto gli errori che mi si presentavano non erano proprio semplici da decifrare.
    La maggiore difficoltà è stata nel capire che le connessioni dovevano riportare tutti i parametri (gli stessi che si possono vedere quando si esegue il package dal SQL Management Studio), ed infine anche il capire quali fossero i permessi minimi da dover dare all'utente per poter eseguire il tutto (per evitare problematiche di sicurezza).
    Ma alla fine, tutto ha funzionato alla perfezione, e questo ripaga del tempo speso/investito in questa soluzione.

    Tags: ,

    SQL Server | ASP .NET | .NET