Cuando uno quiere terminar un trabajo, las leyes de Murphy están a la mano, siempre tu notebook va a tener algún problema :(
Tengo o mejor dicho, tenia un error en Windows XP Media Center al abrir el Explorador de Windows, o sea al ejecutar C: o al abrir MI PC, cualquier evento que lo utilice y me estaba desesperando. Hay que respirar profundamente antes de dar golpes ;)
En el Visor de Eventos se visualizaba:
Faulting application explorer.exe, version 6.0.2900.3156, faulting module nzdd.dll, version 4.0.0.40, fault address 0x000b4930.
Googleando un poco di con la solución: BORRAR o RENOMBRAR el archivo.
A quien pertenece?
Espero que le pueda servir a alguien...
Estos tipos de Google, siempre tiene algo! y siempre es bueno darle una mirada. Estaba mirando Google Chart API, una forma sencilla de poder tener gráficos en nuestras web (o por ejemplo en nuestros blogs) sin estar utilizando nada mas que una URL, ... mediante un querystring enviamos los datos y tenemos nuestro gráfico directamente desde Google, "gráficos a la carta"
La idea de este servicio es brindar a los desarrolladores lo que antes era solamente para uso interno (ej: Google Finance) ahora lo publicaron para utilizarlo por el resto de los mortales
Con una seria de parámetros en la URL de la API en una tag IMG, y nos devuelve un PNG.
<a src="http://chart.apis.google.com/chart?param1=valor¶m2=valor2¶mN=valorN" alt="Grafico en Geeks.ms" />
Hay que dominar estos "parámetros" (o encapsularlo en un webcontrol que es mi idea en estos días...para practicar), pero para eso tenemos la ayuda en esta página donde nos brinda el dialecto para hablar con la API
Encontré unos controles, por el que necesita probarlo en sus proyectos sin estudiar el idioma:
Política de Uso: solamente 50000 peticiones por usuario por día.
Por ejemplo:
Ejemplo 1
<img src="http://chart.apis.google.com/chart?
cht=p3
&chd=s:hW
&chs=450x150
&chl=Geeks.ms|World"
alt="Grafico en Geeks.ms" />
Ejemplo 2
<img src="http://chart.apis.google.com/chart?
chs=450x200
&chd=s:AWcaZPaWXX
&cht=lc
&chxt=x,y
&chxl=0:|Enero|Febrero|Marzo|Abril|Mayo|1:||usuarios"
alt="Grafico en Geeks.ms" />
Ejemplo 3
<img src="http://chart.apis.google.com/chart?
cht=lxy
&chs=450x200
&chd=t:0,30,60,70,90,95,100|20,30,40,50,60,70,80|10,30,40,45,52|100,90,40,20,10|-1|5,33,50,55,7
&chco=3072F3,ff0000,00aaaa
&chls=2,4,1
&chm=s,FF0000,0,-1,5|s,0000ff,1,-1,5|s,00aa00,2,-1,5" alt="Grafico en Geeks.ms" />
Tipos de Gráficos
Lineas
Barras
Torta
Diagramas de Venn
Gráficos de burbujas
Varios
Enlaces
Cuando uno mas quiere utilizar un elemento en programación seguro que le falta la propiedad que desea...esto podría ser tranquilamente una Ley de Murphy, como en este caso donde por razones de UI: el control se escondía mas allá de límite de la página
Y cuando me dispongo a buscar una propiedad para posicionar o visualizar a la izquierda (tipo el control HoverMenu que tiene una propiedad PopupPosition="Left") no la tiene, pero lo bueno que es código abierto así que podemos "poner nuestras manos en el asunto"
Como utilizar el control ValidatorCalloutExtender
Cuando insertamos el control ValidatorCalloutExtender
Tenemos la posibilidad de "extender" los controles de validación, dando a estos un mecanismo de UI mas "sensible al usuario"
Ejemplo:
Si tenemos un formulario con controles de validación
Al validar...
El código que nos define (la parte del los controles)
<tr>
<td style="width: 56px">
Nombre:</td>
<td style="width: 296px">
<asp:TextBox ID="txtNombre" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvNombre" runat="server" Display="Dynamic"
ErrorMessage="El campo <strong>NOMBRE</strong> es requerido. Verifique"
ControlToValidate="txtNombre" CssClass="itemError"> </asp:RequiredFieldValidator>
<cc1:ValidatorCalloutExtender ID="vceNombre" runat="server"
TargetControlID="rfvNombre"
Width="200px"
HighlightCssClass="highlight"
WarningIconImageUrl="warning.gif"
CloseImageUrl="close.gif" >
</cc1:ValidatorCalloutExtender>
</td>
</tr>
<tr>
<td style="width: 56px; height: 24px;">
Email:</td>
<td style="width: 296px; height: 24px;">
<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvEmail" runat="server" Display="Dynamic"
ErrorMessage="El campo <strong>EMAIL</strong> es requerido. Verifique"
ControlToValidate="txtEmail" CssClass="itemError"> </asp:RequiredFieldValidator>
<cc1:ValidatorCalloutExtender ID="vceEmail" runat="server"
TargetControlID="rfvEmail"
Width="200px"
HighlightCssClass="highlight"
WarningIconImageUrl="warning.gif"
CloseImageUrl="close.gif" >
</cc1:ValidatorCalloutExtender>
</td>
</tr>
Este mismo ejemplo o similar lo podemos encontrar en aquí en la Demo de ValidatorCalloutExtender
¿Como desplegar a la izquierda el Validator Callout?
Como comente no existe tal propiedad, pero como no fui el único que la solicito existe un "fix" entre los varios Issues que lo podemos ver en el Issue Tracker de AjaxControlToolkit
- ValidatorCallout positioning problem
Para eso hay que descargarse un fix (CalloutPosition.zip) y agregarlo al proyecto y compilarlo de nuevamente
Si descargamos los archivos del codigo fuente tenemos una estructura de directorio asi
y cuando descomprimo el archivo CalloutPosition.zip, aparecen los tres archivos que necesitamos cargar al proyecto
Donde iria?.. si no queremos pensar mucho va aqui
AjaxControlToolkit\AjaxControlToolkit\ValidatorCallout
El único archivo que tenemos que agregar al proyecto es CalloutPosition.cs, lo otros lo sobreescribimos.
Abrimos la solucion
La compilamos... y si tenemos la referencia en el VS2005 en la barra de herramientas a una ubicación que se actualiza con dicha compilación no tendríamos que hacer nada.
Sino tenemos que quitar la referencia al componente antiguo y agregar el nuevo.
y Ahora si!
Tenemos la propiedad CalloutPosition, y lo posicionamos a la izquierda
y el resultado
En este ejemplo no es el perfecto, ya que no se visualiza el label "Nombre" pero en el proyecto teníamos fondos ya predefinidos donde el nombre del label era una imagen arriba del control
Listo para utilizar
Aquí tiene ya el componente listo para utilizar (sin descargar nada mas, sin compilar)
- AjaxControlToolkit ConCalloutPosition
http://geeks.ms/files/folders/fernandezja/entry69631.aspx
Un dilema que teníamos y que necesitábamos terminar nuestra incertidumbre con nuestros amigos de Google enviando emails y quien sabe "ondas mentales", era como cargar o instalar el código de seguimiento en dos cuentas de Google Analitycs: GA en la misma página, pero como a todos la respuesta recibida del "equipo de GA" fue (hace un par de meses)
(...)Google Analytics no admite la inclusión de varios números de cuenta para el código de seguimiento, ya que esto podría generar informes incorrectos.
No podemos garantizar la precisión de los informes con este tipo de implementación.(...)
Aquí el email original...(que mal escribi analytics en el asunto del mensaje ;( ...)
Por aquí en Geeks teníamos estos artículos
La solución: Instalar código de seguimiento de dos cuentas de Google Analytics
Pero por fin encontré la solución de la mano de Google, y sus queridos
Con el código anterior (si todavía no lo cambiaste mira aquí)
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
<script type="text/javascript">
_uacct = "UA-326213-1";
urchinTracker();
_uff = 0; // Reset flag to allow for second account
_uacct = "UA-310446-14";
</script>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ?
"https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost +
"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var primerCodigo = _gat._getTracker("UA-326213-1");
primerCodigo._initData();
primerCodigo._trackPageview();
var segundoCodigo = _gat._getTracker("UA-310446-14");
segundoCodigo._initData();
segundoCodigo._trackPageview();
</script>
Yo lo tengo aqui en el mismisimo blogs de Geeks.ms (eso que tanto queríamos) en mi blog
Donde escribir... en el CS 2.1?
Para eso vamos donde nos comenta Rodrigo: Estadísticas del blog con Google Analytics y Community Server 2.1
En el Panel de Control
en la parte de
