Todas las entradas de: Javier Iglesias

Acerca de Javier Iglesias

Desarrollador de aplicaciones informáticas, diseñador Web y SEO

Convertir UNIX TimeStamp a DateTime

Es posible que en alguna ocasión en tu vida de programador te hayas encontrado con valores de fecha que aparentemente no lo son, pueden ser generalmente valores enteros muy grandes como por ejemplo 1415463675.

En mi experiencia lo que puedes estar viendo es un valor almacenado en un formato Excel o un UNIX timestamp.

Para convertir UNIX TimeStamp a DateTime en C# .Net podremos utilizar lo siguiente:

public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
{
    // Unix timestamp son los segundos pasados después de una fecha establecida, por lo general unix utiliza esta fecha 
    System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
    dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
    return dtDateTime;
}

De esta manara podrás ver que el valor 1415463675 se corresponde a la fecha 11/08/2014 / 4:21pm (UTC).

Copiar y restaurar bases de datos MySQL con codificación de caracteres intacta

Si quieres preservar caracteres como ñ, ó, ç u otros del estilo cuando migras una base de datos MySQL deberás usar mysqldump con las siguientes opciones:

mysqldump -u <tu_usario> -p <tu_password> –default-character-set latin1 –skip- character-set <tu_db> archivo.sql

Para restaurarla:

mysql -u <tu_usuario> -p <tu_password> –default-character-set latin1 <tu_db> < archivo.sql 

Esto solucionará problemas al restaurar copias de seguridad mediante código. En mi código .Net realizaba un proceso que creaba tanto la copia de seguridad en scripts .sql y también tenía otro proceso que realizaba la copia de seguridad a partir del fichero generado anteriormente. Sin embargo si el comando lo ejecutaba a través de la consola de windows el proceso lo realizaba correctamente.

Aparentemente el primer proceso generaba correctamente el archivo sql pero a la hora de ejecutar el proceso no podía continuar cuando encontraba un caracter especial, (en mi caso la ñ).

Si realizas copias programadas también deberás tenerlo en cuenta sobre todo si ejecutas la restauración mediante alguna aplicación .net. Y sobre todo leer el fichero de esta manera:

StreamReader reader = new StreamReader(file,Encoding.GetEncoding(«latin1»));

Como ves los ingleses lo tienen más fácil porque nunca le ocurrirán problemas de este tipo a no ser que trabajen con aplicaciones multiidioma. Pero en cualquier caso deberías tener siempre en cuenta copiar y restaurar bases de datos MySQL con codificación adecuada.

 

Code First – Resetear Entity Framework Migrations

Si trabajas con Code First, Entity Framework y Migrations es posible que a medida que avanzas en el proyecto llegues a un estado inconsistente de la base de datos cuando intentas actualizarla con el comando update-database.

Lo ideal es solucionarlo con las opciones que te puede ofrecer codefirst, pero si aún así llegas a un punto que creas necesario resetear las migraciones lo que deberás hacer es lo siguiente:

1. – Borrar el directorio Migrations de tu proyecto.
2. – Borrar la tabla _MigrationsHistory de tu base de datos.
3. – Ejecutar el siguiente comando en la consola de administración de paquetes.

Enable-Migrations -EnableAutomaticMigrations -Force

4. – Finalmente ejecutar:

Add-Migration Initial

Todo este proceso hace que se cree un nuevo archivo Initial.cs en la carpeta de Migrations. En él podrás ver (como siempre que realizas una migración) los métodos Up() y Down() que permiten la aplicación de la migración o el regreso al estado anterior.

En este punto antes de utilizar el comando update-database deberás tener en cuenta si quieres borrar la base de datos y partir con la base de datos vacía o aprovechar los datos que ya tenías previamente.

A) Si deseas partir con una base de datos vacía será tan sencillo como borrar todas las tablas de la base de datos y ejecutar update-database.
B) Si quieres aprovechar los datos deberás profundizar en el método Up() de la migración creada y ver que tablas quieres que se regeneren. Previamente a ejecutar update-database deberás borrar las tablas que te interesan resetear en tu base de datos y comentar las líneas de código que crean las tablas que deseas conservar en el método Up(). Una vez realizadas estas dos comprobaciones podrás utilizar el comando update-database.

Espero que este artículo te haya servido de ayuda para Resetear Entity Framework Migrations.

Múltiples columnas de identidad especificadas

Si utilizas programación CodeFirst en tu proyecto .Net es posible que al realizar una modificación en el nombre de la columna que guarda la clave de una tabla/clase/DbSet aparezca el siguiente error al utilizar update-database con alguna migración pendiente.

Multiple identity columns specified for table ‘nombre_tabla’. Only one identity column per table is allowed.

Este error indica que existen múltiples columnas de identidad especificadas, es decir, codefirst entiende que existe más de una columna clave de la tabla.

Para solucionar este problema y hacer que la migración funcione deberás reordenar la lista de operaciones en el script de migración pendiente. Deberás ubicar las operaciones de borrado (drop) primero y luego añadir la columna con la nueva clave.

public partial class RenameKey : DbMigration
{
    public override void Up()
    {
        DropPrimaryKey("dbo.nombre_tabla", new[] { "OldId" });
        DropColumn("dbo.nombre_tabla", "OldId");
        AddColumn("dbo.nombre_tabla", "Id", c => c.Int(nullable: false, identity: true));
        AddPrimaryKey("dbo.GameSummary", "Id");
    }

 

Optimizar cache en IIS

En este post aprenderemos a optimizar cache en IIS editando el web.config.

Si tu servidor de alojamiento web es IIS puedes mejorar la velocidad de tu sitio estableciendo el tiempo de la caché insertando dentro de <system.webServer> del archivo web.config de la raíz de tu aplicación web:

<staticContent>
<clientCache cacheControlMode=»UseMaxAge» cacheControlMaxAge=»7.00:00:00″ />
</staticContent>

Donde cacheControlMode puede tomar los valores:

  • «NoControl»: no se establece un tipo de caché para el sitio, con lo que tomará los valores globales de configuración heredados.
  • «DisableCache»: caché deshabilitada para el sitio.
  • UseMaxAge: se especifica una edad de expiración de la caché en el parámetro cacheControlMaxAge en días, horas, minutos y segundos (d.hh:mm:ss)
  • UserExpires: indica la fecha exacta de expiración de la caché.

Cadena de conexión MultipleActiveResultSets

El parámetro MultipleActiveResultSets dentro de una cadena de conexión permite mantener conjuntos de resultados múltiples. Si este parámetro se establece en false la aplicación debe procesar o cancelar todos los conjuntos de resultados antes de poder ejecutar cualquier otro dentro de esa conexión.

Un error típico cuando se dehabilita este parámetro es el siguiente:

There is already an open DataReader associated with this Command which must be closed first.

En una cadena de conexión MultipleActiveResultSets es un característica que funciona con sqlserver.

Copiar una solución quitando git

Si tenemos una aplicación en visual studio que está enlazada a git y queremos copiarla en otro lugar quitando git lo que hay que hacer es tan sencillo como copiar el contenido de toda la solución salvo los ficheros de git.

¿Cuáles son los ficheros de git en una solución de visual studio?

Son los siguientes:

contenidogitsolucionvs

Si nos fijamos el directorio .git está como fichero oculto y para visualizarlo será necesario que cambies tu configuración del explorador de ficheros de windows.

Para copiar una solución quitando git lo que deberás borrar son estos ficheros una vez copiada.