lunes, 11 de febrero de 2013

Insertar código de seguimiento Google Analytics sin editar todas las páginas

Problema

Tienes un sitio escrito que a lo largo de los años has rellenado con abundantes páginas HTML, ASP, ASPX,....etc.
Ahora quieres incorporarle el código Javascript para el seguimiento con Google Analytics.
Pero no quieres editar todas las páginas del sitio ni modificar todos los desarrollos.
¿Cómo lo haces?
(El sitio se aloja bajo IIS7.5)

Antes que nada

Esta solución es parecida a la propuesta por Ruslan Yakushev en:

Using Outbound Rules to add Web Analytics tracking code


Pero no es la misma y he añadido algún detalle necesario, al final del post detallo los cambios.

Solución

Primer paso

Copia el código de google analytics y salvalo en un archivo accesible de tu sitio web.
A efectos de este ejemplo supondremos que lo guardamos con el nombre google.js en un directorio /scripts
El código lo puedes copiar y pegar de:
Panel Analytics / tu sitio / administrador / Información de seguimiento

Segundo paso

Utiliza el modulo URL Rewrite y crea una regla de salida (outbound Rule)
Le creas una pre-condición con esta información:
  1. Name: "EsHTML"
  2. Using: "Regular Expressions"

Haz clic en "Add" para que tener el cuadro de dialogo  "Add condition"
En el cuadro de dialogo escribe:

  1. Condition input: "{RESPONSE_CONTENT_TYPE}"
  2. Check if input string: "Matches the pattern"
  3. Pattern: "^text/html"

Ahora debes 
  1. El matching scope : Content
  2. The content:  matches the Pattern
  3. Pattern:</head>
Marca la casilla ignorar mayúsculas (Ignore case)
La acción debe ser:

  1. Action type: Rewrite
  2. Value: <script src="/scripts/google.js" type="text/javascript"></script></head>

Explicación

Lo que hacemos es localizar el final de los encabezados de página para insertar el código Java que necesita Google Analytics.
Lo hacemos con una simple búsqueda y reemplazo. Solo procesamos los archivos con HTML que es para los que tiene sentido.

Hay dos diferencias con el articulo de Ruslan Yakushev  mencionado más arriba:
  1. Utilizamos una archivo externo. De hecho si intentamos usar el código Java directamente en el valor de reemplazo tendremos problemas porque los simbolos $ utilizados entran en contradicción con la sintaxis de URL rewriter.
  2. Reemplazamos </head> en lugar </body>. Es mas acorde con las recomendaciones de Google Analytics.

miércoles, 6 de febrero de 2013

El cliente del SCCM no se intala en algunos ordenadores

Síntomas

Cuando ya creías que tenias resuelta la instalación del cliente para System Configuration Center mediante las actualizaciones de Windows Update  resulta que en algunos ordenadores no se instala.
Ni siquiera se crea el directorio %windir%\CCM.

Solución

En %windir%\windowsupdate.log encuentras una linea sospechosa  # AU is not configured yet que te lo dice todo.
Tienes que habilitar "Configurar actualizaciones automática"s en la sección Windows Update de la GPO donde has configurado "Especificar la ubicación del servidor de Windows Update en la Intranet"

Explicación

¿Por qué funcionaba en unas maquinas y en otras no?
En muchas maquinas la persona que instala configura los servicios de Windows Updates en el primier arranque. En otros casos no se hace, confiando que las actualizaciones se descargaran del WSUS.
Para ello la GPO del WSUS anterior configuraba las actualizaciones automáticas para que se instalaran a una hora determinada.
Pero al cambiar la GPO se recuperaba la configuración propia de la maquina en el apartado configuración de Actualizaciones de Windows.


miércoles, 23 de enero de 2013

Problemas con jquery 1.9 en visual studio 2012

Síntomas:

Actualizas la versión de jQuery a 1.9.0 con el administrador de paquetes.
Tus aplicaciones dejan de funcionar incluso aunque actualices el resto de paquetes con dependencias de jQuery.
En mi caso dejo de funcionar el entorno jquery.mobile

Solución:

Vuelve a la versión 1.8.3 de jQuery utilizando la consola de Powershell de VS2012
Dado que hay diversos paquetes que dependen de jQuery te será comodo un powershell script.
Yo me cree este:
Uninstall-Package jquery.mobile
Uninstall-Package jQuery.UI.Combined
Uninstall-Package Microsoft.jQuery.Unobtrusive.Ajax
uninstall-package Microsoft.jQuery.Unobtrusive.Validation
Uninstall-Package jQuery.Validation 

Uninstall-Package jquery
install-Package jquery -Version 1.8.3

install-Package jquery.mobile
install-Package jQuery.UI.Combined
install-Package jQuery.Validation 
install-package Microsoft.jQuery.Unobtrusive.Validation
install-Package Microsoft.jQuery.Unobtrusive.Ajax

Dependiendo de los paquetes que tengas instalados pueden salir errores, solo tienes que ir añadiendo los paquetes al script. Las dependencias también te pueden crear problemas, todo es cambiar el orden.

Comentario:

Con el tiempo se resolverá pero es interesante conocer como revertir Nuget.

martes, 22 de enero de 2013

Los paquetes de software no se distribuyen en SCCM 2012

Síntomas:

Observas que los paquetes de software (por ejemplo actualizaciones) no están distribuyéndose mediante System Center Configuration Manager 2012
Cuando vas a \Monitoring\Overview\Deployments y miras el status de un  paquete con error ves que hay un conflicto de grupos (Group Conflict Error 0x87d00692)

Solución

Ves a un equipo con el problema y abre  WUAHander.log (en mi caso en c:\windows\CCM\logs) con el Configuration manager trace log tool
Probablemente veras una línea donde dice

Enabling WUA Managed server policy to use server: http://wsus.empresa.org:80 WUAHandler 14/01/2013 12:50:47 2728 (0x0AA8)
Y luego otra línea donde dice:
Group policy settings were overwritten by a higher authority (Domain Controller) to: Server  http://wsus.empresa.org and Policy ENABLED WUAHandler 14/01/2013 12:50:49 2728 (0x0AA8)
Failed to Add Update Source for WUAgent of type (2) and id ({77E243DD-3DD0-4F77-B5DF-2029B77820B9}). Error = 0x87d00692. WUAHandler 18/01/2013 16:21:09 38480 (0x9650)
La clave está en lo que he marcado en negrita: en el segundo mensaje falta el puerto 80 detrás del servidores WSUS.
Debes corregirlo en la GPO que creaste para instalar el cliente SCCM.
Otro posible error es no usar la fqdn completa, por ejemplo http//wsus:80 en lugar de http://wsus.empresa.org:80



domingo, 20 de enero de 2013

jquery.mvc.net y vb.net

Enunciado

En un proyecto web mvc instalas desde nuget jquery.mvc.net y nada funciona

Solución

Cambia todas las  plantillas, controladores, startapp a vb.net. Estan en c#

Comentario

Si quieres el código posteame un comentario y lo publicaré.  (Voy corto de tiempo)

miércoles, 16 de enero de 2013

Errores al generar código en un modelo EDM en VS2012

Cómo reproducir el problema:

En Visual Studio 2012 crear un modelo de entidades de datos (Entity Data Model o EDM) desde una base de datos existente.

Primer problema:

Aparecen errores relativos a conflictos entre nombres de propiedad que se repiten, una por cada campo.
Solución:
Compila la aplicación y desaparecen. (magia pura al estilo datasets)

Continuamos:

Añades un elemento de generación de código, concretamente: EF 5.x dbContextGenerator.

Síntomas:

Aparecen errores que señalan métodos duplicados: New(), OnModelCreating y propiedades....
Por ejemplo:

'Protected Overrides Sub OnModelCreating(modelBuilder As System.Data.Entity.DbModelBuilder)' tiene varias definiciones con firmas idénticas.

Solución:

En el explorador de soluciones activa mostrar todos los archivos. Ves al EDM que has creado,
Veras archivos tt (templates) que a su vez contienen el código generado.
Tienes los que incorpora por defecto
  • (nombre del EDM).tt
  • (nombre del EDM).context.tt
y los que has añadido.
  • (nombre del elemento a generador de código).tt
  • (nombre del elemento a generador de código).context.tt
Bueno ahora viene lo divertido
En Visual Studio 2012 no hace falta usar EF 5.x dbContextGenerator, ya se utiliza por defecto para generar el código.
En  VS2010 no eran estas las plantillas por defecto y veras  por ahí artículos paso a paso en que te dicen que añadas dbContextGenerator.

Así que borra los elementos que has añadido:
  • (nombre del elemento a generador de código).tt
  • (nombre del elemento a generador de código).context.tt
Los errores desparecerán. Y ya sabes no vuelvas a añadir el elemento de generador de código..

Nota: Podría ocurrir que hayas usado otro tipo de elemento de generación de código, En ese caso deberías borrar las originales del proyecto.

Ver: EF Designer Code Generation Templates  en http://msdn.microsoft.com/en-us/data/jj613116.aspx




jueves, 13 de diciembre de 2012

Reducir el tamaño de la base de datos del VMware Vcenter Server

Sintomas:

Vcenter va lento e incluso en un  momento el servicio se para con el siguiente error en el visor de eventos
No se encuentra la descripción del id. de evento 1000 en el origen .........
Se incluyó la siguiente información con el evento:

An unrecoverable problem has occurred, stopping the VMware VirtualCenter service. Error: Error[VdbODBCError] (-1) "ODBC error: (42000) - [Microsoft][SQL Native Client][SQL Server]Could not allocate space for object 'dbo.VPX_TEXT_ARRAY' in database 'VIM_VCDB' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup." is returned when executing SQL statement "INSERT INTO VPX_TEXT_ARRAY WITH (ROWLOCK) (ARRAY_ID, TYPE_ID, VALUE, MO_TYPE, MO_ID) VALUES (?, ?, ?, ?, ?)"

El recurso de mensaje está presente, pero el mensaje no se encuentra en la tabla de cadenas o mensajes
O algo similar. La calve es que la base de datos se ha llenado.

Solución

Deten el servicio de vCenter Server
En la base de datos de Vcenter ( VIM_VCDB )
Haz una copia de seguridad completa.

Abre la tabla dbo.VPX_PARAMETER para editar las primeras 200 filas.
Edita las filas:
event.maxAge  nuevo valor: 30
event.maxAgeEnabled value valor true
task.maxAge nuevo valor: 30

task.maxAgeEnabled value valor true

Luego ejecuta el procediminento almacenado dbo.cleanup_events_tasks_proc Le llevará bastante tiempo pero cuando acabe el vCenter irá como una seda.   Fuente: http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1025914