12 de octubre: Fiesta Nacional de España

He recibido un texto, en el que lo único que puedo hacer es pequeñas correcciones... añadir información adicional y publicarlo. Va desapareciendo el complejo autoimpuesto de celebrar:

En el cole les enseñarán a celebrar Halloween, carnaval o el día de la paz, pero no el día de su Patria. Cuéntales que no es sólo un día de fiesta. Que es el día de España.

Diles que estamos aquí desde hace milenios. Que éramos tan tercos que preferíamos morir a ser esclavos. Háblales de Numancia y Sagunto. De la “Devotio ibérica”. De cómo el honor y la lealtad ya eran nuestra divisa hace más de 2000 años.
 
Cuenta a tus hijos que hemos pasado siglos peleando contra el invasor. Que cada palmo de la tierra que pisamos se ganó luchando. Y que aquellos que cayeron combatiendo no morirán nunca.
 
Cuéntales que fuimos capaces de conquistar otro mundo. Y que lo llamamos Nueva España. Que peleamos contra ejércitos de guerreros de leyenda en su propia tierra. Y que vencimos. Que derrotamos a aquellos que usaban a otras tribus como ganado y masacraban a sus esclavos en altares. Y cuéntales que allí construimos universidades, hospitales y catedrales.
 
Que les llevamos nuestro idioma y nuestro arte. Enséñales a no creer las mentiras que inventaron aquellos que siempre nos odiaron para encubrir sus propios crímenes.
 
Habla a tus hijos de Hernán Cortés, de Francisco Pizarro, de Mencía Calderón, Hernando de Soto, Ponce de León, Núñez de Balboa… Cuéntales que lanzamos expediciones por todo el mundo. Que buscábamos aventura y conocimiento. Y que llevamos nuestra cultura, nuestros valores y hasta vacunas gratis.
 
 
No dejes que olviden a qué pueblo pertenecen. Que fuimos un imperio donde no se ponía el sol y que el mundo fue una selva de picas españolas. Háblales de nuestros Tercios victoriosos. Diles que fuimos el escudo de Europa. Que defendimos nuestra cultura cuando todo eran enemigos.
 
Enséñales que haría falta una vida para contar todas las gestas de España y que cada latido del corazón nos recuerda que llevamos la misma sangre de aquellos que dieron su vida por España. Que renegar de la patria es tan miserable como despreciar a una madre. Que ser español es un orgullo y que nuestra forma de vivir ha de hacernos dignos de tal honor.
 
Di a tus hijos que hoy es el día de La Patria.
 
 

Descargar archivos grandes desde Azure Storage con Firmas de acceso compartido (SAS)

El almacenamiento de datos en cloud debe conllevar una política de acceso y control adecuada al tipo de información. Dentro de Azure podemos utilizar direcciones de enlace temporales para operaciones con ficheros en diversos escenarios. En nuestro caso utilizaremos SAS (Shared Acces Signature) para la descarga directa de archivos de gran volumen, de esta forma además de un mayor control tambien descargaremos de operaciones de entrada/salida a nuestro servidor, permitiendo mayor rapidez de acceso.

La dirección que se genera es del tipo:

https://miespacio.blob.core.windows.net/MiContenedor/MiFichero.zip?sv=2016-05-31&sr=b&sig=Kasdf8mqcgh4NMjQcRaZMTA1bSpXJrajsy404ZkDipE%3D&se=2018-08-27T12%3A10%3A33Z&sp=r

Donde distinguimos a continuación de la dirección URI del recurso un Token formado por:

  • sv: versión de API para ejecutar
  • sr: especificamos B para un blob y C para container
  • se: fecha limite a partir de la cual el enlace expira
  • sp: permisos asociados, en este caso R solo de lectura

Para ver más parametros adicionales y otras opciones tienes disponible la documentación completa aquí.

CloudStorageAccount cuentaAlmacen = new CloudStorageAccount(new StorageCredentials("miespacio", "clave"), true);
        var blobClient = cuentaAlmacen.CreateCloudBlobClient();
		
        var container = blobClient.GetContainerReference("MiContenedor");
        var blob = container.GetBlockBlobReference("MiFichero.zip");
		
        var token = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
            {
                Permissions = SharedAccessBlobPermissions.Read,
                SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(60),
            }, new SharedAccessBlobHeaders()
            {
                ContentDisposition = "attachment; filename="+nombreFichero
            });

        var url = string.Format("{0}{1}", blob.Uri, token);
        Response.Redirect(url, true);

 

Microsoft SQL Server Management Studio: cache is out of date

Es agosto, el software tambien necesita vacaciones...

Si durante las consultas a algunas tablas en MSSMS aparece el error "The Visual Studio componente cache is out of date" la solución rápida y sencilla pasa por vaciar la carpeta temporales de windows %TMP%

C:\Users\nombre_usuario_windows\AppData\Local\Temp\

Si además el servidor SQL esta en medio de la playa mientras tu sigues programando, puedes probar a seguir con la limpieza de más memorias intermedias, si utilizas Server 2016 o Azure puedes limpiar la cache de los procedimientos de la base de datos:

USE NombreDeMiBBDD;
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

 

Mientras esperas que la consulta devuelva los valores esperados ;D

 

 

Transferir funciones FSMO

A la hora de incorporar nuevos servidores en un directorio activo, debemos revisar que funciones queremos transferir antes de dar de baja alguno. En entornos sencillos en los que un equipo es el único encargado de todos ellos debemos:

  1. Añadir el nuevo servidor al dominio existente
  2. Instalar y configurar los roles de Directorio Activo
  3. Migrar las funciones: RID, Controlador principal de dominio e infraestructura, de forma gráfica podemos hacerlo desde la gestión de "Usuarios y equipos de Active Directory". Pulsaremos sobre "Cambiar" en cada una de las tres pestañas, debemos hacerlo desde el sistema operativo más reciente:



  4. Consultamos las funciones FSMO con el comando: "netdom query fsmo" veremos que todavía queda por transferir "Maestro de esquema". Para realizado desde la interfaz gráfica ejecutamos desde la línea de comandos con permisos de administrador (dependerá de la versión de Windows):
    regsvr32 schmmgmt.dll
  5. Iniciamos "mmc" y añadimos el complemento "Esquema de Active Directory" pulsamos con el botón derecho sobre el nodo y seleccionamos la opción de "Cambiar el controlador de dominio de Active Directory…" y/o "Maestro de operaciones" seleccionado "Cambiar" como en pasos anteriores.

Plesk + Dotnetnuke + Let's Encrypt = CMS + SSL

Algunos gestores de contenidos, como en este caso Dotnetnuke, tienen reglas propias de redirección que pueden interferir a la hora de instalar certificados gratuitos de Let's Encrypt desde panel de control Plesk. Existen varias opciones, pero una de la más sencilla para este problema concreto es cambiar el tratamiento de las redirecciones del CMS:

    <friendlyUrl defaultProvider="DNNFriendlyUrl">
      <providers>
        <clear />
        <add name="DNNFriendlyUrl" type="DotNetNuke.Services.Url.FriendlyUrl.DNNFriendlyUrlProvider, DotNetNuke.HttpModules" includePageName="true" regexMatch="[^a-zA-Z0-9 _-]" urlFormat="humanfriendly" />
      </providers>
    </friendlyUrl>

Sustituyendo "advanced" por "humandfriendly", lo que dejará el sitio añadiendo la extensión .aspx de nuevo generando el directorio "\.well-known\acme-challenge\" que incluye la descarga del ficheros sin extensión como texto plano en su propio web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <staticContent>
            <remove fileExtension="." />
            <mimeMap fileExtension="." mimeType="text/plain" />
        </staticContent>
    </system.webServer>
</configuration>

Ahora podemos volver a dejar la redirección como "advanced". Si, la otra opción es añadir el fichero anterior en el directorio indicado, Let's Encrypt creará una petición de comprobación del tipo:

http://midominio.es/.well-known/acme-challenge/8-TsVgjMp5v3BRkUVk4zwdiCVDlSkDaf...b

A partir de versiones más modernas, podemos añadir una configuración específica de URLs amigables desde la configuración Host en Sistemas > Configuración del sisstema > Configuración Avanzada > Configuración de URLs amigables