slide1

Alt1040. Noticias acerca de Internet, diseño, música, cine, opiniones, weblogs y medios

Es uno de los weblogs de tecnología más seguidos de la blogosfera hispana.

slide2

Bitelia. Blog de software, internet y servicios web

Software y aplicaciones para mejorar tu vida, guías de uso, trucos, listas, noticias y todo sobre tecnología.

slide3

Xataka. Publicación de noticias sobre gadgets y tecnología.

Últimas tecnologías en electrónica de consumo y novedades tecnológicas en móviles, tablets, informática, etc.

slide4

Wwwhatsnew. Aplicaciones, marketing y noticias en la web.

Servicios que os pueden ser útiles para dibujar, gestionar tareas, hacer amigos, encontrar restaurantes...

slide5

Fayerwayer. Discusiones y opiniones de lo ultimo en tecnología y gadgets

Con secciones dedicadas a Internet, Software o Redes Sociales es un referente a nivel de tecnología en español.

25 de marzo de 2022

SMS marketing: qué es y cómo ponerlo en práctica

SMS Icon
El marketing SMS es una estrategia muy interesante para las marcas que quieren impactar a los consumidores de una forma efectiva y rápida. Hace que sea una buena opción para sorprender a las personas en poco tiempo. Después de todo, el 90% de los mensajes de texto son leído en menos de 3 minutos y eso se traduce en mayores ventas.


¿Qué es el Marketing SMS?


Es una técnica que utiliza el envío SMS con intención de impactar al consumidor usando mensajes profesionales e instantáneos. Estos mensajes cortos se destinan a comunicar oportunidades, actualizaciones, ofertas y alertas interesantes para los clientes.

Aunque otras plataformas han desarrollado un gran avance, la realidad es que los SMS siguen siendo muy efectivos y son un recurso estratégico para usarse en marketing.


cryptocurrency

¿Para qué se usa el SMS marketing?


Se pueden utilizar de diversas maneras. Algunos de los casos donde es una buena idea enviar SMS masivos son:

Promociones a corto plazo de minoristas o comercio electrónico


Las promociones y cupones son una buena manera de atraer a más personas a la tienda o sitio web. Si se realiza una promoción en tiempo limitado, es conveniente llegar a un mayor número de individuos y los SMS son un canal perfecto para ello.

Actualizaciones urgentes sobre eventos o pedidos de clientes


En un evento se pueden dar cambios en su planificación y ejecución. Cuantas más personas acudan al evento, más complicado es comunicar la información. Con los SMS esto se solventa, ya que se informa rápido sobre cancelaciones, cambios o actualizaciones.

Recordatorios de citas


Si en un negocio se dan citas, es frustrante que algunos clientes olviden las citas y lleguen tarde o ni siquiera aparezcan. Eso no sólo afecta a la agenda, sino también en haber podido dar ese espacio de tiempo a otra persona. Una solución es enviar SMS para asegurarte de que los clientes no olviden su cita.

¿Cuáles son las ventajas del SMS en tu estrategia?


Podemos encontrar varias ventajas a la hora de implementar el SMS en nuestras estrategias de Marketing, aparte del conocido coste-beneficio.

  • Tiene alta tasa de apertura. Su ventaja está en que se entrega en segundos y tiene una tasa de apertura del 98%. Además, es necesario para el éxito que el mensaje sea claro, directo y conciso.
  • Consigue una empresa más atractiva. Enviar los mensajes es una forma de mostrar a los clientes que la empresa conoce las tendencias y novedades.
  • Ayuda a fidelizar clientes. Podemos enviar a los clientes textos con información relevante, promociones en fechas señaladas, etc. para conseguir una mayor fidelización.

Tips para optimizar el envío de SMS Marketing


Podemos crear una campaña de SMS marketing teniendo en cuenta una serie de pasos importantes:

  • Definir los objetivos
    No es cuestión de enviar mensajes SMS a diestro y siniestro, sino saber qué queremos comunicar en el mensaje. Es decir, antes de iniciar la campaña hay que establecer la meta que se espera conseguir.
  • Elabora tu base de datos de clientes
    Si ya conoces el objetivo a conseguir con tus campañas de Marketing SMS, lo siguiente es elaborar una base de datos de clientes que deseen recibir ese tipo de comunicaciones. Si no se pide permiso a los clientes, podríamos incurrir en un delito.
  • Recuerda que sólo tienes 160 caracteres para tu contenido
    El SMS Marketing tiene como máximo 160 caracteres, por lo que es necesario que el mensaje sea conciso y directo, incluyendo siempre un enlace de baja del servicio para dar al cliente la posibilidad de cancelar el envío de SMS en cualquier momento.
  • No abuses del envío de SMS
    Si envías demasiados SMS puede llegar el momento en que los clientes lo sientan como una molestia y más si no has pedido su consentimiento para enviarles los mensajes. Es más, puede ser considerado incluso spam.
  • Estudia bien qué poner en tu SMS
    Muchas veces no es necesario ofrecer promociones, basta con hacer sentir importante al cliente para que entienda que la oferta no es para todo el mundo. Un SMS también logra feedbacks para mejorar el servicio y conocer la satisfacción del cliente.
  • Análisis y Tests
    Tras elaborar y aplicar el proyecto de SMS Marketing, es conveniente analizar qué ha funcionado bien, qué no y subsanar errores. Podemos valorar criterios para saber si una campaña ha tenido o no éxito como son la tasa de clics, conversiones y bounces.


En conclusión, las campañas de SMS Marketing tienen una alta tasa de éxito y pueden funcionar perfectamente combinadas con otros canales. Pero también hay que tener en cuenta ciertos elementos como son los horarios o la forma de dirigirnos al cliente para que funcione correctamente.





13 de marzo de 2022

Como Google Chrome ayuda a mantener seguras a las empresas

Google Chrome
La seguridad de la información, ahora más que nunca, es una prioridad para los equipos IT sobre todo considerando que el cibercrimen se ha incrementado un 600% como consecuencia de la pandemia del COVID-19 y el trabajo remoto ha disparado el coste medio de una filtración de datos en $137.000 según el último informe de IBM, How much does a data breach cost?


Chrome ha trabajado durante 14 años para mitigar los riesgos, bloquear sitios y contenido malicioso y mejorar de forma proactiva la seguridad web para mantener seguros a los usuarios y los datos corporativos, siendo pionero en nuevas capas de protección como site isolation y sandboxing.

Site Isolation es una medida de seguridad de Chrome que garantiza que las páginas de diferentes sitios web siempre se ejecuten en diferentes procesos, cada uno de los cuales se ejecuta en un espacio aislado que limita lo que el proceso puede hacer. También impide que el proceso reciba ciertos tipos de datos confidenciales de otros sitios web.

Sandboxing es la práctica de aislar una pieza de software para que pueda acceder solo a ciertos recursos, programas y archivos dentro de un sistema informático, a fin de reducir el riesgo de errores o malware que afecte al resto del sistema.

Todos los navegadores Google Chrome tienen habilitado sandboxing de forma predeterminada, siendo uno de los muchos beneficios de usar el sistema operativo Chrome OS.

Si se produce alguna amenaza de seguridad, sandboxing la aisla al sitio web o la aplicación afectada.
Básicamente, la amenaza ahora está en un "sandbox" y no puede avanzar más en tu dispositivo evitando más daños a tu computadora. Todo lo que tienes que hacer es cerrar el navegador.



Protection


Chrome cuenta con múltiples elementos de seguridad para ofrecer a las organizaciones la mejor protección posible.

Seguridad en la que no tienes que pensar


Con las actualizaciones automáticas habilitadas, Chrome ofrece a las empresas correcciones rápidas y automáticas para vulnerabilidades de día cero (zero day).

El equipo de seguridad de Chrome publicó recientemente un post que explica el estado de los bugs y exploits que afectan a su navegador y que merece la pena leer: What's up with in-the-wild exploits? Plus, what we're doing about it.

También incluye capacidades como 'site isolation' y 'sandboxing' que evitan que el código malicioso afecte a otros sitios visitados o impacte en los equipos de los usuarios.

La infraestructura de escaneo ayuda a detectar y eliminar extensiones maliciosas de Chrome Web Store para evitar que los usuarios finales se infecten (el año pasado se produjo una caída de malware de casi el 90%).

Estas son protecciones integradas directamente en Chrome que automáticamente mantienen seguros a sus usuarios y su organización.



Protección para usuarios de Chrome


Son capas adicionales de protección que mantienen seguros a los usuarios finales mientras navegan por la web.

Safe Browsing o navegación segura, que se ofrece de forma nativa en Chrome, ayuda a proteger los dispositivos al mostrar advertencias a los usuarios cuando intentan navegar a sitios peligrosos o descargar archivos maliciosos.

Información sobre la seguridad de las contraseñas, informando a los usuarios si sus contraseñas se han visto comprometidas o incluso indicándoles que cambien su contraseña corporativa si intentan reutilizarla en contra de las políticas de la empresa.

Controles a nivel de empresa


Cada organización tiene necesidades de seguridad únicas por lo que Chrome ofrece a las empresas protecciones avanzadas y administración modular de políticas para ayudar a alcanzar esos objetivos de seguridad.

Con más de 100 políticas, los administradores pueden usar multiples herramientas de administración, incluida la administración en la nube del navegador Chrome (Chrome Browser Cloud Management), para personalizar el navegador.

Chrome Browser Cloud Management proporciona una potente gestión de extensiones empresariales, una prioridad de seguridad para muchas organizaciones. Los usuarios finales pueden solicitar extensiones y los administradores permitirlas o denegarlas. Además, los administradores pueden fijar versiones específicas de extensiones para apoyar cualquier proceso de revisión de seguridad interno.

La visibilidad y los informes son otra área de soporte para los equipos IT. A través de Chrome Browser Cloud Management, los administradores pueden obtener más información sobre el entorno de los navegadores como la versión actual de cada navegador, las aplicaciones y extensiones instaladas, y las políticas aplicadas.

Estos datos pueden ayudar a los equipos IT a tomar decisiones de seguridad, comprender mejor los dispositivos que ejecutan Chrome e investigar si surgen problemas.

Seguridad Zero Trust


Chrome permite actualizar la estrategia de seguridad de las organizaciones al migrar a modelos de acceso de confianza cero (zero trust).

BeyondCorp Enterprise ayuda a proteger endpoints mediante la integración directa de amenazas y protección de datos en Chrome, incluyendo la pérdida de datos intencionada o accidental y evitando el malware y el phishing en tiempo real.

Además, Chrome y BeyondCorp Enterprise proporcionan la confianza en el dispositivo (device trust) y señales de seguridad de endpoints directamente desde el navegador, lo que facilita significativamente el despliegue de confianza cero en su entorno.





6 de marzo de 2022

¿Qué es HODL y cómo hacerlo?

Hodl Icon
Las criptomonedas son sin duda el activo de moda. La digitalización de la economía de los últimos años, impulsada aún más por la crisis sanitaria del COVID, ha dado un fuerte impulso a estos criptoactivos, que baten récords en sus cotizaciones constantemente. Una de las estrategias que utilizan los inversores se denomina Hodl, y en este artículo se va a explicar en qué consiste y cómo se hace.


En el mundo de las criptomonedas, los inversores utilizan diversas estrategias para conseguir ganancias. Una muy popular y que no ofrece un riesgo elevado es el HODL, término que vino de una falta ortográfica (hold) y que ha quedado acuñado, además de convertirse en protagonista de numerosos memes.



cryptocurrency


Origen de la palabra HODL


La palabra HODL, que designa una estrategia en la inversión de criptomonedas, se remonta al año 2013, concretamente en el mes de diciembre, cuando el bitcoin estaba atravesando una fuerte caída. GameKyuubi, un usuario del foro Bitcointalk, publicó "I AM HODLING", con esa falta de ortografía, porque en realidad lo que quería decir es I am holding, es decir, que aguantaba y no vendía a pesar de que el precio se estaba desplomando.

Desde ese momento, "hodlear" se ha convertido en una estrategia de inversión tan buena como cualquier otra. Los que practican este tipo de apuestas en monedas digitales no están pendientes de las subidas y bajadas propias de una activo de riesgo, como las criptomonedas. En lugar de eso, mantienen sus activos con independencia de las variaciones de precio para obtener una rentabilidad a largo plazo, bien cuando su precio de mercado se estabilice o cuando alcance cierta cifra.

Sería lo contrario a lo que hacen los traders, que mueven continuamente sus activos buscando la rentabilidad más a corto plazo. Esta estrategia requiere manejar ciertos conocimientos del mercado de valores para saber cuándo vender (caro) y volver a comprar (barato).

Hacer HODL con una Criptoestrategia con HODLers


Para aquellos que no entienden demasiado de cotizaciones en bolsa, activos, el funcionamiento de los mercados... el HOLD es una gran oportunidad para beneficiarse del crecimiento de las criptomonedas a largo plazo. Además, existen páginas especializadas donde se puede obtener mucha información valiosa, como hodlers.es.

Esta web pone a disposición de sus usuarios un buen número de recursos útiles, como gráficos, calculadoras, conversores, vídeos. Con la información que se ofrece en este site se puede aprender todo o casi todo sobre el ecosistema de los bitcoins. Además, ofrece a aquellas personas que quieren iniciarse en la inversión en criptomonedas una alternativa para tener una cartera bien realizada sin preocuparse por nada.

HODLers hace HODL de las 10 principales criptomonedas por capitalización de mercado


La estrategia de hodlers se basa en una cartera de inversión de 10 criptomonedas, ya que con una menor cantidad se correría el riesgo de reducir el rendimiento al no contar con una diversificación suficiente. Se trata, por tanto, de un número bien estudiado, para nada aleatorio, el mínimo necesario para ser estadísticamente significativo.

Estructura de HODLers


La estructura de la Criptoestrategia HODLers se realiza ponderando cada criptomoneda por la raíz cuadrada de su capitalización de mercado.

De esta forma, se evita llevar una apuesta demasiado elevada hacia un solo activo, aprovechando así las posibles revalorizaciones de las criptomonedas con menor capitalización.

Rendimiento de HODLers


El balance de las inversiones se realiza de forma mensual para no desviarse del objetivo. Cada 4 semanas exactamente, se modificará la estructura de la Criptoestrategia HODLers para seguir el mercado y mantener las criptomonedas con mayor capitalización.

¿Es conveniente hacer HODL?


Definitivamente sí, es una estrategia mucho más segura frente a otras tácticas de inversión. Debido a la volatilidad que sufre el mercado de las criptomonedas, en especial el Bitcoin, hacer hodl resulta muy rentable a largo plazo, prácticamente con total seguridad. No son pocos los expertos que aseguran que es una de las mejores opciones.

En este artículo, se ha aplicado la estrategia de hodling a las criptomonedas, pero es aplicable a cualquier otro tipo de inversión, como son las acciones, los bienes raíces... Muchos inversores mantienen sus activos en propiedad, a pesar de las fluctuaciones y caídas constantes de los mercados.

Sin lugar a dudas, la principal ventaja radica en que lo puede hacer cualquiera, ya que no requiere de grandes conocimientos y se trata de una estrategia relativamente simple: comprar y mantenerse pese a las subidas y bajadas. No obstante, sí que requiere de cierta dosis de calma para no precipitarse, pues no todo el mundo aguanta la tensión y la presión de las subidas y bajadas sin hacer ningún movimiento.

Analizando el caso concreto del Bitcoin, la criptomoneda más popular, su precio en los primeros años se encontraba entre los $0.003 y $0.10 por unidad. En 2012 empezó a crecer su valor, alcanzando los $13 por unidad. No obstante, durante todo el 2013, a pesar de las subidas y bajadas, el precio del Bitcoin siguió en alza y llegó a superar los $1.000 por unidad. Aquellos hodlers que no vendieron en 2012 nunca pudieron alegrarse más de haber mantenido sus activos.






2 de marzo de 2022

Seguridad y Protección de Datos: política de escritorio despejado

shield icon
Una política de escritorio limpio o despejado es una forma sencilla de mantener la seguridad de tu empresa. En términos generales, implica eliminar cualquier información confidencial de tu escritorio o almacenarla de forma adecuada: memorias USB, portátiles, tarjetas de visita y documentos impresos, entre otros. Las sanciones por incumplimiento interno pueden variar desde advertencias hasta multas.


Tras la vuelta a la presencia física en oficinas, os recordamos algunos aspectos de la política de escritorio despejado que todos los empleados y empleadas deben cumplir.



Software


1- Tu PC portátil debe permanecer siempre con candado cuando abandones tu puesto de trabajo aunque se trate de un período corto de tiempo (pausa para el café o similar).

2- No esperes a que automáticamente se active el "salvapantallas" cuando no estés en tu puesto de trabajo.
Bloquea la pantalla con [Windows] + [L] y, similarmente, con [Ctrl] + [Alt] + [Supr] y guarda bajo llave los documentos confidenciales con los que estés trabajando.

Lleva contigo la PKI (Public Key Infrastructure) y la tarjeta identificativa de tu empresa corporativa (en adelante EC). Recuerda no llevar visible la tarjeta identificativa si estás fuera de las instalaciones de EC.

3- No tires información confidencial a la papelera, destruye la información en las trizadoras que se encuentran junto a las impresoras o, si se trata de grandes volúmenes, tíralos en los cubículos cerrados habilitados para información confidencial que después es destruida de forma segura por los proveedores de EC.

Se entiende por información confidencial, entre otras:

  • información que contiene datos personales.
  • datos relativos a ofertas y estrategia de la compañía.
  • informes de auditoría.
  • información específicamente clasificada como confidencial por clientes.
4- Está prohibido anotar contraseñas en post its, notas, agendas o similar que permitan fácil acceso a las mismas. No las compartas con nadie.

5- Si estás ubicado en un despacho o sala de reunión ciérralo con llave cuando salgas.

6- Si utilizas las pizarras en las salas de reuniones, borra la información escrita en ellas antes de abandonar la sala y no olvides la documentación o dispositivos (PC’s u otros que contengan información).

7- No utilices dispositivos personales extraíbles (smarthphone, disco duro, pen dirve, etc) para extraer información de tu compañía. Si se requiere utilizar estos dispositivos, deben estar autorizados y cifrados, siguiendo las políticas de EC.

8- Sé cuidadoso cuando hables por teléfono en la calle o en espacios de EC en relación con la información que comentas, no divulgues información confidencial de EC o sus clientes.

9- Evita dejar tu PC desatendido en el coche si tienes que hacer una parada de camino a casa, suele ser el caso más habitual de robo, incluso si lo metes en el maletero.

10- Mantente alerta sobre los correos de phishing e intentos de ingeniería social (suplantación de la personalidad).

Algunos de los intentos de fraude más recientes corresponden a suplantaciones de identidad de entidades públicas que supuestamente solicitan el envío de una factura correspondiente a un expediente de licitación.

Si observas información confidencial tirada en la papelera, sufres un robo de portátil, detectas actividad sospechosa en tu PC (fruto de un phishing, virus o similar) o cualquier otro tipo de incidente, por favor repórtalo a InfoSec, tu oficina de Seguridad de la Información.








8 de febrero de 2022

Programas que nos ayudan a gestionar nuestros negocios

Software Icon
Las nuevas tecnologías ofrecen muchas oportunidades de crecimiento y expansión en el entorno empresarial. El mundo digital ha revolucionado la forma en que las personas se comunican, interrelacionan y, también, en su modo de consumo. Además, en el entorno laboral, los programas de gestión suponen un importante avance, automatizando todo tipo de procesos para que puedan realizarse de forma ágil, sencilla y en el menor tiempo posible.


Las compañías deben adaptarse al medio digital para mantenerse competitivas y, además, moverse en un entorno cada día más rápido y variable. Nadie puede dudar a estas alturas del siglo XXI que los viejos y obsoletos sistemas mecánicos deben ser sustituidos por procesos automatizados.

Un software de gestion es una herramienta digital que hace más fácil la vida a los emprendedores, empresarios y profesionales autónomos a la hora de llevar todos los aspectos relacionados con su negocio.

Empresas de cualquier tamaño y sector, ya sean grandes corporaciones o pequeñas pymes, encuentran en las nuevas tecnologías muchos beneficios a la hora de gestionar sus negocios.

La instalación de los diferentes tipos de software de gestión empresarial es la clave para optimizar el tiempo y dedicarles más horas a otros aspectos de carácter estratégico.

Por otra parte, contar con toda la información actualizada, ordenada y clasificada, gracias a ese tipo de herramientas, será sumamente útil en la toma de decisiones decisivas sobre el rumbo del negocio.



Software


Tipos de softwares de gestión que toda empresa necesita


Aunque existe una amplia variedad de programas de gestión que ayudan con los diferentes aspectos empresariales de una organización, en este artículo se va a hacer especial mención a los que se consideran imprescindibles y hacen el día a día más fácil de prácticamente cualquier tipo de negocio.

Por ejemplo, los dos primeros que van a enumerarse son los de programas de contabilidad y facturación, esenciales para cualquier ecommerce, el tipo de empresa digital que más crece cada día.

Software de contabilidad


Los programas de contabilidad son esenciales para cualquier negocio, ofreciendo siempre información en tiempo real para ser analizada cuando sea necesario.

Las empresas necesitan este tipo de herramientas para llevar todo el proceso contable de forma ágil, fácil e integral ahorrando tiempo, pues las tareas se vuelven automáticas, presentando los documentos fiscales de la AEAT con un solo clic.

Para elegir un buen software de contabilidad, uno de los requisitos que debe cumplir es que sea escalable para adaptarse a las necesidades de cada empresa en cada momento, sea cual sea el volumen de datos que se manejen.

De este modo, el mismo programa le puede servir a una compañía a lo largo del tiempo, desde sus inicios, cuando cuenta con pocos clientes y proveedores, para ir adaptándose a sus etapas de desarrollo y expansión. Esta capacidad es sumamente importante para no tener que ir cambiando de programa a medida que la empresa crece.

Software de facturación


Como cabe suponer, la principal función de un programa de facturación es permitir facturar de forma rápida e intuitiva. En este sentido, ahorra una gran cantidad de tiempo automatizando estos procedimientos manuales y gestionando todo el proceso de forma global.

Un buen software de facturación debe ser eficaz y fácil de usar, además de aportar funcionalidades e información de valor añadido a las empresas, como datos sobre su salud financiera.

Así mismo, deben permitir el análisis del negocio para identificar necesidades, prioridades y evaluar soluciones. Por último, igual que en el caso anterior, deben ser escalables para que no sea necesario cambiar de programa cuando ya se está habituado a él.

Cabe destacar, en este sentido, las soluciones para ecommerce y cualquier otro modelo de empresa que permiten integrar los programas de facturación con la contabilidad, ahorrando tiempo en tareas de mecanización contable.

Software de nóminas


Los programas de nóminas son las soluciones de gestión laboral y RRHH para despachos profesionales y empresas.

Consiguen, en un entorno sencillo e intuitivo, ahorro de tiempo, la máxima productividad y flexibilidad, además de garantía de actualización legal y un potente motor de cálculo de nóminas.

Software fiscal


El software fiscal, por su parte, es el que se encarga de la presentación, de forma eficiente y segura, de los diferentes tipos de impuestos, tanto de las personas físicas (IRPF, Patrimonio, Sucesiones) como jurídicas (IVA e IS).

Colaboran directamente con la AEAT, de forma que se incorporan inmediatamente en su programa todas las novedades legales y los cambios en los modelos de gestión de los impuestos.

Además de la rapidez con la que incorporan los añadidos legales, cuentan con herramientas que facilitan la aplicación de la normativa fiscal y detectan a aquellos clientes que se ven afectados por dichos cambios.

Cabe destacar que se trata de una herramienta sumamente efectiva que ha sido desarrollada especialmente con el objetivo de desempeñar las labores fiscales en tiempo, y de la forma más ágil y sencilla posible.









31 de enero de 2022

Los papeles de Pandora, Python y el aprendizaje automático

Python Icon
A finales del año 2021 vieron la luz los papeles de Pandora, estos son un conjunto de aproximadamente 12 millones de documentos filtrados (unos 3 TeraBytes), que formaban parte de una investigación periodística. Provienen de una filtración de documentos confidenciales de 14 despachos de abogados especializados en la creación de sociedades en varios paraísos fiscales, entre ellos, Panamá, Islas Vírgenes Británicas o Bahamas.


A través de esta información se han puesto al descubierto las fortunas secretas de líderes mundiales, grandes empresarios, funcionarios públicos, y en general, multitud de evasores que se mantenían al margen de la ley.

Entre algunos personajes populares, destacan el presidente de Chile, el ex-director del FMI, el rey de Jordania, el primer ministro checo, o Tony Blair, o incluso estrellas del mundo del espectáculo como Julio Iglesias, Shakira, Claudia Schiffer o Pep Guardiola.

Todos estos datos vienen a exponer diversos sistemas que se usaban para evitar los controles fiscales sobre dichas fortunas, siendo la base para multitud de acusaciones de corrupción, lavado de dinero o evasión fiscal.

Los documentos incluyen datos de más de 5 décadas, aunque la mayoría se refieren a los últimos 20 años, e incluyen información sobre 30.000 beneficiarios.

Además de su gran volumen, eran de diversa procedencia, idioma y formato, documentos escritos a mano, hojas de cálculo, correos electrónicos, imágenes, ficheros PDF de más de 10.000 páginas, pasaportes, extractos bancarios, declaraciones de impuestos, contratos, ... Lo cual le añade complejidad a la hora de analizarlos y poder extraer conclusiones de los mismos.

El reto estaba en poder obtener resultados y sacar a la luz los secretos en un tiempo razonable. Y en eso Python y las últimas técnicas de aprendizaje automático tuvieron un papel crucial.


Machine Learning


Tan solo una pequeña fracción de dichos documentos, el 4%, estaban estructurados, es decir, contenían los datos organizados en tablas. Esos fueron los más simples de analizar, se organizaron por empresa, se eliminaron duplicados y se combinaron en un documento maestro, de esta manera todos los datos estaban juntos y su interpretación fue mucho más directa.

En otros archivos, como documentos escritos, archivos en formato PDF, ... se usó Python para automatizar la extracción y su posterior estructuración dentro de lo posible.

Pero para el resto de documentos, los casos más complejos, se usaron técnicas de Machine Learning o aprendizaje automático, a través de la librería Scikit-Learn de Python.

De esta manera, se identificaron, separaron y clasificaron formularios concretos de documentos mayores. Incluso muchos de estos formularios estaban escritos a mano, y se tuvieron que emplear técnicas de reconocimiento de escritura manual.

Cuando todos esos datos finalmente se pudieron estructurar, se generaron unas listas que vinculaban a los beneficiarios con las empresas, y posteriormente se usaron librerías de visualización de datos para crear modelos visuales e incluso poder realizar búsquedas sobre dichos datos.
De esta manera, los investigadores obtuvieron una herramienta que les permitía rastrear las conexiones entre personas y empresas a través de la maraña de documentos, y descubrir a los evasores.

En la Universidad Internacional de Valencia y de manera específica en el Curso Experto de Programación Python se estudia dicho lenguaje y las técnicas más populares de inteligencia artificial, como el aprendizaje automático, redes neuronales, ciencia de datos, automatización, ... Todas ellas disciplinas clave en la resolución del caso de los papeles de Pandora.


* Artículo de Iván Fuertes Torrecilla *


Iván Fuertes Torrecilla


Senior Render Engine & SDK Programmer for Augmented Reality at Wikitude




22 de enero de 2022

Introducción al uso de la API de Blogger v3

API Blogger
Una API o Interfaz de Programación de Aplicaciones (Application Programming Interface) es un protocolo que define cómo los dispositivos y las aplicaciones se comunican entre sí. Describe cómo los clientes que consumen las APIs pueden acceder a los recursos y qué métodos funcionan con su arquitectura.


A la hora de crear una API para la integración de software, el diseño REST (REpresentational State Transfer) destaca como el enfoque de arquitectura para el diseño de servicios web y se refiere al conjunto de reglas específicas que establecen como estos servicios se comunican a través de internet.

El estilo arquitectónico REST está compuesto por varios principios:

  • sin estado: las aplicaciones REST deben comunicarse con los recursos sin estado, es decir, no deben almacenar ningún contexto ni información de sesión.
  • separación cliente-servidor: la API se expone en un servidor y es consumida por clientes (apps, servicios).
  • sistema en capas: los componentes de los sistemas REST no deben poder ver más allá de su capa. Cada componente no debe influir en otro componente de la arquitectura.
  • cacheable: los datos del servidor REST deben marcarse como almacenables o no en caché. En caso afirmativo, el cliente puede reutilizar datos de la respuesta para solicitudes equivalentes posteriores.
  • interfaz uniforme: se hace hincapié en una interfaz uniforme entre los componentes (identificación y manipulación de recursos, hipermedia y mensajes autodescriptivos).

REST es independiente de cualquier protocolo subyacente y no está necesariamente unido a HTTP pero en las implementaciones más comunes de API REST, se usa HTTP como protocolo de aplicación.

De forma muy resumida, REST es un estilo arquitectónico y las API REST son servicios web que lo implementan.
Para complicar más las cosas, los desarrolladores llaman a una API HTTP que usa un estilo CRUD (Create, Read, Update, Delete) un servicio RESTful.

La API de Blogger v3 permite que las aplicaciones cliente vean y actualicen el contenido de Blogger. Tu aplicación cliente puede usar Blogger API v3 para crear nuevas publicaciones en tu blog, editar o eliminar publicaciones existentes y consultar publicaciones que coincidan con criterios concretos.

Cada solicitud que se envía a las APIs de Blogger debe identificar tu aplicación ante Google. Hay dos formas de identificar una aplicación: usando un token OAuth 2.0 (que también autoriza la solicitud) y/o usando la clave API de la aplicación.

  • si la solicitud requiere autorización (como una solicitud de datos privados de una persona), la aplicación debe proporcionar un token de OAuth 2.0 con la solicitud.
  • si la solicitud no requiere autorización (como una solicitud de datos públicos), la aplicación debe proporcionar una clave API o un token de OAuth 2.0, o ambos, la opción que consideres más conveniente.

Una vez que tengas una clave API, tu aplicación puede añadir el parámetro de consulta a todas las URL de solicitud con key=yourAPIKey

El formato específico para las URI de la API de Blogger es:
https://www.googleapis.com/blogger/v3/users/userId
https://www.googleapis.com/blogger/v3/users/self
https://www.googleapis.com/blogger/v3/users/userId/blogs
https://www.googleapis.com/blogger/v3/users/self/blogs
https://www.googleapis.com/blogger/v3/blogs/blogId
https://www.googleapis.com/blogger/v3/blogs/byurl
https://www.googleapis.com/blogger/v3/blogs/blogId/posts
https://www.googleapis.com/blogger/v3/blogs/blogId/posts/bypath
https://www.googleapis.com/blogger/v3/blogs/blogId/posts/search
https://www.googleapis.com/blogger/v3/blogs/blogId/posts/postId
https://www.googleapis.com/blogger/v3/blogs/blogId/posts/postId/comments
https://www.googleapis.com/blogger/v3/blogs/blogId/posts/postId/comments/commentId
https://www.googleapis.com/blogger/v3/blogs/blogId/pages
https://www.googleapis.com/blogger/v3/blogs/blogId/pages/pageId

Pongamos en práctica algunos métodos de la API de Blogger.

1- vamos a mostrar información del Blog usando la siguiente url:
https://www.googleapis.com/blogger/v3/blogs/byurl?url=https://www.tecnoblog.guru&key=yourAPIKey
<div id="api-blogger-v3" class="api-blogger-v3"></div>
<script>
function handleResponse1(response){
	document.getElementById("api-blogger-v3").innerHTML += "<div><a href='" + response.url + "' title='" + response.title + " target='_blank'>" + response.name + "</a></div><div>" + response.description + "</div><div>" + (response.published).substring(0,10) + "</div>";
}
</script>
<script async="true" defer="true" src="https://www.googleapis.com/blogger/v3/blogs/byurl?url=https://www.tecnoblog.guru&callback=handleResponse&key=yourAPIKey"></script>


2- ahora vamos a mostrar una lista con los cinco últimos post publicados en TecnoBlog invocando a la url:
https://www.googleapis.com/blogger/v3/blogs/blogId/posts
<div id="api-blogger-v3-2" class="api-blogger-v3"></div>
<script>
function handleResponse2(response){
  for(var i=0; i<5; i++){
	document.getElementById("api-blogger-v3-2").innerHTML += "<div><a href='" + response.items[i].url + "' title='" + response.items[i].title + " target='_blank'>" + response.items[i].title + "</a></div>" + (response.items[i].published).substring(0,10) + "<br/>" + "<div class='article'><em>" + response.items[i].content.substr(0,840) + "...</em></div><hr/>";
  }
}
</script>
<script async="async" defer="defer" src="https://www.googleapis.com/blogger/v3/blogs/5415513870832441455/posts?callback=handleResponse2&key=yourAPIKey"></script>


3- por último, vamos a mostrar cinco artículos publicados en la categoría "ciberseguridad" llamando a la siguiente url con el parámetro 'q' como etiqueta a buscar:
https://www.googleapis.com/blogger/v3/blogs/5415513870832441455/posts/search?q=ciberseguridad&callback=handleResponse&key=yourAPIKey
<div id="api-blogger-v3-3" class="api-blogger-v3"></div>
<script>
function handleResponse3(response) {
  for(var i=0; i<5; i++) {
	document.getElementById("api-blogger-v3-3").innerHTML += "<div><a href='" + response.items[i].url + "' title='" + response.items[i].title + " target='_blank'>" + response.items[i].title + "</a></div>" + (response.items[i].published).substring(0,10) + "<br/>" + "<div class='article'><em>" + response.items[i].content.substr(0,840) + "...</em></div><hr/>";
  }
}
</script>
<script async="async" defer="defer" src="https://www.googleapis.com/blogger/v3/blogs/5415513870832441455/posts/search?q=ciberseguridad&callback=handleResponse3&key=yourAPIKey"></script>



11 de diciembre de 2021

Introducción a la automatización robótica de procesos (RPA)

Robotic Process Automation
Con un número creciente de empresas que tratan de optimizar sus estrategias de transformación digital, se ha producido un aumento en la adopción del sistema RPA (Robotic Process Automation) para automatizar los procesos administrativos. Esto ha llevado a un crecimiento exponencial en el mercado global de RPA que ya estaba valorado en $1.4B en 2019 y se espera que alcance los $11B en 2027.


La pandemia de COVID-19 ha llevado a muchas empresas a adoptar tecnologías de computación en la nube y trabajo remoto. Además, los equipos de TI se han visto presionados para reducir la carga de trabajo y los costos operativos.

Una encuesta reciente reveló que las empresas están aumentando el uso de RPA aproximadamente un 5% para:

- reducir los costos extraordinarios al automatizar las tareas operativas y de back office, como los procesos de TI basados en reglas, las actualizaciones del sistema o la incorporación de nuevas contrataciones.

- apoyar a la fuerza de trabajo remota, por ejemplo, automatizando la recopilación de datos de múltiples fuentes para la generación de informes.


RPA


¿Qué es la automatización robótica de procesos?


Es una tecnología que imita e integra las interacciones de los usuarios humanos con las aplicaciones o sistemas informáticos, automatizando los procesos de trabajo de la misma manera que lo haría un usuario.

Estos robots son entrenados para seguir unas instrucciones específicas y ejecutar ciertas tareas, tareas como por ejemplo cuando un usuario tiene que acceder a un correo electrónico o a un directorio compartido y extraer 'x' ficheros para realizar ciertas modificaciones o verificaciones dentro de estos ficheros.

Una vez finalizadas estas tareas, tiene que compartir estos ficheros a través de una plataforma web o un repositorio común.
El robot podría hacer estas mismas tareas del mismo modo que las gestiona un usuario humano.

¿Qué ventajas tiene el uso de RPA?


Son numerosas las ventajas del rpa, destacando la agilidad operacional puesto que un robot es cinco veces más rápido que una persona.

Son herramientas que monitorizan la ejecución completa del robot, por lo tanto desde el punto de vista de auditoría, son herramientas bastante seguras.

Se trata de herramientas no invasivas ya que interactúan con la interfaz permitiendo atacar a la mayoría de las aplicaciones.

Tambien son herramientas muy escalables, muy precisas y que trabajan de forma continua (24x7 los 365 días del año) por lo que van a estar siempre disponibles.

Por otro lado permiten que las personas se enfoquen en el talento ya que el objetivo es aportar valor en las empresas y no realizar tareas repetitivas que no generen ningún tipo de valor añadido.

Además, son herramientas con un ROI muy elevado ya que existe una rápida recuperación de la inversión con perídos de payback inferiores a un año.

¿Qué tipos de procesos son candidatos a ser robotizados o automatizados?


Siempre se busca un patrón con una serie de características como por ejemplo que los procesos sean estándar, es decir, que no tengan ambiguedad y que estén procedimentados.

También es necesario que estos procesos estén basados en reglas ya que tenemos que entrenar al robot y decirle cuales son los pasos que tienen que seguir para ejecutar estas tareas.

Tienen que ser procesos con datos electrónicos cuyo formato siempre sea digital. Procesos en los que el tiempo de ejecución sea mejorable, procesos repetitivos, procesos desarrollados en sistemas estables y procesos que ya sean maduros, estén en funcionamiento y bien definidos.

En RR.HH. podrían ocuparse de:

  • verificación del historial del empleado
  • gestión de viajes y gastos
  • gestión de asistencia
  • gestión de nóminas
  • gestionar los datos de los empleados
  • añadir datos para revisiones de desempeño
  • gestionar la baja de los empleados

En el departamento financiero:

  • automatización de nóminas
  • preparar informes financieros
  • mantenimiento de registros

En el departamento de TI:

  • descargar software con licencia
  • instalar y actualizar software disponible en servidores preasignados y máquinas de usuarios
  • monitorizar y guardar datos de rendimiento de un servidor
  • automatizar notificaciones de problemas en un servidor o tiempos de inactividad
  • automatizar copias de seguridad
  • sincronizar, eliminar y vaciar carpetas




7 de diciembre de 2021

Cuenta atrás para la Navidad

Christmas Icon
TecnoBlog les desea a todos sus lectores Feliz Navidad con esta animación realizada con jQuery. Si lo deseas, puedes descargar y modificar el ejemplo para añadirlo a tu página web siguiendo las instrucciones detalladas más abajo.
(Fuente: https://codepen.io/JorgeAguilar/).





Para componer la animación, tendrás que incorporar código html, adaptar los estilos correspondientes importando la fuente de Google Mountains of Christmas con tres imágenes de fondo y código javascript con la librería jQuery.

Código HTML
<section class="countdownSection">
  <div class="decorations">
    <div class="decoration" data-pos="bottom left"></div>
    <div class="decoration" data-pos="top right"></div>
    <div class="snow"></div>
    <div class="santaWrapper">
      <div class="santa">
        <div class="hat">
          <div></div>
          <div></div>
        </div>
        <div class="face">
          <div class="eyeBrows left"></div>
          <div class="eyeBrows right"></div>
          <div class="eye left"></div>
          <div class="eye right"></div>
          <div class="nose"></div>
          <div class="cheek left"></div>
          <div class="cheek right"></div>
          <div class="beard">
            <div></div>
            <div></div>
            <div></div>
          </div>
        </div>
        <div class="body">
          <div class="sweater"></div>
          <div class="hand left">
            <div class="inner"></div>
          </div>
          <div class="hand right"></div>
        </div>
      </div>
      <div class="rope"></div>
      <div class="rope back"></div>
      <div class="sled"></div>
      <div class="reindeer">
        <div class="face">
          <div class="ear"></div>
          <div class="horn right"></div>
          <div class="horn left"></div>
        </div>
        <div class="body">
          <div class="foot front">
            <div class="inner">
              <div class="extension"></div>
            </div>
          </div>
          <div class="foot back">
            <div class="inner">
              <div class="extension"></div>
            </div>
          </div>
          <div class="tail"></div>
        </div>
      </div>
      <div class="reindeer second">
        <div class="rope"></div>
        <div class="face">
          <div class="ear"></div>
          <div class="horn right"></div>
          <div class="horn left"></div>
        </div>
        <div class="body">
          <div class="foot front">
            <div class="inner">
              <div class="extension"></div>
            </div>
          </div>
          <div class="foot back">
            <div class="inner">
              <div class="extension"></div>
            </div>
          </div>
          <div class="tail"></div>
        </div>
      </div>
    </div>
  </div>
  <div class="container">
    <div class="counterWrapper">
      <p>Sólo quedan ...</p>
      <div class="countdown"></div>
      <p>para Navidad</p>
    </div>
  </div>
</section>

Código CSS
<style>
@import url("https://fonts.googleapis.com/css2?family=Mountains+of+Christmas:wght@700&display=swap");
@keyframes santa__mov {
  0%, 100% {
    bottom: 0;
    left: 0;
    transform: translateX(-100%) rotate(-10deg);
  }
  30% {
    bottom: 100%;
    left: 100%;
    transform: translateX(100%) rotate(-10deg);
  }
  40% {
    bottom: 0;
    left: 100%;
    transform: translateX(100%) rotateY(180deg);
  }
  70% {
    bottom: 0;
    left: 0;
    transform: translateX(-100%) rotateY(180deg);
  }
}
@keyframes santa__hand-left {
  0% {
    transform: rotate(15deg);
  }
  100% {
    transform: rotate(-30deg);
  }
}
@keyframes santa__hand-right {
  0% {
    transform: rotate(15deg);
  }
  100% {
    transform: rotate(-6deg);
  }
}
@keyframes rope__left {
  0% {
    transform: rotate(2deg);
  }
  100% {
    transform: rotate(5deg);
  }
}
@keyframes rope__right {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(-4deg);
  }
}
@keyframes rope__inner {
  0% {
    transform: rotate(-15deg);
  }
  100% {
    transform: rotate(-15deg) translateY(3px);
  }
}
@keyframes reindeer__leg-front {
  0% {
    transform: rotate(-24deg);
  }
  100% {
    transform: rotate(-13deg);
  }
}
@keyframes reindeer__leg-front-extension {
  0% {
    transform: rotate(131deg);
  }
  100% {
    transform: rotate(0);
  }
}
@keyframes reindeer__leg-back {
  0% {
    transform: rotate(-73deg);
  }
  100% {
    transform: rotate(-95deg);
  }
}
@keyframes reindeer__leg-back-extension {
  0% {
    top: 4px;
    left: -4px;
    transform: rotate(50deg);
  }
  100% {
    top: 0;
    left: 0;
    transform: rotate(0);
  }
}
@keyframes snow {
  0% {
    fill-opacity: 1;
  }
  100% {
    fill-opacity: 0;
    transform: translateY(50%);
  }
}
body {
  overflow-x: hidden;
  color: #fff;
  margin: 0 auto;
  background-color: #005b38;
}
body * {
  font-family: "Mountains of Christmas", cursive;
}
body p, body h1, body h2, body h3, body h4, body h5, body h6 {
  margin: 0;
}
body a {
  color: #fff;
  text-decoration: none;
}
body ul, body li {
  padding: 0;
  margin: 0;
  list-style-type: none;
}
.countdownSection {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  align-content: center;
  width: 100%;
  min-height: 100vh;
  box-sizing: border-box;
  position: relative;
  overflow: hidden;
}
.countdownSection:before, .countdownSection:after {
  content: "";
  position: absolute;
}
.countdownSection:before {
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: radial-gradient(rgba(255, 255, 255, 0.3), transparent);
  pointer-events: none;
}
.countdownSection:after {
  width: 90%;
  height: 90%;
  /*border: 1px solid rgba(255, 255, 255, 0.1);*/
}
.countdownSection .decorations {
  pointer-events: none;
}
.countdownSection .decorations .decoration {
  background-image: url("https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcD16hX9tPJgLkdoLFTTfy5YZoVEVKcLNrvgIFHPtRpFTprLA3v-gcwEBpLGDYEgfwoKe2zZ085D7E4QpXEyQOK60QtoOH8z08mxIE1Ms34WO2ceEy0sfWOs_eAIB4XYMnBqKwmHkUIobX/s0/decoration.png");
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  position: absolute;
  width: 500px;
  height: 500px;
  filter: blur(3px);
  z-index: 1;
}
.countdownSection .decorations .decoration[data-pos="top left"] {
  top: 0;
  left: 0;
  transform: rotate(90deg);
}
.countdownSection .decorations .decoration[data-pos="top right"] {
  top: 0;
  right: 0;
  transform: rotate(180deg);
}
.countdownSection .decorations .decoration[data-pos="bottom left"] {
  bottom: 0;
  left: 0;
}
.countdownSection .decorations .decoration[data-pos="bottom right"] {
  bottom: 0;
  right: 0;
  transform: rotate(-90deg);
}
.countdownSection .decorations .snow {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
}
.countdownSection .decorations .snow .particle {
  fill: #fff;
  animation: snow 5s ease-out infinite;
}
.countdownSection .decorations .snow .particle:nth-child(2n) {
  animation-delay: 1.5s;
}
.countdownSection .decorations .snow .particle:nth-child(3n) {
  animation-delay: 2.5s;
  animation-duration: 5.3s;
}
.countdownSection .decorations .snow .particle:nth-child(4n) {
  animation-delay: 1s;
  animation-duration: 5.2s;
}
.countdownSection .decorations .snow .particle:nth-child(5n) {
  animation-delay: 3s;
}
.countdownSection .decorations .santaWrapper {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 430px;
  height: 155px;
  transform: translateX(-100%);
  animation: santa__mov 15s linear infinite;
}
.countdownSection .decorations .santaWrapper .santa {
  position: absolute;
  left: 0;
  bottom: 0;
  width: 125px;
  height: 107px;
  z-index: 10;
  transform: rotateY(180deg);
}
.countdownSection .decorations .santaWrapper .santa:before, .countdownSection .decorations .santaWrapper .santa:after {
  content: "";
  position: absolute;
  bottom: 0;
  background-color: #520d0d;
}
.countdownSection .decorations .santaWrapper .santa:before {
  left: -10px;
  width: 126px;
  height: 30px;
  border-radius: 10px 50% 10px 50%;
  transform: rotate(0);
  z-index: 10;
}
.countdownSection .decorations .santaWrapper .santa:after {
  left: 70px;
  width: 50px;
  height: 53px;
  border-radius: 50% 10px 22px 10px;
  transform: rotate(8deg);
}
.countdownSection .decorations .santaWrapper .santa .hat > * {
  position: absolute;
  top: 7px;
  left: 31px;
  width: 43px;
  height: 58px;
  border-radius: 50%;
  transform: rotate(28deg);
  background-color: #d63527;
}
.countdownSection .decorations .santaWrapper .santa .hat > *:nth-child(1):before, .countdownSection .decorations .santaWrapper .santa .hat > *:nth-child(1):after {
  content: "";
  position: absolute;
}
.countdownSection .decorations .santaWrapper .santa .hat > *:nth-child(1):before {
  top: 9px;
  left: 45px;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background-color: #fff;
}
.countdownSection .decorations .santaWrapper .santa .hat > *:nth-child(1):after {
  top: 3px;
  left: 19px;
  width: 30px;
  height: 7px;
  border-radius: 50%;
  transform: rotate(22deg);
  background-color: #d63527;
}
.countdownSection .decorations .santaWrapper .santa .hat > *:nth-child(2) {
  position: absolute;
  top: 18px;
  left: 31px;
  width: 44px;
  height: 34px;
  border-radius: 50%;
  transform: rotate(12deg);
  background-color: #fff;
}
.countdownSection .decorations .santaWrapper .santa .face {
  position: absolute;
  top: 25px;
  left: 37px;
  width: 31px;
  height: 17px;
  border-radius: 20px 20px 50% 50%;
  transform: rotate(10deg);
  background-color: #fde2b7;
  z-index: 10;
}
.countdownSection .decorations .santaWrapper .santa .face .eyeBrows {
  position: absolute;
  top: 0;
  left: 0;
  width: 2px;
  height: 7px;
  border-radius: 50%;
  background-color: #fff;
}
.countdownSection .decorations .santaWrapper .santa .face .eyeBrows.left {
  top: 2px;
  left: 22px;
  transform: rotate(-65deg);
}
.countdownSection .decorations .santaWrapper .santa .face .eyeBrows.right {
  top: 1px;
  left: 4px;
  transform: rotate(65deg);
}
.countdownSection .decorations .santaWrapper .santa .face .eye {
  position: absolute;
  top: 8px;
  left: 2px;
  width: 3px;
  height: 4px;
  border-radius: 50%;
  background-color: #000;
}
.countdownSection .decorations .santaWrapper .santa .face .eye.left {
  top: 8px;
  left: 2px;
}
.countdownSection .decorations .santaWrapper .santa .face .eye.right {
  top: 8px;
  left: 20px;
}
.countdownSection .decorations .santaWrapper .santa .face .nose {
  position: absolute;
  top: 10px;
  left: 6px;
  width: 12px;
  height: 9px;
  border-radius: 50%;
  z-index: 10;
  background-color: #f7d194;
}
.countdownSection .decorations .santaWrapper .santa .face .cheek {
  position: absolute;
  top: 10px;
  left: 6px;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  z-index: 10;
  background-color: #f4cfe3;
}
.countdownSection .decorations .santaWrapper .santa .face .cheek.left {
  top: 12px;
  left: -3px;
}
.countdownSection .decorations .santaWrapper .santa .face .cheek.right {
  top: 13px;
  left: 22px;
}
.countdownSection .decorations .santaWrapper .santa .face .beard > * {
  position: absolute;
  top: 8px;
  left: -14px;
  width: 15px;
  height: 17px;
  border-radius: 50%;
  background-color: #fff;
}
.countdownSection .decorations .santaWrapper .santa .face .beard > *:before, .countdownSection .decorations .santaWrapper .santa .face .beard > *:after {
  content: "";
  position: absolute;
  background-color: #fff;
}
.countdownSection .decorations .santaWrapper .santa .face .beard > *:before {
  top: 12px;
  left: 1px;
  width: 15px;
  height: 17px;
  border-radius: 50%;
}
.countdownSection .decorations .santaWrapper .santa .face .beard > *:nth-child(2) {
  top: 16px;
  left: -8px;
  width: 26px;
  height: 30px;
}
.countdownSection .decorations .santaWrapper .santa .face .beard > *:nth-child(2):before {
  top: 16px;
  left: 13px;
  width: 19px;
  height: 17px;
}
.countdownSection .decorations .santaWrapper .santa .face .beard > *:nth-child(2):after {
  top: 1px;
  left: 13px;
  width: 19px;
  height: 17px;
}
.countdownSection .decorations .santaWrapper .santa .face .beard > *:nth-child(3) {
  top: 16px;
  left: 14px;
  width: 27px;
  height: 28px;
}
.countdownSection .decorations .santaWrapper .santa .face .beard > *:nth-child(3):before {
  top: -4px;
  left: 13px;
  width: 17px;
  height: 17px;
}
.countdownSection .decorations .santaWrapper .santa .body {
  position: absolute;
  top: 54px;
  left: 16px;
  width: 88px;
  height: 53px;
}
.countdownSection .decorations .santaWrapper .santa .body:before {
  content: "";
  position: absolute;
  top: -23px;
  right: -10px;
  width: 53px;
  height: 51px;
  border-radius: 42% 50%;
  background-color: #f3f0f0;
  z-index: -1;
}
.countdownSection .decorations .santaWrapper .santa .body .sweater {
  top: -3px;
  left: 10px;
  position: absolute;
  width: 45px;
  height: 39px;
  border-radius: 50% 50% 10% 10%;
  background-color: #d63527;
  z-index: 5;
}
.countdownSection .decorations .santaWrapper .santa .body .sweater:before {
  content: "";
  top: 28px;
  left: 0px;
  position: absolute;
  width: 45px;
  height: 5px;
  background-color: #000;
  transform: rotate(1deg);
}
.countdownSection .decorations .santaWrapper .santa .body .sweater:after {
  content: "";
  top: 27px;
  left: 10px;
  position: absolute;
  width: 7px;
  height: 5px;
  background-color: #000;
  border: 1px solid #fff;
  border-radius: 3px;
  transform: rotate(1deg);
}
.countdownSection .decorations .santaWrapper .santa .body .hand {
  position: absolute;
}
.countdownSection .decorations .santaWrapper .santa .body .hand.left {
  top: 5px;
  left: 19px;
  width: 33px;
  height: 30px;
  overflow: hidden;
}
.countdownSection .decorations .santaWrapper .santa .body .hand.left .inner {
  position: absolute;
  top: 10px;
  left: 8px;
  width: 49px;
  z-index: 100;
  height: 7px;
  border-radius: 10px;
  transform: rotate(12deg);
  background-color: #d63527;
  animation: santa__hand-right 0.3s linear alternate infinite;
}
.countdownSection .decorations .santaWrapper .santa .body .hand.left .inner:before {
  content: "";
  position: absolute;
  width: 8px;
  height: 7px;
  top: -2px;
  left: -6px;
  background-color: #000;
  border-radius: 50%;
  transform: rotate(25deg);
}
.countdownSection .decorations .santaWrapper .santa .body .hand.right {
  top: 4px;
  left: 3px;
  width: 11px;
  height: 7px;
  border-radius: 10px;
  background-color: #d63527;
  transform: rotate(25deg);
  animation: santa__hand-left 0.3s linear alternate infinite;
}
.countdownSection .decorations .santaWrapper .santa .body .hand.right:before {
  content: "";
  position: absolute;
  width: 8px;
  height: 7px;
  top: -2px;
  left: -6px;
  background-color: #000;
  border-radius: 50%;
  transform: rotate(10deg);
}
.countdownSection .decorations .santaWrapper .rope {
  position: absolute;
  top: 92px;
  left: 84px;
  width: 182px;
  height: 33px;
  overflow: hidden;
  z-index: 10;
  transform: rotate(0deg);
  transform-origin: bottom right;
  animation: rope__right 0.3s linear alternate infinite;
}
.countdownSection .decorations .santaWrapper .rope.back {
  top: 85px;
  left: 105px;
  width: 149px;
  transform: rotate(4deg);
  z-index: 0;
  transform-origin: top left;
  animation: rope__left 0.3s linear alternate infinite;
}
.countdownSection .decorations .santaWrapper .rope:after {
  content: "";
  position: absolute;
  bottom: 0;
  left: -12px;
  width: 100%;
  height: 48px;
  border-bottom: 1px solid #fff;
  border-radius: 50%;
}
.countdownSection .decorations .santaWrapper .sled {
  position: absolute;
  bottom: -12px;
  left: 0px;
  width: 145px;
  height: 11px;
  transform: rotate(-3deg);
  border-bottom: 5px solid #690e00;
  border-right: 5px solid #690e00;
  border-radius: 10px;
  z-index: 10;
}
.countdownSection .decorations .santaWrapper .sled:before, .countdownSection .decorations .santaWrapper .sled:after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 5px;
  height: 5px;
  background-color: #690e00;
}
.countdownSection .decorations .santaWrapper .sled:before {
  top: 2px;
  left: 34px;
  height: 9px;
}
.countdownSection .decorations .santaWrapper .sled:after {
  top: 3px;
  left: 108px;
  width: 5px;
  height: 8px;
}
.countdownSection .decorations .santaWrapper .reindeer {
  position: absolute;
  width: 115px;
  height: 155px;
  top: 50px;
  right: 0;
  transform: rotate(14deg) translateX(calc(-100% - 30px));
  z-index: 0;
}
.countdownSection .decorations .santaWrapper .reindeer.second {
  top: 0;
  transform: rotate(14deg);
}
.countdownSection .decorations .santaWrapper .reindeer.second .rope {
  top: 70px;
  left: -55px;
  width: 155px;
  transform: rotate(-15deg);
  animation: rope__inner 0.3s linear alternate infinite;
}
.countdownSection .decorations .santaWrapper .reindeer:before {
  content: "";
  position: absolute;
  top: 65px;
  left: 76px;
  width: 8px;
  height: 31px;
  background-color: #520d0d;
  z-index: 10;
  transform: rotate(-55deg);
}
.countdownSection .decorations .santaWrapper .reindeer:after {
  content: "";
  position: absolute;
}
.countdownSection .decorations .santaWrapper .reindeer .face {
  position: absolute;
  width: 30px;
  height: 22px;
  top: 44px;
  left: 72px;
  border-radius: 10px 10px 50% 50%;
  transform: rotate(-3deg);
  background-color: #cca58b;
}
.countdownSection .decorations .santaWrapper .reindeer .face:before {
  content: "";
  position: absolute;
  background-color: #cca58b;
  width: 29px;
  height: 16px;
  border-radius: 50%;
  top: 0px;
  left: 11px;
  transform: rotate(-49deg);
}
.countdownSection .decorations .santaWrapper .reindeer .face:after {
  content: "";
  position: absolute;
  background-color: #000;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  top: -8px;
  left: 31px;
}
.countdownSection .decorations .santaWrapper .reindeer .face .ear {
  position: absolute;
  width: 21px;
  height: 11px;
  top: 4px;
  left: -18px;
  border-radius: 4px 0 50% 50%;
  transform: rotate(4deg);
  background-color: #cca58b;
}
.countdownSection .decorations .santaWrapper .reindeer .face .ear:before {
  content: "";
  position: absolute;
  top: -2px;
  left: 34px;
  width: 4px;
  height: 5px;
  border-radius: 50%;
  transform: rotate(-35deg);
  background-color: #000;
}
.countdownSection .decorations .santaWrapper .reindeer .face .horn {
  position: absolute;
  width: 29px;
  height: 4px;
  top: -7px;
  left: -21px;
  border-radius: 2px;
  transform: rotate(38deg);
  background-color: #f0dbc2;
}
.countdownSection .decorations .santaWrapper .reindeer .face .horn:before, .countdownSection .decorations .santaWrapper .reindeer .face .horn:after {
  content: "";
  position: absolute;
  background-color: #f0dbc2;
  border-radius: 2px;
}
.countdownSection .decorations .santaWrapper .reindeer .face .horn.left {
  top: -7px;
  left: -21px;
}
.countdownSection .decorations .santaWrapper .reindeer .face .horn.left:before {
  top: -4px;
  left: 6px;
  width: 14px;
  height: 4px;
  transform: rotate(43deg);
}
.countdownSection .decorations .santaWrapper .reindeer .face .horn.left:after {
  top: -4px;
  left: 13px;
  width: 14px;
  height: 4px;
  -webkit-transform: rotate(43deg);
  transform: rotate(53deg);
}
.countdownSection .decorations .santaWrapper .reindeer .face .horn.right {
  top: -12px;
  left: -6px;
  width: 24px;
  transform: rotate(62deg);
}
.countdownSection .decorations .santaWrapper .reindeer .face .horn.right:before {
  top: -3px;
  left: 5px;
  width: 10px;
  height: 4px;
  transform: rotate(43deg);
}
.countdownSection .decorations .santaWrapper .reindeer .face .horn.right:after {
  top: -3px;
  left: 11px;
  width: 10px;
  height: 4px;
  transform: rotate(53deg);
}
.countdownSection .decorations .santaWrapper .reindeer .body {
  position: absolute;
  width: 58px;
  height: 31px;
  top: 84px;
  left: 28px;
  border-radius: 50% 0;
  transform: rotate(-3deg);
  background-color: #cca58b;
}
.countdownSection .decorations .santaWrapper .reindeer .body:before {
  content: "";
  position: absolute;
  width: 46px;
  height: 26px;
  top: -15px;
  left: 32px;
  border-radius: 0 0 50% 50%;
  -webkit-transform: rotate(-3deg);
  transform: rotate(-55deg);
  background-color: #cca58b;
}
.countdownSection .decorations .santaWrapper .reindeer .body:after {
  content: "";
  position: absolute;
  width: 43px;
  height: 26px;
  top: -11px;
  left: 29px;
  border-radius: 0 0 50% 50%;
  -webkit-transform: rotate(-3deg);
  transform: rotate(-30deg);
  background-color: #cca58b;
}
.countdownSection .decorations .santaWrapper .reindeer .body .foot.front .inner {
  position: absolute;
  width: 40px;
  height: 8px;
  top: 13px;
  left: 35px;
  border-radius: 0 50%;
  transform: rotate(-17deg);
  background-color: #cca58b;
  animation: reindeer__leg-front 0.3s linear alternate infinite;
}
.countdownSection .decorations .santaWrapper .reindeer .body .foot.front .inner .extension {
  position: absolute;
  width: 28px;
  height: 8px;
  top: 3px;
  left: 100%;
  border-radius: 2px 50%;
  transform: rotate(131deg);
  background-color: #cca58b;
  transform-origin: top left;
  animation: reindeer__leg-front-extension 0.2s linear alternate infinite;
}
.countdownSection .decorations .santaWrapper .reindeer .body .foot.front .inner .extension:after {
  content: "";
  position: absolute;
  top: 0;
  right: -2px;
  width: 7px;
  height: 8px;
  border-radius: 2px;
  background-color: #000;
}
.countdownSection .decorations .santaWrapper .reindeer .body .foot.back .inner {
  position: absolute;
  width: 56px;
  height: 9px;
  top: 37px;
  left: -29px;
  border-radius: 0 50%;
  transform: rotate(-73deg);
  animation: reindeer__leg-back 0.3s linear alternate infinite;
}
.countdownSection .decorations .santaWrapper .reindeer .body .foot.back .inner:before {
  content: "";
  position: absolute;
  width: 25px;
  height: 16px;
  top: 4px;
  left: 25px;
  border-radius: 0 50%;
  transform: rotate(15deg);
  background-color: #cca58b;
}
.countdownSection .decorations .santaWrapper .reindeer .body .foot.back .inner:after {
  content: "";
  position: absolute;
  right: 0;
  width: 65%;
  height: 100%;
  background-color: #cca58b;
}
.countdownSection .decorations .santaWrapper .reindeer .body .foot.back .inner .extension {
  position: absolute;
  top: 0;
  left: 0;
  width: 28px;
  height: 8px;
  background: #cca58b;
  border-radius: 2px 50%;
  transform-origin: top right;
  animation: reindeer__leg-back-extension 0.2s linear alternate infinite;
}
.countdownSection .decorations .santaWrapper .reindeer .body .foot.back .inner .extension:after {
  content: "";
  position: absolute;
  width: 8px;
  height: 9px;
  top: -2px;
  left: -2px;
  border-radius: 2px 0 2px 2px;
  transform: rotate(14deg);
  background-color: #000;
}
.countdownSection .decorations .santaWrapper .reindeer .body .tail {
  position: absolute;
  width: 27px;
  height: 26px;
  top: 6px;
  left: -8px;
  border-radius: 50% 2px;
  transform: rotate(-17deg);
  background-color: #cca58b;
}
.countdownSection .decorations .santaWrapper .reindeer .body .tail:before {
  content: "";
  position: absolute;
  background-color: #cca58b;
  border-radius: 50%;
  top: -2px;
  left: -3px;
  width: 15px;
  height: 5px;
  transform: rotate(25deg);
}
.countdownSection .container {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  align-content: center;
  width: 90%;
  padding: 50px 0;
}
.countdownSection .container .counterWrapper {
  width: 100%;
  text-align: center;
  position: relative;
  z-index: 1;
}
.countdownSection .container .counterWrapper p {
  background-image: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCxcL1jUIlrzSSrTtWyjwatisU5E2FuaQpGXztSERO1YPXExrYRlsz1_TDQJ6f9POLJgSSUIZpPVg5r7aeBnHu2ogaSYrqjwxe3XAWPuBIWURY8YqQXjUUtXWWeFLymaRct4OCB7dixgdP/s0/pattern.jpg);
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  font-size: 100px;
}
.countdownSection .container .counterWrapper .countdown {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  align-content: center;
}
.countdownSection .container .counterWrapper .countdown .countdownProp {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  align-content: center;
  width: 240px;
  margin: 10px;
  font-size: 200px;
  line-height: 150px;
  background-image: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgor0zxlPtH9go59mfHe-IpHE0US6YyoOXcr7iiQY7qYcri_Zj-pIze-cz5HwTBydbBZ_khIQCZb454MtxMzBm_FyqOlgGAwNkL1nWu3OH6oDPGI7oHhgRk9vGSMd6o6kv8fP6b8_wBzZIy/s0/pattern1.png);
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  text-shadow: 0 0 100px #fff;
}
.countdownSection .container .counterWrapper .countdown .countdownProp:not(:first-child):before {
  content: ":";
}
.countdownSection .container .counterWrapper .countdown .countdownProp:after {
  content: attr(date-count);
  width: 100%;
  font-size: 20px;
  -webkit-text-fill-color: #fff;
  line-height: normal;
}
@media only screen and (max-width: 700px) {
  .countdownSection .decorations .decoration {
    width: 300px;
    height: 300px;
  }
  .countdownSection .container .counterWrapper p {
    font-size: 70px;
  }
  .countdownSection .container .counterWrapper .countdown {
    margin: 20px 0;
  }
  .countdownSection .container .counterWrapper .countdown .countdownProp {
    width: 120px;
    font-size: 100px;
    line-height: 80px;
  }
}
@media only screen and (max-width: 300px) {
  .countdownSection .decorations .santaWrapper {
    display: none;
  }
  .countdownSection .container .counterWrapper p {
    font-size: 50px;
  }
  .countdownSection .container .counterWrapper .countdown .countdownProp {
    display: block;
  }
  .countdownSection .container .counterWrapper .countdown .countdownProp:not(:first-child):before {
    display: none;
  }
  .countdownSection .container .counterWrapper .countdown .countdownProp:after {
    display: block;
  }
}
</style>

Código JavaScript
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script id="rendered-js" >
$(function () {
  $.fn.extend({
    countdown: function (props) {
      props = jQuery.extend({ //Default props
        until: new Date() },
      props);
      const state = {
        days: 0,
        hours: 0,
        minutes: 0,
        seconds: 0 };

      let render = props => {
        const { days, hours, minutes, seconds } = props;
        this.empty();
        this.append(`
        <div class="countdownProp" date-count="${days == 1 ? 'día' : 'días'}">${days}</div>
        <div class="countdownProp" date-count="${hours == 1 ? 'hora' : 'horas'}">${hours < 10 ? '0' + hours : hours}</div>
        <div class="countdownProp" date-count="${minutes == 1 ? 'minuto' : 'minutos'}">${minutes < 10 ? '0' + minutes : minutes}</div>
        <div class="countdownProp" date-count="${seconds == 1 ? 'segundo' : 'segundos'}">${seconds < 10 ? '0' + seconds : seconds}</div>
        `);
      };
      render(state);
      let update = setInterval(function () {
        let counter = props.until - new Date().getTime();
        if (counter <= 0) {
          clearInterval(update);
          return false;
        }
        state.days = Math.floor(counter / (1000 * 60 * 60 * 24));
        state.hours = Math.floor(counter % (1000 * 60 * 60 * 24) / (1000 * 60 * 60));
        state.minutes = Math.floor(counter % (1000 * 60 * 60) / (1000 * 60));
        state.seconds = Math.floor(counter % (1000 * 60) / 1000);
        render(state);
      }, 1000);
      return this;
    },
    snow: function (props) {
      props = jQuery.extend({ //Default props
        amount: 60 },
      props);
      let random = (min, max) => {
        return Math.random() * (max - min) + min;
      };
      let svg = '<svg class="snow" xmlns="http://www.w3.org/2000/svg">';
      for (let index = 0; index < props.amount; index++) {
        svg += `<circle class="particle" r="${random(1, 3)}" cx="${random(1, 100)}%" cy="-${random(1, 100)}" />`;
      }
      svg += '</svg>';
      this.replaceWith(svg);
    } });
  $('.countdown').countdown({
    until: new Date('Dec, 25, 2021') // you can add time optionally ('Dec, 25, 2020 00:00:00')
  });
  $('.snow').snow({
    amount: 100 //Number of particles
  });
});
</script>



Crédito: https://codepen.io/JorgeAguilar


Puedes visualizar la animación a pantalla completa en el siguiente enlace: Cuenta atrás para la Navidad