Como usar dimensiones fijas en cm en WKHTMTOPDF

Esto se da de la necesidad de hacer que las dimensiones respondan a un A4 y trabajar los diferentes elementos en cm.

Para esto debemos enviar el parámetro: –disable-smart-shrinking y setear los parámetros de margen a 0.

Fuente: https://github.com/mikehaertl/phpwkhtmltopdf

    if(str_starts_with($htmlTemplate,'<!--disable-smart-shrinking-->')){
        $options[] = 'disable-smart-shrinking';
        $options['margin-top']    = 0;
        $options['margin-right']  = 0;
        $options['margin-bottom'] = 0;
        $options['margin-left']   = 0;
    }

Codigo:

<!--disable-smart-shrinking-->
<html>
    <head>
        <style type="text/css">
            #test{
                width:21cm;
                height:29.7cm;
                border:1px solid red;
                background-color:#313131;
                color:#ffffff;
                box-sizing: border-box; 
            }
            body{
                margin:0px;
                padding:0px;
                width:21cm;
                height:29.7cm;
            }

        </style>
    </head>
    <body>
        <div id="test">
            Contenido
        </div>
    </body>
</html>

Resultado:

Utilitario para Migración de una zona de route53

Utilitario para la conversión de la respuesta de list-resource-record-sets a un formato válido para change-resource-record-sets, para la migración de una zona de route53 de una cuenta a otra dentro de AWS

En base a la documentación de AWS: AWS: Migrating a hosted zone to a different AWS account

Pega el resultado de aws route53 list-resource-record-sets –hosted-zone-id XXXXXXXXXXXX aquí:


Resultado

Tabla de Registros

Name Type TTL ResourceRecords

Migración de una Hosted Zone de una cuenta a otra

Debido a una reestructuración, es necesario mover las zonas de una cuenta a otra, para esto se ejecutaron las instrucciones de: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-migrating.html

Para esto necesitamos

  • 2 Cuentas de AWS
  • 1 Hosted zone por cada 1
  • cat Usuarios con acceso CLI para cada cuenta con permisos de
    • route53:ListResourceRecordSets (Cuenta de Origen)
    • route53:ChangeResourceRecordSets (Cuenta de Destino)

Una vez que tenemos todo lo necesario, lo primero que hacemos es descargar el listado desde la cuenta de origen, utilizando:


aws route53 list-resource-record-sets --hosted-zone-id XXXXXXXXX --profile cuentaOrigen > origen.json

Una vez que tenemos este archivo, debemos convertirlo a un formato apto para la carga, para esto ingresaremos en el siguiente utilitario:

Utilitario Migración

En este utilitario podemos pegar el contenido del archivo de origen y obtener un archivo con un formato apto para ejecutar el comando Change Resource Record Sets


aws route53 change-resource-record-sets --hosted-zone-id YYYYYYYYY --change-batch file:///resultado.json --profile cuentaDestino

Carga de Base Postgres en un docker

Para trabajar localmente necesito cargar una base de datos de 20 Gb

Paso 1:

Copiar Script de BDD en el docker

docker cp miscript.sql micontenedor:/miscript.sql

Paso 2:

Ejecutar script de docker en base de datos

docker exec -i micontenedor psql -U postgres -d mibase -f /miscript.sql

Paso 3:

Podemos verificar la carga contando los registros

SELECT
schemaname AS esquema,
relname AS tabla,
n_live_tup AS total_registros
FROM pg_stat_user_tables
WHERE schemaname = 'public'
ORDER BY total_registros DESC;

Configurar Aws Cloudwatch Agent en Ubuntu EC2

Despues de varios incidentes donde el disco duro de instancias EC2 bajo mi supervisión se llenaran, deteniendo los servicios de producción, fue necesario encontrar una manera de monitorear de mejor manera los mismos.

A continuación una guia de como configurar esto en instancias EC2 con ubuntu:

Paso 1 crear un rol con permisos para

  • CloudWatchAgentServerPolicy
  • AmazonSSMManagedInstanceCore
  • + Politica de ec2:DescribeTags

Asignar este rol a la instancia deseada

Una vez activado el rol, continuamos con la configuración del agente

Descargamos el agente desde:

Instalamos el paquete .deb

Verificamos el estado del servicio

ahí nos indicará que falta configurar el servicio

ejecutamos el asistente de configuración

Dependiendo de la configuración, y el usuario que escojamos deberemos dar permiso a este usuario:

Una vez configurado, se generará un archivo en:

Debe moverse a

Activamos e Iniciamos el servicio

Verificamos el estado usando

Si todo salió bien deberias ver lo siguiente en cloudwatch

Esto nos permitirá generar un dashboar similar a:

Acceder a la linea de comandos de una instancia Docker

Primero debemos listar las instancias parar identificar el id de la instancia a la que queremos acceder usando el siguiente comando:

docker ps -a

Una vez que tenemos el id pasaremos a ejecutar el siguiente comando:

docker exec -it {id_instancia} bash

Desde aquí la consola cambiará para permitirnos acceder a la linea de comandos de la máquina/contendor

Convertir AVI a MP4 ó WebM Usando Funciones Lambda y FFMPEG

El contenido de esté artículo deriva del repositorio https://github.com/kefabean/lambda-transcoder

Instrucciones para generación del build de FFMPEG

https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

Descarga de Builds estáticos FFMPEG

https://johnvansickle.com/ffmpeg/

Una vez que generamos o descargamos el build estático de FFMPEG, descargamos las dependencias de la función

npm install async
npm install fluent-ffmpeg
npm install s3-upload-stream

Deberemos terminar con un zip que contenga:

El entorno de ejecución máximo para esta función es Node.js 16.x

Resolución Problema codificación Scritpcase

El problema se da al iniciar una aplicación, sin una sesión previamente iniciada, donde muestra un error de codificación en blanco no es valida

Dando seguimiento al error, se determinó que se generaba debido a la variable de sesión $_SESSION[‘scriptcase’][‘charset’], donde si bien esta se mostraba en la pantalla al momento de imprimir las sesiones, al momento de ejecutar el envío del formulario o validación devolvía el mensaje de error

En base a esto se determinó que el error se debía a que el id de sesión no se estaba comunicando de forma apropiada a otras partes del programa, por lo que se procedió a desactivar las opciones de seguridad que ataban la sesión a una cookie y forzaban a que la cookie solo funcione desde una conexión segura HTTPs

Con lo que se verificó el correcto funcionamiento.

Una vez determinado el origen del problema, se procedió a habilitar el certificado de seguridad para el dominio donde se desplegó el proyecto y se activaron las opciones de seguridad nuevamente.

Una vez realizado estos cambios se verificó que el problema quedó solucionado.