Utilizzare WordPress con C#

imagesFinalmente ho deciso (e trovato il tempo) di creare il mio sito personale (ormai tutti hanno un sito personale 🙂 ).

In home page voglio dare la possibilita’ di visualizzare i post principali che scrivo su wordpress; per fare questo ho pensato a diverse soluzioni:

  • converto tutto in .NEt sbarazzandomi di WordPress
  • decido di utilizzare wordpress sui miei server e quindi avere controllo anche del database (in questo modo posso fare le query direttamente sul db)
  • cerco su internet qualche plugin o framework che mi possa aiutare ad integrare wordpress nel mio sito.
  • utilizzare webhooks per pushare le informazioni direttamente dal blog di WordPress
  • dato che voglio solo visualizzare i miei posts e non voglio inserire post direttamente da .net, si puo’ leggere direttamente rss feed che rendo disponibile da mio sito.

Per adesso ho deciso di utilizzare l’ultima possibilita’: meno costosa (gratis)… piu’ semplice da utilizzare e piu’ veloce da fare.

Prima di tutto creiamo il modello di oggetto che identifica il  POST:

public class Post
{
   public string Title { get; set; }
   public string Url { get; set; }
   public string Author {get; set;}
   public DateTime PublishedDate { get; set; }
}

Adesso andiamo a leggere i post dal link del mio rss feed di wordpress. Ho creato un semplice parser per leggere queste informazioni:

public static IList GetBlogPosts(string postUrl, int postCount)
{

string xml;

using (WebClient downloader = new WebClient())
{
   using (TextReader reader =
      new StreamReader(downloader.OpenRead(postUrl)))
{
xml = reader.ReadToEnd();
}
}
// Sanitize the XML
xml = XmlCommon.SanitizeXmlString(xml);
XmlDocument xmlDoc = new XmlDocument();
//Load feed via a feedUrl.
TextReader tr = new StringReader(xml);
var doc = XDocument.Load(tr);

XNamespace dc= "http://purl.org/dc/elements/1.1/";

//Get all the "items" in the feed.
var feeds = doc.Descendants("item").Select(x =>
new Post
{
//Get title, pubished date, and link elements.
Title = x.Element("title").Value, //3
PublishedDate = DateTime.Parse(x.Element("pubDate").Value),
Author = x.Element(dc + "creator").Value,
Url = x.Element("link").Value
} //  Put them into an object (Post)
)
// Order them by the pubDate (Post.PublishedDate).
.OrderByDescending(x=> x.PublishedDate)
//Only get the amount specified, the top (1, 2, 3, etc.) via postCount.
.Take(postCount);

//Convert the feeds to a List and return them.
return feeds.ToList();
}

Volevo farvi notare la seguente riga di codice:

xml = XmlCommon.SanitizeXmlString(xml);

In questo modo andremo a ripulire il nostro XML. Il file rss di wordpress viene creato con dei caratteri non validi per le specifiche XML.Qui trovate un articolo che spiega meglio il pattern utilizzato.

Infine se potremmo anche creare una cache per non rallentare il caricamento. Ecco qualche lineea di codice:

//Check if feed exists
if (HttpRuntime.Cache["WordPressPost"] == null)
				{
					//If it is, insert it into the cache, cache for 10 minutes
					HttpRuntime.Cache.Insert("WordPressPost",
						FeedReader.GetBlogFeed("url", 5), null, SystemTime.Now().AddMinutes(10), Cache.NoSlidingExpiration);
				}

//retrieve cached feeds
var cachedFeeds = (List) HttpRuntime.Cache["WordPressPost"]

Ora possiamo avere i nostri post di worpress nella nostra homepage. Ho creato un piccolo progetto di esempio in Github

Cercando su google ho trovato WP.NET e un ottimo articolo sol suo utilizzo : Extending-WordPress-with-Csharp-Plugins. Con WP.Net e’ possibile utilizzare wordpress con .net.

Annunci

Select Join ricorsiva in c# con Linq

imagesOggi ho avuto bisogno di creare un extension method per poter selezionare in modo ricorsivo i figli di figli di un item padre in una lista. 🙂

Ecco una soluzione pulita per fare gerarchica ricorsiva join in LINQ e C#. Ho avuto difficolta’ a trovare su internet un esempio, quindi ho deciso di scrivere un post con il mio approccio che fornisce metodi di estensione per IEnumerabe <T> per fare ricorsione:

Prima di tutto la mia struttura gerarchica:
Text | ID | Parent ID
A | 1 | –
B | 2 | –
C | 3 | 1
D | 4 | 1
E | 5 | 2

I dati sono rappresentati dall’oggetto

public class ObjectData
{
   public string Text { get; set; }
   public int Id { get; set; }
   public int ParentId { get; set; }
}

mentre i nodi gerarchici dal seguente oggetto:

public class NodeData
{
 public string Text { get; set; }
 public IEnumerable<NodeData> Children { get; set; }
}

Il nostro obiettivo e’ avere un oggetto gerarchico fatto in questo modo:
A –>
|_ C
|_ D
B —>
|_ E

Usando il mio metodo di estensione RecursiveJoin LINQ, è possibile trasformare i dati (rappresentati da ObjectData) in dati gerarchici (rappresentati da NodeData) come segue:

Prima di tutto creiamo i nostri dati:

ObjectData[] elements = new ObjectData[][]
{
   new ObjectData[]{Id = 1, Text = "A"},
   new ObjectData[]{Id = 2, Text = "B"},
   new ObjectData[]{Id = 3, ParentId = 1, Text = "C"},
   new ObjectData[]{Id = 4, ParentId = 1, Text = "D"},
   new ObjectData[]{Id = 5, ParentId = 2, Text = "E"}
};

E poi implementiamo il RecursiveJoin per creare il nostro oggetto “ricorsivo”

IEnumerable<NodeData> nodes = elements.RecursiveJoin(element => element.Id,
 element => element.ParentId,
 (ObjectData element, IEnumerable<NodeData> children) => new NodeData()
 {
 Text = element.Text,
 Children = children
 });

Ci saranno due root nodi A e B. A avra’ i figli C e D mentre B avra’ come figlio solo E.
L’esempio usa semplicemente la forma del metodo RecursiveJoin con la seguente firma:

public static IEnumerable<TResult> RecursiveJoin<TSource, TKey, TResult>
   (this IEnumerable<TSource> source,
      Func<TSource, TKey> parentKeySelector,
      Func<TSource, TKey> childKeySelector,
      Func<TSource, IEnumerable<TResult>, TResult> resultSelector);

Il codice della classe si puo’ trovare sul mio Github

Print all properties and value of a object in recursive way

imagesSometimes you have the need ‘to print the properties of an object and its values. This is, at least for me, when in debug using a new object and you want to know all his property ‘.
I created these recursive methods that due to reflection I print all the properties and values.
I posted the code on Github.

Maskedtextbox and SelectAll()

I had a problem with maskedit and the selectAll. I wanted that when clicked on maskedit, all text was selected. The problem had a simply solution: I had to use the SelectAll() method in the Focus Event

.
.
.
mskBox.GotFocus += new EventHandler(mskBox_GotFocus);
.
.
.
.
void mskBox_GotFocus(object sender, EventArgs e)
{
  mskBox.SelectAll();
}

But this did not run. I found this solution:
Maskedtextbox and SelectAll()

private delegate void SetMaskedTextBoxSelectAllDelegate(MaskedTextBox txtbox);

private void maskedTextBox1_Enter(object sender, EventArgs e)
{
   this.BeginInvoke(new SetMaskedTextBoxSelectAllDelegate(SetMaskedTextBoxSelectAll), new object[] { (MaskedTextBox) sender });
}

private void SetMaskedTextBoxSelectAll(MaskedTextBox txtbox)
{
   txtbox.SelectAll();
}

And this run!!!!!

Inserire un “confirm messagebox” ad un Asp.net Button control

A my colleague asked my a way to create a confirm button in Asp.net. This is the solution:

The Asp.Net button has 2 attributes to trigger a click event OnClick and OnClientClick.

OnClientClick – Calls the client side (JavaScript) event handler
OnClick– Calls the server side (code-behind) event handler

The OnClientClick event handler can be used to perform client side validations and to get a confirmation from the user before triggering the server side event handler as follows.

OnClientClick="if(!confirm('Are you sure you want to Save?')) return false;"
<html>
<head runat="server">
    <title>OnClientClick</title>
</head>
<body>
    <form id="frmOnClientClick" runat="server">
    <div>
        <asp:Button
            id="btnSave"
            runat="server"
            Text="Client Click"
            OnClientClick="if(!confirm('Are you sure you want to Save?'))  
            return false;"
            onclick="btnSave_Click"/>
    </div>
    </form>
</body>
</html>

What do you think?

Quando usare String.Intern: i Lock

String è un tipo immutabile che si basa sul pattern Flyweight: ogni volta creiamo una nuova stringa questa prenderà l’istanza memorizzata per quel valore. Un esempio pratico chiarisce tutto:

string s1 = "ciao";    // puntatore: p1
string s2 = "a tutti"; // puntatore: p2
string s3 = s1 + s2;  // puntatore: p3
string s4 = "ciao a tutti"; // puntatore: p3
s1 = s1 + s2; // puntatore: p1
s1 == s3; // true (verosimiglianza dall'override dell'operatore)
(object)s1 == (object)s3;  // false (confronto puntatori)
s1 = String.Inner(s1); // puntatore: p3
(object)s1 == (object)s3;  // true (confronto puntatori)

Continua a leggere

Dependency Injection

Dato che oggi, per l’ennesima volta, un mio consulente mi ha chiesto delucidazioni su questo pattern, ho deciso di creare un articolo dove cercherò di illustrarlo :
La Dependency Injection è un pattern di programmazione, nello specifico è una particolare forma del pattern Inversion Of Control. Con la Dependency Injection una classe non è responsabile dell’inizializzazione delle proprie dipendenze.
Ma che cos’è una Dependency? Facciamo un esempio per chiarire le cose. Supponiamo di avere la seguente classe Macchina:

public class Macchina
{
    private Motore _motore;
    public void Macchina()
    {
    }

    public void Cammina()
    {
        ..
        _motore.Start();
        ..
    }
}

Continua a leggere