<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Simple Web Tips</title>
	<atom:link href="http://www.simplewebtips.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.simplewebtips.com</link>
	<description>Development, Web design, SEO, and Internet technologies</description>
	<lastBuildDate>Mon, 06 Dec 2010 12:43:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Selector de tamaÃ±o de fuente</title>
		<link>http://www.simplewebtips.com/2009/selector-tamano-de-fuente</link>
		<comments>http://www.simplewebtips.com/2009/selector-tamano-de-fuente#comments</comments>
		<pubDate>Tue, 15 Sep 2009 13:42:47 +0000</pubDate>
		<dc:creator>CÃ©sar Nicola</dc:creator>
				<category><![CDATA[Accesibilidad]]></category>
		<category><![CDATA[Cookies]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Usabilidad]]></category>
		<category><![CDATA[TamaÃ±o del texto]]></category>

		<guid isPermaLink="false">http://www.cesarnicola.com/blog/?p=158</guid>
		<description><![CDATA[Â¿Has visto en algÃºn sitio las tres A (&#8220;AAA&#8221;) que nos permiten controlar el tamaÃ±o del texto de la pÃ¡gina? Son Ãºtiles principalmente en sitios que piensan en la usabilidad y la accesibilidad para usuarios. Alguno podrÃ¡ decir que para quÃ© complicarnos si presionando Ctrl + Rueda del mouse podemos hacer lo mismo a nivel [...]]]></description>
			<content:encoded><![CDATA[<p>Â¿Has visto en algÃºn sitio las tres A (&#8220;AAA&#8221;) que nos permiten controlar el tamaÃ±o del texto de la pÃ¡gina? Son Ãºtiles principalmente en sitios que piensan en la usabilidad y la accesibilidad para usuarios. Alguno podrÃ¡ decir que para quÃ© complicarnos si presionando Ctrl + Rueda del mouse podemos hacer lo mismo a nivel de navegador, sin embargo, hay que pensar una cosa&#8230; Â¿CuÃ¡ntos usuarios saben de Ã©sta combinaciÃ³n de teclas?&#8230; sin saber de nÃºmeros me arriesgo a decir que el usuario medio no lo sabe.</p>
<p>Hace un par de meses un cliente solicitÃ³ esta funcionalidad, entonces comencÃ© a evaluar cÃ³mo implementarla. La primera opciÃ³n fue mediante cÃ³digo de servidor, pero la descartÃ© rÃ¡pidamente ya que es carga de procesamiento injustificada ya que se puede realizar sin ninguna dificultad en el cliente mediante javascript.</p>
<p>Una vez decidida la forma de implementaciÃ³n&#8230; manos a la obra!<br />
<!--:--><span id="more-158"></span><br />
El javascript realiza el cambio de fuente mediante el cambio de clase (la etiqueta class) del body y almacena en una cookie los datos para persistir el cambio en el resto te las pÃ¡ginas y en las visitas futuras.</p>
<pre class="javascript">// Area de configuracion ----------------------------------------------------&gt;
var fontSizeCookieName       = "mySiteFontSize"; //El nombre de la cookie
var fontSizeDefaultSize      = 2; // Id del tamaÃ±o por defecto
var fontSizeActiveClassName  = "active"; // Class css para el <a> activo
var fontSizeIdText           = "fontSize"; // Texto previo al id de la fuente
var fontSizeBodyClass        = "fontSize"; // Texto previo al id de la fuente para el class del Css class de
var fontSizeBodyDefaultClass = ""; //  class cuando estÃ¡ activada la fuente por defecto
var fontSizeCookieDuration   = 31; // Tiempo de duraciÃ³n de la cookie, en dias (si se quiere solo para la sesion actual, utilizar 0)
// &lt;----------------------------------------------------------------------

var fontSize;
function getFontSizeCookieValue() {
    var results = document.cookie.match('(^|;) ?' + fontSizeCookieName + '=([^;]*)(;|$)');

    if (results)
        return (unescape(results[2]));
    else
        return null;
}
function deleteFontSizeCookie() {
    var cookie_date = new Date();
    cookie_date.setTime(cookie_date.getTime() - 1);
    document.cookie = fontSizeCookieName += "=; expires=" + cookie_date.toGMTString();
}
function setFontSizeCookie(size) {
    if (fontSizeCookieDuration != 0) {
        var current_date = new Date;
        var cookie_year = current_date.getFullYear();
        var cookie_month = current_date.getMonth();
        var cookie_day = current_date.getDate() + fontSizeCookieDuration;

        var cookie_string = fontSizeCookieName + "=" + escape(size);

        if (cookie_year) {
            var expires = new Date(cookie_year, cookie_month, cookie_day);
            cookie_string += "; expires=" + expires.toGMTString();
        }
    }

    cookie_string += "; path=/";

    document.cookie = cookie_string;
}
function setFontSize(size) {
    if (size != fontSizeDefaultSize) {
        document.body.className = fontSizeBodyClass + size;
    } else {
        document.body.className = fontSizeBodyDefaultClass;
    }
    fontSize = size;
}
// Cambia el tamaÃ±o, setea el link activo y actualiza la cookie
function changeFontSize(sizeAnchor) {
    if (sizeAnchor.id) {
        var size = sizeAnchor.id;
        size = size.substring(8);
        document.getElementById(fontSizeIdText + fontSize).className = "";
        setFontSize(size);
        setFontSizeCookie(size);
        sizeAnchor.className = fontSizeActiveClassName;
    }
}
// Funcion inicializadora
function fontSizeInit() {
    // Obtiene la cookie, si no existe, la crea
    if (!getFontSizeCookieValue()) {
        setFontSizeCookie(fontSizeDefaultSize);
        fontSize = fontSizeDefaultSize;
    }
    else {
        fontSize = getFontSizeCookieValue();
    }

    changeFontSize(document.getElementById(fontSizeIdText + fontSize));
}
// Colocar la funcion inicializadora en el onLoad porque el elemento  no estÃ¡ disponible hasta que la pÃ¡gina carge y darÃ­a error
window.onload = fontSizeInit;
</a></pre>
<p><a>Los enlaces &#8220;A&#8221; deben de llamar a changeFontSize(this) y deben de tener como id &#8220;fontSizeX&#8221; donde X es el id del class por la cual se cambiarÃ¡ el del body.</a></p>
<p><a> </a></p>
<p><a></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplewebtips.com/2009/selector-tamano-de-fuente/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SincronizaciÃ³n de archivos y equipos con Live Mesh</title>
		<link>http://www.simplewebtips.com/2009/sincronizacion-de-archivos-y-equipos-live-mesh</link>
		<comments>http://www.simplewebtips.com/2009/sincronizacion-de-archivos-y-equipos-live-mesh#comments</comments>
		<pubDate>Wed, 10 Jun 2009 17:27:09 +0000</pubDate>
		<dc:creator>CÃ©sar Nicola</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.cesarnicola.com/blog/?p=103</guid>
		<description><![CDATA[Archivos de proyectos por aquÃ­&#8230; archivos de proyectos por allÃ¡&#8230; unos en la mÃ¡quina de casa, otros en la notebook&#8230; pÃ©rdidas de tiempo increibles&#8230; te es familiar? Microsoft, en su lucha por seguir en el podio, nos trae ahora una propuesta novedosa y muy muy interesante, es lo que necesitamos para evitar todos estos dolores [...]]]></description>
			<content:encoded><![CDATA[<p>Archivos de proyectos por aquÃ­&#8230; archivos de proyectos por allÃ¡&#8230; unos en la mÃ¡quina de casa, otros en la notebook&#8230; pÃ©rdidas de tiempo increibles&#8230; te es familiar?</p>
<p>Microsoft, en su lucha por seguir en el podio, nos trae ahora una propuesta novedosa y muy muy interesante, es lo que necesitamos para evitar todos estos dolores de cabeza&#8230;</p>
<p><a href="http://mesh.live.com" target="_blank">Live Mesh</a>, que en su sitio web se define como &#8220;una herramienta capaz de sincronizar archivos con todos los tus dispositivos, de modo de tener siempre la Ãºltima versiÃ³n al alcance de la mano; tambiÃ©n permite acceder a tus archivos a travÃ©s de la web, compartirlos con otros y ser notificado cuando alguien cambia alguno de ellos&#8221;.<br />
Esta descripciÃ³n suena maravillosa&#8230; pero realmente es asÃ­?</p>
<h2>La prueba</h2>
<p>He estado utilizando live Mesh en dos equipos desde hace 3 meses. Lo utilizo para compartir archivos de trabajo que siempre necesito tener a mano (uno nunca sabe cuando un cliente le va a hacer una peticiÃ³n desesperada).<br />
<!--:--><span id="more-103"></span><br />
La configuraciÃ³n fue extremadamente sencilla:</p>
<ol>
<li>Registro en el sitio<a href="http://www.mesh.com"> http://www.mesh.com </a></li>
<li>Agregar un nuevo equipo</li>
<li>Descargar el instalador para la versiÃ³n de windows adecuada</li>
<li>Instalarlo en la mÃ¡quina a sincronizar</li>
</ol>
<p>Una vez instalado, se ejecutarÃ¡ y nos solicitarÃ¡ nombre de usuario y contraseÃ±a. Una vez ingresados estos datos, ya estaremos logueados en el mesh.<br />
Podremos visualizar en el panel de tareas un Ã­cono (ImÃ¡gen 1), si ponemos el puntero del mouse sobre Ã©ste, veremos que se desplega un panel indicandonos todos los equipos que pertenecen al Mesh junto con su estado actual. TambiÃ©n nos incluye el Live Desktop que veremos mÃ¡s adelante.</p>
<div id="attachment_118" class="wp-caption aligncenter" style="width: 338px"><img class="size-full wp-image-118" title="mesh1" src="/wp-content/uploads/2009/06/mesh1.jpg" alt="ImÃ¡gen 1 - Panel de tareas" width="328" height="470" /><p class="wp-caption-text">ImÃ¡gen 1 - Panel de tareas</p></div>
<p>En este mismo panel podremos ver tambiÃ©n Noticias (ImÃ¡gen 2) y los Directorios que actualmente se encuentran sincronizados (ImÃ¡gen 3)</p>
<div id="attachment_119" class="wp-caption aligncenter" style="width: 338px"><img class="size-full wp-image-119 " title="mesh2" src="/wp-content/uploads/2009/06/mesh2.jpg" alt="ImÃ¡gen 2 - Noticias" width="328" height="470" /><p class="wp-caption-text">ImÃ¡gen 2 - Noticias</p></div>
<div id="attachment_120" class="wp-caption aligncenter" style="width: 338px"><img class="size-full wp-image-120 " title="mesh3a" src="/wp-content/uploads/2009/06/mesh3a.jpg" alt="ImÃ¡gen 3 - Directorios compartidos" width="328" height="470" /><p class="wp-caption-text">ImÃ¡gen 3 - Directorios compartidos</p></div>
<p><strong>Â¿CÃ³mo sincronizar un directorio?</strong></p>
<p>Es muy sencillo, simplemente le hacemos click con el botÃ³n derecho del ratÃ³n sobre el directorio a sincronizar y en el menÃº contextual seleccionamos &#8220;Agregar a Live Mesh&#8221; (ImÃ¡gen 4).</p>
<div id="attachment_126" class="wp-caption aligncenter" style="width: 456px"><img class="size-full wp-image-126 " title="mesh4" src="/wp-content/uploads/2009/06/mesh4.jpg" alt="ImÃ¡gen 4 - Sincronizar un directorio" width="446" height="461" /><p class="wp-caption-text">ImÃ¡gen 4 - Sincronizar un directorio</p></div>
<p>Se desplegarÃ¡ un panel con opciones (ImÃ¡gen 5). Debemos especificar el nombre del directorio y la forma en que sincronizarÃ¡ con los distintos dispositivos.</p>
<div id="attachment_128" class="wp-caption aligncenter" style="width: 565px"><img class="size-full wp-image-128" title="mesh5" src="/wp-content/uploads/2009/06/mesh5.jpg" alt="ImÃ¡gen 5 - Opciones de sincronizaciÃ³n" width="555" height="485" /><p class="wp-caption-text">ImÃ¡gen 5 - Opciones de sincronizaciÃ³n</p></div>
<p>Una vez hecho esto, el directorio quedarÃ¡ con el Ã­cono que se muestra en la ImÃ¡gen 6, indicÃ¡ndonos que se encuentra en nuestro Live mesh.</p>
<div id="attachment_132" class="wp-caption aligncenter" style="width: 165px"><img class="size-full wp-image-132" title="mesh6" src="/wp-content/uploads/2009/06/mesh6.jpg" alt="ImÃ¡gen 6 - Directorio sincronizado" width="155" height="104" /><p class="wp-caption-text">ImÃ¡gen 6 - Directorio sincronizado</p></div>
<p>Si ingresamos ahora al directorio ya sincronizado, veremos que se despliega un panel con opciones de Live Mesh (ImÃ¡gen 7). Este panel nos mostrarÃ¡ en primera instancia, las noticias relacionadas con este directorio.</p>
<div id="attachment_133" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-133 " title="mesh7" src="/wp-content/uploads/2009/06/mesh7.jpg" alt="ImÃ¡gen 7 - Panel de directorio" width="600" height="241" /><p class="wp-caption-text">ImÃ¡gen 7 - Panel de directorio</p></div>
<p>Dentro de este mismo panel, tambiÃ©n podremos visualizar los usuarios que pueden visualizar todo el contenido de este directorio, agregar nuevos, moficiar los existentes o eliminarlos (ImÃ¡gen 8). Por Ãºltimo, este panel tambiÃ©n nos informa de los dispositivos con los cuales se estÃ¡ sincronizando el directorio (ImÃ¡gen 9) y nos permite administrarlos.</p>
<div id="attachment_134" class="wp-caption aligncenter" style="width: 296px"><img class="size-full wp-image-134" title="mesh8" src="/wp-content/uploads/2009/06/mesh8.jpg" alt="ImÃ¡gen 8 - Panel de directorio - Usuarios" width="286" height="424" /><p class="wp-caption-text">ImÃ¡gen 8 - Panel de directorio - Usuarios</p></div>
<div id="attachment_135" class="wp-caption aligncenter" style="width: 296px"><img class="size-full wp-image-135" title="mesh9" src="/wp-content/uploads/2009/06/mesh9.jpg" alt="ImÃ¡gen 9 - Panel de directorio - Dispositivos" width="286" height="424" /><p class="wp-caption-text">ImÃ¡gen 9 - Panel de directorio - Dispositivos</p></div>
<p><strong>Live Desktop</strong></p>
<p>Hasta ahora todo va perfecto&#8230; sin embargo&#8230; Â¿quÃ© pasa si necesitamos algÃºn archivo y no estamos en una mÃ¡quina sincronizada?. No os preocupeis, todo estÃ¡ pensado.<br />
Si accedemos via web a <a href="http://www.mesh.com" target="_blank">www.mesh.com</a> Veremos dentro de nuestros dispositivos un &#8220;Live Desktop&#8221; (ImÃ¡gen 10) que no es ni mÃ¡s ni menos que un &#8220;dispositivo&#8221; que nos permite ver los directorios y los archivos que tenemos sincronizados.</p>
<div id="attachment_136" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-136" title="mesh10" src="/wp-content/uploads/2009/06/mesh10.jpg" alt="ImÃ¡gen 10 - Live Desktop" width="500" height="275" /><p class="wp-caption-text">ImÃ¡gen 10 - Live Desktop</p></div>
<p>La interfaz es expectacular, una perfecta simulaciÃ³n de windows, Â¡y ademÃ¡s podemos acceder utilizando cualquier navegador! (ImÃ¡gen 11)</p>
<div id="attachment_137" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-137" title="mesh11" src="/wp-content/uploads/2009/06/mesh11.jpg" alt="ImÃ¡gen 11 - Live Desktop Directorio" width="500" height="313" /><p class="wp-caption-text">ImÃ¡gen 11 - Live Desktop Directorio</p></div>
<p><strong>Live Mesh Remote Desktop</strong></p>
<p>Para concluir con este reporte (y sin dejar de dar importancia) tenemos la Ãºltima caracterÃ­stica; la posibilidad de conectarnos por escritorio remoto a alguno de los dispositivos que se encuentre conectado al mesh (imagino no es necesario aclarar que dicho dispositivo debe de estar encendido, conectado a internet y con el live mesh en ejecuciÃ³n).</p>
<p>Para conectarnos, simplemente presionamos sobre el enlace &#8220;Conectar con el dispositivo&#8221; (ImÃ¡gen 12).</p>
<div id="attachment_140" class="wp-caption aligncenter" style="width: 328px"><img class="size-full wp-image-140" title="mesh12" src="/wp-content/uploads/2009/06/mesh12.jpg" alt="ImÃ¡gen 12 - Conect to device" width="318" height="451" /><p class="wp-caption-text">ImÃ¡gen 12 - Conect to device</p></div>
<p>Se nos desplegarÃ¡ una ventana muy similar al tÃ­pico Escritorio Remoto de windows (mstsc) en la cual veremos la pantalla &#8220;tal como si estuvieramos sentados en frente&#8221; (ImÃ¡gen 13)</p>
<div id="attachment_141" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-141" title="mesh13" src="/wp-content/uploads/2009/06/mesh13.jpg" alt="ImÃ¡gen 13 - Live Mesh Remote Desktop" width="600" height="373" /><p class="wp-caption-text">ImÃ¡gen 13 - Live Mesh Remote Desktop</p></div>
<p><strong>ResÃºmen &#8211; ConclusiÃ³n</strong></p>
<p>Una verdadera novedad por parte de Microsoft; super Ãºtil, fÃ¡cil de usar y Ã¡gil. Es la perfecta soluciÃ³n para todos los que usamos varios equipos y debemos de tener archivos sincronizados y siempre disponibles (y somos demasiado despistados y desprolijos como para utilizar un pendrive). La Ãºnica desventaja es que por el momento solo tienen 5GB de capacidad, lo que significa que la suma de todos los archivos de todos los directorios sincronizados no puede superar esta cantidad.</p>
<p>Les recomiendo totalmente que usen esta herramienta!.</p>
<p>Sistemas en los que realicÃ© la prueba: Windows XP SP3, Windows Vista SP1 (actualmente SP2)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplewebtips.com/2009/sincronizacion-de-archivos-y-equipos-live-mesh/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Obteniendo datos de Google Analytics con CSharp</title>
		<link>http://www.simplewebtips.com/2009/obteniendo-datos-de-google-analytics-con-cshar</link>
		<comments>http://www.simplewebtips.com/2009/obteniendo-datos-de-google-analytics-con-cshar#comments</comments>
		<pubDate>Fri, 15 May 2009 19:01:43 +0000</pubDate>
		<dc:creator>CÃ©sar Nicola</dc:creator>
				<category><![CDATA[CSharp]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Visual Studio]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Analytics Export API]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Custom Graphics]]></category>
		<category><![CDATA[Get Data]]></category>
		<category><![CDATA[Visits]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.cesarnicola.com/blog/?p=40</guid>
		<description><![CDATA[La poderosa herramienta Google Analytics nos vuelve a sorprender, esta vez con algo que muchos esperabamos: una API para exportar datos. Esta novedosa API nos permite incluir datos obtenidos por Google Analytics en nuestras aplicaciones. Â¿De quÃ© sirve esto? De mucho. Nos podemos imÃ¡ginar infinidades de usos; desde la simple colocaciÃ³n de datos en nuestro [...]]]></description>
			<content:encoded><![CDATA[<p>La poderosa herramienta <a title="Google Analytics" href="http://analytics.google.com" target="_blank">Google Analytics</a> nos vuelve a sorprender, esta vez con algo que muchos esperabamos: una API para exportar datos.</p>
<p>Esta novedosa API nos permite incluir datos obtenidos por Google Analytics en nuestras aplicaciones.</p>
<h2>Â¿De quÃ© sirve esto?</h2>
<p><span style="font-weight: normal;">De mucho. Nos podemos imÃ¡ginar infinidades de usos; desde la simple colocaciÃ³n de datos en nuestro CMS hasta la creaciÃ³n de una nube de tags.</span></p>
<p>Mi experiencia personal fue la colocaciÃ³n en el CMS de la empresa en la que trabajo, con un muy pintoresco resultado:<br />
<!--:--><span id="more-40"></span></p>
<p style="text-align: center;"><img class="size-full wp-image-85 aligncenter" title="Custo Graphics With Google Analytics" src="http://www.simplewebtips.com/wp-content/uploads/2009/05/ganalyticsgraphics.jpg" alt="Custo Graphics With Google Analytics" /></p>
<h2>El desafÃ­o</h2>
<p>Ya que nuestro CMS estÃ¡ basado en .NET, y dado el poco soporte que Google brinda a esta plataforma, implementÃ© mi propia clase para obtener datos.<br />
Esta clase se encarga de convertir las feeds XML que envÃ­a google en una estructura mucho mÃ¡s prÃ¡ctica y fÃ¡cil de usar en .NET: el DataTable.</p>
<p>Es de fÃ¡cil uso y estÃ¡ comentada para que se pueda entender con facilidad. De todas maneras es conveniente que estudien un poco el prototipo que expone Google para la exportaciÃ³n de datos:Â <a href="http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html">http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html</a></p>
<p>Para realizar las consultas deben de tener en cuenta las <a href="http://code.google.com/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html" target="_blank">dimensiones y mÃ©tricas</a> que son las que nos permiten seleccionar quÃ© datos queremos traer; por ejemplo le podemos decir que queremos la dimensiÃ³n ga:pagePath y la mÃ©trica ga:pageviews lo que nos darÃ­a como resultado, la cantidad de visitas que tuvo cada una de las pÃ¡ginas de nuestro sitio. Otro ejemplo mÃ¡s sencillo serÃ­a obtener las visitas totales que tuvo nuestro sitio por fecha, esto lo podemos lograr utilizando la dimensiÃ³n ga:date y la mÃ©trica ga:visits</p>
<h2>Â¿CÃ³mo comienzo a utilizarlo?</h2>
<ol>
<li>En Visual Studio agregamos la clase a nuestra librerÃ­a.</li>
<li>Analizamos quÃ© datos queremos obtener en el DataTable.</li>
<li>Creamos la consulta basandonos en las mÃ©tricas, dimensiones, filtrados, etc&#8230;</li>
<li>Llamamos al mÃ©todo GetData() enviÃ¡ndole como parÃ¡metros la consulta.</li>
<li>Obtenemos un DataTable que podemos utilizar como queramos.</li>
</ol>
<p><strong>Ejemplos de llamados al mÃ©todo:</strong></p>
<ul>
<li>Para obtener las visitas al sÃ­tio por dÃ­a del Ãºltimo mes ordenadas por fecha asc:<br />
DataTable data = GetData(new string[] { &#8220;ga:date&#8221; }, new string[] { &#8220;ga:visits&#8221; }, new string[] { &#8220;ga:date&#8221; }, new string[] { }, DateTime.Today.AddMonths(-1), DateTime.Today, 0, 0);</li>
<li>Para obtener la fuente de las visitas (de donde llegan a nuestro sitio) del Ãºltimo mes ordenado por fuente:<br />
DataTable data = GetData(new string[] { &#8220;ga:source&#8221; }, new string[] { &#8220;ga:visits&#8221; }, new string[] { &#8220;ga:source&#8221; }, new string[] { }, DateTime.Today.AddMonths(-1), DateTime.Today, 0, 0);</li>
<li>Para obtener la cantidad de visitas que tuvo cada pÃ¡gina de nuestro sitio en el Ãºltimo mes ordenado por cantidad de visitas desc:<br />
DataTable data = GetData(new string[] { &#8220;ga:pagePath&#8221; }, new string[] { &#8220;ga:pageviews&#8221; }, new string[] { &#8220;-ga:pageviews&#8221; }, new string[] { }, DateTime.Today.AddMonths(-1), DateTime.Today, 0, 0);</li>
</ul>
<pre name="code" class="c-sharp">using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Net;
using System.Xml;
using System.Data;

public class GAnalytics
{
    #region Atributos

    private string _username = null;
    private string _password = null;
    private string _profileId = null;
    private string _token = null;
    private static readonly string authUrlFormat = "accountType=GOOGLE&amp;Email={0}&amp;Passwd={1}&amp;source=reimers.dk-analyticsreader-0.1&amp;service=analytics";

    #endregion

    public GAnalytics() { }

    public GAnalytics(string username, string password)
    {
        _username = username;
        _password = password;
    }

    public GAnalytics(string username, string password, string profileId)
    {
        _username  = username;
        _password  = password;
        _profileId = profileId;
    }

    #region Properties

    public string Username
    {
        get
        {
            return _username;
        }
        set
        {
            _username = value;
        }
    }

    public string Password
    {
        get
        {
            return _password;
        }
        set
        {
            _password = value;
        }
    }

    public string Token
    {
        get
        {
            if (string.IsNullOrEmpty(_token))
            {
                _token = GetToken();
            }
            return _token;
        }
    }

    public string ProfileId
    {
        get
        {
            return _profileId;
        }
        set
        {
            _profileId = value;
        }
    }

    #endregion

    #region Metodos

    ///
    /// Loguea al usuario en Google y obtiene el Token
    ///
    ///
    private string GetToken()
    {
        try
        {
            if (string.IsNullOrEmpty(Username) || string.IsNullOrEmpty(Password))
            {
                throw new ArgumentNullException("Username, Password", "Username and/or password not set");
            }

            string authBody = string.Format(authUrlFormat, Username, Password);
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://www.google.com/accounts/ClientLogin");
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.UserAgent = "CSharp Application";
            Stream stream = req.GetRequestStream();
            StreamWriter sw = new StreamWriter(stream);
            sw.Write(authBody);
            sw.Close();
            sw.Dispose();
            HttpWebResponse response = (HttpWebResponse)req.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream());
            string token = sr.ReadToEnd();
            string[] tokens = token.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string item in tokens)
            {
                if (item.StartsWith("Auth="))
                {
                    return item.Replace("Auth=", "");
                }
            }
        }
        catch (Exception e)
        {
            throw (e);
        }
        return string.Empty;
    }

    ///
    /// Parsea la fecha en formato DateTime
    ///
    ///
Fecha en formato yyyy-mm-dd
    ///
    private DateTime ParseDate(string date)
    {
        return new DateTime(int.Parse(date.Substring(0, 4)), int.Parse(date.Substring(4, 2)), int.Parse(date.Substring(6, 2)));
    }

    ///
    /// Parsea un documento xml en una DataTable.
    ///
    ///
Documento XML retornado por el servidor
    ///
Dimensiones de la peticiÃ³n
    ///
MÃ©tricas de la peticiÃ³n
    ///
    private DataTable ParseXml(XmlDocument xml, string[] dimensions, string[] metrics)
    {
        DataTable data = new DataTable();
        foreach (string dimension in dimensions)
        {
            if (dimension == "ga:date")
            {
                data.Columns.Add(dimension, typeof(DateTime));
            }
            else
            {
                data.Columns.Add(dimension);
            }
        }
        foreach (string metric in metrics)
        {
            data.Columns.Add(metric);
        }

        foreach (XmlNode node in xml.ChildNodes[1])
        {
            if (node.Name.Equals("entry", StringComparison.CurrentCulture))
            {
                DataRow row = data.NewRow();
                foreach (XmlNode nodeValue in node.ChildNodes)
                {
                    if (nodeValue.Attributes["name"] != null)
                    {
                        foreach (string dimension in dimensions)
                        {
                            if (nodeValue.Attributes["name"].Value == dimension)
                            {
                                if (dimension == "ga:date")
                                {
                                    row[dimension] = ParseDate(nodeValue.Attributes["value"].Value);
                                }
                                else
                                {
                                    row[dimension] = nodeValue.Attributes["value"].Value;
                                }
                            }
                        }
                        foreach (string metric in metrics)
                        {
                            if (nodeValue.Attributes["name"].Value == metric)
                            {
                                row[metric] = nodeValue.Attributes["value"].Value;
                            }
                        }
                    }
                }
                data.Rows.Add(row);
            }
        }
        return data;
    }

    ///
    /// Perfiles a los cuales tiene acceso el usuario
    ///
    ///
    public NameValueCollection GetProfiles()
    {
        //Obtengo la respuesta
        string response = GetResponse("https://www.google.com/analytics/feeds/accounts/default");

        //Obtengo el nodo correspondiente con los perfiles sobre los cuales el usuario tienen permisos
        XmlDocument accountinfoXML = new XmlDocument();
        accountinfoXML.LoadXml(response);
        XmlNodeList entries = accountinfoXML.GetElementsByTagName("entry");

        //Cargo los perfiles
        NameValueCollection profiles = new NameValueCollection();
        for (int i = 0; i &lt; entries.Count; i++)
        {
            profiles.Add(entries.Item(i).ChildNodes[2].InnerText, entries.Item(i).ChildNodes[7].Attributes["value"].Value);
        }

        return profiles;
    }

    //Atajo sin ProfileId
    public DataTable GetData(string[] dimensions, string[] metrics, string[] sort, string[] filters, DateTime startDate, DateTime endDate, int resultLimit, int pageIndex)
    {
        return GetData(dimensions, metrics, sort, filters, startDate, endDate, resultLimit, pageIndex, ProfileId);
    }

    ///
    /// Retorna un DataTable con los resultados para los parametros indicados.
    ///
    ///
Optional. Specifies the dimensions included in the report and by which metrics will be segmented. A single request is limited to a maximum of 7 dimensions.
    /// dimensions=ga:country,ga:browser. For more information, see http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html#requestingDimensions
    ///
Optional.Specifies the metrics included in the report. A single request is limited to a maximum of 10 metrics.
    /// metrics=ga:pageviews,ga:uniquePageviews. For more information, see http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html#requestingMetrics
    ///
Optional. Specifies sort order and direction for the entries in the feed.
    /// sort=ga:browser,ga:pageviews. For more information, see http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html#sorting
    ///
Optional. Specifies filters to apply to the data in your profile to return a sub-set of entries. filters=ga:country%3D%3DCanada
    /// For more information, see http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html#filtering
    ///
Required. All Analytics feed requests must specify a beginning and ending date range. If you do not indicate start- and end-date values for the request, the server will return a 400 Bad request error. Date values are in the form YYYY-MM-DD. See Common Query Parameters for more details. start-date=2008-07-22 end-date=2008-08-22
    ///
Required. All Analytics feed requests must specify a beginning and ending date range. If you do not indicate start- and end-date values for the request, the server will return a 400 Bad request error. Date values are in the form YYYY-MM-DD. See Common Query Parameters for more details. start-date=2008-07-22 end-date=2008-08-22
    ///
To manipulate the result set for a large number of entries, you can use max-results parameter. Value between 0 and 1000. Use it in 0 to get all enteries
    ///
NÃºmero de pÃ¡gina de la cual se quiere mostrar el resultado. 0 para todas
    ///

    /// Datatable con todos los resultados
    public DataTable GetData(string[] dimensions, string[] metrics, string[] sort, string[] filters, DateTime startDate, DateTime endDate, int resultLimit, int pageIndex, string profileId)
    {
        if (string.IsNullOrEmpty(profileId))
        {
            throw new ArgumentNullException("ProfileId cannot be empty");
        }
        if (dimensions.Length == 0 || metrics.Length == 0)
        {
            throw new ArgumentException("There must be at least one dimension and one metric");
        }

        string url = "https://www.google.com/analytics/feeds/data?ids=ga:" + profileId;

        //Agrego las dimensiones
        if (dimensions.Length &gt; 0)
        {
            url += "&amp;dimensions=" + dimensions[0];
            for (int i = 1; i &lt; dimensions.Length; i++)
            {
                url += "," + dimensions[i];
            }
        }

        //Agrego las mÃ©tricas
        if (metrics.Length &gt; 0)
        {
            url += "&amp;metrics=" + metrics[0];
            for (int i = 1; i &lt; metrics.Length; i++)
            {
                url += "," + metrics[i];
            }
        }

        //Agrego los parÃ¡metros de ordenamiento
        if (sort.Length &gt; 0)
        {
            url += "&amp;sort=" + sort[0];
            for (int i = 1; i &lt; sort.Length; i++)
            {
                url += "," + sort[i];
            }
        }

        //Agrego los parÃ¡metros de filtrado
        if (filters.Length &gt; 0)
        {
            url += "&amp;filters=" + filters[0];
            for (int i = 1; i &lt; filters.Length; i++)
            {
                url += "," + filters[i];
            }
        }

        //Agrego el rango de fechas
        url += "&amp;start-date=" + startDate.ToString("yyyy-MM-dd");
        url += "&amp;end-date=" + endDate.ToString("yyyy-MM-dd");

        //Agrego la cantidad mÃ¡xima de filas. Si es 0 el se traerÃ¡n todos los registros
        if (resultLimit &gt; 0)
        {
            url += "&amp;max-results=" + resultLimit;
        }
        else
        {
            url += "&amp;max-results=1000"; //1000 es el valor mÃ¡ximo de carga permitido por google
        }

        //Si tengo mÃ¡s de una pÃ¡gina agrego el nÃºmero de pÃ¡gina
        if (pageIndex &gt; 0)
        {
            url += "&amp;start-index=" + pageIndex;
        }
        else
        {
            url += "&amp;start-index=1";
        }

        //Obtengo el xml de respuesta
        XmlDocument xml = new XmlDocument();
        xml.LoadXml(GetResponse(url));

        int results = GetResultNumber(xml);
        double totalPages = results / 1000;
        totalPages = Math.Ceiling(totalPages);

        //Si quiero todos los resultados y tengo mÃ¡s de una pÃ¡gina, llamo recursivamente y mergeo los DataTable
        if (results &gt; 1000 &amp;&amp; resultLimit == 0 &amp;&amp; pageIndex &lt; totalPages)
        {
            DataTable returnData = ParseXml(xml, dimensions, metrics);
            returnData.Merge(GetData(dimensions, metrics, sort, filters, startDate, endDate, 0, pageIndex + 1, profileId));
            return returnData;
        }
        else
        {
            return ParseXml(xml, dimensions, metrics);
        }
    }

    private int GetResultNumber(XmlDocument xml)
    {
        //Busco el valor del nodo openSearch:totalResults
        foreach (XmlNode node in xml.ChildNodes[1])
        {
            if (node.Name.Equals("openSearch:totalResults", StringComparison.CurrentCulture))
            {
                return int.Parse(node.InnerText);
            }
        }
        return 0;
    }

    ///
    /// Retorna la string de respuesta del servidor
    ///
    ///
URL a la que se debe de realizar la peticiÃ³n
    ///
    private string GetResponse(string url)
    {
        //Creo la peticiÃ³n Http
        HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);

        //Agrego la cabecera Http para la autenticaciÃ³n
        myRequest.Headers.Add("Authorization: GoogleLogin auth=" + Token);

        try
        {
            //Intento obtener una respuesta
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            Stream responseBody = myResponse.GetResponseStream();

            Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
            StreamReader readStream = new StreamReader(responseBody, encode);
            return readStream.ReadToEnd();
        }
        catch (Exception e)
        {
            throw (e);
        }
    }

    #endregion
}</pre>
<p>EstarÃ­a bueno que compartieran cualquier correciÃ³n, upgrade del cÃ³digo.</p>
<p>Fuentes:<br />
<a href="http://analytics.blogspot.com/2009_05_01_analytics_archive.html">http://analytics.blogspot.com/2009_05_01_analytics_archive.html<br />
</a><a href="http://www.akamarketing.com/blog/103-introducing-google-analytics-api-with-aspnet-c.html">http://www.akamarketing.com/blog/103-introducing-google-analytics-api-with-aspnet-c.html<br />
</a><a href="http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html">http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplewebtips.com/2009/obteniendo-datos-de-google-analytics-con-cshar/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Redirigir trÃ¡fico a otro servidor SMTP</title>
		<link>http://www.simplewebtips.com/2009/redirigir-trafico-a-otro-servidor-smtp</link>
		<comments>http://www.simplewebtips.com/2009/redirigir-trafico-a-otro-servidor-smtp#comments</comments>
		<pubDate>Tue, 17 Mar 2009 03:23:37 +0000</pubDate>
		<dc:creator>CÃ©sar Nicola</dc:creator>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[SMTP]]></category>
		<category><![CDATA[Forward]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Mail traffic]]></category>
		<category><![CDATA[Route]]></category>
		<category><![CDATA[Windows server 2008]]></category>

		<guid isPermaLink="false">http://www.cesarnicola.com/blog/?p=29</guid>
		<description><![CDATA[Probablement tu servidor SMTP no estÃ© en el servidor de producciÃ³n, incluso capaz que tampoco en el servidor de tu aplicaciÃ³n. A veces, algunas aplicaciones web (como MOSS) tienen la limitaciÃ³n de poder utilizar solamente el servidor SMTP local. Por esto es que vamos a ver cÃ³mo solucionar este problema. Vamos a asumir que ya [...]]]></description>
			<content:encoded><![CDATA[<p>Probablement tu servidor SMTP no estÃ© en el servidor de producciÃ³n, incluso capaz que tampoco en el servidor de tu aplicaciÃ³n. A veces, algunas aplicaciones web (como MOSS) tienen la limitaciÃ³n de poder utilizar solamente el servidor SMTP local. Por esto es que vamos a ver cÃ³mo solucionar este problema.</p>
<p>Vamos a asumir que ya tenemos instalado el IIS (Internet Information ServicesÂ <a href="http://learn.iis.net/page.aspx/29/installing-iis-70-on-windows-server-2008/" target="_blank">Â¿CÃ³mo lo instalo?</a>) y el servidor SMTP (lo puedes instalar a travÃ©s de &#8220;Server Manager &gt;Features &gt; SMTP&#8221;)</p>
<p>Bien, ahora comenzaremos con la configuraciÃ³n del servidor SMTP.<br />
Ya que este correo es una caracterÃ­stica de IIS6, procederemos a ejecutar el administrador del mismo:</p>
<p>Win + R (Ã³ &#8220;Inicio &gt; Ejecutar&#8221;), escribimos &#8220;inetmgr6&#8243; y enter.<br />
<!--:--><span id="more-29"></span></p>
<p>Una vez en el administrador, hacemos click derecho sobre &#8220;SMTP Server&#8221; y seleccionamos &#8220;Propiedades&#8221; (Imagen 1)</p>
<div id="attachment_31" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-31  " title="inetmgr6" src="http://www.simplewebtips.com/wp-content/uploads/2009/03/image0011.png" alt="inetmgr6" width="600" height="357" /><p class="wp-caption-text">Imagen 1 - IIS Manager</p></div>
<p>En la ventana de Propiedades, vamos a la pestaÃ±a &#8220;Delivery&#8221;</p>
<div id="attachment_32" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-32" title="SMTP Server properties window" src="http://www.simplewebtips.com/wp-content/uploads/2009/03/image002.png" alt="SMTP Server properties window" width="600" height="357" /><p class="wp-caption-text">Imagen 2 - Ventana de propiedades del servidor SMTP</p></div>
<p>Luego, presionamos el botÃ³n &#8220;Avanzado&#8221; y en el campo &#8220;Smart host&#8221; colocamos el DNS del servidor real (el que realizarÃ¡ la entrega) de correo.</p>
<div id="attachment_33" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-33" title="SMTP Server Delivery Advanced" src="http://www.simplewebtips.com/wp-content/uploads/2009/03/image003.png" alt="SMTP Server Delivery Advanced" width="600" height="357" /><p class="wp-caption-text">Imagen 3 - Ventana de configuraciÃ³n avanzada de opciones de entrega del servidor SMTP</p></div>
<p>Por Ãºltimo, si el servidor real de correo necesita autenticaciÃ³n, nos dirigimos a &#8220;Outbound security&#8221; (en la pestaÃ±a de Delivery) y seleccionamos el modo de autenticaciÃ³n (probablemente &#8220;AutenticaciÃ³n BÃ¡sica&#8221; dado que la mayorÃ­a de los servidores estÃ¡n basados en sistemas unix) y colocamos nuestro nombre de usuario y contraseÃ±a (como en outlook o thinderbird).</p>
<div id="attachment_34" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-34" title="SMTP Server Delivery Outbound" src="http://www.simplewebtips.com/wp-content/uploads/2009/03/image004.png" alt="SMTP Server Delivery Outbound" width="600" height="357" /><p class="wp-caption-text">Imagen 4 - Opciones de salida del servidor SMTP</p></div>
<p>Puedes utilizar la configuraciÃ³n que se muestra en las imÃ¡genes para utilizar el servidor de GMail.</p>
<p>Tip: Puedes usasarlo con <a href="http://www.cesarnicola.com/blog/2009/power-up-bussiness-free-with-google-apps/">Google Apps</a> con la misma configuraciÃ³n de las imÃ¡genes pero colocando como nombre de usuario el correo completo (ejemplo: pepe@suempresa.com).<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplewebtips.com/2009/redirigir-trafico-a-otro-servidor-smtp/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Error al cargar un paquete en Visual Studio 2008</title>
		<link>http://www.simplewebtips.com/2009/error-al-cargar-paquete-visual-studio-2008</link>
		<comments>http://www.simplewebtips.com/2009/error-al-cargar-paquete-visual-studio-2008#comments</comments>
		<pubDate>Thu, 12 Mar 2009 02:12:15 +0000</pubDate>
		<dc:creator>CÃ©sar Nicola</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Office Sharepoint Services]]></category>
		<category><![CDATA[HTML Editor Error]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://www.cesarnicola.com/blog/?p=23</guid>
		<description><![CDATA[El miÃ©rcoles pasado, deberÃ­a de haber comenzado con la interfaz web de un proyecto; sin embargo, estuve todo el dÃ­a intentando resolver un error en el editor de cÃ³digo HTML de Microsoft Visual Studio 2008, el mensaje de error era &#8220;Error al cargar el paquete &#8216;Visual Web Developer HTML Source Editor&#8217;&#8221;. Lo primero que intentÃ© [...]]]></description>
			<content:encoded><![CDATA[<p>El miÃ©rcoles pasado, deberÃ­a de haber comenzado con la interfaz web de un proyecto; sin embargo, estuve todo el dÃ­a intentando resolver un error en el editor de cÃ³digo HTML de Microsoft Visual Studio 2008, el mensaje de error era &#8220;Error al cargar el paquete &#8216;Visual Web Developer HTML Source Editor&#8217;&#8221;.<br />
Lo primero que intentÃ© fue reparar la instalaciÃ³n, sin Ã©xito; luego probÃ© desinstalar &#8211; instalar. BusquÃ© en google y encontrÃ© una posible soluciÃ³n: desinstalar, eliminar algunas claves del registro (o utilizar un registry cleaner) pero eso tampoco funcionÃ³.</p>
<p>Finalmente, desinstalÃ© y probÃ© instalar la versiÃ³n en ingles (tenÃ­a la versiÃ³n en espaÃ±ol). Una vez finalizada la instalaciÃ³n, el error todavÃ­a seguÃ­a. Sin esperanzas abri el cmd y ejecutÃ© &#8220;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE&gt;devenv -ResetSkipPkgs&#8221; y voilÃ , el editor comenzÃ³ a funcionar&#8230;</p>
<p>AÃºn nose que fue lo que estaba funcionando mal, supongo que el prolema era que Windows estaba en inglÃ©s mientras que Visual Studio en espaÃ±ol&#8230; Uno mÃ¡s para los misterios sin resolver de Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplewebtips.com/2009/error-al-cargar-paquete-visual-studio-2008/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Email, Calendario, Documentos, y mÃ¡s&#8230; gratis con Google Apps</title>
		<link>http://www.simplewebtips.com/2009/email-calendario-documentos-gratis-con-google-apps</link>
		<comments>http://www.simplewebtips.com/2009/email-calendario-documentos-gratis-con-google-apps#comments</comments>
		<pubDate>Thu, 05 Mar 2009 18:02:10 +0000</pubDate>
		<dc:creator>CÃ©sar Nicola</dc:creator>
				<category><![CDATA[DNS]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Online Tools]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Free Service]]></category>
		<category><![CDATA[Google Talk]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[Mail Server]]></category>
		<category><![CDATA[Online Calendar]]></category>
		<category><![CDATA[Online Docs]]></category>
		<category><![CDATA[POP]]></category>
		<category><![CDATA[SMTP]]></category>

		<guid isPermaLink="false">http://www.cesarnicola.com/blog/?p=21</guid>
		<description><![CDATA[Necesitas un servidor de correo confiable? Una agenda online? y no quieres gastar ni un centÃ©simo? Entonces&#8230; Google es la soluciÃ³n. Con Google Apps tienes GMail, Google Calendar, GTalk, Google Docs, Google Sites, Google Video y mucho mÃ¡s&#8230; todo @tudominio y gratis. QuÃ© necesitas para obtener esto? Primero debes de tener un nombre de dominio [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Necesitas un servidor de correo confiable? Una agenda online? y no quieres gastar ni un centÃ©simo? Entonces&#8230; Google es la soluciÃ³n.<br />
Con Google Apps tienes GMail, Google Calendar, GTalk, Google Docs, Google Sites, Google Video y mucho mÃ¡s&#8230; todo @tudominio y gratis.</p>
<p>QuÃ© necesitas para obtener esto? Primero debes de tener un nombre de dominio con acceso a modificar los registros DNS (como ofreceÂ <a href="http://www.godaddy.com">www.godaddy.com</a>). Luego, accedes aÂ <a href="http://apps.google.com">apps.google.com</a> y completas el asistente de registro.</p>
<p>Si ya tienes una cuenta de gmail puedes centralizar todo el trÃ¡fico de correos en esa cuenta (lo utilizo y me parece genial). Si usas Outlook o Thunderbird, puedes habilitar el POP (o IMAP) para seguir utilizando el correo como antes.</p>
<p>GoogleÂ is the best!!! <img src='http://www.simplewebtips.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.simplewebtips.com/2009/email-calendario-documentos-gratis-con-google-apps/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Herramientas Ãºtiles para DNS</title>
		<link>http://www.simplewebtips.com/2009/herramientas-utiles-dns</link>
		<comments>http://www.simplewebtips.com/2009/herramientas-utiles-dns#comments</comments>
		<pubDate>Thu, 05 Mar 2009 17:44:43 +0000</pubDate>
		<dc:creator>CÃ©sar Nicola</dc:creator>
				<category><![CDATA[DNS]]></category>
		<category><![CDATA[Online Tools]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[dig]]></category>
		<category><![CDATA[nslookup]]></category>
		<category><![CDATA[Server Tool]]></category>

		<guid isPermaLink="false">http://www.cesarnicola.com/blog/?p=17</guid>
		<description><![CDATA[Si lo que necesitas es probar una configuraciÃ³n de DNS a travÃ©s del mundo esta herramienta te quitarÃ¡ un peso de encima: http://www.kloth.net/services/dig.php TambiÃ©n puedes utilizar el tradicional pero efectivo comando nslookup. Para realizar las consultas, puedes utilizar el servidor por defecto o algun otro. En la siguiente lista puedes encontrar servidores DNS de diferentes [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Si lo que necesitas es probar una configuraciÃ³n de DNS a travÃ©s del mundo esta herramienta te quitarÃ¡ un peso de encima:<br />
<a href="http://www.kloth.net/services/dig.php" target="_blank">http://www.kloth.net/services/dig.php</a></p>
<p>TambiÃ©n puedes utilizar el tradicional pero efectivo comando nslookup.</p>
<p>Para realizar las consultas, puedes utilizar el servidor por defecto o algun otro. En la siguiente lista puedes encontrar servidores DNS de diferentes partes del mundo:<br />
<a href="http://www.dnsserverlist.org/" target="_blank">http://www.dnsserverlist.org/</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.simplewebtips.com/2009/herramientas-utiles-dns/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Instalando Microsoft Dynamics CRM en un servidor con MOSS</title>
		<link>http://www.simplewebtips.com/2009/instalando-microsoft-dynamics-crm-en-un-servidor-con-moss</link>
		<comments>http://www.simplewebtips.com/2009/instalando-microsoft-dynamics-crm-en-un-servidor-con-moss#comments</comments>
		<pubDate>Tue, 13 Jan 2009 18:07:54 +0000</pubDate>
		<dc:creator>CÃ©sar Nicola</dc:creator>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Dynamics CRM]]></category>
		<category><![CDATA[Microsoft Office Sharepoint Services]]></category>
		<category><![CDATA[Microsoft SQL Server]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Install]]></category>
		<category><![CDATA[Microsoft Dynamics]]></category>
		<category><![CDATA[MOSS]]></category>
		<category><![CDATA[Sharepoint]]></category>

		<guid isPermaLink="false">http://www.cesarnicola.com/blog/?p=10</guid>
		<description><![CDATA[Ayer, el encargado del Ã¡rea de marketing me pidiÃ³ que instalara Micrsoft Dynamics CRM en el servidor. ComencÃ© con la instalaciÃ³n y todo parecÃ­a estar yendo bien hasta que el asistente de instalaciÃ³n me notificÃ³ un error:Â Â &#8221;Microsoft CRM El programa de instalaciÃ³n no ha podido validar el servidor de informes de Reporting Services especificado Error: [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Ayer, el encargado del Ã¡rea de marketing me pidiÃ³ que instalara Micrsoft Dynamics CRM en el servidor.<br />
ComencÃ© con la instalaciÃ³n y todo parecÃ­a estar yendo bien hasta que el asistente de instalaciÃ³n me notificÃ³ un error:Â Â &#8221;Microsoft CRM El programa de instalaciÃ³n no ha podido validar el servidor de informes de Reporting Services especificado Error: This operation is not supported on a report server that is configured to run in SharePoint integrated mode&#8221;</p>
<p>BusquÃ© en google una soluciÃ³n para este problema y la Ãºnica soluciÃ³n era instalar otra instancia de MS SQL Server en otro servidor&#8230; No era viable&#8230;</p>
<p>SeguÃ­ tratando hasta que finalmente encontrÃ© la soluciÃ³n al problema:</p>
<p>Abrir el &#8220;Reporting Services Configuration&#8221; en Inicio &gt; All Programs &gt; Microsoft SQL Server 2008 &gt; Configuration tools &gt; Reporting Services Management and configuration. Una vez ahÃ­, nos conectamos con el servidor y nos dirigimos a &#8220;Database&#8221; en el menÃº izquierdo. Clickeamos en Change Database y seleccionamos &#8220;Create a new report server database&#8221;. Seguimos las instruciones del asistente y listo! Ahora ya podemos instalar Microsoft Dynamics CRM.<br />
FÃ¡cil, no?</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.simplewebtips.com/2009/instalando-microsoft-dynamics-crm-en-un-servidor-con-moss/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Primera publicaciÃ³n</title>
		<link>http://www.simplewebtips.com/2009/first-post</link>
		<comments>http://www.simplewebtips.com/2009/first-post#comments</comments>
		<pubDate>Tue, 13 Jan 2009 17:32:46 +0000</pubDate>
		<dc:creator>CÃ©sar Nicola</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.cesarnicola.com/blog/?p=3</guid>
		<description><![CDATA[Hola! y bienvenidos&#8230; En esta primera publicaciÃ³n solamente quiero hablar de cuÃ¡l es el lineamiento general de este blog. Mi objetivo es compartir conocimiento y experiencias personales con todo el mundo. Mi nombre es CÃ©sar nicola tengo 19 aÃ±os y vivo en Uruguay. Estudio ingenierÃ­a en computaciÃ³n y trabajo en INSource Soft y tambiÃ©n como [...]]]></description>
			<content:encoded><![CDATA[<p>Hola! y bienvenidos&#8230;</p>
<p>En esta primera publicaciÃ³n solamente quiero hablar de cuÃ¡l es el lineamiento general de este blog.<br />
Mi objetivo es compartir conocimiento y experiencias personales con todo el mundo.</p>
<p>Mi nombre es CÃ©sar nicola tengo 19 aÃ±os y vivo en Uruguay. Estudio ingenierÃ­a en computaciÃ³n y trabajo en INSource Soft y tambiÃ©n como freelancer.</p>
<p>Bueno, esto es todo,<br />
Muchas gracias por visitar mi blog y espero que sea de tu agrado!<br />
Por cualquier motivo me pueden contactar a travÃ©s de la <a href="/contacto">pÃ¡gina de contacto</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplewebtips.com/2009/first-post/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

