Sulla programmazione

Il blog tecnico di Fabrizio Cipriani

Durante una installazione di Apache su una macchina Windows 7 64bit mi è successo di non riuscire ad avviare il servizio apache perchè un altro processo di era assestato sulla porta 80. 

Lanciando un

  netstat -ao

dal prompt dei comandi mi aspettavo il solito skype, ma con mia sorpresa il risultato indicava che il processo sulla porta 80 era l'omnipresente System.

Sguinzaglio il fido google, il quale mi suggerisce questo link:

http://www.cameroncooke.com/2009/01/25/windows-7-uses-port-80-and-makes-it-impossible-to-install-apache-solution/

Riassumendo, questi sono i possibili servizi che si possono attestare sulla porta 80 (e che non risultano risultano associati al processo Service lanciando netstat):

  • Skype
  • BranchCache
  • Sql Server Reporting Services
  • Web Deployment Agent Service

Se uno di questi servizi è attivo, con molta probabilità avrete problemi ad installare una applicazione che occupa la stessa porta. La soluzione è semplicemente quella di fermare o riconfigurare il servizio colpevole.


Riporto qui una utile classe per la conversione di elementi System.Xml a System.Xml.Linq e viceversa:

 

using System.Xml;
using System.Xml.Linq;

/// <summary>
/// Provides extension methods for simple conversion between System.Xml and System.Xml.Linq classes.
/// </summary>
public static class XmlLinqConversionExtensions
{
  /// <summary>
  /// Converts an XDocument to an XmlDocument.
  /// </summary>
  /// <param name="xdoc">The XDocument to convert.</param>
  /// <returns>The equivalent XmlDocument.</returns>
  public static XmlDocument ToXmlDocument(this XDocument xdoc)
  {
    var xmldoc = new XmlDocument();
    xmldoc.Load(xdoc.CreateReader());
    return xmldoc;
  }
  
  /// <summary>
  /// Converts an XmlDocument to an XDocument.
  /// </summary>
  /// <param name="xmldoc">The XmlDocument to convert.</param>
  /// <returns>The equivalent XDocument.</returns>
  public static XDocument ToXDocument(this XmlDocument xmldoc)
  {
    return XDocument.Load(xmldoc.CreateNavigator().ReadSubtree());
  }
  
  /// <summary>
  /// Converts an XElement to an XmlElement.
  /// </summary>
  /// <param name="xelement">The XElement to convert.</param>
  /// <returns>The equivalent XmlElement.</returns>
  public static XmlElement ToXmlElement(this XElement xelement)
  {
    return new XmlDocument().ReadNode(xelement.CreateReader()) as XmlElement;
  }
  
  /// <summary>
  /// Converts an XmlElement to an XElement.
  /// </summary>
  /// <param name="xmlelement">The XmlElement to convert.</param>
  /// <returns>The equivalent XElement.</returns>
  public static XElement ToXElement(this XmlElement xmlelement)
  {
    return XElement.Load(xmlelement.CreateNavigator().ReadSubtree());
  }
}

Questo è il link al post originale:

http://brianary.blogspot.com/2010/02/converting-between-xdocument-and.html


Mettiamo che abbia bisogno di usare l'indice dell'elemento corrente di una query LINQ.

Ad esempio, partendo dalla lista:

String[] pezzi = {"pedone", "torre", "cavallo", "alfiere"};

voglio ottenere una unica stringa che contiene:

"Pezzo numero 1: pedone", "Pezzo numero 2: torre", etc.

Il metodo Select ha un overload con il parametro "index" che può essere utilizzato per conoscere l'indice dell'elemento corrente. In altre parole è possibile fare:

pezzi.Select((item, index) => 
  "Pezzo numero " + index.ToString() + ": " + item);

Per ottenere esattamente l'output desiderato possiamo usare il metodo Join() della classe String:

String.Join(", ",
       pezzi.Select((item, index) =>
         "\"Pezzo numero " + index.ToString() + ": " 
             item + "\"").ToArray());

(la conversione con ToArray() può essere omessa se si usa .net 4.0+)


Interventi per mese

Calendario

<<  maggio 2012  >>
lumamegivesado
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

View posts in large calendar

Log in