<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEcBQnw6cSp7ImA9WhRaF0g.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401</id><updated>2012-02-20T11:40:53.219-05:00</updated><category term="Mineria de Datos" /><category term="Adsense" /><category term="LINQ" /><category term="Visual Studio" /><category term="Control Versiones" /><category term="Twitter" /><category term="Team Foundation Server" /><category term="IIRF" /><category term="SEO" /><category term="Subversion" /><category term="SQL Server" /><category term="DFP" /><category term="Membership" /><category term="Windows Server 2008" /><category term="Windows" /><category term="Windows Server 2003" /><category term="IIS" /><category term="Facebook" /><category term="ASP.NET" /><category term="AnkhSVN" /><title>Blog de Programación</title><subtitle type="html">Fabio Parra</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.blogdeprogramacion.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogdeprogramacion/jJaq" /><feedburner:info uri="blogdeprogramacion/jjaq" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkUDSXw6fSp7ImA9WhdbGEs.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-185552553505674840</id><published>2011-10-17T11:02:00.001-05:00</published><updated>2011-10-17T11:17:58.215-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-17T11:17:58.215-05:00</app:edited><title>Ignorar Tiempo en Query Linq to Entities</title><content type="html">En &lt;b&gt;Linq to Entities&lt;/b&gt; realizar una comparación de fechas sin tener en cuenta la hora me presentó un problema.&lt;br /&gt;
&lt;br /&gt;

Mi código era:

&lt;br /&gt;
&lt;pre class="highlight"&gt;var RessSor = (from s in db.sorteoLoteria
    join l in db.dic_loteria on s.fk_loteriaId equals l.pk_id
    where s.fecha.Date == dt.Date
    select new
    {
        NombreComercial = l.nombreComercial,
        NombreSEO = l.nombreSEO
    });&lt;/pre&gt;

Este código funcionaba correctamente en LinQ to SQL, pero en LinQ to Entities no. 

Investigando un poco encontré la solución:

&lt;pre class="highlight"&gt;
using System.Data.Objects;
&lt;/pre&gt;
...
&lt;pre class="highlight"&gt;var RessSor = (from s in db.sorteoLoteria
    join l in db.dic_loteria on s.fk_loteriaId equals l.pk_id
    where EntityFunctions.TruncateTime(s.fecha) == dt.Date
    select new
    {
        NombreComercial = l.nombreComercial,
        NombreSEO = l.nombreSEO
    });
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-185552553505674840?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/BGRGbYp8ImE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/185552553505674840/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2011/10/quitar-tiempo-fecha-linq-to-entities.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/185552553505674840?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/185552553505674840?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/BGRGbYp8ImE/quitar-tiempo-fecha-linq-to-entities.html" title="Ignorar Tiempo en Query Linq to Entities" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2011/10/quitar-tiempo-fecha-linq-to-entities.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAGRn4zfCp7ImA9WhdbFEk.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-3527958810253050829</id><published>2011-10-12T13:05:00.001-05:00</published><updated>2011-10-12T13:05:27.084-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T13:05:27.084-05:00</app:edited><title>Algoritmo Distancia Hamming Levenshtein en C#</title><content type="html">El algoritmo &lt;a href="http://es.wikipedia.org/wiki/Distancia_de_Hamming"&gt;Distancia de Hamming&lt;/a&gt; compara uno por uno los caracteres para ver cambios de uno con respecto al otro.&lt;br /&gt;
&lt;br /&gt;
El algoritmo de &lt;a href="http://es.wikipedia.org/wiki/Distancia_de_Levenshtein"&gt;Distancia de Levenshtein&lt;/a&gt; calcula numero de operaciones para convertir una cadena a otra.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Distancia de Hamming en C#&lt;/b&gt;&lt;br /&gt;
&lt;pre class="highlight"&gt;
public static int HammingDistance(String s1, String s2)
        {
            int counter = 0;
            for (int k = 0; k &lt; s1.Length; k++)
            {
                if (s1.ElementAt(k) == s2.ElementAt(k)) counter++;
            }
            return counter;
        }
&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Distancia de Levenshtein en C#&lt;/b&gt;
&lt;pre class="highlight"&gt;
static int LevenshteinDistance(string s, string t, out double porcentaje)
        {
            porcentaje = 0;

            // d es una tabla con m+1 renglones y n+1 columnas
            int costo = 0;
            int m = s.Length;
            int n = t.Length;
            int[,] d = new int[m + 1, n + 1];

            // Verifica que exista algo que comparar
            if (n == 0) return m;
            if (m == 0) return n;

            // Llena la primera columna y la primera fila.
            for (int i = 0; i &lt;= m; d[i, 0] = i++) ;
            for (int j = 0; j &lt;= n; d[0, j] = j++) ;

            /// recorre la matriz llenando cada unos de los pesos.
            /// i columnas, j renglones
            for (int i = 1; i &lt;= m; i++)
            {
                // recorre para j
                for (int j = 1; j &lt;= n; j++)
                {
                    /// si son iguales en posiciones equidistantes el peso es 0
                    /// de lo contrario el peso suma a uno.
                    costo = (s[i - 1] == t[j - 1]) ? 0 : 1;
                    d[i, j] = System.Math.Min(System.Math.Min(d[i - 1, j] + 1,  //Eliminacion
                        d[i, j - 1] + 1),  //Inserccion 
                        d[i - 1, j - 1] + costo);  //Sustitucion
                }
            }
            /// Calculamos el porcentaje de cambios en la palabra.
            if (s.Length &gt; t.Length)
                porcentaje = ((double)d[m, n] / (double)s.Length);
            else
                porcentaje = ((double)d[m, n] / (double)t.Length);
            return d[m, n];
        }
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-3527958810253050829?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/-KfDdij6z7Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/3527958810253050829/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2011/10/algoritmo-distancia-hamming-levenshtein.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/3527958810253050829?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/3527958810253050829?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/-KfDdij6z7Q/algoritmo-distancia-hamming-levenshtein.html" title="Algoritmo Distancia Hamming Levenshtein en C#" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2011/10/algoritmo-distancia-hamming-levenshtein.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUCQH07eCp7ImA9WhdbFEk.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-1216012549531876155</id><published>2011-10-12T12:53:00.001-05:00</published><updated>2011-10-12T13:14:21.300-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T13:14:21.300-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mineria de Datos" /><title>Reducción Dimensiones Usando Entropía</title><content type="html">Para este algoritmo se utilizó el algoritmo de &lt;a href="http://www.blogdeprogramacion.com/2011/10/algoritmo-distancia-hamming-levenshtein.html"&gt;Distancia de Hamming&lt;/a&gt; y se realizaron todas las adecuaciones para ir buscando la mínima entropía eliminando columnas de datos hasta al final tener solamente 2 columnas. Tener en cuenta que como el desarrollo se realizo en c# las columnas inician en 0.&lt;br /&gt;
&lt;br /&gt;
Para ayuda de vectores se usó la librería &lt;a href="http://numerics.mathdotnet.com/" target="_blank"&gt;Math.Net Numerics&lt;/a&gt;&lt;br /&gt;
&lt;pre class="highlight"&gt;
public static string Entropy(ArrayList arrText)
{
    string retorno = "";
    //Total de columnas
    string sT = arrText[0].ToString();
    double F = (double)Tools.ContarEjemplos(sT, ",");
    double E = 0;
    int i, j = 0;
    DenseMatrix S = new DenseMatrix(arrText.Count, arrText.Count, 0);

    for (i = 0; i &lt; arrText.Count; i++)
    {
        for (j = i + 1; j &lt; arrText.Count; j++)
        {
            S[i, j] = Tools.HammingDistance(arrText[i].ToString().Replace(",", ""), arrText[j].ToString().Replace(",", "")) / F;
        }
    }
    //A diferencia de la formula en c# la matrix inicia en 0, 0
    for (i = 0; i &lt; arrText.Count - 1; i++)
    {
        for (j = i + 1; j &lt; arrText.Count; j++)
        {
            if (S[i, j] &gt; 0 &amp;&amp; S[i, j] &lt; 1)
            {
                E += (S[i, j] * Math.Log10(S[i, j]) + (1 - S[i, j]) * Math.Log10(1 - S[i, j]));
            }
        }
    }
    E = -1 * E;
    //Calcular las entropias eliminando una columna. Se guarda la minima.
    double MinE = E;
    double NewE = E;
    int indiceMinE = 0;
    double TempE = 0;
    int totalF = (int)F;
    for (int features = totalF; features &gt;= 2; features--)
    {
        F = features;
        indiceMinE = 0;
        for (int f = 0; f &lt; F; f++)
        {
            S.Clear();
            TempE = 0;

            for (i = 0; i &lt; arrText.Count; i++)
            {
                for (j = i + 1; j &lt; arrText.Count; j++)
                {
                    S[i, j] = Tools.HammingDistance(arrText[i].ToString().Replace(",", "").Remove(f, 1), arrText[j].ToString().Replace(",", "").Remove(f, 1)) / (F - 1);
                }
            }
            //A diferencia de la formula en c# la matrix inicia en 0, 0
            for (i = 0; i &lt; arrText.Count - 1; i++)
            {
                for (j = i + 1; j &lt; arrText.Count; j++)
                {
                    if (S[i, j] &gt; 0 &amp;&amp; S[i, j] &lt; 1)
                    {
                        TempE += (S[i, j] * Math.Log10(S[i, j]) + (1 - S[i, j]) * Math.Log10(1 - S[i, j]));
                    }
                }
            }
            TempE = -1 * TempE;
            if (Math.Abs(E - TempE) &lt; MinE)
            {
                MinE = Math.Abs(E - TempE);
                NewE = TempE;
                indiceMinE = f;
            }
        }
        //Se suma 1 al indice porque en c# los indices inician en 0
        retorno += "Columna con Entropia minima: " + (indiceMinE + 1).ToString() + "\n";
        //Eliminar la caracteristica del conjunto de datos
        for (i = 0; i &lt; arrText.Count; i++)
        {
            arrText[i] = arrText[i].ToString().Replace(",", "").Remove(indiceMinE, 1);
        }
        //Asignar el nuevo E
        E = NewE;
        MinE = E;
    }
    return retorno;
}
&lt;/pre&gt;
&lt;br /&gt;
Para la prueba de este algoritmo se usaron los siguientes datos como datos de prueba:&lt;br /&gt;
&lt;br /&gt;
X,1,U,5,P,A&lt;br /&gt;
Y,2,D,7,O,B&lt;br /&gt;
Y,2,U,8,Q,C&lt;br /&gt;
X,1,U,7,O,B&lt;br /&gt;
Z,3,P,8,Q,C&lt;br /&gt;
Y,2,P,5,P,A&lt;br /&gt;
X,3,U,5,P,A&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Resultados Obtenidos:&lt;/b&gt;&lt;br /&gt;
Columna con Entropía mínima: 4&lt;br /&gt;
Columna con Entropía mínima: 1&lt;br /&gt;
Columna con Entropía mínima: 3&lt;br /&gt;
Columna con Entropía mínima: 1&lt;br /&gt;
Columna con Entropía mínima: 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los resultados indican:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Iteración 1&lt;/b&gt;: La columna que minimiza la diferencia entre la entropía F y el valor correspondiente a la entropía sin esa columna es la 4. Eliminando esa columna del conjunto de datos obtenemos:&lt;br /&gt;
&lt;br /&gt;
X,1,U,P,A&lt;br /&gt;
Y,2,D,O,B&lt;br /&gt;
Y,2,U,Q,C&lt;br /&gt;
X,1,U,O,B&lt;br /&gt;
Z,3,P,Q,C&lt;br /&gt;
Y,2,P,P,A&lt;br /&gt;
X,3,U,P,A&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Iteración 2&lt;/b&gt;: La columna que minimiza la diferencia entre la entropía F y el valor correspondiente a la entropía sin esa columna es la 1. Eliminando esa columna del conjunto de datos obtenemos:&lt;br /&gt;
&lt;br /&gt;
1,U,P,A&lt;br /&gt;
2,D,O,B&lt;br /&gt;
2,U,Q,C&lt;br /&gt;
1,U,O,B&lt;br /&gt;
3,P,Q,C&lt;br /&gt;
2,P,P,A&lt;br /&gt;
3,U,P,A&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Iteración 3&lt;/b&gt;: La columna que minimiza la diferencia entre la entropía F y el valor correspondiente a la entropía sin esa columna es la 3. Eliminando esa columna del conjunto de datos obtenemos:&lt;br /&gt;
&lt;br /&gt;
1,U,A&lt;br /&gt;
2,D,B&lt;br /&gt;
2,U,C&lt;br /&gt;
1,U,B&lt;br /&gt;
3,P,C&lt;br /&gt;
2,P,A&lt;br /&gt;
3,U,A&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Iteración 4&lt;/b&gt;: La columna que minimiza la diferencia entre la entropía F y el valor correspondiente a la entropía sin esa columna es la 1. Eliminando esa columna del conjunto de datos obtenemos:&lt;br /&gt;
&lt;br /&gt;
U,A&lt;br /&gt;
D,B&lt;br /&gt;
U,C&lt;br /&gt;
U,B&lt;br /&gt;
P,C&lt;br /&gt;
P,A&lt;br /&gt;
U,A&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Iteración 5&lt;/b&gt;: La columna que minimiza la diferencia entre la entropía F y el valor correspondiente a la entropía sin esa columna es la 1. Eliminando esa columna del conjunto de datos obtenemos:&lt;br /&gt;
&lt;br /&gt;
A&lt;br /&gt;
B&lt;br /&gt;
C&lt;br /&gt;
B&lt;br /&gt;
C&lt;br /&gt;
A&lt;br /&gt;
A&lt;br /&gt;
&lt;br /&gt;
Al visualizar los resultados obtenidos podemos tener una visualización inicial de un ranking de importancia para cada una de las columnas o características de nuestro conjunto de datos. Esto por si deseamos posteriormente reducir la dimensión de este.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-1216012549531876155?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/2LdwTRVi2B0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/1216012549531876155/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2011/10/reduccion-dimensiones-usando-entropia.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/1216012549531876155?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/1216012549531876155?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/2LdwTRVi2B0/reduccion-dimensiones-usando-entropia.html" title="Reducción Dimensiones Usando Entropía" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2011/10/reduccion-dimensiones-usando-entropia.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUCQH07eip7ImA9WhdbFEk.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-599943690216133607</id><published>2011-10-12T12:45:00.001-05:00</published><updated>2011-10-12T13:14:21.302-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T13:14:21.302-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mineria de Datos" /><title>Minimización de Error en Discretización Binning</title><content type="html">Esta implementación se realizó en C# con ayuda de la librería &lt;a href="http://numerics.mathdotnet.com/" target="_blank"&gt;Math.Net Numerics&lt;/a&gt; para matrices y vectores.&lt;br /&gt;
&lt;br /&gt;
Los pasos que se siguieron fueron los siguientes:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. &lt;/b&gt;Organización de los datos de menor a mayor&lt;br /&gt;
&lt;b&gt;2. &lt;/b&gt;Ejecución del algoritmo &lt;a href="http://www.blogdeprogramacion.com/2011/10/algoritmo-discretizacion-binning.html"&gt;BIN Equal-Depth&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;3. &lt;/b&gt;Realizar medición del error inicial y realizar todos los posibles movimientos de ítems de izquierda a derecha para ver si se minimiza el error.&lt;br /&gt;
&lt;b&gt;4. &lt;/b&gt;Realizar todos los posibles movimientos de derecha a izquierda para ver si se minimiza el error.&lt;br /&gt;
&lt;b&gt;5. &lt;/b&gt;En caso de que el error luego de efectuar los movimientos sea inferior al error inicial se retorna al paso 3. Si ya el error no se minimiza más se finaliza. El error se mide en base a la suma de las desviaciones con respecto al promedio en cada uno de los grupos.&lt;br /&gt;
&lt;pre class="highlight"&gt;public static DenseVector[] MinimizeER(DenseVector[] vBins)
{
    DenseVector[] vOutput = new DenseVector[vBins.Length];
    int i = 0;
    int j = 0;

    double Error = CalcularTotalError(vBins);
    double ErrorInicial = Error;
    double ErrorFinal = 0;
    //While Global para volver a iterar si el error todavia se puede disminuir
    while (ErrorInicial &amp;gt; ErrorFinal)
    {
        ErrorInicial = Error;
        //Realizar ajustes en movimientos de items de Izquierda a Derecha
        for (j = 0; j &amp;lt; vBins.Length - 1; j++)
        {
            for (i = 0; i &amp;lt; vBins.Length; i++)
            {
                if (i == j)
                {
                    vOutput[i] = (DenseVector)vBins[i].SubVector(0, vBins[i].Count - 1);
                    //al siguiente vector se le agrega el ultimo item del anterior y la totalidad del siguiente
                    //Se convierte en array antes de iniciar
                    var list = new List&lt;double&gt;();
                    list.AddRange(vBins[i].SubVector(vBins[i].Count - 1, 1).ToArray());
                    list.AddRange(vBins[i + 1].ToArray());
                    vOutput[i + 1] = new DenseVector(list.ToArray());
                    i++; //Esta suma es necesaria ya que si en el i+1 se nos iba por el else, se perdia lo realizado.
                }
                else
                {
                    vOutput[i] = vBins[i];
                }
            }
            //Evaluar el error. Si se redujo volver a realizar el proceso con el mismo j
            if (Error &amp;gt; CalcularTotalError(vOutput))
            {
                j = j - 1; //Se devuelve para que ensaye moviendo en el mismo par de bins
                Error = CalcularTotalError(vOutput);
                vBins = (DenseVector[])vOutput.Clone();
            }
        }

        //Realizar ajustes en movimientos de items de Derecha a Izquierda
        for (j = 1; j &amp;lt; vBins.Length; j++)
        {
            for (i = 0; i &amp;lt; vBins.Length; i++)
            {
                if (i == j)
                {
                    vOutput[i] = (DenseVector)vBins[i].SubVector(1, vBins[i].Count - 1);
                    //al siguiente vector se le agrega el ultimo item del anterior y la totalidad del siguiente
                    //Se convierte en array antes de iniciar
                    var list = new List&lt;double&gt;();
                    list.AddRange(vBins[i - 1].ToArray());
                    list.AddRange(vBins[i].SubVector(0, 1).ToArray());
                    vOutput[i - 1] = new DenseVector(list.ToArray());
                }
                else
                {
                    vOutput[i] = vBins[i];
                }
            }
            //Evaluar el error. Si se redujo volver a realizar el proceso con el mismo j
            if (Error &amp;gt; CalcularTotalError(vOutput))
            {
                j = j - 1; //Se devuelve para que ensaye moviendo en el mismo par de bins
                Error = CalcularTotalError(vOutput);
                vBins = (DenseVector[])vOutput.Clone();
            }
        }
        ErrorFinal = Error;
    }
    return vOutput;
}
&lt;/double&gt;&lt;/double&gt;&lt;/pre&gt;
&lt;br /&gt;
Iniciando con:&lt;br /&gt;
Bin 1: 1,1,2,2,3,3&lt;br /&gt;
Bin 2: 3,4,5,5,5&lt;br /&gt;
Bin 3: 5,7,8,9,10&lt;br /&gt;
&lt;br /&gt;
Se Obtuvo:&lt;br /&gt;
Bin 1: 1,1,2,2,3,3,3,4&lt;br /&gt;
Bin 2: 5,5,5,5,7&lt;br /&gt;
Bin 3: 8,9,10&lt;br /&gt;
&lt;br /&gt;
Respecto a lo obtenido en este último algoritmo, creo que teniendo en cuenta que se nos da la cantidad de Bins, se puede obtener una de las clasificaciones óptimas, o una aproximación muy cercana, teniendo en cuenta que minimizamos el error total.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-599943690216133607?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/7Hp4vfFNarY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/599943690216133607/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2011/10/minimizacion-error-discretizacion.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/599943690216133607?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/599943690216133607?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/7Hp4vfFNarY/minimizacion-error-discretizacion.html" title="Minimización de Error en Discretización Binning" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2011/10/minimizacion-error-discretizacion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EEQ3k9eyp7ImA9WhdbFEk.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-9218451442380009143</id><published>2011-10-12T12:34:00.001-05:00</published><updated>2011-10-12T12:46:42.763-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T12:46:42.763-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mineria de Datos" /><title>Algoritmos de Discretización Binning</title><content type="html">En &lt;a href="http://es.wikipedia.org/wiki/Miner%C3%ADa_de_datos" target="_blank"&gt;Mineria de Datos&lt;/a&gt; una de las técnicas que podemos emplear para realizar la discretización de nuestros datos es la de separar nuestros datos en BINs (Binning discretization).&lt;br /&gt;
&lt;br /&gt;
Esta discretización hace parte del pre-procesamieto inicial que debemos realizar a los datos.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de los algoritmos se realizó en .NET con el lenguaje c#. Para ayuda de vectores se usó la librería &lt;a href="http://numerics.mathdotnet.com/" target="_blank"&gt;Math.Net Numerics&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Para los resultados aquí mostrados se usaron 3 Bins y se usaron los siguientes datos:&lt;br /&gt;
3,2,1,5,4,3,1,7,5,3,8,10,9,5,5,2&lt;br /&gt;
&lt;br /&gt;
Para el algoritmo BIN se implementaron los siguientes modos:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Anchos Iguales (BIN Equal-Width)&lt;/b&gt;&lt;br /&gt;
Este algoritmo organiza los Bins en grupos donde el salto de cada uno es: (maximo-minimo)/N, donde N es el numero de bins que se desean.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="highlight"&gt;public static DenseVector[] ObtenerBinsEqualWidth(double[] data, int nBins)
{
    int i = 0;

    double maximo = data.Max();
    double minimo = data.Min();

    //Se organizan los Bins con saltos iguales
    double salto = (maximo - minimo) / nBins;

    //Organizar de menor a mayor el arreglo
    var sortedlData = data.OrderBy(x =&amp;gt; x);

    DenseVector[] vBins = new DenseVector[0];

    i = 0;
    double inicial = minimo;
    while (i &amp;lt; nBins)
    {
        //Redimensiona el arreglo para el nuevo BIN y luego asigna los items cuyo index se encuentre en el rango.
        Array.Resize(ref vBins, vBins.Length + 1);
        vBins[i] = new DenseVector(sortedlData.Where((x, index) =&amp;gt; x &amp;gt;= inicial &amp;amp;&amp;amp; x &amp;lt;= inicial + salto).ToArray());
        i++;
        inicial = i * salto + 1;
    }

    return vBins;
}
&lt;/pre&gt;
&lt;br /&gt;
Resultados:&lt;br /&gt;
Bin 1: 1,1,2,2,3,3,3,4&lt;br /&gt;
Bin 2: 5,5,5,5,7,8&lt;br /&gt;
Bin 3: 9,10&lt;br /&gt;
&lt;br /&gt;
Como
 el salto en este caso 10-1/3 es 3 el primer grupo tiene de 1 hasta 
1+3=4, el segundo tiene desde 5 hasta 5+3=8 y el ultimo tiene los 
restantes.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Igualando Cantidad x Grupo (BIN Equal-Depth&lt;/b&gt;)&lt;br /&gt;
Este algoritmo distribuye uniformemente los datos dentro de los grupos tratando de que cada grupo quede con la misma cantidad de datos.&lt;br /&gt;
&lt;br /&gt;
En caso de no lograr asignar la misma cantidad de datos a cada grupo, los primeros grupos quedan con un dato de más.&lt;br /&gt;
&lt;pre class="highlight"&gt;public static DenseVector[] ObtenerBinsEqualDepth(double[] data, int nBins)
{
    int i = 0;
    //Organizar de menor a mayor el arreglo
    var sortedlData = data.OrderBy(a =&amp;gt; a);

    //BIN Equal-Depth
    int tam, res;
    DenseVector[] vBins = new DenseVector[0];
    //Realizar division Entera y Residuo para sacar tamaño de grupos
    tam = Math.DivRem(data.Length, nBins, out res);
    i = 0;
    int indexGroup = 0;
    if (res &amp;gt; 0)
    {
        while (res &amp;gt; 0)
        {
            //Redimensiona el arreglo para el nuevo BIN y luego asigna los items cuyo index se encuentre en el rango. Se suma uno al tamaño por el residuo
            Array.Resize(ref vBins, vBins.Length + 1);
            vBins[i] = new DenseVector(sortedlData.Where((f, index) =&amp;gt; index &amp;gt;= indexGroup &amp;amp;&amp;amp; index &amp;lt; indexGroup + tam + 1).ToArray());
            indexGroup = indexGroup + tam + 1;
            i++;
            res--;
        }
    }
    while (i &amp;lt; nBins)
    {
        //Redimensiona el arreglo para el nuevo BIN y luego asigna los items cuyo index se encuentre en el rango.
        Array.Resize(ref vBins, vBins.Length + 1);
        vBins[i] = new DenseVector(sortedlData.Where((f, index) =&amp;gt; index &amp;gt;= indexGroup &amp;amp;&amp;amp; index &amp;lt; indexGroup + tam).ToArray());
        indexGroup = indexGroup + tam;
        i++;
    }

    return vBins;
}
&lt;/pre&gt;
&lt;br /&gt;
Resultados:&lt;br /&gt;
Bin 1: 1,1,2,2,3,3&lt;br /&gt;
Bin 2: 3,4,5,5,5&lt;br /&gt;
Bin 3: 5,7,8,9,10&lt;br /&gt;
&lt;br /&gt;
En este caso se trataron de distribuir la misma cantidad de números en cada bin. Como en total eran 16 datos se distribuyo 6 en el primer grupo y 5 en los dos siguientes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Grupos con Suavizado (BIN with Smoothing&lt;/b&gt;)&lt;br /&gt;
Para este algoritmo se dejaron las opciones de valor medio y promedio de los datos.&lt;br /&gt;
&lt;br /&gt;
En los dos casos se ejecuta primero el BIN Equal-Depth y sobre estos resultados se realiza el remplazo en cada bin, ya sea por el valor medio o por el promedio.&lt;br /&gt;
&lt;pre class="highlight"&gt;public static DenseVector[] ObtenerBinsStatistic(DenseVector[] vBins, int type)
{
    DenseVector[] vOutput = new DenseVector[vBins.Length];
    int i = 0;
    foreach (DenseVector bin in vBins)
    {
        var statistics = new DescriptiveStatistics(bin);
        if (type == 1)
        {
            vOutput[i] = new DenseVector(bin.Count, statistics.Median);
        }
        else
        {
            vOutput[i] = new DenseVector(bin.Count, statistics.Mean);
        }
        i++;
    }
    return vOutput;
}
&lt;/pre&gt;
&lt;br /&gt;
Resultados con el valor medio:&lt;br /&gt;
Bin 1: 2,2,2,2,2,2&lt;br /&gt;
Bin 2: 5,5,5,5,5&lt;br /&gt;
Bin 3: 8,8,8,8,8&lt;br /&gt;
&lt;br /&gt;
Si nos fijamos en estos bins el valor corresponde justo al valor medio de los resultados obtenidos con el algoritmo de BIN Equal-Depth.&lt;br /&gt;
&lt;br /&gt;
Resultados con el promedio:&lt;br /&gt;
Bin 1: 2,2,2,2,2,2&lt;br /&gt;
Bin 2: 4.4,4.4,4.4,4.4,4.4&lt;br /&gt;
Bin 3: 7.8,7.8,7.8,7.8,7.8&lt;br /&gt;
&lt;br /&gt;
Estos resultados corresponden al valor promedio&amp;nbsp; de los resultados obtenidos con el algoritmo de BIN Equal-Depth.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-9218451442380009143?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/BXV7czUJ4To" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/9218451442380009143/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2011/10/algoritmo-discretizacion-binning.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/9218451442380009143?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/9218451442380009143?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/BXV7czUJ4To/algoritmo-discretizacion-binning.html" title="Algoritmos de Discretización Binning" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2011/10/algoritmo-discretizacion-binning.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UGRXw6eSp7ImA9WhdbFE4.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-6120799887007825316</id><published>2011-02-20T19:21:00.001-05:00</published><updated>2011-10-12T12:07:04.211-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T12:07:04.211-05:00</app:edited><title>Publicación en Twitter con ASP.NET</title><content type="html">En un post anterior habia descrito la forma de publicar post mediante programación, pero Twitter cambio la forma de hacerlo. Ahora vamos a hacerlo mediante la libreria &lt;a href="http://twittervb.codeplex.com/" rel="nofollow" target="_blank"&gt;TwitterVB&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Primero debemos descargar la dll llamada TwitterVB.dll desde &lt;a href="http://twittervb.codeplex.com/" rel="nofollow" target="_blank"&gt;TwitterVB&lt;/a&gt; y agregarla a nuestro proyecto en la carpeta bin.&lt;br /&gt;
&lt;br /&gt;
Luego accedemos a Twitter y luego al link https://dev.twitter.com/apps para registrar nuestra nueva aplicación que se actualizará desde código. Una vez registremos la aplicación vamos a obtener dos datos que vamos a necesitar. El primero es el &lt;b&gt;Customer key&lt;/b&gt; y el segundo es el &lt;b&gt;Customer Secret&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ya desde programación realizamos lo siguiente:&lt;br /&gt;
&lt;pre class="highlight"&gt;TwitterVB2.TwitterAPI tw = new TwitterVB2.TwitterAPI();
string url = tw.GetAuthorizationLink(sCustomerKey, sCustomerSecret);
&lt;/pre&gt;
&lt;br /&gt;
La url que obtenemos desde programación la invocamos en nuestro navegador... esto nos mostrará una ventana de validación de permisos de Twitter. Hacemos clic en permitir acceso y esto nos mostrará un PIN de validación:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-dVFsYr9lkSM/TWGQgALuPaI/AAAAAAAAAKg/4i7dAPMN-oI/s1600/twitter1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="170" src="http://2.bp.blogspot.com/-dVFsYr9lkSM/TWGQgALuPaI/AAAAAAAAAKg/4i7dAPMN-oI/s400/twitter1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
El numero de validación nos servirá para obtener el Token y el TokenSecret. Estos los necesitamos guardar ya que son los que nos permitiran publicar Twitts. Actualmente estos datos son persistentes por lo cual podemos almacenarlos, pero si Twitter llegara a cambiar la autenticación probablemente deberiamos actualizarlos. Yo llevo varios meses funcionando asi y todavia no han cambiado.&lt;br /&gt;
&lt;br /&gt;
Para obtener el Token y el TokenSecret se debe ejecutar:&lt;br /&gt;
&lt;pre class="highlight"&gt;bool isValidPIN = tw.ValidatePIN("4444444");

if (isValidPIN) {
  string OAuthToken = tw.OAuth_Token();
  string OAuthTokenSecret = tw.OAuth_TokenSecret();
}
&lt;/pre&gt;
Una vez ya tenga el token y el tokenSecret puede publicar los mensajes por medio de:&lt;br /&gt;
&lt;pre class="highlight"&gt;
tw.AuthenticateWith(ConsumerKey, ConsumerKeySecret, OAuthToken, OAuthTokenSecret);
tw.Update("Mi primer mensaje");
&lt;/pre&gt;
Y ya... Como comentaba tanto el Token como el TokenSecret hasta el momento son persistentes por lo cual podria guardarlos en un archivo de configuración, base de datos o llamarlos directamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-6120799887007825316?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/sN-t7lRJ_B4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/6120799887007825316/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2011/02/publicacion-en-twitter-con-aspnet.html#comment-form" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6120799887007825316?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6120799887007825316?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/sN-t7lRJ_B4/publicacion-en-twitter-con-aspnet.html" title="Publicación en Twitter con ASP.NET" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-dVFsYr9lkSM/TWGQgALuPaI/AAAAAAAAAKg/4i7dAPMN-oI/s72-c/twitter1.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2011/02/publicacion-en-twitter-con-aspnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAESXo4fip7ImA9Wx9XFk8.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-6417456565825765182</id><published>2011-01-09T20:51:00.001-05:00</published><updated>2011-01-09T20:58:28.436-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T20:58:28.436-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><title>Guardar comentarios con api de facebook</title><content type="html">La funcionalidad de guardar comentarios de uno de mis portales se desactivo debido a actualizaciones en la api de facebook.&lt;br /&gt;
&lt;br /&gt;
Aunque la funcionalidad de escribir los comentarios se mantuvo intacta, la de guardarlos en mi base de datos se perdió.&lt;br /&gt;
&lt;br /&gt;
El código que tenia era algo como lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;lt;script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt; &lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;lt;div id="divfb_connect"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fbcDiv = document.getElementById('divfb_connect');&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fbcUrl = 'http://www.mysite.com' + location.pathname;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fbcPath = location.pathname;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fbcTitle = document.title;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fbcXid = 'asdfqwer';&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fbcDiv.innerHTML = '&amp;lt;fb:comments numposts="10" candelete="true" canpost="true" url="' + fbcUrl + '" title="' + fbcTitle + '" xid="' + fbcXid + '" quiet="true"&amp;gt;&amp;lt;/fb:comments&amp;gt;';&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.init('21asdf231asd23f1', "xd_receiver.html");&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB_RequireFeatures(["Comments"], function() {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.CommentClient.add_onComment(function(comment) {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var url = 'mypage.aspx?id=' + 279763 + '&amp;amp;comments=' + comment.post + '&amp;amp;user=' + comment.user;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.get(url, "", function handle_comments(data, status) {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //code here&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Investigando encontré que habia que realizar un cambio para usar la nueva versión. En esta se debia usar:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;lt;div id="fb-root"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; window.fbAsyncInit = function() {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.init({appId: 'your app id', status: true, cookie: true,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xfbml: true});&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; };&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; (function() {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var e = document.createElement('script'); e.async = true;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.src = document.location.protocol +&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '//connect.facebook.net/en_US/all.js';&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; document.getElementById('fb-root').appendChild(e);&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; }());&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Y para poder controlar el evento de cuando se agrega un comentario se usa la función:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;FB.Event.subscribe('comments.add', function(response) {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert('Comment Added')&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;});&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La cual debe ir dentro de la función de window.fbAsyncInit despues de la función init, y dentro del fb:comment hay que agregar la propiedad notify en true.&lt;br /&gt;
&lt;br /&gt;
Pero ahí fue donde iniciaron los problemas. El objeto response no posee propiedades que permitan acceder ni al id del usuario ni al texto que escribio como comentario. Pero he aqui una solución ingeniosa... la idea es obtener el comentario que se acabo de escribir. El código queda:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;lt;div id="aclfb_connect"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fbcDiv = document.getElementById('aclfb_connect');&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fbcUrl = 'http://www.mysite.com' + location.pathname;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fbcPath = location.pathname;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fbcTitle = document.title;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fbcXid = 'asdfqwer';&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fbcDiv.innerHTML = '&amp;lt;fb:comments numposts="10" candelete="true" canpost="true" url="' + fbcUrl + '" title="' + fbcTitle + '" xid="' + fbcXid + '" quiet="true" notify="true"&amp;gt;&amp;lt;/fb:comments&amp;gt;&amp;lt;div id="fb-root"&amp;gt;&amp;lt;/div&amp;gt;';&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.fbAsyncInit = function () {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.init({ appId: '21asdf231asd23f1', status: true, cookie: true,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xfbml: true&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.Event.subscribe('comments.add', function (resp) {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.api({&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; method: 'comments.get', &lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xid: fbcXid&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function (response) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var fb_commentData = {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xid: response[0].xid,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fromid: response[0].fromid,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time: response[0].time,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text: response[0].text,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id: response[0].id,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; username: response[0].username,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reply_xid: response[0].reply_xid,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; post_id: response[0].post_id,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; app_id: response[0].app_id,&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object_id: response[0].object_id&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var url = 'mypage.aspx?id='+ response[0].xid&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;+'&amp;amp;comments=' + response[0].text + '&amp;amp;user=' + response[0].fromid + '&amp;amp;id=' + response[0].id + '&amp;amp;username=' + response[0].username + '&amp;amp;reply_xid=' + response[0].reply_xid + '&amp;amp;post_id=' + response[0].post_id;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.get(url, "", function handle_comments(data, status) {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //code here&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (function () {&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var e = document.createElement('script'); e.async = true;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.src = document.location.protocol +&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '//connect.facebook.net/en_US/all.js';&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; document.getElementById('fb-root').appendChild(e);&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } ());&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Y por fin! logré guardar los comentarios que los usuarios escribian en mi portal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-6417456565825765182?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/LoF3yMt6HBc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/6417456565825765182/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2011/01/guardar-comentarios-con-api-de-facebook.html#comment-form" title="5 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6417456565825765182?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6417456565825765182?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/LoF3yMt6HBc/guardar-comentarios-con-api-de-facebook.html" title="Guardar comentarios con api de facebook" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2011/01/guardar-comentarios-con-api-de-facebook.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08DQXYzeSp7ImA9Wx9SGEw.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-3718094112506203360</id><published>2010-12-08T08:44:00.000-05:00</published><updated>2010-12-08T08:44:30.881-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-08T08:44:30.881-05:00</app:edited><title>IIRF en Windows 2008 64bits IIS 7.X</title><content type="html">En nuestro último post del IIRF describimos la manera en que se realiza la &lt;a href="http://www.blogdeprogramacion.com/2010/08/ionics-isapi-rewrite-filter-2-1.html"&gt;instalación del IIRF 2.1&lt;/a&gt; en Intertet Information Server sobre Windows de 32bits, pero he encontrado que en Windows 2008 de 64 bits existe un problema ya que si se sigue el mismo procedimiento, el sitio no va a funcionar.&lt;br /&gt;
&lt;br /&gt;
Existen dos posibles soluciones.&lt;br /&gt;
&lt;br /&gt;
La primera es usar el mismo procedimiento, pero en opciones avanzadas del Applitation Pool colocar en True la caracteristica llamada "Enable 32-Bit Applications".&lt;br /&gt;
&lt;br /&gt;
La segunda opción es descargar el paquete de 64bits (Se descarga de la misma página seleccionando la que finaliza en x64-bin.zip) y colocar la dll IIRF.dll en la ruta: "C:\Windows\SysWOW64\inetsrv". Los permisos son los mismos y ya, con esto deberia funcionar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-3718094112506203360?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/3B9Nj5HxGP4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/3718094112506203360/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/12/iirf-en-windows-2008-64bits-iis-7x.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/3718094112506203360?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/3718094112506203360?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/3B9Nj5HxGP4/iirf-en-windows-2008-64bits-iis-7x.html" title="IIRF en Windows 2008 64bits IIS 7.X" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/12/iirf-en-windows-2008-64bits-iis-7x.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAMSXgzeSp7ImA9Wx5XEEg.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-5311781363691733271</id><published>2010-09-09T12:35:00.003-05:00</published><updated>2010-09-09T12:36:28.681-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-09T12:36:28.681-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Crear Base de Datos ASPState</title><content type="html">Luego de completar la instalación del framework 2.0 de .NET si necesitamos crear la base de datos ASPState debemos abrir el command y navegar a la ruta:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;C:\Windows\Microsoft.NET\Framework\v2.0.50727&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Ya en esta ruta podemos ejecutar:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: plain" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;aspnet_regsql.exe -ssadd -sstype p -S {Server} -U {Username} -P {Password}&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="brush: plain" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-5311781363691733271?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/RJnC2CFrwgU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/5311781363691733271/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/09/crear-base-de-datos-aspstate.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5311781363691733271?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5311781363691733271?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/RJnC2CFrwgU/crear-base-de-datos-aspstate.html" title="Crear Base de Datos ASPState" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/09/crear-base-de-datos-aspstate.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYHR3cyfip7ImA9Wx5SGEw.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-3849477162836251856</id><published>2010-08-14T15:35:00.000-05:00</published><updated>2010-08-14T15:35:36.996-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-14T15:35:36.996-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Server 2003" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Server 2008" /><title>Crear enlace entre carpetas windows</title><content type="html">A veces es necesario definir una ruta en windows y que esta ruta permita ser manejada por ejemplo desde FTP o RED para acceder a otra ruta fisica en el disco. Para esto existe el comando mklink dentro de windows vista y posteriores.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo si tenemos una ruta c:\sitios\entrada\usuarios\ftp\ftp_user1\data\ y queremos que se pueda acceder desde c:\ftp_user1_data\ podemos hacerlo por medio del siguiente comando:&lt;br /&gt;
&lt;br /&gt;
C:\sitios\entrada\usuarios\ftp\ftp_user1\data\&amp;gt;MKlink /D web c:\ftp_user1_data\&lt;br /&gt;
symbolic link created for data &amp;lt;&amp;lt;===&amp;gt;&amp;gt; c:\ftp_user1_data&lt;br /&gt;
&lt;br /&gt;
El comando nos permite crear diferentes tipos de enlaces y tiene las siguientes opciones:&lt;br /&gt;
&lt;br /&gt;
MKLINK [[/D] | [/H] | [/J]] Link Target&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /D&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Creates a directory symbolic link.&amp;nbsp; Default is a file&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; symbolic link.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /H&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Creates a hard link instead of a symbolic link.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /J&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Creates a Directory Junction.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Link&amp;nbsp;&amp;nbsp;&amp;nbsp; specifies the new symbolic link name.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target&amp;nbsp; specifies the path (relative or absolute) that the new link refers to.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-3849477162836251856?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/lDm06auqipU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/3849477162836251856/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/08/crear-enlace-entre-carpetas-windows.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/3849477162836251856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/3849477162836251856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/lDm06auqipU/crear-enlace-entre-carpetas-windows.html" title="Crear enlace entre carpetas windows" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/08/crear-enlace-entre-carpetas-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08BRnk5fCp7ImA9Wx5SGEw.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-3551672602243578657</id><published>2010-08-14T13:50:00.000-05:00</published><updated>2010-08-14T13:50:57.724-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-14T13:50:57.724-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IIRF" /><title>Ionics Isapi Rewrite Filter 2 1</title><content type="html">En nuestro post &lt;a href="http://www.blogdeprogramacion.com/2009/09/urls-sin-extension-para-sitios-aspnet.html"&gt;Urls sin extensión para sitios ASP.NET &lt;/a&gt; explicabamos la manera en que se debe configurar la extensión isapi Ionics Isapi Rewrite Filter 1.2, pero ya existe la versión 2.1 la cual tiene algunos cambios con respecto a su versión anterior.&lt;br /&gt;
&lt;br /&gt;
Ya con esta nueva versión, tenemos la posibilidad de tener 2 archivos .ini de configuración. El primero colocado en junto con la dll IIRF.dll llamado &lt;b&gt;&lt;a href="" name="Section1"&gt;&lt;b&gt;IirfGlobal.ini&lt;/b&gt;&lt;/a&gt;&lt;/b&gt; que sirve para dar parametros globales de configuración y otro que se debe llamar iirf.ini que debe ir en la raiz de nuestra aplicación web. El ini global es opcional, el obligatorio es el que se debe encontrar en la raiz de nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="" name="Section1"&gt;&lt;/a&gt;&lt;/b&gt;Esto para tenerlo en cuenta en caso de tener planeada alguna migración o upgrade de la versión.&lt;br /&gt;
&lt;b&gt;&lt;a href="" name="Section1"&gt;&lt;b&gt;&lt;/b&gt;&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-3551672602243578657?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/0aFlH3YyGbI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/3551672602243578657/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/08/ionics-isapi-rewrite-filter-2-1.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/3551672602243578657?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/3551672602243578657?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/0aFlH3YyGbI/ionics-isapi-rewrite-filter-2-1.html" title="Ionics Isapi Rewrite Filter 2 1" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/08/ionics-isapi-rewrite-filter-2-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cCR3Y5eyp7ImA9Wx5SF0Q.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-6771417134377277531</id><published>2010-08-14T09:11:00.000-05:00</published><updated>2010-08-14T09:11:06.823-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-14T09:11:06.823-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>WebDev WebServer Visual Studio 2010</title><content type="html">Dentro de Visual Studio 2010 ahora tenemos 2 diferentes WebDev.WebServer que podemos usar. Ellos se encuentran en la ruta:&lt;br /&gt;
&lt;br /&gt;
C:\Program Files\Common Files\microsoft shared\DevServer\10.0\&lt;br /&gt;
&lt;br /&gt;
El primero de ellos se llama &lt;b&gt;WebDev.WebServer20.EXE&lt;/b&gt; y lo podemos usar en caso de proyectos ASP.NET versiones 2.0, 3.0 o 3.5&lt;br /&gt;
&lt;br /&gt;
El segundo se llama&amp;nbsp; &lt;b&gt;WebDev.WebServer40.EXE&lt;/b&gt; y lo podemos usar en caso de proyectos ASP.NET versiones 4.0&lt;br /&gt;
&lt;br /&gt;
Este  servidor web posee diferentes opciones que nos permiten por ejemplo  elegir si queremos que nuestro proyecto arranque en la raiz de un sitio  web, arranque como directorio virtual, tener un puerto personalizado  especifico, etc.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo actualmente yo lo uso  dentro del entorno del visual studio, ejecutandolo por medio del menú  Tools &amp;gt; External Tools...&lt;br /&gt;
&lt;br /&gt;
Si lo queremos programar allí podemos hacer clic en el botón Add, y luego diligenciar los campos de Title, Command y Argument.&lt;br /&gt;
&lt;br /&gt;
En mi caso los dejé como sigue:&lt;br /&gt;
Title: &lt;i&gt;My Web Site&lt;/i&gt;&lt;br /&gt;
Command: &lt;i&gt;C:\Program Files\Common Files\microsoft shared\DevServer\10.0\WebDev.WebServer40.EXE&lt;/i&gt;&lt;br /&gt;
Argument: &lt;i&gt;/port:3000 /path:"D:\1_SITES\MyWebSite" /vpath:"/"&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_MsPOzrdx9Yk/TGahfO4EeKI/AAAAAAAAAJc/MyB2Exbifa8/s1600/Tools.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="390" src="http://1.bp.blogspot.com/_MsPOzrdx9Yk/TGahfO4EeKI/AAAAAAAAAJc/MyB2Exbifa8/s400/Tools.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Luego  dentro del sitio web es necesario especificar que deseamos un custom  web server y para esto hacemos clic derecho sobre nuestro proyecto web y  luego en la opción &lt;b&gt;Property Pages&lt;/b&gt;, allí buscamos las opciones de inicio &lt;b&gt;Start Options&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Dentro de la sección de &lt;b&gt;Server&lt;/b&gt; seleccionamos &lt;b&gt;Use custom server&lt;/b&gt; y especificamos la url.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_MsPOzrdx9Yk/TGahgz0PC9I/AAAAAAAAAJk/hLHkm8zM5Os/s1600/Properties.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="230" src="http://3.bp.blogspot.com/_MsPOzrdx9Yk/TGahgz0PC9I/AAAAAAAAAJk/hLHkm8zM5Os/s400/Properties.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Ya  con esto podemos tener nuestro proyecto con servidor personalizado al  cual podemos especificarle puerto, path y virtual path. Siempre antes de  iniciar a ejecutar nuestro proyecto debemos iniciar este web server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-6771417134377277531?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/KyvbB9P4bos" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/6771417134377277531/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/08/webdev-webserver-visual-studio-2010.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6771417134377277531?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6771417134377277531?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/KyvbB9P4bos/webdev-webserver-visual-studio-2010.html" title="WebDev WebServer Visual Studio 2010" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_MsPOzrdx9Yk/TGahfO4EeKI/AAAAAAAAAJc/MyB2Exbifa8/s72-c/Tools.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/08/webdev-webserver-visual-studio-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UAQXo_fip7ImA9Wx5SF0Q.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-3938386423146149473</id><published>2010-07-22T19:47:00.004-05:00</published><updated>2010-08-14T09:14:00.446-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-14T09:14:00.446-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>Conocer IP y hostname del cliente en ASP.NET</title><content type="html">El presente post pretende explicar el funcionamiento de los sitios que permiten identicicar &lt;a href="http://miip.co/"&gt;cual es la ip publica&lt;/a&gt; de los usuarios en internet. &lt;br /&gt;
&lt;br /&gt;
Para obtener la IP de un usuario que está navegando en un sitio Web ASP.NET se puede realizar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
Acceder al dato del objeto "Request.UserHostAddress", por ejemplo&lt;br /&gt;
&lt;br /&gt;
string sIP = Request.UserHostAddress;&lt;br /&gt;
&lt;br /&gt;
ó también con:&lt;br /&gt;
&lt;br /&gt;
string sIP = Request.ServerVariables["REMOTE_ADDR"].ToString();&lt;br /&gt;
&lt;br /&gt;
Este procedimiento nos permite obtener la ip pública del usuario que está visitando nuestro sitio web.&lt;br /&gt;
&lt;br /&gt;
Si adicional a la IP queremos conocer el host name (HostName) o nombre del equipo con el cual este está siendo identificado en internet podemos hacer lo siguiente:&lt;br /&gt;
&lt;br /&gt;
string HostName =System.Net.Dns.GetHostByAddress(Request.UserHostAddress).HostName;&lt;br /&gt;
&lt;br /&gt;
La función "System.Net.Dns.GetHostByAddress" obtiene el nombre del host por medio de su IP.&lt;br /&gt;
&lt;br /&gt;
Un ejemplo de esto funcionando es el sitio &lt;a href="http://miip.co/"&gt;miip.co&lt;/a&gt; que permite a los usuarios &lt;a href="http://miip.co/"&gt;conocer su ip publica&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-3938386423146149473?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/ehyiV2Z-kvI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/3938386423146149473/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/07/conocer-ip-hostname-cliente-aspnet.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/3938386423146149473?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/3938386423146149473?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/ehyiV2Z-kvI/conocer-ip-hostname-cliente-aspnet.html" title="Conocer IP y hostname del cliente en ASP.NET" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/07/conocer-ip-hostname-cliente-aspnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcNSXg9fCp7ImA9WxFRGEk.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-1881751760960529633</id><published>2010-05-01T15:50:00.009-05:00</published><updated>2010-05-02T18:31:38.664-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T18:31:38.664-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="LINQ" /><title>Agregar opcion adicional DropDownList LINQ</title><content type="html">Normalmente en nuestras aplicaciones tenemos tablas que nos guardan los "diccionarios" que eventualmente necesitamos cargar en un DropDownList o un ListBox.&lt;br /&gt;
&lt;br /&gt;
Cuando cargamos los datos al DropDown, en muchas ocasiones es muy útil colocar la opción por defecto, una opción como "Seleccione", "Choose", "Elija uno" o con algun texto informativo que le indique al usuario que debe hacer clic en el control y seleccionar una de las opciones.&lt;br /&gt;
&lt;br /&gt;
En Linq podemos adecuar estas opciones de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #38761d;"&gt;//Creamos una instancia de nuestro DataContextClass y obtenemos los datos del diccionario dandole nombre a cada uno de los campos:&lt;/div&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DCC db = new DCC();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var DiccionarioX = (from l in db.Dic_X orderby l.Nombre select new { pk_id = l.Pk_id, Nombre = l.Nombre });&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #38761d;"&gt;//Creamos nuestro item seleccione asignandole los mismos nombres y lo concatenamos con nuestro resultado de diccionario utilizando la propiedad .ToList(). Esto lo asignamos a la variable results&lt;/div&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var results = (new[] { new { pk_id = 0, Nombre = "--Seleccione--" } }).Concat(DiccionarioX.ToList());&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;/i&gt; &lt;br /&gt;
&lt;div style="color: #38761d;"&gt;//Finalmente asignamos el datasource de nuestro DropDownList y le hacemos el DataBind()&lt;/div&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drpMyDiccionario.Items.Clear();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drpMyDiccionario.DataSource = results;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drpMyDiccionario.DataTextField = "nombre";&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drpMyDiccionario.DataValueField = "pk_id";&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drpMyDiccionario.DataBind();&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Ya con esto nuestro combo desplegable tendrá la opción por defecto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-1881751760960529633?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/5n5mswowVNw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/1881751760960529633/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/05/agregar-opcion-adicional-dropdown-linq.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/1881751760960529633?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/1881751760960529633?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/5n5mswowVNw/agregar-opcion-adicional-dropdown-linq.html" title="Agregar opcion adicional DropDownList LINQ" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/05/agregar-opcion-adicional-dropdown-linq.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEDQnc5eCp7ImA9WxFRF0k.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-6965229836191809952</id><published>2010-05-01T15:35:00.002-05:00</published><updated>2010-05-01T15:44:33.920-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-01T15:44:33.920-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Membership" /><title>Agregar nuevos campos a membership</title><content type="html">Normalmente en nuestras aplicaciones ASP.NET que requieren de autenticación usamos membership, pero ocurre el problema de que por defecto membership no contiene las opciones para colocar campos al usuario como lo son el nombre, apellido, ciudad y demás que normalmente necesitamos para un sitio Web. Pero esto tiene solución.&lt;br /&gt;
&lt;br /&gt;
Luego de completar los procedimientos de &lt;a href="http://www.blogdeprogramacion.com/2009/11/agregar-membership-base-de-datos.html"&gt;agregar membership a la base de datos&lt;/a&gt; y &lt;a href="http://www.blogdeprogramacion.com/2009/11/agregar-membership-sitio-web.html"&gt;agregar membership al sitio Web&lt;/a&gt;, podemos incluir dentro de la sección &amp;lt;system.web&amp;gt; de nuestro web.config lo siguiente con el fin de poder tener disponibles nuevos campos para el registro de nuestros usuarios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;profile defaultProvider="SqlProvider"&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;providers&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;clear/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="SqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="MyConnectionString" applicationName="MyWeb"/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/providers&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;properties&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="Names"/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="Country"/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/properties&amp;gt;&lt;br /&gt;
&amp;lt;/profile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el caso de este ejemplo hemos agregado un campo nuevo para los nombres y otro para el país.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En nuestro control de registro (&lt;b&gt;asp:CreateUserWizard&lt;/b&gt;), debemos agregarle los controles que nos van a permitir obtener los datos del usuario. Para el presente ejemplo se crearon 2 controles text box, uno con el nombre de "Names" y el otro con el nombre de "Country", y luego de esto es necesario agregar el evento "&lt;b&gt;oncreateduser&lt;/b&gt;".&lt;br /&gt;
&lt;br /&gt;
Si por ejemplo nuestro control de creación de usuarios se llama logCreate el evento quedaría de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void logCreate_CreatedUser(object sender, EventArgs e)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProfileCommon userProfile = (ProfileCommon)ProfileCommon.Create(logCreate.UserName, true);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox userNameTextBox = (TextBox)CreateUserWizardStep1.ContentTemplateContainer.FindControl("Names");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox CountryTextBox = (TextBox)CreateUserWizardStep1.ContentTemplateContainer.FindControl("Country");&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userProfile.Names = userNameTextBox.Text;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userProfile.Country = CountryTextBox.Text;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userProfile.Save();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
Y listo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-6965229836191809952?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/1sWd4RPfyZg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/6965229836191809952/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/05/agregar-nuevos-campos-membership.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6965229836191809952?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6965229836191809952?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/1sWd4RPfyZg/agregar-nuevos-campos-membership.html" title="Agregar nuevos campos a membership" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/05/agregar-nuevos-campos-membership.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8AQXY-cSp7ImA9WxBaGUw.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-8047500066664850005</id><published>2010-03-27T12:44:00.005-05:00</published><updated>2010-03-29T22:14:00.859-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-29T22:14:00.859-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Server 2008" /><title>Ejecutar programa como servicio windows server 2008</title><content type="html">Luego de buscar como ejecutar un programa como servicio de Windows 2008 he encontrado que se puede seguir parte del procedimiento que se usa para &lt;a href="http://www.blogdeprogramacion.com/2009/12/instalar-programa-como-servicio-windows.html" target="_blank"&gt;instalar un programa como servicio de windows 2003&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Lo primero que debemos hacer es conseguirnos el programa "srvany.exe" que se encuentra dentro del paquete de &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&amp;amp;displaylang=en" target="_blank" rel="nofollow"&gt;Windows Resouce Kit&lt;/a&gt;. Una vez tenemos el programa podemos copiarlo a alguna ubicación donde lo podamos referenciar. Por ejemplo a C:\Windows\System32\&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Paso 1: Crear el servicio.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Para crear el servicio en Windows 2008 debemos ejecutar el siguiente comando:&lt;br /&gt;
&lt;b&gt;sc create &lt;i&gt;NombreServicio&lt;/i&gt; binPath= C:\Windows\System32\srvany.exe  DisplayName= "&lt;i&gt;Nombre Servicio&lt;/i&gt;"&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Paso 2: Editar el registro y finalizar.&lt;/b&gt;&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
El procedimiento de edición del registro y configuración de este es el mismo que describo en el post de &lt;a href="http://www.blogdeprogramacion.com/2009/12/instalar-programa-como-servicio-windows.html#registro" target="_blank"&gt;instalar programa como servicio de Windows&lt;/a&gt;.&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-8047500066664850005?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/MnmfWVZAynY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/8047500066664850005/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/03/programa-servicio-windows-server-2008.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/8047500066664850005?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/8047500066664850005?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/MnmfWVZAynY/programa-servicio-windows-server-2008.html" title="Ejecutar programa como servicio windows server 2008" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/03/programa-servicio-windows-server-2008.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYFRHY-fip7ImA9WxBbEEg.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-6731077906264749629</id><published>2010-03-07T12:25:00.006-05:00</published><updated>2010-03-08T07:58:35.856-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-08T07:58:35.856-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DFP" /><category scheme="http://www.blogger.com/atom/ns#" term="Adsense" /><title>Abrir banner adsense en ventana nueva</title><content type="html">Ahora luego de preguntar e investigar por fin he encontrado una manera de abrir un banner de adsense en ventana nueva sin necesidad de tener una cuenta premium de adsense. La cuenta premium es para pocos ya que los requisitos que pide google son más de 20 millones de visitas mensuales o más de 5 millones de búsquedas al mes.&lt;br /&gt;
&lt;br /&gt;
Luego de evaluar el &lt;a href="http://www.blogdeprogramacion.com/2010/03/administrador-de-anuncios-gratis-google.html" target="_blank"&gt;administrador de anuncios gratis de google&lt;/a&gt; me surgio la idea de intentar crear un nuevo espacio publicitario al cual le activé las opciones de abrir en ventana nueva y la configuración de adsense.&lt;br /&gt;
&lt;br /&gt;
A este espacio publicitario le asocié un pedido donde intentaba buscar pautantes para uno de mis sitios y luego coloqué el script necesario dentro de este (Funciona con un script similar a como funciona adsense, aunque este requiere de 2 scripts). Pasaron unos días y decidí no seguir más con ese pedido y cancelarlo pero ahí me di cuenta que mi sitio inicio a colocar los banners de adsense y estos estaban abriendo en ventana nueva.&lt;br /&gt;
&lt;br /&gt;
Le habilité la caracteristica al banner superior de 468x60 de &lt;a href="http://www.toolsforogame.com/" target="_blank"&gt;ToolsForOgame&lt;/a&gt; y ahora este banner está abriendo en ventana nueva y contando los ingresos dentro de mi cuenta Adsense.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_MsPOzrdx9Yk/S5PhR0Pu1yI/AAAAAAAAAI8/jjxxRo3kkmY/s1600-h/adManager.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://3.bp.blogspot.com/_MsPOzrdx9Yk/S5PhR0Pu1yI/AAAAAAAAAI8/jjxxRo3kkmY/s400/adManager.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Por mucho tiempo estube buscando como hacer esto y terminé encontrándomelo por accidente.&lt;br /&gt;
&lt;br /&gt;
Para hallar el script necesario a colocar en la página web en la que queremos que aparezca el anuncio se debe hacer clic en el enlace "Generate tags" de las opciones izquierdas que se ven en la imagen.&lt;br /&gt;
&lt;br /&gt;
Espero les sea de utilidad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-6731077906264749629?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/BvqfuxKQNBw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/6731077906264749629/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/03/abrir-banner-adsense-ventana-nueva.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6731077906264749629?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6731077906264749629?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/BvqfuxKQNBw/abrir-banner-adsense-ventana-nueva.html" title="Abrir banner adsense en ventana nueva" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_MsPOzrdx9Yk/S5PhR0Pu1yI/AAAAAAAAAI8/jjxxRo3kkmY/s72-c/adManager.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/03/abrir-banner-adsense-ventana-nueva.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YFRHY8fip7ImA9WxBUGUU.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-5915127909536069038</id><published>2010-03-07T11:44:00.003-05:00</published><updated>2010-03-07T11:58:35.876-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-07T11:58:35.876-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DFP" /><category scheme="http://www.blogger.com/atom/ns#" term="Adsense" /><title>Administrador de anuncios gratis google</title><content type="html">Hace unos pocos días recibí un email de google que me indicaba que ya podía yo directamente contactar a los clientes y ofrecerles servicios dentro de mi portal para administrar anuncios con coste por cada mil impresiones (CPM), la de coste por clic (CPC) y la de  coste por día (CPD). &lt;br /&gt;
&lt;br /&gt;
Entré a investigar de que se trataba y consistía en que google puso a disposición de la gente el &lt;a href="https://www.google.com/admanager/login/es/index.html" target="_blank"&gt;administrador de anuncios&lt;/a&gt; dfp (DoubleClick for Publishers) small business totalmente gratis.&lt;br /&gt;
&lt;br /&gt;
Dentro de las &lt;a href="https://www.google.com/admanager/login/es/features.html" target="_blank"&gt;caracteristicas principales&lt;/a&gt; sobresalen:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Si no tienes inventario de anuncios puedes elegir mostrar Adsense&lt;/li&gt;
&lt;li&gt;Administración del inventario,&lt;/li&gt;
&lt;li&gt;Optimización de la publicación,&lt;/li&gt;
&lt;li&gt;Orientación de anuncios,&lt;/li&gt;
&lt;li&gt;Coordinación de la publicidad, publicación de anuncios y reserva de  pedidos,&lt;/li&gt;
&lt;li&gt;Gestión de mensajes publicitarios y de contenido multimedia,&lt;/li&gt;
&lt;li&gt;Informes,&lt;/li&gt;
&lt;li&gt;Navegación por la interfaz de usuario,&lt;/li&gt;
&lt;li&gt;Administración de la cuenta.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
En la primera autenticación el sistema de google los guiará hasta la creación del primer pedido, de como administrar el inventario y como crear los primeros espacios publicitarios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-5915127909536069038?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/b6ZE_tJU8po" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/5915127909536069038/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/03/administrador-de-anuncios-gratis-google.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5915127909536069038?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5915127909536069038?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/b6ZE_tJU8po/administrador-de-anuncios-gratis-google.html" title="Administrador de anuncios gratis google" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/03/administrador-de-anuncios-gratis-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IFQXYzcSp7ImA9WxBVFkk.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-7715598615510290224</id><published>2010-02-19T23:32:00.004-05:00</published><updated>2010-02-19T23:51:50.889-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-19T23:51:50.889-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SEO" /><category scheme="http://www.blogger.com/atom/ns#" term="IIRF" /><title>Eliminar prefijo www de un dominio - SEO</title><content type="html">El método para redireccionar la url con www a una sin él que explicaré a continuación se realiza por medio de Ionic's &lt;a href="http://iirf.codeplex.com/" target="_blank"&gt;ISAPI Rewrite Filter&lt;/a&gt; (IIRF), del cual la instalación y configuración explico en el post de &lt;a href="http://www.blogdeprogramacion.com/2009/09/urls-sin-extension-para-sitios-aspnet.html" target="_blank"&gt;Urls sin extensión para sitios ASP.NET&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Como continuación del post de &lt;a href="http://www.blogdeprogramacion.com/2010/02/redireccionar-default-aspx-la-raiz.html" target="_blank"&gt;Redireccionar Default.aspx a la raiz&lt;/a&gt; podemos reducir nuestras urls duplicadas con el método que describo a continuación.&lt;br /&gt;
&lt;br /&gt;
Normalmente cuando creamos un sitio web este queda funcionando con 2 urls: una con www y otra sin él y esto nos provoca que se distribuya entre 2 urls el rank de nuestro home y de las demás páginas.&lt;br /&gt;
&lt;br /&gt;
La idea que podemos aplicar es la de realizar una redirección 301 para las personas que abran la página con www redirigiendolos hacia el sitio sin www. También se puede aplicar a la inversa si se desea. Aqui vamos a explicar como hacerlo para redirigir de url con www y que termine respondiendo solamente la que no lo tiene.&lt;br /&gt;
&lt;br /&gt;
Para esto en nuestro archivo de configuración (IsapiRewrite4.ini) podemos agregar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;RewriteCond %{HTTP_HOST}   ^www\.midominio\.com [I]&lt;br /&gt;
RedirectRule ^(.*)   http://midominio.com$1 [I,R=301]&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
La primera linea nos hace que toda Url que llegue con www se le va a aplicar la siguiente regla. La segunda regla es una instrucción de Redirección que revisa cualquier url (.*) capturamos los datos en $1 y lo que hacemos es redirigirlos a http://midominio.com$1 (la raiz del sitio sin www y despues de este los datos).&lt;br /&gt;
&lt;br /&gt;
Ya la parte de [I,R=301] nos sirve en su orden para ser Insensitive en la url, y realizar el Redirect con 301.&lt;br /&gt;
&lt;br /&gt;
Esto les permitirá aumentar la popularidad de cada uno de los enlaces de su sitio Web.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-7715598615510290224?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/KcxevQCz1sg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/7715598615510290224/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/02/eliminar-prefijo-www-dominio-seo.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/7715598615510290224?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/7715598615510290224?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/KcxevQCz1sg/eliminar-prefijo-www-dominio-seo.html" title="Eliminar prefijo www de un dominio - SEO" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/02/eliminar-prefijo-www-dominio-seo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4ARX89eip7ImA9WxBVFk4.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-5077639217341312825</id><published>2010-02-19T21:28:00.002-05:00</published><updated>2010-02-19T21:29:04.162-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-19T21:29:04.162-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SEO" /><category scheme="http://www.blogger.com/atom/ns#" term="IIRF" /><title>Redireccionar default.aspx a la raiz</title><content type="html">El método de redirección de Default.aspx a la raiz (/) que explicaré a continuación se realiza por medio de Ionic's &lt;a href="http://iirf.codeplex.com/" target="_blank"&gt;ISAPI Rewrite Filter&lt;/a&gt; (IIRF), del cual la instalación y configuración explico en el post de &lt;a href="http://www.blogdeprogramacion.com/2009/09/urls-sin-extension-para-sitios-aspnet.html" target="_blank"&gt;Urls sin extensión para sitios ASP.NET&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Actualmente el tema de SEO toma más y más importancia en los sitios webs por lo cual cualquier medida que utilicemos para mejorarlo es bienvenida. La página principal que se encuentra como página por defecto de nuestro sitio web es la página más importante y a la que debemos prestar mayor atención. Si tenemos 2 o más urls posibles con las cuales responda nuestro sitio con nuestra página principal esto implica que estamos distribuyendo el peso de esta página en la cantidad de páginas que nos muestra el home.&lt;br /&gt;
&lt;br /&gt;
Uno de los problemas más frecuentes que se nos presentan a los programadores de sitios Web ASP.NET es que los sitios quedan mostrando el Home con:&lt;br /&gt;
&lt;br /&gt;
HOME/&lt;br /&gt;
HOME/Default.aspx&lt;br /&gt;
&lt;br /&gt;
Aquí es donde podemos tomar una medida para reducir estas urls y que solamente una responda. La idea es realizar una redirección 301 para las personas que abran la página de Default.aspx redirigiendolos directamente a la raiz del home.&lt;br /&gt;
&lt;br /&gt;
Para esto en nuestro archivo de configuración (IsapiRewrite4.ini) podemos agregar lo siguiente:&lt;br /&gt;
&lt;i&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;RedirectRule ^/default\.aspx(.*) /$1 [I,R=301]&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
La instrucción es una instrucción de Redirección que revisa cualquier url que inicie en la raiz con default.aspx, con (.*) capturamos los parámetros en $1 y lo que hacemos es redirigirlos a /$1 (la raiz del sitio y despues de este los parámetros).&lt;br /&gt;
&lt;br /&gt;
Ya la parte de [I,R=301] nos sirve en su orden para ser Insensitive en la url, y realizar el Redirect con 301.&lt;br /&gt;
&lt;br /&gt;
Esto les permitirá aumentar la popularidad que puede tener la raiz de su sitio Web.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-5077639217341312825?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/BVltusngX3U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/5077639217341312825/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/02/redireccionar-default-aspx-la-raiz.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5077639217341312825?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5077639217341312825?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/BVltusngX3U/redireccionar-default-aspx-la-raiz.html" title="Redireccionar default.aspx a la raiz" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/02/redireccionar-default-aspx-la-raiz.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUDQ3w7fip7ImA9WxFRGEk.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-5591483250903361335</id><published>2010-02-01T22:05:00.003-05:00</published><updated>2010-05-02T18:34:32.206-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T18:34:32.206-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="LINQ" /><title>Primeros pasos con LINQ</title><content type="html">Para dar los primeros pasos con LINQ y dar inicio al uso de sus funcionalidades puede realizar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
Verificar que tengamos instalado el Framework 3.5&lt;br /&gt;
&lt;br /&gt;
Buscar si tenemos el ejecutable de SqlMetal.exe. Este es un componente que nos permite generar código para mapear desde LINQ a componentes SQL del Framework .NET. Se encuentra dentro del Windows SDK. Este SDK se instala con el Visual Studio 2008 o lo puedes descargar de la &lt;a href="http://go.microsoft.com/fwlink/?LinkId=142225" target="_blank"&gt;página de microsoft&lt;/a&gt; e instalarlo independientemente si no posees Visual Studio 2008.&lt;br /&gt;
&lt;br /&gt;
Descargar el &lt;a href="http://sourceforge.net/projects/sqlmetalbuilder/" target="_blank"&gt;SqlMetalBuilder&lt;/a&gt;. Este programa nos permite, por medio de una interfaz gráfica, establecer nuestra conexión de bases de datos, elegir el Namespace del código generado, establecer el nombre del Data Context Class y establecer el nombre de las clases base de las Entidades que se generarán. También tiene opciones para elegir si deseamos agregar Vistas, Procedimientos Almacenados y Funciones a nuestro archivo DBML (Tipo de archivo de LINQ). La siguiente imágen contiene un ejemplo de los parametros que podemos especificar para un archivo:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_MsPOzrdx9Yk/S2eSStp8_RI/AAAAAAAAAIc/7MANIvGQA8M/s1600-h/LinQ1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="297" src="http://4.bp.blogspot.com/_MsPOzrdx9Yk/S2eSStp8_RI/AAAAAAAAAIc/7MANIvGQA8M/s400/LinQ1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Luego dentro de nuestro proyecto agregamos el archivo DBML generado a la carpeta App_Code. Ya dentro de esta le hacemos clic derecho y seleccionamos la opción "Run Custom Tool". Esto nos generará los archivos de visualización para que podamos editar nuestro DBML en vista diseño desde la interfaz de nuestro Visual Studio.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_MsPOzrdx9Yk/S2eWS8VipyI/AAAAAAAAAIk/bjm5ufWuvW4/s1600-h/LinQ2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_MsPOzrdx9Yk/S2eWS8VipyI/AAAAAAAAAIk/bjm5ufWuvW4/s400/LinQ2.JPG" width="332" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Luego de hacer estas acciones ya podemos hacer doble clic sobre nuestro archivo para ver la vista diseño.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_MsPOzrdx9Yk/S2eWVJGI4KI/AAAAAAAAAIs/wdpeBfWbtnE/s1600-h/LinQ3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://2.bp.blogspot.com/_MsPOzrdx9Yk/S2eWVJGI4KI/AAAAAAAAAIs/wdpeBfWbtnE/s400/LinQ3.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Por último agregamos el namespace a la página de la cual deseamos hacer los llamados a la base de datos y empezamos a utilizar LINQ&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_MsPOzrdx9Yk/S2eWV7v3xJI/AAAAAAAAAI0/TTbNSLy2gsg/s1600-h/LinQ4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://4.bp.blogspot.com/_MsPOzrdx9Yk/S2eWV7v3xJI/AAAAAAAAAI0/TTbNSLy2gsg/s400/LinQ4.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-5591483250903361335?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/enxwMridB64" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/5591483250903361335/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/02/primeros-pasos-con-linq.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5591483250903361335?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5591483250903361335?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/enxwMridB64/primeros-pasos-con-linq.html" title="Primeros pasos con LINQ" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_MsPOzrdx9Yk/S2eSStp8_RI/AAAAAAAAAIc/7MANIvGQA8M/s72-c/LinQ1.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/02/primeros-pasos-con-linq.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcHSXY4eip7ImA9WxBXGUs.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-4308607676226236551</id><published>2010-01-31T13:19:00.001-05:00</published><updated>2010-01-31T13:20:38.832-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-31T13:20:38.832-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Programar Backup SQL Server Express</title><content type="html">SQL Express 2005 y 2008 no tienen incluido el SQL Agent que es el que nos permite programar JOBS para ejecutarse periódicamente en nuestras bases de datos.&lt;br /&gt;
&lt;br /&gt;
Pero podemos seguir el siguiente procedimiento si queremos por ejemplo programar un backup diario de alguna de nuestras bases de datos.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. &lt;/b&gt;Buscar el ejecutable de sqlcmd.exe. Dentro de SQL Express 2005 se encuentra en:&lt;br /&gt;
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe"&lt;br /&gt;
y dentro de SLQ Express 2008 se encuentra en:&lt;br /&gt;
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe"&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.&lt;/b&gt; Desde la interfaz gráfica del Management Studio podemos seguir los pasos para realizar el backup, pero justo antes de finalizar lo que hacemos es guardar el Script. Dentro del management studio colocamos la ruta donde deseamos guardar nuestro backup y seleccionamos las opciones que deseamos. Luego hacemos clic en el boton que nos permite generar el script, y seleccionamos la opción "&lt;b&gt;Script Action to New Query Windows&lt;/b&gt;" y guardamos el archivo o seleccionamos "&lt;b&gt;Script Action to File&lt;/b&gt;".&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_MsPOzrdx9Yk/S2XIoC7UqqI/AAAAAAAAAH8/KlrOkrvtlDw/s1600-h/paso1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/_MsPOzrdx9Yk/S2XIoC7UqqI/AAAAAAAAAH8/KlrOkrvtlDw/s400/paso1.JPG" width="387" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://2.bp.blogspot.com/_MsPOzrdx9Yk/S2XJo2WXsKI/AAAAAAAAAIM/2DLMajFbfMk/s1600-h/Paso2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://2.bp.blogspot.com/_MsPOzrdx9Yk/S2XJo2WXsKI/AAAAAAAAAIM/2DLMajFbfMk/s400/Paso2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. &lt;/b&gt;Creamos un archivo .bat que es el que vamos a programar por medio del Programador de tareas o Task Scheduler. Dentro del archivo bat colocamos el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe" -S SRVNAME\SQLEXPRESS -i C:\BBDD\MyScript.sql -o C:\BBDD\Restore.log&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Importante mantener las comillas (") dentro de la parte inicial del comando ya que como la ruta contiene un espacio es necesario definirlo de esta manera. SRVNAME se debe reemplazar por el nombre correspondiente del servidor, C:\BBDD\MyScript.sql debe ser la ruta donde se guardó el script que realiza el backup y C:\BBDD\Restore.log debe ser la ruta donde se desea guardar el log de restauración.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4.&lt;/b&gt; Por último se abre el Programador de Tareas o Task Scheduler, se crea una nueva tarea para ejecutar el bat y se definen las características de ejecución.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_MsPOzrdx9Yk/S2XJqJptPKI/AAAAAAAAAIU/lWZem_RsxgU/s1600-h/Paso3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://1.bp.blogspot.com/_MsPOzrdx9Yk/S2XJqJptPKI/AAAAAAAAAIU/lWZem_RsxgU/s400/Paso3.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-4308607676226236551?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/TOFfO8aOO50" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/4308607676226236551/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/01/programar-backup-sql-server-express.html#comment-form" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/4308607676226236551?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/4308607676226236551?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/TOFfO8aOO50/programar-backup-sql-server-express.html" title="Programar Backup SQL Server Express" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_MsPOzrdx9Yk/S2XIoC7UqqI/AAAAAAAAAH8/KlrOkrvtlDw/s72-c/paso1.JPG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/01/programar-backup-sql-server-express.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQESHgyeip7ImA9WxFRGEk.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-5094827429275290275</id><published>2010-01-09T12:37:00.004-05:00</published><updated>2010-05-02T18:35:09.692-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T18:35:09.692-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Membership" /><title>Configuración inicial membership</title><content type="html">Antes de seguir primero debe revisar que ya haya completado lo siguiente:&lt;br /&gt;
&lt;br /&gt;
A. &lt;a href="http://www.blogdeprogramacion.com/2009/11/agregar-membership-base-de-datos.html"&gt;Agregar membership a la base de datos&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
B. &lt;a href="http://www.blogdeprogramacion.com/2009/11/agregar-membership-sitio-web.html"&gt;Agregar membership al sitio web&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La configuración inicial del membership se realiza de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. &lt;/b&gt;Abrir el proyecto en Visual Studio .NET&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. &lt;/b&gt;Ir al menú WebSite y elegir la opción ASP .NET Configuration&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_MsPOzrdx9Yk/S0jA9kLG9DI/AAAAAAAAAHs/11LLLHHOnK4/s1600-h/membeship1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_MsPOzrdx9Yk/S0jA9kLG9DI/AAAAAAAAAHs/11LLLHHOnK4/s400/membeship1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;3. &lt;/b&gt;Dentro del sitio web administrativo ya podemos crear los roles, usuarios iniciales y configuraciones especiales que deseemos. La configuración de Roles y Usuarios se realiza a traves de la pestaña "Security".&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_MsPOzrdx9Yk/S0jBBHGVjNI/AAAAAAAAAH0/_AD0bh24Oho/s1600-h/membeship2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_MsPOzrdx9Yk/S0jBBHGVjNI/AAAAAAAAAH0/_AD0bh24Oho/s400/membeship2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-5094827429275290275?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/G2oVR1DK6Zk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/5094827429275290275/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2010/01/configuracion-inicial-membership.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5094827429275290275?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5094827429275290275?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/G2oVR1DK6Zk/configuracion-inicial-membership.html" title="Configuración inicial membership" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_MsPOzrdx9Yk/S0jA9kLG9DI/AAAAAAAAAHs/11LLLHHOnK4/s72-c/membeship1.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2010/01/configuracion-inicial-membership.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAGRnk4eip7ImA9WxBaGUg.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-5476009993013650466</id><published>2009-12-23T09:07:00.023-05:00</published><updated>2010-03-30T07:55:27.732-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-30T07:55:27.732-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Server 2003" /><title>Instalar programa como servicio Windows</title><content type="html">En el siguiente enlace puede encontrar los detalles de como instalar un&lt;a href="http://www.blogdeprogramacion.com/2010/03/programa-servicio-windows-server-2008.html" target="_blank"&gt; programa como servicio en Windows Vista, Windows Server 2008 o Windows 7&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
En este post encontrará como instalar un programa como servicio en Windows XP o Server 2003. Para esto se debe realizar lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Paso 1: Descargar el resource Kit&lt;/b&gt;&lt;br /&gt;
Descargar e instalar el "&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&amp;amp;displaylang=en"&gt;Windows Server 2003 Resource Kit Tools&lt;/a&gt;" que se encuentra en la página de Microsoft.&lt;br /&gt;
&lt;br /&gt;
Abrir la linea de comandos para realizar el registro del servicio. Dentro de la linea de comandos nos vamos a la carpeta: "C:\Program Files\Windows Resource Kits\Tools"&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Paso 2: Crear el servicio&lt;/b&gt;&lt;br /&gt;
En la linea de comandos escribimos el comando que nos va a permitir crear el servicio:&lt;br /&gt;
&lt;b&gt;&lt;i&gt;instsrv "Nombre de nuestro servicio" "C:\Program Files\Windows Resource Kits\Tools\srvany.exe"&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Luego de ejecutar este comando la linea de comandos mostrará el siguiente mensaje:&lt;br /&gt;
&lt;br /&gt;
The service was successfuly added!&lt;br /&gt;
&lt;br /&gt;
Make sure that you go into the Control Panel and use&lt;br /&gt;
the Services applet to change the Account Name and&lt;br /&gt;
Password that this newly installed service will use&lt;br /&gt;
for its Security Context.&lt;br /&gt;
&lt;br /&gt;
Ya en este momento podemos ir a ver los servicios y ya se encontrará el que hemos creado.&lt;br /&gt;
&lt;br /&gt;
&lt;b id="registro"&gt;Paso 3: Edición del registro de Windows&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos al registro de windows (se puede abrir ejecutando el comando regedit) y buscamos la ruta:&lt;br /&gt;
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Nombre de nuestro servicio&lt;br /&gt;
&lt;br /&gt;
Hacemos clic derecho sobre la carpeta y le hacemos clic en New&amp;gt;Key&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_MsPOzrdx9Yk/SzIwYZb95wI/AAAAAAAAAGc/NbJ3w1kD7os/s1600-h/srvany1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_MsPOzrdx9Yk/SzIwYZb95wI/AAAAAAAAAGc/NbJ3w1kD7os/s320/srvany1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Creamos la Key con el nombre de Parameters. Dendro de esta key debemos crear un nuevo "String Value" con el nombre de "Application". Dentro de este String debemos colocar la ruta del programa que queremos dejar como servicio.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_MsPOzrdx9Yk/SzIxYrHVisI/AAAAAAAAAGk/kvM6pNh3OWI/s1600-h/srvany2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_MsPOzrdx9Yk/SzIxYrHVisI/AAAAAAAAAGk/kvM6pNh3OWI/s320/srvany2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Ya por último podemos ir a servicios e iniciar nuestro servicio creado y verificar que se encuentre funcionando correctamente.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-5476009993013650466?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/uQtFdLUsk50" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/5476009993013650466/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2009/12/instalar-programa-como-servicio-windows.html#comment-form" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5476009993013650466?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/5476009993013650466?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/uQtFdLUsk50/instalar-programa-como-servicio-windows.html" title="Instalar programa como servicio Windows" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_MsPOzrdx9Yk/SzIwYZb95wI/AAAAAAAAAGc/NbJ3w1kD7os/s72-c/srvany1.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2009/12/instalar-programa-como-servicio-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8ER384fSp7ImA9WxBaGUw.&quot;"><id>tag:blogger.com,1999:blog-8549035761245369401.post-6603326572917269200</id><published>2009-12-17T21:47:00.024-05:00</published><updated>2010-03-29T22:13:26.135-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-29T22:13:26.135-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Server 2008" /><title>Habilitar Ping Firewall Windows 2008</title><content type="html">El comando Ping ayuda a comprobar la conectividad de nivel IP en otro equipo TCP/IP al enviar mensajes de solicitud de eco de ICMP (Protocolo de mensajes de control Internet).&lt;br /&gt;
&lt;br /&gt;
Al ser efectivo el contacto se muestra la recepción de los mensajes de solicitud de eco correspondientes, junto con sus tiempos de ida y vuelta. Ping es el principal comando de TCP/IP que se utiliza para solucionar problemas de conectividad, accesibilidad y resolución de nombres.&lt;br /&gt;
&lt;br /&gt;
En Windows 2008 si el firewall se encuentra habilitado con la configuración predeterminada, es posible que las solicitudes eco de ICMP se encuentren desabilitadas por lo cual el equipo no responda a estos mensajes.&lt;br /&gt;
&lt;br /&gt;
Para habilitarlo se debe hacer lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.&lt;/b&gt; Ingresar a Herramientas Administrativas (Administrative Tools)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.&lt;/b&gt; Abrir el Firewall de Windows con Seguridad Avanzada (Windows Firewall with Advanced Security)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. &lt;/b&gt;Dentro de la opción de Inbound Rules hacer clic derecho y seleccionar "New Rule..."&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_MsPOzrdx9Yk/SyrvdFw58WI/AAAAAAAAAFU/vZhHQJ5islI/s1600-h/FirewallPing1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_MsPOzrdx9Yk/SyrvdFw58WI/AAAAAAAAAFU/vZhHQJ5islI/s320/FirewallPing1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;4. &lt;/b&gt;Seleccionar Custom como el tipo de regla a crear&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;a href="http://1.bp.blogspot.com/_MsPOzrdx9Yk/SyrwX3KB1KI/AAAAAAAAAFc/X6sQ5xcoSuo/s1600-h/FirewallPing2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_MsPOzrdx9Yk/SyrwX3KB1KI/AAAAAAAAAFc/X6sQ5xcoSuo/s400/FirewallPing2.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;5. &lt;/b&gt;Seleccionar la opción Todos los programas (All Programs)&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;a href="http://3.bp.blogspot.com/_MsPOzrdx9Yk/SyrwYfZxlMI/AAAAAAAAAFk/OKWXkA6dUzk/s1600-h/FirewallPing3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_MsPOzrdx9Yk/SyrwYfZxlMI/AAAAAAAAAFk/OKWXkA6dUzk/s400/FirewallPing3.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;6. &lt;/b&gt;Dentro del protocolo escojer ICMPv4. Luego hacer clic en Personalizar (Customize)&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_MsPOzrdx9Yk/SyrwamVEjbI/AAAAAAAAAF0/8GP6fZM1A4Q/s1600-h/FirewallPing5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_MsPOzrdx9Yk/SyrwamVEjbI/AAAAAAAAAF0/8GP6fZM1A4Q/s400/FirewallPing5.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;7. &lt;/b&gt;Dentro de las opciones de personalización seleccionar SpecificICMP Types y dentro de estos seleccionar Echo Request. Luego hacer clic en Ok y Siguiente (Next)&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_MsPOzrdx9Yk/SyrwZu5NmwI/AAAAAAAAAFs/wevSoqYOlw8/s1600-h/FirewallPing4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_MsPOzrdx9Yk/SyrwZu5NmwI/AAAAAAAAAFs/wevSoqYOlw8/s400/FirewallPing4.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;8. &lt;/b&gt;Dejar las opciones por defecto (Any IP adress) y hacer clic en Siguiente (Next)&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;a href="http://4.bp.blogspot.com/_MsPOzrdx9Yk/SyrwbAvzYKI/AAAAAAAAAF8/0YB6ep4d16A/s1600-h/FirewallPing6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_MsPOzrdx9Yk/SyrwbAvzYKI/AAAAAAAAAF8/0YB6ep4d16A/s400/FirewallPing6.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;9.&lt;/b&gt; Seleccionar la opción de permitir la conexión (Allow the connection) y luego hacer clic en Siguiente (Next)&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;a href="http://4.bp.blogspot.com/_MsPOzrdx9Yk/SyrwcG3TL3I/AAAAAAAAAGE/x-tcQDD9CLs/s1600-h/FirewallPing7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_MsPOzrdx9Yk/SyrwcG3TL3I/AAAAAAAAAGE/x-tcQDD9CLs/s400/FirewallPing7.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;10. &lt;/b&gt;Especificar un nombre para esta nueva regla y por último hacer clic en finalizar (Finish)&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_MsPOzrdx9Yk/Syrwd7phyhI/AAAAAAAAAGU/7-vWqIyL_7g/s1600-h/FirewallPing9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_MsPOzrdx9Yk/Syrwd7phyhI/AAAAAAAAAGU/7-vWqIyL_7g/s400/FirewallPing9.JPG" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8549035761245369401-6603326572917269200?l=www.blogdeprogramacion.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogdeprogramacion/jJaq/~4/1bMPpZkfID8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogdeprogramacion.com/feeds/6603326572917269200/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogdeprogramacion.com/2009/12/habilitar-ping-firewall-windows-2008.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6603326572917269200?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8549035761245369401/posts/default/6603326572917269200?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogdeprogramacion/jJaq/~3/1bMPpZkfID8/habilitar-ping-firewall-windows-2008.html" title="Habilitar Ping Firewall Windows 2008" /><author><name>Fabio Parra</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_MsPOzrdx9Yk/SyrvdFw58WI/AAAAAAAAAFU/vZhHQJ5islI/s72-c/FirewallPing1.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.blogdeprogramacion.com/2009/12/habilitar-ping-firewall-windows-2008.html</feedburner:origLink></entry></feed>

